EFI_USBFN_IO_PROTOCOL.Transfer
Transfer 函数处理将数据传输到指定终结点上的主机或从主机传输数据。
方向 | 说明 |
---|---|
EfiUsbEndpointDirectionDeviceTx | 在指定的终结点上启动发送传输,并立即返回。 |
EfiUsbEndpointDirectionDeviceRx | 在指定的终结点上启动接收传输,并使用可用数据立即返回。 |
语法
typedef
EFI_STATUS
(EFIAPI *EFI_USBFN_IO_TRANSFER) (
IN EFI_USBFN_IO_PROTOCOL *This,
IN UINT8 EndpointIndex,
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
IN OUT UINTN *BufferSize,
IN OUT VOID *Buffer
);
参数
This
指向 EFI_USBFN_IO_PROTOCOL 实例的指针。
EndpointIndex
指示需要对其执行 TX 或 RX 传输的终结点。
方向
终结点的方向。 有关详细信息,请参阅 EFI_USBFN_ENDPOINT_DIRECTION。
BufferSize
如果方向为 EfiUsbEndpointDirectionDeviceRx:输入时,缓冲区的大小(以字节为单位)。 输出时,缓冲区中返回的数据量(以字节为单位)。 如果方向为 EfiUsbEndpointDirectionDeviceTx:输入时,缓冲区的大小(以字节为单位)。 输出时,实际传输的数据量(以字节为单位)。
Buffer
如果方向为 EfiUsbEndpointDirectionDeviceRx:返回接收数据的缓冲区。 如果方向为 EfiUsbEndpointDirectionDeviceTx:包含要传输的数据的缓冲区。
此缓冲区使用 AllocateTransferBuffer 和 FreeTransferBuffer 函数分配和释放。 在收到 EfiUsbMsgEndpointStatusChangedRx 或 EfiUsbMsgEndpointStatusChangedTx 消息以及传输缓冲区的地址作为消息有效负载的一部分之前,此函数的调用方不得释放或重用缓冲区。 请参阅 EFI_USBFN_IO_PROTOCOL.EventHandler,详细了解各种消息及其有效负载。
返回值
此函数将返回下列值之一:
返回代码 | 说明 |
---|---|
EFI_SUCCESS | 函数已成功返回 |
EFI_INVALID_PARAMETER | 参数无效 |
EFI_DEVICE_ERROR | 此物理设备报告了一个错误。 |
EFI_NOT_READY | 物理设备正忙或未准备好处理此请求 |
注解
类驱动程序必须反复调用 EFI_USBFN_IO_PROTOCOL.EventHandler 以接收有关传输状态的更新,以及各终结点上传输的字节数。 更新传输状态后,必须使用提供给此方法的 Buffer 指针初始化 EFI_USBFN_TRANSFER_RESULT 结构的 Buffer 字段。 如果终结点的指定方向不正确,此函数将失败并出现 EFI_INVALID_PARAMETER 返回代码。
调用序列的概述显示在 UEFI 序列图中。
如果终结点的指定方向不正确,此函数将失败并出现 EFI_INVALID_PARAMETER 返回代码。
要求
标头:用户生成