1#ifndef _EFI_PROT_H 2#define _EFI_PROT_H 3 4/*++ 5 6Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 7This software and associated documentation (if any) is furnished 8under a license and may only be used or copied in accordance 9with the terms of the license. Except as permitted by such 10license, no part of this software or documentation may be 11reproduced, stored in a retrieval system, or transmitted in any 12form or by any means without the express written consent of 13Intel Corporation. 14 15Module Name: 16 17 efiprot.h 18 19Abstract: 20 21 EFI Protocols 22 23 24 25Revision History 26 27--*/ 28 29#include <efidef.h> 30 31// 32// Device Path protocol 33// 34 35#define DEVICE_PATH_PROTOCOL \ 36 { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 37 38 39// 40// Block IO protocol 41// 42 43#define BLOCK_IO_PROTOCOL \ 44 { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 45#define EFI_BLOCK_IO_INTERFACE_REVISION 0x00010000 46 47INTERFACE_DECL(_EFI_BLOCK_IO); 48 49typedef 50EFI_STATUS 51(EFIAPI *EFI_BLOCK_RESET) ( 52 IN struct _EFI_BLOCK_IO *This, 53 IN BOOLEAN ExtendedVerification 54 ); 55 56typedef 57EFI_STATUS 58(EFIAPI *EFI_BLOCK_READ) ( 59 IN struct _EFI_BLOCK_IO *This, 60 IN UINT32 MediaId, 61 IN EFI_LBA LBA, 62 IN UINTN BufferSize, 63 OUT VOID *Buffer 64 ); 65 66 67typedef 68EFI_STATUS 69(EFIAPI *EFI_BLOCK_WRITE) ( 70 IN struct _EFI_BLOCK_IO *This, 71 IN UINT32 MediaId, 72 IN EFI_LBA LBA, 73 IN UINTN BufferSize, 74 IN VOID *Buffer 75 ); 76 77 78typedef 79EFI_STATUS 80(EFIAPI *EFI_BLOCK_FLUSH) ( 81 IN struct _EFI_BLOCK_IO *This 82 ); 83 84 85 86typedef struct { 87 UINT32 MediaId; 88 BOOLEAN RemovableMedia; 89 BOOLEAN MediaPresent; 90 91 BOOLEAN LogicalPartition; 92 BOOLEAN ReadOnly; 93 BOOLEAN WriteCaching; 94 95 UINT32 BlockSize; 96 UINT32 IoAlign; 97 98 EFI_LBA LastBlock; 99} EFI_BLOCK_IO_MEDIA; 100 101typedef struct _EFI_BLOCK_IO { 102 UINT64 Revision; 103 104 EFI_BLOCK_IO_MEDIA *Media; 105 106 EFI_BLOCK_RESET Reset; 107 EFI_BLOCK_READ ReadBlocks; 108 EFI_BLOCK_WRITE WriteBlocks; 109 EFI_BLOCK_FLUSH FlushBlocks; 110 111} EFI_BLOCK_IO; 112 113 114 115// 116// Disk Block IO protocol 117// 118 119#define DISK_IO_PROTOCOL \ 120 { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 121#define EFI_DISK_IO_INTERFACE_REVISION 0x00010000 122 123INTERFACE_DECL(_EFI_DISK_IO); 124 125typedef 126EFI_STATUS 127(EFIAPI *EFI_DISK_READ) ( 128 IN struct _EFI_DISK_IO *This, 129 IN UINT32 MediaId, 130 IN UINT64 Offset, 131 IN UINTN BufferSize, 132 OUT VOID *Buffer 133 ); 134 135 136typedef 137EFI_STATUS 138(EFIAPI *EFI_DISK_WRITE) ( 139 IN struct _EFI_DISK_IO *This, 140 IN UINT32 MediaId, 141 IN UINT64 Offset, 142 IN UINTN BufferSize, 143 IN VOID *Buffer 144 ); 145 146 147typedef struct _EFI_DISK_IO { 148 UINT64 Revision; 149 EFI_DISK_READ ReadDisk; 150 EFI_DISK_WRITE WriteDisk; 151} EFI_DISK_IO; 152 153 154// 155// Simple file system protocol 156// 157 158#define SIMPLE_FILE_SYSTEM_PROTOCOL \ 159 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 160 161INTERFACE_DECL(_EFI_FILE_IO_INTERFACE); 162INTERFACE_DECL(_EFI_FILE_HANDLE); 163 164typedef 165EFI_STATUS 166(EFIAPI *EFI_VOLUME_OPEN) ( 167 IN struct _EFI_FILE_IO_INTERFACE *This, 168 OUT struct _EFI_FILE_HANDLE **Root 169 ); 170 171#define EFI_FILE_IO_INTERFACE_REVISION 0x00010000 172 173typedef struct _EFI_FILE_IO_INTERFACE { 174 UINT64 Revision; 175 EFI_VOLUME_OPEN OpenVolume; 176} EFI_FILE_IO_INTERFACE; 177 178// 179// 180// 181 182typedef 183EFI_STATUS 184(EFIAPI *EFI_FILE_OPEN) ( 185 IN struct _EFI_FILE_HANDLE *File, 186 OUT struct _EFI_FILE_HANDLE **NewHandle, 187 IN CHAR16 *FileName, 188 IN UINT64 OpenMode, 189 IN UINT64 Attributes 190 ); 191 192// Open modes 193#define EFI_FILE_MODE_READ 0x0000000000000001 194#define EFI_FILE_MODE_WRITE 0x0000000000000002 195#define EFI_FILE_MODE_CREATE 0x8000000000000000 196 197// File attributes 198#define EFI_FILE_READ_ONLY 0x0000000000000001 199#define EFI_FILE_HIDDEN 0x0000000000000002 200#define EFI_FILE_SYSTEM 0x0000000000000004 201#define EFI_FILE_RESERVIED 0x0000000000000008 202#define EFI_FILE_DIRECTORY 0x0000000000000010 203#define EFI_FILE_ARCHIVE 0x0000000000000020 204#define EFI_FILE_VALID_ATTR 0x0000000000000037 205 206typedef 207EFI_STATUS 208(EFIAPI *EFI_FILE_CLOSE) ( 209 IN struct _EFI_FILE_HANDLE *File 210 ); 211 212typedef 213EFI_STATUS 214(EFIAPI *EFI_FILE_DELETE) ( 215 IN struct _EFI_FILE_HANDLE *File 216 ); 217 218typedef 219EFI_STATUS 220(EFIAPI *EFI_FILE_READ) ( 221 IN struct _EFI_FILE_HANDLE *File, 222 IN OUT UINTN *BufferSize, 223 OUT VOID *Buffer 224 ); 225 226typedef 227EFI_STATUS 228(EFIAPI *EFI_FILE_WRITE) ( 229 IN struct _EFI_FILE_HANDLE *File, 230 IN OUT UINTN *BufferSize, 231 IN VOID *Buffer 232 ); 233 234typedef 235EFI_STATUS 236(EFIAPI *EFI_FILE_SET_POSITION) ( 237 IN struct _EFI_FILE_HANDLE *File, 238 IN UINT64 Position 239 ); 240 241typedef 242EFI_STATUS 243(EFIAPI *EFI_FILE_GET_POSITION) ( 244 IN struct _EFI_FILE_HANDLE *File, 245 OUT UINT64 *Position 246 ); 247 248typedef 249EFI_STATUS 250(EFIAPI *EFI_FILE_GET_INFO) ( 251 IN struct _EFI_FILE_HANDLE *File, 252 IN EFI_GUID *InformationType, 253 IN OUT UINTN *BufferSize, 254 OUT VOID *Buffer 255 ); 256 257typedef 258EFI_STATUS 259(EFIAPI *EFI_FILE_SET_INFO) ( 260 IN struct _EFI_FILE_HANDLE *File, 261 IN EFI_GUID *InformationType, 262 IN UINTN BufferSize, 263 IN VOID *Buffer 264 ); 265 266typedef 267EFI_STATUS 268(EFIAPI *EFI_FILE_FLUSH) ( 269 IN struct _EFI_FILE_HANDLE *File 270 ); 271 272 273 274#define EFI_FILE_HANDLE_REVISION 0x00010000 275typedef struct _EFI_FILE_HANDLE { 276 UINT64 Revision; 277 EFI_FILE_OPEN Open; 278 EFI_FILE_CLOSE Close; 279 EFI_FILE_DELETE Delete; 280 EFI_FILE_READ Read; 281 EFI_FILE_WRITE Write; 282 EFI_FILE_GET_POSITION GetPosition; 283 EFI_FILE_SET_POSITION SetPosition; 284 EFI_FILE_GET_INFO GetInfo; 285 EFI_FILE_SET_INFO SetInfo; 286 EFI_FILE_FLUSH Flush; 287} EFI_FILE, *EFI_FILE_HANDLE; 288 289 290// 291// File information types 292// 293 294#define EFI_FILE_INFO_ID \ 295 { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 296 297typedef struct { 298 UINT64 Size; 299 UINT64 FileSize; 300 UINT64 PhysicalSize; 301 EFI_TIME CreateTime; 302 EFI_TIME LastAccessTime; 303 EFI_TIME ModificationTime; 304 UINT64 Attribute; 305 CHAR16 FileName[1]; 306} EFI_FILE_INFO; 307 308// 309// The FileName field of the EFI_FILE_INFO data structure is variable length. 310// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to 311// be the size of the data structure without the FileName field. The following macro 312// computes this size correctly no matter how big the FileName array is declared. 313// This is required to make the EFI_FILE_INFO data structure ANSI compilant. 314// 315 316#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) 317 318#define EFI_FILE_SYSTEM_INFO_ID \ 319 { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 320 321typedef struct { 322 UINT64 Size; 323 BOOLEAN ReadOnly; 324 UINT64 VolumeSize; 325 UINT64 FreeSpace; 326 UINT32 BlockSize; 327 CHAR16 VolumeLabel[1]; 328} EFI_FILE_SYSTEM_INFO; 329 330// 331// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length. 332// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs 333// to be the size of the data structure without the VolumeLable field. The following macro 334// computes this size correctly no matter how big the VolumeLable array is declared. 335// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant. 336// 337 338#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel) 339 340#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \ 341 { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } 342 343typedef struct { 344 CHAR16 VolumeLabel[1]; 345} EFI_FILE_SYSTEM_VOLUME_LABEL_INFO; 346 347#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel) 348 349// 350// Load file protocol 351// 352 353 354#define LOAD_FILE_PROTOCOL \ 355 { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 356 357INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE); 358 359typedef 360EFI_STATUS 361(EFIAPI *EFI_LOAD_FILE) ( 362 IN struct _EFI_LOAD_FILE_INTERFACE *This, 363 IN EFI_DEVICE_PATH *FilePath, 364 IN BOOLEAN BootPolicy, 365 IN OUT UINTN *BufferSize, 366 IN VOID *Buffer OPTIONAL 367 ); 368 369typedef struct _EFI_LOAD_FILE_INTERFACE { 370 EFI_LOAD_FILE LoadFile; 371} EFI_LOAD_FILE_INTERFACE; 372 373 374// 375// Device IO protocol 376// 377 378#define DEVICE_IO_PROTOCOL \ 379 { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 380 381INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE); 382 383typedef enum { 384 IO_UINT8, 385 IO_UINT16, 386 IO_UINT32, 387 IO_UINT64, 388// 389// Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO 390// 391 MMIO_COPY_UINT8, 392 MMIO_COPY_UINT16, 393 MMIO_COPY_UINT32, 394 MMIO_COPY_UINT64 395} EFI_IO_WIDTH; 396 397#define EFI_PCI_ADDRESS(bus,dev,func,reg) \ 398 ( (UINT64) ( (((UINTN)bus) << 24) + (((UINTN)dev) << 16) + (((UINTN)func) << 8) + ((UINTN)reg) )) 399 400typedef 401EFI_STATUS 402(EFIAPI *EFI_DEVICE_IO) ( 403 IN struct _EFI_DEVICE_IO_INTERFACE *This, 404 IN EFI_IO_WIDTH Width, 405 IN UINT64 Address, 406 IN UINTN Count, 407 IN OUT VOID *Buffer 408 ); 409 410typedef struct { 411 EFI_DEVICE_IO Read; 412 EFI_DEVICE_IO Write; 413} EFI_IO_ACCESS; 414 415typedef 416EFI_STATUS 417(EFIAPI *EFI_PCI_DEVICE_PATH) ( 418 IN struct _EFI_DEVICE_IO_INTERFACE *This, 419 IN UINT64 Address, 420 IN OUT EFI_DEVICE_PATH **PciDevicePath 421 ); 422 423typedef enum { 424 EfiBusMasterRead, 425 EfiBusMasterWrite, 426 EfiBusMasterCommonBuffer 427} EFI_IO_OPERATION_TYPE; 428 429typedef 430EFI_STATUS 431(EFIAPI *EFI_IO_MAP) ( 432 IN struct _EFI_DEVICE_IO_INTERFACE *This, 433 IN EFI_IO_OPERATION_TYPE Operation, 434 IN EFI_PHYSICAL_ADDRESS *HostAddress, 435 IN OUT UINTN *NumberOfBytes, 436 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, 437 OUT VOID **Mapping 438 ); 439 440typedef 441EFI_STATUS 442(EFIAPI *EFI_IO_UNMAP) ( 443 IN struct _EFI_DEVICE_IO_INTERFACE *This, 444 IN VOID *Mapping 445 ); 446 447typedef 448EFI_STATUS 449(EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( 450 IN struct _EFI_DEVICE_IO_INTERFACE *This, 451 IN EFI_ALLOCATE_TYPE Type, 452 IN EFI_MEMORY_TYPE MemoryType, 453 IN UINTN Pages, 454 IN OUT EFI_PHYSICAL_ADDRESS *HostAddress 455 ); 456 457typedef 458EFI_STATUS 459(EFIAPI *EFI_IO_FLUSH) ( 460 IN struct _EFI_DEVICE_IO_INTERFACE *This 461 ); 462 463typedef 464EFI_STATUS 465(EFIAPI *EFI_IO_FREE_BUFFER) ( 466 IN struct _EFI_DEVICE_IO_INTERFACE *This, 467 IN UINTN Pages, 468 IN EFI_PHYSICAL_ADDRESS HostAddress 469 ); 470 471typedef struct _EFI_DEVICE_IO_INTERFACE { 472 EFI_IO_ACCESS Mem; 473 EFI_IO_ACCESS Io; 474 EFI_IO_ACCESS Pci; 475 EFI_IO_MAP Map; 476 EFI_PCI_DEVICE_PATH PciDevicePath; 477 EFI_IO_UNMAP Unmap; 478 EFI_IO_ALLOCATE_BUFFER AllocateBuffer; 479 EFI_IO_FLUSH Flush; 480 EFI_IO_FREE_BUFFER FreeBuffer; 481} EFI_DEVICE_IO_INTERFACE; 482 483 484// 485// Unicode Collation protocol 486// 487 488#define UNICODE_COLLATION_PROTOCOL \ 489 { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 490 491#define UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff) 492 493INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE); 494 495typedef 496INTN 497(EFIAPI *EFI_UNICODE_COLLATION_STRICOLL) ( 498 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 499 IN CHAR16 *s1, 500 IN CHAR16 *s2 501 ); 502 503typedef 504BOOLEAN 505(EFIAPI *EFI_UNICODE_COLLATION_METAIMATCH) ( 506 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 507 IN CHAR16 *String, 508 IN CHAR16 *Pattern 509 ); 510 511typedef 512VOID 513(EFIAPI *EFI_UNICODE_COLLATION_STRLWR) ( 514 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 515 IN OUT CHAR16 *Str 516 ); 517 518typedef 519VOID 520(EFIAPI *EFI_UNICODE_COLLATION_STRUPR) ( 521 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 522 IN OUT CHAR16 *Str 523 ); 524 525typedef 526VOID 527(EFIAPI *EFI_UNICODE_COLLATION_FATTOSTR) ( 528 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 529 IN UINTN FatSize, 530 IN CHAR8 *Fat, 531 OUT CHAR16 *String 532 ); 533 534typedef 535BOOLEAN 536(EFIAPI *EFI_UNICODE_COLLATION_STRTOFAT) ( 537 IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 538 IN CHAR16 *String, 539 IN UINTN FatSize, 540 OUT CHAR8 *Fat 541 ); 542 543 544typedef struct _EFI_UNICODE_COLLATION_INTERFACE { 545 546 // general 547 EFI_UNICODE_COLLATION_STRICOLL StriColl; 548 EFI_UNICODE_COLLATION_METAIMATCH MetaiMatch; 549 EFI_UNICODE_COLLATION_STRLWR StrLwr; 550 EFI_UNICODE_COLLATION_STRUPR StrUpr; 551 552 // for supporting fat volumes 553 EFI_UNICODE_COLLATION_FATTOSTR FatToStr; 554 EFI_UNICODE_COLLATION_STRTOFAT StrToFat; 555 556 CHAR8 *SupportedLanguages; 557} EFI_UNICODE_COLLATION_INTERFACE; 558 559// 560// Driver Binding protocol 561// 562 563#define DRIVER_BINDING_PROTOCOL \ 564 { 0x18a031ab, 0xb443, 0x4d1a, {0xa5, 0xc0, 0x0c, 0x09, 0x26, 0x1e, 0x9f, 0x71} } 565 566INTERFACE_DECL(_EFI_DRIVER_BINDING); 567 568typedef 569EFI_STATUS 570(EFIAPI *EFI_DRIVER_BINDING_SUPPORTED) ( 571 IN struct _EFI_DRIVER_BINDING *This, 572 IN EFI_HANDLE ControllerHandle, 573 IN EFI_DEVICE_PATH *RemainingPath 574 ); 575 576typedef 577EFI_STATUS 578(EFIAPI *EFI_DRIVER_BINDING_START) ( 579 IN struct _EFI_DRIVER_BINDING *This, 580 IN EFI_HANDLE ControllerHandle, 581 IN EFI_DEVICE_PATH *RemainingPath 582 ); 583 584typedef 585EFI_STATUS 586(EFIAPI *EFI_DRIVER_BINDING_STOP) ( 587 IN struct _EFI_DRIVER_BINDING *This, 588 IN EFI_HANDLE ControllerHandle, 589 IN UINTN NumberOfChildren, 590 IN EFI_HANDLE *ChildHandleBuffer 591 ); 592 593typedef struct _EFI_DRIVER_BINDING { 594 EFI_DRIVER_BINDING_SUPPORTED Supported; 595 EFI_DRIVER_BINDING_START Start; 596 EFI_DRIVER_BINDING_STOP Stop; 597 UINT32 Version; 598 EFI_HANDLE ImageHandle; 599 EFI_HANDLE DriverBindingHandle; 600} EFI_DRIVER_BINDING; 601 602// 603// Component Name Protocol 2 604// 605 606#define COMPONENT_NAME2_PROTOCOL \ 607 { 0x6a7a5cff, 0xe8d9, 0x4f70, {0xba, 0xda, 0x75, 0xab, 0x30, 0x25, 0xce, 0x14 } } 608 609INTERFACE_DECL(_EFI_COMPONENT_NAME2); 610 611typedef 612EFI_STATUS 613(EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) ( 614 IN struct _EFI_COMPONENT_NAME2 *This, 615 IN CHAR8 * Language, 616 OUT CHAR16 **DriverName 617 ); 618 619typedef 620EFI_STATUS 621(EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) ( 622 IN struct _EFI_COMPONENT_NAME2 *This, 623 IN EFI_HANDLE ControllerHandle, 624 IN EFI_HANDLE ChildHandle OPTIONAL, 625 IN CHAR8 *Language, 626 OUT CHAR16 **ControllerName 627 ); 628 629typedef struct _EFI_COMPONENT_NAME2 { 630 EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName; 631 EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName; 632 CHAR8 **SupportedLanguages; 633} EFI_COMPONENT_NAME2; 634 635#endif 636