~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/ipxe/src/include/ipxe/efi/Protocol/UsbHostController.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/** @file
 
2
  EFI_USB_HC_PROTOCOL as defined in EFI 1.10.
 
3
 
 
4
  The USB Host Controller Protocol is used by code, typically USB bus drivers,
 
5
  running in the EFI boot services environment, to perform data transactions
 
6
  over a USB bus. In addition, it provides an abstraction for the root hub of the USB bus.
 
7
 
 
8
  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
 
9
  This program and the accompanying materials
 
10
  are licensed and made available under the terms and conditions of the BSD License
 
11
  which accompanies this distribution.  The full text of the license may be found at
 
12
  http://opensource.org/licenses/bsd-license.php
 
13
 
 
14
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 
15
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 
16
 
 
17
**/
 
18
 
 
19
#ifndef _USB_HOSTCONTROLLER_H_
 
20
#define _USB_HOSTCONTROLLER_H_
 
21
 
 
22
FILE_LICENCE ( BSD3 );
 
23
 
 
24
#include <ipxe/efi/Protocol/Usb2HostController.h>
 
25
 
 
26
#define EFI_USB_HC_PROTOCOL_GUID \
 
27
  { \
 
28
    0xf5089266, 0x1aa0, 0x4953, {0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19 } \
 
29
  }
 
30
 
 
31
///
 
32
/// Forward reference for pure ANSI compatability
 
33
///
 
34
typedef struct _EFI_USB_HC_PROTOCOL EFI_USB_HC_PROTOCOL;
 
35
 
 
36
//
 
37
// Protocol definitions
 
38
//
 
39
 
 
40
/**
 
41
  Provides software reset for the USB host controller.
 
42
 
 
43
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
44
  @param  Attributes            A bit mask of the reset operation to perform.
 
45
 
 
46
  @retval EFI_SUCCESS           The reset operation succeeded.
 
47
  @retval EFI_UNSUPPORTED       The type of reset specified by Attributes is not currently supported
 
48
                                by the host controller hardware.
 
49
  @retval EFI_INVALID_PARAMETER Attributes is not valid.
 
50
  @retval EFI_DEVICE_ERROR      An error was encountered while attempting to perform the reset operation.
 
51
 
 
52
**/
 
53
typedef
 
54
EFI_STATUS
 
55
(EFIAPI *EFI_USB_HC_PROTOCOL_RESET)(
 
56
  IN EFI_USB_HC_PROTOCOL     *This,
 
57
  IN UINT16                  Attributes
 
58
  );
 
59
 
 
60
/**
 
61
  Retrieves current state of the USB host controller.
 
62
 
 
63
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
64
  @param  State                 A pointer to the EFI_USB_HC_STATE data structure that
 
65
                                indicates current state of the USB host controller.
 
66
 
 
67
  @retval EFI_SUCCESS           The state information of the host controller was returned in State.
 
68
  @retval EFI_INVALID_PARAMETER State is NULL.
 
69
  @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the host controller's
 
70
                                current state.
 
71
 
 
72
**/
 
73
typedef
 
74
EFI_STATUS
 
75
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_STATE)(
 
76
  IN  EFI_USB_HC_PROTOCOL    *This,
 
77
  OUT EFI_USB_HC_STATE       *State
 
78
  );
 
79
 
 
80
/**
 
81
  Sets the USB host controller to a specific state.
 
82
 
 
83
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
84
  @param  State                 Indicates the state of the host controller that will be set.
 
85
 
 
86
  @retval EFI_SUCCESS           The USB host controller was successfully placed in the state specified by
 
87
                                State.
 
88
  @retval EFI_INVALID_PARAMETER State is NULL.
 
89
  @retval EFI_DEVICE_ERROR      Failed to set the state specified by State due to device error.
 
90
 
 
91
**/
 
92
typedef
 
93
EFI_STATUS
 
94
(EFIAPI *EFI_USB_HC_PROTOCOL_SET_STATE)(
 
95
  IN EFI_USB_HC_PROTOCOL     *This,
 
96
  IN EFI_USB_HC_STATE        State
 
97
  );
 
