]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/Usb.h
MdePkg/PiFirmwareFile: fix undefined behavior in FFS_FILE_SIZE
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Usb.h
index f64d96c87c3dc37baa95312384dda1511849a7f1..72d3ecfc5bef78cbd4037aaf5f212b91937252cc 100644 (file)
@@ -1,23 +1,43 @@
 /** @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
@@ -71,6 +96,10 @@ typedef struct {
   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
@@ -88,6 +117,10 @@ typedef struct {
   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
@@ -99,6 +132,10 @@ typedef struct {
   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
@@ -111,6 +148,10 @@ typedef struct {
   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
@@ -120,6 +161,10 @@ typedef struct {
   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
@@ -129,7 +174,7 @@ typedef struct {
 #pragma pack()\r
 \r
 \r
-enum {\r
+typedef enum {\r
   //\r
   // USB request type\r
   //\r
@@ -170,6 +215,7 @@ enum {
   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
@@ -191,12 +237,24 @@ enum {
   //Use 200 ms to increase the error handling response time\r
   //\r
   EFI_USB_INTERRUPT_DELAY = 2000000\r
-};\r
+} USB_TYPES_DEFINITION;\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
@@ -294,14 +352,20 @@ enum {
 #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