]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h
MdeModulePkg: Add PEI USB drivers and related PPIs
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusPei / UsbPeim.h
1 /** @file
2 Usb Peim definition.
3
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved. <BR>
5
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions
8 of the BSD License which accompanies this distribution. The
9 full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef _PEI_USB_PEIM_H_
18 #define _PEI_USB_PEIM_H_
19
20
21 #include <PiPei.h>
22
23 #include <Ppi/UsbHostController.h>
24 #include <Ppi/Usb2HostController.h>
25 #include <Ppi/UsbIo.h>
26
27 #include <Library/DebugLib.h>
28 #include <Library/PeimEntryPoint.h>
29 #include <Library/PeiServicesLib.h>
30 #include <Library/BaseMemoryLib.h>
31 #include <Library/TimerLib.h>
32 #include <Library/PcdLib.h>
33
34 #include <IndustryStandard/Usb.h>
35
36 #define MAX_ROOT_PORT 2
37 #define MAX_ENDPOINT 16
38
39 #define USB_SLOW_SPEED_DEVICE 0x01
40 #define USB_FULL_SPEED_DEVICE 0x02
41
42 #define PEI_USB_DEVICE_SIGNATURE SIGNATURE_32 ('U', 's', 'b', 'D')
43 typedef struct {
44 UINTN Signature;
45 PEI_USB_IO_PPI UsbIoPpi;
46 EFI_PEI_PPI_DESCRIPTOR UsbIoPpiList;
47 UINT8 DeviceAddress;
48 UINT8 MaxPacketSize0;
49 UINT8 DeviceSpeed;
50 UINT8 DataToggle;
51 UINT8 IsHub;
52 UINT8 DownStreamPortNo;
53 UINT8 Reserved[2]; // Padding for IPF
54 UINTN AllocateAddress;
55 PEI_USB_HOST_CONTROLLER_PPI *UsbHcPpi;
56 PEI_USB2_HOST_CONTROLLER_PPI *Usb2HcPpi;
57 UINT8 ConfigurationData[1024];
58 EFI_USB_CONFIG_DESCRIPTOR *ConfigDesc;
59 EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDesc;
60 EFI_USB_ENDPOINT_DESCRIPTOR *EndpointDesc[MAX_ENDPOINT];
61 EFI_USB2_HC_TRANSACTION_TRANSLATOR Translator;
62 } PEI_USB_DEVICE;
63
64 #define PEI_USB_DEVICE_FROM_THIS(a) CR (a, PEI_USB_DEVICE, UsbIoPpi, PEI_USB_DEVICE_SIGNATURE)
65
66
67 /**
68 Submits control transfer to a target USB device.
69
70 @param PeiServices The pointer of EFI_PEI_SERVICES.
71 @param This The pointer of PEI_USB_IO_PPI.
72 @param Request USB device request to send.
73 @param Direction Specifies the data direction for the data stage.
74 @param Timeout Indicates the maximum timeout, in millisecond.
75 @param Data Data buffer to be transmitted or received from USB device.
76 @param DataLength The size (in bytes) of the data buffer.
77
78 @retval EFI_SUCCESS Transfer was completed successfully.
79 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resources.
80 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
81 @retval EFI_TIMEOUT Transfer failed due to timeout.
82 @retval EFI_DEVICE_ERROR Transfer failed due to host controller or device error.
83
84 **/
85 EFI_STATUS
86 EFIAPI
87 PeiUsbControlTransfer (
88 IN EFI_PEI_SERVICES **PeiServices,
89 IN PEI_USB_IO_PPI *This,
90 IN EFI_USB_DEVICE_REQUEST *Request,
91 IN EFI_USB_DATA_DIRECTION Direction,
92 IN UINT32 Timeout,
93 IN OUT VOID *Data, OPTIONAL
94 IN UINTN DataLength OPTIONAL
95 );
96
97 /**
98 Submits bulk transfer to a bulk endpoint of a USB device.
99
100 @param PeiServices The pointer of EFI_PEI_SERVICES.
101 @param This The pointer of PEI_USB_IO_PPI.
102 @param DeviceEndpoint Endpoint number and its direction in bit 7.
103 @param Data A pointer to the buffer of data to transmit
104 from or receive into.
105 @param DataLength The lenght of the data buffer.
106 @param Timeout Indicates the maximum time, in millisecond, which the
107 transfer is allowed to complete.
108
109 @retval EFI_SUCCESS The transfer was completed successfully.
110 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
111 @retval EFI_INVALID_PARAMETER Parameters are invalid.
112 @retval EFI_TIMEOUT The transfer failed due to timeout.
113 @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
114
115 **/
116 EFI_STATUS
117 EFIAPI
118 PeiUsbBulkTransfer (
119 IN EFI_PEI_SERVICES **PeiServices,
120 IN PEI_USB_IO_PPI *This,
121 IN UINT8 DeviceEndpoint,
122 IN OUT VOID *Data,
123 IN OUT UINTN *DataLength,
124 IN UINTN Timeout
125 );
126
127 /**
128 Get the usb interface descriptor.
129
130 @param PeiServices General-purpose services that are available to every PEIM.
131 @param This Indicates the PEI_USB_IO_PPI instance.
132 @param InterfaceDescriptor Request interface descriptor.
133
134
135 @retval EFI_SUCCESS Usb interface descriptor is obtained successfully.
136
137 **/
138 EFI_STATUS
139 EFIAPI
140 PeiUsbGetInterfaceDescriptor (
141 IN EFI_PEI_SERVICES **PeiServices,
142 IN PEI_USB_IO_PPI *This,
143 OUT EFI_USB_INTERFACE_DESCRIPTOR **InterfaceDescriptor
144 );
145
146 /**
147 Get the usb endpoint descriptor.
148
149 @param PeiServices General-purpose services that are available to every PEIM.
150 @param This Indicates the PEI_USB_IO_PPI instance.
151 @param EndpointIndex The valid index of the specified endpoint.
152 @param EndpointDescriptor Request endpoint descriptor.
153
154 @retval EFI_SUCCESS Usb endpoint descriptor is obtained successfully.
155 @retval EFI_NOT_FOUND Usb endpoint descriptor is NOT found.
156
157 **/
158 EFI_STATUS
159 EFIAPI
160 PeiUsbGetEndpointDescriptor (
161 IN EFI_PEI_SERVICES **PeiServices,
162 IN PEI_USB_IO_PPI *This,
163 IN UINT8 EndpointIndex,
164 OUT EFI_USB_ENDPOINT_DESCRIPTOR **EndpointDescriptor
165 );
166
167 /**
168 Reset the port and re-configure the usb device.
169
170 @param PeiServices General-purpose services that are available to every PEIM.
171 @param This Indicates the PEI_USB_IO_PPI instance.
172
173 @retval EFI_SUCCESS Usb device is reset and configured successfully.
174 @retval Others Other failure occurs.
175
176 **/
177 EFI_STATUS
178 EFIAPI
179 PeiUsbPortReset (
180 IN EFI_PEI_SERVICES **PeiServices,
181 IN PEI_USB_IO_PPI *This
182 );
183
184 /**
185 Send reset signal over the given root hub port.
186
187 @param PeiServices Describes the list of possible PEI Services.
188 @param UsbHcPpi The pointer of PEI_USB_HOST_CONTROLLER_PPI instance.
189 @param Usb2HcPpi The pointer of PEI_USB2_HOST_CONTROLLER_PPI instance.
190 @param PortNum The port to be reset.
191 @param RetryIndex The retry times.
192
193 **/
194 VOID
195 ResetRootPort (
196 IN EFI_PEI_SERVICES **PeiServices,
197 IN PEI_USB_HOST_CONTROLLER_PPI *UsbHcPpi,
198 IN PEI_USB2_HOST_CONTROLLER_PPI *Usb2HcPpi,
199 IN UINT8 PortNum,
200 IN UINT8 RetryIndex
201 );
202
203 #endif