昇腾社区首页
中文
注册

halHdcFastSend

函数功能

HDC免拷贝快速发送消息接口。

函数原型

hdcError_t halHdcFastSend(HDC_SESSION session, struct drvHdcFastSendMsg msg, UINT64 flag, UINT32 timeout)

参数说明

参数名

说明

session

指定发送消息的session。

类型:HDC_SESSION

msg

发送的消息。

类型:drvHdcFastSendMsg

  • srcDataAddr和srcCtrlAddr不能同时为0。
  • dstDataAddr和dstCtrlAddr不能同时为0。
  • dataLen和ctrlLen不能同时为0。

flag

阻塞标志(若处于阻塞状态时,可通过session close完成强制退出)。

  • 0:阻塞死等,如果发送通道阻塞则会等待通道空闲,死等。
  • 1:不阻塞,如果发送通道阻塞则不发送数据,立马返回。
  • 2:阻塞直到超时,如果发送通道阻塞则会等待通道空闲,直到超时。

类型:UINT64。

timeout

当flag取值为“2"时,设置阻塞超时时间,单位毫秒。

类型:UINT32。

返回值说明

  • 0:DRV_ERROR_NONE,成功。
  • 3:DRV_ERROR_INVALID_VALUE,参数错误。
  • 16:DRV_ERROR_WAIT_TIMEOUT,发送超时(可能原因是获取不到空闲的通道资源)。
  • 25:DRV_ERROR_SOCKET_CLOSE,session通道被关闭。
  • 27:DRV_ERROR_SEND_MESG,消息发送失败。
  • 34:DRV_ERROR_DEVICE_NOT_READY,等待设备响应(可能原因是PCIE已断链或设备处于休眠未唤醒状态)。
  • 46:DRV_ERROR_OPER_NOT_PERMITTED,无权限访问(一般原因是pid不合法)。

halHdcFastSend接口是异步发送接口,在发送数据时,底层通过DMA快速搬运,源地址一直都是使用的用户申请的内存地址。

因此,使用此接口时,建议用户对消息收发做二次管理,当对端接收到数据后,需要返回响应消息给发送端。在发送端收到响应消息后,用户就可以对内存进行释放或者复用。

约束说明

  • 使用此接口时,需要提前通过HDC申请好内存。
  • halHdcFastSend、halHdcFastRecv接口,接收、发送数据buffer或控制消息buffer需同时给定。例如发送数据,则需要给定源数据大页内存地址和接收侧的目的大页内存地址。