98
 
 
99
/**
 
100
  Submits control transfer to a target USB device.
 
101
 
 
102
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
103
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
104
                                assigned during USB enumeration.
 
105
  @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
 
106
                                device.
 
107
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
108
                                transfer endpoint is capable of sending or receiving.
 
109
  @param  Request               A pointer to the USB device request that will be sent to the USB
 
110
                                device.
 
111
  @param  TransferDirection     Specifies the data direction for the transfer. There are three
 
112
                                values available, EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
 
113
  @param  Data                  A pointer to the buffer of data that will be transmitted to USB
 
114
                                device or received from USB device.
 
115
  @param  DataLength            On input, indicates the size, in bytes, of the data buffer specified
 
116
                                by Data. On output, indicates the amount of data actually
 
117
                                transferred.
 
118
  @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
 
119
                                is allowed to complete.
 
120
  @param  TransferResult        A pointer to the detailed result information generated by this
 
121
                                control transfer.
 
122
 
 
123
  @retval EFI_SUCCESS           The control transfer was completed successfully.
 
124
  @retval EFI_OUT_OF_RESOURCES  The control transfer could not be completed due to a lack of resources.
 
125
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
126
  @retval EFI_TIMEOUT           The control transfer failed due to timeout.
 
127
  @retval EFI_DEVICE_ERROR      The control transfer failed due to host controller or device error.
 
128
 
 
129
**/
 
130
typedef
 
131
EFI_STATUS
 
132
(EFIAPI *EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER)(
 
133
  IN     EFI_USB_HC_PROTOCOL       *This,
 
134
  IN     UINT8                     DeviceAddress,
 
135
  IN     BOOLEAN                   IsSlowDevice,
 
136
  IN     UINT8                     MaximumPacketLength,
 
137
  IN     EFI_USB_DEVICE_REQUEST    *Request,
 
138
  IN     EFI_USB_DATA_DIRECTION    TransferDirection,
 
139
  IN OUT VOID                      *Data       OPTIONAL,
 
140
  IN OUT UINTN                     *DataLength OPTIONAL,
 
141
  IN     UINTN                     TimeOut,
 
142
  OUT    UINT32                    *TransferResult
 
143
  );
 
144
 
 
145
/**
 
146
  Submits bulk transfer to a bulk endpoint of a USB device.
 
147
 
 
148
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
149
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
150
                                assigned during USB enumeration.
 
151
  @param  EndPointAddress       The combination of an endpoint number and an endpoint
 
152
                                direction of the target USB device. Each endpoint address
 
153
                                supports data transfer in one direction except the control
 
154
                                endpoint (whose default endpoint address is 0). It is the
 
155
                                caller's responsibility to make sure that the EndPointAddress
 
156
                                represents a bulk endpoint.
 
157
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
158
                                transfer endpoint is capable of sending or receiving.
 
159
  @param  Data                  A pointer to the buffer of data that will be transmitted to USB
 
160
                                device or received from USB device.
 
161
  @param  DataLength            On input, indicates the size, in bytes, of the data buffer specified
 
162
                                by Data. On output, indicates the amount of data actually
 
163
                                transferred.
 
164
  @param  DataToggle            A pointer to the data toggle value.
 
165
  @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
 
166
                                is allowed to complete.
 
167
  @param  TransferResult        A pointer to the detailed result information of the bulk transfer.
 
168
 
 
169
  @retval EFI_SUCCESS           The bulk transfer was completed successfully.
 
170
  @retval EFI_OUT_OF_RESOURCES  The bulk transfer could not be completed due to a lack of resources.
 
171
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
172
  @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.
 
173
  @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.
 
174
 
 
175
**/
 
176
typedef
 
177
EFI_STATUS
 
