177943Sdfr/* $FreeBSD$ */
277943Sdfr#ifndef _EFI_PROT_H
377943Sdfr#define _EFI_PROT_H
477943Sdfr
577943Sdfr/*++
677943Sdfr
7163898SmarcelCopyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8163898SmarcelThis software and associated documentation (if any) is furnished
9163898Smarcelunder a license and may only be used or copied in accordance
10163898Smarcelwith the terms of the license. Except as permitted by such
11163898Smarcellicense, no part of this software or documentation may be
12163898Smarcelreproduced, stored in a retrieval system, or transmitted in any
13163898Smarcelform or by any means without the express written consent of
14163898SmarcelIntel Corporation.
1577943Sdfr
1677943SdfrModule Name:
1777943Sdfr
1877943Sdfr    efiprot.h
1977943Sdfr
2077943SdfrAbstract:
2177943Sdfr
2277943Sdfr    EFI Protocols
2377943Sdfr
2477943Sdfr
2577943Sdfr
2677943SdfrRevision History
2777943Sdfr
2877943Sdfr--*/
2977943Sdfr
30163898Smarcel//
31163898Smarcel// Device Path protocol
32163898Smarcel//
3377943Sdfr
3477943Sdfr#define DEVICE_PATH_PROTOCOL    \
3577943Sdfr    { 0x9576e91, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
3677943Sdfr
3777943Sdfr
38163898Smarcel//
39163898Smarcel// Block IO protocol
40163898Smarcel//
4177943Sdfr
4277943Sdfr#define BLOCK_IO_PROTOCOL \
4377943Sdfr    { 0x964e5b21, 0x6459, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
4477943Sdfr#define EFI_BLOCK_IO_INTERFACE_REVISION   0x00010000
4577943Sdfr
4677943SdfrINTERFACE_DECL(_EFI_BLOCK_IO);
4777943Sdfr
4877943Sdfrtypedef
4977943SdfrEFI_STATUS
5077943Sdfr(EFIAPI *EFI_BLOCK_RESET) (
5177943Sdfr    IN struct _EFI_BLOCK_IO     *This,
5277943Sdfr    IN BOOLEAN                  ExtendedVerification
5377943Sdfr    );
5477943Sdfr
5577943Sdfrtypedef
5677943SdfrEFI_STATUS
5777943Sdfr(EFIAPI *EFI_BLOCK_READ) (
5877943Sdfr    IN struct _EFI_BLOCK_IO     *This,
5977943Sdfr    IN UINT32                   MediaId,
6077943Sdfr    IN EFI_LBA                  LBA,
6177943Sdfr    IN UINTN                    BufferSize,
6277943Sdfr    OUT VOID                    *Buffer
6377943Sdfr    );
6477943Sdfr
6577943Sdfr
6677943Sdfrtypedef
6777943SdfrEFI_STATUS
6877943Sdfr(EFIAPI *EFI_BLOCK_WRITE) (
6977943Sdfr    IN struct _EFI_BLOCK_IO     *This,
7077943Sdfr    IN UINT32                   MediaId,
7177943Sdfr    IN EFI_LBA                  LBA,
7277943Sdfr    IN UINTN                    BufferSize,
7377943Sdfr    IN VOID                     *Buffer
7477943Sdfr    );
7577943Sdfr
7677943Sdfr
7777943Sdfrtypedef
7877943SdfrEFI_STATUS
7977943Sdfr(EFIAPI *EFI_BLOCK_FLUSH) (
8077943Sdfr    IN struct _EFI_BLOCK_IO     *This
8177943Sdfr    );
8277943Sdfr
8377943Sdfr
8477943Sdfr
8577943Sdfrtypedef struct {
8677943Sdfr    UINT32              MediaId;
8777943Sdfr    BOOLEAN             RemovableMedia;
8877943Sdfr    BOOLEAN             MediaPresent;
8977943Sdfr
9077943Sdfr    BOOLEAN             LogicalPartition;
9177943Sdfr    BOOLEAN             ReadOnly;
9277943Sdfr    BOOLEAN             WriteCaching;
9377943Sdfr
9477943Sdfr    UINT32              BlockSize;
9577943Sdfr    UINT32              IoAlign;
9677943Sdfr
9777943Sdfr    EFI_LBA             LastBlock;
9877943Sdfr} EFI_BLOCK_IO_MEDIA;
9977943Sdfr
10077943Sdfrtypedef struct _EFI_BLOCK_IO {
10177943Sdfr    UINT64                  Revision;
10277943Sdfr
10377943Sdfr    EFI_BLOCK_IO_MEDIA      *Media;
10477943Sdfr
10577943Sdfr    EFI_BLOCK_RESET         Reset;
10677943Sdfr    EFI_BLOCK_READ          ReadBlocks;
10777943Sdfr    EFI_BLOCK_WRITE         WriteBlocks;
10877943Sdfr    EFI_BLOCK_FLUSH         FlushBlocks;
10977943Sdfr
11077943Sdfr} EFI_BLOCK_IO;
11177943Sdfr
11277943Sdfr
11377943Sdfr
114163898Smarcel//
115163898Smarcel// Disk Block IO protocol
116163898Smarcel//
11777943Sdfr
11877943Sdfr#define DISK_IO_PROTOCOL \
11977943Sdfr    { 0xce345171, 0xba0b, 0x11d2,  0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
12077943Sdfr#define EFI_DISK_IO_INTERFACE_REVISION   0x00010000
12177943Sdfr
12277943SdfrINTERFACE_DECL(_EFI_DISK_IO);
12377943Sdfr
12477943Sdfrtypedef
12577943SdfrEFI_STATUS
12677943Sdfr(EFIAPI *EFI_DISK_READ) (
12777943Sdfr    IN struct _EFI_DISK_IO      *This,
12877943Sdfr    IN UINT32                   MediaId,
12977943Sdfr    IN UINT64                   Offset,
13077943Sdfr    IN UINTN                    BufferSize,
13177943Sdfr    OUT VOID                    *Buffer
13277943Sdfr    );
13377943Sdfr
13477943Sdfr
13577943Sdfrtypedef
13677943SdfrEFI_STATUS
13777943Sdfr(EFIAPI *EFI_DISK_WRITE) (
13877943Sdfr    IN struct _EFI_DISK_IO      *This,
13977943Sdfr    IN UINT32                   MediaId,
14077943Sdfr    IN UINT64                   Offset,
14177943Sdfr    IN UINTN                    BufferSize,
14277943Sdfr    IN VOID                     *Buffer
14377943Sdfr    );
14477943Sdfr
14577943Sdfr
14677943Sdfrtypedef struct _EFI_DISK_IO {
14777943Sdfr    UINT64              Revision;
14877943Sdfr    EFI_DISK_READ       ReadDisk;
14977943Sdfr    EFI_DISK_WRITE      WriteDisk;
15077943Sdfr} EFI_DISK_IO;
15177943Sdfr
15277943Sdfr
153163898Smarcel//
154163898Smarcel// Simple file system protocol
155163898Smarcel//
15677943Sdfr
15777943Sdfr#define SIMPLE_FILE_SYSTEM_PROTOCOL \
15877943Sdfr    { 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
15977943Sdfr
16077943SdfrINTERFACE_DECL(_EFI_FILE_IO_INTERFACE);
16177943SdfrINTERFACE_DECL(_EFI_FILE_HANDLE);
16277943Sdfr
16377943Sdfrtypedef
16477943SdfrEFI_STATUS
16577943Sdfr(EFIAPI *EFI_VOLUME_OPEN) (
16677943Sdfr    IN struct _EFI_FILE_IO_INTERFACE    *This,
16777943Sdfr    OUT struct _EFI_FILE_HANDLE         **Root
16877943Sdfr    );
16977943Sdfr
17077943Sdfr#define EFI_FILE_IO_INTERFACE_REVISION   0x00010000
17177943Sdfr
17277943Sdfrtypedef struct _EFI_FILE_IO_INTERFACE {
17377943Sdfr    UINT64                  Revision;
17477943Sdfr    EFI_VOLUME_OPEN         OpenVolume;
17577943Sdfr} EFI_FILE_IO_INTERFACE;
17677943Sdfr
177163898Smarcel//
178163898Smarcel//
179163898Smarcel//
180163898Smarcel
18177943Sdfrtypedef
18277943SdfrEFI_STATUS
18377943Sdfr(EFIAPI *EFI_FILE_OPEN) (
18477943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
18577943Sdfr    OUT struct _EFI_FILE_HANDLE **NewHandle,
18677943Sdfr    IN CHAR16                   *FileName,
18777943Sdfr    IN UINT64                   OpenMode,
18877943Sdfr    IN UINT64                   Attributes
18977943Sdfr    );
19077943Sdfr
191163898Smarcel// Open modes
19277943Sdfr#define EFI_FILE_MODE_READ      0x0000000000000001
19377943Sdfr#define EFI_FILE_MODE_WRITE     0x0000000000000002
19477943Sdfr#define EFI_FILE_MODE_CREATE    0x8000000000000000
19577943Sdfr
196163898Smarcel// File attributes
19777943Sdfr#define EFI_FILE_READ_ONLY      0x0000000000000001
19877943Sdfr#define EFI_FILE_HIDDEN         0x0000000000000002
19977943Sdfr#define EFI_FILE_SYSTEM         0x0000000000000004
20077943Sdfr#define EFI_FILE_RESERVIED      0x0000000000000008
20177943Sdfr#define EFI_FILE_DIRECTORY      0x0000000000000010
20277943Sdfr#define EFI_FILE_ARCHIVE        0x0000000000000020
20377943Sdfr#define EFI_FILE_VALID_ATTR     0x0000000000000037
20477943Sdfr
20577943Sdfrtypedef
20677943SdfrEFI_STATUS
20777943Sdfr(EFIAPI *EFI_FILE_CLOSE) (
20877943Sdfr    IN struct _EFI_FILE_HANDLE  *File
20977943Sdfr    );
21077943Sdfr
21177943Sdfrtypedef
21277943SdfrEFI_STATUS
21377943Sdfr(EFIAPI *EFI_FILE_DELETE) (
21477943Sdfr    IN struct _EFI_FILE_HANDLE  *File
21577943Sdfr    );
21677943Sdfr
21777943Sdfrtypedef
21877943SdfrEFI_STATUS
21977943Sdfr(EFIAPI *EFI_FILE_READ) (
22077943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
22177943Sdfr    IN OUT UINTN                *BufferSize,
22277943Sdfr    OUT VOID                    *Buffer
22377943Sdfr    );
22477943Sdfr
22577943Sdfrtypedef
22677943SdfrEFI_STATUS
22777943Sdfr(EFIAPI *EFI_FILE_WRITE) (
22877943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
22977943Sdfr    IN OUT UINTN                *BufferSize,
23077943Sdfr    IN VOID                     *Buffer
23177943Sdfr    );
23277943Sdfr
23377943Sdfrtypedef
23477943SdfrEFI_STATUS
23577943Sdfr(EFIAPI *EFI_FILE_SET_POSITION) (
23677943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
23777943Sdfr    IN UINT64                   Position
23877943Sdfr    );
23977943Sdfr
24077943Sdfrtypedef
24177943SdfrEFI_STATUS
24277943Sdfr(EFIAPI *EFI_FILE_GET_POSITION) (
24377943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
24477943Sdfr    OUT UINT64                  *Position
24577943Sdfr    );
24677943Sdfr
24777943Sdfrtypedef
24877943SdfrEFI_STATUS
24977943Sdfr(EFIAPI *EFI_FILE_GET_INFO) (
25077943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
25177943Sdfr    IN EFI_GUID                 *InformationType,
25277943Sdfr    IN OUT UINTN                *BufferSize,
25377943Sdfr    OUT VOID                    *Buffer
25477943Sdfr    );
25577943Sdfr
25677943Sdfrtypedef
25777943SdfrEFI_STATUS
25877943Sdfr(EFIAPI *EFI_FILE_SET_INFO) (
25977943Sdfr    IN struct _EFI_FILE_HANDLE  *File,
26077943Sdfr    IN EFI_GUID                 *InformationType,
26177943Sdfr    IN UINTN                    BufferSize,
26277943Sdfr    IN VOID                     *Buffer
26377943Sdfr    );
26477943Sdfr
26577943Sdfrtypedef
26677943SdfrEFI_STATUS
26777943Sdfr(EFIAPI *EFI_FILE_FLUSH) (
26877943Sdfr    IN struct _EFI_FILE_HANDLE  *File
26977943Sdfr    );
27077943Sdfr
27177943Sdfr
27277943Sdfr
27377943Sdfr#define EFI_FILE_HANDLE_REVISION         0x00010000
27477943Sdfrtypedef struct _EFI_FILE_HANDLE {
27577943Sdfr    UINT64                  Revision;
27677943Sdfr    EFI_FILE_OPEN           Open;
27777943Sdfr    EFI_FILE_CLOSE          Close;
27877943Sdfr    EFI_FILE_DELETE         Delete;
27977943Sdfr    EFI_FILE_READ           Read;
28077943Sdfr    EFI_FILE_WRITE          Write;
28177943Sdfr    EFI_FILE_GET_POSITION   GetPosition;
28277943Sdfr    EFI_FILE_SET_POSITION   SetPosition;
28377943Sdfr    EFI_FILE_GET_INFO       GetInfo;
28477943Sdfr    EFI_FILE_SET_INFO       SetInfo;
28577943Sdfr    EFI_FILE_FLUSH          Flush;
28677943Sdfr} EFI_FILE, *EFI_FILE_HANDLE;
28777943Sdfr
28877943Sdfr
289163898Smarcel//
290163898Smarcel// File information types
291163898Smarcel//
29277943Sdfr
29377943Sdfr#define EFI_FILE_INFO_ID   \
29477943Sdfr    { 0x9576e92, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
29577943Sdfr
29677943Sdfrtypedef struct {
29777943Sdfr    UINT64                  Size;
29877943Sdfr    UINT64                  FileSize;
29977943Sdfr    UINT64                  PhysicalSize;
30077943Sdfr    EFI_TIME                CreateTime;
30177943Sdfr    EFI_TIME                LastAccessTime;
30277943Sdfr    EFI_TIME                ModificationTime;
30377943Sdfr    UINT64                  Attribute;
30477943Sdfr    CHAR16                  FileName[1];
30577943Sdfr} EFI_FILE_INFO;
30677943Sdfr
307163898Smarcel//
308163898Smarcel// The FileName field of the EFI_FILE_INFO data structure is variable length.
309163898Smarcel// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
310163898Smarcel// be the size of the data structure without the FileName field.  The following macro
311163898Smarcel// computes this size correctly no matter how big the FileName array is declared.
312163898Smarcel// This is required to make the EFI_FILE_INFO data structure ANSI compilant.
313163898Smarcel//
31477943Sdfr
31577943Sdfr#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
31677943Sdfr
31777943Sdfr#define EFI_FILE_SYSTEM_INFO_ID    \
31877943Sdfr    { 0x9576e93, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
31977943Sdfr
32077943Sdfrtypedef struct {
32177943Sdfr    UINT64                  Size;
32277943Sdfr    BOOLEAN                 ReadOnly;
32377943Sdfr    UINT64                  VolumeSize;
32477943Sdfr    UINT64                  FreeSpace;
32577943Sdfr    UINT32                  BlockSize;
32677943Sdfr    CHAR16                  VolumeLabel[1];
32777943Sdfr} EFI_FILE_SYSTEM_INFO;
32877943Sdfr
329163898Smarcel//
330163898Smarcel// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
331163898Smarcel// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
332163898Smarcel// to be the size of the data structure without the VolumeLable field.  The following macro
333163898Smarcel// computes this size correctly no matter how big the VolumeLable array is declared.
334163898Smarcel// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
335163898Smarcel//
33677943Sdfr
33777943Sdfr#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
33877943Sdfr
33977943Sdfr#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID    \
34077943Sdfr    { 0xDB47D7D3,0xFE81, 0x11d3, 0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }
34177943Sdfr
34277943Sdfrtypedef struct {
34377943Sdfr    CHAR16                  VolumeLabel[1];
34477943Sdfr} EFI_FILE_SYSTEM_VOLUME_LABEL_INFO;
34577943Sdfr
34677943Sdfr#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
34777943Sdfr
348163898Smarcel//
349163898Smarcel// Load file protocol
350163898Smarcel//
35177943Sdfr
352163898Smarcel
35377943Sdfr#define LOAD_FILE_PROTOCOL \
35477943Sdfr    { 0x56EC3091, 0x954C, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B }
35577943Sdfr
35677943SdfrINTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE);
35777943Sdfr
35877943Sdfrtypedef
35977943SdfrEFI_STATUS
36077943Sdfr(EFIAPI *EFI_LOAD_FILE) (
36177943Sdfr    IN struct _EFI_LOAD_FILE_INTERFACE  *This,
36277943Sdfr    IN EFI_DEVICE_PATH                  *FilePath,
36377943Sdfr    IN BOOLEAN                          BootPolicy,
36477943Sdfr    IN OUT UINTN                        *BufferSize,
36577943Sdfr    IN VOID                             *Buffer OPTIONAL
36677943Sdfr    );
36777943Sdfr
36877943Sdfrtypedef struct _EFI_LOAD_FILE_INTERFACE {
36977943Sdfr    EFI_LOAD_FILE                       LoadFile;
37077943Sdfr} EFI_LOAD_FILE_INTERFACE;
37177943Sdfr
37277943Sdfr
373163898Smarcel//
374163898Smarcel// Device IO protocol
375163898Smarcel//
37677943Sdfr
37777943Sdfr#define DEVICE_IO_PROTOCOL \
37877943Sdfr    { 0xaf6ac311, 0x84c3, 0x11d2, 0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b }
37977943Sdfr
38077943SdfrINTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE);
38177943Sdfr
38277943Sdfrtypedef enum {
38377943Sdfr    IO_UINT8,
38477943Sdfr    IO_UINT16,
38577943Sdfr    IO_UINT32,
38677943Sdfr    IO_UINT64,
387163898Smarcel//
388163898Smarcel// Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
389163898Smarcel//
39077943Sdfr    MMIO_COPY_UINT8,
39177943Sdfr    MMIO_COPY_UINT16,
39277943Sdfr    MMIO_COPY_UINT32,
39377943Sdfr    MMIO_COPY_UINT64
39477943Sdfr} EFI_IO_WIDTH;
39577943Sdfr
396163898Smarcel#define EFI_PCI_ADDRESS(bus,dev,func,reg) \
397163898Smarcel  ( (UINT64) ( (((UINTN)bus) << 24) + (((UINTN)dev) << 16) + (((UINTN)func) << 8) + ((UINTN)reg) ))
39877943Sdfr
39977943Sdfrtypedef
40077943SdfrEFI_STATUS
40177943Sdfr(EFIAPI *EFI_DEVICE_IO) (
40277943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE *This,
40377943Sdfr    IN EFI_IO_WIDTH                 Width,
40477943Sdfr    IN UINT64                       Address,
40577943Sdfr    IN UINTN                        Count,
40677943Sdfr    IN OUT VOID                     *Buffer
40777943Sdfr    );
40877943Sdfr
40977943Sdfrtypedef struct {
41077943Sdfr    EFI_DEVICE_IO                   Read;
41177943Sdfr    EFI_DEVICE_IO                   Write;
41277943Sdfr} EFI_IO_ACCESS;
41377943Sdfr
41477943Sdfrtypedef
41577943SdfrEFI_STATUS
41677943Sdfr(EFIAPI *EFI_PCI_DEVICE_PATH) (
41777943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This,
41877943Sdfr    IN UINT64                           Address,
41977943Sdfr    IN OUT EFI_DEVICE_PATH              **PciDevicePath
42077943Sdfr    );
42177943Sdfr
42277943Sdfrtypedef enum {
42377943Sdfr    EfiBusMasterRead,
42477943Sdfr    EfiBusMasterWrite,
42577943Sdfr    EfiBusMasterCommonBuffer
42677943Sdfr} EFI_IO_OPERATION_TYPE;
42777943Sdfr
42877943Sdfrtypedef
42977943SdfrEFI_STATUS
43077943Sdfr(EFIAPI *EFI_IO_MAP) (
43177943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This,
43277943Sdfr    IN EFI_IO_OPERATION_TYPE            Operation,
43377943Sdfr    IN EFI_PHYSICAL_ADDRESS             *HostAddress,
43477943Sdfr    IN OUT UINTN                        *NumberOfBytes,
43577943Sdfr    OUT EFI_PHYSICAL_ADDRESS            *DeviceAddress,
43677943Sdfr    OUT VOID                            **Mapping
43777943Sdfr    );
43877943Sdfr
43977943Sdfrtypedef
44077943SdfrEFI_STATUS
44177943Sdfr(EFIAPI *EFI_IO_UNMAP) (
44277943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This,
44377943Sdfr    IN VOID                             *Mapping
44477943Sdfr    );
44577943Sdfr
44677943Sdfrtypedef
44777943SdfrEFI_STATUS
44877943Sdfr(EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
44977943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This,
45077943Sdfr    IN EFI_ALLOCATE_TYPE                Type,
45177943Sdfr    IN EFI_MEMORY_TYPE                  MemoryType,
45277943Sdfr    IN UINTN                            Pages,
45377943Sdfr    IN OUT EFI_PHYSICAL_ADDRESS         *HostAddress
45477943Sdfr    );
45577943Sdfr
45677943Sdfrtypedef
45777943SdfrEFI_STATUS
45877943Sdfr(EFIAPI *EFI_IO_FLUSH) (
45977943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This
46077943Sdfr    );
46177943Sdfr
46277943Sdfrtypedef
46377943SdfrEFI_STATUS
46477943Sdfr(EFIAPI *EFI_IO_FREE_BUFFER) (
46577943Sdfr    IN struct _EFI_DEVICE_IO_INTERFACE  *This,
46677943Sdfr    IN UINTN                            Pages,
46777943Sdfr    IN EFI_PHYSICAL_ADDRESS             HostAddress
46877943Sdfr    );
46977943Sdfr
47077943Sdfrtypedef struct _EFI_DEVICE_IO_INTERFACE {
47177943Sdfr    EFI_IO_ACCESS                       Mem;
47277943Sdfr    EFI_IO_ACCESS                       Io;
47377943Sdfr    EFI_IO_ACCESS                       Pci;
47477943Sdfr    EFI_IO_MAP                          Map;
47577943Sdfr    EFI_PCI_DEVICE_PATH                 PciDevicePath;
47677943Sdfr    EFI_IO_UNMAP                        Unmap;
47777943Sdfr    EFI_IO_ALLOCATE_BUFFER              AllocateBuffer;
47877943Sdfr    EFI_IO_FLUSH                        Flush;
47977943Sdfr    EFI_IO_FREE_BUFFER                  FreeBuffer;
48077943Sdfr} EFI_DEVICE_IO_INTERFACE;
48177943Sdfr
48277943Sdfr
483163898Smarcel//
484163898Smarcel// Unicode Collation protocol
485163898Smarcel//
48677943Sdfr
48777943Sdfr#define UNICODE_COLLATION_PROTOCOL \
48877943Sdfr    { 0x1d85cd7f, 0xf43d, 0x11d2, 0x9a, 0xc,  0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
48977943Sdfr
49077943Sdfr#define UNICODE_BYTE_ORDER_MARK       (CHAR16)(0xfeff)
49177943Sdfr
49277943SdfrINTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE);
49377943Sdfr
49477943Sdfrtypedef
49577943SdfrINTN
496163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_STRICOLL) (
49777943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
49877943Sdfr    IN CHAR16                         *s1,
49977943Sdfr    IN CHAR16                         *s2
50077943Sdfr    );
50177943Sdfr
50277943Sdfrtypedef
50377943SdfrBOOLEAN
504163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_METAIMATCH) (
50577943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
50677943Sdfr    IN CHAR16                         *String,
50777943Sdfr    IN CHAR16                         *Pattern
50877943Sdfr    );
50977943Sdfr
51077943Sdfrtypedef
51177943SdfrVOID
512163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_STRLWR) (
51377943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
51477943Sdfr    IN OUT CHAR16                       *Str
51577943Sdfr    );
51677943Sdfr
51777943Sdfrtypedef
51877943SdfrVOID
519163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_STRUPR) (
52077943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
52177943Sdfr    IN OUT CHAR16                       *Str
52277943Sdfr    );
52377943Sdfr
52477943Sdfrtypedef
52577943SdfrVOID
526163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_FATTOSTR) (
52777943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
52877943Sdfr    IN UINTN                            FatSize,
52977943Sdfr    IN CHAR8                            *Fat,
53077943Sdfr    OUT CHAR16                          *String
53177943Sdfr    );
53277943Sdfr
53377943Sdfrtypedef
53477943SdfrBOOLEAN
535163898Smarcel(EFIAPI *EFI_UNICODE_COLLATION_STRTOFAT) (
53677943Sdfr    IN struct _EFI_UNICODE_COLLATION_INTERFACE  *This,
53777943Sdfr    IN CHAR16                           *String,
53877943Sdfr    IN UINTN                            FatSize,
53977943Sdfr    OUT CHAR8                           *Fat
54077943Sdfr    );
54177943Sdfr
54277943Sdfr
54377943Sdfrtypedef struct _EFI_UNICODE_COLLATION_INTERFACE {
54477943Sdfr
545163898Smarcel    // general
546163898Smarcel    EFI_UNICODE_COLLATION_STRICOLL                StriColl;
547163898Smarcel    EFI_UNICODE_COLLATION_METAIMATCH              MetaiMatch;
548163898Smarcel    EFI_UNICODE_COLLATION_STRLWR                  StrLwr;
549163898Smarcel    EFI_UNICODE_COLLATION_STRUPR                  StrUpr;
55077943Sdfr
551163898Smarcel    // for supporting fat volumes
552163898Smarcel    EFI_UNICODE_COLLATION_FATTOSTR                FatToStr;
553163898Smarcel    EFI_UNICODE_COLLATION_STRTOFAT                StrToFat;
55477943Sdfr
55577943Sdfr    CHAR8                               *SupportedLanguages;
55677943Sdfr} EFI_UNICODE_COLLATION_INTERFACE;
55777943Sdfr
55877943Sdfr#endif
559