1867a6ac8SSimon Glass /* 2867a6ac8SSimon Glass * Extensible Firmware Interface 3867a6ac8SSimon Glass * Based on 'Extensible Firmware Interface Specification' version 0.9, 4867a6ac8SSimon Glass * April 30, 1999 5867a6ac8SSimon Glass * 6867a6ac8SSimon Glass * Copyright (C) 1999 VA Linux Systems 7867a6ac8SSimon Glass * Copyright (C) 1999 Walt Drummond <drummond@valinux.com> 8867a6ac8SSimon Glass * Copyright (C) 1999, 2002-2003 Hewlett-Packard Co. 9867a6ac8SSimon Glass * David Mosberger-Tang <davidm@hpl.hp.com> 10867a6ac8SSimon Glass * Stephane Eranian <eranian@hpl.hp.com> 11867a6ac8SSimon Glass * 12867a6ac8SSimon Glass * From include/linux/efi.h in kernel 4.1 with some additions/subtractions 13867a6ac8SSimon Glass */ 14867a6ac8SSimon Glass 15867a6ac8SSimon Glass #ifndef _EFI_API_H 16867a6ac8SSimon Glass #define _EFI_API_H 17867a6ac8SSimon Glass 18867a6ac8SSimon Glass #include <efi.h> 19867a6ac8SSimon Glass 20a86aeaf2SAlexander Graf #ifdef CONFIG_EFI_LOADER 21a86aeaf2SAlexander Graf #include <asm/setjmp.h> 22a86aeaf2SAlexander Graf #endif 23a86aeaf2SAlexander Graf 242bb9b79dSAlexander Graf /* Types and defines for EFI CreateEvent */ 25*b521d29eSxypron.glpk@gmx.de enum efi_timer_delay { 262bb9b79dSAlexander Graf EFI_TIMER_STOP = 0, 272bb9b79dSAlexander Graf EFI_TIMER_PERIODIC = 1, 282bb9b79dSAlexander Graf EFI_TIMER_RELATIVE = 2 292bb9b79dSAlexander Graf }; 302bb9b79dSAlexander Graf 31503f2695Sxypron.glpk@gmx.de #define UINTN size_t 32503f2695Sxypron.glpk@gmx.de 33c6841592Sxypron.glpk@gmx.de #define EVT_TIMER 0x80000000 34c6841592Sxypron.glpk@gmx.de #define EVT_RUNTIME 0x40000000 3537a980b3SJonathan Gray #define EVT_NOTIFY_WAIT 0x00000100 3637a980b3SJonathan Gray #define EVT_NOTIFY_SIGNAL 0x00000200 37c6841592Sxypron.glpk@gmx.de #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 38c6841592Sxypron.glpk@gmx.de #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 39c6841592Sxypron.glpk@gmx.de 40c6841592Sxypron.glpk@gmx.de #define TPL_APPLICATION 0x04 41c6841592Sxypron.glpk@gmx.de #define TPL_CALLBACK 0x08 42c6841592Sxypron.glpk@gmx.de #define TPL_NOTIFY 0x10 43c6841592Sxypron.glpk@gmx.de #define TPL_HIGH_LEVEL 0x1F 4437a980b3SJonathan Gray 452fd945feSxypron.glpk@gmx.de struct efi_event; 462fd945feSxypron.glpk@gmx.de 47867a6ac8SSimon Glass /* EFI Boot Services table */ 48867a6ac8SSimon Glass struct efi_boot_services { 49867a6ac8SSimon Glass struct efi_table_hdr hdr; 50503f2695Sxypron.glpk@gmx.de efi_status_t (EFIAPI *raise_tpl)(UINTN new_tpl); 51503f2695Sxypron.glpk@gmx.de void (EFIAPI *restore_tpl)(UINTN old_tpl); 52867a6ac8SSimon Glass 53867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pages)(int, int, unsigned long, 54867a6ac8SSimon Glass efi_physical_addr_t *); 55867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pages)(efi_physical_addr_t, unsigned long); 56867a6ac8SSimon Glass efi_status_t (EFIAPI *get_memory_map)(unsigned long *memory_map_size, 57867a6ac8SSimon Glass struct efi_mem_desc *desc, unsigned long *key, 58867a6ac8SSimon Glass unsigned long *desc_size, u32 *desc_version); 59867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pool)(int, unsigned long, void **); 60867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pool)(void *); 61867a6ac8SSimon Glass 62*b521d29eSxypron.glpk@gmx.de efi_status_t (EFIAPI *create_event)(uint32_t type, 63503f2695Sxypron.glpk@gmx.de UINTN notify_tpl, 642fd945feSxypron.glpk@gmx.de void (EFIAPI *notify_function) ( 652fd945feSxypron.glpk@gmx.de struct efi_event *event, 662bb9b79dSAlexander Graf void *context), 672fd945feSxypron.glpk@gmx.de void *notify_context, struct efi_event **event); 68*b521d29eSxypron.glpk@gmx.de efi_status_t (EFIAPI *set_timer)(struct efi_event *event, 69*b521d29eSxypron.glpk@gmx.de enum efi_timer_delay type, 702bb9b79dSAlexander Graf uint64_t trigger_time); 71867a6ac8SSimon Glass efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events, 722fd945feSxypron.glpk@gmx.de struct efi_event **event, unsigned long *index); 732fd945feSxypron.glpk@gmx.de efi_status_t (EFIAPI *signal_event)(struct efi_event *event); 742fd945feSxypron.glpk@gmx.de efi_status_t (EFIAPI *close_event)(struct efi_event *event); 752fd945feSxypron.glpk@gmx.de efi_status_t (EFIAPI *check_event)(struct efi_event *event); 76e0549f8aSxypron.glpk@gmx.de #define EFI_NATIVE_INTERFACE 0x00000000 772bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_protocol_interface)( 782bb9b79dSAlexander Graf void **handle, efi_guid_t *protocol, 792bb9b79dSAlexander Graf int protocol_interface_type, void *protocol_interface); 802bb9b79dSAlexander Graf efi_status_t (EFIAPI *reinstall_protocol_interface)( 812bb9b79dSAlexander Graf void *handle, efi_guid_t *protocol, 822bb9b79dSAlexander Graf void *old_interface, void *new_interface); 832bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_protocol_interface)(void *handle, 842bb9b79dSAlexander Graf efi_guid_t *protocol, void *protocol_interface); 85867a6ac8SSimon Glass efi_status_t (EFIAPI *handle_protocol)(efi_handle_t, efi_guid_t *, 86867a6ac8SSimon Glass void **); 87867a6ac8SSimon Glass void *reserved; 882bb9b79dSAlexander Graf efi_status_t (EFIAPI *register_protocol_notify)( 892fd945feSxypron.glpk@gmx.de efi_guid_t *protocol, struct efi_event *event, 902bb9b79dSAlexander Graf void **registration); 91867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle)( 92867a6ac8SSimon Glass enum efi_locate_search_type search_type, 93867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 94867a6ac8SSimon Glass unsigned long *buffer_size, efi_handle_t *buffer); 95867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_device_path)(efi_guid_t *protocol, 96867a6ac8SSimon Glass struct efi_device_path **device_path, 97867a6ac8SSimon Glass efi_handle_t *device); 982bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_configuration_table)( 992bb9b79dSAlexander Graf efi_guid_t *guid, void *table); 100867a6ac8SSimon Glass 101867a6ac8SSimon Glass efi_status_t (EFIAPI *load_image)(bool boot_policiy, 102867a6ac8SSimon Glass efi_handle_t parent_image, 103867a6ac8SSimon Glass struct efi_device_path *file_path, void *source_buffer, 104867a6ac8SSimon Glass unsigned long source_size, efi_handle_t *image); 105867a6ac8SSimon Glass efi_status_t (EFIAPI *start_image)(efi_handle_t handle, 106867a6ac8SSimon Glass unsigned long *exitdata_size, 107867a6ac8SSimon Glass s16 **exitdata); 108867a6ac8SSimon Glass efi_status_t (EFIAPI *exit)(efi_handle_t handle, 109867a6ac8SSimon Glass efi_status_t exit_status, 110867a6ac8SSimon Glass unsigned long exitdata_size, s16 *exitdata); 1112bb9b79dSAlexander Graf efi_status_t (EFIAPI *unload_image)(void *image_handle); 112867a6ac8SSimon Glass efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); 113867a6ac8SSimon Glass 114867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_monotonic_count)(u64 *count); 115867a6ac8SSimon Glass efi_status_t (EFIAPI *stall)(unsigned long usecs); 1162bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, 1172bb9b79dSAlexander Graf uint64_t watchdog_code, unsigned long data_size, 1182bb9b79dSAlexander Graf uint16_t *watchdog_data); 119867a6ac8SSimon Glass efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, 120867a6ac8SSimon Glass efi_handle_t *driver_image_handle, 121867a6ac8SSimon Glass struct efi_device_path *remaining_device_path, 122867a6ac8SSimon Glass bool recursive); 1232bb9b79dSAlexander Graf efi_status_t (EFIAPI *disconnect_controller)(void *controller_handle, 1242bb9b79dSAlexander Graf void *driver_image_handle, void *child_handle); 125867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 126867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 127867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 128867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 129867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 130867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 131867a6ac8SSimon Glass efi_status_t (EFIAPI *open_protocol)(efi_handle_t handle, 132867a6ac8SSimon Glass efi_guid_t *protocol, void **interface, 133867a6ac8SSimon Glass efi_handle_t agent_handle, 134867a6ac8SSimon Glass efi_handle_t controller_handle, u32 attributes); 1352bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_protocol)(void *handle, 1362bb9b79dSAlexander Graf efi_guid_t *protocol, void *agent_handle, 1372bb9b79dSAlexander Graf void *controller_handle); 138867a6ac8SSimon Glass efi_status_t(EFIAPI *open_protocol_information)(efi_handle_t handle, 139867a6ac8SSimon Glass efi_guid_t *protocol, 140867a6ac8SSimon Glass struct efi_open_protocol_info_entry **entry_buffer, 141867a6ac8SSimon Glass unsigned long *entry_count); 142867a6ac8SSimon Glass efi_status_t (EFIAPI *protocols_per_handle)(efi_handle_t handle, 143867a6ac8SSimon Glass efi_guid_t ***protocol_buffer, 144867a6ac8SSimon Glass unsigned long *protocols_buffer_count); 145867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle_buffer) ( 146867a6ac8SSimon Glass enum efi_locate_search_type search_type, 147867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 148867a6ac8SSimon Glass unsigned long *no_handles, efi_handle_t **buffer); 1492bb9b79dSAlexander Graf efi_status_t (EFIAPI *locate_protocol)(efi_guid_t *protocol, 1502bb9b79dSAlexander Graf void *registration, void **protocol_interface); 1512bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_multiple_protocol_interfaces)( 1522bb9b79dSAlexander Graf void **handle, ...); 1532bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)( 1542bb9b79dSAlexander Graf void *handle, ...); 1552bb9b79dSAlexander Graf efi_status_t (EFIAPI *calculate_crc32)(void *data, 1562bb9b79dSAlexander Graf unsigned long data_size, uint32_t *crc32); 1572bb9b79dSAlexander Graf void (EFIAPI *copy_mem)(void *destination, void *source, 1582bb9b79dSAlexander Graf unsigned long length); 1592bb9b79dSAlexander Graf void (EFIAPI *set_mem)(void *buffer, unsigned long size, 1602bb9b79dSAlexander Graf uint8_t value); 161867a6ac8SSimon Glass void *create_event_ex; 162867a6ac8SSimon Glass }; 163867a6ac8SSimon Glass 164867a6ac8SSimon Glass /* Types and defines for EFI ResetSystem */ 165867a6ac8SSimon Glass enum efi_reset_type { 166867a6ac8SSimon Glass EFI_RESET_COLD = 0, 167867a6ac8SSimon Glass EFI_RESET_WARM = 1, 168867a6ac8SSimon Glass EFI_RESET_SHUTDOWN = 2 169867a6ac8SSimon Glass }; 170867a6ac8SSimon Glass 171867a6ac8SSimon Glass /* EFI Runtime Services table */ 172867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL 173867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_REVISION 0x00010000 174867a6ac8SSimon Glass 175867a6ac8SSimon Glass struct efi_runtime_services { 176867a6ac8SSimon Glass struct efi_table_hdr hdr; 1772bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_time)(struct efi_time *time, 1782bb9b79dSAlexander Graf struct efi_time_cap *capabilities); 1792bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_time)(struct efi_time *time); 1802bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_wakeup_time)(char *enabled, char *pending, 1812bb9b79dSAlexander Graf struct efi_time *time); 1822bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_wakeup_time)(char enabled, 1832bb9b79dSAlexander Graf struct efi_time *time); 1842bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_virtual_address_map)( 1852bb9b79dSAlexander Graf unsigned long memory_map_size, 1862bb9b79dSAlexander Graf unsigned long descriptor_size, 1872bb9b79dSAlexander Graf uint32_t descriptor_version, 1882bb9b79dSAlexander Graf struct efi_mem_desc *virtmap); 1892bb9b79dSAlexander Graf efi_status_t (*convert_pointer)(unsigned long dbg, void **address); 190867a6ac8SSimon Glass efi_status_t (EFIAPI *get_variable)(s16 *variable_name, 191867a6ac8SSimon Glass efi_guid_t *vendor, u32 *attributes, 192867a6ac8SSimon Glass unsigned long *data_size, void *data); 193867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_variable)( 194867a6ac8SSimon Glass unsigned long *variable_name_size, 195867a6ac8SSimon Glass s16 *variable_name, efi_guid_t *vendor); 196867a6ac8SSimon Glass efi_status_t (EFIAPI *set_variable)(s16 *variable_name, 197867a6ac8SSimon Glass efi_guid_t *vendor, u32 attributes, 198867a6ac8SSimon Glass unsigned long data_size, void *data); 1992bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_next_high_mono_count)( 2002bb9b79dSAlexander Graf uint32_t *high_count); 201867a6ac8SSimon Glass void (EFIAPI *reset_system)(enum efi_reset_type reset_type, 202867a6ac8SSimon Glass efi_status_t reset_status, 203867a6ac8SSimon Glass unsigned long data_size, void *reset_data); 204867a6ac8SSimon Glass void *update_capsule; 205867a6ac8SSimon Glass void *query_capsule_caps; 206867a6ac8SSimon Glass void *query_variable_info; 207867a6ac8SSimon Glass }; 208867a6ac8SSimon Glass 209867a6ac8SSimon Glass /* EFI Configuration Table and GUID definitions */ 210867a6ac8SSimon Glass #define NULL_GUID \ 211867a6ac8SSimon Glass EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ 212867a6ac8SSimon Glass 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) 213867a6ac8SSimon Glass 214867a6ac8SSimon Glass #define LOADED_IMAGE_PROTOCOL_GUID \ 215867a6ac8SSimon Glass EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \ 216867a6ac8SSimon Glass 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 217867a6ac8SSimon Glass 2182bb9b79dSAlexander Graf #define EFI_FDT_GUID \ 2192bb9b79dSAlexander Graf EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \ 2202bb9b79dSAlexander Graf 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) 2212bb9b79dSAlexander Graf 222e663b350SAlexander Graf #define SMBIOS_TABLE_GUID \ 223e663b350SAlexander Graf EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \ 224e663b350SAlexander Graf 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 225e663b350SAlexander Graf 2262bb9b79dSAlexander Graf struct efi_configuration_table 2272bb9b79dSAlexander Graf { 2282bb9b79dSAlexander Graf efi_guid_t guid; 2292bb9b79dSAlexander Graf void *table; 2302bb9b79dSAlexander Graf }; 2312bb9b79dSAlexander Graf 2322bb9b79dSAlexander Graf #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) 2332bb9b79dSAlexander Graf 234867a6ac8SSimon Glass struct efi_system_table { 235867a6ac8SSimon Glass struct efi_table_hdr hdr; 236867a6ac8SSimon Glass unsigned long fw_vendor; /* physical addr of wchar_t vendor string */ 237867a6ac8SSimon Glass u32 fw_revision; 238867a6ac8SSimon Glass unsigned long con_in_handle; 239867a6ac8SSimon Glass struct efi_simple_input_interface *con_in; 240867a6ac8SSimon Glass unsigned long con_out_handle; 241867a6ac8SSimon Glass struct efi_simple_text_output_protocol *con_out; 242867a6ac8SSimon Glass unsigned long stderr_handle; 2432bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *std_err; 244867a6ac8SSimon Glass struct efi_runtime_services *runtime; 245867a6ac8SSimon Glass struct efi_boot_services *boottime; 246867a6ac8SSimon Glass unsigned long nr_tables; 2472bb9b79dSAlexander Graf struct efi_configuration_table *tables; 248867a6ac8SSimon Glass }; 249867a6ac8SSimon Glass 2502bb9b79dSAlexander Graf #define LOADED_IMAGE_GUID \ 2512bb9b79dSAlexander Graf EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \ 2522bb9b79dSAlexander Graf 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2532bb9b79dSAlexander Graf 254867a6ac8SSimon Glass struct efi_loaded_image { 255867a6ac8SSimon Glass u32 revision; 256867a6ac8SSimon Glass void *parent_handle; 257867a6ac8SSimon Glass struct efi_system_table *system_table; 258867a6ac8SSimon Glass void *device_handle; 259867a6ac8SSimon Glass void *file_path; 260867a6ac8SSimon Glass void *reserved; 261867a6ac8SSimon Glass u32 load_options_size; 262867a6ac8SSimon Glass void *load_options; 263867a6ac8SSimon Glass void *image_base; 264867a6ac8SSimon Glass aligned_u64 image_size; 265867a6ac8SSimon Glass unsigned int image_code_type; 266867a6ac8SSimon Glass unsigned int image_data_type; 267867a6ac8SSimon Glass unsigned long unload; 268a86aeaf2SAlexander Graf 269a86aeaf2SAlexander Graf /* Below are efi loader private fields */ 270a86aeaf2SAlexander Graf #ifdef CONFIG_EFI_LOADER 271a86aeaf2SAlexander Graf efi_status_t exit_status; 272a86aeaf2SAlexander Graf struct jmp_buf_data exit_jmp; 273a86aeaf2SAlexander Graf #endif 274867a6ac8SSimon Glass }; 275867a6ac8SSimon Glass 2762bb9b79dSAlexander Graf #define DEVICE_PATH_GUID \ 2772bb9b79dSAlexander Graf EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \ 2782bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b ) 2792bb9b79dSAlexander Graf 2802bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_END 0x7f 2812bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_END 0xff 2822bb9b79dSAlexander Graf 283867a6ac8SSimon Glass struct efi_device_path { 284867a6ac8SSimon Glass u8 type; 285867a6ac8SSimon Glass u8 sub_type; 286867a6ac8SSimon Glass u16 length; 287867a6ac8SSimon Glass }; 288867a6ac8SSimon Glass 289d7608abaSOleksandr Tymoshenko struct efi_mac_addr { 290d7608abaSOleksandr Tymoshenko u8 addr[32]; 291d7608abaSOleksandr Tymoshenko }; 292d7608abaSOleksandr Tymoshenko 293d7608abaSOleksandr Tymoshenko #define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03 294d7608abaSOleksandr Tymoshenko # define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b 295d7608abaSOleksandr Tymoshenko 296d7608abaSOleksandr Tymoshenko struct efi_device_path_mac_addr { 297d7608abaSOleksandr Tymoshenko struct efi_device_path dp; 298d7608abaSOleksandr Tymoshenko struct efi_mac_addr mac; 299d7608abaSOleksandr Tymoshenko u8 if_type; 300d7608abaSOleksandr Tymoshenko }; 301d7608abaSOleksandr Tymoshenko 3022bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 3032bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 3042bb9b79dSAlexander Graf 3052bb9b79dSAlexander Graf struct efi_device_path_file_path { 3062bb9b79dSAlexander Graf struct efi_device_path dp; 307ecbe1a07SAlexander Graf u16 str[32]; 3082bb9b79dSAlexander Graf }; 3092bb9b79dSAlexander Graf 3102bb9b79dSAlexander Graf #define BLOCK_IO_GUID \ 3112bb9b79dSAlexander Graf EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \ 3122bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 3132bb9b79dSAlexander Graf 3142bb9b79dSAlexander Graf struct efi_block_io_media 3152bb9b79dSAlexander Graf { 3162bb9b79dSAlexander Graf u32 media_id; 3172bb9b79dSAlexander Graf char removable_media; 3182bb9b79dSAlexander Graf char media_present; 3192bb9b79dSAlexander Graf char logical_partition; 3202bb9b79dSAlexander Graf char read_only; 3212bb9b79dSAlexander Graf char write_caching; 3222bb9b79dSAlexander Graf u8 pad[3]; 3232bb9b79dSAlexander Graf u32 block_size; 3242bb9b79dSAlexander Graf u32 io_align; 3252bb9b79dSAlexander Graf u8 pad2[4]; 3262bb9b79dSAlexander Graf u64 last_block; 3272bb9b79dSAlexander Graf }; 3282bb9b79dSAlexander Graf 3292bb9b79dSAlexander Graf struct efi_block_io { 3302bb9b79dSAlexander Graf u64 revision; 3312bb9b79dSAlexander Graf struct efi_block_io_media *media; 3322bb9b79dSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_block_io *this, 3332bb9b79dSAlexander Graf char extended_verification); 3342bb9b79dSAlexander Graf efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this, 3352bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3362bb9b79dSAlexander Graf void *buffer); 3372bb9b79dSAlexander Graf efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this, 3382bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3392bb9b79dSAlexander Graf void *buffer); 3402bb9b79dSAlexander Graf efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this); 3412bb9b79dSAlexander Graf }; 3422bb9b79dSAlexander Graf 343867a6ac8SSimon Glass struct simple_text_output_mode { 344867a6ac8SSimon Glass s32 max_mode; 345867a6ac8SSimon Glass s32 mode; 346867a6ac8SSimon Glass s32 attribute; 347867a6ac8SSimon Glass s32 cursor_column; 348867a6ac8SSimon Glass s32 cursor_row; 349867a6ac8SSimon Glass bool cursor_visible; 350867a6ac8SSimon Glass }; 351867a6ac8SSimon Glass 352867a6ac8SSimon Glass struct efi_simple_text_output_protocol { 353867a6ac8SSimon Glass void *reset; 354867a6ac8SSimon Glass efi_status_t (EFIAPI *output_string)( 355867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 356867a6ac8SSimon Glass const unsigned short *str); 3572bb9b79dSAlexander Graf efi_status_t (EFIAPI *test_string)( 3582bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3592bb9b79dSAlexander Graf const unsigned short *str); 360867a6ac8SSimon Glass efi_status_t(EFIAPI *query_mode)( 361867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 362867a6ac8SSimon Glass unsigned long mode_number, unsigned long *columns, 363867a6ac8SSimon Glass unsigned long *rows); 364867a6ac8SSimon Glass efi_status_t(EFIAPI *set_mode)( 365867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 366867a6ac8SSimon Glass unsigned long mode_number); 367867a6ac8SSimon Glass efi_status_t(EFIAPI *set_attribute)( 368867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 369867a6ac8SSimon Glass unsigned long attribute); 370867a6ac8SSimon Glass efi_status_t(EFIAPI *clear_screen) ( 371867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this); 372867a6ac8SSimon Glass efi_status_t(EFIAPI *set_cursor_position) ( 373867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 374867a6ac8SSimon Glass unsigned long column, unsigned long row); 3752bb9b79dSAlexander Graf efi_status_t(EFIAPI *enable_cursor)( 3762bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3772bb9b79dSAlexander Graf bool enable); 378867a6ac8SSimon Glass struct simple_text_output_mode *mode; 379867a6ac8SSimon Glass }; 380867a6ac8SSimon Glass 381867a6ac8SSimon Glass struct efi_input_key { 382867a6ac8SSimon Glass u16 scan_code; 383867a6ac8SSimon Glass s16 unicode_char; 384867a6ac8SSimon Glass }; 385867a6ac8SSimon Glass 386867a6ac8SSimon Glass struct efi_simple_input_interface { 387867a6ac8SSimon Glass efi_status_t(EFIAPI *reset)(struct efi_simple_input_interface *this, 388867a6ac8SSimon Glass bool ExtendedVerification); 389867a6ac8SSimon Glass efi_status_t(EFIAPI *read_key_stroke)( 390867a6ac8SSimon Glass struct efi_simple_input_interface *this, 391867a6ac8SSimon Glass struct efi_input_key *key); 3922fd945feSxypron.glpk@gmx.de struct efi_event *wait_for_key; 393867a6ac8SSimon Glass }; 394867a6ac8SSimon Glass 3952bb9b79dSAlexander Graf #define CONSOLE_CONTROL_GUID \ 3962bb9b79dSAlexander Graf EFI_GUID(0xf42f7782, 0x12e, 0x4c12, \ 3972bb9b79dSAlexander Graf 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21) 3982bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_TEXT 0 3992bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_GFX 1 4002bb9b79dSAlexander Graf 4012bb9b79dSAlexander Graf struct efi_console_control_protocol 4022bb9b79dSAlexander Graf { 4032bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_mode)( 4042bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int *mode, 4052bb9b79dSAlexander Graf char *uga_exists, char *std_in_locked); 4062bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_mode)( 4072bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int mode); 4082bb9b79dSAlexander Graf efi_status_t (EFIAPI *lock_std_in)( 4092bb9b79dSAlexander Graf struct efi_console_control_protocol *this, 4102bb9b79dSAlexander Graf uint16_t *password); 4112bb9b79dSAlexander Graf }; 4122bb9b79dSAlexander Graf 413cc5b7081Sxypron.glpk@gmx.de #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \ 414cc5b7081Sxypron.glpk@gmx.de EFI_GUID(0x8b843e20, 0x8132, 0x4852, \ 415cc5b7081Sxypron.glpk@gmx.de 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c) 416cc5b7081Sxypron.glpk@gmx.de 417cc5b7081Sxypron.glpk@gmx.de struct efi_device_path_protocol 418cc5b7081Sxypron.glpk@gmx.de { 419cc5b7081Sxypron.glpk@gmx.de uint8_t type; 420cc5b7081Sxypron.glpk@gmx.de uint8_t sub_type; 421cc5b7081Sxypron.glpk@gmx.de uint16_t length; 422cc5b7081Sxypron.glpk@gmx.de uint8_t data[]; 423cc5b7081Sxypron.glpk@gmx.de }; 424cc5b7081Sxypron.glpk@gmx.de 425cc5b7081Sxypron.glpk@gmx.de struct efi_device_path_to_text_protocol 426cc5b7081Sxypron.glpk@gmx.de { 427cc5b7081Sxypron.glpk@gmx.de uint16_t *(EFIAPI *convert_device_node_to_text)( 428cc5b7081Sxypron.glpk@gmx.de struct efi_device_path_protocol *device_node, 429cc5b7081Sxypron.glpk@gmx.de bool display_only, 430cc5b7081Sxypron.glpk@gmx.de bool allow_shortcuts); 431cc5b7081Sxypron.glpk@gmx.de uint16_t *(EFIAPI *convert_device_path_to_text)( 432cc5b7081Sxypron.glpk@gmx.de struct efi_device_path_protocol *device_path, 433cc5b7081Sxypron.glpk@gmx.de bool display_only, 434cc5b7081Sxypron.glpk@gmx.de bool allow_shortcuts); 435cc5b7081Sxypron.glpk@gmx.de }; 436cc5b7081Sxypron.glpk@gmx.de 437be8d3241SAlexander Graf #define EFI_GOP_GUID \ 438be8d3241SAlexander Graf EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \ 439be8d3241SAlexander Graf 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) 440be8d3241SAlexander Graf 441be8d3241SAlexander Graf #define EFI_GOT_RGBA8 0 442be8d3241SAlexander Graf #define EFI_GOT_BGRA8 1 443be8d3241SAlexander Graf #define EFI_GOT_BITMASK 2 444be8d3241SAlexander Graf 445be8d3241SAlexander Graf struct efi_gop_mode_info 446be8d3241SAlexander Graf { 447be8d3241SAlexander Graf u32 version; 448be8d3241SAlexander Graf u32 width; 449be8d3241SAlexander Graf u32 height; 450be8d3241SAlexander Graf u32 pixel_format; 451be8d3241SAlexander Graf u32 pixel_bitmask[4]; 452be8d3241SAlexander Graf u32 pixels_per_scanline; 453be8d3241SAlexander Graf }; 454be8d3241SAlexander Graf 455be8d3241SAlexander Graf struct efi_gop_mode 456be8d3241SAlexander Graf { 457be8d3241SAlexander Graf u32 max_mode; 458be8d3241SAlexander Graf u32 mode; 459be8d3241SAlexander Graf struct efi_gop_mode_info *info; 460be8d3241SAlexander Graf unsigned long info_size; 461be8d3241SAlexander Graf efi_physical_addr_t fb_base; 462be8d3241SAlexander Graf unsigned long fb_size; 463be8d3241SAlexander Graf }; 464be8d3241SAlexander Graf 465be8d3241SAlexander Graf #define EFI_BLT_VIDEO_FILL 0 466be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1 467be8d3241SAlexander Graf #define EFI_BLT_BUFFER_TO_VIDEO 2 468be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_VIDEO 3 469be8d3241SAlexander Graf 470be8d3241SAlexander Graf struct efi_gop 471be8d3241SAlexander Graf { 472be8d3241SAlexander Graf efi_status_t (EFIAPI *query_mode)(struct efi_gop *this, u32 mode_number, 473be8d3241SAlexander Graf unsigned long *size_of_info, 474be8d3241SAlexander Graf struct efi_gop_mode_info **info); 475be8d3241SAlexander Graf efi_status_t (EFIAPI *set_mode)(struct efi_gop *this, u32 mode_number); 476be8d3241SAlexander Graf efi_status_t (EFIAPI *blt)(struct efi_gop *this, void *buffer, 477be8d3241SAlexander Graf unsigned long operation, unsigned long sx, 478be8d3241SAlexander Graf unsigned long sy, unsigned long dx, 479be8d3241SAlexander Graf unsigned long dy, unsigned long width, 480be8d3241SAlexander Graf unsigned long height, unsigned long delta); 481be8d3241SAlexander Graf struct efi_gop_mode *mode; 482be8d3241SAlexander Graf }; 483be8d3241SAlexander Graf 4840efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_GUID \ 4850efe1bcfSAlexander Graf EFI_GUID(0xa19832b9, 0xac25, 0x11d3, \ 4860efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 4870efe1bcfSAlexander Graf 4880efe1bcfSAlexander Graf struct efi_mac_address { 4890efe1bcfSAlexander Graf char mac_addr[32]; 4900efe1bcfSAlexander Graf }; 4910efe1bcfSAlexander Graf 4920efe1bcfSAlexander Graf struct efi_ip_address { 4930efe1bcfSAlexander Graf u8 ip_addr[16]; 4940efe1bcfSAlexander Graf }; 4950efe1bcfSAlexander Graf 4960efe1bcfSAlexander Graf enum efi_simple_network_state { 4970efe1bcfSAlexander Graf EFI_NETWORK_STOPPED, 4980efe1bcfSAlexander Graf EFI_NETWORK_STARTED, 4990efe1bcfSAlexander Graf EFI_NETWORK_INITIALIZED, 5000efe1bcfSAlexander Graf }; 5010efe1bcfSAlexander Graf 5020efe1bcfSAlexander Graf struct efi_simple_network_mode { 5030efe1bcfSAlexander Graf enum efi_simple_network_state state; 5040efe1bcfSAlexander Graf u32 hwaddr_size; 5050efe1bcfSAlexander Graf u32 media_header_size; 5060efe1bcfSAlexander Graf u32 max_packet_size; 5070efe1bcfSAlexander Graf u32 nvram_size; 5080efe1bcfSAlexander Graf u32 nvram_access_size; 5090efe1bcfSAlexander Graf u32 receive_filter_mask; 5100efe1bcfSAlexander Graf u32 receive_filter_setting; 5110efe1bcfSAlexander Graf u32 max_mcast_filter_count; 5120efe1bcfSAlexander Graf u32 mcast_filter_count; 5130efe1bcfSAlexander Graf struct efi_mac_address mcast_filter[16]; 5140efe1bcfSAlexander Graf struct efi_mac_address current_address; 5150efe1bcfSAlexander Graf struct efi_mac_address broadcast_address; 5160efe1bcfSAlexander Graf struct efi_mac_address permanent_address; 5170efe1bcfSAlexander Graf u8 if_type; 5180efe1bcfSAlexander Graf u8 mac_changeable; 5190efe1bcfSAlexander Graf u8 multitx_supported; 5200efe1bcfSAlexander Graf u8 media_present_supported; 5210efe1bcfSAlexander Graf u8 media_present; 5220efe1bcfSAlexander Graf }; 5230efe1bcfSAlexander Graf 5240efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01, 5250efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02, 5260efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04, 5270efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08, 5280efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10, 5290efe1bcfSAlexander Graf 5300efe1bcfSAlexander Graf struct efi_simple_network 5310efe1bcfSAlexander Graf { 5320efe1bcfSAlexander Graf u64 revision; 5330efe1bcfSAlexander Graf efi_status_t (EFIAPI *start)(struct efi_simple_network *this); 5340efe1bcfSAlexander Graf efi_status_t (EFIAPI *stop)(struct efi_simple_network *this); 5350efe1bcfSAlexander Graf efi_status_t (EFIAPI *initialize)(struct efi_simple_network *this, 5360efe1bcfSAlexander Graf ulong extra_rx, ulong extra_tx); 5370efe1bcfSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_simple_network *this, 5380efe1bcfSAlexander Graf int extended_verification); 5390efe1bcfSAlexander Graf efi_status_t (EFIAPI *shutdown)(struct efi_simple_network *this); 5400efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive_filters)(struct efi_simple_network *this, 5410efe1bcfSAlexander Graf u32 enable, u32 disable, int reset_mcast_filter, 5420efe1bcfSAlexander Graf ulong mcast_filter_count, 5430efe1bcfSAlexander Graf struct efi_mac_address *mcast_filter); 5440efe1bcfSAlexander Graf efi_status_t (EFIAPI *station_address)(struct efi_simple_network *this, 5450efe1bcfSAlexander Graf int reset, struct efi_mac_address *new_mac); 5460efe1bcfSAlexander Graf efi_status_t (EFIAPI *statistics)(struct efi_simple_network *this, 5470efe1bcfSAlexander Graf int reset, ulong *stat_size, void *stat_table); 5480efe1bcfSAlexander Graf efi_status_t (EFIAPI *mcastiptomac)(struct efi_simple_network *this, 5490efe1bcfSAlexander Graf int ipv6, struct efi_ip_address *ip, 5500efe1bcfSAlexander Graf struct efi_mac_address *mac); 5510efe1bcfSAlexander Graf efi_status_t (EFIAPI *nvdata)(struct efi_simple_network *this, 5520efe1bcfSAlexander Graf int read_write, ulong offset, ulong buffer_size, 5530efe1bcfSAlexander Graf char *buffer); 5540efe1bcfSAlexander Graf efi_status_t (EFIAPI *get_status)(struct efi_simple_network *this, 5550efe1bcfSAlexander Graf u32 *int_status, void **txbuf); 5560efe1bcfSAlexander Graf efi_status_t (EFIAPI *transmit)(struct efi_simple_network *this, 5570efe1bcfSAlexander Graf ulong header_size, ulong buffer_size, void *buffer, 5580efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5590efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5600efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive)(struct efi_simple_network *this, 5610efe1bcfSAlexander Graf ulong *header_size, ulong *buffer_size, void *buffer, 5620efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5630efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5640efe1bcfSAlexander Graf void (EFIAPI *waitforpacket)(void); 5650efe1bcfSAlexander Graf struct efi_simple_network_mode *mode; 5660efe1bcfSAlexander Graf }; 5670efe1bcfSAlexander Graf 5680efe1bcfSAlexander Graf #define EFI_PXE_GUID \ 5690efe1bcfSAlexander Graf EFI_GUID(0x03c4e603, 0xac28, 0x11d3, \ 5700efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 5710efe1bcfSAlexander Graf 5720efe1bcfSAlexander Graf struct efi_pxe_packet { 5730efe1bcfSAlexander Graf u8 packet[1472]; 5740efe1bcfSAlexander Graf }; 5750efe1bcfSAlexander Graf 5760efe1bcfSAlexander Graf struct efi_pxe_mode 5770efe1bcfSAlexander Graf { 5780efe1bcfSAlexander Graf u8 unused[52]; 5790efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_discover; 5800efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_ack; 5810efe1bcfSAlexander Graf struct efi_pxe_packet proxy_offer; 5820efe1bcfSAlexander Graf struct efi_pxe_packet pxe_discover; 5830efe1bcfSAlexander Graf struct efi_pxe_packet pxe_reply; 5840efe1bcfSAlexander Graf }; 5850efe1bcfSAlexander Graf 5860efe1bcfSAlexander Graf struct efi_pxe { 5870efe1bcfSAlexander Graf u64 rev; 5880efe1bcfSAlexander Graf void (EFIAPI *start)(void); 5890efe1bcfSAlexander Graf void (EFIAPI *stop)(void); 5900efe1bcfSAlexander Graf void (EFIAPI *dhcp)(void); 5910efe1bcfSAlexander Graf void (EFIAPI *discover)(void); 5920efe1bcfSAlexander Graf void (EFIAPI *mftp)(void); 5930efe1bcfSAlexander Graf void (EFIAPI *udpwrite)(void); 5940efe1bcfSAlexander Graf void (EFIAPI *udpread)(void); 5950efe1bcfSAlexander Graf void (EFIAPI *setipfilter)(void); 5960efe1bcfSAlexander Graf void (EFIAPI *arp)(void); 5970efe1bcfSAlexander Graf void (EFIAPI *setparams)(void); 5980efe1bcfSAlexander Graf void (EFIAPI *setstationip)(void); 5990efe1bcfSAlexander Graf void (EFIAPI *setpackets)(void); 6000efe1bcfSAlexander Graf struct efi_pxe_mode *mode; 6010efe1bcfSAlexander Graf }; 6020efe1bcfSAlexander Graf 603867a6ac8SSimon Glass #endif 604