summaryrefslogtreecommitdiff
path: root/Include/Protocol/UsbIo.h
blob: 9f9378c0188969a361b500e0f454cc2e068929cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
//****************************************************************************
//****************************************************************************
//**                                                                        **
//**             (C)Copyright 1985-2010, American Megatrends, Inc.          **
//**                                                                        **
//**                          All Rights Reserved.                          **
//**                                                                        **
//**              5555 Oakbrook Pkwy, Suite 200 Norcross, GA 30093          **
//**                                                                        **
//**                          Phone (770)-246-8600                          **
//**                                                                        **
//****************************************************************************
//****************************************************************************

//****************************************************************************
// $Header: /Alaska/SOURCE/Modules/USB/ALASKA/Protocol/UsbIo.h 9     5/04/12 5:35a Wilsonlee $
//
// $Revision: 9 $
//
// $Date: 5/04/12 5:35a $
//
//****************************************************************************

//<AMI_FHDR_START>
//----------------------------------------------------------------------------
//
//  Name:           UsbIo.h
//
//  Description:    AMI USB IO interface header file
//
//----------------------------------------------------------------------------
//<AMI_FHDR_END>


#ifndef _USBIO_INC_
#define _USBIO_INC_

#define EFI_USB_IO_PROTOCOL_GUID \
    { 0x2B2F68D6, 0x0CD2, 0x44cf, 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 }

GUID_VARIABLE_DECLARATION(gEfiUsbIoProtocolGuid,EFI_USB_IO_PROTOCOL_GUID);

typedef struct _EFI_USB_IO_PROTOCOL EFI_USB_IO_PROTOCOL;

#pragma pack(push, 1)

//
// See USB1.1 for detail descrption.
// 
typedef struct {
	UINT8 Length;
	UINT8 DescriptorType;
	UINT16 BcdUSB;
	UINT8 DeviceClass;
	UINT8 DeviceSubClass;
	UINT8 DeviceProtocol;
	UINT8 MaxPacketSize0;
	UINT16 IdVendor;
	UINT16 IdProduct;
	UINT16 BcdDevice;
	UINT8 StrManufacturer;
	UINT8 StrProduct;
	UINT8 StrSerialNumber;
	UINT8 NumConfigurations;
} EFI_USB_DEVICE_DESCRIPTOR;

typedef struct {
	UINT8 Length;
	UINT8 DescriptorType;
	UINT16 TotalLength;
	UINT8 NumInterfaces;
	UINT8 ConfigurationValue;
	UINT8 Configuration;
	UINT8 Attributes;
	UINT8 MaxPower;
} EFI_USB_CONFIG_DESCRIPTOR;

typedef struct {
	UINT8 Length;
	UINT8 DescriptorType;
	UINT8 InterfaceNumber;
	UINT8 AlternateSetting;
	UINT8 NumEndpoints;
	UINT8 InterfaceClass;
	UINT8 InterfaceSubClass;
	UINT8 InterfaceProtocol;
	UINT8 Interface;
} EFI_USB_INTERFACE_DESCRIPTOR;


// EFI_USB_ENDPOINT_DESCRIPTOR's EndPointAttributes 
//  must mask the returned attributes before checking
#define USB_ENDPOINT_TYPE_MASK          3

#define USB_ENDPOINT_TYPE_CONTROL       0
#define USB_ENDPOINT_TYPE_ISOCHRONOUS   1
#define USB_ENDPOINT_TYPE_BULK          2
#define USB_ENDPOINT_TYPE_INTERRUPT     3

typedef struct {
	UINT8 Length;
	UINT8 DescriptorType;
	UINT8 EndpointAddress;
	UINT8 Attributes;
	UINT16 MaxPacketSize;
	UINT8 Interval;
} EFI_USB_ENDPOINT_DESCRIPTOR;

typedef struct {
  UINT8  Length;
  UINT8  DescriptorType;
  CHAR16 String[1];
} EFI_USB_STRING_DESCRIPTOR;

typedef enum {
	EfiUsbDataIn,
	EfiUsbDataOut,
	EfiUsbNoData
} EFI_USB_DATA_DIRECTION;

//
// Error code for USB Transfer Results
//
#define EFI_USB_NOERROR 			0x0000
#define EFI_USB_ERR_NOTEXECUTE 		0x0001
#define EFI_USB_ERR_STALL 			0x0002
#define EFI_USB_ERR_BUFFER 			0x0004
#define EFI_USB_ERR_BABBLE 			0x0008
#define EFI_USB_ERR_NAK 			0x0010
#define EFI_USB_ERR_CRC 			0x0020
#define EFI_USB_ERR_TIMEOUT 		0x0040
#define EFI_USB_ERR_BITSTUFF 		0x0080
#define EFI_USB_ERR_SYSTEM 			0x0100



typedef struct {
	UINT8 RequestType;
	UINT8 Request;
	UINT16 Value;
	UINT16 Index;
	UINT16 Length;
} EFI_USB_DEVICE_REQUEST;

#pragma pack(pop)

