git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			374 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			374 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| Copyright (c) 2006, 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:
 | |
| 
 | |
|     UsbDxeLib.h
 | |
| 
 | |
|  Abstract:
 | |
| 
 | |
|    Common Dxe Libarary  for USB
 | |
|    Add Constants & structure definitions for Usb HID
 | |
| 
 | |
|  Revision History
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #ifndef _USB_DXE_LIB_H
 | |
| #define _USB_DXE_LIB_H
 | |
| 
 | |
| //
 | |
| // define the timeout time as 3ms
 | |
| //
 | |
| #define TIMEOUT_VALUE 3 * 1000
 | |
| 
 | |
| //
 | |
| // HID constants definition, see HID rev1.0
 | |
| //
 | |
| //
 | |
| // HID report item format
 | |
| //
 | |
| #define HID_ITEM_FORMAT_SHORT 0
 | |
| #define HID_ITEM_FORMAT_LONG  1
 | |
| 
 | |
| //
 | |
| // Special tag indicating long items
 | |
| //
 | |
| #define HID_ITEM_TAG_LONG 15
 | |
| 
 | |
| //
 | |
| // HID report descriptor item type (prefix bit 2,3)
 | |
| //
 | |
| #define HID_ITEM_TYPE_MAIN      0
 | |
| #define HID_ITEM_TYPE_GLOBAL    1
 | |
| #define HID_ITEM_TYPE_LOCAL     2
 | |
| #define HID_ITEM_TYPE_RESERVED  3
 | |
| 
 | |
| //
 | |
| // HID report descriptor main item tags
 | |
| //
 | |
| #define HID_MAIN_ITEM_TAG_INPUT             8
 | |
| #define HID_MAIN_ITEM_TAG_OUTPUT            9
 | |
| #define HID_MAIN_ITEM_TAG_FEATURE           11
 | |
| #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION  10
 | |
| #define HID_MAIN_ITEM_TAG_END_COLLECTION    12
 | |
| 
 | |
| //
 | |
| // HID report descriptor main item contents
 | |
| //
 | |
| #define HID_MAIN_ITEM_CONSTANT      0x001
 | |
| #define HID_MAIN_ITEM_VARIABLE      0x002
 | |
| #define HID_MAIN_ITEM_RELATIVE      0x004
 | |
| #define HID_MAIN_ITEM_WRAP          0x008
 | |
| #define HID_MAIN_ITEM_NONLINEAR     0x010
 | |
| #define HID_MAIN_ITEM_NO_PREFERRED  0x020
 | |
| #define HID_MAIN_ITEM_NULL_STATE    0x040
 | |
| #define HID_MAIN_ITEM_VOLATILE      0x080
 | |
| #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
 | |
| 
 | |
| //
 | |
| // HID report descriptor collection item types
 | |
| //
 | |
| #define HID_COLLECTION_PHYSICAL     0
 | |
| #define HID_COLLECTION_APPLICATION  1
 | |
| #define HID_COLLECTION_LOGICAL      2
 | |
| 
 | |
| //
 | |
| // HID report descriptor global item tags
 | |
| //
 | |
| #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE        0
 | |
| #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM   1
 | |
| #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM   2
 | |
| #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM  3
 | |
| #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM  4
 | |
| #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT     5
 | |
| #define HID_GLOBAL_ITEM_TAG_UNIT              6
 | |
| #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE       7
 | |
| #define HID_GLOBAL_ITEM_TAG_REPORT_ID         8
 | |
| #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT      9
 | |
| #define HID_GLOBAL_ITEM_TAG_PUSH              10
 | |
| #define HID_GLOBAL_ITEM_TAG_POP               11
 | |
| 
 | |
| //
 | |
| // HID report descriptor local item tags
 | |
| //
 | |
| #define HID_LOCAL_ITEM_TAG_USAGE              0
 | |
| #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM      1
 | |
| #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM      2
 | |
| #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX   3
 | |
| #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
 | |
| #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
 | |
| #define HID_LOCAL_ITEM_TAG_STRING_INDEX       7
 | |
| #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM     8
 | |
| #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM     9
 | |
| #define HID_LOCAL_ITEM_TAG_DELIMITER          10
 | |
| 
 | |
| //
 | |
| // HID usage tables
 | |
| //
 | |
| #define HID_USAGE_PAGE    0xffff0000
 | |
| 
 | |
| #define HID_UP_GENDESK    0x00010000
 | |
| #define HID_UP_KEYBOARD   0x00070000
 | |
| #define HID_UP_LED        0x00080000
 | |
| #define HID_UP_BUTTON     0x00090000
 | |
| #define HID_UP_CONSUMER   0x000c0000
 | |
| #define HID_UP_DIGITIZER  0x000d0000
 | |
| #define HID_UP_PID        0x000f0000
 | |
| 
 | |
| #define HID_USAGE         0x0000ffff
 | |
| 
 | |
| #define HID_GD_POINTER    0x00010001
 | |
| #define HID_GD_MOUSE      0x00010002
 | |
| #define HID_GD_JOYSTICK   0x00010004
 | |
| #define HID_GD_GAMEPAD    0x00010005
 | |
| #define HID_GD_HATSWITCH  0x00010039
 | |
| 
 | |
| //
 | |
| // HID report types
 | |
| //
 | |
| #define HID_INPUT_REPORT    1
 | |
| #define HID_OUTPUT_REPORT   2
 | |
