2 * Extensible Firmware Interface
3 * Based on 'Extensible Firmware Interface Specification' version 0.9,
6 * Copyright (C) 1999 VA Linux Systems
7 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
8 * Copyright (C) 1999, 2002-2003 Hewlett-Packard Co.
9 * David Mosberger-Tang <davidm@hpl.hp.com>
10 * Stephane Eranian <eranian@hpl.hp.com>
12 * From include/linux/efi.h in kernel 4.1 with some additions/subtractions
20 #ifdef CONFIG_EFI_LOADER
21 #include <asm/setjmp.h>
24 /* UEFI spec version 2.7 */
25 #define EFI_SPECIFICATION_VERSION (2 << 16 | 70)
27 /* Types and defines for EFI CreateEvent */
28 enum efi_timer_delay
{
30 EFI_TIMER_PERIODIC
= 1,
31 EFI_TIMER_RELATIVE
= 2
34 #define efi_uintn_t size_t
35 typedef uint16_t *efi_string_t
;
37 #define EVT_TIMER 0x80000000
38 #define EVT_RUNTIME 0x40000000
39 #define EVT_NOTIFY_WAIT 0x00000100
40 #define EVT_NOTIFY_SIGNAL 0x00000200
41 #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
42 #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
44 #define TPL_APPLICATION 0x04
45 #define TPL_CALLBACK 0x08
46 #define TPL_NOTIFY 0x10
47 #define TPL_HIGH_LEVEL 0x1F
51 /* EFI Boot Services table */
52 #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
53 struct efi_boot_services
{
54 struct efi_table_hdr hdr
;
55 efi_status_t (EFIAPI
*raise_tpl
)(efi_uintn_t new_tpl
);
56 void (EFIAPI
*restore_tpl
)(efi_uintn_t old_tpl
);
58 efi_status_t (EFIAPI
*allocate_pages
)(int, int, efi_uintn_t
,
59 efi_physical_addr_t
*);
60 efi_status_t (EFIAPI
*free_pages
)(efi_physical_addr_t
, efi_uintn_t
);
61 efi_status_t (EFIAPI
*get_memory_map
)(efi_uintn_t
*memory_map_size
,
62 struct efi_mem_desc
*desc
,
64 efi_uintn_t
*desc_size
,
66 efi_status_t (EFIAPI
*allocate_pool
)(int, efi_uintn_t
, void **);
67 efi_status_t (EFIAPI
*free_pool
)(void *);
69 efi_status_t (EFIAPI
*create_event
)(uint32_t type
,
70 efi_uintn_t notify_tpl
,
71 void (EFIAPI
*notify_function
) (
72 struct efi_event
*event
,
74 void *notify_context
, struct efi_event
**event
);
75 efi_status_t (EFIAPI
*set_timer
)(struct efi_event
*event
,
76 enum efi_timer_delay type
,
77 uint64_t trigger_time
);
78 efi_status_t (EFIAPI
*wait_for_event
)(efi_uintn_t number_of_events
,
79 struct efi_event
**event
,
81 efi_status_t (EFIAPI
*signal_event
)(struct efi_event
*event
);
82 efi_status_t (EFIAPI
*close_event
)(struct efi_event
*event
);
83 efi_status_t (EFIAPI
*check_event
)(struct efi_event
*event
);
84 #define EFI_NATIVE_INTERFACE 0x00000000
85 efi_status_t (EFIAPI
*install_protocol_interface
)(
86 void **handle
, const efi_guid_t
*protocol
,
87 int protocol_interface_type
, void *protocol_interface
);
88 efi_status_t (EFIAPI
*reinstall_protocol_interface
)(
89 void *handle
, const efi_guid_t
*protocol
,
90 void *old_interface
, void *new_interface
);
91 efi_status_t (EFIAPI
*uninstall_protocol_interface
)(
92 efi_handle_t handle
, const efi_guid_t
*protocol
,
93 void *protocol_interface
);
94 efi_status_t (EFIAPI
*handle_protocol
)(
95 efi_handle_t handle
, const efi_guid_t
*protocol
,
96 void **protocol_interface
);
98 efi_status_t (EFIAPI
*register_protocol_notify
)(
99 const efi_guid_t
*protocol
, struct efi_event
*event
,
100 void **registration
);
101 efi_status_t (EFIAPI
*locate_handle
)(
102 enum efi_locate_search_type search_type
,
103 const efi_guid_t
*protocol
, void *search_key
,
104 efi_uintn_t
*buffer_size
, efi_handle_t
*buffer
);
105 efi_status_t (EFIAPI
*locate_device_path
)(const efi_guid_t
*protocol
,
106 struct efi_device_path
**device_path
,
107 efi_handle_t
*device
);
108 efi_status_t (EFIAPI
*install_configuration_table
)(
109 efi_guid_t
*guid
, void *table
);
111 efi_status_t (EFIAPI
*load_image
)(bool boot_policiy
,
112 efi_handle_t parent_image
,
113 struct efi_device_path
*file_path
, void *source_buffer
,
114 efi_uintn_t source_size
, efi_handle_t
*image
);
115 efi_status_t (EFIAPI
*start_image
)(efi_handle_t handle
,
116 unsigned long *exitdata_size
,
118 efi_status_t (EFIAPI
*exit
)(efi_handle_t handle
,
119 efi_status_t exit_status
,
120 unsigned long exitdata_size
, s16
*exitdata
);
121 efi_status_t (EFIAPI
*unload_image
)(efi_handle_t image_handle
);
122 efi_status_t (EFIAPI
*exit_boot_services
)(efi_handle_t
, unsigned long);
124 efi_status_t (EFIAPI
*get_next_monotonic_count
)(u64
*count
);
125 efi_status_t (EFIAPI
*stall
)(unsigned long usecs
);
126 efi_status_t (EFIAPI
*set_watchdog_timer
)(unsigned long timeout
,
127 uint64_t watchdog_code
, unsigned long data_size
,
128 uint16_t *watchdog_data
);
129 efi_status_t(EFIAPI
*connect_controller
)(efi_handle_t controller_handle
,
130 efi_handle_t
*driver_image_handle
,
131 struct efi_device_path
*remaining_device_path
,
133 efi_status_t (EFIAPI
*disconnect_controller
)(
134 efi_handle_t controller_handle
,
135 efi_handle_t driver_image_handle
,
136 efi_handle_t child_handle
);
137 #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001
138 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002
139 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004
140 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
141 #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010
142 #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020
143 efi_status_t (EFIAPI
*open_protocol
)(efi_handle_t handle
,
144 const efi_guid_t
*protocol
, void **interface
,
145 efi_handle_t agent_handle
,
146 efi_handle_t controller_handle
, u32 attributes
);
147 efi_status_t (EFIAPI
*close_protocol
)(
148 efi_handle_t handle
, const efi_guid_t
*protocol
,
149 efi_handle_t agent_handle
,
150 efi_handle_t controller_handle
);
151 efi_status_t(EFIAPI
*open_protocol_information
)(efi_handle_t handle
,
152 const efi_guid_t
*protocol
,
153 struct efi_open_protocol_info_entry
**entry_buffer
,
154 efi_uintn_t
*entry_count
);
155 efi_status_t (EFIAPI
*protocols_per_handle
)(efi_handle_t handle
,
156 efi_guid_t
***protocol_buffer
,
157 efi_uintn_t
*protocols_buffer_count
);
158 efi_status_t (EFIAPI
*locate_handle_buffer
) (
159 enum efi_locate_search_type search_type
,
160 const efi_guid_t
*protocol
, void *search_key
,
161 efi_uintn_t
*no_handles
, efi_handle_t
**buffer
);
162 efi_status_t (EFIAPI
*locate_protocol
)(const efi_guid_t
*protocol
,
163 void *registration
, void **protocol_interface
);
164 efi_status_t (EFIAPI
*install_multiple_protocol_interfaces
)(
166 efi_status_t (EFIAPI
*uninstall_multiple_protocol_interfaces
)(
168 efi_status_t (EFIAPI
*calculate_crc32
)(const void *data
,
169 efi_uintn_t data_size
,
171 void (EFIAPI
*copy_mem
)(void *destination
, const void *source
,
173 void (EFIAPI
*set_mem
)(void *buffer
, size_t size
, uint8_t value
);
174 efi_status_t (EFIAPI
*create_event_ex
)(
175 uint32_t type
, efi_uintn_t notify_tpl
,
176 void (EFIAPI
*notify_function
) (
177 struct efi_event
*event
,
179 void *notify_context
,
180 efi_guid_t
*event_group
,
181 struct efi_event
**event
);
184 /* Types and defines for EFI ResetSystem */
185 enum efi_reset_type
{
188 EFI_RESET_SHUTDOWN
= 2,
189 EFI_RESET_PLATFORM_SPECIFIC
= 3,
192 /* EFI Runtime Services table */
193 #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552ULL
195 #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000
196 #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000
197 #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000
199 struct efi_capsule_header
{
200 efi_guid_t
*capsule_guid
;
203 u32 capsule_image_size
;
206 struct efi_runtime_services
{
207 struct efi_table_hdr hdr
;
208 efi_status_t (EFIAPI
*get_time
)(struct efi_time
*time
,
209 struct efi_time_cap
*capabilities
);
210 efi_status_t (EFIAPI
*set_time
)(struct efi_time
*time
);
211 efi_status_t (EFIAPI
*get_wakeup_time
)(char *enabled
, char *pending
,
212 struct efi_time
*time
);
213 efi_status_t (EFIAPI
*set_wakeup_time
)(char enabled
,
214 struct efi_time
*time
);
215 efi_status_t (EFIAPI
*set_virtual_address_map
)(
216 unsigned long memory_map_size
,
217 unsigned long descriptor_size
,
218 uint32_t descriptor_version
,
219 struct efi_mem_desc
*virtmap
);
220 efi_status_t (*convert_pointer
)(unsigned long dbg
, void **address
);
221 efi_status_t (EFIAPI
*get_variable
)(u16
*variable_name
,
222 efi_guid_t
*vendor
, u32
*attributes
,
223 efi_uintn_t
*data_size
, void *data
);
224 efi_status_t (EFIAPI
*get_next_variable_name
)(
225 efi_uintn_t
*variable_name_size
,
226 u16
*variable_name
, efi_guid_t
*vendor
);
227 efi_status_t (EFIAPI
*set_variable
)(u16
*variable_name
,
228 efi_guid_t
*vendor
, u32 attributes
,
229 efi_uintn_t data_size
, void *data
);
230 efi_status_t (EFIAPI
*get_next_high_mono_count
)(
231 uint32_t *high_count
);
232 void (EFIAPI
*reset_system
)(enum efi_reset_type reset_type
,
233 efi_status_t reset_status
,
234 unsigned long data_size
, void *reset_data
);
235 efi_status_t (EFIAPI
*update_capsule
)(
236 struct efi_capsule_header
**capsule_header_array
,
237 efi_uintn_t capsule_count
,
238 u64 scatter_gather_list
);
239 efi_status_t (EFIAPI
*query_capsule_caps
)(
240 struct efi_capsule_header
**capsule_header_array
,
241 efi_uintn_t capsule_count
,
242 u64 maximum_capsule_size
,
244 efi_status_t (EFIAPI
*query_variable_info
)(
246 u64
*maximum_variable_storage_size
,
247 u64
*remaining_variable_storage_size
,
248 u64
*maximum_variable_size
);
251 /* EFI event group GUID definitions */
252 #define EFI_EVENT_GROUP_EXIT_BOOT_SERVICES \
253 EFI_GUID(0x27abf055, 0xb1b8, 0x4c26, 0x80, 0x48, \
254 0x74, 0x8f, 0x37, 0xba, 0xa2, 0xdf)
256 #define EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE \
257 EFI_GUID(0x13fa7698, 0xc831, 0x49c7, 0x87, 0xea, \
258 0x8f, 0x43, 0xfc, 0xc2, 0x51, 0x96)
260 #define EFI_EVENT_GROUP_MEMORY_MAP_CHANGE \
261 EFI_GUID(0x78bee926, 0x692f, 0x48fd, 0x9e, 0xdb, \
262 0x01, 0x42, 0x2e, 0xf0, 0xd7, 0xab)
264 #define EFI_EVENT_GROUP_READY_TO_BOOT \
265 EFI_GUID(0x7ce88fb3, 0x4bd7, 0x4679, 0x87, 0xa8, \
266 0xa8, 0xd8, 0xde, 0xe5, 0x0d, 0x2b)
268 #define EFI_EVENT_GROUP_RESET_SYSTEM \
269 EFI_GUID(0x62da6a56, 0x13fb, 0x485a, 0xa8, 0xda, \
270 0xa3, 0xdd, 0x79, 0x12, 0xcb, 0x6b)
272 /* EFI Configuration Table and GUID definitions */
274 EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
277 #define EFI_GLOBAL_VARIABLE_GUID \
278 EFI_GUID(0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, \
279 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c)
281 #define LOADED_IMAGE_PROTOCOL_GUID \
282 EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \
283 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
285 #define EFI_FDT_GUID \
286 EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \
287 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0)
289 #define EFI_ACPI_TABLE_GUID \
290 EFI_GUID(0x8868e871, 0xe4f1, 0x11d3, \
291 0xbc, 0x22, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81)
293 #define SMBIOS_TABLE_GUID \
294 EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \
295 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
297 struct efi_configuration_table
303 #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL)
305 struct efi_system_table
{
306 struct efi_table_hdr hdr
;
307 u16
*fw_vendor
; /* physical addr of wchar_t vendor string */
309 efi_handle_t con_in_handle
;
310 struct efi_simple_input_interface
*con_in
;
311 efi_handle_t con_out_handle
;
312 struct efi_simple_text_output_protocol
*con_out
;
313 efi_handle_t stderr_handle
;
314 struct efi_simple_text_output_protocol
*std_err
;
315 struct efi_runtime_services
*runtime
;
316 struct efi_boot_services
*boottime
;
317 efi_uintn_t nr_tables
;
318 struct efi_configuration_table
*tables
;
321 #define LOADED_IMAGE_GUID \
322 EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \
323 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
325 #define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
327 struct efi_loaded_image
{
330 struct efi_system_table
*system_table
;
331 efi_handle_t device_handle
;
332 struct efi_device_path
*file_path
;
334 u32 load_options_size
;
337 aligned_u64 image_size
;
338 unsigned int image_code_type
;
339 unsigned int image_data_type
;
340 unsigned long unload
;
342 /* Below are efi loader private fields */
343 #ifdef CONFIG_EFI_LOADER
345 aligned_u64 reloc_size
;
346 efi_status_t exit_status
;
347 struct jmp_buf_data exit_jmp
;
351 #define DEVICE_PATH_GUID \
352 EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \
353 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
355 #define DEVICE_PATH_TYPE_END 0x7f
356 # define DEVICE_PATH_SUB_TYPE_INSTANCE_END 0x01
357 # define DEVICE_PATH_SUB_TYPE_END 0xff
359 struct efi_device_path
{
365 struct efi_mac_addr
{
369 #define DEVICE_PATH_TYPE_HARDWARE_DEVICE 0x01
370 # define DEVICE_PATH_SUB_TYPE_MEMORY 0x03
371 # define DEVICE_PATH_SUB_TYPE_VENDOR 0x04
373 struct efi_device_path_memory
{
374 struct efi_device_path dp
;
380 struct efi_device_path_vendor
{
381 struct efi_device_path dp
;
386 #define DEVICE_PATH_TYPE_ACPI_DEVICE 0x02
387 # define DEVICE_PATH_SUB_TYPE_ACPI_DEVICE 0x01
389 #define EFI_PNP_ID(ID) (u32)(((ID) << 16) | 0x41D0)
390 #define EISA_PNP_ID(ID) EFI_PNP_ID(ID)
391 #define EISA_PNP_NUM(ID) ((ID) >> 16)
393 struct efi_device_path_acpi_path
{
394 struct efi_device_path dp
;
399 #define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03
400 # define DEVICE_PATH_SUB_TYPE_MSG_ATAPI 0x01
401 # define DEVICE_PATH_SUB_TYPE_MSG_SCSI 0x02
402 # define DEVICE_PATH_SUB_TYPE_MSG_USB 0x05
403 # define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b
404 # define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS 0x0f
405 # define DEVICE_PATH_SUB_TYPE_MSG_SD 0x1a
406 # define DEVICE_PATH_SUB_TYPE_MSG_MMC 0x1d
408 struct efi_device_path_atapi
{
409 struct efi_device_path dp
;
410 u8 primary_secondary
;
412 u16 logical_unit_number
;
415 struct efi_device_path_scsi
{
416 struct efi_device_path dp
;
418 u16 logical_unit_number
;
421 struct efi_device_path_usb
{
422 struct efi_device_path dp
;
423 u8 parent_port_number
;
427 struct efi_device_path_mac_addr
{
428 struct efi_device_path dp
;
429 struct efi_mac_addr mac
;
433 struct efi_device_path_usb_class
{
434 struct efi_device_path dp
;
442 struct efi_device_path_sd_mmc_path
{
443 struct efi_device_path dp
;
447 #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04
448 # define DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH 0x01
449 # define DEVICE_PATH_SUB_TYPE_CDROM_PATH 0x02
450 # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04
452 struct efi_device_path_hard_drive_path
{
453 struct efi_device_path dp
;
454 u32 partition_number
;
457 u8 partition_signature
[16];
462 struct efi_device_path_cdrom_path
{
463 struct efi_device_path dp
;
469 struct efi_device_path_file_path
{
470 struct efi_device_path dp
;
474 #define BLOCK_IO_GUID \
475 EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \
476 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
478 struct efi_block_io_media
481 char removable_media
;
483 char logical_partition
;
491 /* Added in revision 2 of the protocol */
492 u64 lowest_aligned_lba
;
493 u32 logical_blocks_per_physical_block
;
494 /* Added in revision 3 of the protocol */
495 u32 optimal_transfer_length_granualarity
;
498 #define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001
499 #define EFI_BLOCK_IO_PROTOCOL_REVISION3 0x0002001f
501 struct efi_block_io
{
503 struct efi_block_io_media
*media
;
504 efi_status_t (EFIAPI
*reset
)(struct efi_block_io
*this,
505 char extended_verification
);
506 efi_status_t (EFIAPI
*read_blocks
)(struct efi_block_io
*this,
507 u32 media_id
, u64 lba
, efi_uintn_t buffer_size
,
509 efi_status_t (EFIAPI
*write_blocks
)(struct efi_block_io
*this,
510 u32 media_id
, u64 lba
, efi_uintn_t buffer_size
,
512 efi_status_t (EFIAPI
*flush_blocks
)(struct efi_block_io
*this);
515 struct simple_text_output_mode
{
525 #define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \
526 EFI_GUID(0x387477c2, 0x69c7, 0x11d2, \
527 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
529 #define EFI_BLACK 0x00
530 #define EFI_BLUE 0x01
531 #define EFI_GREEN 0x02
532 #define EFI_CYAN 0x03
534 #define EFI_MAGENTA 0x05
535 #define EFI_BROWN 0x06
536 #define EFI_LIGHTGRAY 0x07
537 #define EFI_BRIGHT 0x08
538 #define EFI_DARKGRAY 0x08
539 #define EFI_LIGHTBLUE 0x09
540 #define EFI_LIGHTGREEN 0x0a
541 #define EFI_LIGHTCYAN 0x0b
542 #define EFI_LIGHTRED 0x0c
543 #define EFI_LIGHTMAGENTA 0x0d
544 #define EFI_YELLOW 0x0e
545 #define EFI_WHITE 0x0f
546 #define EFI_BACKGROUND_BLACK 0x00
547 #define EFI_BACKGROUND_BLUE 0x10
548 #define EFI_BACKGROUND_GREEN 0x20
549 #define EFI_BACKGROUND_CYAN 0x30
550 #define EFI_BACKGROUND_RED 0x40
551 #define EFI_BACKGROUND_MAGENTA 0x50
552 #define EFI_BACKGROUND_BROWN 0x60
553 #define EFI_BACKGROUND_LIGHTGRAY 0x70
555 /* extract foreground color from EFI attribute */
556 #define EFI_ATTR_FG(attr) ((attr) & 0x07)
557 /* treat high bit of FG as bright/bold (similar to edk2) */
558 #define EFI_ATTR_BOLD(attr) (((attr) >> 3) & 0x01)
559 /* extract background color from EFI attribute */
560 #define EFI_ATTR_BG(attr) (((attr) >> 4) & 0x7)
562 struct efi_simple_text_output_protocol
{
564 efi_status_t (EFIAPI
*output_string
)(
565 struct efi_simple_text_output_protocol
*this,
566 const efi_string_t str
);
567 efi_status_t (EFIAPI
*test_string
)(
568 struct efi_simple_text_output_protocol
*this,
569 const efi_string_t str
);
570 efi_status_t(EFIAPI
*query_mode
)(
571 struct efi_simple_text_output_protocol
*this,
572 unsigned long mode_number
, unsigned long *columns
,
573 unsigned long *rows
);
574 efi_status_t(EFIAPI
*set_mode
)(
575 struct efi_simple_text_output_protocol
*this,
576 unsigned long mode_number
);
577 efi_status_t(EFIAPI
*set_attribute
)(
578 struct efi_simple_text_output_protocol
*this,
579 unsigned long attribute
);
580 efi_status_t(EFIAPI
*clear_screen
) (
581 struct efi_simple_text_output_protocol
*this);
582 efi_status_t(EFIAPI
*set_cursor_position
) (
583 struct efi_simple_text_output_protocol
*this,
584 unsigned long column
, unsigned long row
);
585 efi_status_t(EFIAPI
*enable_cursor
)(
586 struct efi_simple_text_output_protocol
*this,
588 struct simple_text_output_mode
*mode
;
591 struct efi_input_key
{
596 #define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \
597 EFI_GUID(0x387477c1, 0x69c7, 0x11d2, \
598 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
600 struct efi_simple_input_interface
{
601 efi_status_t(EFIAPI
*reset
)(struct efi_simple_input_interface
*this,
602 bool ExtendedVerification
);
603 efi_status_t(EFIAPI
*read_key_stroke
)(
604 struct efi_simple_input_interface
*this,
605 struct efi_input_key
*key
);
606 struct efi_event
*wait_for_key
;
609 #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \
610 EFI_GUID(0x8b843e20, 0x8132, 0x4852, \
611 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c)
613 struct efi_device_path_to_text_protocol
615 uint16_t *(EFIAPI
*convert_device_node_to_text
)(
616 struct efi_device_path
*device_node
,
618 bool allow_shortcuts
);
619 uint16_t *(EFIAPI
*convert_device_path_to_text
)(
620 struct efi_device_path
*device_path
,
622 bool allow_shortcuts
);
625 #define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \
626 EFI_GUID(0x0379be4e, 0xd706, 0x437d, \
627 0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4)
629 struct efi_device_path_utilities_protocol
{
630 efi_uintn_t (EFIAPI
*get_device_path_size
)(
631 const struct efi_device_path
*device_path
);
632 struct efi_device_path
*(EFIAPI
*duplicate_device_path
)(
633 const struct efi_device_path
*device_path
);
634 struct efi_device_path
*(EFIAPI
*append_device_path
)(
635 const struct efi_device_path
*src1
,
636 const struct efi_device_path
*src2
);
637 struct efi_device_path
*(EFIAPI
*append_device_node
)(
638 const struct efi_device_path
*device_path
,
639 const struct efi_device_path
*device_node
);
640 struct efi_device_path
*(EFIAPI
*append_device_path_instance
)(
641 const struct efi_device_path
*device_path
,
642 const struct efi_device_path
*device_path_instance
);
643 struct efi_device_path
*(EFIAPI
*get_next_device_path_instance
)(
644 struct efi_device_path
**device_path_instance
,
645 efi_uintn_t
*device_path_instance_size
);
646 bool (EFIAPI
*is_device_path_multi_instance
)(
647 const struct efi_device_path
*device_path
);
648 struct efi_device_path
*(EFIAPI
*create_device_node
)(
650 uint8_t node_sub_type
,
651 uint16_t node_length
);
654 #define EFI_GOP_GUID \
655 EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \
656 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a)
658 #define EFI_GOT_RGBA8 0
659 #define EFI_GOT_BGRA8 1
660 #define EFI_GOT_BITMASK 2
662 struct efi_gop_mode_info
668 u32 pixel_bitmask
[4];
669 u32 pixels_per_scanline
;
676 struct efi_gop_mode_info
*info
;
677 unsigned long info_size
;
678 efi_physical_addr_t fb_base
;
679 unsigned long fb_size
;
682 struct efi_gop_pixel
{
689 #define EFI_BLT_VIDEO_FILL 0
690 #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1
691 #define EFI_BLT_BUFFER_TO_VIDEO 2
692 #define EFI_BLT_VIDEO_TO_VIDEO 3
696 efi_status_t (EFIAPI
*query_mode
)(struct efi_gop
*this, u32 mode_number
,
697 efi_uintn_t
*size_of_info
,
698 struct efi_gop_mode_info
**info
);
699 efi_status_t (EFIAPI
*set_mode
)(struct efi_gop
*this, u32 mode_number
);
700 efi_status_t (EFIAPI
*blt
)(struct efi_gop
*this,
701 struct efi_gop_pixel
*buffer
,
702 u32 operation
, efi_uintn_t sx
,
703 efi_uintn_t sy
, efi_uintn_t dx
,
704 efi_uintn_t dy
, efi_uintn_t width
,
705 efi_uintn_t height
, efi_uintn_t delta
);
706 struct efi_gop_mode
*mode
;
709 #define EFI_SIMPLE_NETWORK_GUID \
710 EFI_GUID(0xa19832b9, 0xac25, 0x11d3, \
711 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
713 struct efi_mac_address
{
717 struct efi_ip_address
{
719 } __attribute__((aligned(4)));
721 enum efi_simple_network_state
{
724 EFI_NETWORK_INITIALIZED
,
727 struct efi_simple_network_mode
{
728 enum efi_simple_network_state state
;
730 u32 media_header_size
;
733 u32 nvram_access_size
;
734 u32 receive_filter_mask
;
735 u32 receive_filter_setting
;
736 u32 max_mcast_filter_count
;
737 u32 mcast_filter_count
;
738 struct efi_mac_address mcast_filter
[16];
739 struct efi_mac_address current_address
;
740 struct efi_mac_address broadcast_address
;
741 struct efi_mac_address permanent_address
;
744 u8 multitx_supported
;
745 u8 media_present_supported
;
749 /* receive_filters bit mask */
750 #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01
751 #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02
752 #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04
753 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08
754 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
756 /* interrupt status bit mask */
757 #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01
758 #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02
759 #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04
760 #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08
762 /* revision of the simple network protocol */
763 #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000
765 struct efi_simple_network
768 efi_status_t (EFIAPI
*start
)(struct efi_simple_network
*this);
769 efi_status_t (EFIAPI
*stop
)(struct efi_simple_network
*this);
770 efi_status_t (EFIAPI
*initialize
)(struct efi_simple_network
*this,
771 ulong extra_rx
, ulong extra_tx
);
772 efi_status_t (EFIAPI
*reset
)(struct efi_simple_network
*this,
773 int extended_verification
);
774 efi_status_t (EFIAPI
*shutdown
)(struct efi_simple_network
*this);
775 efi_status_t (EFIAPI
*receive_filters
)(struct efi_simple_network
*this,
776 u32 enable
, u32 disable
, int reset_mcast_filter
,
777 ulong mcast_filter_count
,
778 struct efi_mac_address
*mcast_filter
);
779 efi_status_t (EFIAPI
*station_address
)(struct efi_simple_network
*this,
780 int reset
, struct efi_mac_address
*new_mac
);
781 efi_status_t (EFIAPI
*statistics
)(struct efi_simple_network
*this,
782 int reset
, ulong
*stat_size
, void *stat_table
);
783 efi_status_t (EFIAPI
*mcastiptomac
)(struct efi_simple_network
*this,
784 int ipv6
, struct efi_ip_address
*ip
,
785 struct efi_mac_address
*mac
);
786 efi_status_t (EFIAPI
*nvdata
)(struct efi_simple_network
*this,
787 int read_write
, ulong offset
, ulong buffer_size
,
789 efi_status_t (EFIAPI
*get_status
)(struct efi_simple_network
*this,
790 u32
*int_status
, void **txbuf
);
791 efi_status_t (EFIAPI
*transmit
)(struct efi_simple_network
*this,
792 size_t header_size
, size_t buffer_size
, void *buffer
,
793 struct efi_mac_address
*src_addr
,
794 struct efi_mac_address
*dest_addr
, u16
*protocol
);
795 efi_status_t (EFIAPI
*receive
)(struct efi_simple_network
*this,
796 size_t *header_size
, size_t *buffer_size
, void *buffer
,
797 struct efi_mac_address
*src_addr
,
798 struct efi_mac_address
*dest_addr
, u16
*protocol
);
799 struct efi_event
*wait_for_packet
;
800 struct efi_simple_network_mode
*mode
;
803 #define EFI_PXE_GUID \
804 EFI_GUID(0x03c4e603, 0xac28, 0x11d3, \
805 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
807 struct efi_pxe_packet
{
821 u8 dhcp_discover_valid
;
822 u8 dhcp_ack_received
;
823 u8 proxy_offer_received
;
824 u8 pxe_discover_valid
;
825 u8 pxe_reply_received
;
826 u8 pxe_bis_reply_received
;
827 u8 icmp_error_received
;
828 u8 tftp_error_received
;
833 struct efi_ip_address station_ip
;
834 struct efi_ip_address subnet_mask
;
835 struct efi_pxe_packet dhcp_discover
;
836 struct efi_pxe_packet dhcp_ack
;
837 struct efi_pxe_packet proxy_offer
;
838 struct efi_pxe_packet pxe_discover
;
839 struct efi_pxe_packet pxe_reply
;
844 void (EFIAPI
*start
)(void);
845 void (EFIAPI
*stop
)(void);
846 void (EFIAPI
*dhcp
)(void);
847 void (EFIAPI
*discover
)(void);
848 void (EFIAPI
*mftp
)(void);
849 void (EFIAPI
*udpwrite
)(void);
850 void (EFIAPI
*udpread
)(void);
851 void (EFIAPI
*setipfilter
)(void);
852 void (EFIAPI
*arp
)(void);
853 void (EFIAPI
*setparams
)(void);
854 void (EFIAPI
*setstationip
)(void);
855 void (EFIAPI
*setpackets
)(void);
856 struct efi_pxe_mode
*mode
;
859 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
860 EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \
861 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
862 #define EFI_FILE_PROTOCOL_REVISION 0x00010000
864 struct efi_file_handle
{
866 efi_status_t (EFIAPI
*open
)(struct efi_file_handle
*file
,
867 struct efi_file_handle
**new_handle
,
868 s16
*file_name
, u64 open_mode
, u64 attributes
);
869 efi_status_t (EFIAPI
*close
)(struct efi_file_handle
*file
);
870 efi_status_t (EFIAPI
*delete)(struct efi_file_handle
*file
);
871 efi_status_t (EFIAPI
*read
)(struct efi_file_handle
*file
,
872 efi_uintn_t
*buffer_size
, void *buffer
);
873 efi_status_t (EFIAPI
*write
)(struct efi_file_handle
*file
,
874 efi_uintn_t
*buffer_size
, void *buffer
);
875 efi_status_t (EFIAPI
*getpos
)(struct efi_file_handle
*file
,
877 efi_status_t (EFIAPI
*setpos
)(struct efi_file_handle
*file
,
879 efi_status_t (EFIAPI
*getinfo
)(struct efi_file_handle
*file
,
880 const efi_guid_t
*info_type
, efi_uintn_t
*buffer_size
,
882 efi_status_t (EFIAPI
*setinfo
)(struct efi_file_handle
*file
,
883 const efi_guid_t
*info_type
, efi_uintn_t buffer_size
,
885 efi_status_t (EFIAPI
*flush
)(struct efi_file_handle
*file
);
888 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
889 EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \
890 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
891 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000
893 struct efi_simple_file_system_protocol
{
895 efi_status_t (EFIAPI
*open_volume
)(struct efi_simple_file_system_protocol
*this,
896 struct efi_file_handle
**root
);
899 #define EFI_FILE_INFO_GUID \
900 EFI_GUID(0x9576e92, 0x6d3f, 0x11d2, \
901 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
903 #define EFI_FILE_SYSTEM_INFO_GUID \
904 EFI_GUID(0x09576e93, 0x6d3f, 0x11d2, \
905 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
907 #define EFI_FILE_MODE_READ 0x0000000000000001
908 #define EFI_FILE_MODE_WRITE 0x0000000000000002
909 #define EFI_FILE_MODE_CREATE 0x8000000000000000
911 #define EFI_FILE_READ_ONLY 0x0000000000000001
912 #define EFI_FILE_HIDDEN 0x0000000000000002
913 #define EFI_FILE_SYSTEM 0x0000000000000004
914 #define EFI_FILE_RESERVED 0x0000000000000008
915 #define EFI_FILE_DIRECTORY 0x0000000000000010
916 #define EFI_FILE_ARCHIVE 0x0000000000000020
917 #define EFI_FILE_VALID_ATTR 0x0000000000000037
919 struct efi_file_info
{
923 struct efi_time create_time
;
924 struct efi_time last_access_time
;
925 struct efi_time modification_time
;
930 struct efi_file_system_info
{
939 #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
940 EFI_GUID(0x18a031ab, 0xb443, 0x4d1a,\
941 0xa5, 0xc0, 0x0c, 0x09, 0x26, 0x1e, 0x9f, 0x71)
942 struct efi_driver_binding_protocol
{
943 efi_status_t (EFIAPI
* supported
)(
944 struct efi_driver_binding_protocol
*this,
945 efi_handle_t controller_handle
,
946 struct efi_device_path
*remaining_device_path
);
947 efi_status_t (EFIAPI
* start
)(
948 struct efi_driver_binding_protocol
*this,
949 efi_handle_t controller_handle
,
950 struct efi_device_path
*remaining_device_path
);
951 efi_status_t (EFIAPI
* stop
)(
952 struct efi_driver_binding_protocol
*this,
953 efi_handle_t controller_handle
,
954 efi_uintn_t number_of_children
,
955 efi_handle_t
*child_handle_buffer
);
957 efi_handle_t image_handle
;
958 efi_handle_t driver_binding_handle
;