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
 |