重复调用 EventHandler 函数以接收 USB 总线状态更新、接收和传输终结点状态更改,并在终结点 0 上设置数据包。
语法
typedef
EFI_STATUS
(EFIAPI * EFI_USBFN_IO_EVENTHANDLER) (
IN EFI_USBFN_IO_PROTOCOL *This,
OUT EFI_USBFN_MESSAGE *Message,
IN OUT UINTN *PayloadSize,
OUT EFI_USBFN_MESSAGE_PAYLOAD *Payload
);
参数
This
指向 EFI_USBFN_IO_PROTOCOL 实例的指针。
消息
指示启动此通知的事件的 EFI_USBFN_MESSAGE 值。
PayloadSize
输入时,有效负载指向的内存大小。 输出时,有效负载中返回的数据量。
有效负载
指向 EFI_USBFN_MESSAGE_PAYLOAD 实例的指针,用于返回当前消息的其他有效负载。
返回值
函数返回以下值:
| 返回代码 | 说明 |
|---|---|
| EFI_SUCCESS | 函数已成功返回。 |
| EFI_INVALID_PARAMETER | 参数无效。 |
| EFI_DEVICE_ERROR | 此物理设备报告了一个错误。 |
| EFI_NOT_READY | 物理设备正忙或未准备好处理此请求。 |
| EFI_BUFFER_TOO_SMALL | 提供的缓冲区不够大,无法容纳消息有效负载。 |
注解
类驱动程序必须反复调用 EventHandler,才能接收有关不同终结点的传输状态和其上传输的字节数的更新。 有关详细信息,请参阅 UEFI 序列图。
一些消息具有在提供的缓冲区中返回的关联有效负载。 下表描述各种消息及其有效负载。
| Message | 有效负载 | 说明 |
|---|---|---|
| EfiUsbMsgSetupPacket | EFI_USB_DEVICE_REQUEST | 收到 SETUP 数据包。 |
| EfiUsbMsgEndpointStatusChangedRx | EFI_USBFN_TRANSFER_RESULT | 某些请求的数据已传输到主机。 类驱动程序负责确定是否需要重新发送任何剩余数据。 提供给 EFI_USBFN_IO_PROTOCOL.Transfer 的缓冲区必须与有效负载的“缓冲区”字段相同。 |
| EfiUsbMsgEndpointStatusChangedTx | EFI_USBFN_TRANSFER_RESULT | 某些请求的数据已从主机接收。 类驱动程序负责确定是否需要等待任何剩余数据。 提供给 EFI_USBFN_IO_PROTOCOL.Transfer 的缓冲区必须与有效负载的“缓冲区”字段相同。 |
| EfiUsbMsgBusEventReset | 无 | RESET 总线事件已发出信号。 |
| EfiUsbMsgBusEventDetach | 无 | DETACH 总线事件已发出信号。 |
| EfiUsbMsgBusEventAttach | 无 | ATTACH 总线事件已发出信号。 |
| EfiUsbMsgBusEventSuspend | 无 | SUSPEND 总线事件已发出信号。 |
| EfiUsbMsgBusEventResume | 无 | RESUME 总线事件已发出信号。 |
| EfiUsbMsgBusEventSpeed | EFI_USB_BUS_SPEED | 总线速度更新已发出信号。 |
要求
标头:用户生成