/** @file\r
- Support for USB 1.1 standard.\r
+ Support for USB 2.0 standard.\r
\r
- Copyright (c) 2006 - 2007, Intel Corporation\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#ifndef __USB_H__\r
#define __USB_H__\r
\r
+//\r
+// Subset of Class and Subclass definitions from USB Specs\r
+//\r
+\r
+//\r
+// Usb mass storage class code\r
+//\r
+#define USB_MASS_STORE_CLASS 0x08\r
+\r
+//\r
+// Usb mass storage subclass code, specify the command set used.\r
+//\r
+#define USB_MASS_STORE_RBC 0x01 ///< Reduced Block Commands\r
+#define USB_MASS_STORE_8020I 0x02 ///< SFF-8020i, typically a CD/DVD device\r
+#define USB_MASS_STORE_QIC 0x03 ///< Typically a tape device\r
+#define USB_MASS_STORE_UFI 0x04 ///< Typically a floppy disk driver device\r
+#define USB_MASS_STORE_8070I 0x05 ///< SFF-8070i, typically a floppy disk driver device.\r
+#define USB_MASS_STORE_SCSI 0x06 ///< SCSI transparent command set\r
+\r
+//\r
+// Usb mass storage protocol code, specify the transport protocol\r
+//\r
+#define USB_MASS_STORE_CBI0 0x00 ///< CBI protocol with command completion interrupt\r
+#define USB_MASS_STORE_CBI1 0x01 ///< CBI protocol without command completion interrupt\r
+#define USB_MASS_STORE_BOT 0x50 ///< Bulk-Only Transport\r
+\r
//\r
// Standard device request and request type\r
-// By [Spec-USB20/Chapter-9.4]\r
+// USB 2.0 spec, Section 9.4\r
//\r
#define USB_DEV_GET_STATUS 0x00\r
#define USB_DEV_GET_STATUS_REQ_TYPE_D 0x80 // Receiver : Device\r
// USB standard descriptors and reqeust\r
//\r
#pragma pack(1)\r
+\r
+///\r
+/// Format of Setup Data for USB Device Requests\r
+/// USB 2.0 spec, Section 9.3\r
+///\r
typedef struct {\r
UINT8 RequestType;\r
UINT8 Request;\r
UINT16 Length;\r
} USB_DEVICE_REQUEST;\r
\r
+///\r
+/// Standard Device Descriptor\r
+/// USB 2.0 spec, Section 9.6.1\r
+///\r
typedef struct {\r
UINT8 Length;\r
UINT8 DescriptorType;\r
UINT8 NumConfigurations;\r
} USB_DEVICE_DESCRIPTOR;\r
\r
+///\r
+/// Standard Configuration Descriptor\r
+/// USB 2.0 spec, Section 9.6.3\r
+///\r
typedef struct {\r
UINT8 Length;\r
UINT8 DescriptorType;\r
UINT8 MaxPower;\r
} USB_CONFIG_DESCRIPTOR;\r
\r
+///\r
+/// Standard Interface Descriptor\r
+/// USB 2.0 spec, Section 9.6.5\r
+///\r
typedef struct {\r
UINT8 Length;\r
UINT8 DescriptorType;\r
UINT8 Interface;\r
} USB_INTERFACE_DESCRIPTOR;\r
\r
+///\r
+/// Standard Endpoint Descriptor\r
+/// USB 2.0 spec, Section 9.6.6\r
+///\r
typedef struct {\r
UINT8 Length;\r
UINT8 DescriptorType;\r
UINT8 Interval;\r
} USB_ENDPOINT_DESCRIPTOR;\r
\r
+///\r
+/// UNICODE String Descriptor\r
+/// USB 2.0 spec, Section 9.6.7\r
+///\r
typedef struct {\r
UINT8 Length;\r
UINT8 DescriptorType;\r
USB_DESC_TYPE_INTERFACE = 0x04,\r
USB_DESC_TYPE_ENDPOINT = 0x05,\r
USB_DESC_TYPE_HID = 0x21,\r
+ USB_DESC_TYPE_REPORT = 0x22,\r
\r
//\r
// Features to be cleared by CLEAR_FEATURE requests\r
\r
\r
//\r
-// HID constants definition, see HID rev1.0\r
+// HID constants definition, see Device Class Definition\r
+// for Human Interface Devices (HID) rev1.11\r
+//\r
+\r
+//\r
+// HID standard GET_DESCRIPTOR request.\r
//\r
+#define USB_HID_GET_DESCRIPTOR_REQ_TYPE 0x81\r
+\r
+//\r
+// HID specific requests.\r
+//\r
+#define USB_HID_CLASS_GET_REQ_TYPE 0xa1\r
+#define USB_HID_CLASS_SET_REQ_TYPE 0x21\r
\r
//\r
// HID report item format\r
#define EFI_USB_SET_PROTOCOL_REQUEST 0x0b\r
\r
#pragma pack(1)\r
-//\r
-// Descriptor header for Report/Physical Descriptors\r
-//\r
+///\r
+/// Descriptor header for Report/Physical Descriptors\r
+/// HID 1.1, section 6.2.1\r
+///\r
typedef struct hid_class_descriptor {\r
UINT8 DescriptorType;\r
UINT16 DescriptorLength;\r
} EFI_USB_HID_CLASS_DESCRIPTOR;\r
\r
+///\r
+/// The HID descriptor identifies the length and type\r
+/// of subordinate descriptors for a device.\r
+/// HID 1.1, section 6.2.1\r
+///\r
typedef struct hid_descriptor {\r
UINT8 Length;\r
UINT8 DescriptorType;\r