xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/efiprot.h (revision 33881f779a77dce6440bdc44610d94de75bebefe)
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