178
(EFIAPI *EFI_USB_HC_PROTOCOL_BULK_TRANSFER)(
 
179
  IN     EFI_USB_HC_PROTOCOL    *This,
 
180
  IN     UINT8                  DeviceAddress,
 
181
  IN     UINT8                  EndPointAddress,
 
182
  IN     UINT8                  MaximumPacketLength,
 
183
  IN OUT VOID                   *Data,
 
184
  IN OUT UINTN                  *DataLength,
 
185
  IN OUT UINT8                  *DataToggle,
 
186
  IN     UINTN                  TimeOut,
 
187
  OUT    UINT32                 *TransferResult
 
188
  );
 
189
 
 
190
/**
 
191
  Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device.
 
192
 
 
193
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
194
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
195
                                assigned during USB enumeration.
 
196
  @param  EndPointAddress       The combination of an endpoint number and an endpoint
 
197
                                direction of the target USB device. Each endpoint address
 
198
                                supports data transfer in one direction except the control
 
199
                                endpoint (whose default endpoint address is zero). It is the
 
200
                                caller's responsibility to make sure that the
 
201
                                EndPointAddress represents an interrupt endpoint.
 
202
  @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
 
203
                                device.
 
204
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
205
                                transfer endpoint is capable of sending or receiving.
 
206
  @param  IsNewTransfer         If TRUE, an asynchronous interrupt pipe is built between the host
 
207
                                and the target interrupt endpoint. If FALSE, the specified asynchronous
 
208
                                interrupt pipe is canceled. If TRUE, and an interrupt transfer exists
 
209
                                for the target end point, then EFI_INVALID_PARAMETER is returned.
 
210
  @param  DataToggle            A pointer to the data toggle value. On input, it is valid when
 
211
                                IsNewTransfer is TRUE, and it indicates the initial data toggle
 
212
                                value the asynchronous interrupt transfer should adopt. On output,
 
213
                                it is valid when IsNewTransfer is FALSE, and it is updated to indicate
 
214
                                the data toggle value of the subsequent asynchronous interrupt transfer.
 
215
  @param  PollingInterval       Indicates the interval, in milliseconds, that the asynchronous
 
216
                                interrupt transfer is polled.
 
217
  @param  DataLength            Indicates the length of data to be received at the rate specified by
 
218
                                PollingInterval from the target asynchronous interrupt
 
219
                                endpoint. This parameter is only required when IsNewTransfer is TRUE.
 
220
  @param  CallBackFunction      The Callback function. This function is called at the rate specified by
 
221
                                PollingInterval. This parameter is only required when IsNewTransfer is TRUE.
 
222
  @param  Context               The context that is passed to the CallBackFunction.
 
223
 
 
224
  @retval EFI_SUCCESS           The asynchronous interrupt transfer request has been successfully
 
225
                                submitted or canceled.
 
226
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 
227
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
228
  @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.
 
229
  @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.
 
230
 
 
231
**/
 
232
typedef
 
233
EFI_STATUS
 
234
(EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)(
 
235
  IN     EFI_USB_HC_PROTOCOL                                 *This,
 
236
  IN     UINT8                                               DeviceAddress,
 
237
  IN     UINT8                                               EndPointAddress,
 
238
  IN     BOOLEAN                                             IsSlowDevice,
 
239
  IN     UINT8                                               MaxiumPacketLength,
 
240
  IN     BOOLEAN                                             IsNewTransfer,
 
241
  IN OUT UINT8                                               *DataToggle,
 
242
  IN     UINTN                                               PollingInterval  OPTIONAL,
 
243
  IN     UINTN                                               DataLength       OPTIONAL,
 
244
  IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,
 
245
  IN     VOID                                                *Context         OPTIONAL
 
246
  );
 
