1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efiprot.h 163898 2006-11-02 02:42:48Z marcel $ */ 2060fee10Skettenis #ifndef _EFI_PROT_H 3060fee10Skettenis #define _EFI_PROT_H 4060fee10Skettenis 5060fee10Skettenis /*++ 6060fee10Skettenis 7060fee10Skettenis Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8060fee10Skettenis This software and associated documentation (if any) is furnished 9060fee10Skettenis under a license and may only be used or copied in accordance 10060fee10Skettenis with the terms of the license. Except as permitted by such 11060fee10Skettenis license, no part of this software or documentation may be 12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any 13060fee10Skettenis form or by any means without the express written consent of 14060fee10Skettenis Intel Corporation. 15060fee10Skettenis 16060fee10Skettenis Module Name: 17060fee10Skettenis 18060fee10Skettenis efiprot.h 19060fee10Skettenis 20060fee10Skettenis Abstract: 21060fee10Skettenis 22060fee10Skettenis EFI Protocols 23060fee10Skettenis 24060fee10Skettenis 25060fee10Skettenis 26060fee10Skettenis Revision History 27060fee10Skettenis 28060fee10Skettenis --*/ 29060fee10Skettenis 30060fee10Skettenis // 31060fee10Skettenis // Device Path protocol 32060fee10Skettenis // 33060fee10Skettenis 34060fee10Skettenis #define DEVICE_PATH_PROTOCOL \ 35060fee10Skettenis { 0x9576e91, 0x6d3f, 0x11d2, { 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 36060fee10Skettenis 37060fee10Skettenis 38060fee10Skettenis // 39060fee10Skettenis // Block IO protocol 40060fee10Skettenis // 41060fee10Skettenis 42060fee10Skettenis #define BLOCK_IO_PROTOCOL \ 43060fee10Skettenis { 0x964e5b21, 0x6459, 0x11d2, { 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 44060fee10Skettenis #define EFI_BLOCK_IO_INTERFACE_REVISION 0x00010000 45060fee10Skettenis 46060fee10Skettenis INTERFACE_DECL(_EFI_BLOCK_IO); 47060fee10Skettenis 48060fee10Skettenis typedef 49060fee10Skettenis EFI_STATUS 50060fee10Skettenis (EFIAPI *EFI_BLOCK_RESET) ( 51060fee10Skettenis IN struct _EFI_BLOCK_IO *This, 52060fee10Skettenis IN BOOLEAN ExtendedVerification 53060fee10Skettenis ); 54060fee10Skettenis 55060fee10Skettenis typedef 56060fee10Skettenis EFI_STATUS 57060fee10Skettenis (EFIAPI *EFI_BLOCK_READ) ( 58060fee10Skettenis IN struct _EFI_BLOCK_IO *This, 59060fee10Skettenis IN UINT32 MediaId, 60060fee10Skettenis IN EFI_LBA LBA, 61060fee10Skettenis IN UINTN BufferSize, 62060fee10Skettenis OUT VOID *Buffer 63060fee10Skettenis ); 64060fee10Skettenis 65060fee10Skettenis 66060fee10Skettenis typedef 67060fee10Skettenis EFI_STATUS 68060fee10Skettenis (EFIAPI *EFI_BLOCK_WRITE) ( 69060fee10Skettenis IN struct _EFI_BLOCK_IO *This, 70060fee10Skettenis IN UINT32 MediaId, 71060fee10Skettenis IN EFI_LBA LBA, 72060fee10Skettenis IN UINTN BufferSize, 73060fee10Skettenis IN VOID *Buffer 74060fee10Skettenis ); 75060fee10Skettenis 76060fee10Skettenis 77060fee10Skettenis typedef 78060fee10Skettenis EFI_STATUS 79060fee10Skettenis (EFIAPI *EFI_BLOCK_FLUSH) ( 80060fee10Skettenis IN struct _EFI_BLOCK_IO *This 81060fee10Skettenis ); 82060fee10Skettenis 83060fee10Skettenis 84060fee10Skettenis 85060fee10Skettenis typedef struct { 86060fee10Skettenis UINT32 MediaId; 87060fee10Skettenis BOOLEAN RemovableMedia; 88060fee10Skettenis BOOLEAN MediaPresent; 89060fee10Skettenis 90060fee10Skettenis BOOLEAN LogicalPartition; 91060fee10Skettenis BOOLEAN ReadOnly; 92060fee10Skettenis BOOLEAN WriteCaching; 93060fee10Skettenis 94060fee10Skettenis UINT32 BlockSize; 95060fee10Skettenis UINT32 IoAlign; 96060fee10Skettenis 97060fee10Skettenis EFI_LBA LastBlock; 98060fee10Skettenis } EFI_BLOCK_IO_MEDIA; 99060fee10Skettenis 100060fee10Skettenis typedef struct _EFI_BLOCK_IO { 101060fee10Skettenis UINT64 Revision; 102060fee10Skettenis 103060fee10Skettenis EFI_BLOCK_IO_MEDIA *Media; 104060fee10Skettenis 105060fee10Skettenis EFI_BLOCK_RESET Reset; 106060fee10Skettenis EFI_BLOCK_READ ReadBlocks; 107060fee10Skettenis EFI_BLOCK_WRITE WriteBlocks; 108060fee10Skettenis EFI_BLOCK_FLUSH FlushBlocks; 109060fee10Skettenis 110060fee10Skettenis } EFI_BLOCK_IO; 111060fee10Skettenis 112060fee10Skettenis 113060fee10Skettenis 114060fee10Skettenis // 115060fee10Skettenis // Disk Block IO protocol 116060fee10Skettenis // 117060fee10Skettenis 118060fee10Skettenis #define DISK_IO_PROTOCOL \ 119060fee10Skettenis { 0xce345171, 0xba0b, 0x11d2, { 0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 120060fee10Skettenis #define EFI_DISK_IO_INTERFACE_REVISION 0x00010000 121060fee10Skettenis 122060fee10Skettenis INTERFACE_DECL(_EFI_DISK_IO); 123060fee10Skettenis 124060fee10Skettenis typedef 125060fee10Skettenis EFI_STATUS 126060fee10Skettenis (EFIAPI *EFI_DISK_READ) ( 127060fee10Skettenis IN struct _EFI_DISK_IO *This, 128060fee10Skettenis IN UINT32 MediaId, 129060fee10Skettenis IN UINT64 Offset, 130060fee10Skettenis IN UINTN BufferSize, 131060fee10Skettenis OUT VOID *Buffer 132060fee10Skettenis ); 133060fee10Skettenis 134060fee10Skettenis 135060fee10Skettenis typedef 136060fee10Skettenis EFI_STATUS 137060fee10Skettenis (EFIAPI *EFI_DISK_WRITE) ( 138060fee10Skettenis IN struct _EFI_DISK_IO *This, 139060fee10Skettenis IN UINT32 MediaId, 140060fee10Skettenis IN UINT64 Offset, 141060fee10Skettenis IN UINTN BufferSize, 142060fee10Skettenis IN VOID *Buffer 143060fee10Skettenis ); 144060fee10Skettenis 145060fee10Skettenis 146060fee10Skettenis typedef struct _EFI_DISK_IO { 147060fee10Skettenis UINT64 Revision; 148060fee10Skettenis EFI_DISK_READ ReadDisk; 149060fee10Skettenis EFI_DISK_WRITE WriteDisk; 150060fee10Skettenis } EFI_DISK_IO; 151060fee10Skettenis 152060fee10Skettenis 153060fee10Skettenis // 154060fee10Skettenis // Simple file system protocol 155060fee10Skettenis // 156060fee10Skettenis 157060fee10Skettenis #define SIMPLE_FILE_SYSTEM_PROTOCOL \ 158060fee10Skettenis { 0x964e5b22, 0x6459, 0x11d2, { 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 159060fee10Skettenis 160060fee10Skettenis INTERFACE_DECL(_EFI_FILE_IO_INTERFACE); 161060fee10Skettenis INTERFACE_DECL(_EFI_FILE_HANDLE); 162060fee10Skettenis 163060fee10Skettenis typedef 164060fee10Skettenis EFI_STATUS 165060fee10Skettenis (EFIAPI *EFI_VOLUME_OPEN) ( 166060fee10Skettenis IN struct _EFI_FILE_IO_INTERFACE *This, 167060fee10Skettenis OUT struct _EFI_FILE_HANDLE **Root 168060fee10Skettenis ); 169060fee10Skettenis 170060fee10Skettenis #define EFI_FILE_IO_INTERFACE_REVISION 0x00010000 171060fee10Skettenis 172060fee10Skettenis typedef struct _EFI_FILE_IO_INTERFACE { 173060fee10Skettenis UINT64 Revision; 174060fee10Skettenis EFI_VOLUME_OPEN OpenVolume; 175060fee10Skettenis } EFI_FILE_IO_INTERFACE; 176060fee10Skettenis 177060fee10Skettenis // 178060fee10Skettenis // 179060fee10Skettenis // 180060fee10Skettenis 181060fee10Skettenis typedef 182060fee10Skettenis EFI_STATUS 183060fee10Skettenis (EFIAPI *EFI_FILE_OPEN) ( 184060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 185060fee10Skettenis OUT struct _EFI_FILE_HANDLE **NewHandle, 186060fee10Skettenis IN CHAR16 *FileName, 187060fee10Skettenis IN UINT64 OpenMode, 188060fee10Skettenis IN UINT64 Attributes 189060fee10Skettenis ); 190060fee10Skettenis 191060fee10Skettenis // Open modes 192060fee10Skettenis #define EFI_FILE_MODE_READ 0x0000000000000001 193060fee10Skettenis #define EFI_FILE_MODE_WRITE 0x0000000000000002 194060fee10Skettenis #define EFI_FILE_MODE_CREATE 0x8000000000000000 195060fee10Skettenis 196060fee10Skettenis // File attributes 197060fee10Skettenis #define EFI_FILE_READ_ONLY 0x0000000000000001 198060fee10Skettenis #define EFI_FILE_HIDDEN 0x0000000000000002 199060fee10Skettenis #define EFI_FILE_SYSTEM 0x0000000000000004 200060fee10Skettenis #define EFI_FILE_RESERVIED 0x0000000000000008 201060fee10Skettenis #define EFI_FILE_DIRECTORY 0x0000000000000010 202060fee10Skettenis #define EFI_FILE_ARCHIVE 0x0000000000000020 203060fee10Skettenis #define EFI_FILE_VALID_ATTR 0x0000000000000037 204060fee10Skettenis 205060fee10Skettenis typedef 206060fee10Skettenis EFI_STATUS 207060fee10Skettenis (EFIAPI *EFI_FILE_CLOSE) ( 208060fee10Skettenis IN struct _EFI_FILE_HANDLE *File 209060fee10Skettenis ); 210060fee10Skettenis 211060fee10Skettenis typedef 212060fee10Skettenis EFI_STATUS 213060fee10Skettenis (EFIAPI *EFI_FILE_DELETE) ( 214060fee10Skettenis IN struct _EFI_FILE_HANDLE *File 215060fee10Skettenis ); 216060fee10Skettenis 217060fee10Skettenis typedef 218060fee10Skettenis EFI_STATUS 219060fee10Skettenis (EFIAPI *EFI_FILE_READ) ( 220060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 221060fee10Skettenis IN OUT UINTN *BufferSize, 222060fee10Skettenis OUT VOID *Buffer 223060fee10Skettenis ); 224060fee10Skettenis 225060fee10Skettenis typedef 226060fee10Skettenis EFI_STATUS 227060fee10Skettenis (EFIAPI *EFI_FILE_WRITE) ( 228060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 229060fee10Skettenis IN OUT UINTN *BufferSize, 230060fee10Skettenis IN VOID *Buffer 231060fee10Skettenis ); 232060fee10Skettenis 233060fee10Skettenis typedef 234060fee10Skettenis EFI_STATUS 235060fee10Skettenis (EFIAPI *EFI_FILE_SET_POSITION) ( 236060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 237060fee10Skettenis IN UINT64 Position 238060fee10Skettenis ); 239060fee10Skettenis 240060fee10Skettenis typedef 241060fee10Skettenis EFI_STATUS 242060fee10Skettenis (EFIAPI *EFI_FILE_GET_POSITION) ( 243060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 244060fee10Skettenis OUT UINT64 *Position 245060fee10Skettenis ); 246060fee10Skettenis 247060fee10Skettenis typedef 248060fee10Skettenis EFI_STATUS 249060fee10Skettenis (EFIAPI *EFI_FILE_GET_INFO) ( 250060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 251060fee10Skettenis IN EFI_GUID *InformationType, 252060fee10Skettenis IN OUT UINTN *BufferSize, 253060fee10Skettenis OUT VOID *Buffer 254060fee10Skettenis ); 255060fee10Skettenis 256060fee10Skettenis typedef 257060fee10Skettenis EFI_STATUS 258060fee10Skettenis (EFIAPI *EFI_FILE_SET_INFO) ( 259060fee10Skettenis IN struct _EFI_FILE_HANDLE *File, 260060fee10Skettenis IN EFI_GUID *InformationType, 261060fee10Skettenis IN UINTN BufferSize, 262060fee10Skettenis IN VOID *Buffer 263060fee10Skettenis ); 264060fee10Skettenis 265060fee10Skettenis typedef 266060fee10Skettenis EFI_STATUS 267060fee10Skettenis (EFIAPI *EFI_FILE_FLUSH) ( 268060fee10Skettenis IN struct _EFI_FILE_HANDLE *File 269060fee10Skettenis ); 270060fee10Skettenis 271060fee10Skettenis 272060fee10Skettenis 273060fee10Skettenis #define EFI_FILE_HANDLE_REVISION 0x00010000 274060fee10Skettenis typedef struct _EFI_FILE_HANDLE { 275060fee10Skettenis UINT64 Revision; 276060fee10Skettenis EFI_FILE_OPEN Open; 277060fee10Skettenis EFI_FILE_CLOSE Close; 278060fee10Skettenis EFI_FILE_DELETE Delete; 279060fee10Skettenis EFI_FILE_READ Read; 280060fee10Skettenis EFI_FILE_WRITE Write; 281060fee10Skettenis EFI_FILE_GET_POSITION GetPosition; 282060fee10Skettenis EFI_FILE_SET_POSITION SetPosition; 283060fee10Skettenis EFI_FILE_GET_INFO GetInfo; 284060fee10Skettenis EFI_FILE_SET_INFO SetInfo; 285060fee10Skettenis EFI_FILE_FLUSH Flush; 286060fee10Skettenis } EFI_FILE, *EFI_FILE_HANDLE; 287060fee10Skettenis 288060fee10Skettenis 289060fee10Skettenis // 290060fee10Skettenis // File information types 291060fee10Skettenis // 292060fee10Skettenis 293060fee10Skettenis #define EFI_FILE_INFO_ID \ 294060fee10Skettenis { 0x9576e92, 0x6d3f, 0x11d2, { 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 295060fee10Skettenis 296060fee10Skettenis typedef struct { 297060fee10Skettenis UINT64 Size; 298060fee10Skettenis UINT64 FileSize; 299060fee10Skettenis UINT64 PhysicalSize; 300060fee10Skettenis EFI_TIME CreateTime; 301060fee10Skettenis EFI_TIME LastAccessTime; 302060fee10Skettenis EFI_TIME ModificationTime; 303060fee10Skettenis UINT64 Attribute; 304060fee10Skettenis CHAR16 FileName[1]; 305060fee10Skettenis } EFI_FILE_INFO; 306060fee10Skettenis 307060fee10Skettenis // 308060fee10Skettenis // The FileName field of the EFI_FILE_INFO data structure is variable length. 309060fee10Skettenis // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to 310060fee10Skettenis // be the size of the data structure without the FileName field. The following macro 311060fee10Skettenis // computes this size correctly no matter how big the FileName array is declared. 312*9593dc34Smglocker // This is required to make the EFI_FILE_INFO data structure ANSI compliant. 313060fee10Skettenis // 314060fee10Skettenis 315060fee10Skettenis #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) 316060fee10Skettenis 317060fee10Skettenis #define EFI_FILE_SYSTEM_INFO_ID \ 318060fee10Skettenis { 0x9576e93, 0x6d3f, 0x11d2, { 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 319060fee10Skettenis 320060fee10Skettenis typedef struct { 321060fee10Skettenis UINT64 Size; 322060fee10Skettenis BOOLEAN ReadOnly; 323060fee10Skettenis UINT64 VolumeSize; 324060fee10Skettenis UINT64 FreeSpace; 325060fee10Skettenis UINT32 BlockSize; 326060fee10Skettenis CHAR16 VolumeLabel[1]; 327060fee10Skettenis } EFI_FILE_SYSTEM_INFO; 328060fee10Skettenis 329060fee10Skettenis // 330060fee10Skettenis // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length. 331060fee10Skettenis // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs 332060fee10Skettenis // to be the size of the data structure without the VolumeLable field. The following macro 333060fee10Skettenis // computes this size correctly no matter how big the VolumeLable array is declared. 334*9593dc34Smglocker // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compliant. 335060fee10Skettenis // 336060fee10Skettenis 337060fee10Skettenis #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel) 338060fee10Skettenis 339060fee10Skettenis #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \ 340060fee10Skettenis { 0xDB47D7D3,0xFE81, 0x11d3, { 0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } } 341060fee10Skettenis 342060fee10Skettenis typedef struct { 343060fee10Skettenis CHAR16 VolumeLabel[1]; 344060fee10Skettenis } EFI_FILE_SYSTEM_VOLUME_LABEL_INFO; 345060fee10Skettenis 346060fee10Skettenis #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel) 347060fee10Skettenis 348060fee10Skettenis // 349060fee10Skettenis // Load file protocol 350060fee10Skettenis // 351060fee10Skettenis 352060fee10Skettenis 353060fee10Skettenis #define LOAD_FILE_PROTOCOL \ 354060fee10Skettenis { 0x56EC3091, 0x954C, 0x11d2, { 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } } 355060fee10Skettenis 356060fee10Skettenis INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE); 357060fee10Skettenis 358060fee10Skettenis typedef 359060fee10Skettenis EFI_STATUS 360060fee10Skettenis (EFIAPI *EFI_LOAD_FILE) ( 361060fee10Skettenis IN struct _EFI_LOAD_FILE_INTERFACE *This, 362060fee10Skettenis IN EFI_DEVICE_PATH *FilePath, 363060fee10Skettenis IN BOOLEAN BootPolicy, 364060fee10Skettenis IN OUT UINTN *BufferSize, 365060fee10Skettenis IN VOID *Buffer OPTIONAL 366060fee10Skettenis ); 367060fee10Skettenis 368060fee10Skettenis typedef struct _EFI_LOAD_FILE_INTERFACE { 369060fee10Skettenis EFI_LOAD_FILE LoadFile; 370060fee10Skettenis } EFI_LOAD_FILE_INTERFACE; 371060fee10Skettenis 372060fee10Skettenis 373060fee10Skettenis // 374060fee10Skettenis // Device IO protocol 375060fee10Skettenis // 376060fee10Skettenis 377060fee10Skettenis #define DEVICE_IO_PROTOCOL \ 378060fee10Skettenis { 0xaf6ac311, 0x84c3, 0x11d2, { 0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } } 379060fee10Skettenis 380060fee10Skettenis INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE); 381060fee10Skettenis 382060fee10Skettenis typedef enum { 383060fee10Skettenis IO_UINT8, 384060fee10Skettenis IO_UINT16, 385060fee10Skettenis IO_UINT32, 386060fee10Skettenis IO_UINT64, 387060fee10Skettenis // 388060fee10Skettenis // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO 389060fee10Skettenis // 390060fee10Skettenis MMIO_COPY_UINT8, 391060fee10Skettenis MMIO_COPY_UINT16, 392060fee10Skettenis MMIO_COPY_UINT32, 393060fee10Skettenis MMIO_COPY_UINT64 394060fee10Skettenis } EFI_IO_WIDTH; 395060fee10Skettenis 396060fee10Skettenis #define EFI_PCI_ADDRESS(bus,dev,func,reg) \ 397060fee10Skettenis ( (UINT64) ( (((UINTN)bus) << 24) + (((UINTN)dev) << 16) + (((UINTN)func) << 8) + ((UINTN)reg) )) 398060fee10Skettenis 399060fee10Skettenis typedef 400060fee10Skettenis EFI_STATUS 401060fee10Skettenis (EFIAPI *EFI_DEVICE_IO) ( 402060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 403060fee10Skettenis IN EFI_IO_WIDTH Width, 404060fee10Skettenis IN UINT64 Address, 405060fee10Skettenis IN UINTN Count, 406060fee10Skettenis IN OUT VOID *Buffer 407060fee10Skettenis ); 408060fee10Skettenis 409060fee10Skettenis typedef struct { 410060fee10Skettenis EFI_DEVICE_IO Read; 411060fee10Skettenis EFI_DEVICE_IO Write; 412060fee10Skettenis } EFI_IO_ACCESS; 413060fee10Skettenis 414060fee10Skettenis typedef 415060fee10Skettenis EFI_STATUS 416060fee10Skettenis (EFIAPI *EFI_PCI_DEVICE_PATH) ( 417060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 418060fee10Skettenis IN UINT64 Address, 419060fee10Skettenis IN OUT EFI_DEVICE_PATH **PciDevicePath 420060fee10Skettenis ); 421060fee10Skettenis 422060fee10Skettenis typedef enum { 423060fee10Skettenis EfiBusMasterRead, 424060fee10Skettenis EfiBusMasterWrite, 425060fee10Skettenis EfiBusMasterCommonBuffer 426060fee10Skettenis } EFI_IO_OPERATION_TYPE; 427060fee10Skettenis 428060fee10Skettenis typedef 429060fee10Skettenis EFI_STATUS 430060fee10Skettenis (EFIAPI *EFI_IO_MAP) ( 431060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 432060fee10Skettenis IN EFI_IO_OPERATION_TYPE Operation, 433060fee10Skettenis IN EFI_PHYSICAL_ADDRESS *HostAddress, 434060fee10Skettenis IN OUT UINTN *NumberOfBytes, 435060fee10Skettenis OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, 436060fee10Skettenis OUT VOID **Mapping 437060fee10Skettenis ); 438060fee10Skettenis 439060fee10Skettenis typedef 440060fee10Skettenis EFI_STATUS 441060fee10Skettenis (EFIAPI *EFI_IO_UNMAP) ( 442060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 443060fee10Skettenis IN VOID *Mapping 444060fee10Skettenis ); 445060fee10Skettenis 446060fee10Skettenis typedef 447060fee10Skettenis EFI_STATUS 448060fee10Skettenis (EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( 449060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 450060fee10Skettenis IN EFI_ALLOCATE_TYPE Type, 451060fee10Skettenis IN EFI_MEMORY_TYPE MemoryType, 452060fee10Skettenis IN UINTN Pages, 453060fee10Skettenis IN OUT EFI_PHYSICAL_ADDRESS *HostAddress 454060fee10Skettenis ); 455060fee10Skettenis 456060fee10Skettenis typedef 457060fee10Skettenis EFI_STATUS 458060fee10Skettenis (EFIAPI *EFI_IO_FLUSH) ( 459060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This 460060fee10Skettenis ); 461060fee10Skettenis 462060fee10Skettenis typedef 463060fee10Skettenis EFI_STATUS 464060fee10Skettenis (EFIAPI *EFI_IO_FREE_BUFFER) ( 465060fee10Skettenis IN struct _EFI_DEVICE_IO_INTERFACE *This, 466060fee10Skettenis IN UINTN Pages, 467060fee10Skettenis IN EFI_PHYSICAL_ADDRESS HostAddress 468060fee10Skettenis ); 469060fee10Skettenis 470060fee10Skettenis typedef struct _EFI_DEVICE_IO_INTERFACE { 471060fee10Skettenis EFI_IO_ACCESS Mem; 472060fee10Skettenis EFI_IO_ACCESS Io; 473060fee10Skettenis EFI_IO_ACCESS Pci; 474060fee10Skettenis EFI_IO_MAP Map; 475060fee10Skettenis EFI_PCI_DEVICE_PATH PciDevicePath; 476060fee10Skettenis EFI_IO_UNMAP Unmap; 477060fee10Skettenis EFI_IO_ALLOCATE_BUFFER AllocateBuffer; 478060fee10Skettenis EFI_IO_FLUSH Flush; 479060fee10Skettenis EFI_IO_FREE_BUFFER FreeBuffer; 480060fee10Skettenis } EFI_DEVICE_IO_INTERFACE; 481060fee10Skettenis 482060fee10Skettenis 483060fee10Skettenis // 484060fee10Skettenis // Unicode Collation protocol 485060fee10Skettenis // 486060fee10Skettenis 487060fee10Skettenis #define UNICODE_COLLATION_PROTOCOL \ 488060fee10Skettenis { 0x1d85cd7f, 0xf43d, 0x11d2, { 0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } 489060fee10Skettenis 490060fee10Skettenis #define UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff) 491060fee10Skettenis 492060fee10Skettenis INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE); 493060fee10Skettenis 494060fee10Skettenis typedef 495060fee10Skettenis INTN 496060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_STRICOLL) ( 497060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 498060fee10Skettenis IN CHAR16 *s1, 499060fee10Skettenis IN CHAR16 *s2 500060fee10Skettenis ); 501060fee10Skettenis 502060fee10Skettenis typedef 503060fee10Skettenis BOOLEAN 504060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_METAIMATCH) ( 505060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 506060fee10Skettenis IN CHAR16 *String, 507060fee10Skettenis IN CHAR16 *Pattern 508060fee10Skettenis ); 509060fee10Skettenis 510060fee10Skettenis typedef 511060fee10Skettenis VOID 512060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_STRLWR) ( 513060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 514060fee10Skettenis IN OUT CHAR16 *Str 515060fee10Skettenis ); 516060fee10Skettenis 517060fee10Skettenis typedef 518060fee10Skettenis VOID 519060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_STRUPR) ( 520060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 521060fee10Skettenis IN OUT CHAR16 *Str 522060fee10Skettenis ); 523060fee10Skettenis 524060fee10Skettenis typedef 525060fee10Skettenis VOID 526060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_FATTOSTR) ( 527060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 528060fee10Skettenis IN UINTN FatSize, 529060fee10Skettenis IN CHAR8 *Fat, 530060fee10Skettenis OUT CHAR16 *String 531060fee10Skettenis ); 532060fee10Skettenis 533060fee10Skettenis typedef 534060fee10Skettenis BOOLEAN 535060fee10Skettenis (EFIAPI *EFI_UNICODE_COLLATION_STRTOFAT) ( 536060fee10Skettenis IN struct _EFI_UNICODE_COLLATION_INTERFACE *This, 537060fee10Skettenis IN CHAR16 *String, 538060fee10Skettenis IN UINTN FatSize, 539060fee10Skettenis OUT CHAR8 *Fat 540060fee10Skettenis ); 541060fee10Skettenis 542060fee10Skettenis 543060fee10Skettenis typedef struct _EFI_UNICODE_COLLATION_INTERFACE { 544060fee10Skettenis 545060fee10Skettenis // general 546060fee10Skettenis EFI_UNICODE_COLLATION_STRICOLL StriColl; 547060fee10Skettenis EFI_UNICODE_COLLATION_METAIMATCH MetaiMatch; 548060fee10Skettenis EFI_UNICODE_COLLATION_STRLWR StrLwr; 549060fee10Skettenis EFI_UNICODE_COLLATION_STRUPR StrUpr; 550060fee10Skettenis 551060fee10Skettenis // for supporting fat volumes 552060fee10Skettenis EFI_UNICODE_COLLATION_FATTOSTR FatToStr; 553060fee10Skettenis EFI_UNICODE_COLLATION_STRTOFAT StrToFat; 554060fee10Skettenis 555060fee10Skettenis CHAR8 *SupportedLanguages; 556060fee10Skettenis } EFI_UNICODE_COLLATION_INTERFACE; 557060fee10Skettenis 558060fee10Skettenis #endif 559