1 /** @file
2 Constants definitions for Usb Hub Peim
3 
4 Copyright (c) 2006 - 2014, 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_HUB_PEIM_H_
18 #define _PEI_HUB_PEIM_H_
19 
20 
21 //
22 // Hub feature numbers
23 //
24 #define C_HUB_LOCAL_POWER   0
25 #define C_HUB_OVER_CURRENT  1
26 
27 //
28 // Hub class code & sub class code
29 //
30 #define CLASS_CODE_HUB      0x09
31 #define SUB_CLASS_CODE_HUB  0
32 
33 //
34 // Hub Status & Hub Change bit masks
35 //
36 #define HUB_STATUS_LOCAL_POWER  0x0001
37 #define HUB_STATUS_OVERCURRENT  0x0002
38 
39 #define HUB_CHANGE_LOCAL_POWER  0x0001
40 #define HUB_CHANGE_OVERCURRENT  0x0002
41 
42 //
43 // Hub Characteristics
44 //
45 #define HUB_CHAR_LPSM     0x0003
46 #define HUB_CHAR_COMPOUND 0x0004
47 #define HUB_CHAR_OCPM     0x0018
48 
49 //
50 // Standard hub request and request type
51 // By [Spec-USB20/Chapter-11.24]
52 //
53 #define USB_HUB_CLEAR_FEATURE               0x01
54 #define USB_HUB_CLEAR_FEATURE_REQ_TYPE      0x20
55 
56 #define USB_HUB_CLEAR_FEATURE_PORT          0x01
57 #define USB_HUB_CLEAR_FEATURE_PORT_REQ_TYPE 0x23
58 
59 #define USB_HUB_GET_BUS_STATE               0x02
60 #define USB_HUB_GET_BUS_STATE_REQ_TYPE      0xA3
61 
62 #define USB_HUB_GET_DESCRIPTOR              0x06
63 #define USB_HUB_GET_DESCRIPTOR_REQ_TYPE     0xA0
64 
65 #define USB_HUB_GET_HUB_STATUS              0x00
66 #define USB_HUB_GET_HUB_STATUS_REQ_TYPE     0xA0
67 
68 #define USB_HUB_GET_PORT_STATUS             0x00
69 #define USB_HUB_GET_PORT_STATUS_REQ_TYPE    0xA3
70 
71 #define USB_HUB_SET_DESCRIPTOR              0x07
72 #define USB_HUB_SET_DESCRIPTOR_REQ_TYPE     0x20
73 
74 #define USB_HUB_SET_HUB_FEATURE             0x03
75 #define USB_HUB_SET_HUB_FEATURE_REQ_TYPE    0x20
76 
77 #define USB_HUB_SET_PORT_FEATURE            0x03
78 #define USB_HUB_SET_PORT_FEATURE_REQ_TYPE   0x23
79 
80 #define USB_RT_HUB        (USB_TYPE_CLASS | USB_RECIP_DEVICE)
81 #define USB_RT_PORT       (USB_TYPE_CLASS | USB_RECIP_OTHER)
82 
83 #define USB_HUB_REQ_SET_DEPTH               12
84 
85 #define MAXBYTES  8
86 #pragma pack(1)
87 //
88 // Hub descriptor, the last two fields are of variable lenght.
89 //
90 typedef struct {
91   UINT8 Length;
92   UINT8 DescriptorType;
93   UINT8 NbrPorts;
94   UINT8 HubCharacteristics[2];
95   UINT8 PwrOn2PwrGood;
96   UINT8 HubContrCurrent;
97   UINT8 Filler[MAXBYTES];
98 } EFI_USB_HUB_DESCRIPTOR;
99 
100 typedef struct {
101   UINT16  HubStatus;
102   UINT16  HubChangeStatus;
103 } EFI_USB_HUB_STATUS;
104 
105 #pragma pack()
106 /**
107   Get a given hub port status.
108 
109   @param  PeiServices   General-purpose services that are available to every PEIM.
110   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
111   @param  Port          Usb hub port number (starting from 1).
112   @param  PortStatus    Current Hub port status and change status.
113 
114   @retval EFI_SUCCESS       Port status is obtained successfully.
115   @retval EFI_DEVICE_ERROR  Cannot get the port status due to a hardware error.
116   @retval Others            Other failure occurs.
117 
118 **/
119 EFI_STATUS
120 PeiHubGetPortStatus (
121   IN EFI_PEI_SERVICES       **PeiServices,
122   IN PEI_USB_IO_PPI         *UsbIoPpi,
123   IN  UINT8                 Port,
124   OUT UINT32                *PortStatus
125   );
126 
127 /**
128   Set specified feature to a given hub port.
129 
130   @param  PeiServices   General-purpose services that are available to every PEIM.
131   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
132   @param  Port          Usb hub port number (starting from 1).
133   @param  Value         New feature value.
134 
135   @retval EFI_SUCCESS       Port feature is set successfully.
136   @retval EFI_DEVICE_ERROR  Cannot set the port feature due to a hardware error.
137   @retval Others            Other failure occurs.
138 
139 **/
140 EFI_STATUS
141 PeiHubSetPortFeature (
142   IN EFI_PEI_SERVICES       **PeiServices,
143   IN PEI_USB_IO_PPI         *UsbIoPpi,
144   IN  UINT8                 Port,
145   IN  UINT8                 Value
146   );
147 
148 /**
149   Set specified feature to a given hub.
150 
151   @param  PeiServices   General-purpose services that are available to every PEIM.
152   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
153   @param  Value         New feature value.
154 
155   @retval EFI_SUCCESS       Port feature is set successfully.
156   @retval EFI_DEVICE_ERROR  Cannot set the port feature due to a hardware error.
157   @retval Others            Other failure occurs.
158 
159 **/
160 EFI_STATUS
161 PeiHubSetHubFeature (
162   IN EFI_PEI_SERVICES       **PeiServices,
163   IN PEI_USB_IO_PPI         *UsbIoPpi,
164   IN  UINT8                 Value
165   );
166 
167 /**
168   Get a given hub status.
169 
170   @param  PeiServices   General-purpose services that are available to every PEIM.
171   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
172   @param  HubStatus     Current Hub status and change status.
173 
174   @retval EFI_SUCCESS       Hub status is obtained successfully.
175   @retval EFI_DEVICE_ERROR  Cannot get the hub status due to a hardware error.
176   @retval Others            Other failure occurs.
177 
178 **/
179 EFI_STATUS
180 PeiHubGetHubStatus (
181   IN EFI_PEI_SERVICES       **PeiServices,
182   IN PEI_USB_IO_PPI         *UsbIoPpi,
183   OUT UINT32                *HubStatus
184   );
185 
186 /**
187   Clear specified feature on a given hub port.
188 
189   @param  PeiServices   General-purpose services that are available to every PEIM.
190   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
191   @param  Port          Usb hub port number (starting from 1).
192   @param  Value         Feature value that will be cleared from the hub port.
193 
194   @retval EFI_SUCCESS       Port feature is cleared successfully.
195   @retval EFI_DEVICE_ERROR  Cannot clear the port feature due to a hardware error.
196   @retval Others            Other failure occurs.
197 
198 **/
199 EFI_STATUS
200 PeiHubClearPortFeature (
201   IN EFI_PEI_SERVICES       **PeiServices,
202   IN PEI_USB_IO_PPI         *UsbIoPpi,
203   IN  UINT8                 Port,
204   IN  UINT8                 Value
205   );
206 
207 /**
208   Clear specified feature on a given hub.
209 
210   @param  PeiServices   General-purpose services that are available to every PEIM.
211   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
212   @param  Value         Feature value that will be cleared from the hub port.
213 
214   @retval EFI_SUCCESS       Hub feature is cleared successfully.
215   @retval EFI_DEVICE_ERROR  Cannot clear the hub feature due to a hardware error.
216   @retval Others            Other failure occurs.
217 
218 **/
219 EFI_STATUS
220 PeiHubClearHubFeature (
221   IN EFI_PEI_SERVICES       **PeiServices,
222   IN PEI_USB_IO_PPI         *UsbIoPpi,
223   IN  UINT8                 Value
224   );
225 
226 /**
227   Get a given hub descriptor.
228 
229   @param  PeiServices    General-purpose services that are available to every PEIM.
230   @param  UsbIoPpi       Indicates the PEI_USB_IO_PPI instance.
231   @param  DescriptorSize The length of Hub Descriptor buffer.
232   @param  HubDescriptor  Caller allocated buffer to store the hub descriptor if
233                          successfully returned.
234 
235   @retval EFI_SUCCESS       Hub descriptor is obtained successfully.
236   @retval EFI_DEVICE_ERROR  Cannot get the hub descriptor due to a hardware error.
237   @retval Others            Other failure occurs.
238 
239 **/
240 EFI_STATUS
241 PeiGetHubDescriptor (
242   IN EFI_PEI_SERVICES         **PeiServices,
243   IN PEI_USB_IO_PPI           *UsbIoPpi,
244   IN UINTN                    DescriptorSize,
245   OUT EFI_USB_HUB_DESCRIPTOR  *HubDescriptor
246   );
247 
248 /**
249   Configure a given hub.
250 
251   @param  PeiServices    General-purpose services that are available to every PEIM.
252   @param  PeiUsbDevice   Indicating the hub controller device that will be configured
253 
254   @retval EFI_SUCCESS       Hub configuration is done successfully.
255   @retval EFI_DEVICE_ERROR  Cannot configure the hub due to a hardware error.
256 
257 **/
258 EFI_STATUS
259 PeiDoHubConfig (
260   IN EFI_PEI_SERVICES         **PeiServices,
261   IN PEI_USB_DEVICE           *PeiUsbDevice
262   );
263 
264 /**
265   Send reset signal over the given root hub port.
266 
267   @param  PeiServices    General-purpose services that are available to every PEIM.
268   @param  UsbIoPpi       Indicates the PEI_USB_IO_PPI instance.
269   @param  PortNum        Usb hub port number (starting from 1).
270 
271 **/
272 VOID
273 PeiResetHubPort (
274   IN EFI_PEI_SERVICES    **PeiServices,
275   IN PEI_USB_IO_PPI      *UsbIoPpi,
276   IN UINT8               PortNum
277   );
278 
279 #endif
280 
281 
282