247
 
 
248
/**
 
249
  Submits synchronous interrupt transfer to an interrupt endpoint of a USB device.
 
250
 
 
251
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
252
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
253
                                assigned during USB enumeration.
 
254
  @param  EndPointAddress       The combination of an endpoint number and an endpoint
 
255
                                direction of the target USB device. Each endpoint address
 
256
                                supports data transfer in one direction except the control
 
257
                                endpoint (whose default endpoint address is zero). It is the
 
258
                                caller's responsibility to make sure that the
 
259
                                EndPointAddress represents an interrupt endpoint.
 
260
  @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
 
261
                                device.
 
262
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
263
                                transfer endpoint is capable of sending or receiving.
 
264
  @param  Data                  A pointer to the buffer of data that will be transmitted to USB
 
265
                                device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
 
266
  @param  DataLength            On input, the size, in bytes, of the data buffer specified by Data.
 
267
                                On output, the number of bytes transferred.
 
268
  @param  DataToggle            A pointer to the data toggle value. On input, it indicates the initial
 
269
                                data toggle value the synchronous interrupt transfer should adopt;
 
270
                                on output, it is updated to indicate the data toggle value of the
 
271
                                subsequent synchronous interrupt transfer.
 
272
  @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
 
273
                                is allowed to complete.
 
274
  @param  TransferResult        A pointer to the detailed result information from the synchronous
 
275
                                interrupt transfer.
 
276
 
 
277
  @retval EFI_SUCCESS           The synchronous interrupt transfer was completed successfully.
 
278
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 
279
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
280
  @retval EFI_TIMEOUT           The synchronous interrupt transfer failed due to timeout.
 
281
  @retval EFI_DEVICE_ERROR      The synchronous interrupt transfer failed due to host controller or device error.
 
282
 
 
283
**/
 
284
typedef
 
285
EFI_STATUS
 
286
(EFIAPI *EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)(
 
287
  IN     EFI_USB_HC_PROTOCOL    *This,
 
288
  IN     UINT8                  DeviceAddress,
 
289
  IN     UINT8                  EndPointAddress,
 
290
  IN     BOOLEAN                IsSlowDevice,
 
291
  IN     UINT8                  MaximumPacketLength,
 
292
  IN OUT VOID                   *Data,
 
293
  IN OUT UINTN                  *DataLength,
 
294
  IN OUT UINT8                  *DataToggle,
 
295
  IN     UINTN                  TimeOut,
 
296
  OUT    UINT32                 *TransferResult
 
297
  );
 
298
 
 
299
/**
 
300
  Submits isochronous transfer to an isochronous endpoint of a USB device.
 
301
 
 
302
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
303
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
304
                                assigned during USB enumeration.
 
305
  @param  EndPointAddress       The combination of an endpoint number and an endpoint
 
306
                                direction of the target USB device. Each endpoint address
 
307
                                supports data transfer in one direction except the control
 
308
                                endpoint (whose default endpoint address is 0). It is the caller's
 
309
                                responsibility to make sure that the EndPointAddress
 
310
                                represents an isochronous endpoint.
 
311
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
312
                                transfer endpoint is capable of sending or receiving.
 
313
  @param  Data                  A pointer to the buffer of data that will be transmitted to USB
 
314
                                device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
 
315
  @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received
 
316
                                from the USB device.
 
317
  @param  TransferResult        A pointer to the detailed result information from the isochronous
 
318
                                transfer.
 
319
 
 
320
  @retval EFI_SUCCESS           The isochronous transfer was completed successfully.
 
321
  @retval EFI_OUT_OF_RESOURCES  The isochronous could not be completed due to a lack of resources.
 
322
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
323
  @retval EFI_TIMEOUT           The isochronous transfer failed due to timeout.
 
324
  @retval EFI_DEVICE_ERROR      The isochronous transfer failed due to host controller or device error.
 
325
 
 
326
**/
 
327
typedef
 
328
EFI_STATUS
 
329
(EFIAPI *EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)(
 
330
  IN     EFI_USB_HC_PROTOCOL    *This,
 
331
  IN     UINT8                  DeviceAddress,
 
332
  IN     UINT8                  EndPointAddress,
 
333
  IN     UINT8                  MaximumPacketLength,
 
334
  IN OUT VOID                   *Data,
 
335
  IN     UINTN                  DataLength,
 
336
  OUT    UINT32                 *TransferResult
 
337
  );
 
