/** @file Copyright (c) 2007, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Module Name: UsbDesc.h Abstract: Manage Usb Descriptor List Revision History **/ #ifndef _USB_DESCRIPTOR_H_ #define _USB_DESCRIPTOR_H_ enum { USB_MAX_INTERFACE_SETTING = 8 }; // // The RequestType in EFI_USB_DEVICE_REQUEST is composed of // three fields: One bit direction, 2 bit type, and 5 bit // target. // #define USB_REQUEST_TYPE(Dir, Type, Target) \ ((UINT8)((((Dir) == EfiUsbDataIn ? 0x01 : 0) << 7) | (Type) | (Target))) // // A common header for usb standard descriptor. // Each stand descriptor has a length and type. // #pragma pack(1) typedef struct { UINT8 Len; UINT8 Type; } USB_DESC_HEAD; #pragma pack() // // Each USB device has a device descriptor. Each device may // have several configures. Each configure contains several // interfaces. Each interface may have several settings. Each // setting has several endpoints. // // EFI_USB_..._DESCRIPTOR must be the first member of the // structure. // typedef struct { EFI_USB_ENDPOINT_DESCRIPTOR Desc; UINT8 Toggle; } USB_ENDPOINT_DESC; typedef struct { EFI_USB_INTERFACE_DESCRIPTOR Desc; USB_ENDPOINT_DESC **Endpoints; } USB_INTERFACE_SETTING; // // An interface may have several settings. Use a // fixed max number of settings to simplify code. // It should sufice in most environments. // typedef struct { USB_INTERFACE_SETTING* Settings[USB_MAX_INTERFACE_SETTING]; UINTN NumOfSetting; UINT8 ActiveIndex; // Index of active setting } USB_INTERFACE_DESC; typedef struct { EFI_USB_CONFIG_DESCRIPTOR Desc; USB_INTERFACE_DESC **Interfaces; } USB_CONFIG_DESC; typedef struct { EFI_USB_DEVICE_DESCRIPTOR Desc; USB_CONFIG_DESC **Configs; } USB_DEVICE_DESC; EFI_STATUS UsbCtrlRequest ( IN USB_DEVICE *UsbDev, IN EFI_USB_DATA_DIRECTION Direction, IN UINTN Type, IN UINTN Target, IN UINTN Request, IN UINT16 Value, IN UINT16 Index, IN OUT VOID *Buf, IN UINTN Length ); EFI_STATUS UsbGetMaxPacketSize0 ( IN USB_DEVICE *UsbDev ); VOID UsbFreeDevDesc ( IN USB_DEVICE_DESC *DevDesc ); EFI_USB_STRING_DESCRIPTOR* UsbGetOneString ( IN USB_DEVICE *UsbDev, IN UINT8 StringIndex, IN UINT16 LangId ); EFI_STATUS UsbBuildDescTable ( IN USB_DEVICE *UsbDev ); EFI_STATUS UsbSetAddress ( IN USB_DEVICE *UsbDev, IN UINT8 Address ); EFI_STATUS UsbSetConfig ( IN USB_DEVICE *UsbDev, IN UINT8 ConfigIndex ); EFI_STATUS UsbIoClearFeature ( IN EFI_USB_IO_PROTOCOL *UsbIo, IN UINTN Target, IN UINT16 Feature, IN UINT16 Index ); #endif