EFI_USBFN_IO_PROTOCOL.EventHandler
重复调用 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 | 总线速度更新已发出信号。 |
要求
标头:用户生成