338
 
 
339
/**
 
340
  Submits nonblocking isochronous transfer to an isochronous endpoint of a USB device.
 
341
 
 
342
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
343
  @param  DeviceAddress         Represents the address of the target device on the USB, which is
 
344
                                assigned during USB enumeration.
 
345
  @param  EndPointAddress       The combination of an endpoint number and an endpoint
 
346
                                direction of the target USB device. Each endpoint address
 
347
                                supports data transfer in one direction except the control
 
348
                                endpoint (whose default endpoint address is zero). It is the
 
349
                                caller's responsibility to make sure that the
 
350
                                EndPointAddress represents an isochronous endpoint.
 
351
  @param  MaximumPacketLength   Indicates the maximum packet size that the default control
 
352
                                transfer endpoint is capable of sending or receiving. For isochronous
 
353
                                endpoints, this value is used to reserve the bus time in the schedule,
 
354
                                required for the perframe data payloads. The pipe may, on an ongoing basis,
 
355
                                actually use less bandwidth than that reserved.
 
356
  @param  Data                  A pointer to the buffer of data that will be transmitted to USB
 
357
                                device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
 
358
  @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received
 
359
                                from the USB device.
 
360
  @param  IsochronousCallback   The Callback function.This function is called if the requested
 
361
                                isochronous transfer is completed.
 
362
  @param  Context               Data passed to the IsochronousCallback function. This is
 
363
                                an optional parameter and may be NULL.
 
364
 
 
365
  @retval EFI_SUCCESS           The asynchronous isochronous transfer was completed successfully.
 
366
  @retval EFI_OUT_OF_RESOURCES  The asynchronous isochronous could not be completed due to a lack of resources.
 
367
  @retval EFI_INVALID_PARAMETER Some parameters are invalid.
 
368
 
 
369
**/
 
370
typedef
 
371
EFI_STATUS
 
372
(EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)(
 
373
  IN     EFI_USB_HC_PROTOCOL                *This,
 
374
  IN     UINT8                              DeviceAddress,
 
375
  IN     UINT8                              EndPointAddress,
 
376
  IN     UINT8                              MaximumPacketLength,
 
377
  IN OUT VOID                               *Data,
 
378
  IN     UINTN                              DataLength,
 
379
  IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,
 
380
  IN     VOID                               *Context OPTIONAL
 
381
  );
 
382
 
 
383
/**
 
384
  Retrieves the number of root hub ports.
 
385
 
 
386
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
387
  @param  PortNumber            A pointer to the number of the root hub ports.
 
388
 
 
389
  @retval EFI_SUCCESS           The port number was retrieved successfully.
 
390
  @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the port number.
 
391
  @retval EFI_INVALID_PARAMETER PortNumber is NULL.
 
392
 
 
393
**/
 
394
typedef
 
395
EFI_STATUS
 
396
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER)(
 
397
  IN EFI_USB_HC_PROTOCOL    *This,
 
398
  OUT UINT8                 *PortNumber
 
399
  );
 
400
 
 
401
/**
 
402
  Retrieves the current status of a USB root hub port.
 
403
 
 
404
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
405
  @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
 
406
                                This value is zero based. For example, if a root hub has two ports,
 
407
                                then the first port is numbered 0, and the second port is
 
408
                                numbered 1.
 
409
  @param  PortStatus            A pointer to the current port status bits and port status change bits.
 
410
 
 
411
  @retval EFI_SUCCESS           The status of the USB root hub port specified by PortNumber
 
412
                                was returned in PortStatus.
 
413
  @retval EFI_INVALID_PARAMETER PortNumber is invalid.
 
414
 
 
415
**/
 
416
typedef
 
417
EFI_STATUS
 
418
(EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)(
 
419
  IN EFI_USB_HC_PROTOCOL     *This,
 
420
  IN  UINT8                  PortNumber,
 
421
  OUT EFI_USB_PORT_STATUS    *PortStatus
 
422
  );
 
