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 */ 252bb9b79dSAlexander Graf enum efi_event_type { 262bb9b79dSAlexander Graf EFI_TIMER_STOP = 0, 272bb9b79dSAlexander Graf EFI_TIMER_PERIODIC = 1, 282bb9b79dSAlexander Graf EFI_TIMER_RELATIVE = 2 292bb9b79dSAlexander Graf }; 302bb9b79dSAlexander Graf 3137a980b3SJonathan Gray #define EVT_NOTIFY_WAIT 0x00000100 3237a980b3SJonathan Gray #define EVT_NOTIFY_SIGNAL 0x00000200 3337a980b3SJonathan Gray 34867a6ac8SSimon Glass /* EFI Boot Services table */ 35867a6ac8SSimon Glass struct efi_boot_services { 36867a6ac8SSimon Glass struct efi_table_hdr hdr; 372bb9b79dSAlexander Graf efi_status_t (EFIAPI *raise_tpl)(unsigned long new_tpl); 382bb9b79dSAlexander Graf void (EFIAPI *restore_tpl)(unsigned long old_tpl); 39867a6ac8SSimon Glass 40867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pages)(int, int, unsigned long, 41867a6ac8SSimon Glass efi_physical_addr_t *); 42867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pages)(efi_physical_addr_t, unsigned long); 43867a6ac8SSimon Glass efi_status_t (EFIAPI *get_memory_map)(unsigned long *memory_map_size, 44867a6ac8SSimon Glass struct efi_mem_desc *desc, unsigned long *key, 45867a6ac8SSimon Glass unsigned long *desc_size, u32 *desc_version); 46867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pool)(int, unsigned long, void **); 47867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pool)(void *); 48867a6ac8SSimon Glass 492bb9b79dSAlexander Graf efi_status_t (EFIAPI *create_event)(enum efi_event_type type, 502bb9b79dSAlexander Graf unsigned long notify_tpl, 512bb9b79dSAlexander Graf void (EFIAPI *notify_function) (void *event, 522bb9b79dSAlexander Graf void *context), 532bb9b79dSAlexander Graf void *notify_context, void **event); 542bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_timer)(void *event, int type, 552bb9b79dSAlexander Graf uint64_t trigger_time); 56867a6ac8SSimon Glass efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events, 57867a6ac8SSimon Glass void *event, unsigned long *index); 582bb9b79dSAlexander Graf efi_status_t (EFIAPI *signal_event)(void *event); 592bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_event)(void *event); 602bb9b79dSAlexander Graf efi_status_t (EFIAPI *check_event)(void *event); 61*e0549f8aSxypron.glpk@gmx.de #define EFI_NATIVE_INTERFACE 0x00000000 622bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_protocol_interface)( 632bb9b79dSAlexander Graf void **handle, efi_guid_t *protocol, 642bb9b79dSAlexander Graf int protocol_interface_type, void *protocol_interface); 652bb9b79dSAlexander Graf efi_status_t (EFIAPI *reinstall_protocol_interface)( 662bb9b79dSAlexander Graf void *handle, efi_guid_t *protocol, 672bb9b79dSAlexander Graf void *old_interface, void *new_interface); 682bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_protocol_interface)(void *handle, 692bb9b79dSAlexander Graf efi_guid_t *protocol, void *protocol_interface); 70867a6ac8SSimon Glass efi_status_t (EFIAPI *handle_protocol)(efi_handle_t, efi_guid_t *, 71867a6ac8SSimon Glass void **); 72867a6ac8SSimon Glass void *reserved; 732bb9b79dSAlexander Graf efi_status_t (EFIAPI *register_protocol_notify)( 742bb9b79dSAlexander Graf efi_guid_t *protocol, void *event, 752bb9b79dSAlexander Graf void **registration); 76867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle)( 77867a6ac8SSimon Glass enum efi_locate_search_type search_type, 78867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 79867a6ac8SSimon Glass unsigned long *buffer_size, efi_handle_t *buffer); 80867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_device_path)(efi_guid_t *protocol, 81867a6ac8SSimon Glass struct efi_device_path **device_path, 82867a6ac8SSimon Glass efi_handle_t *device); 832bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_configuration_table)( 842bb9b79dSAlexander Graf efi_guid_t *guid, void *table); 85867a6ac8SSimon Glass 86867a6ac8SSimon Glass efi_status_t (EFIAPI *load_image)(bool boot_policiy, 87867a6ac8SSimon Glass efi_handle_t parent_image, 88867a6ac8SSimon Glass struct efi_device_path *file_path, void *source_buffer, 89867a6ac8SSimon Glass unsigned long source_size, efi_handle_t *image); 90867a6ac8SSimon Glass efi_status_t (EFIAPI *start_image)(efi_handle_t handle, 91867a6ac8SSimon Glass unsigned long *exitdata_size, 92867a6ac8SSimon Glass s16 **exitdata); 93867a6ac8SSimon Glass efi_status_t (EFIAPI *exit)(efi_handle_t handle, 94867a6ac8SSimon Glass efi_status_t exit_status, 95867a6ac8SSimon Glass unsigned long exitdata_size, s16 *exitdata); 962bb9b79dSAlexander Graf efi_status_t (EFIAPI *unload_image)(void *image_handle); 97867a6ac8SSimon Glass efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); 98867a6ac8SSimon Glass 99867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_monotonic_count)(u64 *count); 100867a6ac8SSimon Glass efi_status_t (EFIAPI *stall)(unsigned long usecs); 1012bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, 1022bb9b79dSAlexander Graf uint64_t watchdog_code, unsigned long data_size, 1032bb9b79dSAlexander Graf uint16_t *watchdog_data); 104867a6ac8SSimon Glass efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, 105867a6ac8SSimon Glass efi_handle_t *driver_image_handle, 106867a6ac8SSimon Glass struct efi_device_path *remaining_device_path, 107867a6ac8SSimon Glass bool recursive); 1082bb9b79dSAlexander Graf efi_status_t (EFIAPI *disconnect_controller)(void *controller_handle, 1092bb9b79dSAlexander Graf void *driver_image_handle, void *child_handle); 110867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 111867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 112867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 113867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 114867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 115867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 116867a6ac8SSimon Glass efi_status_t (EFIAPI *open_protocol)(efi_handle_t handle, 117867a6ac8SSimon Glass efi_guid_t *protocol, void **interface, 118867a6ac8SSimon Glass efi_handle_t agent_handle, 119867a6ac8SSimon Glass efi_handle_t controller_handle, u32 attributes); 1202bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_protocol)(void *handle, 1212bb9b79dSAlexander Graf efi_guid_t *protocol, void *agent_handle, 1222bb9b79dSAlexander Graf void *controller_handle); 123867a6ac8SSimon Glass efi_status_t(EFIAPI *open_protocol_information)(efi_handle_t handle, 124867a6ac8SSimon Glass efi_guid_t *protocol, 125867a6ac8SSimon Glass struct efi_open_protocol_info_entry **entry_buffer, 126867a6ac8SSimon Glass unsigned long *entry_count); 127867a6ac8SSimon Glass efi_status_t (EFIAPI *protocols_per_handle)(efi_handle_t handle, 128867a6ac8SSimon Glass efi_guid_t ***protocol_buffer, 129867a6ac8SSimon Glass unsigned long *protocols_buffer_count); 130867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle_buffer) ( 131867a6ac8SSimon Glass enum efi_locate_search_type search_type, 132867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 133867a6ac8SSimon Glass unsigned long *no_handles, efi_handle_t **buffer); 1342bb9b79dSAlexander Graf efi_status_t (EFIAPI *locate_protocol)(efi_guid_t *protocol, 1352bb9b79dSAlexander Graf void *registration, void **protocol_interface); 1362bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_multiple_protocol_interfaces)( 1372bb9b79dSAlexander Graf void **handle, ...); 1382bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)( 1392bb9b79dSAlexander Graf void *handle, ...); 1402bb9b79dSAlexander Graf efi_status_t (EFIAPI *calculate_crc32)(void *data, 1412bb9b79dSAlexander Graf unsigned long data_size, uint32_t *crc32); 1422bb9b79dSAlexander Graf void (EFIAPI *copy_mem)(void *destination, void *source, 1432bb9b79dSAlexander Graf unsigned long length); 1442bb9b79dSAlexander Graf void (EFIAPI *set_mem)(void *buffer, unsigned long size, 1452bb9b79dSAlexander Graf uint8_t value); 146867a6ac8SSimon Glass void *create_event_ex; 147867a6ac8SSimon Glass }; 148867a6ac8SSimon Glass 149867a6ac8SSimon Glass /* Types and defines for EFI ResetSystem */ 150867a6ac8SSimon Glass enum efi_reset_type { 151867a6ac8SSimon Glass EFI_RESET_COLD = 0, 152867a6ac8SSimon Glass EFI_RESET_WARM = 1, 153867a6ac8SSimon Glass EFI_RESET_SHUTDOWN = 2 154867a6ac8SSimon Glass }; 155867a6ac8SSimon Glass 156867a6ac8SSimon Glass /* EFI Runtime Services table */ 157867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL 158867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_REVISION 0x00010000 159867a6ac8SSimon Glass 160867a6ac8SSimon Glass struct efi_runtime_services { 161867a6ac8SSimon Glass struct efi_table_hdr hdr; 1622bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_time)(struct efi_time *time, 1632bb9b79dSAlexander Graf struct efi_time_cap *capabilities); 1642bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_time)(struct efi_time *time); 1652bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_wakeup_time)(char *enabled, char *pending, 1662bb9b79dSAlexander Graf struct efi_time *time); 1672bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_wakeup_time)(char enabled, 1682bb9b79dSAlexander Graf struct efi_time *time); 1692bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_virtual_address_map)( 1702bb9b79dSAlexander Graf unsigned long memory_map_size, 1712bb9b79dSAlexander Graf unsigned long descriptor_size, 1722bb9b79dSAlexander Graf uint32_t descriptor_version, 1732bb9b79dSAlexander Graf struct efi_mem_desc *virtmap); 1742bb9b79dSAlexander Graf efi_status_t (*convert_pointer)(unsigned long dbg, void **address); 175867a6ac8SSimon Glass efi_status_t (EFIAPI *get_variable)(s16 *variable_name, 176867a6ac8SSimon Glass efi_guid_t *vendor, u32 *attributes, 177867a6ac8SSimon Glass unsigned long *data_size, void *data); 178867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_variable)( 179867a6ac8SSimon Glass unsigned long *variable_name_size, 180867a6ac8SSimon Glass s16 *variable_name, efi_guid_t *vendor); 181867a6ac8SSimon Glass efi_status_t (EFIAPI *set_variable)(s16 *variable_name, 182867a6ac8SSimon Glass efi_guid_t *vendor, u32 attributes, 183867a6ac8SSimon Glass unsigned long data_size, void *data); 1842bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_next_high_mono_count)( 1852bb9b79dSAlexander Graf uint32_t *high_count); 186867a6ac8SSimon Glass void (EFIAPI *reset_system)(enum efi_reset_type reset_type, 187867a6ac8SSimon Glass efi_status_t reset_status, 188867a6ac8SSimon Glass unsigned long data_size, void *reset_data); 189867a6ac8SSimon Glass void *update_capsule; 190867a6ac8SSimon Glass void *query_capsule_caps; 191867a6ac8SSimon Glass void *query_variable_info; 192867a6ac8SSimon Glass }; 193867a6ac8SSimon Glass 194867a6ac8SSimon Glass /* EFI Configuration Table and GUID definitions */ 195867a6ac8SSimon Glass #define NULL_GUID \ 196867a6ac8SSimon Glass EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ 197867a6ac8SSimon Glass 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) 198867a6ac8SSimon Glass 199867a6ac8SSimon Glass #define LOADED_IMAGE_PROTOCOL_GUID \ 200867a6ac8SSimon Glass EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \ 201867a6ac8SSimon Glass 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 202867a6ac8SSimon Glass 2032bb9b79dSAlexander Graf #define EFI_FDT_GUID \ 2042bb9b79dSAlexander Graf EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \ 2052bb9b79dSAlexander Graf 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) 2062bb9b79dSAlexander Graf 207e663b350SAlexander Graf #define SMBIOS_TABLE_GUID \ 208e663b350SAlexander Graf EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \ 209e663b350SAlexander Graf 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 210e663b350SAlexander Graf 2112bb9b79dSAlexander Graf struct efi_configuration_table 2122bb9b79dSAlexander Graf { 2132bb9b79dSAlexander Graf efi_guid_t guid; 2142bb9b79dSAlexander Graf void *table; 2152bb9b79dSAlexander Graf }; 2162bb9b79dSAlexander Graf 2172bb9b79dSAlexander Graf #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) 2182bb9b79dSAlexander Graf 219867a6ac8SSimon Glass struct efi_system_table { 220867a6ac8SSimon Glass struct efi_table_hdr hdr; 221867a6ac8SSimon Glass unsigned long fw_vendor; /* physical addr of wchar_t vendor string */ 222867a6ac8SSimon Glass u32 fw_revision; 223867a6ac8SSimon Glass unsigned long con_in_handle; 224867a6ac8SSimon Glass struct efi_simple_input_interface *con_in; 225867a6ac8SSimon Glass unsigned long con_out_handle; 226867a6ac8SSimon Glass struct efi_simple_text_output_protocol *con_out; 227867a6ac8SSimon Glass unsigned long stderr_handle; 2282bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *std_err; 229867a6ac8SSimon Glass struct efi_runtime_services *runtime; 230867a6ac8SSimon Glass struct efi_boot_services *boottime; 231867a6ac8SSimon Glass unsigned long nr_tables; 2322bb9b79dSAlexander Graf struct efi_configuration_table *tables; 233867a6ac8SSimon Glass }; 234867a6ac8SSimon Glass 2352bb9b79dSAlexander Graf #define LOADED_IMAGE_GUID \ 2362bb9b79dSAlexander Graf EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \ 2372bb9b79dSAlexander Graf 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2382bb9b79dSAlexander Graf 239867a6ac8SSimon Glass struct efi_loaded_image { 240867a6ac8SSimon Glass u32 revision; 241867a6ac8SSimon Glass void *parent_handle; 242867a6ac8SSimon Glass struct efi_system_table *system_table; 243867a6ac8SSimon Glass void *device_handle; 244867a6ac8SSimon Glass void *file_path; 245867a6ac8SSimon Glass void *reserved; 246867a6ac8SSimon Glass u32 load_options_size; 247867a6ac8SSimon Glass void *load_options; 248867a6ac8SSimon Glass void *image_base; 249867a6ac8SSimon Glass aligned_u64 image_size; 250867a6ac8SSimon Glass unsigned int image_code_type; 251867a6ac8SSimon Glass unsigned int image_data_type; 252867a6ac8SSimon Glass unsigned long unload; 253a86aeaf2SAlexander Graf 254a86aeaf2SAlexander Graf /* Below are efi loader private fields */ 255a86aeaf2SAlexander Graf #ifdef CONFIG_EFI_LOADER 256a86aeaf2SAlexander Graf efi_status_t exit_status; 257a86aeaf2SAlexander Graf struct jmp_buf_data exit_jmp; 258a86aeaf2SAlexander Graf #endif 259867a6ac8SSimon Glass }; 260867a6ac8SSimon Glass 2612bb9b79dSAlexander Graf #define DEVICE_PATH_GUID \ 2622bb9b79dSAlexander Graf EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \ 2632bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b ) 2642bb9b79dSAlexander Graf 2652bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_END 0x7f 2662bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_END 0xff 2672bb9b79dSAlexander Graf 268867a6ac8SSimon Glass struct efi_device_path { 269867a6ac8SSimon Glass u8 type; 270867a6ac8SSimon Glass u8 sub_type; 271867a6ac8SSimon Glass u16 length; 272867a6ac8SSimon Glass }; 273867a6ac8SSimon Glass 274d7608abaSOleksandr Tymoshenko struct efi_mac_addr { 275d7608abaSOleksandr Tymoshenko u8 addr[32]; 276d7608abaSOleksandr Tymoshenko }; 277d7608abaSOleksandr Tymoshenko 278d7608abaSOleksandr Tymoshenko #define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03 279d7608abaSOleksandr Tymoshenko # define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b 280d7608abaSOleksandr Tymoshenko 281d7608abaSOleksandr Tymoshenko struct efi_device_path_mac_addr { 282d7608abaSOleksandr Tymoshenko struct efi_device_path dp; 283d7608abaSOleksandr Tymoshenko struct efi_mac_addr mac; 284d7608abaSOleksandr Tymoshenko u8 if_type; 285d7608abaSOleksandr Tymoshenko }; 286d7608abaSOleksandr Tymoshenko 2872bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 2882bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 2892bb9b79dSAlexander Graf 2902bb9b79dSAlexander Graf struct efi_device_path_file_path { 2912bb9b79dSAlexander Graf struct efi_device_path dp; 292ecbe1a07SAlexander Graf u16 str[32]; 2932bb9b79dSAlexander Graf }; 2942bb9b79dSAlexander Graf 2952bb9b79dSAlexander Graf #define BLOCK_IO_GUID \ 2962bb9b79dSAlexander Graf EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \ 2972bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2982bb9b79dSAlexander Graf 2992bb9b79dSAlexander Graf struct efi_block_io_media 3002bb9b79dSAlexander Graf { 3012bb9b79dSAlexander Graf u32 media_id; 3022bb9b79dSAlexander Graf char removable_media; 3032bb9b79dSAlexander Graf char media_present; 3042bb9b79dSAlexander Graf char logical_partition; 3052bb9b79dSAlexander Graf char read_only; 3062bb9b79dSAlexander Graf char write_caching; 3072bb9b79dSAlexander Graf u8 pad[3]; 3082bb9b79dSAlexander Graf u32 block_size; 3092bb9b79dSAlexander Graf u32 io_align; 3102bb9b79dSAlexander Graf u8 pad2[4]; 3112bb9b79dSAlexander Graf u64 last_block; 3122bb9b79dSAlexander Graf }; 3132bb9b79dSAlexander Graf 3142bb9b79dSAlexander Graf struct efi_block_io { 3152bb9b79dSAlexander Graf u64 revision; 3162bb9b79dSAlexander Graf struct efi_block_io_media *media; 3172bb9b79dSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_block_io *this, 3182bb9b79dSAlexander Graf char extended_verification); 3192bb9b79dSAlexander Graf efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this, 3202bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3212bb9b79dSAlexander Graf void *buffer); 3222bb9b79dSAlexander Graf efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this, 3232bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3242bb9b79dSAlexander Graf void *buffer); 3252bb9b79dSAlexander Graf efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this); 3262bb9b79dSAlexander Graf }; 3272bb9b79dSAlexander Graf 328867a6ac8SSimon Glass struct simple_text_output_mode { 329867a6ac8SSimon Glass s32 max_mode; 330867a6ac8SSimon Glass s32 mode; 331867a6ac8SSimon Glass s32 attribute; 332867a6ac8SSimon Glass s32 cursor_column; 333867a6ac8SSimon Glass s32 cursor_row; 334867a6ac8SSimon Glass bool cursor_visible; 335867a6ac8SSimon Glass }; 336867a6ac8SSimon Glass 337867a6ac8SSimon Glass struct efi_simple_text_output_protocol { 338867a6ac8SSimon Glass void *reset; 339867a6ac8SSimon Glass efi_status_t (EFIAPI *output_string)( 340867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 341867a6ac8SSimon Glass const unsigned short *str); 3422bb9b79dSAlexander Graf efi_status_t (EFIAPI *test_string)( 3432bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3442bb9b79dSAlexander Graf const unsigned short *str); 345867a6ac8SSimon Glass efi_status_t(EFIAPI *query_mode)( 346867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 347867a6ac8SSimon Glass unsigned long mode_number, unsigned long *columns, 348867a6ac8SSimon Glass unsigned long *rows); 349867a6ac8SSimon Glass efi_status_t(EFIAPI *set_mode)( 350867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 351867a6ac8SSimon Glass unsigned long mode_number); 352867a6ac8SSimon Glass efi_status_t(EFIAPI *set_attribute)( 353867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 354867a6ac8SSimon Glass unsigned long attribute); 355867a6ac8SSimon Glass efi_status_t(EFIAPI *clear_screen) ( 356867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this); 357867a6ac8SSimon Glass efi_status_t(EFIAPI *set_cursor_position) ( 358867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 359867a6ac8SSimon Glass unsigned long column, unsigned long row); 3602bb9b79dSAlexander Graf efi_status_t(EFIAPI *enable_cursor)( 3612bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3622bb9b79dSAlexander Graf bool enable); 363867a6ac8SSimon Glass struct simple_text_output_mode *mode; 364867a6ac8SSimon Glass }; 365867a6ac8SSimon Glass 366867a6ac8SSimon Glass struct efi_input_key { 367867a6ac8SSimon Glass u16 scan_code; 368867a6ac8SSimon Glass s16 unicode_char; 369867a6ac8SSimon Glass }; 370867a6ac8SSimon Glass 371867a6ac8SSimon Glass struct efi_simple_input_interface { 372867a6ac8SSimon Glass efi_status_t(EFIAPI *reset)(struct efi_simple_input_interface *this, 373867a6ac8SSimon Glass bool ExtendedVerification); 374867a6ac8SSimon Glass efi_status_t(EFIAPI *read_key_stroke)( 375867a6ac8SSimon Glass struct efi_simple_input_interface *this, 376867a6ac8SSimon Glass struct efi_input_key *key); 377867a6ac8SSimon Glass void *wait_for_key; 378867a6ac8SSimon Glass }; 379867a6ac8SSimon Glass 3802bb9b79dSAlexander Graf #define CONSOLE_CONTROL_GUID \ 3812bb9b79dSAlexander Graf EFI_GUID(0xf42f7782, 0x12e, 0x4c12, \ 3822bb9b79dSAlexander Graf 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21) 3832bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_TEXT 0 3842bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_GFX 1 3852bb9b79dSAlexander Graf 3862bb9b79dSAlexander Graf struct efi_console_control_protocol 3872bb9b79dSAlexander Graf { 3882bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_mode)( 3892bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int *mode, 3902bb9b79dSAlexander Graf char *uga_exists, char *std_in_locked); 3912bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_mode)( 3922bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int mode); 3932bb9b79dSAlexander Graf efi_status_t (EFIAPI *lock_std_in)( 3942bb9b79dSAlexander Graf struct efi_console_control_protocol *this, 3952bb9b79dSAlexander Graf uint16_t *password); 3962bb9b79dSAlexander Graf }; 3972bb9b79dSAlexander Graf 398be8d3241SAlexander Graf #define EFI_GOP_GUID \ 399be8d3241SAlexander Graf EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \ 400be8d3241SAlexander Graf 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) 401be8d3241SAlexander Graf 402be8d3241SAlexander Graf #define EFI_GOT_RGBA8 0 403be8d3241SAlexander Graf #define EFI_GOT_BGRA8 1 404be8d3241SAlexander Graf #define EFI_GOT_BITMASK 2 405be8d3241SAlexander Graf 406be8d3241SAlexander Graf struct efi_gop_mode_info 407be8d3241SAlexander Graf { 408be8d3241SAlexander Graf u32 version; 409be8d3241SAlexander Graf u32 width; 410be8d3241SAlexander Graf u32 height; 411be8d3241SAlexander Graf u32 pixel_format; 412be8d3241SAlexander Graf u32 pixel_bitmask[4]; 413be8d3241SAlexander Graf u32 pixels_per_scanline; 414be8d3241SAlexander Graf }; 415be8d3241SAlexander Graf 416be8d3241SAlexander Graf struct efi_gop_mode 417be8d3241SAlexander Graf { 418be8d3241SAlexander Graf u32 max_mode; 419be8d3241SAlexander Graf u32 mode; 420be8d3241SAlexander Graf struct efi_gop_mode_info *info; 421be8d3241SAlexander Graf unsigned long info_size; 422be8d3241SAlexander Graf efi_physical_addr_t fb_base; 423be8d3241SAlexander Graf unsigned long fb_size; 424be8d3241SAlexander Graf }; 425be8d3241SAlexander Graf 426be8d3241SAlexander Graf #define EFI_BLT_VIDEO_FILL 0 427be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1 428be8d3241SAlexander Graf #define EFI_BLT_BUFFER_TO_VIDEO 2 429be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_VIDEO 3 430be8d3241SAlexander Graf 431be8d3241SAlexander Graf struct efi_gop 432be8d3241SAlexander Graf { 433be8d3241SAlexander Graf efi_status_t (EFIAPI *query_mode)(struct efi_gop *this, u32 mode_number, 434be8d3241SAlexander Graf unsigned long *size_of_info, 435be8d3241SAlexander Graf struct efi_gop_mode_info **info); 436be8d3241SAlexander Graf efi_status_t (EFIAPI *set_mode)(struct efi_gop *this, u32 mode_number); 437be8d3241SAlexander Graf efi_status_t (EFIAPI *blt)(struct efi_gop *this, void *buffer, 438be8d3241SAlexander Graf unsigned long operation, unsigned long sx, 439be8d3241SAlexander Graf unsigned long sy, unsigned long dx, 440be8d3241SAlexander Graf unsigned long dy, unsigned long width, 441be8d3241SAlexander Graf unsigned long height, unsigned long delta); 442be8d3241SAlexander Graf struct efi_gop_mode *mode; 443be8d3241SAlexander Graf }; 444be8d3241SAlexander Graf 4450efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_GUID \ 4460efe1bcfSAlexander Graf EFI_GUID(0xa19832b9, 0xac25, 0x11d3, \ 4470efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 4480efe1bcfSAlexander Graf 4490efe1bcfSAlexander Graf struct efi_mac_address { 4500efe1bcfSAlexander Graf char mac_addr[32]; 4510efe1bcfSAlexander Graf }; 4520efe1bcfSAlexander Graf 4530efe1bcfSAlexander Graf struct efi_ip_address { 4540efe1bcfSAlexander Graf u8 ip_addr[16]; 4550efe1bcfSAlexander Graf }; 4560efe1bcfSAlexander Graf 4570efe1bcfSAlexander Graf enum efi_simple_network_state { 4580efe1bcfSAlexander Graf EFI_NETWORK_STOPPED, 4590efe1bcfSAlexander Graf EFI_NETWORK_STARTED, 4600efe1bcfSAlexander Graf EFI_NETWORK_INITIALIZED, 4610efe1bcfSAlexander Graf }; 4620efe1bcfSAlexander Graf 4630efe1bcfSAlexander Graf struct efi_simple_network_mode { 4640efe1bcfSAlexander Graf enum efi_simple_network_state state; 4650efe1bcfSAlexander Graf u32 hwaddr_size; 4660efe1bcfSAlexander Graf u32 media_header_size; 4670efe1bcfSAlexander Graf u32 max_packet_size; 4680efe1bcfSAlexander Graf u32 nvram_size; 4690efe1bcfSAlexander Graf u32 nvram_access_size; 4700efe1bcfSAlexander Graf u32 receive_filter_mask; 4710efe1bcfSAlexander Graf u32 receive_filter_setting; 4720efe1bcfSAlexander Graf u32 max_mcast_filter_count; 4730efe1bcfSAlexander Graf u32 mcast_filter_count; 4740efe1bcfSAlexander Graf struct efi_mac_address mcast_filter[16]; 4750efe1bcfSAlexander Graf struct efi_mac_address current_address; 4760efe1bcfSAlexander Graf struct efi_mac_address broadcast_address; 4770efe1bcfSAlexander Graf struct efi_mac_address permanent_address; 4780efe1bcfSAlexander Graf u8 if_type; 4790efe1bcfSAlexander Graf u8 mac_changeable; 4800efe1bcfSAlexander Graf u8 multitx_supported; 4810efe1bcfSAlexander Graf u8 media_present_supported; 4820efe1bcfSAlexander Graf u8 media_present; 4830efe1bcfSAlexander Graf }; 4840efe1bcfSAlexander Graf 4850efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01, 4860efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02, 4870efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04, 4880efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08, 4890efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10, 4900efe1bcfSAlexander Graf 4910efe1bcfSAlexander Graf struct efi_simple_network 4920efe1bcfSAlexander Graf { 4930efe1bcfSAlexander Graf u64 revision; 4940efe1bcfSAlexander Graf efi_status_t (EFIAPI *start)(struct efi_simple_network *this); 4950efe1bcfSAlexander Graf efi_status_t (EFIAPI *stop)(struct efi_simple_network *this); 4960efe1bcfSAlexander Graf efi_status_t (EFIAPI *initialize)(struct efi_simple_network *this, 4970efe1bcfSAlexander Graf ulong extra_rx, ulong extra_tx); 4980efe1bcfSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_simple_network *this, 4990efe1bcfSAlexander Graf int extended_verification); 5000efe1bcfSAlexander Graf efi_status_t (EFIAPI *shutdown)(struct efi_simple_network *this); 5010efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive_filters)(struct efi_simple_network *this, 5020efe1bcfSAlexander Graf u32 enable, u32 disable, int reset_mcast_filter, 5030efe1bcfSAlexander Graf ulong mcast_filter_count, 5040efe1bcfSAlexander Graf struct efi_mac_address *mcast_filter); 5050efe1bcfSAlexander Graf efi_status_t (EFIAPI *station_address)(struct efi_simple_network *this, 5060efe1bcfSAlexander Graf int reset, struct efi_mac_address *new_mac); 5070efe1bcfSAlexander Graf efi_status_t (EFIAPI *statistics)(struct efi_simple_network *this, 5080efe1bcfSAlexander Graf int reset, ulong *stat_size, void *stat_table); 5090efe1bcfSAlexander Graf efi_status_t (EFIAPI *mcastiptomac)(struct efi_simple_network *this, 5100efe1bcfSAlexander Graf int ipv6, struct efi_ip_address *ip, 5110efe1bcfSAlexander Graf struct efi_mac_address *mac); 5120efe1bcfSAlexander Graf efi_status_t (EFIAPI *nvdata)(struct efi_simple_network *this, 5130efe1bcfSAlexander Graf int read_write, ulong offset, ulong buffer_size, 5140efe1bcfSAlexander Graf char *buffer); 5150efe1bcfSAlexander Graf efi_status_t (EFIAPI *get_status)(struct efi_simple_network *this, 5160efe1bcfSAlexander Graf u32 *int_status, void **txbuf); 5170efe1bcfSAlexander Graf efi_status_t (EFIAPI *transmit)(struct efi_simple_network *this, 5180efe1bcfSAlexander Graf ulong header_size, ulong buffer_size, void *buffer, 5190efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5200efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5210efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive)(struct efi_simple_network *this, 5220efe1bcfSAlexander Graf ulong *header_size, ulong *buffer_size, void *buffer, 5230efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5240efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5250efe1bcfSAlexander Graf void (EFIAPI *waitforpacket)(void); 5260efe1bcfSAlexander Graf struct efi_simple_network_mode *mode; 5270efe1bcfSAlexander Graf }; 5280efe1bcfSAlexander Graf 5290efe1bcfSAlexander Graf #define EFI_PXE_GUID \ 5300efe1bcfSAlexander Graf EFI_GUID(0x03c4e603, 0xac28, 0x11d3, \ 5310efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 5320efe1bcfSAlexander Graf 5330efe1bcfSAlexander Graf struct efi_pxe_packet { 5340efe1bcfSAlexander Graf u8 packet[1472]; 5350efe1bcfSAlexander Graf }; 5360efe1bcfSAlexander Graf 5370efe1bcfSAlexander Graf struct efi_pxe_mode 5380efe1bcfSAlexander Graf { 5390efe1bcfSAlexander Graf u8 unused[52]; 5400efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_discover; 5410efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_ack; 5420efe1bcfSAlexander Graf struct efi_pxe_packet proxy_offer; 5430efe1bcfSAlexander Graf struct efi_pxe_packet pxe_discover; 5440efe1bcfSAlexander Graf struct efi_pxe_packet pxe_reply; 5450efe1bcfSAlexander Graf }; 5460efe1bcfSAlexander Graf 5470efe1bcfSAlexander Graf struct efi_pxe { 5480efe1bcfSAlexander Graf u64 rev; 5490efe1bcfSAlexander Graf void (EFIAPI *start)(void); 5500efe1bcfSAlexander Graf void (EFIAPI *stop)(void); 5510efe1bcfSAlexander Graf void (EFIAPI *dhcp)(void); 5520efe1bcfSAlexander Graf void (EFIAPI *discover)(void); 5530efe1bcfSAlexander Graf void (EFIAPI *mftp)(void); 5540efe1bcfSAlexander Graf void (EFIAPI *udpwrite)(void); 5550efe1bcfSAlexander Graf void (EFIAPI *udpread)(void); 5560efe1bcfSAlexander Graf void (EFIAPI *setipfilter)(void); 5570efe1bcfSAlexander Graf void (EFIAPI *arp)(void); 5580efe1bcfSAlexander Graf void (EFIAPI *setparams)(void); 5590efe1bcfSAlexander Graf void (EFIAPI *setstationip)(void); 5600efe1bcfSAlexander Graf void (EFIAPI *setpackets)(void); 5610efe1bcfSAlexander Graf struct efi_pxe_mode *mode; 5620efe1bcfSAlexander Graf }; 5630efe1bcfSAlexander Graf 564867a6ac8SSimon Glass #endif 565