efiprot.h revision 1.1 1 1.1 jakllsch /* $NetBSD: efiprot.h,v 1.1 2014/04/01 16:16:07 jakllsch Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch #ifndef _EFI_PROT_H
4 1.1 jakllsch #define _EFI_PROT_H
5 1.1 jakllsch
6 1.1 jakllsch /*++
7 1.1 jakllsch
8 1.1 jakllsch Copyright (c) 1998 Intel Corporation
9 1.1 jakllsch
10 1.1 jakllsch Module Name:
11 1.1 jakllsch
12 1.1 jakllsch efiprot.h
13 1.1 jakllsch
14 1.1 jakllsch Abstract:
15 1.1 jakllsch
16 1.1 jakllsch EFI Protocols
17 1.1 jakllsch
18 1.1 jakllsch
19 1.1 jakllsch
20 1.1 jakllsch Revision History
21 1.1 jakllsch
22 1.1 jakllsch --*/
23 1.1 jakllsch
24 1.1 jakllsch //
25 1.1 jakllsch // FPSWA library protocol
26 1.1 jakllsch //
27 1.1 jakllsch #define FPSWA_PROTOCOL \
28 1.1 jakllsch { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
29 1.1 jakllsch
30 1.1 jakllsch //
31 1.1 jakllsch // Device Path protocol
32 1.1 jakllsch //
33 1.1 jakllsch
34 1.1 jakllsch #define DEVICE_PATH_PROTOCOL \
35 1.1 jakllsch { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
36 1.1 jakllsch
37 1.1 jakllsch
38 1.1 jakllsch //
39 1.1 jakllsch // Block IO protocol
40 1.1 jakllsch //
41 1.1 jakllsch
42 1.1 jakllsch #define BLOCK_IO_PROTOCOL \
43 1.1 jakllsch { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
44 1.1 jakllsch #define EFI_BLOCK_IO_INTERFACE_REVISION 0x00010000
45 1.1 jakllsch #define EFI_BLOCK_IO_INTERFACE_REVISION2 0x00020001
46 1.1 jakllsch #define EFI_BLOCK_IO_INTERFACE_REVISION3 ((2<<16) | 31)
47 1.1 jakllsch
48 1.1 jakllsch INTERFACE_DECL(_EFI_BLOCK_IO);
49 1.1 jakllsch
50 1.1 jakllsch typedef
51 1.1 jakllsch EFI_STATUS
52 1.1 jakllsch (EFIAPI *EFI_BLOCK_RESET) (
53 1.1 jakllsch IN struct _EFI_BLOCK_IO *This,
54 1.1 jakllsch IN BOOLEAN ExtendedVerification
55 1.1 jakllsch );
56 1.1 jakllsch
57 1.1 jakllsch typedef
58 1.1 jakllsch EFI_STATUS
59 1.1 jakllsch (EFIAPI *EFI_BLOCK_READ) (
60 1.1 jakllsch IN struct _EFI_BLOCK_IO *This,
61 1.1 jakllsch IN UINT32 MediaId,
62 1.1 jakllsch IN EFI_LBA LBA,
63 1.1 jakllsch IN UINTN BufferSize,
64 1.1 jakllsch OUT VOID *Buffer
65 1.1 jakllsch );
66 1.1 jakllsch
67 1.1 jakllsch
68 1.1 jakllsch typedef
69 1.1 jakllsch EFI_STATUS
70 1.1 jakllsch (EFIAPI *EFI_BLOCK_WRITE) (
71 1.1 jakllsch IN struct _EFI_BLOCK_IO *This,
72 1.1 jakllsch IN UINT32 MediaId,
73 1.1 jakllsch IN EFI_LBA LBA,
74 1.1 jakllsch IN UINTN BufferSize,
75 1.1 jakllsch IN VOID *Buffer
76 1.1 jakllsch );
77 1.1 jakllsch
78 1.1 jakllsch
79 1.1 jakllsch typedef
80 1.1 jakllsch EFI_STATUS
81 1.1 jakllsch (EFIAPI *EFI_BLOCK_FLUSH) (
82 1.1 jakllsch IN struct _EFI_BLOCK_IO *This
83 1.1 jakllsch );
84 1.1 jakllsch
85 1.1 jakllsch
86 1.1 jakllsch
87 1.1 jakllsch typedef struct {
88 1.1 jakllsch UINT32 MediaId;
89 1.1 jakllsch BOOLEAN RemovableMedia;
90 1.1 jakllsch BOOLEAN MediaPresent;
91 1.1 jakllsch
92 1.1 jakllsch BOOLEAN LogicalPartition;
93 1.1 jakllsch BOOLEAN ReadOnly;
94 1.1 jakllsch BOOLEAN WriteCaching;
95 1.1 jakllsch
96 1.1 jakllsch UINT32 BlockSize;
97 1.1 jakllsch UINT32 IoAlign;
98 1.1 jakllsch
99 1.1 jakllsch EFI_LBA LastBlock;
100 1.1 jakllsch
101 1.1 jakllsch /* revision 2 */
102 1.1 jakllsch EFI_LBA LowestAlignedLba;
103 1.1 jakllsch UINT32 LogicalBlocksPerPhysicalBlock;
104 1.1 jakllsch /* revision 3 */
105 1.1 jakllsch UINT32 OptimalTransferLengthGranularity;
106 1.1 jakllsch } EFI_BLOCK_IO_MEDIA;
107 1.1 jakllsch
108 1.1 jakllsch typedef struct _EFI_BLOCK_IO {
109 1.1 jakllsch UINT64 Revision;
110 1.1 jakllsch
111 1.1 jakllsch EFI_BLOCK_IO_MEDIA *Media;
112 1.1 jakllsch
113 1.1 jakllsch EFI_BLOCK_RESET Reset;
114 1.1 jakllsch EFI_BLOCK_READ ReadBlocks;
115 1.1 jakllsch EFI_BLOCK_WRITE WriteBlocks;
116 1.1 jakllsch EFI_BLOCK_FLUSH FlushBlocks;
117 1.1 jakllsch
118 1.1 jakllsch } EFI_BLOCK_IO;
119 1.1 jakllsch
120 1.1 jakllsch
121 1.1 jakllsch
122 1.1 jakllsch //
123 1.1 jakllsch // Disk Block IO protocol
124 1.1 jakllsch //
125 1.1 jakllsch
126 1.1 jakllsch #define DISK_IO_PROTOCOL \
127 1.1 jakllsch { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
128 1.1 jakllsch #define EFI_DISK_IO_INTERFACE_REVISION 0x00010000
129 1.1 jakllsch
130 1.1 jakllsch INTERFACE_DECL(_EFI_DISK_IO);
131 1.1 jakllsch
132 1.1 jakllsch typedef
133 1.1 jakllsch EFI_STATUS
134 1.1 jakllsch (EFIAPI *EFI_DISK_READ) (
135 1.1 jakllsch IN struct _EFI_DISK_IO *This,
136 1.1 jakllsch IN UINT32 MediaId,
137 1.1 jakllsch IN UINT64 Offset,
138 1.1 jakllsch IN UINTN BufferSize,
139 1.1 jakllsch OUT VOID *Buffer
140 1.1 jakllsch );
141 1.1 jakllsch
142 1.1 jakllsch
143 1.1 jakllsch typedef
144 1.1 jakllsch EFI_STATUS
145 1.1 jakllsch (EFIAPI *EFI_DISK_WRITE) (
146 1.1 jakllsch IN struct _EFI_DISK_IO *This,
147 1.1 jakllsch IN UINT32 MediaId,
148 1.1 jakllsch IN UINT64 Offset,
149 1.1 jakllsch IN UINTN BufferSize,
150 1.1 jakllsch IN VOID *Buffer
151 1.1 jakllsch );
152 1.1 jakllsch
153 1.1 jakllsch
154 1.1 jakllsch typedef struct _EFI_DISK_IO {
155 1.1 jakllsch UINT64 Revision;
156 1.1 jakllsch EFI_DISK_READ ReadDisk;
157 1.1 jakllsch EFI_DISK_WRITE WriteDisk;
158 1.1 jakllsch } EFI_DISK_IO;
159 1.1 jakllsch
160 1.1 jakllsch
161 1.1 jakllsch //
162 1.1 jakllsch // Simple file system protocol
163 1.1 jakllsch //
164 1.1 jakllsch
165 1.1 jakllsch #define SIMPLE_FILE_SYSTEM_PROTOCOL \
166 1.1 jakllsch { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
167 1.1 jakllsch
168 1.1 jakllsch INTERFACE_DECL(_EFI_FILE_IO_INTERFACE);
169 1.1 jakllsch INTERFACE_DECL(_EFI_FILE_HANDLE);
170 1.1 jakllsch
171 1.1 jakllsch typedef
172 1.1 jakllsch EFI_STATUS
173 1.1 jakllsch (EFIAPI *EFI_VOLUME_OPEN) (
174 1.1 jakllsch IN struct _EFI_FILE_IO_INTERFACE *This,
175 1.1 jakllsch OUT struct _EFI_FILE_HANDLE **Root
176 1.1 jakllsch );
177 1.1 jakllsch
178 1.1 jakllsch #define EFI_FILE_IO_INTERFACE_REVISION 0x00010000
179 1.1 jakllsch
180 1.1 jakllsch typedef struct _EFI_FILE_IO_INTERFACE {
181 1.1 jakllsch UINT64 Revision;
182 1.1 jakllsch EFI_VOLUME_OPEN OpenVolume;
183 1.1 jakllsch } EFI_FILE_IO_INTERFACE;
184 1.1 jakllsch
185 1.1 jakllsch //
186 1.1 jakllsch //
187 1.1 jakllsch //
188 1.1 jakllsch
189 1.1 jakllsch typedef
190 1.1 jakllsch EFI_STATUS
191 1.1 jakllsch (EFIAPI *EFI_FILE_OPEN) (
192 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
193 1.1 jakllsch OUT struct _EFI_FILE_HANDLE **NewHandle,
194 1.1 jakllsch IN CHAR16 *FileName,
195 1.1 jakllsch IN UINT64 OpenMode,
196 1.1 jakllsch IN UINT64 Attributes
197 1.1 jakllsch );
198 1.1 jakllsch
199 1.1 jakllsch // Open modes
200 1.1 jakllsch #define EFI_FILE_MODE_READ 0x0000000000000001
201 1.1 jakllsch #define EFI_FILE_MODE_WRITE 0x0000000000000002
202 1.1 jakllsch #define EFI_FILE_MODE_CREATE 0x8000000000000000
203 1.1 jakllsch
204 1.1 jakllsch // File attributes
205 1.1 jakllsch #define EFI_FILE_READ_ONLY 0x0000000000000001
206 1.1 jakllsch #define EFI_FILE_HIDDEN 0x0000000000000002
207 1.1 jakllsch #define EFI_FILE_SYSTEM 0x0000000000000004
208 1.1 jakllsch #define EFI_FILE_RESERVIED 0x0000000000000008
209 1.1 jakllsch #define EFI_FILE_DIRECTORY 0x0000000000000010
210 1.1 jakllsch #define EFI_FILE_ARCHIVE 0x0000000000000020
211 1.1 jakllsch #define EFI_FILE_VALID_ATTR 0x0000000000000037
212 1.1 jakllsch
213 1.1 jakllsch typedef
214 1.1 jakllsch EFI_STATUS
215 1.1 jakllsch (EFIAPI *EFI_FILE_CLOSE) (
216 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File
217 1.1 jakllsch );
218 1.1 jakllsch
219 1.1 jakllsch typedef
220 1.1 jakllsch EFI_STATUS
221 1.1 jakllsch (EFIAPI *EFI_FILE_DELETE) (
222 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File
223 1.1 jakllsch );
224 1.1 jakllsch
225 1.1 jakllsch typedef
226 1.1 jakllsch EFI_STATUS
227 1.1 jakllsch (EFIAPI *EFI_FILE_READ) (
228 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
229 1.1 jakllsch IN OUT UINTN *BufferSize,
230 1.1 jakllsch OUT VOID *Buffer
231 1.1 jakllsch );
232 1.1 jakllsch
233 1.1 jakllsch typedef
234 1.1 jakllsch EFI_STATUS
235 1.1 jakllsch (EFIAPI *EFI_FILE_WRITE) (
236 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
237 1.1 jakllsch IN OUT UINTN *BufferSize,
238 1.1 jakllsch IN VOID *Buffer
239 1.1 jakllsch );
240 1.1 jakllsch
241 1.1 jakllsch typedef
242 1.1 jakllsch EFI_STATUS
243 1.1 jakllsch (EFIAPI *EFI_FILE_SET_POSITION) (
244 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
245 1.1 jakllsch IN UINT64 Position
246 1.1 jakllsch );
247 1.1 jakllsch
248 1.1 jakllsch typedef
249 1.1 jakllsch EFI_STATUS
250 1.1 jakllsch (EFIAPI *EFI_FILE_GET_POSITION) (
251 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
252 1.1 jakllsch OUT UINT64 *Position
253 1.1 jakllsch );
254 1.1 jakllsch
255 1.1 jakllsch typedef
256 1.1 jakllsch EFI_STATUS
257 1.1 jakllsch (EFIAPI *EFI_FILE_GET_INFO) (
258 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
259 1.1 jakllsch IN EFI_GUID *InformationType,
260 1.1 jakllsch IN OUT UINTN *BufferSize,
261 1.1 jakllsch OUT VOID *Buffer
262 1.1 jakllsch );
263 1.1 jakllsch
264 1.1 jakllsch typedef
265 1.1 jakllsch EFI_STATUS
266 1.1 jakllsch (EFIAPI *EFI_FILE_SET_INFO) (
267 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File,
268 1.1 jakllsch IN EFI_GUID *InformationType,
269 1.1 jakllsch IN UINTN BufferSize,
270 1.1 jakllsch IN VOID *Buffer
271 1.1 jakllsch );
272 1.1 jakllsch
273 1.1 jakllsch typedef
274 1.1 jakllsch EFI_STATUS
275 1.1 jakllsch (EFIAPI *EFI_FILE_FLUSH) (
276 1.1 jakllsch IN struct _EFI_FILE_HANDLE *File
277 1.1 jakllsch );
278 1.1 jakllsch
279 1.1 jakllsch
280 1.1 jakllsch
281 1.1 jakllsch #define EFI_FILE_HANDLE_REVISION 0x00010000
282 1.1 jakllsch typedef struct _EFI_FILE_HANDLE {
283 1.1 jakllsch UINT64 Revision;
284 1.1 jakllsch EFI_FILE_OPEN Open;
285 1.1 jakllsch EFI_FILE_CLOSE Close;
286 1.1 jakllsch EFI_FILE_DELETE Delete;
287 1.1 jakllsch EFI_FILE_READ Read;
288 1.1 jakllsch EFI_FILE_WRITE Write;
289 1.1 jakllsch EFI_FILE_GET_POSITION GetPosition;
290 1.1 jakllsch EFI_FILE_SET_POSITION SetPosition;
291 1.1 jakllsch EFI_FILE_GET_INFO GetInfo;
292 1.1 jakllsch EFI_FILE_SET_INFO SetInfo;
293 1.1 jakllsch EFI_FILE_FLUSH Flush;
294 1.1 jakllsch } EFI_FILE, *EFI_FILE_HANDLE;
295 1.1 jakllsch
296 1.1 jakllsch
297 1.1 jakllsch //
298 1.1 jakllsch // File information types
299 1.1 jakllsch //
300 1.1 jakllsch
301 1.1 jakllsch #define EFI_FILE_INFO_ID \
302 1.1 jakllsch { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
303 1.1 jakllsch
304 1.1 jakllsch typedef struct {
305 1.1 jakllsch UINT64 Size;
306 1.1 jakllsch UINT64 FileSize;
307 1.1 jakllsch UINT64 PhysicalSize;
308 1.1 jakllsch EFI_TIME CreateTime;
309 1.1 jakllsch EFI_TIME LastAccessTime;
310 1.1 jakllsch EFI_TIME ModificationTime;
311 1.1 jakllsch UINT64 Attribute;
312 1.1 jakllsch CHAR16 FileName[1];
313 1.1 jakllsch } EFI_FILE_INFO;
314 1.1 jakllsch
315 1.1 jakllsch //
316 1.1 jakllsch // The FileName field of the EFI_FILE_INFO data structure is variable length.
317 1.1 jakllsch // Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
318 1.1 jakllsch // be the size of the data structure without the FileName field. The following macro
319 1.1 jakllsch // computes this size correctly no matter how big the FileName array is declared.
320 1.1 jakllsch // This is required to make the EFI_FILE_INFO data structure ANSI compilant.
321 1.1 jakllsch //
322 1.1 jakllsch
323 1.1 jakllsch #define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
324 1.1 jakllsch
325 1.1 jakllsch #define EFI_FILE_SYSTEM_INFO_ID \
326 1.1 jakllsch { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
327 1.1 jakllsch
328 1.1 jakllsch typedef struct {
329 1.1 jakllsch UINT64 Size;
330 1.1 jakllsch BOOLEAN ReadOnly;
331 1.1 jakllsch UINT64 VolumeSize;
332 1.1 jakllsch UINT64 FreeSpace;
333 1.1 jakllsch UINT32 BlockSize;
334 1.1 jakllsch CHAR16 VolumeLabel[1];
335 1.1 jakllsch } EFI_FILE_SYSTEM_INFO;
336 1.1 jakllsch
337 1.1 jakllsch //
338 1.1 jakllsch // The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
339 1.1 jakllsch // Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
340 1.1 jakllsch // to be the size of the data structure without the VolumeLable field. The following macro
341 1.1 jakllsch // computes this size correctly no matter how big the VolumeLable array is declared.
342 1.1 jakllsch // This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
343 1.1 jakllsch //
344 1.1 jakllsch
345 1.1 jakllsch #define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
346 1.1 jakllsch
347 1.1 jakllsch #define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \
348 1.1 jakllsch { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
349 1.1 jakllsch
350 1.1 jakllsch typedef struct {
351 1.1 jakllsch CHAR16 VolumeLabel[1];
352 1.1 jakllsch } EFI_FILE_SYSTEM_VOLUME_LABEL_INFO;
353 1.1 jakllsch
354 1.1 jakllsch #define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
355 1.1 jakllsch
356 1.1 jakllsch //
357 1.1 jakllsch // Load file protocol
358 1.1 jakllsch //
359 1.1 jakllsch
360 1.1 jakllsch
361 1.1 jakllsch #define LOAD_FILE_PROTOCOL \
362 1.1 jakllsch { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
363 1.1 jakllsch
364 1.1 jakllsch INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE);
365 1.1 jakllsch
366 1.1 jakllsch typedef
367 1.1 jakllsch EFI_STATUS
368 1.1 jakllsch (EFIAPI *EFI_LOAD_FILE) (
369 1.1 jakllsch IN struct _EFI_LOAD_FILE_INTERFACE *This,
370 1.1 jakllsch IN EFI_DEVICE_PATH *FilePath,
371 1.1 jakllsch IN BOOLEAN BootPolicy,
372 1.1 jakllsch IN OUT UINTN *BufferSize,
373 1.1 jakllsch IN VOID *Buffer OPTIONAL
374 1.1 jakllsch );
375 1.1 jakllsch
376 1.1 jakllsch typedef struct _EFI_LOAD_FILE_INTERFACE {
377 1.1 jakllsch EFI_LOAD_FILE LoadFile;
378 1.1 jakllsch } EFI_LOAD_FILE_INTERFACE;
379 1.1 jakllsch
380 1.1 jakllsch
381 1.1 jakllsch //
382 1.1 jakllsch // Device IO protocol
383 1.1 jakllsch //
384 1.1 jakllsch
385 1.1 jakllsch #define DEVICE_IO_PROTOCOL \
386 1.1 jakllsch { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
387 1.1 jakllsch
388 1.1 jakllsch INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE);
389 1.1 jakllsch
390 1.1 jakllsch typedef enum {
391 1.1 jakllsch IO_UINT8,
392 1.1 jakllsch IO_UINT16,
393 1.1 jakllsch IO_UINT32,
394 1.1 jakllsch IO_UINT64,
395 1.1 jakllsch //
396 1.1 jakllsch // Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
397 1.1 jakllsch //
398 1.1 jakllsch MMIO_COPY_UINT8,
399 1.1 jakllsch MMIO_COPY_UINT16,
400 1.1 jakllsch MMIO_COPY_UINT32,
401 1.1 jakllsch MMIO_COPY_UINT64
402 1.1 jakllsch } EFI_IO_WIDTH;
403 1.1 jakllsch
404 1.1 jakllsch #define EFI_PCI_ADDRESS(_bus,_dev,_func) \
405 1.1 jakllsch ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
406 1.1 jakllsch
407 1.1 jakllsch
408 1.1 jakllsch typedef
409 1.1 jakllsch EFI_STATUS
410 1.1 jakllsch (EFIAPI *EFI_DEVICE_IO) (
411 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
412 1.1 jakllsch IN EFI_IO_WIDTH Width,
413 1.1 jakllsch IN UINT64 Address,
414 1.1 jakllsch IN UINTN Count,
415 1.1 jakllsch IN OUT VOID *Buffer
416 1.1 jakllsch );
417 1.1 jakllsch
418 1.1 jakllsch typedef struct {
419 1.1 jakllsch EFI_DEVICE_IO Read;
420 1.1 jakllsch EFI_DEVICE_IO Write;
421 1.1 jakllsch } EFI_IO_ACCESS;
422 1.1 jakllsch
423 1.1 jakllsch typedef
424 1.1 jakllsch EFI_STATUS
425 1.1 jakllsch (EFIAPI *EFI_PCI_DEVICE_PATH) (
426 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
427 1.1 jakllsch IN UINT64 Address,
428 1.1 jakllsch IN OUT EFI_DEVICE_PATH **PciDevicePath
429 1.1 jakllsch );
430 1.1 jakllsch
431 1.1 jakllsch typedef enum {
432 1.1 jakllsch EfiBusMasterRead,
433 1.1 jakllsch EfiBusMasterWrite,
434 1.1 jakllsch EfiBusMasterCommonBuffer
435 1.1 jakllsch } EFI_IO_OPERATION_TYPE;
436 1.1 jakllsch
437 1.1 jakllsch typedef
438 1.1 jakllsch EFI_STATUS
439 1.1 jakllsch (EFIAPI *EFI_IO_MAP) (
440 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
441 1.1 jakllsch IN EFI_IO_OPERATION_TYPE Operation,
442 1.1 jakllsch IN EFI_PHYSICAL_ADDRESS *HostAddress,
443 1.1 jakllsch IN OUT UINTN *NumberOfBytes,
444 1.1 jakllsch OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
445 1.1 jakllsch OUT VOID **Mapping
446 1.1 jakllsch );
447 1.1 jakllsch
448 1.1 jakllsch typedef
449 1.1 jakllsch EFI_STATUS
450 1.1 jakllsch (EFIAPI *EFI_IO_UNMAP) (
451 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
452 1.1 jakllsch IN VOID *Mapping
453 1.1 jakllsch );
454 1.1 jakllsch
455 1.1 jakllsch typedef
456 1.1 jakllsch EFI_STATUS
457 1.1 jakllsch (EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
458 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
459 1.1 jakllsch IN EFI_ALLOCATE_TYPE Type,
460 1.1 jakllsch IN EFI_MEMORY_TYPE MemoryType,
461 1.1 jakllsch IN UINTN Pages,
462 1.1 jakllsch IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
463 1.1 jakllsch );
464 1.1 jakllsch
465 1.1 jakllsch typedef
466 1.1 jakllsch EFI_STATUS
467 1.1 jakllsch (EFIAPI *EFI_IO_FLUSH) (
468 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This
469 1.1 jakllsch );
470 1.1 jakllsch
471 1.1 jakllsch typedef
472 1.1 jakllsch EFI_STATUS
473 1.1 jakllsch (EFIAPI *EFI_IO_FREE_BUFFER) (
474 1.1 jakllsch IN struct _EFI_DEVICE_IO_INTERFACE *This,
475 1.1 jakllsch IN UINTN Pages,
476 1.1 jakllsch IN EFI_PHYSICAL_ADDRESS HostAddress
477 1.1 jakllsch );
478 1.1 jakllsch
479 1.1 jakllsch typedef struct _EFI_DEVICE_IO_INTERFACE {
480 1.1 jakllsch EFI_IO_ACCESS Mem;
481 1.1 jakllsch EFI_IO_ACCESS Io;
482 1.1 jakllsch EFI_IO_ACCESS Pci;
483 1.1 jakllsch EFI_IO_MAP Map;
484 1.1 jakllsch EFI_PCI_DEVICE_PATH PciDevicePath;
485 1.1 jakllsch EFI_IO_UNMAP Unmap;
486 1.1 jakllsch EFI_IO_ALLOCATE_BUFFER AllocateBuffer;
487 1.1 jakllsch EFI_IO_FLUSH Flush;
488 1.1 jakllsch EFI_IO_FREE_BUFFER FreeBuffer;
489 1.1 jakllsch } EFI_DEVICE_IO_INTERFACE;
490 1.1 jakllsch
491 1.1 jakllsch
492 1.1 jakllsch //
493 1.1 jakllsch // Unicode Collation protocol
494 1.1 jakllsch //
495 1.1 jakllsch
496 1.1 jakllsch #define UNICODE_COLLATION_PROTOCOL \
497 1.1 jakllsch { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
498 1.1 jakllsch
499 1.1 jakllsch #define UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff)
500 1.1 jakllsch
501 1.1 jakllsch INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE);
502 1.1 jakllsch
503 1.1 jakllsch typedef
504 1.1 jakllsch INTN
505 1.1 jakllsch (EFIAPI *EFI_UNICODE_STRICOLL) (
506 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
507 1.1 jakllsch IN CHAR16 *s1,
508 1.1 jakllsch IN CHAR16 *s2
509 1.1 jakllsch );
510 1.1 jakllsch
511 1.1 jakllsch typedef
512 1.1 jakllsch BOOLEAN
513 1.1 jakllsch (EFIAPI *EFI_UNICODE_METAIMATCH) (
514 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
515 1.1 jakllsch IN CHAR16 *String,
516 1.1 jakllsch IN CHAR16 *Pattern
517 1.1 jakllsch );
518 1.1 jakllsch
519 1.1 jakllsch typedef
520 1.1 jakllsch VOID
521 1.1 jakllsch (EFIAPI *EFI_UNICODE_STRLWR) (
522 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
523 1.1 jakllsch IN OUT CHAR16 *Str
524 1.1 jakllsch );
525 1.1 jakllsch
526 1.1 jakllsch typedef
527 1.1 jakllsch VOID
528 1.1 jakllsch (EFIAPI *EFI_UNICODE_STRUPR) (
529 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
530 1.1 jakllsch IN OUT CHAR16 *Str
531 1.1 jakllsch );
532 1.1 jakllsch
533 1.1 jakllsch typedef
534 1.1 jakllsch VOID
535 1.1 jakllsch (EFIAPI *EFI_UNICODE_FATTOSTR) (
536 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
537 1.1 jakllsch IN UINTN FatSize,
538 1.1 jakllsch IN CHAR8 *Fat,
539 1.1 jakllsch OUT CHAR16 *String
540 1.1 jakllsch );
541 1.1 jakllsch
542 1.1 jakllsch typedef
543 1.1 jakllsch BOOLEAN
544 1.1 jakllsch (EFIAPI *EFI_UNICODE_STRTOFAT) (
545 1.1 jakllsch IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
546 1.1 jakllsch IN CHAR16 *String,
547 1.1 jakllsch IN UINTN FatSize,
548 1.1 jakllsch OUT CHAR8 *Fat
549 1.1 jakllsch );
550 1.1 jakllsch
551 1.1 jakllsch
552 1.1 jakllsch typedef struct _EFI_UNICODE_COLLATION_INTERFACE {
553 1.1 jakllsch
554 1.1 jakllsch // general
555 1.1 jakllsch EFI_UNICODE_STRICOLL StriColl;
556 1.1 jakllsch EFI_UNICODE_METAIMATCH MetaiMatch;
557 1.1 jakllsch EFI_UNICODE_STRLWR StrLwr;
558 1.1 jakllsch EFI_UNICODE_STRUPR StrUpr;
559 1.1 jakllsch
560 1.1 jakllsch // for supporting fat volumes
561 1.1 jakllsch EFI_UNICODE_FATTOSTR FatToStr;
562 1.1 jakllsch EFI_UNICODE_STRTOFAT StrToFat;
563 1.1 jakllsch
564 1.1 jakllsch CHAR8 *SupportedLanguages;
565 1.1 jakllsch } EFI_UNICODE_COLLATION_INTERFACE;
566 1.1 jakllsch
567 1.1 jakllsch /* Graphics output protocol */
568 1.1 jakllsch #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
569 1.1 jakllsch { \
570 1.1 jakllsch 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
571 1.1 jakllsch }
572 1.1 jakllsch
573 1.1 jakllsch typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
574 1.1 jakllsch
575 1.1 jakllsch typedef struct {
576 1.1 jakllsch UINT32 RedMask;
577 1.1 jakllsch UINT32 GreenMask;
578 1.1 jakllsch UINT32 BlueMask;
579 1.1 jakllsch UINT32 ReservedMask;
580 1.1 jakllsch } EFI_PIXEL_BITMASK;
581 1.1 jakllsch
582 1.1 jakllsch typedef enum {
583 1.1 jakllsch PixelRedGreenBlueReserved8BitPerColor,
584 1.1 jakllsch PixelBlueGreenRedReserved8BitPerColor,
585 1.1 jakllsch PixelBitMask,
586 1.1 jakllsch PixelBltOnly,
587 1.1 jakllsch PixelFormatMax
588 1.1 jakllsch } EFI_GRAPHICS_PIXEL_FORMAT;
589 1.1 jakllsch
590 1.1 jakllsch typedef struct {
591 1.1 jakllsch UINT32 Version;
592 1.1 jakllsch UINT32 HorizontalResolution;
593 1.1 jakllsch UINT32 VerticalResolution;
594 1.1 jakllsch EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
595 1.1 jakllsch EFI_PIXEL_BITMASK PixelInformation;
596 1.1 jakllsch UINT32 PixelsPerScanLine;
597 1.1 jakllsch } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
598 1.1 jakllsch
599 1.1 jakllsch /**
600 1.1 jakllsch Return the current video mode information.
601 1.1 jakllsch
602 1.1 jakllsch @param This Protocol instance pointer.
603 1.1 jakllsch @param ModeNumber The mode number to return information on.
604 1.1 jakllsch @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
605 1.1 jakllsch @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
606 1.1 jakllsch
607 1.1 jakllsch @retval EFI_SUCCESS Mode information returned.
608 1.1 jakllsch @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
609 1.1 jakllsch @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
610 1.1 jakllsch @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
611 1.1 jakllsch @retval EFI_INVALID_PARAMETER One of the input args was NULL.
612 1.1 jakllsch
613 1.1 jakllsch **/
614 1.1 jakllsch typedef
615 1.1 jakllsch EFI_STATUS
616 1.1 jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
617 1.1 jakllsch IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
618 1.1 jakllsch IN UINT32 ModeNumber,
619 1.1 jakllsch OUT UINTN *SizeOfInfo,
620 1.1 jakllsch OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
621 1.1 jakllsch )
622 1.1 jakllsch ;
623 1.1 jakllsch
624 1.1 jakllsch /**
625 1.1 jakllsch Return the current video mode information.
626 1.1 jakllsch
627 1.1 jakllsch @param This Protocol instance pointer.
628 1.1 jakllsch @param ModeNumber The mode number to be set.
629 1.1 jakllsch
630 1.1 jakllsch @retval EFI_SUCCESS Graphics mode was changed.
631 1.1 jakllsch @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
632 1.1 jakllsch @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
633 1.1 jakllsch
634 1.1 jakllsch **/
635 1.1 jakllsch typedef
636 1.1 jakllsch EFI_STATUS
637 1.1 jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
638 1.1 jakllsch IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
639 1.1 jakllsch IN UINT32 ModeNumber
640 1.1 jakllsch );
641 1.1 jakllsch
642 1.1 jakllsch typedef struct {
643 1.1 jakllsch UINT8 Blue;
644 1.1 jakllsch UINT8 Green;
645 1.1 jakllsch UINT8 Red;
646 1.1 jakllsch UINT8 Reserved;
647 1.1 jakllsch } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
648 1.1 jakllsch
649 1.1 jakllsch typedef union {
650 1.1 jakllsch EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
651 1.1 jakllsch UINT32 Raw;
652 1.1 jakllsch } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
653 1.1 jakllsch
654 1.1 jakllsch typedef enum {
655 1.1 jakllsch EfiBltVideoFill,
656 1.1 jakllsch EfiBltVideoToBltBuffer,
657 1.1 jakllsch EfiBltBufferToVideo,
658 1.1 jakllsch EfiBltVideoToVideo,
659 1.1 jakllsch EfiGraphicsOutputBltOperationMax
660 1.1 jakllsch } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
661 1.1 jakllsch
662 1.1 jakllsch /**
663 1.1 jakllsch The following table defines actions for BltOperations:
664 1.1 jakllsch
665 1.1 jakllsch <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY)
666 1.1 jakllsch directly to every pixel of the video display rectangle
667 1.1 jakllsch (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
668 1.1 jakllsch Only one pixel will be used from the BltBuffer. Delta is NOT used.
669 1.1 jakllsch
670 1.1 jakllsch <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
671 1.1 jakllsch (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
672 1.1 jakllsch the BltBuffer rectangle (DestinationX, DestinationY )
673 1.1 jakllsch (DestinationX + Width, DestinationY + Height). If DestinationX or
674 1.1 jakllsch DestinationY is not zero then Delta must be set to the length in bytes
675 1.1 jakllsch of a row in the BltBuffer.
676 1.1 jakllsch
677 1.1 jakllsch <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle
678 1.1 jakllsch (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
679 1.1 jakllsch video display rectangle (DestinationX, DestinationY)
680 1.1 jakllsch (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
681 1.1 jakllsch not zero then Delta must be set to the length in bytes of a row in the
682 1.1 jakllsch BltBuffer.
683 1.1 jakllsch
684 1.1 jakllsch <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
685 1.1 jakllsch (SourceX + Width, SourceY + Height) .to the video display rectangle
686 1.1 jakllsch (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
687 1.1 jakllsch The BltBuffer and Delta are not used in this mode.
688 1.1 jakllsch
689 1.1 jakllsch @param This Protocol instance pointer.
690 1.1 jakllsch @param BltBuffer Buffer containing data to blit into video buffer. This
691 1.1 jakllsch buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
692 1.1 jakllsch @param BltOperation Operation to perform on BlitBuffer and video memory
693 1.1 jakllsch @param SourceX X coordinate of source for the BltBuffer.
694 1.1 jakllsch @param SourceY Y coordinate of source for the BltBuffer.
695 1.1 jakllsch @param DestinationX X coordinate of destination for the BltBuffer.
696 1.1 jakllsch @param DestinationY Y coordinate of destination for the BltBuffer.
697 1.1 jakllsch @param Width Width of rectangle in BltBuffer in pixels.
698 1.1 jakllsch @param Height Hight of rectangle in BltBuffer in pixels.
699 1.1 jakllsch @param Delta OPTIONAL
700 1.1 jakllsch
701 1.1 jakllsch @retval EFI_SUCCESS The Blt operation completed.
702 1.1 jakllsch @retval EFI_INVALID_PARAMETER BltOperation is not valid.
703 1.1 jakllsch @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
704 1.1 jakllsch
705 1.1 jakllsch **/
706 1.1 jakllsch typedef
707 1.1 jakllsch EFI_STATUS
708 1.1 jakllsch (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
709 1.1 jakllsch IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
710 1.1 jakllsch IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
711 1.1 jakllsch IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
712 1.1 jakllsch IN UINTN SourceX,
713 1.1 jakllsch IN UINTN SourceY,
714 1.1 jakllsch IN UINTN DestinationX,
715 1.1 jakllsch IN UINTN DestinationY,
716 1.1 jakllsch IN UINTN Width,
717 1.1 jakllsch IN UINTN Height,
718 1.1 jakllsch IN UINTN Delta OPTIONAL
719 1.1 jakllsch );
720 1.1 jakllsch
721 1.1 jakllsch typedef struct {
722 1.1 jakllsch UINT32 MaxMode;
723 1.1 jakllsch UINT32 Mode;
724 1.1 jakllsch EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
725 1.1 jakllsch UINTN SizeOfInfo;
726 1.1 jakllsch EFI_PHYSICAL_ADDRESS FrameBufferBase;
727 1.1 jakllsch UINTN FrameBufferSize;
728 1.1 jakllsch } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
729 1.1 jakllsch
730 1.1 jakllsch struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
731 1.1 jakllsch EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
732 1.1 jakllsch EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
733 1.1 jakllsch EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
734 1.1 jakllsch EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
735 1.1 jakllsch };
736 1.1 jakllsch
737 1.1 jakllsch INTERFACE_DECL(_EFI_SERVICE_BINDING);
738 1.1 jakllsch
739 1.1 jakllsch typedef
740 1.1 jakllsch EFI_STATUS
741 1.1 jakllsch (EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) (
742 1.1 jakllsch IN struct _EFI_SERVICE_BINDING *This,
743 1.1 jakllsch IN EFI_HANDLE *ChildHandle
744 1.1 jakllsch );
745 1.1 jakllsch
746 1.1 jakllsch typedef
747 1.1 jakllsch EFI_STATUS
748 1.1 jakllsch (EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) (
749 1.1 jakllsch IN struct _EFI_SERVICE_BINDING *This,
750 1.1 jakllsch IN EFI_HANDLE ChildHandle
751 1.1 jakllsch );
752 1.1 jakllsch
753 1.1 jakllsch typedef struct _EFI_SERVICE_BINDING {
754 1.1 jakllsch EFI_SERVICE_BINDING_CREATE_CHILD CreateChild;
755 1.1 jakllsch EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild;
756 1.1 jakllsch } EFI_SERVICE_BINDING;
757 1.1 jakllsch
758 1.1 jakllsch #endif
759 1.1 jakllsch
760