4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Support for USB 2.0 standard.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __USB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __USB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Standard device request and request type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// USB 2.0 spec, Section 9.4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_STATUS 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_STATUS_REQ_TYPE_D 0x80 // Receiver : Device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_STATUS_REQ_TYPE_I 0x81 // Receiver : Interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_STATUS_REQ_TYPE_E 0x82 // Receiver : Endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_CLEAR_FEATURE 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_FEATURE 0x03
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_ADDRESS 0x05
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_ADDRESS_REQ_TYPE 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_DESCRIPTOR 0x06
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_DESCRIPTOR_REQ_TYPE 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_DESCRIPTOR 0x07
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_DESCRIPTOR_REQ_TYPE 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_CONFIGURATION 0x08
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_CONFIGURATION_REQ_TYPE 0x80
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_CONFIGURATION 0x09
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_CONFIGURATION_REQ_TYPE 0x00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_INTERFACE 0x0A
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_GET_INTERFACE_REQ_TYPE 0x81
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_INTERFACE 0x0B
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SET_INTERFACE_REQ_TYPE 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SYNCH_FRAME 0x0C
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_DEV_SYNCH_FRAME_REQ_TYPE 0x82
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// USB standard descriptors and reqeust
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack(1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Format of Setup Data for USB Device Requests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 RequestType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Request;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_DEVICE_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Standard Device Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.6.1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 BcdUSB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DeviceClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DeviceSubClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DeviceProtocol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MaxPacketSize0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 IdVendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 IdProduct;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 BcdDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 StrManufacturer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 StrProduct;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 StrSerialNumber;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 NumConfigurations;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_DEVICE_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Standard Configuration Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.6.3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 TotalLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 NumInterfaces;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ConfigurationValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Configuration;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Attributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MaxPower;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_CONFIG_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Standard Interface Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.6.5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 InterfaceNumber;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 AlternateSetting;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 NumEndpoints;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 InterfaceClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 InterfaceSubClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 InterfaceProtocol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Interface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_INTERFACE_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Standard Endpoint Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.6.6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 EndpointAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Attributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 MaxPacketSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Interval;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_ENDPOINT_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// UNICODE String Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// USB 2.0 spec, Section 9.6.7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 String[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_USB_STRING_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // USB request type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_TYPE_STANDARD = (0x00 << 5),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_TYPE_CLASS = (0x01 << 5),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_TYPE_VENDOR = (0x02 << 5),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Standard control transfer request type, or the value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // to fill in EFI_USB_DEVICE_REQUEST.Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_GET_STATUS = 0x00,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_CLEAR_FEATURE = 0x01,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SET_FEATURE = 0x03,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SET_ADDRESS = 0x05,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_GET_DESCRIPTOR = 0x06,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SET_DESCRIPTOR = 0x07,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_GET_CONFIG = 0x08,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SET_CONFIG = 0x09,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_GET_INTERFACE = 0x0A,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SET_INTERFACE = 0x0B,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_REQ_SYNCH_FRAME = 0x0C,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Usb control transfer target
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_TARGET_DEVICE = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_TARGET_INTERFACE = 0x01,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_TARGET_ENDPOINT = 0x02,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_TARGET_OTHER = 0x03,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // USB Descriptor types
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_DEVICE = 0x01,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_CONFIG = 0x02,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_STRING = 0x03,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_INTERFACE = 0x04,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_ENDPOINT = 0x05,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_HID = 0x21,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DESC_TYPE_REPORT = 0x22,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Features to be cleared by CLEAR_FEATURE requests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_FEATURE_ENDPOINT_HALT = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // USB endpoint types: 00: control, 01: isochronous, 10: bulk, 11: interrupt
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_CONTROL = 0x00,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_ISO = 0x01,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_BULK = 0x02,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_INTERRUPT = 0x03,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_TYPE_MASK = 0x03,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT_DIR_IN = 0x80,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //Use 200 ms to increase the error handling response time
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_INTERRUPT_DELAY = 2000000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_TYPES_DEFINITION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID constants definition, see Device Class Definition
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// for Human Interface Devices (HID) rev1.11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID standard GET_DESCRIPTOR request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_HID_GET_DESCRIPTOR_REQ_TYPE 0x81
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID specific requests.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_HID_CLASS_GET_REQ_TYPE 0xa1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_HID_CLASS_SET_REQ_TYPE 0x21
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report item format
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_FORMAT_SHORT 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_FORMAT_LONG 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Special tag indicating long items
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_TAG_LONG 15
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor item type (prefix bit 2,3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_TYPE_MAIN 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_TYPE_GLOBAL 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_TYPE_LOCAL 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_ITEM_TYPE_RESERVED 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor main item tags
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_TAG_INPUT 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_TAG_OUTPUT 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_TAG_FEATURE 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_TAG_END_COLLECTION 12
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor main item contents
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_CONSTANT 0x001
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_VARIABLE 0x002
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_RELATIVE 0x004
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_WRAP 0x008
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_NONLINEAR 0x010
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_NO_PREFERRED 0x020
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_NULL_STATE 0x040
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_VOLATILE 0x080
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_MAIN_ITEM_BUFFERED_BYTE 0x100
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor collection item types
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_COLLECTION_PHYSICAL 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_COLLECTION_APPLICATION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_COLLECTION_LOGICAL 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor global item tags
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_UNIT 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_REPORT_ID 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_PUSH 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_GLOBAL_ITEM_TAG_POP 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report descriptor local item tags
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_USAGE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_STRING_INDEX 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_LOCAL_ITEM_TAG_DELIMITER 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID report types
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_INPUT_REPORT 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_OUTPUT_REPORT 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define HID_FEATURE_REPORT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// HID class protocol request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_GET_REPORT_REQUEST 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_GET_IDLE_REQUEST 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_GET_PROTOCOL_REQUEST 0x03
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_SET_REPORT_REQUEST 0x09
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_SET_IDLE_REQUEST 0x0a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_USB_SET_PROTOCOL_REQUEST 0x0b
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack(1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Descriptor header for Report/Physical Descriptors
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// HID 1.1, section 6.2.1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct hid_class_descriptor {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 DescriptorLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_USB_HID_CLASS_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The HID descriptor identifies the length and type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// of subordinate descriptors for a device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// HID 1.1, section 6.2.1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct hid_descriptor {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DescriptorType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 BcdHID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 CountryCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 NumDescriptors;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_HID_CLASS_DESCRIPTOR HidClassDesc[1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_USB_HID_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#pragma pack()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif