efipciio.h revision 1.1.1.2 1 /* $NetBSD: efipciio.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
2
3 #ifndef _EFI_PCI_IO_H
4 #define _EFI_PCI_IO_H
5
6 #define EFI_PCI_IO_PROTOCOL_GUID \
7 { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a} }
8
9 #define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
10 { 0x2f707ebb, 0x4a1a, 0x11d4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
11
12 INTERFACE_DECL(_EFI_PCI_IO_PROTOCOL);
13 INTERFACE_DECL(_EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL);
14
15 typedef enum {
16 EfiPciIoWidthUint8,
17 EfiPciIoWidthUint16,
18 EfiPciIoWidthUint32,
19 EfiPciIoWidthUint64,
20 EfiPciIoWidthFifoUint8,
21 EfiPciIoWidthFifoUint16,
22 EfiPciIoWidthFifoUint32,
23 EfiPciIoWidthFifoUint64,
24 EfiPciIoWidthFillUint8,
25 EfiPciIoWidthFillUint16,
26 EfiPciIoWidthFillUint32,
27 EfiPciIoWidthFillUint64,
28 EfiPciIoWidthMaximum
29 } EFI_PCI_IO_PROTOCOL_WIDTH, EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH;
30
31 #define EFI_PCI_IO_PASS_THROUGH_BAR 0xff
32
33 typedef
34 EFI_STATUS
35 (EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) (
36 IN struct _EFI_PCI_IO_PROTOCOL *This,
37 IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
38 IN UINT8 BarIndex,
39 IN UINT64 Offset,
40 IN UINT64 Mask,
41 IN UINT64 Value,
42 IN UINT64 Delay,
43 OUT UINT64 *Result
44 );
45
46 typedef
47 EFI_STATUS
48 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM) (
49 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
50 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
51 IN UINT64 Address,
52 IN UINT64 Mask,
53 IN UINT64 Value,
54 IN UINT64 Delay,
55 OUT UINT64 *Result
56 );
57
58 typedef
59 EFI_STATUS
60 (EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) (
61 IN struct _EFI_PCI_IO_PROTOCOL *This,
62 IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
63 IN UINT8 BarIndex,
64 IN UINT64 Offset,
65 IN UINTN Count,
66 IN OUT VOID *Buffer
67 );
68
69 typedef
70 EFI_STATUS
71 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM) (
72 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
73 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
74 IN UINT64 Address,
75 IN UINTN Count,
76 IN OUT VOID *Buffer
77 );
78
79 typedef struct {
80 EFI_PCI_IO_PROTOCOL_IO_MEM Read;
81 EFI_PCI_IO_PROTOCOL_IO_MEM Write;
82 } EFI_PCI_IO_PROTOCOL_ACCESS;
83
84 typedef struct {
85 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Read;
86 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write;
87 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS;
88
89 typedef
90 EFI_STATUS
91 (EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) (
92 IN struct _EFI_PCI_IO_PROTOCOL *This,
93 IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
94 IN UINT32 Offset,
95 IN UINTN Count,
96 IN OUT VOID *Buffer
97 );
98
99 typedef
100 EFI_STATUS
101 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION) (
102 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
103 OUT VOID **Resources
104 );
105
106 typedef struct {
107 EFI_PCI_IO_PROTOCOL_CONFIG Read;
108 EFI_PCI_IO_PROTOCOL_CONFIG Write;
109 } EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
110
111 typedef
112 EFI_STATUS
113 (EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) (
114 IN struct _EFI_PCI_IO_PROTOCOL *This,
115 IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
116 IN UINT8 DestBarIndex,
117 IN UINT64 DestOffset,
118 IN UINT8 SrcBarIndex,
119 IN UINT64 SrcOffset,
120 IN UINTN Count
121 );
122
123 typedef
124 EFI_STATUS
125 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM) (
126 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
127 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
128 IN UINT64 DestAddress,
129 IN UINT64 SrcAddress,
130 IN UINTN Count
131 );
132
133 typedef enum {
134 EfiPciIoOperationBusMasterRead,
135 EfiPciIoOperationBusMasterWrite,
136 EfiPciIoOperationBusMasterCommonBuffer,
137 EfiPciIoOperationMaximum
138 } EFI_PCI_IO_PROTOCOL_OPERATION;
139
140 typedef enum {
141 EfiPciOperationBusMasterRead,
142 EfiPciOperationBusMasterWrite,
143 EfiPciOperationBusMasterCommonBuffer,
144 EfiPciOperationBusMasterRead64,
145 EfiPciOperationBusMasterWrite64,
146 EfiPciOperationBusMasterCommonBuffer64,
147 EfiPciOperationMaximum
148 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION;
149
150 typedef
151 EFI_STATUS
152 (EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) (
153 IN struct _EFI_PCI_IO_PROTOCOL *This,
154 IN EFI_PCI_IO_PROTOCOL_OPERATION Operation,
155 IN VOID *HostAddress,
156 IN OUT UINTN *NumberOfBytes,
157 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
158 OUT VOID **Mapping
159 );
160
161 typedef
162 EFI_STATUS
163 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP) (
164 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
165 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
166 IN VOID *HostAddress,
167 IN OUT UINTN *NumberOfBytes,
168 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
169 OUT VOID **Mapping
170 );
171
172 typedef
173 EFI_STATUS
174 (EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) (
175 IN struct _EFI_PCI_IO_PROTOCOL *This,
176 IN VOID *Mapping
177 );
178
179 typedef
180 EFI_STATUS
181 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP) (
182 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
183 IN VOID *Mapping
184 );
185
186 typedef
187 EFI_STATUS
188 (EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) (
189 IN struct _EFI_PCI_IO_PROTOCOL *This,
190 IN EFI_ALLOCATE_TYPE Type,
191 IN EFI_MEMORY_TYPE MemoryType,
192 IN UINTN Pages,
193 OUT VOID **HostAddress,
194 IN UINT64 Attributes
195 );
196
197 typedef
198 EFI_STATUS
199 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER) (
200 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
201 IN EFI_ALLOCATE_TYPE Type,
202 IN EFI_MEMORY_TYPE MemoryType,
203 IN UINTN Pages,
204 IN OUT VOID **HostAddress,
205 IN UINT64 Attributes
206 );
207
208 typedef
209 EFI_STATUS
210 (EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) (
211 IN struct _EFI_PCI_IO_PROTOCOL *This,
212 IN UINTN Pages,
213 IN VOID *HostAddress
214 );
215
216 typedef
217 EFI_STATUS
218 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER) (
219 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
220 IN UINTN Pages,
221 IN VOID *HostAddress
222 );
223
224 typedef
225 EFI_STATUS
226 (EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) (
227 IN struct _EFI_PCI_IO_PROTOCOL *This
228 );
229
230 typedef
231 EFI_STATUS
232 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH) (
233 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
234 );
235
236 typedef
237 EFI_STATUS
238 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) (
239 IN struct _EFI_PCI_IO_PROTOCOL *This,
240 OUT UINTN *SegmentNumber,
241 OUT UINTN *BusNumber,
242 OUT UINTN *DeviceNumber,
243 OUT UINTN *FunctionNumber
244 );
245
246 #define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001
247 #define EFI_PCI_ATTRIBUTE_ISA_IO 0x0002
248 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO 0x0004
249 #define EFI_PCI_ATTRIBUTE_VGA_MEMORY 0x0008
250 #define EFI_PCI_ATTRIBUTE_VGA_IO 0x0010
251 #define EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO 0x0020
252 #define EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO 0x0040
253 #define EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
254 #define EFI_PCI_ATTRIBUTE_IO 0x0100
255 #define EFI_PCI_ATTRIBUTE_MEMORY 0x0200
256 #define EFI_PCI_ATTRIBUTE_BUS_MASTER 0x0400
257 #define EFI_PCI_ATTRIBUTE_MEMORY_CACHED 0x0800
258 #define EFI_PCI_ATTRIBUTE_MEMORY_DISABLE 0x1000
259 #define EFI_PCI_ATTRIBUTE_EMBEDDED_DEVICE 0x2000
260 #define EFI_PCI_ATTRIBUTE_EMBEDDED_ROM 0x4000
261 #define EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000
262 #define EFI_PCI_ATTRIBUTE_ISA_IO_16 0x10000
263 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000
264 #define EFI_PCI_ATTRIBUTE_VGA_IO_16 0x40000
265
266 #define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO
267 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO EFI_PCI_ATTRIBUTE_ISA_IO
268 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO
269 #define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY EFI_PCI_ATTRIBUTE_VGA_MEMORY
270 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO EFI_PCI_ATTRIBUTE_VGA_IO
271 #define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO
272 #define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO
273 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE
274 #define EFI_PCI_IO_ATTRIBUTE_IO EFI_PCI_ATTRIBUTE_IO
275 #define EFI_PCI_IO_ATTRIBUTE_MEMORY EFI_PCI_ATTRIBUTE_MEMORY
276 #define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER EFI_PCI_ATTRIBUTE_BUS_MASTER
277 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED EFI_PCI_ATTRIBUTE_MEMORY_CACHED
278 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE EFI_PCI_ATTRIBUTE_MEMORY_DISABLE
279 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE EFI_PCI_ATTRIBUTE_EMBEDDED_DEVICE
280 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM EFI_PCI_ATTRIBUTE_EMBEDDED_ROM
281 #define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE
282 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 EFI_PCI_ATTRIBUTE_ISA_IO_16
283 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16
284 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 EFI_PCI_ATTRIBUTE_VGA_IO_16
285
286 #define EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER \
287 (EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED | EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE)
288
289 #define EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER \
290 (~EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER)
291
292 typedef struct {
293 UINT8 Register;
294 UINT8 Function;
295 UINT8 Device;
296 UINT8 Bus;
297 UINT32 ExtendedRegister;
298 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS;
299
300 typedef enum {
301 EfiPciIoAttributeOperationGet,
302 EfiPciIoAttributeOperationSet,
303 EfiPciIoAttributeOperationEnable,
304 EfiPciIoAttributeOperationDisable,
305 EfiPciIoAttributeOperationSupported,
306 EfiPciIoAttributeOperationMaximum
307 } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION;
308
309 typedef
310 EFI_STATUS
311 (EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) (
312 IN struct _EFI_PCI_IO_PROTOCOL *This,
313 IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation,
314 IN UINT64 Attributes,
315 OUT UINT64 *Result OPTIONAL
316 );
317
318 typedef
319 EFI_STATUS
320 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) (
321 IN struct _EFI_PCI_IO_PROTOCOL *This,
322 IN UINT8 BarIndex,
323 OUT UINT64 *Supports OPTIONAL,
324 OUT VOID **Resources OPTIONAL
325 );
326
327 typedef
328 EFI_STATUS
329 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES) (
330 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
331 OUT UINT64 *Supports,
332 OUT UINT64 *Attributes
333 );
334
335 typedef
336 EFI_STATUS
337 (EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) (
338 IN struct _EFI_PCI_IO_PROTOCOL *This,
339 IN UINT64 Attributes,
340 IN UINT8 BarIndex,
341 IN OUT UINT64 *Offset,
342 IN OUT UINT64 *Length
343 );
344
345 typedef
346 EFI_STATUS
347 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES) (
348 IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
349 IN UINT64 Attributes,
350 IN OUT UINT64 *ResourceBase,
351 IN OUT UINT64 *ResourceLength
352 );
353
354 typedef struct _EFI_PCI_IO_PROTOCOL {
355 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem;
356 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo;
357 EFI_PCI_IO_PROTOCOL_ACCESS Mem;
358 EFI_PCI_IO_PROTOCOL_ACCESS Io;
359 EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;
360 EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem;
361 EFI_PCI_IO_PROTOCOL_MAP Map;
362 EFI_PCI_IO_PROTOCOL_UNMAP Unmap;
363 EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer;
364 EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer;
365 EFI_PCI_IO_PROTOCOL_FLUSH Flush;
366 EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation;
367 EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes;
368 EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes;
369 EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes;
370 UINT64 RomSize;
371 VOID *RomImage;
372 } EFI_PCI_IO_PROTOCOL;
373
374 // Note: Because it conflicted with the EDK2 struct name, the
375 // 'EFI_PCI_IO_PROTOCOL' GUID definition, from older versions
376 // of gnu-efi, is now obsoleted.
377 // Use 'EFI_PCI_IO_PROTOCOL_GUID' instead.
378
379 typedef struct _EFI_PCI_IO_PROTOCOL _EFI_PCI_IO;
380 typedef EFI_PCI_IO_PROTOCOL EFI_PCI_IO;
381
382 typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL {
383 EFI_HANDLE ParentHandle;
384 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollMem;
385 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollIo;
386 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Mem;
387 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Io;
388 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Pci;
389 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM CopyMem;
390 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP Map;
391 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP Unmap;
392 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer;
393 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER FreeBuffer;
394 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH Flush;
395 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES GetAttributes;
396 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES SetAttributes;
397 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION Configuration;
398 UINT32 SegmentNumber;
399 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL;
400
401 #endif /* _EFI_PCI_IO_H */
402