283 lines
7.9 KiB
C
283 lines
7.9 KiB
C
/** @file
|
|
Helper functions for USB
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2012 - 2021, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#ifndef _USB_HELPER_H
|
|
#define _USB_HELPER_H
|
|
|
|
#define USB_HOST_CONTROLLER_DEVICE_SIGNATURE SIGNATURE_32 ('u', 'h', 'c', '3')
|
|
|
|
typedef struct {
|
|
UINTN Signature;
|
|
EFI_USB_IO_PROTOCOL *UsbIo;
|
|
EFI_USB2_HC_PROTOCOL *Usb2Hc;
|
|
EFI_USB3_HC_PROTOCOL Usb3Hc;
|
|
EFI_EVENT TimerEvent;
|
|
VOID *TimerContext;
|
|
EFI_USB3_HC_CALLBACK TimerCallback;
|
|
} USB_HOST_CONTROLLER_DEVICE;
|
|
|
|
#define USB_HOST_CONTROLLER_DEVICE_FROM_THIS(a) CR (a, USB_HOST_CONTROLLER_DEVICE, Usb3Hc, USB_HOST_CONTROLLER_DEVICE_SIGNATURE)
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct {
|
|
UINT8 Length;
|
|
UINT8 DescriptorType;
|
|
UINT16 SupportedLanID[1];
|
|
} EFI_USB_SUPPORTED_LANGUAGES;
|
|
|
|
#pragma pack()
|
|
|
|
EFI_STATUS
|
|
UsbGetStringtable (
|
|
IN USB_IO_DEVICE *UsbIoDev
|
|
);
|
|
|
|
EFI_STATUS
|
|
UsbGetAllConfigurations (
|
|
IN USB_IO_DEVICE *UsbIoDev
|
|
);
|
|
|
|
EFI_STATUS
|
|
UsbSetConfiguration (
|
|
IN USB_IO_DEVICE *UsbIoDev,
|
|
IN UINTN ConfigurationValue
|
|
);
|
|
|
|
EFI_STATUS
|
|
UsbSetDefaultConfiguration (
|
|
IN USB_IO_DEVICE *UsbIoDev
|
|
);
|
|
|
|
VOID
|
|
UsbDestroyAllConfiguration (
|
|
IN USB_IO_DEVICE *UsbIoDev
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortConnect (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortEnable (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortInReset (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortPowerApplied (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortLowSpeedDeviceAttached (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortSuspend (
|
|
IN UINT16 PortStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortConnectChange (
|
|
IN UINT16 PortChangeStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortEnableDisableChange (
|
|
IN UINT16 PortChangeStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortResetChange (
|
|
IN UINT16 PortChangeStatus
|
|
);
|
|
|
|
BOOLEAN
|
|
IsPortSuspendChange (
|
|
IN UINT16 PortChangeStatus
|
|
);
|
|
|
|
EFI_STATUS
|
|
IsDeviceDisconnected (
|
|
IN USB_IO_CONTROLLER_DEVICE *UsbIoController,
|
|
IN OUT BOOLEAN *Disconnected
|
|
);
|
|
|
|
UINT8
|
|
GetFirstAlternateSetting (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
);
|
|
|
|
VOID
|
|
SetFirstAlternateSetting (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
);
|
|
|
|
EFI_USB_HID_DESCRIPTOR*
|
|
GetHidDescriptor (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
);
|
|
|
|
INTERFACE_DESC_LIST_ENTRY*
|
|
FindInterfaceListEntry (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
);
|
|
|
|
ENDPOINT_DESC_LIST_ENTRY*
|
|
FindEndPointListEntry (
|
|
IN EFI_USB_IO_PROTOCOL *This,
|
|
IN UINT8 EndPointAddress
|
|
);
|
|
|
|
VOID
|
|
SetDataToggleBit (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN UINT8 EndpointAddr,
|
|
IN UINT8 DataToggle
|
|
);
|
|
|
|
EFI_STATUS
|
|
UsbSetDeviceAddress (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN UINT16 AddressValue,
|
|
OUT UINT32 *Status
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ControlTransfer (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN EFI_USB_DEVICE_REQUEST *Request,
|
|
IN EFI_USB_DATA_DIRECTION TransferDirection,
|
|
IN OUT VOID *Data OPTIONAL,
|
|
IN OUT UINTN *DataLength OPTIONAL,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB3_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
BulkTransfer (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB3_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL,
|
|
IN VOID *Context OPTIONAL,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
InterruptTransfer (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB3_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL,
|
|
IN VOID *Context OPTIONAL,
|
|
IN UINTN PollingInterval OPTIONAL,
|
|
OUT UINT32 *TransferResult
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
CancelIo (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINTN PollingInterval,
|
|
IN OUT UINT8 *DataToggle
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
GetRootHubPortStatus (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
OUT EFI_USB_PORT_STATUS *PortStatus
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
SetRootHubPortFeature (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ClearRootHubPortFeature (
|
|
IN EFI_USB3_HC_PROTOCOL *This,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
);
|
|
|
|
/**
|
|
|
|
Install Usb3Hc for Usb2Hc only driver
|
|
|
|
@param UsbIo EFI_USB_IO_PROTOCOL
|
|
@param Usb2Hc EFI_USB2_HC_PROTOCOL
|
|
|
|
@retval The installed EFI_USB3_HC_PROTOCOL
|
|
|
|
**/
|
|
EFI_USB3_HC_PROTOCOL*
|
|
InstallUsb3HcThunk (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN EFI_USB2_HC_PROTOCOL *Usb2Hc
|
|
);
|
|
|
|
/**
|
|
|
|
Uninstall Usb3Hc for Usb2Hc only driver
|
|
|
|
@param Usb2Hc EFI_USB2_HC_PROTOCOL
|
|
|
|
@retval The installed EFI_USB3_HC_PROTOCOL
|
|
|
|
**/
|
|
VOID
|
|
UninstallUsb3HcThunk (
|
|
IN EFI_USB3_HC_PROTOCOL *Usb3Hc
|
|
);
|
|
|
|
#endif
|