2 Copyright (c) 2006, Intel Corporation
3 All rights reserved. This program and the accompanying materials
4 are licensed and made available under the terms and conditions of the BSD License
5 which accompanies this distribution. The full text of the license may be found at
6 http://opensource.org/licenses/bsd-license.php
8 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
9 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 Header file for USB bus driver Interface
25 #ifndef _EFI_USB_BUS_H
26 #define _EFI_USB_BUS_H
29 #include <IndustryStandard/usb.h>
34 extern UINTN gUSBDebugLevel
;
35 extern UINTN gUSBErrorLevel
;
38 #define MICROSECOND 10000
39 #define ONESECOND (1000 * MICROSECOND)
40 #define BUSPOLLING_PERIOD ONESECOND
42 // We define some maximun value here
44 #define USB_MAXCONFIG 8
45 #define USB_MAXALTSETTING 4
46 #define USB_MAXINTERFACES 32
47 #define USB_MAXENDPOINTS 16
48 #define USB_MAXSTRINGS 16
49 #define USB_MAXLANID 16
50 #define USB_MAXCHILDREN 8
51 #define USB_MAXCONTROLLERS 4
53 #define USB_IO_CONTROLLER_SIGNATURE EFI_SIGNATURE_32 ('u', 's', 'b', 'd')
64 EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
65 } ENDPOINT_DESC_LIST_ENTRY
;
69 EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor
;
70 LIST_ENTRY EndpointDescListHead
;
71 } INTERFACE_DESC_LIST_ENTRY
;
75 EFI_USB_CONFIG_DESCRIPTOR CongfigDescriptor
;
76 LIST_ENTRY InterfaceDescListHead
;
77 UINTN ActiveInterface
;
78 } CONFIG_DESC_LIST_ENTRY
;
86 // This is used to form the USB Controller Handle
88 typedef struct usb_io_controller_device
{
91 EFI_USB_IO_PROTOCOL UsbIo
;
92 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
93 EFI_HANDLE HostController
;
94 UINT8 CurrentConfigValue
;
95 UINT8 InterfaceNumber
;
96 struct usb_io_device
*UsbDevice
;
99 BOOLEAN IsManagedByDriver
;
102 // Fields specified for USB Hub
105 UINT8 HubEndpointAddress
;
106 UINT8 StatusChangePort
;
107 UINT8 DownstreamPorts
;
110 struct usb_io_controller_device
*Parent
;
111 struct usb_io_device
*Children
[USB_MAXCHILDREN
];
112 } USB_IO_CONTROLLER_DEVICE
;
114 #define USB_IO_CONTROLLER_DEVICE_FROM_USB_IO_THIS(a) \
115 CR(a, USB_IO_CONTROLLER_DEVICE, UsbIo, USB_IO_CONTROLLER_SIGNATURE)
118 // This is used to keep the topology of USB bus
120 struct _usb_bus_controller_device
;
122 typedef struct usb_io_device
{
124 BOOLEAN IsConfigured
;
125 BOOLEAN IsSlowDevice
;
126 EFI_USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
127 LIST_ENTRY ConfigDescListHead
;
128 CONFIG_DESC_LIST_ENTRY
*ActiveConfig
;
129 UINT16 LangID
[USB_MAXLANID
];
131 struct _usb_bus_controller_device
*BusController
;
134 // Track the controller handle
136 UINT8 NumOfControllers
;
137 USB_IO_CONTROLLER_DEVICE
*UsbController
[USB_MAXCONTROLLERS
];
142 // Usb Bus Controller device strcuture
144 #define EFI_USB_BUS_PROTOCOL_GUID \
145 { 0x2B2F68CC, 0x0CD2, 0x44cf, { 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 } }
147 typedef struct _EFI_USB_BUS_PROTOCOL
{
149 } EFI_USB_BUS_PROTOCOL
;
151 #define USB_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('u', 'b', 'u', 's')
153 typedef struct _usb_bus_controller_device
{
156 EFI_USB_BUS_PROTOCOL BusIdentify
;
157 EFI_USB_HC_PROTOCOL
*UsbHCInterface
;
158 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
159 UINT8 AddressPool
[16];
161 } USB_BUS_CONTROLLER_DEVICE
;
163 #define USB_BUS_CONTROLLER_DEVICE_FROM_THIS(a) \
164 CR(a, USB_BUS_CONTROLLER_DEVICE, BusIdentify, USB_BUS_DEVICE_SIGNATURE)
170 extern EFI_DRIVER_BINDING_PROTOCOL gUsbBusDriverBinding
;
171 extern EFI_COMPONENT_NAME_PROTOCOL gUsbBusComponentName
;
172 extern EFI_GUID gUSBBusDriverGuid
;
175 // Usb Device Configuration functions
179 IN USB_IO_CONTROLLER_DEVICE
*Dev
184 IN USB_IO_DEVICE
*UsbIoDevice
188 UsbGetAllConfigurations (
189 IN USB_IO_DEVICE
*UsbIoDevice
193 UsbSetConfiguration (
194 IN USB_IO_DEVICE
*Dev
,
195 IN UINTN ConfigurationValue
199 UsbSetDefaultConfiguration (
200 IN USB_IO_DEVICE
*Dev
204 // Device Deconfiguration functions
207 UsbDestroyAllConfiguration (
208 IN USB_IO_DEVICE
*UsbIoDevice
213 IN USB_IO_CONTROLLER_DEVICE
*HubIoDevice
217 GetDeviceEndPointMaxPacketLength (
218 IN EFI_USB_IO_PROTOCOL
*UsbIo
,
219 IN UINT8 EndpointAddr
,
220 OUT UINT8
*MaxPacketLength
225 IN EFI_USB_IO_PROTOCOL
*UsbIo
,
226 IN UINT8 EndpointAddr
,
227 OUT UINT8
*DataToggle
232 IN EFI_USB_IO_PROTOCOL
*UsbIo
,
233 IN UINT8 EndpointAddr
,
237 INTERFACE_DESC_LIST_ENTRY
*
238 FindInterfaceListEntry (
239 IN EFI_USB_IO_PROTOCOL
*This
242 ENDPOINT_DESC_LIST_ENTRY
*
243 FindEndPointListEntry (
244 IN EFI_USB_IO_PROTOCOL
*This
,
245 IN UINT8 EndPointAddress
250 IsDeviceDisconnected (
251 IN USB_IO_CONTROLLER_DEVICE
*UsbIoController
,
252 IN OUT BOOLEAN
*Disconnected
256 UsbDeviceDeConfiguration (
257 IN USB_IO_DEVICE
*UsbIoDevice