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