efiprot.h revision 1.1.1.2 1 /* $NetBSD: efiprot.h,v 1.1.1.2 2018/08/16 18:17:47 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_INFO_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_INFO;
528
529 #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
530
531 //
532 // Load file protocol
533 //
534
535
536 #define EFI_LOAD_FILE_PROTOCOL_GUID \
537 { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
538 #define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID
539
540 INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL);
541
542 typedef
543 EFI_STATUS
544 (EFIAPI *EFI_LOAD_FILE) (
545 IN struct _EFI_LOAD_FILE_PROTOCOL *This,
546 IN EFI_DEVICE_PATH *FilePath,
547 IN BOOLEAN BootPolicy,
548 IN OUT UINTN *BufferSize,
549 IN VOID *Buffer OPTIONAL
550 );
551
552 typedef struct _EFI_LOAD_FILE_PROTOCOL {
553 EFI_LOAD_FILE LoadFile;
554 } EFI_LOAD_FILE_PROTOCOL;
555
556 typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE;
557 typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE;
558
559 //
560 // Device IO protocol
561 //
562
563 #define EFI_DEVICE_IO_PROTOCOL_GUID \
564 { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
565 #define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID
566
567 INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL);
568
569 typedef enum {
570 IO_UINT8,
571 IO_UINT16,
572 IO_UINT32,
573 IO_UINT64,
574 //
575 // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
576 //
577 MMIO_COPY_UINT8,
578 MMIO_COPY_UINT16,
579 MMIO_COPY_UINT32,
580 MMIO_COPY_UINT64
581 } EFI_IO_WIDTH;
582
583 #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
584 ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
585
586
587 typedef
588 EFI_STATUS
589 (EFIAPI *EFI_DEVICE_IO) (
590 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
591 IN EFI_IO_WIDTH Width,
592 IN UINT64 Address,
593 IN UINTN Count,
594 IN OUT VOID *Buffer
595 );
596
597 typedef struct {
598 EFI_DEVICE_IO Read;
599 EFI_DEVICE_IO Write;
600 } EFI_IO_ACCESS;
601
602 typedef
603 EFI_STATUS
604 (EFIAPI *EFI_PCI_DEVICE_PATH) (
605 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
606 IN UINT64 Address,
607 IN OUT EFI_DEVICE_PATH **PciDevicePath
608 );
609
610 typedef enum {
611 EfiBusMasterRead,
612 EfiBusMasterWrite,
613 EfiBusMasterCommonBuffer
614 } EFI_IO_OPERATION_TYPE;
615
616 typedef
617 EFI_STATUS
618 (EFIAPI *EFI_IO_MAP) (
619 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
620 IN EFI_IO_OPERATION_TYPE Operation,
621 IN EFI_PHYSICAL_ADDRESS *HostAddress,
622 IN OUT UINTN *NumberOfBytes,
623 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
624 OUT VOID **Mapping
625 );
626
627 typedef
628 EFI_STATUS
629 (EFIAPI *EFI_IO_UNMAP) (
630 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
631 IN VOID *Mapping
632 );
633
634 typedef
635 EFI_STATUS
636 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
637 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
638 IN EFI_ALLOCATE_TYPE Type,
639 IN EFI_MEMORY_TYPE MemoryType,
640 IN UINTN Pages,
641 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
642 );
643
644 typedef
645 EFI_STATUS
646 (EFIAPI *EFI_IO_FLUSH) (
647 IN struct _EFI_DEVICE_IO_PROTOCOL *This
648 );
649
650 typedef
651 EFI_STATUS
652 (EFIAPI *EFI_IO_FREE_BUFFER) (
653 IN struct _EFI_DEVICE_IO_PROTOCOL *This,
654 IN UINTN Pages,
655 IN EFI_PHYSICAL_ADDRESS HostAddress
656 );
657
658 typedef struct _EFI_DEVICE_IO_PROTOCOL {
659 EFI_IO_ACCESS Mem;
660 EFI_IO_ACCESS Io;
661 EFI_IO_ACCESS Pci;
662 EFI_IO_MAP Map;
663 EFI_PCI_DEVICE_PATH PciDevicePath;
664 EFI_IO_UNMAP Unmap;
665 EFI_IO_ALLOCATE_BUFFER AllocateBuffer;
666 EFI_IO_FLUSH Flush;
667 EFI_IO_FREE_BUFFER FreeBuffer;
668 } EFI_DEVICE_IO_PROTOCOL;
669
670 typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE;
671 typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE;
672
673 //
674 // Unicode Collation protocol
675 //
676
677 #define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
678 { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
679 #define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID
680
681 #define EFI_UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff)
682 #define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK
683
684 INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL);
685
686 typedef
687 INTN
688 (EFIAPI *EFI_UNICODE_STRICOLL) (
689 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
690 IN CHAR16 *s1,
691 IN CHAR16 *s2
692 );
693
694 typedef
695 BOOLEAN
696 (EFIAPI *EFI_UNICODE_METAIMATCH) (
697 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
698 IN CHAR16 *String,
699 IN CHAR16 *Pattern
700 );
701
702 typedef
703 VOID
704 (EFIAPI *EFI_UNICODE_STRLWR) (
705 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
706 IN OUT CHAR16 *Str
707 );
708
709 typedef
710 VOID
711 (EFIAPI *EFI_UNICODE_STRUPR) (
712 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
713 IN OUT CHAR16 *Str
714 );
715
716 typedef
717 VOID
718 (EFIAPI *EFI_UNICODE_FATTOSTR) (
719 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
720 IN UINTN FatSize,
721 IN CHAR8 *Fat,
722 OUT CHAR16 *String
723 );
724
725 typedef
726 BOOLEAN
727 (EFIAPI *EFI_UNICODE_STRTOFAT) (
728 IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This,
729 IN CHAR16 *String,
730 IN UINTN FatSize,
731 OUT CHAR8 *Fat
732 );
733
734 //
735 // Hash Protocol
736 //
737 #define EFI_HASH_PROTOCOL_GUID \
738 { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } }
739 #define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID
740
741 #define EFI_HASH_ALGORITHM_SHA1_GUID \
742 { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated
743 #define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID
744
745 #define EFI_HASH_ALGORITHM_SHA224_GUID \
746 { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated
747 #define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID
748
749 #define EFI_HASH_ALGORITHM_SHA256_GUID \
750 { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated
751 #define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID
752
753 #define EFI_HASH_ALGORITHM_SHA384_GUID \
754 { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated
755 #define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID
756
757 #define EFI_HASH_ALGORITHM_SHA512_GUID \
758 { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated
759 #define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID
760
761 #define EFI_HASH_ALGORITHM_MD5_GUID \
762 { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated
763 #define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID
764
765 #define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \
766 { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } }
767 #define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID
768
769 #define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \
770 { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } }
771 #define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID
772
773
774 INTERFACE_DECL(_EFI_HASH_PROTOCOL);
775
776 typedef UINT8 EFI_MD5_HASH[16];
777 typedef UINT8 EFI_SHA1_HASH[20];
778 typedef UINT8 EFI_SHA224_HASH[28];
779 typedef UINT8 EFI_SHA256_HASH[32];
780 typedef UINT8 EFI_SHA384_HASH[48];
781 typedef UINT8 EFI_SHA512_HASH[64];
782 typedef union _EFI_HASH_OUTPUT {
783 EFI_MD5_HASH *Md5Hash;
784 EFI_SHA1_HASH *Sha1Hash;
785 EFI_SHA224_HASH *Sha224Hash;
786 EFI_SHA256_HASH *Sha256Hash;
787 EFI_SHA384_HASH *Sha384Hash;
788 EFI_SHA512_HASH *Sha512Hash;
789 } EFI_HASH_OUTPUT;
790
791 typedef
792 EFI_STATUS
793 (EFIAPI *EFI_HASH_GET_HASH_SIZE) (
794 IN CONST struct _EFI_HASH_PROTOCOL *This,
795 IN CONST EFI_GUID *HashAlgorithm,
796 OUT UINTN *HashSize);
797
798 typedef
799 EFI_STATUS
800 (EFIAPI *EFI_HASH_HASH) (
801 IN CONST struct _EFI_HASH_PROTOCOL *This,
802 IN CONST EFI_GUID *HashAlgorithm,
803 IN BOOLEAN Extend,
804 IN CONST UINT8 *Message,
805 IN UINT64 MessageSize,
806 IN OUT EFI_HASH_OUTPUT *Hash);
807
808 typedef struct _EFI_HASH_PROTOCOL {
809 EFI_HASH_GET_HASH_SIZE GetHashSize;
810 EFI_HASH_HASH Hash;
811 } EFI_HASH_PROTOCOL;
812
813 typedef struct _EFI_HASH_PROTOCOL _EFI_HASH;
814 typedef EFI_HASH_PROTOCOL EFI_HASH;
815
816
817 typedef struct _EFI_UNICODE_COLLATION_PROTOCOL {
818
819 // general
820 EFI_UNICODE_STRICOLL StriColl;
821 EFI_UNICODE_METAIMATCH MetaiMatch;
822 EFI_UNICODE_STRLWR StrLwr;
823 EFI_UNICODE_STRUPR StrUpr;
824
825 // for supporting fat volumes
826 EFI_UNICODE_FATTOSTR FatToStr;
827 EFI_UNICODE_STRTOFAT StrToFat;
828
829 CHAR8 *SupportedLanguages;
830 } EFI_UNICODE_COLLATION_PROTOCOL;
831
832 typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE;
833
834 /* Graphics output protocol */
835 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
836 { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } }
837 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
838
839 typedef struct {
840 UINT32 RedMask;
841 UINT32 GreenMask;
842 UINT32 BlueMask;
843 UINT32 ReservedMask;
844 } EFI_PIXEL_BITMASK;
845
846 typedef enum {
847 PixelRedGreenBlueReserved8BitPerColor,
848 PixelBlueGreenRedReserved8BitPerColor,
849 PixelBitMask,
850 PixelBltOnly,
851 PixelFormatMax
852 } EFI_GRAPHICS_PIXEL_FORMAT;
853
854 typedef struct {
855 UINT32 Version;
856 UINT32 HorizontalResolution;
857 UINT32 VerticalResolution;
858 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
859 EFI_PIXEL_BITMASK PixelInformation;
860 UINT32 PixelsPerScanLine;
861 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
862
863 /**
864 Return the current video mode information.
865
866 @param This Protocol instance pointer.
867 @param ModeNumber The mode number to return information on.
868 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
869 @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
870
871 @retval EFI_SUCCESS Mode information returned.
872 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
873 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
874 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
875 @retval EFI_INVALID_PARAMETER One of the input args was NULL.
876
877 **/
878 typedef
879 EFI_STATUS
880 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
881 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
882 IN UINT32 ModeNumber,
883 OUT UINTN *SizeOfInfo,
884 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
885 )
886 ;
887
888 /**
889 Return the current video mode information.
890
891 @param This Protocol instance pointer.
892 @param ModeNumber The mode number to be set.
893
894 @retval EFI_SUCCESS Graphics mode was changed.
895 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
896 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
897
898 **/
899 typedef
900 EFI_STATUS
901 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
902 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
903 IN UINT32 ModeNumber
904 );
905
906 typedef struct {
907 UINT8 Blue;
908 UINT8 Green;
909 UINT8 Red;
910 UINT8 Reserved;
911 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
912
913 typedef union {
914 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
915 UINT32 Raw;
916 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
917
918 typedef enum {
919 EfiBltVideoFill,
920 EfiBltVideoToBltBuffer,
921 EfiBltBufferToVideo,
922 EfiBltVideoToVideo,
923 EfiGraphicsOutputBltOperationMax
924 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
925
926 /**
927 The following table defines actions for BltOperations:
928
929 <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY)
930 directly to every pixel of the video display rectangle
931 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
932 Only one pixel will be used from the BltBuffer. Delta is NOT used.
933
934 <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
935 (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
936 the BltBuffer rectangle (DestinationX, DestinationY )
937 (DestinationX + Width, DestinationY + Height). If DestinationX or
938 DestinationY is not zero then Delta must be set to the length in bytes
939 of a row in the BltBuffer.
940
941 <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle
942 (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
943 video display rectangle (DestinationX, DestinationY)
944 (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
945 not zero then Delta must be set to the length in bytes of a row in the
946 BltBuffer.
947
948 <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
949 (SourceX + Width, SourceY + Height) .to the video display rectangle
950 (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
951 The BltBuffer and Delta are not used in this mode.
952
953 @param This Protocol instance pointer.
954 @param BltBuffer Buffer containing data to blit into video buffer. This
955 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
956 @param BltOperation Operation to perform on BlitBuffer and video memory
957 @param SourceX X coordinate of source for the BltBuffer.
958 @param SourceY Y coordinate of source for the BltBuffer.
959 @param DestinationX X coordinate of destination for the BltBuffer.
960 @param DestinationY Y coordinate of destination for the BltBuffer.
961 @param Width Width of rectangle in BltBuffer in pixels.
962 @param Height Hight of rectangle in BltBuffer in pixels.
963 @param Delta OPTIONAL
964
965 @retval EFI_SUCCESS The Blt operation completed.
966 @retval EFI_INVALID_PARAMETER BltOperation is not valid.
967 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
968
969 **/
970 typedef
971 EFI_STATUS
972 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
973 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
974 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
975 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
976 IN UINTN SourceX,
977 IN UINTN SourceY,
978 IN UINTN DestinationX,
979 IN UINTN DestinationY,
980 IN UINTN Width,
981 IN UINTN Height,
982 IN UINTN Delta OPTIONAL
983 );
984
985 typedef struct {
986 UINT32 MaxMode;
987 UINT32 Mode;
988 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
989 UINTN SizeOfInfo;
990 EFI_PHYSICAL_ADDRESS FrameBufferBase;
991 UINTN FrameBufferSize;
992 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
993
994 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
995 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
996 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
997 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
998 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
999 };
1000
1001
1002
1003 /*
1004 * EFI EDID Discovered Protocol
1005 * UEFI Specification Version 2.5 Section 11.9
1006 */
1007 #define EFI_EDID_DISCOVERED_PROTOCOL_GUID \
1008 { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} }
1009
1010 typedef struct _EFI_EDID_DISCOVERED_PROTOCOL {
1011 UINT32 SizeOfEdid;
1012 UINT8 *Edid;
1013 } EFI_EDID_DISCOVERED_PROTOCOL;
1014
1015
1016
1017 /*
1018 * EFI EDID Active Protocol
1019 * UEFI Specification Version 2.5 Section 11.9
1020 */
1021 #define EFI_EDID_ACTIVE_PROTOCOL_GUID \
1022 { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} }
1023
1024 typedef struct _EFI_EDID_ACTIVE_PROTOCOL {
1025 UINT32 SizeOfEdid;
1026 UINT8 *Edid;
1027 } EFI_EDID_ACTIVE_PROTOCOL;
1028
1029
1030
1031 /*
1032 * EFI EDID Override Protocol
1033 * UEFI Specification Version 2.5 Section 11.9
1034 */
1035 #define EFI_EDID_OVERRIDE_PROTOCOL_GUID \
1036 { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} }
1037
1038 INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL);
1039
1040 typedef
1041 EFI_STATUS
1042 (EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) (
1043 IN struct _EFI_EDID_OVERRIDE_PROTOCOL *This,
1044 IN EFI_HANDLE *ChildHandle,
1045 OUT UINT32 *Attributes,
1046 IN OUT UINTN *EdidSize,
1047 IN OUT UINT8 **Edid);
1048
1049 typedef struct _EFI_EDID_OVERRIDE_PROTOCOL {
1050 EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID GetEdid;
1051 } EFI_EDID_OVERRIDE_PROTOCOL;
1052
1053
1054
1055 INTERFACE_DECL(_EFI_SERVICE_BINDING);
1056
1057 typedef
1058 EFI_STATUS
1059 (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
1060 IN struct _EFI_SERVICE_BINDING *This,
1061 IN EFI_HANDLE *ChildHandle
1062 );
1063
1064 typedef
1065 EFI_STATUS
1066 (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
1067 IN struct _EFI_SERVICE_BINDING *This,
1068 IN EFI_HANDLE ChildHandle
1069 );
1070
1071 typedef struct _EFI_SERVICE_BINDING {
1072 EFI_SERVICE_BINDING_CREATE_CHILD CreateChild;
1073 EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
1074 } EFI_SERVICE_BINDING;
1075
1076
1077
1078 /*
1079 * EFI Driver Binding Protocol
1080 * UEFI Specification Version 2.5 Section 10.1
1081 */
1082 #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
1083 { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} }
1084 #define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID
1085
1086 INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL);
1087
1088 typedef
1089 EFI_STATUS
1090 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) (
1091 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1092 IN EFI_HANDLE ControllerHandle,
1093 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL);
1094
1095 typedef
1096 EFI_STATUS
1097 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) (
1098 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1099 IN EFI_HANDLE ControllerHandle,
1100 IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL);
1101
1102 typedef
1103 EFI_STATUS
1104 (EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) (
1105 IN struct _EFI_DRIVER_BINDING_PROTOCOL *This,
1106 IN EFI_HANDLE ControllerHandle,
1107 IN UINTN NumberOfChildren,
1108 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL);
1109
1110 typedef struct _EFI_DRIVER_BINDING_PROTOCOL {
1111 EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported;
1112 EFI_DRIVER_BINDING_PROTOCOL_START Start;
1113 EFI_DRIVER_BINDING_PROTOCOL_STOP Stop;
1114 UINT32 Version;
1115 EFI_HANDLE ImageHandle;
1116 EFI_HANDLE DriverBindingHandle;
1117 } EFI_DRIVER_BINDING_PROTOCOL;
1118
1119 typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING;
1120 typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING;
1121
1122
1123 /*
1124 * Backwards compatibility with older GNU-EFI versions. Deprecated.
1125 */
1126 #define EFI_DRIVER_SUPPORTED EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED
1127 #define EFI_DRIVER_START EFI_DRIVER_BINDING_PROTOCOL_START
1128 #define EFI_DRIVER_STOP EFI_DRIVER_BINDING_PROTOCOL_STOP
1129
1130
1131
1132 /*
1133 * EFI Component Name Protocol
1134 * Deprecated - use EFI Component Name 2 Protocol instead
1135 */
1136 #define EFI_COMPONENT_NAME_PROTOCOL_GUID \
1137 {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
1138 #define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID
1139
1140 INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL);
1141
1142 typedef
1143 EFI_STATUS
1144 (EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) (
1145 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This,
1146 IN CHAR8 *Language,
1147 OUT CHAR16 **DriverName);
1148
1149 typedef
1150 EFI_STATUS
1151 (EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) (
1152 IN struct _EFI_COMPONENT_NAME_PROTOCOL *This,
1153 IN EFI_HANDLE ControllerHandle,
1154 IN EFI_HANDLE ChildHandle OPTIONAL,
1155 IN CHAR8 *Language,
1156 OUT CHAR16 **ControllerName);
1157
1158 typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
1159 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName;
1160 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName;
1161 CHAR8 *SupportedLanguages;
1162 } EFI_COMPONENT_NAME_PROTOCOL;
1163
1164 typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME;
1165 typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME;
1166
1167
1168 /*
1169 * EFI Component Name 2 Protocol
1170 * UEFI Specification Version 2.5 Section 10.5
1171 */
1172 #define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
1173 {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} }
1174 #define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID
1175
1176 INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL);
1177
1178 typedef
1179 EFI_STATUS
1180 (EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) (
1181 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This,
1182 IN CHAR8 *Language,
1183 OUT CHAR16 **DriverName);
1184
1185 typedef
1186 EFI_STATUS
1187 (EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) (
1188 IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This,
1189 IN EFI_HANDLE ControllerHandle,
1190 IN EFI_HANDLE ChildHandle OPTIONAL,
1191 IN CHAR8 *Language,
1192 OUT CHAR16 **ControllerName);
1193
1194 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL {
1195 EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName;
1196 EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName;
1197 CHAR8 *SupportedLanguages;
1198 } EFI_COMPONENT_NAME2_PROTOCOL;
1199
1200 typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2;
1201 typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2;
1202
1203
1204
1205 /*
1206 * EFI Loaded Image Protocol
1207 * UEFI Specification Version 2.5 Section 8.1
1208 */
1209 #define EFI_LOADED_IMAGE_PROTOCOL_GUID \
1210 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
1211 #define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID
1212
1213 #define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
1214 #define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION
1215
1216 typedef
1217 EFI_STATUS
1218 (EFIAPI *EFI_IMAGE_UNLOAD) (
1219 IN EFI_HANDLE ImageHandle
1220 );
1221
1222 typedef struct {
1223 UINT32 Revision;
1224 EFI_HANDLE ParentHandle;
1225 struct _EFI_SYSTEM_TABLE *SystemTable;
1226
1227 // Source location of image
1228 EFI_HANDLE DeviceHandle;
1229 EFI_DEVICE_PATH *FilePath;
1230 VOID *Reserved;
1231
1232 // Images load options
1233 UINT32 LoadOptionsSize;
1234 VOID *LoadOptions;
1235
1236 // Location of where image was loaded
1237 VOID *ImageBase;
1238 UINT64 ImageSize;
1239 EFI_MEMORY_TYPE ImageCodeType;
1240 EFI_MEMORY_TYPE ImageDataType;
1241
1242 // If the driver image supports a dynamic unload request
1243 EFI_IMAGE_UNLOAD Unload;
1244 } EFI_LOADED_IMAGE_PROTOCOL;
1245
1246 typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
1247
1248
1249
1250 /*
1251 * Random Number Generator Protocol
1252 * UEFI Specification Version 2.5 Section 35.5
1253 */
1254 #define EFI_RNG_PROTOCOL_GUID \
1255 { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} }
1256
1257 typedef EFI_GUID EFI_RNG_ALGORITHM;
1258
1259 #define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \
1260 {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} }
1261
1262 #define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \
1263 {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} }
1264
1265 #define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \
1266 {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} }
1267
1268 #define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \
1269 {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} }
1270
1271 #define EFI_RNG_ALGORITHM_X9_31_AES_GUID \
1272 {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} }
1273
1274 #define EFI_RNG_ALGORITHM_RAW \
1275 {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} }
1276
1277 INTERFACE_DECL(_EFI_RNG_PROTOCOL);
1278
1279 typedef
1280 EFI_STATUS
1281 (EFIAPI *EFI_RNG_GET_INFO) (
1282 IN struct _EFI_RNG_PROTOCOL *This,
1283 IN OUT UINTN *RNGAlgorithmListSize,
1284 OUT EFI_RNG_ALGORITHM *RNGAlgorithmList
1285 );
1286
1287 typedef
1288 EFI_STATUS
1289 (EFIAPI *EFI_RNG_GET_RNG) (
1290 IN struct _EFI_RNG_PROTOCOL *This,
1291 IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL
1292 IN UINTN RNGValueLength,
1293 OUT UINT8 *RNGValue
1294 );
1295
1296 typedef struct _EFI_RNG_PROTOCOL {
1297 EFI_RNG_GET_INFO GetInfo;
1298 EFI_RNG_GET_RNG GetRNG;
1299 } EFI_RNG_PROTOCOL;
1300
1301
1302 //
1303 // EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL
1304 //
1305
1306 #define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \
1307 { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
1308
1309 INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL);
1310
1311 typedef
1312 EFI_STATUS
1313 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) (
1314 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1315 IN EFI_HANDLE ControllerHandle,
1316 IN OUT EFI_HANDLE *DriverImageHandle);
1317
1318 typedef
1319 EFI_STATUS
1320 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) (
1321 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1322 IN EFI_HANDLE ControllerHandle,
1323 IN OUT EFI_DEVICE_PATH **DriverImagePath);
1324
1325 typedef
1326 EFI_STATUS
1327 (EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) (
1328 IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This,
1329 IN EFI_HANDLE ControllerHandle,
1330 IN EFI_DEVICE_PATH *DriverImagePath,
1331 IN EFI_HANDLE DriverImageHandle);
1332
1333 typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL {
1334 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver;
1335 EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath;
1336 EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded;
1337 } EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL;
1338
1339 //
1340 // EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL
1341 //
1342
1343 #define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID \
1344 { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} }
1345
1346 INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL);
1347
1348 typedef
1349 EFI_STATUS
1350 (EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) (
1351 IN struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This,
1352 IN OUT EFI_HANDLE *DriverImageHandle);
1353
1354 typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL {
1355 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver;
1356 } EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL;
1357
1358 //
1359 // EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL
1360 //
1361
1362 #define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID \
1363 { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} }
1364
1365 INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL);
1366
1367 typedef
1368 UINT32
1369 (EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) (
1370 IN struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL *This);
1371
1372 typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL {
1373 EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION GetVersion;
1374 } EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL;
1375
1376 //
1377 // EFI_EBC_PROTOCOL
1378 //
1379
1380 #define EFI_EBC_INTERPRETER_PROTOCOL_GUID \
1381 {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} }
1382
1383 #define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID
1384
1385 INTERFACE_DECL(_EFI_EBC_PROTOCOL);
1386
1387 typedef
1388 EFI_STATUS
1389 (EFIAPI *EFI_EBC_CREATE_THUNK)(
1390 IN struct _EFI_EBC_PROTOCOL *This,
1391 IN EFI_HANDLE ImageHandle,
1392 IN VOID *EbcEntryPoint,
1393 OUT VOID **Thunk);
1394
1395 typedef
1396 EFI_STATUS
1397 (EFIAPI *EFI_EBC_UNLOAD_IMAGE)(
1398 IN struct _EFI_EBC_PROTOCOL *This,
1399 IN EFI_HANDLE ImageHandle);
1400
1401 typedef
1402 EFI_STATUS
1403 (EFIAPI *EBC_ICACHE_FLUSH)(
1404 IN EFI_PHYSICAL_ADDRESS Start,
1405 IN UINT64 Length);
1406
1407 typedef
1408 EFI_STATUS
1409 (EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)(
1410 IN struct _EFI_EBC_PROTOCOL *This,
1411 IN EBC_ICACHE_FLUSH Flush);
1412
1413 typedef
1414 EFI_STATUS
1415 (EFIAPI *EFI_EBC_GET_VERSION)(
1416 IN struct _EFI_EBC_PROTOCOL *This,
1417 IN OUT UINT64 *Version);
1418
1419 typedef struct _EFI_EBC_PROTOCOL {
1420 EFI_EBC_CREATE_THUNK CreateThunk;
1421 EFI_EBC_UNLOAD_IMAGE UnloadImage;
1422 EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush;
1423 EFI_EBC_GET_VERSION GetVersion;
1424 } EFI_EBC_PROTOCOL;
1425
1426 #endif
1427