typedef EFI_STATUS (EFIAPI *EFI_ASYNC_USB_TRANSFER_CALLBACK) (
  IN void         *Data,
  IN UINTN        DataLength,
  IN void         *Context,
  IN UINT32       Status);

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_CONTROL_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL    *This,
  IN EFI_USB_DEVICE_REQUEST         *Request,
  IN EFI_USB_DATA_DIRECTION         Direction,
  IN UINT32                         Timeout,
  IN OUT void                       *Data       OPTIONAL,
  IN UINTN                          DataLength  OPTIONAL,
  OUT UINT32                        *Status  );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_BULK_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL    *This,
  IN UINT8                          DeviceEndpoint,
  IN OUT void                       *Data,
  IN OUT UINTN                      *DataLength,
  IN UINTN                          Timeout,
  OUT UINT32                        *Status );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL      *This,
  IN UINT8                            DeviceEndpoint,
  IN BOOLEAN                          IsNewTransfer,
  IN UINTN                            PollingInterval    OPTIONAL,
  IN UINTN                            DataLength         OPTIONAL,
  IN EFI_ASYNC_USB_TRANSFER_CALLBACK  InterruptCallBack  OPTIONAL,
  IN void                             *Context           OPTIONAL );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_SYNC_INTERRUPT_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL    *This,
  IN     UINT8                      DeviceEndpoint,
  IN OUT void                       *Data,
  IN OUT UINTN                      *DataLength,
  IN     UINTN                      Timeout,
  OUT    UINT32                     *Status );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_ISOCHRONOUS_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL    *This,
  IN     UINT8                      DeviceEndpoint,
  IN OUT void                       *Data,
  IN     UINTN                      DataLength,
  OUT    UINT32                     *Status );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER) (
  IN EFI_USB_IO_PROTOCOL      *This,
  IN UINT8                            DeviceEndpoint,
  IN OUT void                         *Data,
  IN     UINTN                        DataLength,
  IN EFI_ASYNC_USB_TRANSFER_CALLBACK  IsochronousCallBack,
  IN void                             *Context   OPTIONAL );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_PORT_RESET) ( IN EFI_USB_IO_PROTOCOL    *This );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_DEVICE_DESCRIPTOR) (
  IN EFI_USB_IO_PROTOCOL   *This,
  OUT EFI_USB_DEVICE_DESCRIPTOR     *DeviceDescriptor );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_CONFIG_DESCRIPTOR) (
  IN EFI_USB_IO_PROTOCOL   *This,
  OUT EFI_USB_CONFIG_DESCRIPTOR     *ConfigurationDescriptor );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_INTERFACE_DESCRIPTOR) (
  IN EFI_USB_IO_PROTOCOL   *This,
  OUT EFI_USB_INTERFACE_DESCRIPTOR  *InterfaceDescriptor );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR) (
  IN EFI_USB_IO_PROTOCOL   *This,
  IN  UINT8                         EndpointIndex,
  OUT EFI_USB_ENDPOINT_DESCRIPTOR   *EndpointDescriptor );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_STRING_DESCRIPTOR) (
  IN EFI_USB_IO_PROTOCOL   *This,
  IN  UINT16                        LangID,
  IN  UINT8                         StringID,
  OUT CHAR16                        **String );

typedef EFI_STATUS (EFIAPI *EFI_USB_IO_GET_SUPPORTED_LANGUAGE) (
  IN EFI_USB_IO_PROTOCOL   *This,
  OUT UINT16                        **LangIDTable,
  OUT UINT16                        *TableSize );



//
//  _EFI_USB_IO_PROTOCOL
//
typedef struct _EFI_USB_IO_PROTOCOL {
  //
  // IO transfer
  //
  EFI_USB_IO_CONTROL_TRANSFER             UsbControlTransfer;
  EFI_USB_IO_BULK_TRANSFER                UsbBulkTransfer;
  EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER     UsbAsyncInterruptTransfer;
  EFI_USB_IO_SYNC_INTERRUPT_TRANSFER      UsbSyncInterruptTransfer;
  EFI_USB_IO_ISOCHRONOUS_TRANSFER         UsbIsochronousTransfer;
  EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER   UsbAsyncIsochronousTransfer;
  
  //
  // Common device request
  //
  EFI_USB_IO_GET_DEVICE_DESCRIPTOR        UsbGetDeviceDescriptor;
  EFI_USB_IO_GET_CONFIG_DESCRIPTOR        UsbGetConfigDescriptor;
  EFI_USB_IO_GET_INTERFACE_DESCRIPTOR     UsbGetInterfaceDescriptor;
  EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR      UsbGetEndpointDescriptor;
  EFI_USB_IO_GET_STRING_DESCRIPTOR        UsbGetStringDescriptor;
  EFI_USB_IO_GET_SUPPORTED_LANGUAGE       UsbGetSupportedLanguages;

  //
  // Reset controller's parent port
  //
  EFI_USB_IO_PORT_RESET                   UsbPortReset;
} EFI_USB_IO_PROTOCOL;

#endif //_USBIO_INC_

//****************************************************************************
//****************************************************************************
//**                                                                        **
//**             (C)Copyright 1985-2010, American Megatrends, Inc.          **
//**                                                                        **
//**                          All Rights Reserved.                          **
//**                                                                        **
//**              5555 Oakbrook Pkwy, Suite 200 Norcross, GA 30093          **
//**                                                                        **
//**                          Phone (770)-246-8600                          **
//**                                                                        **
//****************************************************************************
//****************************************************************************