1 /* 2 * Extensible Firmware Interface 3 * Based on 'Extensible Firmware Interface Specification' version 0.9, 4 * April 30, 1999 5 * 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> 11 * 12 * From include/linux/efi.h in kernel 4.1 with some additions/subtractions 13 */ 14 15 #ifndef _EFI_API_H 16 #define _EFI_API_H 17 18 #include <efi.h> 19 20 #ifdef CONFIG_EFI_LOADER 21 #include <asm/setjmp.h> 22 #endif 23 24 /* Types and defines for EFI CreateEvent */ 25 enum efi_timer_delay { 26 EFI_TIMER_STOP = 0, 27 EFI_TIMER_PERIODIC = 1, 28 EFI_TIMER_RELATIVE = 2 29 }; 30 31 #define efi_uintn_t size_t 32 typedef uint16_t *efi_string_t; 33 34 #define EVT_TIMER 0x80000000 35 #define EVT_RUNTIME 0x40000000 36 #define EVT_NOTIFY_WAIT 0x00000100 37 #define EVT_NOTIFY_SIGNAL 0x00000200 38 #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 39 #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 40 41 #define TPL_APPLICATION 0x04 42 #define TPL_CALLBACK 0x08 43 #define TPL_NOTIFY 0x10 44 #define TPL_HIGH_LEVEL 0x1F 45 46 struct efi_event; 47 48 /* EFI Boot Services table */ 49 struct efi_boot_services { 50 struct efi_table_hdr hdr; 51 efi_status_t (EFIAPI *raise_tpl)(efi_uintn_t new_tpl); 52 void (EFIAPI *restore_tpl)(efi_uintn_t old_tpl); 53 54 efi_status_t (EFIAPI *allocate_pages)(int, int, efi_uintn_t, 55 efi_physical_addr_t *); 56 efi_status_t (EFIAPI *free_pages)(efi_physical_addr_t, efi_uintn_t); 57 efi_status_t (EFIAPI *get_memory_map)(efi_uintn_t *memory_map_size, 58 struct efi_mem_desc *desc, 59 efi_uintn_t *key, 60 efi_uintn_t *desc_size, 61 u32 *desc_version); 62 efi_status_t (EFIAPI *allocate_pool)(int, efi_uintn_t, void **); 63 efi_status_t (EFIAPI *free_pool)(void *); 64 65 efi_status_t (EFIAPI *create_event)(uint32_t type, 66 efi_uintn_t notify_tpl, 67 void (EFIAPI *notify_function) ( 68 struct efi_event *event, 69 void *context), 70 void *notify_context, struct efi_event **event); 71 efi_status_t (EFIAPI *set_timer)(struct efi_event *event, 72 enum efi_timer_delay type, 73 uint64_t trigger_time); 74 efi_status_t (EFIAPI *wait_for_event)(efi_uintn_t number_of_events, 75 struct efi_event **event, 76 efi_uintn_t *index); 77 efi_status_t (EFIAPI *signal_event)(struct efi_event *event); 78 efi_status_t (EFIAPI *close_event)(struct efi_event *event); 79 efi_status_t (EFIAPI *check_event)(struct efi_event *event); 80 #define EFI_NATIVE_INTERFACE 0x00000000 81 efi_status_t (EFIAPI *install_protocol_interface)( 82 void **handle, const efi_guid_t *protocol, 83 int protocol_interface_type, void *protocol_interface); 84 efi_status_t (EFIAPI *reinstall_protocol_interface)( 85 void *handle, const efi_guid_t *protocol, 86 void *old_interface, void *new_interface); 87 efi_status_t (EFIAPI *uninstall_protocol_interface)( 88 efi_handle_t handle, const efi_guid_t *protocol, 89 void *protocol_interface); 90 efi_status_t (EFIAPI *handle_protocol)( 91 efi_handle_t handle, const efi_guid_t *protocol, 92 void **protocol_interface); 93 void *reserved; 94 efi_status_t (EFIAPI *register_protocol_notify)( 95 const efi_guid_t *protocol, struct efi_event *event, 96 void **registration); 97 efi_status_t (EFIAPI *locate_handle)( 98 enum efi_locate_search_type search_type, 99 const efi_guid_t *protocol, void *search_key, 100 efi_uintn_t *buffer_size, efi_handle_t *buffer); 101 efi_status_t (EFIAPI *locate_device_path)(const efi_guid_t *protocol, 102 struct efi_device_path **device_path, 103 efi_handle_t *device); 104 efi_status_t (EFIAPI *install_configuration_table)( 105 efi_guid_t *guid, void *table); 106 107 efi_status_t (EFIAPI *load_image)(bool boot_policiy, 108 efi_handle_t parent_image, 109 struct efi_device_path *file_path, void *source_buffer, 110 unsigned long source_size, efi_handle_t *image); 111 efi_status_t (EFIAPI *start_image)(efi_handle_t handle, 112 unsigned long *exitdata_size, 113 s16 **exitdata); 114 efi_status_t (EFIAPI *exit)(efi_handle_t handle, 115 efi_status_t exit_status, 116 unsigned long exitdata_size, s16 *exitdata); 117 efi_status_t (EFIAPI *unload_image)(efi_handle_t image_handle); 118 efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); 119 120 efi_status_t (EFIAPI *get_next_monotonic_count)(u64 *count); 121 efi_status_t (EFIAPI *stall)(unsigned long usecs); 122 efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, 123 uint64_t watchdog_code, unsigned long data_size, 124 uint16_t *watchdog_data); 125 efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, 126 efi_handle_t *driver_image_handle, 127 struct efi_device_path *remaining_device_path, 128 bool recursive); 129 efi_status_t (EFIAPI *disconnect_controller)( 130 efi_handle_t controller_handle, 131 efi_handle_t driver_image_handle, 132 efi_handle_t child_handle); 133 #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 134 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 135 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 136 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 137 #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 138 #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 139 efi_status_t (EFIAPI *open_protocol)(efi_handle_t handle, 140 const efi_guid_t *protocol, void **interface, 141 efi_handle_t agent_handle, 142 efi_handle_t controller_handle, u32 attributes); 143 efi_status_t (EFIAPI *close_protocol)( 144 efi_handle_t handle, const efi_guid_t *protocol, 145 efi_handle_t agent_handle, 146 efi_handle_t controller_handle); 147 efi_status_t(EFIAPI *open_protocol_information)(efi_handle_t handle, 148 const efi_guid_t *protocol, 149 struct efi_open_protocol_info_entry **entry_buffer, 150 efi_uintn_t *entry_count); 151 efi_status_t (EFIAPI *protocols_per_handle)(efi_handle_t handle, 152 efi_guid_t ***protocol_buffer, 153 efi_uintn_t *protocols_buffer_count); 154 efi_status_t (EFIAPI *locate_handle_buffer) ( 155 enum efi_locate_search_type search_type, 156 const efi_guid_t *protocol, void *search_key, 157 efi_uintn_t *no_handles, efi_handle_t **buffer); 158 efi_status_t (EFIAPI *locate_protocol)(const efi_guid_t *protocol, 159 void *registration, void **protocol_interface); 160 efi_status_t (EFIAPI *install_multiple_protocol_interfaces)( 161 void **handle, ...); 162 efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)( 163 void *handle, ...); 164 efi_status_t (EFIAPI *calculate_crc32)(void *data, 165 unsigned long data_size, uint32_t *crc32); 166 void (EFIAPI *copy_mem)(void *destination, const void *source, 167 size_t length); 168 void (EFIAPI *set_mem)(void *buffer, size_t size, uint8_t value); 169 void *create_event_ex; 170 }; 171 172 /* Types and defines for EFI ResetSystem */ 173 enum efi_reset_type { 174 EFI_RESET_COLD = 0, 175 EFI_RESET_WARM = 1, 176 EFI_RESET_SHUTDOWN = 2 177 }; 178 179 /* EFI Runtime Services table */ 180 #define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL 181 #define EFI_RUNTIME_SERVICES_REVISION 0x00010000 182 183 struct efi_runtime_services { 184 struct efi_table_hdr hdr; 185 efi_status_t (EFIAPI *get_time)(struct efi_time *time, 186 struct efi_time_cap *capabilities); 187 efi_status_t (EFIAPI *set_time)(struct efi_time *time); 188 efi_status_t (EFIAPI *get_wakeup_time)(char *enabled, char *pending, 189 struct efi_time *time); 190 efi_status_t (EFIAPI *set_wakeup_time)(char enabled, 191 struct efi_time *time); 192 efi_status_t (EFIAPI *set_virtual_address_map)( 193 unsigned long memory_map_size, 194 unsigned long descriptor_size, 195 uint32_t descriptor_version, 196 struct efi_mem_desc *virtmap); 197 efi_status_t (*convert_pointer)(unsigned long dbg, void **address); 198 efi_status_t (EFIAPI *get_variable)(s16 *variable_name, 199 efi_guid_t *vendor, u32 *attributes, 200 unsigned long *data_size, void *data); 201 efi_status_t (EFIAPI *get_next_variable)( 202 unsigned long *variable_name_size, 203 s16 *variable_name, efi_guid_t *vendor); 204 efi_status_t (EFIAPI *set_variable)(s16 *variable_name, 205 efi_guid_t *vendor, u32 attributes, 206 unsigned long data_size, void *data); 207 efi_status_t (EFIAPI *get_next_high_mono_count)( 208 uint32_t *high_count); 209 void (EFIAPI *reset_system)(enum efi_reset_type reset_type, 210 efi_status_t reset_status, 211 unsigned long data_size, void *reset_data); 212 void *update_capsule; 213 void *query_capsule_caps; 214 void *query_variable_info; 215 }; 216 217 /* EFI Configuration Table and GUID definitions */ 218 #define NULL_GUID \ 219 EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ 220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) 221 222 #define EFI_GLOBAL_VARIABLE_GUID \ 223 EFI_GUID(0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, \ 224 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c) 225 226 #define LOADED_IMAGE_PROTOCOL_GUID \ 227 EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \ 228 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 229 230 #define EFI_FDT_GUID \ 231 EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \ 232 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) 233 234 #define SMBIOS_TABLE_GUID \ 235 EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \ 236 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 237 238 struct efi_configuration_table 239 { 240 efi_guid_t guid; 241 void *table; 242 }; 243 244 #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) 245 246 struct efi_system_table { 247 struct efi_table_hdr hdr; 248 unsigned long fw_vendor; /* physical addr of wchar_t vendor string */ 249 u32 fw_revision; 250 efi_handle_t con_in_handle; 251 struct efi_simple_input_interface *con_in; 252 efi_handle_t con_out_handle; 253 struct efi_simple_text_output_protocol *con_out; 254 efi_handle_t stderr_handle; 255 struct efi_simple_text_output_protocol *std_err; 256 struct efi_runtime_services *runtime; 257 struct efi_boot_services *boottime; 258 efi_uintn_t nr_tables; 259 struct efi_configuration_table *tables; 260 }; 261 262 #define LOADED_IMAGE_GUID \ 263 EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \ 264 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 265 266 struct efi_loaded_image { 267 u32 revision; 268 void *parent_handle; 269 struct efi_system_table *system_table; 270 void *device_handle; 271 void *file_path; 272 void *reserved; 273 u32 load_options_size; 274 void *load_options; 275 void *image_base; 276 aligned_u64 image_size; 277 unsigned int image_code_type; 278 unsigned int image_data_type; 279 unsigned long unload; 280 281 /* Below are efi loader private fields */ 282 #ifdef CONFIG_EFI_LOADER 283 efi_status_t exit_status; 284 struct jmp_buf_data exit_jmp; 285 #endif 286 }; 287 288 #define DEVICE_PATH_GUID \ 289 EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \ 290 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b ) 291 292 #define DEVICE_PATH_TYPE_END 0x7f 293 # define DEVICE_PATH_SUB_TYPE_END 0xff 294 295 struct efi_device_path { 296 u8 type; 297 u8 sub_type; 298 u16 length; 299 } __packed; 300 301 struct efi_mac_addr { 302 u8 addr[32]; 303 } __packed; 304 305 #define DEVICE_PATH_TYPE_HARDWARE_DEVICE 0x01 306 # define DEVICE_PATH_SUB_TYPE_MEMORY 0x03 307 # define DEVICE_PATH_SUB_TYPE_VENDOR 0x04 308 309 struct efi_device_path_memory { 310 struct efi_device_path dp; 311 u32 memory_type; 312 u64 start_address; 313 u64 end_address; 314 } __packed; 315 316 struct efi_device_path_vendor { 317 struct efi_device_path dp; 318 efi_guid_t guid; 319 u8 vendor_data[]; 320 } __packed; 321 322 #define DEVICE_PATH_TYPE_ACPI_DEVICE 0x02 323 # define DEVICE_PATH_SUB_TYPE_ACPI_DEVICE 0x01 324 325 #define EFI_PNP_ID(ID) (u32)(((ID) << 16) | 0x41D0) 326 #define EISA_PNP_ID(ID) EFI_PNP_ID(ID) 327 #define EISA_PNP_NUM(ID) ((ID) >> 16) 328 329 struct efi_device_path_acpi_path { 330 struct efi_device_path dp; 331 u32 hid; 332 u32 uid; 333 } __packed; 334 335 #define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03 336 # define DEVICE_PATH_SUB_TYPE_MSG_ATAPI 0x01 337 # define DEVICE_PATH_SUB_TYPE_MSG_SCSI 0x02 338 # define DEVICE_PATH_SUB_TYPE_MSG_USB 0x05 339 # define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b 340 # define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS 0x0f 341 # define DEVICE_PATH_SUB_TYPE_MSG_SD 0x1a 342 # define DEVICE_PATH_SUB_TYPE_MSG_MMC 0x1d 343 344 struct efi_device_path_atapi { 345 struct efi_device_path dp; 346 u8 primary_secondary; 347 u8 slave_master; 348 u16 logical_unit_number; 349 } __packed; 350 351 struct efi_device_path_scsi { 352 struct efi_device_path dp; 353 u16 target_id; 354 u16 logical_unit_number; 355 } __packed; 356 357 struct efi_device_path_usb { 358 struct efi_device_path dp; 359 u8 parent_port_number; 360 u8 usb_interface; 361 } __packed; 362 363 struct efi_device_path_mac_addr { 364 struct efi_device_path dp; 365 struct efi_mac_addr mac; 366 u8 if_type; 367 } __packed; 368 369 struct efi_device_path_usb_class { 370 struct efi_device_path dp; 371 u16 vendor_id; 372 u16 product_id; 373 u8 device_class; 374 u8 device_subclass; 375 u8 device_protocol; 376 } __packed; 377 378 struct efi_device_path_sd_mmc_path { 379 struct efi_device_path dp; 380 u8 slot_number; 381 } __packed; 382 383 #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 384 # define DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH 0x01 385 # define DEVICE_PATH_SUB_TYPE_CDROM_PATH 0x02 386 # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 387 388 struct efi_device_path_hard_drive_path { 389 struct efi_device_path dp; 390 u32 partition_number; 391 u64 partition_start; 392 u64 partition_end; 393 u8 partition_signature[16]; 394 u8 partmap_type; 395 u8 signature_type; 396 } __packed; 397 398 struct efi_device_path_cdrom_path { 399 struct efi_device_path dp; 400 u32 boot_entry; 401 u64 partition_start; 402 u64 partition_end; 403 } __packed; 404 405 struct efi_device_path_file_path { 406 struct efi_device_path dp; 407 u16 str[]; 408 } __packed; 409 410 #define BLOCK_IO_GUID \ 411 EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \ 412 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 413 414 struct efi_block_io_media 415 { 416 u32 media_id; 417 char removable_media; 418 char media_present; 419 char logical_partition; 420 char read_only; 421 char write_caching; 422 u8 pad[3]; 423 u32 block_size; 424 u32 io_align; 425 u8 pad2[4]; 426 u64 last_block; 427 /* Added in revision 2 of the protocol */ 428 u64 lowest_aligned_lba; 429 u32 logical_blocks_per_physical_block; 430 /* Added in revision 3 of the protocol */ 431 u32 optimal_transfer_length_granualarity; 432 }; 433 434 #define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001 435 #define EFI_BLOCK_IO_PROTOCOL_REVISION3 0x0002001f 436 437 struct efi_block_io { 438 u64 revision; 439 struct efi_block_io_media *media; 440 efi_status_t (EFIAPI *reset)(struct efi_block_io *this, 441 char extended_verification); 442 efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this, 443 u32 media_id, u64 lba, efi_uintn_t buffer_size, 444 void *buffer); 445 efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this, 446 u32 media_id, u64 lba, efi_uintn_t buffer_size, 447 void *buffer); 448 efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this); 449 }; 450 451 struct simple_text_output_mode { 452 s32 max_mode; 453 s32 mode; 454 s32 attribute; 455 s32 cursor_column; 456 s32 cursor_row; 457 bool cursor_visible; 458 }; 459 460 461 #define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \ 462 EFI_GUID(0x387477c2, 0x69c7, 0x11d2, \ 463 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 464 465 #define EFI_BLACK 0x00 466 #define EFI_BLUE 0x01 467 #define EFI_GREEN 0x02 468 #define EFI_CYAN 0x03 469 #define EFI_RED 0x04 470 #define EFI_MAGENTA 0x05 471 #define EFI_BROWN 0x06 472 #define EFI_LIGHTGRAY 0x07 473 #define EFI_BRIGHT 0x08 474 #define EFI_DARKGRAY 0x08 475 #define EFI_LIGHTBLUE 0x09 476 #define EFI_LIGHTGREEN 0x0a 477 #define EFI_LIGHTCYAN 0x0b 478 #define EFI_LIGHTRED 0x0c 479 #define EFI_LIGHTMAGENTA 0x0d 480 #define EFI_YELLOW 0x0e 481 #define EFI_WHITE 0x0f 482 #define EFI_BACKGROUND_BLACK 0x00 483 #define EFI_BACKGROUND_BLUE 0x10 484 #define EFI_BACKGROUND_GREEN 0x20 485 #define EFI_BACKGROUND_CYAN 0x30 486 #define EFI_BACKGROUND_RED 0x40 487 #define EFI_BACKGROUND_MAGENTA 0x50 488 #define EFI_BACKGROUND_BROWN 0x60 489 #define EFI_BACKGROUND_LIGHTGRAY 0x70 490 491 /* extract foreground color from EFI attribute */ 492 #define EFI_ATTR_FG(attr) ((attr) & 0x07) 493 /* treat high bit of FG as bright/bold (similar to edk2) */ 494 #define EFI_ATTR_BOLD(attr) (((attr) >> 3) & 0x01) 495 /* extract background color from EFI attribute */ 496 #define EFI_ATTR_BG(attr) (((attr) >> 4) & 0x7) 497 498 struct efi_simple_text_output_protocol { 499 void *reset; 500 efi_status_t (EFIAPI *output_string)( 501 struct efi_simple_text_output_protocol *this, 502 const efi_string_t str); 503 efi_status_t (EFIAPI *test_string)( 504 struct efi_simple_text_output_protocol *this, 505 const efi_string_t str); 506 efi_status_t(EFIAPI *query_mode)( 507 struct efi_simple_text_output_protocol *this, 508 unsigned long mode_number, unsigned long *columns, 509 unsigned long *rows); 510 efi_status_t(EFIAPI *set_mode)( 511 struct efi_simple_text_output_protocol *this, 512 unsigned long mode_number); 513 efi_status_t(EFIAPI *set_attribute)( 514 struct efi_simple_text_output_protocol *this, 515 unsigned long attribute); 516 efi_status_t(EFIAPI *clear_screen) ( 517 struct efi_simple_text_output_protocol *this); 518 efi_status_t(EFIAPI *set_cursor_position) ( 519 struct efi_simple_text_output_protocol *this, 520 unsigned long column, unsigned long row); 521 efi_status_t(EFIAPI *enable_cursor)( 522 struct efi_simple_text_output_protocol *this, 523 bool enable); 524 struct simple_text_output_mode *mode; 525 }; 526 527 struct efi_input_key { 528 u16 scan_code; 529 s16 unicode_char; 530 }; 531 532 #define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \ 533 EFI_GUID(0x387477c1, 0x69c7, 0x11d2, \ 534 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 535 536 struct efi_simple_input_interface { 537 efi_status_t(EFIAPI *reset)(struct efi_simple_input_interface *this, 538 bool ExtendedVerification); 539 efi_status_t(EFIAPI *read_key_stroke)( 540 struct efi_simple_input_interface *this, 541 struct efi_input_key *key); 542 struct efi_event *wait_for_key; 543 }; 544 545 #define CONSOLE_CONTROL_GUID \ 546 EFI_GUID(0xf42f7782, 0x12e, 0x4c12, \ 547 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21) 548 #define EFI_CONSOLE_MODE_TEXT 0 549 #define EFI_CONSOLE_MODE_GFX 1 550 551 struct efi_console_control_protocol 552 { 553 efi_status_t (EFIAPI *get_mode)( 554 struct efi_console_control_protocol *this, int *mode, 555 char *uga_exists, char *std_in_locked); 556 efi_status_t (EFIAPI *set_mode)( 557 struct efi_console_control_protocol *this, int mode); 558 efi_status_t (EFIAPI *lock_std_in)( 559 struct efi_console_control_protocol *this, 560 uint16_t *password); 561 }; 562 563 #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \ 564 EFI_GUID(0x8b843e20, 0x8132, 0x4852, \ 565 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c) 566 567 struct efi_device_path_to_text_protocol 568 { 569 uint16_t *(EFIAPI *convert_device_node_to_text)( 570 struct efi_device_path *device_node, 571 bool display_only, 572 bool allow_shortcuts); 573 uint16_t *(EFIAPI *convert_device_path_to_text)( 574 struct efi_device_path *device_path, 575 bool display_only, 576 bool allow_shortcuts); 577 }; 578 579 #define EFI_GOP_GUID \ 580 EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \ 581 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) 582 583 #define EFI_GOT_RGBA8 0 584 #define EFI_GOT_BGRA8 1 585 #define EFI_GOT_BITMASK 2 586 587 struct efi_gop_mode_info 588 { 589 u32 version; 590 u32 width; 591 u32 height; 592 u32 pixel_format; 593 u32 pixel_bitmask[4]; 594 u32 pixels_per_scanline; 595 }; 596 597 struct efi_gop_mode 598 { 599 u32 max_mode; 600 u32 mode; 601 struct efi_gop_mode_info *info; 602 unsigned long info_size; 603 efi_physical_addr_t fb_base; 604 unsigned long fb_size; 605 }; 606 607 #define EFI_BLT_VIDEO_FILL 0 608 #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1 609 #define EFI_BLT_BUFFER_TO_VIDEO 2 610 #define EFI_BLT_VIDEO_TO_VIDEO 3 611 612 struct efi_gop 613 { 614 efi_status_t (EFIAPI *query_mode)(struct efi_gop *this, u32 mode_number, 615 efi_uintn_t *size_of_info, 616 struct efi_gop_mode_info **info); 617 efi_status_t (EFIAPI *set_mode)(struct efi_gop *this, u32 mode_number); 618 efi_status_t (EFIAPI *blt)(struct efi_gop *this, void *buffer, 619 u32 operation, efi_uintn_t sx, 620 efi_uintn_t sy, efi_uintn_t dx, 621 efi_uintn_t dy, efi_uintn_t width, 622 efi_uintn_t height, efi_uintn_t delta); 623 struct efi_gop_mode *mode; 624 }; 625 626 #define EFI_SIMPLE_NETWORK_GUID \ 627 EFI_GUID(0xa19832b9, 0xac25, 0x11d3, \ 628 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 629 630 struct efi_mac_address { 631 char mac_addr[32]; 632 }; 633 634 struct efi_ip_address { 635 u8 ip_addr[16]; 636 }; 637 638 enum efi_simple_network_state { 639 EFI_NETWORK_STOPPED, 640 EFI_NETWORK_STARTED, 641 EFI_NETWORK_INITIALIZED, 642 }; 643 644 struct efi_simple_network_mode { 645 enum efi_simple_network_state state; 646 u32 hwaddr_size; 647 u32 media_header_size; 648 u32 max_packet_size; 649 u32 nvram_size; 650 u32 nvram_access_size; 651 u32 receive_filter_mask; 652 u32 receive_filter_setting; 653 u32 max_mcast_filter_count; 654 u32 mcast_filter_count; 655 struct efi_mac_address mcast_filter[16]; 656 struct efi_mac_address current_address; 657 struct efi_mac_address broadcast_address; 658 struct efi_mac_address permanent_address; 659 u8 if_type; 660 u8 mac_changeable; 661 u8 multitx_supported; 662 u8 media_present_supported; 663 u8 media_present; 664 }; 665 666 /* receive_filters bit mask */ 667 #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01 668 #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02 669 #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04 670 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 671 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 672 673 /* interrupt status bit mask */ 674 #define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01 675 #define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02 676 #define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04 677 #define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08 678 679 /* revision of the simple network protocol */ 680 #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000 681 682 struct efi_simple_network 683 { 684 u64 revision; 685 efi_status_t (EFIAPI *start)(struct efi_simple_network *this); 686 efi_status_t (EFIAPI *stop)(struct efi_simple_network *this); 687 efi_status_t (EFIAPI *initialize)(struct efi_simple_network *this, 688 ulong extra_rx, ulong extra_tx); 689 efi_status_t (EFIAPI *reset)(struct efi_simple_network *this, 690 int extended_verification); 691 efi_status_t (EFIAPI *shutdown)(struct efi_simple_network *this); 692 efi_status_t (EFIAPI *receive_filters)(struct efi_simple_network *this, 693 u32 enable, u32 disable, int reset_mcast_filter, 694 ulong mcast_filter_count, 695 struct efi_mac_address *mcast_filter); 696 efi_status_t (EFIAPI *station_address)(struct efi_simple_network *this, 697 int reset, struct efi_mac_address *new_mac); 698 efi_status_t (EFIAPI *statistics)(struct efi_simple_network *this, 699 int reset, ulong *stat_size, void *stat_table); 700 efi_status_t (EFIAPI *mcastiptomac)(struct efi_simple_network *this, 701 int ipv6, struct efi_ip_address *ip, 702 struct efi_mac_address *mac); 703 efi_status_t (EFIAPI *nvdata)(struct efi_simple_network *this, 704 int read_write, ulong offset, ulong buffer_size, 705 char *buffer); 706 efi_status_t (EFIAPI *get_status)(struct efi_simple_network *this, 707 u32 *int_status, void **txbuf); 708 efi_status_t (EFIAPI *transmit)(struct efi_simple_network *this, 709 size_t header_size, size_t buffer_size, void *buffer, 710 struct efi_mac_address *src_addr, 711 struct efi_mac_address *dest_addr, u16 *protocol); 712 efi_status_t (EFIAPI *receive)(struct efi_simple_network *this, 713 size_t *header_size, size_t *buffer_size, void *buffer, 714 struct efi_mac_address *src_addr, 715 struct efi_mac_address *dest_addr, u16 *protocol); 716 struct efi_event *wait_for_packet; 717 struct efi_simple_network_mode *mode; 718 }; 719 720 #define EFI_PXE_GUID \ 721 EFI_GUID(0x03c4e603, 0xac28, 0x11d3, \ 722 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 723 724 struct efi_pxe_packet { 725 u8 packet[1472]; 726 }; 727 728 struct efi_pxe_mode 729 { 730 u8 unused[52]; 731 struct efi_pxe_packet dhcp_discover; 732 struct efi_pxe_packet dhcp_ack; 733 struct efi_pxe_packet proxy_offer; 734 struct efi_pxe_packet pxe_discover; 735 struct efi_pxe_packet pxe_reply; 736 }; 737 738 struct efi_pxe { 739 u64 rev; 740 void (EFIAPI *start)(void); 741 void (EFIAPI *stop)(void); 742 void (EFIAPI *dhcp)(void); 743 void (EFIAPI *discover)(void); 744 void (EFIAPI *mftp)(void); 745 void (EFIAPI *udpwrite)(void); 746 void (EFIAPI *udpread)(void); 747 void (EFIAPI *setipfilter)(void); 748 void (EFIAPI *arp)(void); 749 void (EFIAPI *setparams)(void); 750 void (EFIAPI *setstationip)(void); 751 void (EFIAPI *setpackets)(void); 752 struct efi_pxe_mode *mode; 753 }; 754 755 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ 756 EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \ 757 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 758 #define EFI_FILE_PROTOCOL_REVISION 0x00010000 759 760 struct efi_file_handle { 761 u64 rev; 762 efi_status_t (EFIAPI *open)(struct efi_file_handle *file, 763 struct efi_file_handle **new_handle, 764 s16 *file_name, u64 open_mode, u64 attributes); 765 efi_status_t (EFIAPI *close)(struct efi_file_handle *file); 766 efi_status_t (EFIAPI *delete)(struct efi_file_handle *file); 767 efi_status_t (EFIAPI *read)(struct efi_file_handle *file, 768 u64 *buffer_size, void *buffer); 769 efi_status_t (EFIAPI *write)(struct efi_file_handle *file, 770 u64 *buffer_size, void *buffer); 771 efi_status_t (EFIAPI *getpos)(struct efi_file_handle *file, 772 u64 *pos); 773 efi_status_t (EFIAPI *setpos)(struct efi_file_handle *file, 774 u64 pos); 775 efi_status_t (EFIAPI *getinfo)(struct efi_file_handle *file, 776 efi_guid_t *info_type, u64 *buffer_size, void *buffer); 777 efi_status_t (EFIAPI *setinfo)(struct efi_file_handle *file, 778 efi_guid_t *info_type, u64 buffer_size, void *buffer); 779 efi_status_t (EFIAPI *flush)(struct efi_file_handle *file); 780 }; 781 782 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ 783 EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \ 784 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 785 #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 786 787 struct efi_simple_file_system_protocol { 788 u64 rev; 789 efi_status_t (EFIAPI *open_volume)(struct efi_simple_file_system_protocol *this, 790 struct efi_file_handle **root); 791 }; 792 793 #define EFI_FILE_INFO_GUID \ 794 EFI_GUID(0x9576e92, 0x6d3f, 0x11d2, \ 795 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 796 797 #define EFI_FILE_MODE_READ 0x0000000000000001 798 #define EFI_FILE_MODE_WRITE 0x0000000000000002 799 #define EFI_FILE_MODE_CREATE 0x8000000000000000 800 801 #define EFI_FILE_READ_ONLY 0x0000000000000001 802 #define EFI_FILE_HIDDEN 0x0000000000000002 803 #define EFI_FILE_SYSTEM 0x0000000000000004 804 #define EFI_FILE_RESERVED 0x0000000000000008 805 #define EFI_FILE_DIRECTORY 0x0000000000000010 806 #define EFI_FILE_ARCHIVE 0x0000000000000020 807 #define EFI_FILE_VALID_ATTR 0x0000000000000037 808 809 struct efi_file_info { 810 u64 size; 811 u64 file_size; 812 u64 physical_size; 813 struct efi_time create_time; 814 struct efi_time last_access_time; 815 struct efi_time modification_time; 816 u64 attribute; 817 s16 file_name[0]; 818 }; 819 820 #define EFI_DRIVER_BINDING_PROTOCOL_GUID \ 821 EFI_GUID(0x18a031ab, 0xb443, 0x4d1a,\ 822 0xa5, 0xc0, 0x0c, 0x09, 0x26, 0x1e, 0x9f, 0x71) 823 struct efi_driver_binding_protocol { 824 efi_status_t (EFIAPI * supported)( 825 struct efi_driver_binding_protocol *this, 826 efi_handle_t controller_handle, 827 struct efi_device_path *remaining_device_path); 828 efi_status_t (EFIAPI * start)( 829 struct efi_driver_binding_protocol *this, 830 efi_handle_t controller_handle, 831 struct efi_device_path *remaining_device_path); 832 efi_status_t (EFIAPI * stop)( 833 struct efi_driver_binding_protocol *this, 834 efi_handle_t controller_handle, 835 efi_uintn_t number_of_children, 836 efi_handle_t *child_handle_buffer); 837 u32 version; 838 efi_handle_t image_handle; 839 efi_handle_t driver_binding_handle; 840 }; 841 842 #endif 843