GRUB-1.98 changes
[grub2/jjazz.git] / include / grub / efi / api.h
blob36363ae1e99bd5c2f8e3bcb32f8307b9b7389496
1 /* efi.h - declare EFI types and functions */
2 /*
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
6 * GRUB is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GRUB is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef GRUB_EFI_API_HEADER
21 #define GRUB_EFI_API_HEADER 1
23 #include <grub/types.h>
24 #include <grub/symbol.h>
26 /* For consistency and safety, we name the EFI-defined types differently.
27 All names are transformed into lower case, _t appended, and
28 grub_efi_ prepended. */
30 /* Constants. */
31 #define GRUB_EFI_EVT_TIMER 0x80000000
32 #define GRUB_EFI_EVT_RUNTIME 0x40000000
33 #define GRUB_EFI_EVT_RUNTIME_CONTEXT 0x20000000
34 #define GRUB_EFI_EVT_NOTIFY_WAIT 0x00000100
35 #define GRUB_EFI_EVT_NOTIFY_SIGNAL 0x00000200
36 #define GRUB_EFI_EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
37 #define GRUB_EFI_EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
39 #define GRUB_EFI_TPL_APPLICATION 4
40 #define GRUB_EFI_TPL_CALLBACK 8
41 #define GRUB_EFI_TPL_NOTIFY 16
42 #define GRUB_EFI_TPL_HIGH_LEVEL 31
44 #define GRUB_EFI_MEMORY_UC 0x0000000000000001LL
45 #define GRUB_EFI_MEMORY_WC 0x0000000000000002LL
46 #define GRUB_EFI_MEMORY_WT 0x0000000000000004LL
47 #define GRUB_EFI_MEMORY_WB 0x0000000000000008LL
48 #define GRUB_EFI_MEMORY_UCE 0x0000000000000010LL
49 #define GRUB_EFI_MEMORY_WP 0x0000000000001000LL
50 #define GRUB_EFI_MEMORY_RP 0x0000000000002000LL
51 #define GRUB_EFI_MEMORY_XP 0x0000000000004000LL
52 #define GRUB_EFI_MEMORY_RUNTIME 0x8000000000000000LL
54 #define GRUB_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001
55 #define GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002
56 #define GRUB_EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004
57 #define GRUB_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
58 #define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010
59 #define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE 0x00000020
61 #define GRUB_EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
62 #define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
63 #define GRUB_EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
65 #define GRUB_EFI_TIME_ADJUST_DAYLIGHT 0x01
66 #define GRUB_EFI_TIME_IN_DAYLIGHT 0x02
68 #define GRUB_EFI_UNSPECIFIED_TIMEZONE 0x07FF
70 #define GRUB_EFI_OPTIONAL_PTR 0x00000001
72 #define GRUB_EFI_LOADED_IMAGE_GUID \
73 { 0x5b1b31a1, 0x9562, 0x11d2, \
74 { 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
77 #define GRUB_EFI_DISK_IO_GUID \
78 { 0xce345171, 0xba0b, 0x11d2, \
79 { 0x8e, 0x4f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
82 #define GRUB_EFI_BLOCK_IO_GUID \
83 { 0x964e5b21, 0x6459, 0x11d2, \
84 { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
87 #define GRUB_EFI_DEVICE_PATH_GUID \
88 { 0x09576e91, 0x6d3f, 0x11d2, \
89 { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
92 #define GRUB_EFI_MPS_TABLE_GUID \
93 { 0xeb9d2d2f, 0x2d88, 0x11d3, \
94 { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
97 #define GRUB_EFI_ACPI_TABLE_GUID \
98 { 0xeb9d2d30, 0x2d88, 0x11d3, \
99 { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
102 #define GRUB_EFI_ACPI_20_TABLE_GUID \
103 { 0x8868e871, 0xe4f1, 0x11d3, \
104 { 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } \
107 #define GRUB_EFI_SMBIOS_TABLE_GUID \
108 { 0xeb9d2d31, 0x2d88, 0x11d3, \
109 { 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
112 /* Enumerations. */
113 enum grub_efi_timer_delay
115 GRUB_EFI_TIMER_CANCEL,
116 GRUB_EFI_TIMER_PERIODIC,
117 GRUB_EFI_TIMER_RELATIVE
119 typedef enum grub_efi_timer_delay grub_efi_timer_delay_t;
121 enum grub_efi_allocate_type
123 GRUB_EFI_ALLOCATE_ANY_PAGES,
124 GRUB_EFI_ALLOCATE_MAX_ADDRESS,
125 GRUB_EFI_ALLOCATE_ADDRESS,
126 GRUB_EFI_MAX_ALLOCATION_TYPE
128 typedef enum grub_efi_allocate_type grub_efi_allocate_type_t;
130 enum grub_efi_memory_type
132 GRUB_EFI_RESERVED_MEMORY_TYPE,
133 GRUB_EFI_LOADER_CODE,
134 GRUB_EFI_LOADER_DATA,
135 GRUB_EFI_BOOT_SERVICES_CODE,
136 GRUB_EFI_BOOT_SERVICES_DATA,
137 GRUB_EFI_RUNTIME_SERVICES_CODE,
138 GRUB_EFI_RUNTIME_SERVICES_DATA,
139 GRUB_EFI_CONVENTIONAL_MEMORY,
140 GRUB_EFI_UNUSABLE_MEMORY,
141 GRUB_EFI_ACPI_RECLAIM_MEMORY,
142 GRUB_EFI_ACPI_MEMORY_NVS,
143 GRUB_EFI_MEMORY_MAPPED_IO,
144 GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
145 GRUB_EFI_PAL_CODE,
146 GRUB_EFI_MAX_MEMORY_TYPE
148 typedef enum grub_efi_memory_type grub_efi_memory_type_t;
150 enum grub_efi_interface_type
152 GRUB_EFI_NATIVE_INTERFACE
154 typedef enum grub_efi_interface_type grub_efi_interface_type_t;
156 enum grub_efi_locate_search_type
158 GRUB_EFI_ALL_HANDLES,
159 GRUB_EFI_BY_REGISTER_NOTIFY,
160 GRUB_EFI_BY_PROTOCOL
162 typedef enum grub_efi_locate_search_type grub_efi_locate_search_type_t;
164 enum grub_efi_reset_type
166 GRUB_EFI_RESET_COLD,
167 GRUB_EFI_RESET_WARM,
168 GRUB_EFI_RESET_SHUTDOWN
170 typedef enum grub_efi_reset_type grub_efi_reset_type_t;
172 /* Types. */
173 typedef char grub_efi_boolean_t;
174 typedef long grub_efi_intn_t;
175 typedef unsigned long grub_efi_uintn_t;
176 typedef grub_int8_t grub_efi_int8_t;
177 typedef grub_uint8_t grub_efi_uint8_t;
178 typedef grub_int16_t grub_efi_int16_t;
179 typedef grub_uint16_t grub_efi_uint16_t;
180 typedef grub_int32_t grub_efi_int32_t;
181 typedef grub_uint32_t grub_efi_uint32_t;
182 typedef grub_int64_t grub_efi_int64_t;
183 typedef grub_uint64_t grub_efi_uint64_t;
184 typedef grub_uint8_t grub_efi_char8_t;
185 typedef grub_uint16_t grub_efi_char16_t;
187 typedef grub_efi_intn_t grub_efi_status_t;
189 #define GRUB_EFI_ERROR_CODE(value) \
190 ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value))
192 #define GRUB_EFI_WARNING_CODE(value) (value)
194 #define GRUB_EFI_SUCCESS 0
196 #define GRUB_EFI_LOAD_ERROR GRUB_EFI_ERROR_CODE (1)
197 #define GRUB_EFI_INVALID_PARAMETER GRUB_EFI_ERROR_CODE (2)
198 #define GRUB_EFI_UNSUPPORTED GRUB_EFI_ERROR_CODE (3)
199 #define GRUB_EFI_BAD_BUFFER_SIZE GRUB_EFI_ERROR_CODE (4)
200 #define GRUB_EFI_BUFFER_TOO_SMALL GRUB_EFI_ERROR_CODE (5)
201 #define GRUB_EFI_NOT_READY GRUB_EFI_ERROR_CODE (6)
202 #define GRUB_EFI_DEVICE_ERROR GRUB_EFI_ERROR_CODE (7)
203 #define GRUB_EFI_WRITE_PROTECTED GRUB_EFI_ERROR_CODE (8)
204 #define GRUB_EFI_OUT_OF_RESOURCES GRUB_EFI_ERROR_CODE (9)
205 #define GRUB_EFI_VOLUME_CORRUPTED GRUB_EFI_ERROR_CODE (10)
206 #define GRUB_EFI_VOLUME_FULL GRUB_EFI_ERROR_CODE (11)
207 #define GRUB_EFI_NO_MEDIA GRUB_EFI_ERROR_CODE (12)
208 #define GRUB_EFI_MEDIA_CHANGED GRUB_EFI_ERROR_CODE (13)
209 #define GRUB_EFI_NOT_FOUND GRUB_EFI_ERROR_CODE (14)
210 #define GRUB_EFI_ACCESS_DENIED GRUB_EFI_ERROR_CODE (15)
211 #define GRUB_EFI_NO_RESPONSE GRUB_EFI_ERROR_CODE (16)
212 #define GRUB_EFI_NO_MAPPING GRUB_EFI_ERROR_CODE (17)
213 #define GRUB_EFI_TIMEOUT GRUB_EFI_ERROR_CODE (18)
214 #define GRUB_EFI_NOT_STARTED GRUB_EFI_ERROR_CODE (19)
215 #define GRUB_EFI_ALREADY_STARTED GRUB_EFI_ERROR_CODE (20)
216 #define GRUB_EFI_ABORTED GRUB_EFI_ERROR_CODE (21)
217 #define GRUB_EFI_ICMP_ERROR GRUB_EFI_ERROR_CODE (22)
218 #define GRUB_EFI_TFTP_ERROR GRUB_EFI_ERROR_CODE (23)
219 #define GRUB_EFI_PROTOCOL_ERROR GRUB_EFI_ERROR_CODE (24)
220 #define GRUB_EFI_INCOMPATIBLE_VERSION GRUB_EFI_ERROR_CODE (25)
221 #define GRUB_EFI_SECURITY_VIOLATION GRUB_EFI_ERROR_CODE (26)
222 #define GRUB_EFI_CRC_ERROR GRUB_EFI_ERROR_CODE (27)
224 #define GRUB_EFI_WARN_UNKNOWN_GLYPH GRUB_EFI_WARNING_CODE (1)
225 #define GRUB_EFI_WARN_DELETE_FAILURE GRUB_EFI_WARNING_CODE (2)
226 #define GRUB_EFI_WARN_WRITE_FAILURE GRUB_EFI_WARNING_CODE (3)
227 #define GRUB_EFI_WARN_BUFFER_TOO_SMALL GRUB_EFI_WARNING_CODE (4)
229 typedef void *grub_efi_handle_t;
230 typedef void *grub_efi_event_t;
231 typedef grub_efi_uint64_t grub_efi_lba_t;
232 typedef grub_efi_uintn_t grub_efi_tpl_t;
233 typedef grub_uint8_t grub_efi_mac_address_t[32];
234 typedef grub_uint8_t grub_efi_ipv4_address_t[4];
235 typedef grub_uint16_t grub_efi_ipv6_address_t[8];
236 typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned(4)));
237 typedef grub_efi_uint64_t grub_efi_physical_address_t;
238 typedef grub_efi_uint64_t grub_efi_virtual_address_t;
240 struct grub_efi_guid
242 grub_uint32_t data1;
243 grub_uint16_t data2;
244 grub_uint16_t data3;
245 grub_uint8_t data4[8];
246 } __attribute__ ((aligned(8)));
247 typedef struct grub_efi_guid grub_efi_guid_t;
249 /* XXX although the spec does not specify the padding, this actually
250 must have the padding! */
251 struct grub_efi_memory_descriptor
253 grub_efi_uint32_t type;
254 grub_efi_uint32_t padding;
255 grub_efi_physical_address_t physical_start;
256 grub_efi_virtual_address_t virtual_start;
257 grub_efi_uint64_t num_pages;
258 grub_efi_uint64_t attribute;
260 typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t;
262 /* Device Path definitions. */
263 struct grub_efi_device_path
265 grub_efi_uint8_t type;
266 grub_efi_uint8_t subtype;
267 grub_efi_uint8_t length[2];
269 typedef struct grub_efi_device_path grub_efi_device_path_t;
270 /* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it.
271 It seems to be identical to EFI_DEVICE_PATH. */
272 typedef struct grub_efi_device_path grub_efi_device_path_protocol_t;
274 #define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f)
275 #define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype)
276 #define GRUB_EFI_DEVICE_PATH_LENGTH(dp) \
277 ((dp)->length[0] | ((grub_efi_uint16_t) ((dp)->length[1]) << 8))
279 /* The End of Device Path nodes. */
280 #define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f)
282 #define GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
283 #define GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE 0x01
285 #define GRUB_EFI_END_ENTIRE_DEVICE_PATH(dp) \
286 (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \
287 && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \
288 == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE))
290 #define GRUB_EFI_NEXT_DEVICE_PATH(dp) \
291 ((grub_efi_device_path_t *) ((char *) (dp) \
292 + GRUB_EFI_DEVICE_PATH_LENGTH (dp)))
294 /* Hardware Device Path. */
295 #define GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE 1
297 #define GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE 1
299 struct grub_efi_pci_device_path
301 grub_efi_device_path_t header;
302 grub_efi_uint8_t function;
303 grub_efi_uint8_t device;
305 typedef struct grub_efi_pci_device_path grub_efi_pci_device_path_t;
307 #define GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE 2
309 struct grub_efi_pccard_device_path
311 grub_efi_device_path_t header;
312 grub_efi_uint8_t function;
314 typedef struct grub_efi_pccard_device_path grub_efi_pccard_device_path_t;
316 #define GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE 3
318 struct grub_efi_memory_mapped_device_path
320 grub_efi_device_path_t header;
321 grub_efi_memory_type_t memory_type;
322 grub_efi_physical_address_t start_address;
323 grub_efi_physical_address_t end_address;
325 typedef struct grub_efi_memory_mapped_device_path grub_efi_memory_mapped_device_path_t;
327 #define GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE 4
329 struct grub_efi_vendor_device_path
331 grub_efi_device_path_t header;
332 grub_efi_guid_t vendor_guid;
333 grub_efi_uint8_t vendor_defined_data[0];
335 typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t;
337 #define GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE 5
339 struct grub_efi_controller_device_path
341 grub_efi_device_path_t header;
342 grub_efi_uint32_t controller_number;
344 typedef struct grub_efi_controller_device_path grub_efi_controller_device_path_t;
346 /* ACPI Device Path. */
347 #define GRUB_EFI_ACPI_DEVICE_PATH_TYPE 2
349 #define GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE 1
351 struct grub_efi_acpi_device_path
353 grub_efi_device_path_t header;
354 grub_efi_uint32_t hid;
355 grub_efi_uint32_t uid;
357 typedef struct grub_efi_acpi_device_path grub_efi_acpi_device_path_t;
359 #define GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE 2
361 struct grub_efi_expanded_acpi_device_path
363 grub_efi_device_path_t header;
364 grub_efi_uint32_t hid;
365 grub_efi_uint32_t uid;
366 grub_efi_uint32_t cid;
367 char hidstr[1];
369 typedef struct grub_efi_expanded_acpi_device_path grub_efi_expanded_acpi_device_path_t;
371 #define GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \
372 (((grub_efi_expanded_acpi_device_path_t *) dp)->hidstr)
373 #define GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \
374 (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \
375 + grub_strlen (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp)) + 1)
376 #define GRUB_EFI_EXPANDED_ACPI_CIDSTR(dp) \
377 (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \
378 + grub_strlen (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp)) + 1)
380 /* Messaging Device Path. */
381 #define GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE 3
383 #define GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE 1
385 struct grub_efi_atapi_device_path
387 grub_efi_device_path_t header;
388 grub_efi_uint8_t primary_secondary;
389 grub_efi_uint8_t slave_master;
390 grub_efi_uint16_t lun;
392 typedef struct grub_efi_atapi_device_path grub_efi_atapi_device_path_t;
394 #define GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE 2
396 struct grub_efi_scsi_device_path
398 grub_efi_device_path_t header;
399 grub_efi_uint16_t pun;
400 grub_efi_uint16_t lun;
402 typedef struct grub_efi_scsi_device_path grub_efi_scsi_device_path_t;
404 #define GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE 3
406 struct grub_efi_fibre_channel_device_path
408 grub_efi_device_path_t header;
409 grub_efi_uint32_t reserved;
410 grub_efi_uint64_t wwn;
411 grub_efi_uint64_t lun;
413 typedef struct grub_efi_fibre_channel_device_path grub_efi_fibre_channel_device_path_t;
415 #define GRUB_EFI_1394_DEVICE_PATH_SUBTYPE 4
417 struct grub_efi_1394_device_path
419 grub_efi_device_path_t header;
420 grub_efi_uint32_t reserved;
421 grub_efi_uint64_t guid;
423 typedef struct grub_efi_1394_device_path grub_efi_1394_device_path_t;
425 #define GRUB_EFI_USB_DEVICE_PATH_SUBTYPE 5
427 struct grub_efi_usb_device_path
429 grub_efi_device_path_t header;
430 grub_efi_uint8_t parent_port_number;
431 grub_efi_uint8_t interface;
433 typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t;
435 #define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE 15
437 struct grub_efi_usb_class_device_path
439 grub_efi_device_path_t header;
440 grub_efi_uint16_t vendor_id;
441 grub_efi_uint16_t product_id;
442 grub_efi_uint8_t device_class;
443 grub_efi_uint8_t device_subclass;
444 grub_efi_uint8_t device_protocol;
446 typedef struct grub_efi_usb_class_device_path grub_efi_usb_class_device_path_t;
448 #define GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE 6
450 struct grub_efi_i2o_device_path
452 grub_efi_device_path_t header;
453 grub_efi_uint32_t tid;
455 typedef struct grub_efi_i2o_device_path grub_efi_i2o_device_path_t;
457 #define GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE 11
459 struct grub_efi_mac_address_device_path
461 grub_efi_device_path_t header;
462 grub_efi_mac_address_t mac_address;
463 grub_efi_uint8_t if_type;
465 typedef struct grub_efi_mac_address_device_path grub_efi_mac_address_device_path_t;
467 #define GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE 12
469 struct grub_efi_ipv4_device_path
471 grub_efi_device_path_t header;
472 grub_efi_ipv4_address_t local_ip_address;
473 grub_efi_ipv4_address_t remote_ip_address;
474 grub_efi_uint16_t local_port;
475 grub_efi_uint16_t remote_port;
476 grub_efi_uint16_t protocol;
477 grub_efi_uint8_t static_ip_address;
479 typedef struct grub_efi_ipv4_device_path grub_efi_ipv4_device_path_t;
481 #define GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE 13
483 struct grub_efi_ipv6_device_path
485 grub_efi_device_path_t header;
486 grub_efi_ipv6_address_t local_ip_address;
487 grub_efi_ipv6_address_t remote_ip_address;
488 grub_efi_uint16_t local_port;
489 grub_efi_uint16_t remote_port;
490 grub_efi_uint16_t protocol;
491 grub_efi_uint8_t static_ip_address;
493 typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t;
495 #define GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE 9
497 struct grub_efi_infiniband_device_path
499 grub_efi_device_path_t header;
500 grub_efi_uint32_t resource_flags;
501 grub_efi_uint8_t port_gid[16];
502 grub_efi_uint64_t remote_id;
503 grub_efi_uint64_t target_port_id;
504 grub_efi_uint64_t device_id;
506 typedef struct grub_efi_infiniband_device_path grub_efi_infiniband_device_path_t;
508 #define GRUB_EFI_UART_DEVICE_PATH_SUBTYPE 14
510 struct grub_efi_uart_device_path
512 grub_efi_device_path_t header;
513 grub_efi_uint32_t reserved;
514 grub_efi_uint64_t baud_rate;
515 grub_efi_uint8_t data_bits;
516 grub_efi_uint8_t parity;
517 grub_efi_uint8_t stop_bits;
519 typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t;
521 #define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10
523 struct grub_efi_vendor_messaging_device_path
525 grub_efi_device_path_t header;
526 grub_efi_guid_t vendor_guid;
527 grub_efi_uint8_t vendor_defined_data[0];
529 typedef struct grub_efi_vendor_messaging_device_path grub_efi_vendor_messaging_device_path_t;
531 /* Media Device Path. */
532 #define GRUB_EFI_MEDIA_DEVICE_PATH_TYPE 4
534 #define GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE 1
536 struct grub_efi_hard_drive_device_path
538 grub_efi_device_path_t header;
539 grub_efi_uint32_t partition_number;
540 grub_efi_lba_t partition_start;
541 grub_efi_lba_t partition_size;
542 grub_efi_uint8_t partition_signature[8];
543 grub_efi_uint8_t mbr_type;
544 grub_efi_uint8_t signature_type;
546 typedef struct grub_efi_hard_drive_device_path grub_efi_hard_drive_device_path_t;
548 #define GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE 2
550 struct grub_efi_cdrom_device_path
552 grub_efi_device_path_t header;
553 grub_efi_uint32_t boot_entry;
554 grub_efi_lba_t partition_start;
555 grub_efi_lba_t partition_size;
557 typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t;
559 #define GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE 3
561 struct grub_efi_vendor_media_device_path
563 grub_efi_device_path_t header;
564 grub_efi_guid_t vendor_guid;
565 grub_efi_uint8_t vendor_defined_data[0];
567 typedef struct grub_efi_vendor_media_device_path grub_efi_vendor_media_device_path_t;
569 #define GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE 4
571 struct grub_efi_file_path_device_path
573 grub_efi_device_path_t header;
574 grub_efi_char16_t path_name[0];
576 typedef struct grub_efi_file_path_device_path grub_efi_file_path_device_path_t;
578 #define GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE 5
580 struct grub_efi_protocol_device_path
582 grub_efi_device_path_t header;
583 grub_efi_guid_t guid;
585 typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t;
587 #define GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE 6
589 struct grub_efi_piwg_device_path
591 grub_efi_device_path_t header;
592 grub_efi_guid_t guid __attribute__ ((packed));
594 typedef struct grub_efi_piwg_device_path grub_efi_piwg_device_path_t;
597 /* BIOS Boot Specification Device Path. */
598 #define GRUB_EFI_BIOS_DEVICE_PATH_TYPE 5
600 #define GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE 1
602 struct grub_efi_bios_device_path
604 grub_efi_device_path_t header;
605 grub_efi_uint16_t device_type;
606 grub_efi_uint16_t status_flags;
607 char description[0];
609 typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t;
611 struct grub_efi_open_protocol_information_entry
613 grub_efi_handle_t agent_handle;
614 grub_efi_handle_t controller_handle;
615 grub_efi_uint32_t attributes;
616 grub_efi_uint32_t open_count;
618 typedef struct grub_efi_open_protocol_information_entry grub_efi_open_protocol_information_entry_t;
620 struct grub_efi_time
622 grub_efi_uint16_t year;
623 grub_efi_uint8_t month;
624 grub_efi_uint8_t day;
625 grub_efi_uint8_t hour;
626 grub_efi_uint8_t minute;
627 grub_efi_uint8_t second;
628 grub_efi_uint8_t pad1;
629 grub_efi_uint32_t nanosecond;
630 grub_efi_int16_t time_zone;
631 grub_efi_uint8_t daylight;
632 grub_efi_uint8_t pad2;
633 } __attribute__ ((packed));
634 typedef struct grub_efi_time grub_efi_time_t;
636 struct grub_efi_time_capabilities
638 grub_efi_uint32_t resolution;
639 grub_efi_uint32_t accuracy;
640 grub_efi_boolean_t sets_to_zero;
642 typedef struct grub_efi_time_capabilities grub_efi_time_capabilities_t;
644 struct grub_efi_input_key
646 grub_efi_uint16_t scan_code;
647 grub_efi_char16_t unicode_char;
649 typedef struct grub_efi_input_key grub_efi_input_key_t;
651 struct grub_efi_simple_text_output_mode
653 grub_efi_int32_t max_mode;
654 grub_efi_int32_t mode;
655 grub_efi_int32_t attribute;
656 grub_efi_int32_t cursor_column;
657 grub_efi_int32_t cursor_row;
658 grub_efi_boolean_t cursor_visible;
660 typedef struct grub_efi_simple_text_output_mode grub_efi_simple_text_output_mode_t;
662 /* Tables. */
663 struct grub_efi_table_header
665 grub_efi_uint64_t signature;
666 grub_efi_uint32_t revision;
667 grub_efi_uint32_t header_size;
668 grub_efi_uint32_t crc32;
669 grub_efi_uint32_t reserved;
671 typedef struct grub_efi_table_header grub_efi_table_header_t;
673 struct grub_efi_boot_services
675 grub_efi_table_header_t hdr;
677 grub_efi_tpl_t
678 (*raise_tpl) (grub_efi_tpl_t new_tpl);
680 void
681 (*restore_tpl) (grub_efi_tpl_t old_tpl);
683 grub_efi_status_t
684 (*allocate_pages) (grub_efi_allocate_type_t type,
685 grub_efi_memory_type_t memory_type,
686 grub_efi_uintn_t pages,
687 grub_efi_physical_address_t *memory);
689 grub_efi_status_t
690 (*free_pages) (grub_efi_physical_address_t memory,
691 grub_efi_uintn_t pages);
693 grub_efi_status_t
694 (*get_memory_map) (grub_efi_uintn_t *memory_map_size,
695 grub_efi_memory_descriptor_t *memory_map,
696 grub_efi_uintn_t *map_key,
697 grub_efi_uintn_t *descriptor_size,
698 grub_efi_uint32_t *descriptor_version);
700 grub_efi_status_t
701 (*allocate_pool) (grub_efi_memory_type_t pool_type,
702 grub_efi_uintn_t size,
703 void **buffer);
705 grub_efi_status_t
706 (*free_pool) (void *buffer);
708 grub_efi_status_t
709 (*create_event) (grub_efi_uint32_t type,
710 grub_efi_tpl_t notify_tpl,
711 void (*notify_function) (grub_efi_event_t event,
712 void *context),
713 void *notify_context,
714 grub_efi_event_t *event);
716 grub_efi_status_t
717 (*set_timer) (grub_efi_event_t event,
718 grub_efi_timer_delay_t type,
719 grub_efi_uint64_t trigger_time);
721 grub_efi_status_t
722 (*wait_for_event) (grub_efi_uintn_t num_events,
723 grub_efi_event_t *event,
724 grub_efi_uintn_t *index);
726 grub_efi_status_t
727 (*signal_event) (grub_efi_event_t event);
729 grub_efi_status_t
730 (*close_event) (grub_efi_event_t event);
732 grub_efi_status_t
733 (*check_event) (grub_efi_event_t event);
735 grub_efi_status_t
736 (*install_protocol_interface) (grub_efi_handle_t *handle,
737 grub_efi_guid_t *protocol,
738 grub_efi_interface_type_t interface_type,
739 void *interface);
741 grub_efi_status_t
742 (*reinstall_protocol_interface) (grub_efi_handle_t handle,
743 grub_efi_guid_t *protocol,
744 void *old_interface,
745 void *new_interface);
747 grub_efi_status_t
748 (*uninstall_protocol_interface) (grub_efi_handle_t handle,
749 grub_efi_guid_t *protocol,
750 void *interface);
752 grub_efi_status_t
753 (*handle_protocol) (grub_efi_handle_t handle,
754 grub_efi_guid_t *protocol,
755 void **interface);
757 void *reserved;
759 grub_efi_status_t
760 (*register_protocol_notify) (grub_efi_guid_t *protocol,
761 grub_efi_event_t event,
762 void **registration);
764 grub_efi_status_t
765 (*locate_handle) (grub_efi_locate_search_type_t search_type,
766 grub_efi_guid_t *protocol,
767 void *search_key,
768 grub_efi_uintn_t *buffer_size,
769 grub_efi_handle_t *buffer);
771 grub_efi_status_t
772 (*locate_device_path) (grub_efi_guid_t *protocol,
773 grub_efi_device_path_t **device_path,
774 grub_efi_handle_t *device);
776 grub_efi_status_t
777 (*install_configuration_table) (grub_efi_guid_t *guid, void *table);
779 grub_efi_status_t
780 (*load_image) (grub_efi_boolean_t boot_policy,
781 grub_efi_handle_t parent_image_handle,
782 grub_efi_device_path_t *file_path,
783 void *source_buffer,
784 grub_efi_uintn_t source_size,
785 grub_efi_handle_t *image_handle);
787 grub_efi_status_t
788 (*start_image) (grub_efi_handle_t image_handle,
789 grub_efi_uintn_t *exit_data_size,
790 grub_efi_char16_t **exit_data);
792 grub_efi_status_t
793 (*exit) (grub_efi_handle_t image_handle,
794 grub_efi_status_t exit_status,
795 grub_efi_uintn_t exit_data_size,
796 grub_efi_char16_t *exit_data) __attribute__((noreturn));
798 grub_efi_status_t
799 (*unload_image) (grub_efi_handle_t image_handle);
801 grub_efi_status_t
802 (*exit_boot_services) (grub_efi_handle_t image_handle,
803 grub_efi_uintn_t map_key);
805 grub_efi_status_t
806 (*get_next_monotonic_count) (grub_efi_uint64_t *count);
808 grub_efi_status_t
809 (*stall) (grub_efi_uintn_t microseconds);
811 grub_efi_status_t
812 (*set_watchdog_timer) (grub_efi_uintn_t timeout,
813 grub_efi_uint64_t watchdog_code,
814 grub_efi_uintn_t data_size,
815 grub_efi_char16_t *watchdog_data);
817 grub_efi_status_t
818 (*connect_controller) (grub_efi_handle_t controller_handle,
819 grub_efi_handle_t *driver_image_handle,
820 grub_efi_device_path_protocol_t *remaining_device_path,
821 grub_efi_boolean_t recursive);
823 grub_efi_status_t
824 (*disconnect_controller) (grub_efi_handle_t controller_handle,
825 grub_efi_handle_t driver_image_handle,
826 grub_efi_handle_t child_handle);
828 grub_efi_status_t
829 (*open_protocol) (grub_efi_handle_t handle,
830 grub_efi_guid_t *protocol,
831 void **interface,
832 grub_efi_handle_t agent_handle,
833 grub_efi_handle_t controller_handle,
834 grub_efi_uint32_t attributes);
836 grub_efi_status_t
837 (*close_protocol) (grub_efi_handle_t handle,
838 grub_efi_guid_t *protocol,
839 grub_efi_handle_t agent_handle,
840 grub_efi_handle_t controller_handle);
842 grub_efi_status_t
843 (*open_protocol_information) (grub_efi_handle_t handle,
844 grub_efi_guid_t *protocol,
845 grub_efi_open_protocol_information_entry_t **entry_buffer,
846 grub_efi_uintn_t *entry_count);
848 grub_efi_status_t
849 (*protocols_per_handle) (grub_efi_handle_t handle,
850 grub_efi_guid_t ***protocol_buffer,
851 grub_efi_uintn_t *protocol_buffer_count);
853 grub_efi_status_t
854 (*locate_handle_buffer) (grub_efi_locate_search_type_t search_type,
855 grub_efi_guid_t *protocol,
856 void *search_key,
857 grub_efi_uintn_t *no_handles,
858 grub_efi_handle_t **buffer);
860 grub_efi_status_t
861 (*locate_protocol) (grub_efi_guid_t *protocol,
862 void *registration,
863 void **interface);
865 grub_efi_status_t
866 (*install_multiple_protocol_interfaces) (grub_efi_handle_t *handle, ...);
868 grub_efi_status_t
869 (*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...);
871 grub_efi_status_t
872 (*calculate_crc32) (void *data,
873 grub_efi_uintn_t data_size,
874 grub_efi_uint32_t *crc32);
876 void
877 (*copy_mem) (void *destination, void *source, grub_efi_uintn_t length);
879 void
880 (*set_mem) (void *buffer, grub_efi_uintn_t size, grub_efi_uint8_t value);
882 typedef struct grub_efi_boot_services grub_efi_boot_services_t;
884 struct grub_efi_runtime_services
886 grub_efi_table_header_t hdr;
888 grub_efi_status_t
889 (*get_time) (grub_efi_time_t *time,
890 grub_efi_time_capabilities_t *capabilities);
892 grub_efi_status_t
893 (*set_time) (grub_efi_time_t *time);
895 grub_efi_status_t
896 (*get_wakeup_time) (grub_efi_boolean_t *enabled,
897 grub_efi_boolean_t *pending,
898 grub_efi_time_t *time);
900 grub_efi_status_t
901 (*set_wakeup_time) (grub_efi_boolean_t enabled,
902 grub_efi_time_t *time);
904 grub_efi_status_t
905 (*set_virtual_address_map) (grub_efi_uintn_t memory_map_size,
906 grub_efi_uintn_t descriptor_size,
907 grub_efi_uint32_t descriptor_version,
908 grub_efi_memory_descriptor_t *virtual_map);
910 grub_efi_status_t
911 (*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address);
913 grub_efi_status_t
914 (*get_variable) (grub_efi_char16_t *variable_name,
915 grub_efi_guid_t *vendor_guid,
916 grub_efi_uint32_t *attributes,
917 grub_efi_uintn_t *data_size,
918 void *data);
920 grub_efi_status_t
921 (*get_next_variable_name) (grub_efi_uintn_t *variable_name_size,
922 grub_efi_char16_t *variable_name,
923 grub_efi_guid_t *vendor_guid);
925 grub_efi_status_t
926 (*set_variable) (grub_efi_char16_t *variable_name,
927 grub_efi_guid_t *vendor_guid,
928 grub_efi_uint32_t attributes,
929 grub_efi_uintn_t data_size,
930 void *data);
932 grub_efi_status_t
933 (*get_next_high_monotonic_count) (grub_efi_uint32_t *high_count);
935 void
936 (*reset_system) (grub_efi_reset_type_t reset_type,
937 grub_efi_status_t reset_status,
938 grub_efi_uintn_t data_size,
939 grub_efi_char16_t *reset_data);
941 typedef struct grub_efi_runtime_services grub_efi_runtime_services_t;
943 struct grub_efi_configuration_table
945 grub_efi_guid_t vendor_guid;
946 void *vendor_table;
947 } __attribute__ ((packed));
948 typedef struct grub_efi_configuration_table grub_efi_configuration_table_t;
950 #define GRUB_EFIEMU_SYSTEM_TABLE_SIGNATURE 0x5453595320494249LL
951 #define GRUB_EFIEMU_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552LL
953 struct grub_efi_simple_input_interface
955 grub_efi_status_t
956 (*reset) (struct grub_efi_simple_input_interface *this,
957 grub_efi_boolean_t extended_verification);
959 grub_efi_status_t
960 (*read_key_stroke) (struct grub_efi_simple_input_interface *this,
961 grub_efi_input_key_t *key);
963 grub_efi_event_t wait_for_key;
965 typedef struct grub_efi_simple_input_interface grub_efi_simple_input_interface_t;
967 struct grub_efi_simple_text_output_interface
969 grub_efi_status_t
970 (*reset) (struct grub_efi_simple_text_output_interface *this,
971 grub_efi_boolean_t extended_verification);
973 grub_efi_status_t
974 (*output_string) (struct grub_efi_simple_text_output_interface *this,
975 grub_efi_char16_t *string);
977 grub_efi_status_t
978 (*test_string) (struct grub_efi_simple_text_output_interface *this,
979 grub_efi_char16_t *string);
981 grub_efi_status_t
982 (*query_mode) (struct grub_efi_simple_text_output_interface *this,
983 grub_efi_uintn_t mode_number,
984 grub_efi_uintn_t *columns,
985 grub_efi_uintn_t *rows);
987 grub_efi_status_t
988 (*set_mode) (struct grub_efi_simple_text_output_interface *this,
989 grub_efi_uintn_t mode_number);
991 grub_efi_status_t
992 (*set_attributes) (struct grub_efi_simple_text_output_interface *this,
993 grub_efi_uintn_t attribute);
995 grub_efi_status_t
996 (*clear_screen) (struct grub_efi_simple_text_output_interface *this);
998 grub_efi_status_t
999 (*set_cursor_position) (struct grub_efi_simple_text_output_interface *this,
1000 grub_efi_uintn_t column,
1001 grub_efi_uintn_t row);
1003 grub_efi_status_t
1004 (*enable_cursor) (struct grub_efi_simple_text_output_interface *this,
1005 grub_efi_boolean_t visible);
1007 grub_efi_simple_text_output_mode_t *mode;
1009 typedef struct grub_efi_simple_text_output_interface grub_efi_simple_text_output_interface_t;
1011 #define GRUB_EFI_BLACK 0x00
1012 #define GRUB_EFI_BLUE 0x01
1013 #define GRUB_EFI_GREEN 0x02
1014 #define GRUB_EFI_CYAN 0x03
1015 #define GRUB_EFI_RED 0x04
1016 #define GRUB_EFI_MAGENTA 0x05
1017 #define GRUB_EFI_BROWN 0x06
1018 #define GRUB_EFI_LIGHTGRAY 0x07
1019 #define GRUB_EFI_BRIGHT 0x08
1020 #define GRUB_EFI_DARKGRAY 0x08
1021 #define GRUB_EFI_LIGHTBLUE 0x09
1022 #define GRUB_EFI_LIGHTGREEN 0x0A
1023 #define GRUB_EFI_LIGHTCYAN 0x0B
1024 #define GRUB_EFI_LIGHTRED 0x0C
1025 #define GRUB_EFI_LIGHTMAGENTA 0x0D
1026 #define GRUB_EFI_YELLOW 0x0E
1027 #define GRUB_EFI_WHITE 0x0F
1029 #define GRUB_EFI_BACKGROUND_BLACK 0x00
1030 #define GRUB_EFI_BACKGROUND_BLUE 0x10
1031 #define GRUB_EFI_BACKGROUND_GREEN 0x20
1032 #define GRUB_EFI_BACKGROUND_CYAN 0x30
1033 #define GRUB_EFI_BACKGROUND_RED 0x40
1034 #define GRUB_EFI_BACKGROUND_MAGENTA 0x50
1035 #define GRUB_EFI_BACKGROUND_BROWN 0x60
1036 #define GRUB_EFI_BACKGROUND_LIGHTGRAY 0x70
1038 #define GRUB_EFI_TEXT_ATTR(fg, bg) ((fg) | ((bg)))
1040 struct grub_efi_system_table
1042 grub_efi_table_header_t hdr;
1043 grub_efi_char16_t *firmware_vendor;
1044 grub_efi_uint32_t firmware_revision;
1045 grub_efi_handle_t console_in_handler;
1046 grub_efi_simple_input_interface_t *con_in;
1047 grub_efi_handle_t console_out_handler;
1048 grub_efi_simple_text_output_interface_t *con_out;
1049 grub_efi_handle_t standard_error_handle;
1050 grub_efi_simple_text_output_interface_t *std_err;
1051 grub_efi_runtime_services_t *runtime_services;
1052 grub_efi_boot_services_t *boot_services;
1053 grub_efi_uintn_t num_table_entries;
1054 grub_efi_configuration_table_t *configuration_table;
1056 typedef struct grub_efi_system_table grub_efi_system_table_t;
1058 struct grub_efi_loaded_image
1060 grub_efi_uint32_t revision;
1061 grub_efi_handle_t parent_handle;
1062 grub_efi_system_table_t *system_table;
1064 grub_efi_handle_t device_handle;
1065 grub_efi_device_path_t *file_path;
1066 void *reserved;
1068 grub_efi_uint32_t load_options_size;
1069 void *load_options;
1071 void *image_base;
1072 grub_efi_uint64_t image_size;
1073 grub_efi_memory_type_t image_code_type;
1074 grub_efi_memory_type_t image_data_type;
1076 grub_efi_status_t (*unload) (grub_efi_handle_t image_handle);
1078 typedef struct grub_efi_loaded_image grub_efi_loaded_image_t;
1080 struct grub_efi_disk_io
1082 grub_efi_uint64_t revision;
1083 grub_efi_status_t (*read) (struct grub_efi_disk_io *this,
1084 grub_efi_uint32_t media_id,
1085 grub_efi_uint64_t offset,
1086 grub_efi_uintn_t buffer_size,
1087 void *buffer);
1088 grub_efi_status_t (*write) (struct grub_efi_disk_io *this,
1089 grub_efi_uint32_t media_id,
1090 grub_efi_uint64_t offset,
1091 grub_efi_uintn_t buffer_size,
1092 void *buffer);
1094 typedef struct grub_efi_disk_io grub_efi_disk_io_t;
1096 struct grub_efi_block_io_media
1098 grub_efi_uint32_t media_id;
1099 grub_efi_boolean_t removable_media;
1100 grub_efi_boolean_t media_present;
1101 grub_efi_boolean_t logical_partition;
1102 grub_efi_boolean_t read_only;
1103 grub_efi_boolean_t write_caching;
1104 grub_efi_uint8_t pad[3];
1105 grub_efi_uint32_t block_size;
1106 grub_efi_uint32_t io_align;
1107 grub_efi_uint8_t pad2[4];
1108 grub_efi_lba_t last_block;
1110 typedef struct grub_efi_block_io_media grub_efi_block_io_media_t;
1112 struct grub_efi_block_io
1114 grub_efi_uint64_t revision;
1115 grub_efi_block_io_media_t *media;
1116 grub_efi_status_t (*reset) (struct grub_efi_block_io *this,
1117 grub_efi_boolean_t extended_verification);
1118 grub_efi_status_t (*read_blocks) (struct grub_efi_block_io *this,
1119 grub_efi_uint32_t media_id,
1120 grub_efi_lba_t lba,
1121 grub_efi_uintn_t buffer_size,
1122 void *buffer);
1123 grub_efi_status_t (*write_blocks) (struct grub_efi_block_io *this,
1124 grub_efi_uint32_t media_id,
1125 grub_efi_lba_t lba,
1126 grub_efi_uintn_t buffer_size,
1127 void *buffer);
1128 grub_efi_status_t (*flush_blocks) (struct grub_efi_block_io *this);
1130 typedef struct grub_efi_block_io grub_efi_block_io_t;
1132 #if GRUB_TARGET_SIZEOF_VOID_P == 4
1134 #define efi_call_0(func) func()
1135 #define efi_call_1(func, a) func(a)
1136 #define efi_call_2(func, a, b) func(a, b)
1137 #define efi_call_3(func, a, b, c) func(a, b, c)
1138 #define efi_call_4(func, a, b, c, d) func(a, b, c, d)
1139 #define efi_call_5(func, a, b, c, d, e) func(a, b, c, d, e)
1140 #define efi_call_6(func, a, b, c, d, e, f) func(a, b, c, d, e, f)
1141 #define efi_call_10(func, a, b, c, d, e, f, g, h, i, j) func(a, b, c, d, e, f, g, h, i, j)
1143 #else
1145 #define efi_call_0(func) \
1146 efi_wrap_0(func)
1147 #define efi_call_1(func, a) \
1148 efi_wrap_1(func, (grub_uint64_t) a)
1149 #define efi_call_2(func, a, b) \
1150 efi_wrap_2(func, (grub_uint64_t) a, (grub_uint64_t) b)
1151 #define efi_call_3(func, a, b, c) \
1152 efi_wrap_3(func, (grub_uint64_t) a, (grub_uint64_t) b, (grub_uint64_t) c)
1153 #define efi_call_4(func, a, b, c, d) \
1154 efi_wrap_4(func, (grub_uint64_t) a, (grub_uint64_t) b, (grub_uint64_t) c, \
1155 (grub_uint64_t) d)
1156 #define efi_call_5(func, a, b, c, d, e) \
1157 efi_wrap_5(func, (grub_uint64_t) a, (grub_uint64_t) b, (grub_uint64_t) c, \
1158 (grub_uint64_t) d, (grub_uint64_t) e)
1159 #define efi_call_6(func, a, b, c, d, e, f) \
1160 efi_wrap_6(func, (grub_uint64_t) a, (grub_uint64_t) b, (grub_uint64_t) c, \
1161 (grub_uint64_t) d, (grub_uint64_t) e, (grub_uint64_t) f)
1162 #define efi_call_10(func, a, b, c, d, e, f, g, h, i, j) \
1163 efi_wrap_10(func, (grub_uint64_t) a, (grub_uint64_t) b, (grub_uint64_t) c, \
1164 (grub_uint64_t) d, (grub_uint64_t) e, (grub_uint64_t) f, (grub_uint64_t) g, \
1165 (grub_uint64_t) h, (grub_uint64_t) i, (grub_uint64_t) j)
1167 grub_uint64_t EXPORT_FUNC(efi_wrap_0) (void *func);
1168 grub_uint64_t EXPORT_FUNC(efi_wrap_1) (void *func, grub_uint64_t arg1);
1169 grub_uint64_t EXPORT_FUNC(efi_wrap_2) (void *func, grub_uint64_t arg1,
1170 grub_uint64_t arg2);
1171 grub_uint64_t EXPORT_FUNC(efi_wrap_3) (void *func, grub_uint64_t arg1,
1172 grub_uint64_t arg2, grub_uint64_t arg3);
1173 grub_uint64_t EXPORT_FUNC(efi_wrap_4) (void *func, grub_uint64_t arg1,
1174 grub_uint64_t arg2, grub_uint64_t arg3,
1175 grub_uint64_t arg4);
1176 grub_uint64_t EXPORT_FUNC(efi_wrap_5) (void *func, grub_uint64_t arg1,
1177 grub_uint64_t arg2, grub_uint64_t arg3,
1178 grub_uint64_t arg4, grub_uint64_t arg5);
1179 grub_uint64_t EXPORT_FUNC(efi_wrap_6) (void *func, grub_uint64_t arg1,
1180 grub_uint64_t arg2, grub_uint64_t arg3,
1181 grub_uint64_t arg4, grub_uint64_t arg5,
1182 grub_uint64_t arg6);
1183 grub_uint64_t EXPORT_FUNC(efi_wrap_10) (void *func, grub_uint64_t arg1,
1184 grub_uint64_t arg2, grub_uint64_t arg3,
1185 grub_uint64_t arg4, grub_uint64_t arg5,
1186 grub_uint64_t arg6, grub_uint64_t arg7,
1187 grub_uint64_t arg8, grub_uint64_t arg9,
1188 grub_uint64_t arg10);
1189 #endif
1191 #endif /* ! GRUB_EFI_API_HEADER */