| #define HID_FEATURE_REPORT  3
 | |
| 
 | |
| //
 | |
| // HID device quirks.
 | |
| //
 | |
| #define HID_QUIRK_INVERT  0x01
 | |
| #define HID_QUIRK_NOTOUCH 0x02
 | |
| 
 | |
| //
 | |
| // HID class protocol request
 | |
| //
 | |
| #define EFI_USB_GET_REPORT_REQUEST    0x01
 | |
| #define EFI_USB_GET_IDLE_REQUEST      0x02
 | |
| #define EFI_USB_GET_PROTOCOL_REQUEST  0x03
 | |
| #define EFI_USB_SET_REPORT_REQUEST    0x09
 | |
| #define EFI_USB_SET_IDLE_REQUEST      0x0a
 | |
| #define EFI_USB_SET_PROTOCOL_REQUEST  0x0b
 | |
| 
 | |
| #pragma pack(1)
 | |
| //
 | |
| // Descriptor header for Report/Physical Descriptors
 | |
| //
 | |
| typedef struct hid_class_descriptor {
 | |
|   UINT8   DescriptorType;
 | |
|   UINT16  DescriptorLength;
 | |
| } EFI_USB_HID_CLASS_DESCRIPTOR;
 | |
| 
 | |
| typedef struct hid_descriptor {
 | |
|   UINT8                         Length;
 | |
|   UINT8                         DescriptorType;
 | |
|   UINT16                        BcdHID;
 | |
|   UINT8                         CountryCode;
 | |
|   UINT8                         NumDescriptors;
 | |
|   EFI_USB_HID_CLASS_DESCRIPTOR  HidClassDesc[1];
 | |
| } EFI_USB_HID_DESCRIPTOR;
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetHidDescriptor (
 | |
|   IN  EFI_USB_IO_PROTOCOL        *UsbIo,
 | |
|   IN  UINT8                      InterfaceNum,
 | |
|   OUT EFI_USB_HID_DESCRIPTOR     *HidDescriptor
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetReportDescriptor (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT8                   InterfaceNum,
 | |
|   IN  UINT16                  DescriptorSize,
 | |
|   OUT UINT8                   *DescriptorBuffer
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetProtocolRequest (
 | |
|   IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN UINT8                   Interface,
 | |
|   IN UINT8                   *Protocol
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbSetProtocolRequest (
 | |
|   IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN UINT8                   Interface,
 | |
|   IN UINT8                   Protocol
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbSetIdleRequest (
 | |
|   IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN UINT8                   Interface,
 | |
|   IN UINT8                   ReportId,
 | |
|   IN UINT8                   Duration
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetIdleRequest (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT8                   Interface,
 | |
|   IN  UINT8                   ReportId,
 | |
|   OUT UINT8                   *Duration
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbSetReportRequest (
 | |
|   IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN UINT8                   Interface,
 | |
|   IN UINT8                   ReportId,
 | |
|   IN UINT8                   ReportType,
 | |
|   IN UINT16                  ReportLen,
 | |
|   IN UINT8                   *Report
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UsbGetReportRequest (
 | |
|   IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN UINT8                   Interface,
 | |
|   IN UINT8                   ReportId,
 | |
|   IN UINT8                   ReportType,
 | |
|   IN UINT16                  ReportLen,
 | |
|   IN UINT8                   *Report
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Get Device Descriptor
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbGetDescriptor (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  Value,
 | |
|   IN  UINT16                  Index,
 | |
|   IN  UINT16                  DescriptorLength,
 | |
|   OUT VOID                    *Descriptor,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Set Device Descriptor
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbSetDescriptor (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  Value,
 | |
|   IN  UINT16                  Index,
 | |
|   IN  UINT16                  DescriptorLength,
 | |
|   IN  VOID                    *Descriptor,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Get device Interface
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbGetDeviceInterface (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  Index,
 | |
|   OUT UINT8                   *AltSetting,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Set device interface
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbSetDeviceInterface (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  InterfaceNo,
 | |
|   IN  UINT16                  AltSetting,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Get device configuration
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbGetDeviceConfiguration (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   OUT UINT8                   *ConfigValue,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Set device configuration
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbSetDeviceConfiguration (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  Value,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| //  Set Device Feature
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbSetDeviceFeature (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  EFI_USB_RECIPIENT       Recipient,
 | |
|   IN  UINT16                  Value,
 | |
|   IN  UINT16                  Target,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Clear Device Feature
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbClearDeviceFeature (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  EFI_USB_RECIPIENT       Recipient,
 | |
|   IN  UINT16                  Value,
 | |
|   IN  UINT16                  Target,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| //  Get Device Status
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbGetDeviceStatus (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  EFI_USB_RECIPIENT       Recipient,
 | |
|   IN  UINT16                  Target,
 | |
|   OUT UINT16                  *DevStatus,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // The following APIs are not basic library, but they are common used.
 | |
| //
 | |
| //
 | |
| // Usb Get String
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbGetString (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT16                  LangID,
 | |
|   IN  UINT8                   Index,
 | |
|   IN  VOID                    *Buf,
 | |
|   IN  UINTN                   BufSize,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Clear endpoint stall
 | |
| //
 | |
| EFI_STATUS
 | |
| UsbClearEndpointHalt (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | |
|   IN  UINT8                   EndpointNo,
 | |
|   OUT UINT32                  *Status
 | |
|   );
 | |
| 
 | |
| #endif
 |