]> git.proxmox.com Git - mirror_edk2.git/blob - EdkModulePkg/Bus/Usb/UsbBus/Dxe/usbbus.h
b32620342c01703f7b4c6888e924ad60b8ba3651
[mirror_edk2.git] / EdkModulePkg / Bus / Usb / UsbBus / Dxe / usbbus.h
1 /*++
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
7
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.
10
11 Module Name:
12
13 usbbus.h
14
15 Abstract:
16
17 Header file for USB bus driver Interface
18
19 Revision History
20
21
22
23 --*/
24
25 #ifndef _EFI_USB_BUS_H
26 #define _EFI_USB_BUS_H
27
28
29 #include <IndustryStandard/usb.h>
30 #include "Hub.h"
31 #include "Usbutil.h"
32
33 //#ifdef EFI_DEBUG
34 extern UINTN gUSBDebugLevel;
35 extern UINTN gUSBErrorLevel;
36 //#endif
37
38 #define MICROSECOND 10000
39 #define ONESECOND (1000 * MICROSECOND)
40 #define BUSPOLLING_PERIOD ONESECOND
41 //
42 // We define some maximun value here
43 //
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
52
53 #define USB_IO_CONTROLLER_SIGNATURE EFI_SIGNATURE_32 ('u', 's', 'b', 'd')
54
55 typedef struct {
56 LIST_ENTRY Link;
57 UINT16 StringIndex;
58 CHAR16 *String;
59 } STR_LIST_ENTRY;
60
61 typedef struct {
62 LIST_ENTRY Link;
63 UINT16 Toggle;
64 EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
65 } ENDPOINT_DESC_LIST_ENTRY;
66
67 typedef struct {
68 LIST_ENTRY Link;
69 EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
70 LIST_ENTRY EndpointDescListHead;
71 } INTERFACE_DESC_LIST_ENTRY;
72
73 typedef struct {
74 LIST_ENTRY Link;
75 EFI_USB_CONFIG_DESCRIPTOR CongfigDescriptor;
76 LIST_ENTRY InterfaceDescListHead;
77 UINTN ActiveInterface;
78 } CONFIG_DESC_LIST_ENTRY;
79
80 //
81 // Forward declaring
82 //
83 struct usb_io_device;
84
85 //
86 // This is used to form the USB Controller Handle
87 //
88 typedef struct usb_io_controller_device {
89 UINTN Signature;
90 EFI_HANDLE Handle;
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;
97
98 BOOLEAN IsUsbHub;
99 BOOLEAN IsManagedByDriver;
100
101 //
102 // Fields specified for USB Hub
103 //
104 EFI_EVENT HubNotify;
105 UINT8 HubEndpointAddress;
106 UINT8 StatusChangePort;
107 UINT8 DownstreamPorts;
108
109 UINT8 ParentPort;
110 struct usb_io_controller_device *Parent;
111 struct usb_io_device *Children[USB_MAXCHILDREN];
112 } USB_IO_CONTROLLER_DEVICE;
113
114 #define USB_IO_CONTROLLER_DEVICE_FROM_USB_IO_THIS(a) \
115 CR(a, USB_IO_CONTROLLER_DEVICE, UsbIo, USB_IO_CONTROLLER_SIGNATURE)
116
117 //
118 // This is used to keep the topology of USB bus
119 //
120 struct _usb_bus_controller_device;
121
122 typedef struct usb_io_device {
123 UINT8 DeviceAddress;
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];
130
131 struct _usb_bus_controller_device *BusController;
132
133 //
134 // Track the controller handle
135 //
136 UINT8 NumOfControllers;
137 USB_IO_CONTROLLER_DEVICE *UsbController[USB_MAXCONTROLLERS];
138
139 } USB_IO_DEVICE;
140
141 //
142 // Usb Bus Controller device strcuture
143 //
144 #define EFI_USB_BUS_PROTOCOL_GUID \
145 { 0x2B2F68CC, 0x0CD2, 0x44cf, { 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 } }
146
147 typedef struct _EFI_USB_BUS_PROTOCOL {
148 UINT64 Reserved;
149 } EFI_USB_BUS_PROTOCOL;
150
151 #define USB_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('u', 'b', 'u', 's')
152
153 typedef struct _usb_bus_controller_device {
154 UINTN Signature;
155
156 EFI_USB_BUS_PROTOCOL BusIdentify;
157 EFI_USB_HC_PROTOCOL *UsbHCInterface;
158 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
159 UINT8 AddressPool[16];
160 USB_IO_DEVICE *Root;
161 } USB_BUS_CONTROLLER_DEVICE;
162
163 #define USB_BUS_CONTROLLER_DEVICE_FROM_THIS(a) \
164 CR(a, USB_BUS_CONTROLLER_DEVICE, BusIdentify, USB_BUS_DEVICE_SIGNATURE)
165
166
167 //
168 // Global Variables
169 //
170 extern EFI_DRIVER_BINDING_PROTOCOL gUsbBusDriverBinding;
171 extern EFI_COMPONENT_NAME_PROTOCOL gUsbBusComponentName;
172 extern EFI_GUID gUSBBusDriverGuid;
173
174 //
175 // Usb Device Configuration functions
176 //
177 BOOLEAN
178 IsHub (
179 IN USB_IO_CONTROLLER_DEVICE *Dev
180 );
181
182 EFI_STATUS
183 UsbGetStringtable (
184 IN USB_IO_DEVICE *UsbIoDevice
185 );
186
187 EFI_STATUS
188 UsbGetAllConfigurations (
189 IN USB_IO_DEVICE *UsbIoDevice
190 );
191
192 EFI_STATUS
193 UsbSetConfiguration (
194 IN USB_IO_DEVICE *Dev,
195 IN UINTN ConfigurationValue
196 );
197
198 EFI_STATUS
199 UsbSetDefaultConfiguration (
200 IN USB_IO_DEVICE *Dev
201 );
202
203 //
204 // Device Deconfiguration functions
205 //
206 VOID
207 UsbDestroyAllConfiguration (
208 IN USB_IO_DEVICE *UsbIoDevice
209 );
210
211 EFI_STATUS
212 DoHubConfig (
213 IN USB_IO_CONTROLLER_DEVICE *HubIoDevice
214 );
215
216 VOID
217 GetDeviceEndPointMaxPacketLength (
218 IN EFI_USB_IO_PROTOCOL *UsbIo,
219 IN UINT8 EndpointAddr,
220 OUT UINT8 *MaxPacketLength
221 );
222
223 VOID
224 GetDataToggleBit (
225 IN EFI_USB_IO_PROTOCOL *UsbIo,
226 IN UINT8 EndpointAddr,
227 OUT UINT8 *DataToggle
228 );
229
230 VOID
231 SetDataToggleBit (
232 IN EFI_USB_IO_PROTOCOL *UsbIo,
233 IN UINT8 EndpointAddr,
234 IN UINT8 DataToggle
235 );
236
237 INTERFACE_DESC_LIST_ENTRY *
238 FindInterfaceListEntry (
239 IN EFI_USB_IO_PROTOCOL *This
240 );
241
242 ENDPOINT_DESC_LIST_ENTRY *
243 FindEndPointListEntry (
244 IN EFI_USB_IO_PROTOCOL *This,
245 IN UINT8 EndPointAddress
246 );
247
248
249 EFI_STATUS
250 IsDeviceDisconnected (
251 IN USB_IO_CONTROLLER_DEVICE *UsbIoController,
252 IN OUT BOOLEAN *Disconnected
253 );
254
255 EFI_STATUS
256 UsbDeviceDeConfiguration (
257 IN USB_IO_DEVICE *UsbIoDevice
258 );
259
260
261 #endif