]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Bus/Usb/UsbBus/Dxe/usbbus.h
Fix track EDKT104: If a module use PCD, MSA of this module should use PcdLib libraryC...
[mirror_edk2.git] / EdkModulePkg / Bus / Usb / UsbBus / Dxe / usbbus.h
CommitLineData
878ddf1f 1/*++\r
2Copyright (c) 2006, Intel Corporation \r
3All rights reserved. This program and the accompanying materials \r
4are licensed and made available under the terms and conditions of the BSD License \r
5which accompanies this distribution. The full text of the license may be found at \r
6http://opensource.org/licenses/bsd-license.php \r
7 \r
8THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
9WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
10\r
11 Module Name:\r
12\r
13 usbbus.h\r
14\r
15 Abstract:\r
16\r
17 Header file for USB bus driver Interface\r
18\r
19 Revision History\r
20\r
21\r
22\r
23--*/\r
24\r
25#ifndef _EFI_USB_BUS_H\r
26#define _EFI_USB_BUS_H\r
27\r
28\r
f0ec738d 29#include <IndustryStandard/Usb.h>\r
30#include "hub.h"\r
31#include "usbutil.h"\r
878ddf1f 32\r
33//#ifdef EFI_DEBUG\r
34extern UINTN gUSBDebugLevel;\r
35extern UINTN gUSBErrorLevel;\r
36//#endif\r
37\r
38#define MICROSECOND 10000\r
39#define ONESECOND (1000 * MICROSECOND)\r
40#define BUSPOLLING_PERIOD ONESECOND\r
41//\r
42// We define some maximun value here\r
43//\r
44#define USB_MAXCONFIG 8\r
45#define USB_MAXALTSETTING 4\r
46#define USB_MAXINTERFACES 32\r
47#define USB_MAXENDPOINTS 16\r
48#define USB_MAXSTRINGS 16\r
49#define USB_MAXLANID 16\r
50#define USB_MAXCHILDREN 8\r
51#define USB_MAXCONTROLLERS 4\r
52\r
53#define USB_IO_CONTROLLER_SIGNATURE EFI_SIGNATURE_32 ('u', 's', 'b', 'd')\r
54\r
55typedef struct {\r
56 LIST_ENTRY Link;\r
57 UINT16 StringIndex;\r
58 CHAR16 *String;\r
59} STR_LIST_ENTRY;\r
60\r
61typedef struct {\r
62 LIST_ENTRY Link;\r
63 UINT16 Toggle;\r
64 EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;\r
65} ENDPOINT_DESC_LIST_ENTRY;\r
66\r
67typedef struct {\r
68 LIST_ENTRY Link;\r
69 EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;\r
70 LIST_ENTRY EndpointDescListHead;\r
71} INTERFACE_DESC_LIST_ENTRY;\r
72\r
73typedef struct {\r
74 LIST_ENTRY Link;\r
75 EFI_USB_CONFIG_DESCRIPTOR CongfigDescriptor;\r
76 LIST_ENTRY InterfaceDescListHead;\r
77 UINTN ActiveInterface;\r
78} CONFIG_DESC_LIST_ENTRY;\r
79\r
80//\r
81// Forward declaring\r
82//\r
83struct usb_io_device;\r
84\r
85//\r
86// This is used to form the USB Controller Handle\r
87//\r
88typedef struct usb_io_controller_device {\r
89 UINTN Signature;\r
90 EFI_HANDLE Handle;\r
91 EFI_USB_IO_PROTOCOL UsbIo;\r
92 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
93 EFI_HANDLE HostController;\r
94 UINT8 CurrentConfigValue;\r
95 UINT8 InterfaceNumber;\r
96 struct usb_io_device *UsbDevice;\r
97\r
98 BOOLEAN IsUsbHub;\r
99 BOOLEAN IsManagedByDriver;\r
100\r
101 //\r
102 // Fields specified for USB Hub\r
103 //\r
104 EFI_EVENT HubNotify;\r
105 UINT8 HubEndpointAddress;\r
106 UINT8 StatusChangePort;\r
107 UINT8 DownstreamPorts;\r
108\r
109 UINT8 ParentPort;\r
110 struct usb_io_controller_device *Parent;\r
111 struct usb_io_device *Children[USB_MAXCHILDREN];\r
112} USB_IO_CONTROLLER_DEVICE;\r
113\r
114#define USB_IO_CONTROLLER_DEVICE_FROM_USB_IO_THIS(a) \\r
115 CR(a, USB_IO_CONTROLLER_DEVICE, UsbIo, USB_IO_CONTROLLER_SIGNATURE)\r
116\r
117//\r
118// This is used to keep the topology of USB bus\r
119//\r
120struct _usb_bus_controller_device;\r
121\r
122typedef struct usb_io_device {\r
123 UINT8 DeviceAddress;\r
124 BOOLEAN IsConfigured;\r
125 BOOLEAN IsSlowDevice;\r
126 EFI_USB_DEVICE_DESCRIPTOR DeviceDescriptor;\r
127 LIST_ENTRY ConfigDescListHead;\r
128 CONFIG_DESC_LIST_ENTRY *ActiveConfig;\r
129 UINT16 LangID[USB_MAXLANID];\r
130\r
131 struct _usb_bus_controller_device *BusController;\r
132\r
133 //\r
134 // Track the controller handle\r
135 //\r
136 UINT8 NumOfControllers;\r
137 USB_IO_CONTROLLER_DEVICE *UsbController[USB_MAXCONTROLLERS];\r
138\r
139} USB_IO_DEVICE;\r
140\r
141//\r
142// Usb Bus Controller device strcuture\r
143//\r
144#define EFI_USB_BUS_PROTOCOL_GUID \\r
145 { 0x2B2F68CC, 0x0CD2, 0x44cf, { 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 } }\r
146\r
147typedef struct _EFI_USB_BUS_PROTOCOL {\r
148 UINT64 Reserved;\r
149} EFI_USB_BUS_PROTOCOL;\r
150\r
151#define USB_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('u', 'b', 'u', 's')\r
152\r
153typedef struct _usb_bus_controller_device {\r
154 UINTN Signature;\r
155\r
156 EFI_USB_BUS_PROTOCOL BusIdentify;\r
157 EFI_USB_HC_PROTOCOL *UsbHCInterface;\r
158 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
159 UINT8 AddressPool[16];\r
160 USB_IO_DEVICE *Root;\r
161} USB_BUS_CONTROLLER_DEVICE;\r
162\r
163#define USB_BUS_CONTROLLER_DEVICE_FROM_THIS(a) \\r
164 CR(a, USB_BUS_CONTROLLER_DEVICE, BusIdentify, USB_BUS_DEVICE_SIGNATURE)\r
165\r
166\r
167//\r
168// Global Variables\r
169//\r
170extern EFI_DRIVER_BINDING_PROTOCOL gUsbBusDriverBinding;\r
171extern EFI_COMPONENT_NAME_PROTOCOL gUsbBusComponentName;\r
172extern EFI_GUID gUSBBusDriverGuid;\r
173\r
174//\r
175// Usb Device Configuration functions\r
176//\r
177BOOLEAN\r
178IsHub (\r
179 IN USB_IO_CONTROLLER_DEVICE *Dev\r
180 );\r
181\r
182EFI_STATUS\r
183UsbGetStringtable (\r
184 IN USB_IO_DEVICE *UsbIoDevice\r
185 );\r
186\r
187EFI_STATUS\r
188UsbGetAllConfigurations (\r
189 IN USB_IO_DEVICE *UsbIoDevice\r
190 );\r
191\r
192EFI_STATUS\r
193UsbSetConfiguration (\r
194 IN USB_IO_DEVICE *Dev,\r
195 IN UINTN ConfigurationValue\r
196 );\r
197\r
198EFI_STATUS\r
199UsbSetDefaultConfiguration (\r
200 IN USB_IO_DEVICE *Dev\r
201 );\r
202\r
203//\r
204// Device Deconfiguration functions\r
205//\r
206VOID\r
207UsbDestroyAllConfiguration (\r
208 IN USB_IO_DEVICE *UsbIoDevice\r
209 );\r
210\r
211EFI_STATUS\r
212DoHubConfig (\r
213 IN USB_IO_CONTROLLER_DEVICE *HubIoDevice\r
214 );\r
215\r
216VOID\r
217GetDeviceEndPointMaxPacketLength (\r
218 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
219 IN UINT8 EndpointAddr,\r
220 OUT UINT8 *MaxPacketLength\r
221 );\r
222\r
223VOID\r
224GetDataToggleBit (\r
225 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
226 IN UINT8 EndpointAddr,\r
227 OUT UINT8 *DataToggle\r
228 );\r
229\r
230VOID\r
231SetDataToggleBit (\r
232 IN EFI_USB_IO_PROTOCOL *UsbIo,\r
233 IN UINT8 EndpointAddr,\r
234 IN UINT8 DataToggle\r
235 );\r
236\r
237INTERFACE_DESC_LIST_ENTRY *\r
238FindInterfaceListEntry (\r
239 IN EFI_USB_IO_PROTOCOL *This\r
240 );\r
241\r
242ENDPOINT_DESC_LIST_ENTRY *\r
243FindEndPointListEntry (\r
244 IN EFI_USB_IO_PROTOCOL *This,\r
245 IN UINT8 EndPointAddress\r
246 );\r
247\r
248\r
249EFI_STATUS\r
250IsDeviceDisconnected (\r
251 IN USB_IO_CONTROLLER_DEVICE *UsbIoController,\r
252 IN OUT BOOLEAN *Disconnected\r
253 );\r
254\r
255EFI_STATUS\r
256UsbDeviceDeConfiguration (\r
257 IN USB_IO_DEVICE *UsbIoDevice\r
258 );\r
259\r
260\r
261#endif\r