efiprot.h revision 1.1.1.3 1 /* $NetBSD: efiprot.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
2
3 #ifndef _EFI_PROT_H
4 #define _EFI_PROT_H
5
6 /*++
7
8 Copyright (c) 1998 Intel Corporation
9
10 Module Name:
11
12 efiprot.h
13
14 Abstract:
15
16 EFI Protocols
17
18
19
20 Revision History
21
22 --*/
23
24 //
25 // FPSWA library protocol
26 //
27 #define EFI_FPSWA_PROTOCOL_GUID \
28 { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
29 #define FPSWA_PROTOCOL EFI_FPSWA_PROTOCOL_GUID
30
31 //
32 // Device Path protocol
33 //
34
35 #define EFI_DEVICE_PATH_PROTOCOL_GUID \
36 { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
37 #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID
38
39
40 //
41 // Block IO protocol
42 //
43
44 #define EFI_BLOCK_IO_PROTOCOL_GUID \
45 { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
46 #define BLOCK_IO_PROTOCOL EFI_BLOCK_IO_PROTOCOL_GUID
47
48 #define EFI_BLOCK_IO_PROTOCOL_REVISION 0x00010000
49 #define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001
50 #define EFI_BLOCK_IO_PROTOCOL_REVISION3 ((2<<16) | 31)
51 #define EFI_BLOCK_IO_INTERFACE_REVISION EFI_BLOCK_IO_PROTOCOL_REVISION
52 #define EFI_BLOCK_IO_INTERFACE_REVISION2 EFI_BLOCK_IO_PROTOCOL_REVISION2
53 #define EFI_BLOCK_IO_INTERFACE_REVISION3 EFI_BLOCK_IO_PROTOCOL_REVISION3
54
55 INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL);
56
57 typedef
58 EFI_STATUS
59 (EFIAPI *EFI_BLOCK_RESET) (
60 IN struct _EFI_BLOCK_IO_PROTOCOL *This,
61 IN BOOLEAN ExtendedVerification
62 );
63
64 typedef
65 EFI_STATUS
66 (EFIAPI *EFI_BLOCK_READ) (
67 IN struct _EFI_BLOCK_IO_PROTOCOL *This,
68 IN UINT32 MediaId,
69 IN EFI_LBA LBA,
70 IN UINTN BufferSize,
71 OUT VOID *Buffer
72 );
73
74
75 typedef
76 EFI_STATUS
77 (EFIAPI *EFI_BLOCK_WRITE) (
78 IN struct _EFI_BLOCK_IO_PROTOCOL *This,
79 IN UINT32 MediaId,
80 IN EFI_LBA LBA,
81 IN UINTN BufferSize,
82 IN VOID *Buffer
83 );
84
85
86 typedef
87 EFI_STATUS
88 (EFIAPI *EFI_BLOCK_FLUSH) (
89 IN struct _EFI_BLOCK_IO_PROTOCOL *This
90 );
91
92
93
94 typedef struct {
95 UINT32 MediaId;
96 BOOLEAN RemovableMedia;
97 BOOLEAN MediaPresent;
98
99 BOOLEAN LogicalPartition;
100 BOOLEAN ReadOnly;
101 BOOLEAN WriteCaching;
102
103 UINT32 BlockSize;
104 UINT32 IoAlign;
105
106 EFI_LBA LastBlock;
107
108 /* revision 2 */
109 EFI_LBA LowestAlignedLba;
110 UINT32 LogicalBlocksPerPhysicalBlock;
111 /* revision 3 */
112 UINT32 OptimalTransferLengthGranularity;
113 } EFI_BLOCK_IO_MEDIA;
114
115 typedef struct _EFI_BLOCK_IO_PROTOCOL {
116 UINT64 Revision;
117
118 EFI_BLOCK_IO_MEDIA *Media;
119
120 EFI_BLOCK_RESET Reset;
121 EFI_BLOCK_READ ReadBlocks;
122 EFI_BLOCK_WRITE WriteBlocks;
123 EFI_BLOCK_FLUSH FlushBlocks;
124
125 } EFI_BLOCK_IO_PROTOCOL;
126
127 typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO;
128 typedef EFI_BLOCK_IO_PROTOCOL EFI_BLOCK_IO;
129
130 #define EFI_BLOCK_IO2_PROTOCOL_GUID \
131 { 0xa77b2472, 0xe282, 0x4e9f, {0xa2, 0x45, 0xc2, 0xc0, 0xe2, 0x7b, 0xbc, 0xc1} }
132
133 INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL);
134
135 typedef struct {
136 EFI_EVENT Event;
137 EFI_STATUS TransactionStatus;
138 } EFI_BLOCK_IO2_TOKEN;
139
140 typedef
141 EFI_STATUS
142 (EFIAPI *EFI_BLOCK_RESET_EX) (
143 IN struct _EFI_BLOCK_IO2_PROTOCOL *This,
144 IN BOOLEAN ExtendedVerification
145 );
146
147 typedef
148 EFI_STATUS
149 (EFIAPI *EFI_BLOCK_READ_EX) (
150 IN struct _EFI_BLOCK_IO2_PROTOCOL *This,
151 IN UINT32 MediaId,
152 IN EFI_LBA LBA,
153 IN OUT EFI_BLOCK_IO2_TOKEN *Token,
154 IN UINTN BufferSize,
155 OUT VOID *Buffer
156 );
157
158 typedef
159 EFI_STATUS
160 (EFIAPI *EFI_BLOCK_WRITE_EX) (
161 IN struct _EFI_BLOCK_IO2_PROTOCOL *This,
162 IN UINT32 MediaId,
163 IN EFI_LBA LBA,
164 IN OUT EFI_BLOCK_IO2_TOKEN *Token,
165 IN UINTN BufferSize,
166 IN VOID *Buffer
167 );
168
169 typedef
170 EFI_STATUS
171 (EFIAPI *EFI_BLOCK_FLUSH_EX) (
172 IN struct _EFI_BLOCK_IO2_PROTOCOL *This,
173 IN OUT EFI_BLOCK_IO2_TOKEN *Token
174 );
175
176 typedef struct _EFI_BLOCK_IO2_PROTOCOL {
177 EFI_BLOCK_IO_MEDIA *Media;
178 EFI_BLOCK_RESET_EX Reset;
179 EFI_BLOCK_READ_EX ReadBlocksEx;
180 EFI_BLOCK_WRITE_EX WriteBlocksEx;
181 EFI_BLOCK_FLUSH_EX FlushBlocksEx;
182 } EFI_BLOCK_IO2_PROTOCOL;
183
184 //
185 // Disk Block IO protocol
186 //
187
188 #define EFI_DISK_IO_PROTOCOL_GUID \
189 { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
190 #define DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL_GUID
191
192 #define EFI_DISK_IO_PROTOCOL_REVISION 0x00010000
193 #define EFI_DISK_IO_INTERFACE_REVISION EFI_DISK_IO_PROTOCOL_REVISION
194
195 INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL);
196
197 typedef
198 EFI_STATUS
199 (EFIAPI *EFI_DISK_READ) (
200 IN struct _EFI_DISK_IO_PROTOCOL *This,
201 IN UINT32 MediaId,
202 IN UINT64 Offset,
203 IN UINTN BufferSize,
204 OUT VOID *Buffer
205 );
206
207
208 typedef
209 EFI_STATUS
210 (EFIAPI *EFI_DISK_WRITE) (
211 IN struct _EFI_DISK_IO_PROTOCOL *This,
212 IN UINT32 MediaId,
213 IN UINT64 Offset,
214 IN UINTN BufferSize,
215 IN VOID *Buffer
216 );
217
218
219 typedef struct _EFI_DISK_IO_PROTOCOL {
220 UINT64 Revision;
221 EFI_DISK_READ ReadDisk;
222 EFI_DISK_WRITE WriteDisk;
223 } EFI_DISK_IO_PROTOCOL;
224
225 typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO;
226 typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO;
227
228
229 #define EFI_DISK_IO2_PROTOCOL_GUID \
230 { 0x151c8eae, 0x7f2c, 0x472c, {0x9e, 0x54, 0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88} }
231
232 #define EFI_DISK_IO2_PROTOCOL_REVISION 0x00020000
233
234 INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL);
235
236 typedef struct {
237 EFI_EVENT Event;
238 EFI_STATUS TransactionStatus;
239 } EFI_DISK_IO2_TOKEN;
240
241 typedef
242 EFI_STATUS
243 (EFIAPI *EFI_DISK_CANCEL_EX) (
244 IN struct _EFI_DISK_IO2_PROTOCOL *This
245 );
246
247 typedef
248 EFI_STATUS
249 (EFIAPI *EFI_DISK_READ_EX) (
250 IN struct _EFI_DISK_IO2_PROTOCOL *This,
251 IN UINT32 MediaId,
252 IN UINT64 Offset,
253 IN OUT EFI_DISK_IO2_TOKEN *Token,
254 IN UINTN BufferSize,
255 OUT VOID *Buffer
256 );
257
258 typedef
259 EFI_STATUS
260 (EFIAPI *EFI_DISK_WRITE_EX) (
261 IN struct _EFI_DISK_IO2_PROTOCOL *This,
262 IN UINT32 MediaId,
263 IN UINT64 Offset,
264 IN OUT EFI_DISK_IO2_TOKEN *Token,
265 IN UINTN BufferSize,
266 IN VOID *Buffer
267 );
268
269 typedef
270 EFI_STATUS
271 (EFIAPI *EFI_DISK_FLUSH_EX) (
272 IN struct _EFI_DISK_IO2_PROTOCOL *This,
273 IN OUT EFI_DISK_IO2_TOKEN *Token
274 );
275
276 typedef struct _EFI_DISK_IO2_PROTOCOL {
277 UINT64 Revision;
278 EFI_DISK_CANCEL_EX Cancel;
279 EFI_DISK_READ_EX ReadDiskEx;
280 EFI_DISK_WRITE_EX WriteDiskEx;
281 EFI_DISK_FLUSH_EX FlushDiskEx;
282 } EFI_DISK_IO2_PROTOCOL;
283
284 //
285 // Simple file system protocol
286 //
287
288 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
289 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
290 #define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID
291
292 INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL);
293 INTERFACE_DECL(_EFI_FILE_HANDLE);
294
295 typedef
296 EFI_STATUS
297 (EFIAPI *EFI_VOLUME_OPEN) (
298 IN struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,
299 OUT struct _EFI_FILE_HANDLE **Root
300 );
301
302 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000
303 #define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION
304
305 typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {
306 UINT64 Revision;
307 EFI_VOLUME_OPEN OpenVolume;
308 } EFI_SIMPLE_FILE_SYSTEM_PROTOCOL;
309
310 typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE;
311 typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE;
312
313 //
314 //
315 //
316
317 typedef
318 EFI_STATUS
319 (EFIAPI *EFI_FILE_OPEN) (
320 IN struct _EFI_FILE_HANDLE *File,
321 OUT struct _EFI_FILE_HANDLE **NewHandle,
322 IN CHAR16 *FileName,
323 IN UINT64 OpenMode,
324 IN UINT64 Attributes
325 );
326
327 // Open modes
328 #define EFI_FILE_MODE_READ 0x0000000000000001
329 #define EFI_FILE_MODE_WRITE 0x0000000000000002
330 #define EFI_FILE_MODE_CREATE 0x8000000000000000
331
332 // File attributes
333 #define EFI_FILE_READ_ONLY 0x0000000000000001
334 #define EFI_FILE_HIDDEN 0x0000000000000002
335 #define EFI_FILE_SYSTEM 0x0000000000000004
336 #define EFI_FILE_RESERVIED 0x0000000000000008
337 #define EFI_FILE_DIRECTORY 0x0000000000000010
338 #define EFI_FILE_ARCHIVE 0x0000000000000020
339 #define EFI_FILE_VALID_ATTR 0x0000000000000037
340
341 typedef
342 EFI_STATUS
343 (EFIAPI *EFI_FILE_CLOSE) (
344 IN struct _EFI_FILE_HANDLE *File
345 );
346
347 typedef
348 EFI_STATUS
349 (EFIAPI *EFI_FILE_DELETE) (
350 IN struct _EFI_FILE_HANDLE *File
351 );
352
353 typedef
354 EFI_STATUS
355 (EFIAPI *EFI_FILE_READ) (
356 IN struct _EFI_FILE_HANDLE *File,
357 IN OUT UINTN *BufferSize,
358 OUT VOID *Buffer
359 );
360
361 typedef
362 EFI_STATUS
363 (EFIAPI *EFI_FILE_WRITE) (
364 IN struct _EFI_FILE_HANDLE *File,
365 IN OUT UINTN *BufferSize,
366 IN VOID *Buffer
367 );
368
369 typedef
370 EFI_STATUS
371 (EFIAPI *EFI_FILE_SET_POSITION) (
372 IN struct _EFI_FILE_HANDLE *File,
373 IN UINT64 Position
374 );
375
376 typedef
377 EFI_STATUS
378 (EFIAPI *EFI_FILE_GET_POSITION) (
379 IN struct _EFI_FILE_HANDLE *File,
380 OUT UINT64 *Position
381 );
382
383 typedef
384 EFI_STATUS
385 (EFIAPI *EFI_FILE_GET_INFO) (
386 IN struct _EFI_FILE_HANDLE *File,
387 IN EFI_GUID *InformationType,
388 IN OUT UINTN *BufferSize,
389 OUT VOID *Buffer
390 );
391
392 typedef
393 EFI_STATUS
394 (EFIAPI *EFI_FILE_SET_INFO) (
395 IN struct _EFI_FILE_HANDLE *File,
396 IN EFI_GUID *InformationType,
397 IN UINTN BufferSize,
398 IN VOID *Buffer
399 );
400
401 typedef
402 EFI_STATUS
403 (EFIAPI *EFI_FILE_FLUSH) (
404 IN struct _EFI_FILE_HANDLE *File
405 );
406
407 typedef struct {
408 EFI_EVENT Event;
409 EFI_STATUS Status;
410 UINTN BufferSize;
411 VOID *Buffer;
412 } EFI_FILE_IO_TOKEN;
413
414 typedef
415 EFI_STATUS
416 (EFIAPI *EFI_FILE_OPEN_EX)(
417 IN struct _EFI_FILE_HANDLE *File,
418 OUT struct _EFI_FILE_HANDLE **NewHandle,
419 IN CHAR16 *FileName,
420 IN UINT64 OpenMode,
421 IN UINT64 Attributes,
422 IN OUT EFI_FILE_IO_TOKEN *Token
423 );
424
425 typedef
426 EFI_STATUS
427 (EFIAPI *EFI_FILE_READ_EX) (
428 IN struct _EFI_FILE_HANDLE *File,
429 IN OUT EFI_FILE_IO_TOKEN *Token
430 );
431
432 typedef
433 EFI_STATUS
434 (EFIAPI *EFI_FILE_WRITE_EX) (
435 IN struct _EFI_FILE_HANDLE *File,
436 IN OUT EFI_FILE_IO_TOKEN *Token
437 );
438
439 typedef
440 EFI_STATUS
441 (EFIAPI *EFI_FILE_FLUSH_EX) (
442 IN struct _EFI_FILE_HANDLE *File,
443 IN OUT EFI_FILE_IO_TOKEN *Token
444 );
445
446 #define EFI_FILE_PROTOCOL_REVISION 0x00010000
447 #define EFI_FILE_PROTOCOL_REVISION2 0x00020000
448 #define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2
449 #define EFI_FILE_HANDLE_REVISION EFI_FILE_PROTOCOL_REVISION
450
451 typedef struct _EFI_FILE_HANDLE {
452 UINT64 Revision;
453 EFI_FILE_OPEN Open;
454 EFI_FILE_CLOSE Close;
455 EFI_FILE_DELETE Delete;
456 EFI_FILE_READ Read;
457 EFI_FILE_WRITE Write;
458 EFI_FILE_GET_POSITION GetPosition;
459 EFI_FILE_SET_POSITION SetPosition;
460 EFI_FILE_GET_INFO GetInfo;
461 EFI_FILE_SET_INFO SetInfo;
462 EFI_FILE_FLUSH Flush;
463 EFI_FILE_OPEN_EX OpenEx;
464 EFI_FILE_READ_EX ReadEx;
465 EFI_FILE_WRITE_EX WriteEx;
466 EFI_FILE_FLUSH_EX FlushEx;
467 } EFI_FILE_PROTOCOL, *EFI_FILE_HANDLE;
468
469 typedef EFI_FILE_PROTOCOL EFI_FILE;
470
471
472 //
473 // File information types
474 //
475
476 #define EFI_FILE_INFO_ID \
477 { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
478
479 typedef struct {
480 UINT64 Size;
481 UINT64 FileSize;
482 UINT64 PhysicalSize;
483 EFI_TIME CreateTime;
484 EFI_TIME LastAccessTime;
485 EFI_TIME ModificationTime;
486 UINT64 Attribute;
487 CHAR16 FileName[1];
488 } EFI_FILE_INFO;
489
490 //
491 // The FileName field of the EFI_FILE_INFO data structure is variable length.
492 // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
493 // be the size of the data structure without the FileName field. The following macro
494 // computes this size correctly no matter how big the FileName array is declared.
495 // This is required to make the EFI_FILE_INFO data structure ANSI compilant.
496 //
497
498 #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
499
500 #define EFI_FILE_SYSTEM_INFO_ID \
501 { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
502
503 typedef struct {
504 UINT64 Size;
505 BOOLEAN ReadOnly;
506 UINT64 VolumeSize;
507 UINT64 FreeSpace;
508 UINT32 BlockSize;
509 CHAR16 VolumeLabel[1];
510 } EFI_FILE_SYSTEM_INFO;
511
512 //
513 // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
514 // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
515 // to be the size of the data structure without the VolumeLable field. The following macro
516 // computes this size correctly no matter how big the VolumeLable array is declared.
517 // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
518 //
519
520 #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
521
522 #define EFI_FILE_SYSTEM_VOLUME_LABEL_ID \
523 { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
524
525 typedef struct {
526 CHAR16 VolumeLabel[1];
527 } EFI_FILE_SYSTEM_VOLUME_LABEL;
528
529 #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL,VolumeLabel)
530
531 //
532 // For compatibility with older versions of gnu-efi
533 //
534 #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID EFI_FILE_SYSTEM_VOLUME_LABEL_ID
535 #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FILE_SYSTEM_VOLUME_LABEL
536
537 //
538 // Load file protocol
539 //
540
541
542 #define EFI_LOAD_FILE_PROTOCOL_GUID \
543 { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
544 #define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID
545
546 INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL);
547
548 typedef
549 EFI_STATUS
550 (EFIAPI *EFI_LOAD_FILE) (
551 IN struct _EFI_LOAD_FILE_PROTOCOL *This,
552 IN EFI_DEVICE_PATH *FilePath,
553 IN BOOLEAN BootPolicy,
554 IN OUT UINTN *BufferSize,
555 IN VOID *Buffer OPTIONAL
556 );
557
558 typedef struct _EFI_LOAD_FILE_PROTOCOL {
559 EFI_LOAD_FILE LoadFile;
560 } EFI_LOAD_FILE_PROTOCOL;
561
562 typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE;
563 typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE;
564
565 //
566 // Device IO protocol
567 //
568
569 #define EFI_DEVICE_IO_PROTOCOL_GUID \
570 { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
571 #define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID
572
573 INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL);
574
575 typedef enum {
576 IO_UINT8,
577 IO_UINT16,
578 IO_UINT32,
579 IO_UINT64,
580 //
581 // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
582 //
583 MMIO_COPY_UINT8,
584 MMIO_COPY_UINT16,
585 MMIO_COPY_UINT32,
586 MMIO_COPY_UINT64
587 } EFI_IO_WIDTH;
588
589 #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
590 ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
591
592
593 typedef
594 EFI_STATUS
595 (EFIAPI *EFI_DEVICE_IO) (
596 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
597 IN EFI_IO_WIDTH Width,
598 IN UINT64 Address,
599 IN UINTN Count,
600 IN OUT VOID *Buffer
601 );
602
603 typedef struct {
604 EFI_DEVICE_IO Read;
605 EFI_DEVICE_IO Write;
606 } EFI_IO_ACCESS;
607
608 typedef
609 EFI_STATUS
610 (EFIAPI *EFI_PCI_DEVICE_PATH) (
611 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
612 IN UINT64 Address,
613 IN OUT EFI_DEVICE_PATH **PciDevicePath
614 );
615
616 typedef enum {
617 EfiBusMasterRead,
618 EfiBusMasterWrite,
619 EfiBusMasterCommonBuffer
620 } EFI_IO_OPERATION_TYPE;
621
622 typedef
623 EFI_STATUS
624 (EFIAPI *EFI_IO_MAP) (
625 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
626 IN EFI_IO_OPERATION_TYPE Operation,
627 IN EFI_PHYSICAL_ADDRESS *HostAddress,
628 IN OUT UINTN *NumberOfBytes,
629 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
630 OUT VOID **Mapping
631 );
632
633 typedef
634 EFI_STATUS
635 (EFIAPI *EFI_IO_UNMAP) (
636 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
637 IN VOID *Mapping
638 );
639
640 typedef
641 EFI_STATUS
642 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
643 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
644 IN EFI_ALLOCATE_TYPE Type,
645 IN EFI_MEMORY_TYPE MemoryType,
646 IN UINTN Pages,
647 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
648 );
649
650 typedef
651 EFI_STATUS
652 (EFIAPI *EFI_IO_FLUSH) (
653 IN struct _EFI_DEVICE_IO_PROTOCOL *This
654 );
655
656 typedef
657 EFI_STATUS
658 (EFIAPI *EFI_IO_FREE_BUFFER) (
659 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
660 IN UINTN Pages,
661 IN EFI_PHYSICAL_ADDRESS HostAddress
662 );
663
664 typedef struct _EFI_DEVICE_IO_PROTOCOL {
665 EFI_IO_ACCESS Mem;
666 EFI_IO_ACCESS Io;
667 EFI_IO_ACCESS Pci;
668 EFI_IO_MAP Map;
669 EFI_PCI_DEVICE_PATH PciDevicePath;
670 EFI_IO_UNMAP Unmap;
671 EFI_IO_ALLOCATE_BUFFER AllocateBuffer;
672 EFI_IO_FLUSH Flush;
673 EFI_IO_FREE_BUFFER FreeBuffer;
674 } EFI_DEVICE_IO_PROTOCOL;
675
676 typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE;
677 typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
678
679 //
680 // Unicode Collation protocol
681 //
682
683 #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
684 { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
685 #define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID
686
687 #define EFI_UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff)
688 #define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK
689
690 INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL);
691
692 typedef
693 INTN
694 (EFIAPI *EFI_UNICODE_STRICOLL) (
695 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
696 IN CHAR16 *s1,
697 IN CHAR16 *s2
698 );
699
700 typedef
701 BOOLEAN
702 (EFIAPI *EFI_UNICODE_METAIMATCH) (
703 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
704 IN CHAR16 *String,
705 IN CHAR16 *Pattern
706 );
707
708 typedef
709 VOID
710 (EFIAPI *EFI_UNICODE_STRLWR) (
711 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
712 IN OUT CHAR16 *Str
713 );
714
715 typedef
716 VOID
717 (EFIAPI *EFI_UNICODE_STRUPR) (
718 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
719 IN OUT CHAR16 *Str
720 );
721
722 typedef
723 VOID
724 (EFIAPI *EFI_UNICODE_FATTOSTR) (
725 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
726 IN UINTN FatSize,
727 IN CHAR8 *Fat,
728 OUT CHAR16 *String
729 );
730
731 typedef
732 BOOLEAN
733 (EFIAPI *EFI_UNICODE_STRTOFAT) (
734 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
735 IN CHAR16 *String,
736 IN UINTN FatSize,
737 OUT CHAR8 *Fat
738 );
739
740 //
741 // Hash Protocol
742 //
743 #define EFI_HASH_PROTOCOL_GUID \
744 { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } }
745 #define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID
746
747 #define EFI_HASH_ALGORITHM_SHA1_GUID \
748 { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated
749 #define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID
750
751 #define EFI_HASH_ALGORITHM_SHA224_GUID \
752 { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated
753 #define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID
754
755 #define EFI_HASH_ALGORITHM_SHA256_GUID \
756 { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated
757 #define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID
758
759 #define EFI_HASH_ALGORITHM_SHA384_GUID \
760 { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated
761 #define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID
762
763 #define EFI_HASH_ALGORITHM_SHA512_GUID \
764 { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated
765 #define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID
766
767 #define EFI_HASH_ALGORITHM_MD5_GUID \
768 { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated
769 #define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID
770
771 #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \
772 { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } }
773 #define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID
774
775 #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \
776 { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } }
777 #define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID
778
779
780 INTERFACE_DECL(_EFI_HASH_PROTOCOL);
781
782 typedef UINT8 EFI_MD5_HASH[16];
783 typedef UINT8 EFI_SHA1_HASH[20];
784 typedef UINT8 EFI_SHA224_HASH[28];
785 typedef UINT8 EFI_SHA256_HASH[32];
786 typedef UINT8 EFI_SHA384_HASH[48];
787 typedef UINT8 EFI_SHA512_HASH[64];
788 typedef union _EFI_HASH_OUTPUT {
789 EFI_MD5_HASH *Md5Hash;
790 EFI_SHA1_HASH *Sha1Hash;
791 EFI_SHA224_HASH *Sha224Hash;
792 EFI_SHA256_HASH *Sha256Hash;
793 EFI_SHA384_HASH *Sha384Hash;
794 EFI_SHA512_HASH *Sha512Hash;
795 } EFI_HASH_OUTPUT;
796
797 typedef
798 EFI_STATUS
799 (EFIAPI *EFI_HASH_GET_HASH_SIZE) (
800 IN CONST struct _EFI_HASH_PROTOCOL *This,
801 IN CONST EFI_GUID *HashAlgorithm,
802 OUT UINTN *HashSize);
803
804 typedef
805 EFI_STATUS
806 (EFIAPI *EFI_HASH_HASH) (
807 IN CONST struct _EFI_HASH_PROTOCOL *This,
808 IN CONST EFI_GUID *HashAlgorithm,
809 IN BOOLEAN Extend,
810 IN CONST UINT8 *Message,
811 IN UINT64 MessageSize,
812 IN OUT EFI_HASH_OUTPUT *Hash);
813
814 typedef struct _EFI_HASH_PROTOCOL {
815 EFI_HASH_GET_HASH_SIZE GetHashSize;
816 EFI_HASH_HASH Hash;
817 } EFI_HASH_PROTOCOL;
818
819 typedef struct _EFI_HASH_PROTOCOL _EFI_HASH;
820 typedef EFI_HASH_PROTOCOL EFI_HASH;
821
822
823 typedef struct _EFI_UNICODE_COLLATION_PROTOCOL {
824
825 // general
826 EFI_UNICODE_STRICOLL StriColl;
827 EFI_UNICODE_METAIMATCH MetaiMatch;
828 EFI_UNICODE_STRLWR StrLwr;
829 EFI_UNICODE_STRUPR StrUpr;
830
831 // for supporting fat volumes
832 EFI_UNICODE_FATTOSTR FatToStr;
833 EFI_UNICODE_STRTOFAT StrToFat;
834
835 CHAR8 *SupportedLanguages;
836 } EFI_UNICODE_COLLATION_PROTOCOL;
837
838 typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE;
839
840 /* Graphics output protocol */
841 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
842 { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } }
843 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
844
845 typedef struct {
846 UINT32 RedMask;
847 UINT32 GreenMask;
848 UINT32 BlueMask;
849 UINT32 ReservedMask;
850 } EFI_PIXEL_BITMASK;
851
852 typedef enum {
853 PixelRedGreenBlueReserved8BitPerColor,
854 PixelBlueGreenRedReserved8BitPerColor,
855 PixelBitMask,
856 PixelBltOnly,
857 PixelFormatMax
858 } EFI_GRAPHICS_PIXEL_FORMAT;
859
860 typedef struct {
861 UINT32 Version;
862 UINT32 HorizontalResolution;
863 UINT32 VerticalResolution;
864 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
865 EFI_PIXEL_BITMASK PixelInformation;
866 UINT32 PixelsPerScanLine;
867 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
868
869 /**
870 Return the current video mode information.
871
872 @param This Protocol instance pointer.
873 @param ModeNumber The mode number to return information on.
874 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
875 @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
876
877 @retval EFI_SUCCESS Mode information returned.
878 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
879 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
880 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
881 @retval EFI_INVALID_PARAMETER One of the input args was NULL.
882
883 **/
884 typedef
885 EFI_STATUS
886 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
887 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
888 IN UINT32 ModeNumber,
889 OUT UINTN *SizeOfInfo,
890 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
891 )
892 ;
893
894 /**
895 Return the current video mode information.
896
897 @param This Protocol instance pointer.
898 @param ModeNumber The mode number to be set.
899
900 @retval EFI_SUCCESS Graphics mode was changed.
901 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
902 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
903
904 **/
905 typedef
906 EFI_STATUS
907 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
908 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
909 IN UINT32 ModeNumber
910 );
911
912 typedef struct {
913 UINT8 Blue;
914 UINT8 Green;
915 UINT8 Red;
916 UINT8 Reserved;
917 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
918
919 typedef union {
920 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
921 UINT32 Raw;
922 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
923
924 typedef enum {
925 EfiBltVideoFill,
926 EfiBltVideoToBltBuffer,
927 EfiBltBufferToVideo,
928 EfiBltVideoToVideo,
929 EfiGraphicsOutputBltOperationMax
930 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
931
932 /**
933 The following table defines actions for BltOperations:
934
935 <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY)
936 directly to every pixel of the video display rectangle
937 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
938 Only one pixel will be used from the BltBuffer. Delta is NOT used.
939
940 <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
941 (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
942 the BltBuffer rectangle (DestinationX, DestinationY )
943 (DestinationX + Width, DestinationY + Height). If DestinationX or
944 DestinationY is not zero then Delta must be set to the length in bytes
945 of a row in the BltBuffer.
946
947 <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle
948 (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
949 video display rectangle (DestinationX, DestinationY)
950 (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
951 not zero then Delta must be set to the length in bytes of a row in the
952 BltBuffer.
953
954 <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
955 (SourceX + Width, SourceY + Height) .to the video display rectangle
956 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
957 The BltBuffer and Delta are not used in this mode.
958
959 @param This Protocol instance pointer.
960 @param BltBuffer Buffer containing data to blit into video buffer. This
961 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
962 @param BltOperation Operation to perform on BlitBuffer and video memory
963 @param SourceX X coordinate of source for the BltBuffer.
964 @param SourceY Y coordinate of source for the BltBuffer.
965 @param DestinationX X coordinate of destination for the BltBuffer.
966 @param DestinationY Y coordinate of destination for the BltBuffer.
967 @param Width Width of rectangle in BltBuffer in pixels.
968 @param Height Hight of rectangle in BltBuffer in pixels.
969 @param Delta OPTIONAL
970
971 @retval EFI_SUCCESS The Blt operation completed.
972 @retval EFI_INVALID_PARAMETER BltOperation is not valid.
973 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
974
975 **/
976 typedef
977 EFI_STATUS
978 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
979 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
980 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
981 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
982 IN UINTN SourceX,
983 IN UINTN SourceY,
984 IN UINTN DestinationX,
985 IN UINTN DestinationY,
986 IN UINTN Width,
987 IN UINTN Height,
988 IN UINTN Delta OPTIONAL
989 );
990
991 typedef struct {
992 UINT32 MaxMode;
993 UINT32 Mode;
994 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
995 UINTN SizeOfInfo;
996 EFI_PHYSICAL_ADDRESS FrameBufferBase;
997 UINTN FrameBufferSize;
998 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
999
1000 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
1001 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
1002 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
1003 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
1004 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
1005 };
1006
1007
1008
1009 /*
1010 * EFI EDID Discovered Protocol
1011 * UEFI Specification Version 2.5 Section 11.9
1012 */
1013 #define EFI_EDID_DISCOVERED_PROTOCOL_GUID \
1014 { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} }
1015
1016 typedef struct _EFI_EDID_DISCOVERED_PROTOCOL {
1017 UINT32 SizeOfEdid;
1018 UINT8 *Edid;
1019 } EFI_EDID_DISCOVERED_PROTOCOL;
1020
1021
1022
1023 /*
1024 * EFI EDID Active Protocol
1025 * UEFI Specification Version 2.5 Section 11.9
1026 */
1027 #define EFI_EDID_ACTIVE_PROTOCOL_GUID \
1028 { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} }
1029
1030 typedef struct _EFI_EDID_ACTIVE_PROTOCOL {
1031 UINT32 SizeOfEdid;
1032 UINT8 *Edid;
1033 } EFI_EDID_ACTIVE_PROTOCOL;
1034
1035
1036
1037 /*
1038 * EFI EDID Override Protocol
1039 * UEFI Specification Version 2.5 Section 11.9
1040 */
1041 #define EFI_EDID_OVERRIDE_PROTOCOL_GUID \
1042 { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} }
1043
1044 INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL);
1045
1046 typedef
1047 EFI_STATUS
1048 (EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) (
1049 IN struct _EFI_EDID_OVERRIDE_PROTOCOL *This,
1050 IN EFI_HANDLE *ChildHandle,
1051 OUT UINT32 *Attributes,
1052 IN OUT UINTN *EdidSize,
1053 IN OUT UINT8 **Edid);
1054
1055 typedef struct _EFI_EDID_OVERRIDE_PROTOCOL {
1056 EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID GetEdid;
1057 } EFI_EDID_OVERRIDE_PROTOCOL;
1058
1059
1060
1061 INTERFACE_DECL(_EFI_SERVICE_BINDING);
1062
1063 typedef
1064 EFI_STATUS
1065 (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
1066 IN struct _EFI_SERVICE_BINDING *This,
1067 IN EFI_HANDLE *ChildHandle
1068 );
1069
1070 typedef
1071 EFI_STATUS
1072 (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
1073 IN struct _EFI_SERVICE_BINDING *This,
1074 IN EFI_HANDLE ChildHandle
1075 );
1076
1077 typedef struct _EFI_SERVICE_BINDING {
1078 EFI_SERVICE_BINDING_CREATE_CHILD CreateChild;
1079 EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
1080 } EFI_SERVICE_BINDING;
1081
1082
1083
1084 /*
1085 * EFI Driver Binding Protocol
1086 * UEFI Specification Version 2.5 Section 10.1
1087 */
1088 #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
1089 { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} }
1090 #define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID
1091
1092 INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL);
1093
1094 typedef
1095 EFI_STATUS
1096 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) (
1097 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1098 IN EFI_HANDLE ControllerHandle,
1099 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL);
1100
1101 typedef
1102 EFI_STATUS
1103 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) (
1104 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1105 IN EFI_HANDLE ControllerHandle,
1106 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL);
1107
1108 typedef
1109 EFI_STATUS
1110 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) (
1111 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1112 IN EFI_HANDLE ControllerHandle,
1113 IN UINTN NumberOfChildren,
1114 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL);
1115
1116 typedef struct _EFI_DRIVER_BINDING_PROTOCOL {
1117 EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported;
1118 EFI_DRIVER_BINDING_PROTOCOL_START Start;
1119 EFI_DRIVER_BINDING_PROTOCOL_STOP Stop;
1120 UINT32 Version;
1121 EFI_HANDLE ImageHandle;
1122 EFI_HANDLE DriverBindingHandle;
1123 } EFI_DRIVER_BINDING_PROTOCOL;
1124
1125 typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING;
1126 typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING;
1127
1128
1129 /*
1130 * Backwards compatibility with older GNU-EFI versions. Deprecated.
1131 */
1132 #define EFI_DRIVER_SUPPORTED EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED
1133 #define EFI_DRIVER_START EFI_DRIVER_BINDING_PROTOCOL_START
1134 #define EFI_DRIVER_STOP EFI_DRIVER_BINDING_PROTOCOL_STOP
1135
1136
1137
1138 /*
1139 * EFI Component Name Protocol
1140 * Deprecated - use EFI Component Name 2 Protocol instead
1141 */
1142 #define EFI_COMPONENT_NAME_PROTOCOL_GUID \
1143 {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
1144 #define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID
1145
1146 INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL);
1147
1148 typedef
1149 EFI_STATUS
1150 (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) (
1151 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This,
1152 IN CHAR8 *Language,
1153 OUT CHAR16 **DriverName);
1154
1155 typedef
1156 EFI_STATUS
1157 (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) (
1158 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This,
1159 IN EFI_HANDLE ControllerHandle,
1160 IN EFI_HANDLE ChildHandle OPTIONAL,
1161 IN CHAR8 *Language,
1162 OUT CHAR16 **ControllerName);
1163
1164 typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
1165 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName;
1166 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName;
1167 CHAR8 *SupportedLanguages;
1168 } EFI_COMPONENT_NAME_PROTOCOL;
1169
1170 typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME;
1171 typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME;
1172
1173
1174 /*
1175 * EFI Component Name 2 Protocol
1176 * UEFI Specification Version 2.5 Section 10.5
1177 */
1178 #define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
1179 {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} }
1180 #define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID
1181
1182 INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL);
1183
1184 typedef
1185 EFI_STATUS
1186 (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) (
1187 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This,
1188 IN CHAR8 *Language,
1189 OUT CHAR16 **DriverName);
1190
1191 typedef
1192 EFI_STATUS
1193 (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) (
1194 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This,
1195 IN EFI_HANDLE ControllerHandle,
1196 IN EFI_HANDLE ChildHandle OPTIONAL,
1197 IN CHAR8 *Language,
1198 OUT CHAR16 **ControllerName);
1199
1200 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL {
1201 EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName;
1202 EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName;
1203 CHAR8 *SupportedLanguages;
1204 } EFI_COMPONENT_NAME2_PROTOCOL;
1205
1206 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2;
1207 typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2;
1208
1209
1210
1211 /*
1212 * EFI Loaded Image Protocol
1213 * UEFI Specification Version 2.5 Section 8.1
1214 */
1215 #define EFI_LOADED_IMAGE_PROTOCOL_GUID \
1216 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
1217 #define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID
1218
1219 #define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
1220 #define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION
1221
1222 typedef
1223 EFI_STATUS
1224 (EFIAPI *EFI_IMAGE_UNLOAD) (
1225 IN EFI_HANDLE ImageHandle
1226 );
1227
1228 typedef struct {
1229 UINT32 Revision;
1230 EFI_HANDLE ParentHandle;
1231 struct _EFI_SYSTEM_TABLE *SystemTable;
1232
1233 // Source location of image
1234 EFI_HANDLE DeviceHandle;
1235 EFI_DEVICE_PATH *FilePath;
1236 VOID *Reserved;
1237
1238 // Images load options
1239 UINT32 LoadOptionsSize;
1240 VOID *LoadOptions;
1241
1242 // Location of where image was loaded
1243 VOID *ImageBase;
1244 UINT64 ImageSize;
1245 EFI_MEMORY_TYPE ImageCodeType;
1246 EFI_MEMORY_TYPE ImageDataType;
1247
1248 // If the driver image supports a dynamic unload request
1249 EFI_IMAGE_UNLOAD Unload;
1250 } EFI_LOADED_IMAGE_PROTOCOL;
1251
1252 typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
1253
1254 #define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
1255 {0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf} }
1256
1257 /*
1258 * Random Number Generator Protocol
1259 * UEFI Specification Version 2.5 Section 35.5
1260 */
1261 #define EFI_RNG_PROTOCOL_GUID \
1262 { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} }
1263
1264 typedef EFI_GUID EFI_RNG_ALGORITHM;
1265
1266 #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \
1267 {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} }
1268
1269 #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \
1270 {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} }
1271
1272 #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \
1273 {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} }
1274
1275 #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \
1276 {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} }
1277
1278 #define EFI_RNG_ALGORITHM_X9_31_AES_GUID \
1279 {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} }
1280
1281 #define EFI_RNG_ALGORITHM_RAW \
1282 {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} }
1283
1284 INTERFACE_DECL(_EFI_RNG_PROTOCOL);
1285
1286 typedef
1287 EFI_STATUS
1288 (EFIAPI *EFI_RNG_GET_INFO) (
1289 IN struct _EFI_RNG_PROTOCOL *This,
1290 IN OUT UINTN *RNGAlgorithmListSize,
1291 OUT EFI_RNG_ALGORITHM *RNGAlgorithmList
1292 );
1293
1294 typedef
1295 EFI_STATUS
1296 (EFIAPI *EFI_RNG_GET_RNG) (
1297 IN struct _EFI_RNG_PROTOCOL *This,
1298 IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL
1299 IN UINTN RNGValueLength,
1300 OUT UINT8 *RNGValue
1301 );
1302
1303 typedef struct _EFI_RNG_PROTOCOL {
1304 EFI_RNG_GET_INFO GetInfo;
1305 EFI_RNG_GET_RNG GetRNG;
1306 } EFI_RNG_PROTOCOL;
1307
1308
1309 //
1310 // EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL
1311 //
1312
1313 #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \
1314 { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
1315
1316 INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL);
1317
1318 typedef
1319 EFI_STATUS
1320 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) (
1321 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1322 IN EFI_HANDLE ControllerHandle,
1323 IN OUT EFI_HANDLE *DriverImageHandle);
1324
1325 typedef
1326 EFI_STATUS
1327 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) (
1328 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1329 IN EFI_HANDLE ControllerHandle,
1330 IN OUT EFI_DEVICE_PATH **DriverImagePath);
1331
1332 typedef
1333 EFI_STATUS
1334 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) (
1335 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1336 IN EFI_HANDLE ControllerHandle,
1337 IN EFI_DEVICE_PATH *DriverImagePath,
1338 IN EFI_HANDLE DriverImageHandle);
1339
1340 typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
1341 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver;
1342 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath;
1343 EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded;
1344 } EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
1345
1346 //
1347 // EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL
1348 //
1349
1350 #define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID \
1351 { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} }
1352
1353 INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL);
1354
1355 typedef
1356 EFI_STATUS
1357 (EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) (
1358 IN struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This,
1359 IN OUT EFI_HANDLE *DriverImageHandle);
1360
1361 typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL {
1362 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver;
1363 } EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL;
1364
1365 //
1366 // EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL
1367 //
1368
1369 #define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID \
1370 { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} }
1371
1372 INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL);
1373
1374 typedef
1375 UINT32
1376 (EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) (
1377 IN struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL *This);
1378
1379 typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL {
1380 EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION GetVersion;
1381 } EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL;
1382
1383 //
1384 // EFI_EBC_PROTOCOL
1385 //
1386
1387 #define EFI_EBC_INTERPRETER_PROTOCOL_GUID \
1388 {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} }
1389
1390 #define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID
1391
1392 INTERFACE_DECL(_EFI_EBC_PROTOCOL);
1393
1394 typedef
1395 EFI_STATUS
1396 (EFIAPI *EFI_EBC_CREATE_THUNK)(
1397 IN struct _EFI_EBC_PROTOCOL *This,
1398 IN EFI_HANDLE ImageHandle,
1399 IN VOID *EbcEntryPoint,
1400 OUT VOID **Thunk);
1401
1402 typedef
1403 EFI_STATUS
1404 (EFIAPI *EFI_EBC_UNLOAD_IMAGE)(
1405 IN struct _EFI_EBC_PROTOCOL *This,
1406 IN EFI_HANDLE ImageHandle);
1407
1408 typedef
1409 EFI_STATUS
1410 (EFIAPI *EBC_ICACHE_FLUSH)(
1411 IN EFI_PHYSICAL_ADDRESS Start,
1412 IN UINT64 Length);
1413
1414 typedef
1415 EFI_STATUS
1416 (EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)(
1417 IN struct _EFI_EBC_PROTOCOL *This,
1418 IN EBC_ICACHE_FLUSH Flush);
1419
1420 typedef
1421 EFI_STATUS
1422 (EFIAPI *EFI_EBC_GET_VERSION)(
1423 IN struct _EFI_EBC_PROTOCOL *This,
1424 IN OUT UINT64 *Version);
1425
1426 typedef struct _EFI_EBC_PROTOCOL {
1427 EFI_EBC_CREATE_THUNK CreateThunk;
1428 EFI_EBC_UNLOAD_IMAGE UnloadImage;
1429 EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush;
1430 EFI_EBC_GET_VERSION GetVersion;
1431 } EFI_EBC_PROTOCOL;
1432
1433 #endif
1434