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 函数分配和释放。 在收到 EfiUsbMsgEndpointStatusChangedRxEfiUsbMsgEndpointStatusChangedTx 消息以及传输缓冲区的地址作为消息有效负载的一部分之前,此函数的调用方不得释放或重用缓冲区。 请参阅 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 返回代码。

要求

标头:用户生成