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