423
 
 
424
/**
 
425
  Sets a feature for the specified root hub port.
 
426
 
 
427
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
428
  @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
 
429
                                This value is zero based. For example, if a root hub has two ports,
 
430
                                then the first port is numbered 0, and the second port is
 
431
                                numbered 1.
 
432
  @param  PortFeature           Indicates the feature selector associated with the feature set
 
433
                                request.
 
434
 
 
435
  @retval EFI_SUCCESS           The feature specified by PortFeature was set for the USB
 
436
                                root hub port specified by PortNumber.
 
437
  @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
 
438
 
 
439
**/
 
440
typedef
 
441
EFI_STATUS
 
442
(EFIAPI *EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)(
 
443
  IN EFI_USB_HC_PROTOCOL     *This,
 
444
  IN UINT8                   PortNumber,
 
445
  IN EFI_USB_PORT_FEATURE    PortFeature
 
446
  );
 
447
 
 
448
/**
 
449
  Clears a feature for the specified root hub port.
 
450
 
 
451
  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
 
452
  @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
 
453
                                This value is zero based. For example, if a root hub has two ports,
 
454
                                then the first port is numbered 0, and the second port is
 
455
                                numbered 1.
 
456
  @param  PortFeature           Indicates the feature selector associated with the feature clear
 
457
                                request.
 
458
 
 
459
  @retval EFI_SUCCESS           The feature specified by PortFeature was cleared for the USB
 
460
                                root hub port specified by PortNumber.
 
461
  @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
 
462
 
 
463
**/
 
464
typedef
 
465
EFI_STATUS
 
466
(EFIAPI *EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)(
 
467
  IN EFI_USB_HC_PROTOCOL     *This,
 
468
  IN UINT8                   PortNumber,
 
469
  IN EFI_USB_PORT_FEATURE    PortFeature
 
470
  );
 
471
 
 
472
 
 
473
///
 
474
/// The EFI_USB_HC_PROTOCOL provides USB host controller management, basic data transactions
 
475
/// over a USB bus, and USB root hub access. A device driver that wishes to manage a USB bus in a
 
476
/// system retrieves the EFI_USB_HC_PROTOCOL instance that is associated with the USB bus to be
 
477
/// managed. A device handle for a USB host controller will minimally contain an
 
478
/// EFI_DEVICE_PATH_PROTOCOL instance, and an EFI_USB_HC_PROTOCOL instance.
 
479
///
 
480
struct _EFI_USB_HC_PROTOCOL {
 
481
  EFI_USB_HC_PROTOCOL_RESET                       Reset;
 
482
  EFI_USB_HC_PROTOCOL_GET_STATE                   GetState;
 
483
  EFI_USB_HC_PROTOCOL_SET_STATE                   SetState;
 
484
  EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER            ControlTransfer;
 
485
  EFI_USB_HC_PROTOCOL_BULK_TRANSFER               BulkTransfer;
 
486
  EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER    AsyncInterruptTransfer;
 
487
  EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER     SyncInterruptTransfer;
 
488
  EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER        IsochronousTransfer;
 
489
  EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER  AsyncIsochronousTransfer;
 
490
  EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER     GetRootHubPortNumber;
 
491
  EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS     GetRootHubPortStatus;
 
492
  EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE    SetRootHubPortFeature;
 
493
  EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE  ClearRootHubPortFeature;
 
494
  ///
 
495
  /// The major revision number of the USB host controller. The revision information
 
496
  /// indicates the release of the Universal Serial Bus Specification with which the
 
497
  /// host controller is compliant.
 
498
  ///
 
499
  UINT16                                          MajorRevision;
 
500
  ///
 
501
  /// The minor revision number of the USB host controller. The revision information
 
502
  /// indicates the release of the Universal Serial Bus Specification with which the
 
503
  /// host controller is compliant.
 
504
  ///
 
505
  UINT16                                          MinorRevision;
 
506
};
 
507
 
 
508
extern EFI_GUID gEfiUsbHcProtocolGuid;
 
509
 
 
510
#endif