xref: /openbsd-src/sys/stand/efi/include/efiprot.h (revision 9593dc34da13a12012033a17061c846c208061c2)
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