BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / DuetPkg / PciRootBridgeNoEnumerationDxe / DeviceIo.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 DeviceIo.h
15
16 Abstract:
17
18 Private Data definition for Device IO driver
19
20 --*/
21
22 #ifndef _DEVICE_IO_H
23 #define _DEVICE_IO_H
24
25
26
27 #define DEVICE_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('d', 'e', 'v', 'I')
28
29 #define MAX_COMMON_BUFFER 0x00000000FFFFFFFF
30
31 typedef struct {
32 UINTN Signature;
33 EFI_HANDLE Handle;
34 EFI_DEVICE_IO_PROTOCOL DeviceIo;
35 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
36 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
37 UINT16 PrimaryBus;
38 UINT16 SubordinateBus;
39 } DEVICE_IO_PRIVATE_DATA;
40
41 #define DEVICE_IO_PRIVATE_DATA_FROM_THIS(a) CR (a, DEVICE_IO_PRIVATE_DATA, DeviceIo, DEVICE_IO_PRIVATE_DATA_SIGNATURE)
42
43 EFI_STATUS
44 DeviceIoConstructor (
45 IN EFI_HANDLE Handle,
46 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
47 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
48 IN UINT16 PrimaryBus,
49 IN UINT16 SubordinateBus
50 )
51 /*++
52
53 Routine Description:
54
55 Initialize and install a Device IO protocol on a empty device path handle.
56
57 Arguments:
58
59 Handle - Handle of PCI RootBridge IO instance
60 PciRootBridgeIo - PCI RootBridge IO instance
61 DevicePath - Device Path of PCI RootBridge IO instance
62 PrimaryBus - Primary Bus
63 SubordinateBus - Subordinate Bus
64
65 Returns:
66
67 EFI_SUCCESS - This driver is added to ControllerHandle.
68 EFI_ALREADY_STARTED - This driver is already running on ControllerHandle.
69 Others - This driver does not support this device.
70
71 --*/
72 ;
73
74 EFI_STATUS
75 EFIAPI
76 DeviceIoMemRead (
77 IN EFI_DEVICE_IO_PROTOCOL *This,
78 IN EFI_IO_WIDTH Width,
79 IN UINT64 Address,
80 IN UINTN Count,
81 IN OUT VOID *Buffer
82 )
83 /*++
84
85 Routine Description:
86
87 Perform reading memory mapped I/O space of device.
88
89 Arguments:
90
91 This - A pointer to EFI_DEVICE_IO protocol instance.
92 Width - Width of I/O operations.
93 Address - The base address of I/O operations.
94 Count - The number of I/O operations to perform.
95 Bytes moves is Width size * Count, starting at Address.
96 Buffer - The destination buffer to store results.
97
98 Returns:
99
100 EFI_SUCCESS - The data was read from the device.
101 EFI_INVALID_PARAMETER - Width is invalid.
102 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
103
104 --*/
105 ;
106
107 EFI_STATUS
108 EFIAPI
109 DeviceIoMemWrite (
110 IN EFI_DEVICE_IO_PROTOCOL *This,
111 IN EFI_IO_WIDTH Width,
112 IN UINT64 Address,
113 IN UINTN Count,
114 IN OUT VOID *Buffer
115 )
116 /*++
117
118 Routine Description:
119
120 Perform writing memory mapped I/O space of device.
121
122 Arguments:
123
124 This - A pointer to EFI_DEVICE_IO protocol instance.
125 Width - Width of I/O operations.
126 Address - The base address of I/O operations.
127 Count - The number of I/O operations to perform.
128 Bytes moves is Width size * Count, starting at Address.
129 Buffer - The source buffer of data to be written.
130
131 Returns:
132
133 EFI_SUCCESS - The data was written to the device.
134 EFI_INVALID_PARAMETER - Width is invalid.
135 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
136
137 --*/
138 ;
139
140 EFI_STATUS
141 EFIAPI
142 DeviceIoIoRead (
143 IN EFI_DEVICE_IO_PROTOCOL *This,
144 IN EFI_IO_WIDTH Width,
145 IN UINT64 Address,
146 IN UINTN Count,
147 IN OUT VOID *Buffer
148 )
149 /*++
150
151 Routine Description:
152
153 Perform reading I/O space of device.
154
155 Arguments:
156
157 This - A pointer to EFI_DEVICE_IO protocol instance.
158 Width - Width of I/O operations.
159 Address - The base address of I/O operations.
160 Count - The number of I/O operations to perform.
161 Bytes moves is Width size * Count, starting at Address.
162 Buffer - The destination buffer to store results.
163
164 Returns:
165
166 EFI_SUCCESS - The data was read from the device.
167 EFI_INVALID_PARAMETER - Width is invalid.
168 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
169
170 --*/
171 ;
172
173 EFI_STATUS
174 EFIAPI
175 DeviceIoIoWrite (
176 IN EFI_DEVICE_IO_PROTOCOL *This,
177 IN EFI_IO_WIDTH Width,
178 IN UINT64 Address,
179 IN UINTN Count,
180 IN OUT VOID *Buffer
181 )
182 /*++
183
184 Routine Description:
185
186 Perform writing I/O space of device.
187
188 Arguments:
189
190 This - A pointer to EFI_DEVICE_IO protocol instance.
191 Width - Width of I/O operations.
192 Address - The base address of I/O operations.
193 Count - The number of I/O operations to perform.
194 Bytes moves is Width size * Count, starting at Address.
195 Buffer - The source buffer of data to be written.
196
197 Returns:
198
199 EFI_SUCCESS - The data was written to the device.
200 EFI_INVALID_PARAMETER - Width is invalid.
201 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
202
203 --*/
204 ;
205
206 EFI_STATUS
207 EFIAPI
208 DeviceIoPciRead (
209 IN EFI_DEVICE_IO_PROTOCOL *This,
210 IN EFI_IO_WIDTH Width,
211 IN UINT64 Address,
212 IN UINTN Count,
213 IN OUT VOID *Buffer
214 )
215 /*++
216
217 Routine Description:
218
219 Perform reading PCI configuration space of device
220
221 Arguments:
222
223 This - A pointer to EFI_DEVICE_IO protocol instance.
224 Width - Width of I/O operations.
225 Address - The base address of I/O operations.
226 Count - The number of I/O operations to perform.
227 Bytes moves is Width size * Count, starting at Address.
228 Buffer - The destination buffer to store results.
229
230 Returns:
231
232 EFI_SUCCESS - The data was read from the device.
233 EFI_INVALID_PARAMETER - Width is invalid.
234 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
235
236 --*/
237 ;
238
239 EFI_STATUS
240 EFIAPI
241 DeviceIoPciWrite (
242 IN EFI_DEVICE_IO_PROTOCOL *This,
243 IN EFI_IO_WIDTH Width,
244 IN UINT64 Address,
245 IN UINTN Count,
246 IN OUT VOID *Buffer
247 )
248 /*++
249
250 Routine Description:
251
252 Perform writing PCI configuration space of device.
253
254 Arguments:
255
256 This - A pointer to EFI_DEVICE_IO protocol instance.
257 Width - Width of I/O operations.
258 Address - The base address of I/O operations.
259 Count - The number of I/O operations to perform.
260 Bytes moves is Width size * Count, starting at Address.
261 Buffer - The source buffer of data to be written.
262
263 Returns:
264
265 EFI_SUCCESS - The data was written to the device.
266 EFI_INVALID_PARAMETER - Width is invalid.
267 EFI_OUT_OF_RESOURCES - The request could not be completed due to lack of resources.
268
269 --*/
270 ;
271
272 EFI_STATUS
273 EFIAPI
274 DeviceIoPciDevicePath (
275 IN EFI_DEVICE_IO_PROTOCOL *This,
276 IN UINT64 Address,
277 IN OUT EFI_DEVICE_PATH_PROTOCOL **PciDevicePath
278 )
279 /*++
280
281 Routine Description:
282
283 Append a PCI device path node to another device path.
284
285 Arguments:
286
287 This - A pointer to EFI_DEVICE_IO_PROTOCOL.
288 Address - PCI bus,device, function.
289 PciDevicePath - PCI device path.
290
291 Returns:
292
293 Pointer to the appended PCI device path.
294
295 --*/
296 ;
297
298 EFI_STATUS
299 EFIAPI
300 DeviceIoMap (
301 IN EFI_DEVICE_IO_PROTOCOL *This,
302 IN EFI_IO_OPERATION_TYPE Operation,
303 IN EFI_PHYSICAL_ADDRESS *HostAddress,
304 IN OUT UINTN *NumberOfBytes,
305 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
306 OUT VOID **Mapping
307 )
308 /*++
309
310 Routine Description:
311
312 Provides the device-specific addresses needed to access system memory.
313
314 Arguments:
315
316 This - A pointer to the EFI_DEVICE_IO_INTERFACE instance.
317 Operation - Indicates if the bus master is going to read or write to system memory.
318 HostAddress - The system memory address to map to the device.
319 NumberOfBytes - On input the number of bytes to map. On output the number of bytes
320 that were mapped.
321 DeviceAddress - The resulting map address for the bus master device to use to access the
322 hosts HostAddress.
323 Mapping - A resulting value to pass to Unmap().
324
325 Returns:
326
327 EFI_SUCCESS - The range was mapped for the returned NumberOfBytes.
328 EFI_INVALID_PARAMETER - The Operation or HostAddress is undefined.
329 EFI_UNSUPPORTED - The HostAddress cannot be mapped as a common buffer.
330 EFI_DEVICE_ERROR - The system hardware could not map the requested address.
331 EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of resources.
332
333 --*/
334 ;
335
336 EFI_STATUS
337 EFIAPI
338 DeviceIoUnmap (
339 IN EFI_DEVICE_IO_PROTOCOL *This,
340 IN VOID *Mapping
341 )
342 /*++
343
344 Routine Description:
345
346 Completes the Map() operation and releases any corresponding resources.
347
348 Arguments:
349
350 This - A pointer to the EFI_DEVICE_IO_INTERFACE instance.
351 Mapping - The mapping value returned from Map().
352
353 Returns:
354
355 EFI_SUCCESS - The range was unmapped.
356 EFI_DEVICE_ERROR - The data was not committed to the target system memory.
357
358 --*/
359 ;
360
361 EFI_STATUS
362 EFIAPI
363 DeviceIoAllocateBuffer (
364 IN EFI_DEVICE_IO_PROTOCOL *This,
365 IN EFI_ALLOCATE_TYPE Type,
366 IN EFI_MEMORY_TYPE MemoryType,
367 IN UINTN Pages,
368 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
369 )
370 /*++
371
372 Routine Description:
373
374 Allocates pages that are suitable for an EFIBusMasterCommonBuffer mapping.
375
376 Arguments:
377
378 This - A pointer to the EFI_DEVICE_IO_INTERFACE instance.
379 Type - The type allocation to perform.
380 MemoryType - The type of memory to allocate, EfiBootServicesData or
381 EfiRuntimeServicesData.
382 Pages - The number of pages to allocate.
383 HostAddress - A pointer to store the base address of the allocated range.
384
385 Returns:
386
387 EFI_SUCCESS - The requested memory pages were allocated.
388 EFI_OUT_OF_RESOURCES - The memory pages could not be allocated.
389 EFI_INVALID_PARAMETER - The requested memory type is invalid.
390 EFI_UNSUPPORTED - The requested PhysicalAddress is not supported on
391 this platform.
392
393 --*/
394 ;
395
396 EFI_STATUS
397 EFIAPI
398 DeviceIoFlush (
399 IN EFI_DEVICE_IO_PROTOCOL *This
400 )
401 /*++
402
403 Routine Description:
404
405 Flushes any posted write data to the device.
406
407 Arguments:
408
409 This - A pointer to the EFI_DEVICE_IO_INTERFACE instance.
410
411 Returns:
412
413 EFI_SUCCESS - The buffers were flushed.
414 EFI_DEVICE_ERROR - The buffers were not flushed due to a hardware error.
415
416 --*/
417 ;
418
419 EFI_STATUS
420 EFIAPI
421 DeviceIoFreeBuffer (
422 IN EFI_DEVICE_IO_PROTOCOL *This,
423 IN UINTN Pages,
424 IN EFI_PHYSICAL_ADDRESS HostAddress
425 )
426 /*++
427
428 Routine Description:
429
430 Frees pages that were allocated with AllocateBuffer().
431
432 Arguments:
433
434 This - A pointer to the EFI_DEVICE_IO_INTERFACE instance.
435 Pages - The number of pages to free.
436 HostAddress - The base address of the range to free.
437
438 Returns:
439
440 EFI_SUCCESS - The requested memory pages were freed.
441 EFI_NOT_FOUND - The requested memory pages were not allocated with
442 AllocateBuffer().
443 EFI_INVALID_PARAMETER - HostAddress is not page aligned or Pages is invalid.
444
445 --*/
446 ;
447
448 #endif
449