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 20*a86aeaf2SAlexander Graf #ifdef CONFIG_EFI_LOADER 21*a86aeaf2SAlexander Graf #include <asm/setjmp.h> 22*a86aeaf2SAlexander Graf #endif 23*a86aeaf2SAlexander 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 31867a6ac8SSimon Glass /* EFI Boot Services table */ 32867a6ac8SSimon Glass struct efi_boot_services { 33867a6ac8SSimon Glass struct efi_table_hdr hdr; 342bb9b79dSAlexander Graf efi_status_t (EFIAPI *raise_tpl)(unsigned long new_tpl); 352bb9b79dSAlexander Graf void (EFIAPI *restore_tpl)(unsigned long old_tpl); 36867a6ac8SSimon Glass 37867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pages)(int, int, unsigned long, 38867a6ac8SSimon Glass efi_physical_addr_t *); 39867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pages)(efi_physical_addr_t, unsigned long); 40867a6ac8SSimon Glass efi_status_t (EFIAPI *get_memory_map)(unsigned long *memory_map_size, 41867a6ac8SSimon Glass struct efi_mem_desc *desc, unsigned long *key, 42867a6ac8SSimon Glass unsigned long *desc_size, u32 *desc_version); 43867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pool)(int, unsigned long, void **); 44867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pool)(void *); 45867a6ac8SSimon Glass 462bb9b79dSAlexander Graf efi_status_t (EFIAPI *create_event)(enum efi_event_type type, 472bb9b79dSAlexander Graf unsigned long notify_tpl, 482bb9b79dSAlexander Graf void (EFIAPI *notify_function) (void *event, 492bb9b79dSAlexander Graf void *context), 502bb9b79dSAlexander Graf void *notify_context, void **event); 512bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_timer)(void *event, int type, 522bb9b79dSAlexander Graf uint64_t trigger_time); 53867a6ac8SSimon Glass efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events, 54867a6ac8SSimon Glass void *event, unsigned long *index); 552bb9b79dSAlexander Graf efi_status_t (EFIAPI *signal_event)(void *event); 562bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_event)(void *event); 572bb9b79dSAlexander Graf efi_status_t (EFIAPI *check_event)(void *event); 58867a6ac8SSimon Glass 592bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_protocol_interface)( 602bb9b79dSAlexander Graf void **handle, efi_guid_t *protocol, 612bb9b79dSAlexander Graf int protocol_interface_type, void *protocol_interface); 622bb9b79dSAlexander Graf efi_status_t (EFIAPI *reinstall_protocol_interface)( 632bb9b79dSAlexander Graf void *handle, efi_guid_t *protocol, 642bb9b79dSAlexander Graf void *old_interface, void *new_interface); 652bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_protocol_interface)(void *handle, 662bb9b79dSAlexander Graf efi_guid_t *protocol, void *protocol_interface); 67867a6ac8SSimon Glass efi_status_t (EFIAPI *handle_protocol)(efi_handle_t, efi_guid_t *, 68867a6ac8SSimon Glass void **); 69867a6ac8SSimon Glass void *reserved; 702bb9b79dSAlexander Graf efi_status_t (EFIAPI *register_protocol_notify)( 712bb9b79dSAlexander Graf efi_guid_t *protocol, void *event, 722bb9b79dSAlexander Graf void **registration); 73867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle)( 74867a6ac8SSimon Glass enum efi_locate_search_type search_type, 75867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 76867a6ac8SSimon Glass unsigned long *buffer_size, efi_handle_t *buffer); 77867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_device_path)(efi_guid_t *protocol, 78867a6ac8SSimon Glass struct efi_device_path **device_path, 79867a6ac8SSimon Glass efi_handle_t *device); 802bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_configuration_table)( 812bb9b79dSAlexander Graf efi_guid_t *guid, void *table); 82867a6ac8SSimon Glass 83867a6ac8SSimon Glass efi_status_t (EFIAPI *load_image)(bool boot_policiy, 84867a6ac8SSimon Glass efi_handle_t parent_image, 85867a6ac8SSimon Glass struct efi_device_path *file_path, void *source_buffer, 86867a6ac8SSimon Glass unsigned long source_size, efi_handle_t *image); 87867a6ac8SSimon Glass efi_status_t (EFIAPI *start_image)(efi_handle_t handle, 88867a6ac8SSimon Glass unsigned long *exitdata_size, 89867a6ac8SSimon Glass s16 **exitdata); 90867a6ac8SSimon Glass efi_status_t (EFIAPI *exit)(efi_handle_t handle, 91867a6ac8SSimon Glass efi_status_t exit_status, 92867a6ac8SSimon Glass unsigned long exitdata_size, s16 *exitdata); 932bb9b79dSAlexander Graf efi_status_t (EFIAPI *unload_image)(void *image_handle); 94867a6ac8SSimon Glass efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); 95867a6ac8SSimon Glass 96867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_monotonic_count)(u64 *count); 97867a6ac8SSimon Glass efi_status_t (EFIAPI *stall)(unsigned long usecs); 982bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, 992bb9b79dSAlexander Graf uint64_t watchdog_code, unsigned long data_size, 1002bb9b79dSAlexander Graf uint16_t *watchdog_data); 101867a6ac8SSimon Glass efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, 102867a6ac8SSimon Glass efi_handle_t *driver_image_handle, 103867a6ac8SSimon Glass struct efi_device_path *remaining_device_path, 104867a6ac8SSimon Glass bool recursive); 1052bb9b79dSAlexander Graf efi_status_t (EFIAPI *disconnect_controller)(void *controller_handle, 1062bb9b79dSAlexander Graf void *driver_image_handle, void *child_handle); 107867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 108867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 109867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 110867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 111867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 112867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 113867a6ac8SSimon Glass efi_status_t (EFIAPI *open_protocol)(efi_handle_t handle, 114867a6ac8SSimon Glass efi_guid_t *protocol, void **interface, 115867a6ac8SSimon Glass efi_handle_t agent_handle, 116867a6ac8SSimon Glass efi_handle_t controller_handle, u32 attributes); 1172bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_protocol)(void *handle, 1182bb9b79dSAlexander Graf efi_guid_t *protocol, void *agent_handle, 1192bb9b79dSAlexander Graf void *controller_handle); 120867a6ac8SSimon Glass efi_status_t(EFIAPI *open_protocol_information)(efi_handle_t handle, 121867a6ac8SSimon Glass efi_guid_t *protocol, 122867a6ac8SSimon Glass struct efi_open_protocol_info_entry **entry_buffer, 123867a6ac8SSimon Glass unsigned long *entry_count); 124867a6ac8SSimon Glass efi_status_t (EFIAPI *protocols_per_handle)(efi_handle_t handle, 125867a6ac8SSimon Glass efi_guid_t ***protocol_buffer, 126867a6ac8SSimon Glass unsigned long *protocols_buffer_count); 127867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle_buffer) ( 128867a6ac8SSimon Glass enum efi_locate_search_type search_type, 129867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 130867a6ac8SSimon Glass unsigned long *no_handles, efi_handle_t **buffer); 1312bb9b79dSAlexander Graf efi_status_t (EFIAPI *locate_protocol)(efi_guid_t *protocol, 1322bb9b79dSAlexander Graf void *registration, void **protocol_interface); 1332bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_multiple_protocol_interfaces)( 1342bb9b79dSAlexander Graf void **handle, ...); 1352bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)( 1362bb9b79dSAlexander Graf void *handle, ...); 1372bb9b79dSAlexander Graf efi_status_t (EFIAPI *calculate_crc32)(void *data, 1382bb9b79dSAlexander Graf unsigned long data_size, uint32_t *crc32); 1392bb9b79dSAlexander Graf void (EFIAPI *copy_mem)(void *destination, void *source, 1402bb9b79dSAlexander Graf unsigned long length); 1412bb9b79dSAlexander Graf void (EFIAPI *set_mem)(void *buffer, unsigned long size, 1422bb9b79dSAlexander Graf uint8_t value); 143867a6ac8SSimon Glass void *create_event_ex; 144867a6ac8SSimon Glass }; 145867a6ac8SSimon Glass 146867a6ac8SSimon Glass /* Types and defines for EFI ResetSystem */ 147867a6ac8SSimon Glass enum efi_reset_type { 148867a6ac8SSimon Glass EFI_RESET_COLD = 0, 149867a6ac8SSimon Glass EFI_RESET_WARM = 1, 150867a6ac8SSimon Glass EFI_RESET_SHUTDOWN = 2 151867a6ac8SSimon Glass }; 152867a6ac8SSimon Glass 153867a6ac8SSimon Glass /* EFI Runtime Services table */ 154867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL 155867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_REVISION 0x00010000 156867a6ac8SSimon Glass 157867a6ac8SSimon Glass struct efi_runtime_services { 158867a6ac8SSimon Glass struct efi_table_hdr hdr; 1592bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_time)(struct efi_time *time, 1602bb9b79dSAlexander Graf struct efi_time_cap *capabilities); 1612bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_time)(struct efi_time *time); 1622bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_wakeup_time)(char *enabled, char *pending, 1632bb9b79dSAlexander Graf struct efi_time *time); 1642bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_wakeup_time)(char enabled, 1652bb9b79dSAlexander Graf struct efi_time *time); 1662bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_virtual_address_map)( 1672bb9b79dSAlexander Graf unsigned long memory_map_size, 1682bb9b79dSAlexander Graf unsigned long descriptor_size, 1692bb9b79dSAlexander Graf uint32_t descriptor_version, 1702bb9b79dSAlexander Graf struct efi_mem_desc *virtmap); 1712bb9b79dSAlexander Graf efi_status_t (*convert_pointer)(unsigned long dbg, void **address); 172867a6ac8SSimon Glass efi_status_t (EFIAPI *get_variable)(s16 *variable_name, 173867a6ac8SSimon Glass efi_guid_t *vendor, u32 *attributes, 174867a6ac8SSimon Glass unsigned long *data_size, void *data); 175867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_variable)( 176867a6ac8SSimon Glass unsigned long *variable_name_size, 177867a6ac8SSimon Glass s16 *variable_name, efi_guid_t *vendor); 178867a6ac8SSimon Glass efi_status_t (EFIAPI *set_variable)(s16 *variable_name, 179867a6ac8SSimon Glass efi_guid_t *vendor, u32 attributes, 180867a6ac8SSimon Glass unsigned long data_size, void *data); 1812bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_next_high_mono_count)( 1822bb9b79dSAlexander Graf uint32_t *high_count); 183867a6ac8SSimon Glass void (EFIAPI *reset_system)(enum efi_reset_type reset_type, 184867a6ac8SSimon Glass efi_status_t reset_status, 185867a6ac8SSimon Glass unsigned long data_size, void *reset_data); 186867a6ac8SSimon Glass void *update_capsule; 187867a6ac8SSimon Glass void *query_capsule_caps; 188867a6ac8SSimon Glass void *query_variable_info; 189867a6ac8SSimon Glass }; 190867a6ac8SSimon Glass 191867a6ac8SSimon Glass /* EFI Configuration Table and GUID definitions */ 192867a6ac8SSimon Glass #define NULL_GUID \ 193867a6ac8SSimon Glass EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ 194867a6ac8SSimon Glass 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) 195867a6ac8SSimon Glass 196867a6ac8SSimon Glass #define LOADED_IMAGE_PROTOCOL_GUID \ 197867a6ac8SSimon Glass EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \ 198867a6ac8SSimon Glass 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 199867a6ac8SSimon Glass 2002bb9b79dSAlexander Graf #define EFI_FDT_GUID \ 2012bb9b79dSAlexander Graf EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \ 2022bb9b79dSAlexander Graf 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) 2032bb9b79dSAlexander Graf 2042bb9b79dSAlexander Graf struct efi_configuration_table 2052bb9b79dSAlexander Graf { 2062bb9b79dSAlexander Graf efi_guid_t guid; 2072bb9b79dSAlexander Graf void *table; 2082bb9b79dSAlexander Graf }; 2092bb9b79dSAlexander Graf 2102bb9b79dSAlexander Graf #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) 2112bb9b79dSAlexander Graf 212867a6ac8SSimon Glass struct efi_system_table { 213867a6ac8SSimon Glass struct efi_table_hdr hdr; 214867a6ac8SSimon Glass unsigned long fw_vendor; /* physical addr of wchar_t vendor string */ 215867a6ac8SSimon Glass u32 fw_revision; 216867a6ac8SSimon Glass unsigned long con_in_handle; 217867a6ac8SSimon Glass struct efi_simple_input_interface *con_in; 218867a6ac8SSimon Glass unsigned long con_out_handle; 219867a6ac8SSimon Glass struct efi_simple_text_output_protocol *con_out; 220867a6ac8SSimon Glass unsigned long stderr_handle; 2212bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *std_err; 222867a6ac8SSimon Glass struct efi_runtime_services *runtime; 223867a6ac8SSimon Glass struct efi_boot_services *boottime; 224867a6ac8SSimon Glass unsigned long nr_tables; 2252bb9b79dSAlexander Graf struct efi_configuration_table *tables; 226867a6ac8SSimon Glass }; 227867a6ac8SSimon Glass 2282bb9b79dSAlexander Graf #define LOADED_IMAGE_GUID \ 2292bb9b79dSAlexander Graf EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \ 2302bb9b79dSAlexander Graf 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2312bb9b79dSAlexander Graf 232867a6ac8SSimon Glass struct efi_loaded_image { 233867a6ac8SSimon Glass u32 revision; 234867a6ac8SSimon Glass void *parent_handle; 235867a6ac8SSimon Glass struct efi_system_table *system_table; 236867a6ac8SSimon Glass void *device_handle; 237867a6ac8SSimon Glass void *file_path; 238867a6ac8SSimon Glass void *reserved; 239867a6ac8SSimon Glass u32 load_options_size; 240867a6ac8SSimon Glass void *load_options; 241867a6ac8SSimon Glass void *image_base; 242867a6ac8SSimon Glass aligned_u64 image_size; 243867a6ac8SSimon Glass unsigned int image_code_type; 244867a6ac8SSimon Glass unsigned int image_data_type; 245867a6ac8SSimon Glass unsigned long unload; 246*a86aeaf2SAlexander Graf 247*a86aeaf2SAlexander Graf /* Below are efi loader private fields */ 248*a86aeaf2SAlexander Graf #ifdef CONFIG_EFI_LOADER 249*a86aeaf2SAlexander Graf efi_status_t exit_status; 250*a86aeaf2SAlexander Graf struct jmp_buf_data exit_jmp; 251*a86aeaf2SAlexander Graf #endif 252867a6ac8SSimon Glass }; 253867a6ac8SSimon Glass 2542bb9b79dSAlexander Graf #define DEVICE_PATH_GUID \ 2552bb9b79dSAlexander Graf EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \ 2562bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b ) 2572bb9b79dSAlexander Graf 2582bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_END 0x7f 2592bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_END 0xff 2602bb9b79dSAlexander Graf 261867a6ac8SSimon Glass struct efi_device_path { 262867a6ac8SSimon Glass u8 type; 263867a6ac8SSimon Glass u8 sub_type; 264867a6ac8SSimon Glass u16 length; 265867a6ac8SSimon Glass }; 266867a6ac8SSimon Glass 2672bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 2682bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 2692bb9b79dSAlexander Graf 2702bb9b79dSAlexander Graf struct efi_device_path_file_path { 2712bb9b79dSAlexander Graf struct efi_device_path dp; 272ecbe1a07SAlexander Graf u16 str[32]; 2732bb9b79dSAlexander Graf }; 2742bb9b79dSAlexander Graf 2752bb9b79dSAlexander Graf #define BLOCK_IO_GUID \ 2762bb9b79dSAlexander Graf EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \ 2772bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2782bb9b79dSAlexander Graf 2792bb9b79dSAlexander Graf struct efi_block_io_media 2802bb9b79dSAlexander Graf { 2812bb9b79dSAlexander Graf u32 media_id; 2822bb9b79dSAlexander Graf char removable_media; 2832bb9b79dSAlexander Graf char media_present; 2842bb9b79dSAlexander Graf char logical_partition; 2852bb9b79dSAlexander Graf char read_only; 2862bb9b79dSAlexander Graf char write_caching; 2872bb9b79dSAlexander Graf u8 pad[3]; 2882bb9b79dSAlexander Graf u32 block_size; 2892bb9b79dSAlexander Graf u32 io_align; 2902bb9b79dSAlexander Graf u8 pad2[4]; 2912bb9b79dSAlexander Graf u64 last_block; 2922bb9b79dSAlexander Graf }; 2932bb9b79dSAlexander Graf 2942bb9b79dSAlexander Graf struct efi_block_io { 2952bb9b79dSAlexander Graf u64 revision; 2962bb9b79dSAlexander Graf struct efi_block_io_media *media; 2972bb9b79dSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_block_io *this, 2982bb9b79dSAlexander Graf char extended_verification); 2992bb9b79dSAlexander Graf efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this, 3002bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3012bb9b79dSAlexander Graf void *buffer); 3022bb9b79dSAlexander Graf efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this, 3032bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 3042bb9b79dSAlexander Graf void *buffer); 3052bb9b79dSAlexander Graf efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this); 3062bb9b79dSAlexander Graf }; 3072bb9b79dSAlexander Graf 308867a6ac8SSimon Glass struct simple_text_output_mode { 309867a6ac8SSimon Glass s32 max_mode; 310867a6ac8SSimon Glass s32 mode; 311867a6ac8SSimon Glass s32 attribute; 312867a6ac8SSimon Glass s32 cursor_column; 313867a6ac8SSimon Glass s32 cursor_row; 314867a6ac8SSimon Glass bool cursor_visible; 315867a6ac8SSimon Glass }; 316867a6ac8SSimon Glass 317867a6ac8SSimon Glass struct efi_simple_text_output_protocol { 318867a6ac8SSimon Glass void *reset; 319867a6ac8SSimon Glass efi_status_t (EFIAPI *output_string)( 320867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 321867a6ac8SSimon Glass const unsigned short *str); 3222bb9b79dSAlexander Graf efi_status_t (EFIAPI *test_string)( 3232bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3242bb9b79dSAlexander Graf const unsigned short *str); 325867a6ac8SSimon Glass efi_status_t(EFIAPI *query_mode)( 326867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 327867a6ac8SSimon Glass unsigned long mode_number, unsigned long *columns, 328867a6ac8SSimon Glass unsigned long *rows); 329867a6ac8SSimon Glass efi_status_t(EFIAPI *set_mode)( 330867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 331867a6ac8SSimon Glass unsigned long mode_number); 332867a6ac8SSimon Glass efi_status_t(EFIAPI *set_attribute)( 333867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 334867a6ac8SSimon Glass unsigned long attribute); 335867a6ac8SSimon Glass efi_status_t(EFIAPI *clear_screen) ( 336867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this); 337867a6ac8SSimon Glass efi_status_t(EFIAPI *set_cursor_position) ( 338867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 339867a6ac8SSimon Glass unsigned long column, unsigned long row); 3402bb9b79dSAlexander Graf efi_status_t(EFIAPI *enable_cursor)( 3412bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3422bb9b79dSAlexander Graf bool enable); 343867a6ac8SSimon Glass struct simple_text_output_mode *mode; 344867a6ac8SSimon Glass }; 345867a6ac8SSimon Glass 346867a6ac8SSimon Glass struct efi_input_key { 347867a6ac8SSimon Glass u16 scan_code; 348867a6ac8SSimon Glass s16 unicode_char; 349867a6ac8SSimon Glass }; 350867a6ac8SSimon Glass 351867a6ac8SSimon Glass struct efi_simple_input_interface { 352867a6ac8SSimon Glass efi_status_t(EFIAPI *reset)(struct efi_simple_input_interface *this, 353867a6ac8SSimon Glass bool ExtendedVerification); 354867a6ac8SSimon Glass efi_status_t(EFIAPI *read_key_stroke)( 355867a6ac8SSimon Glass struct efi_simple_input_interface *this, 356867a6ac8SSimon Glass struct efi_input_key *key); 357867a6ac8SSimon Glass void *wait_for_key; 358867a6ac8SSimon Glass }; 359867a6ac8SSimon Glass 3602bb9b79dSAlexander Graf #define CONSOLE_CONTROL_GUID \ 3612bb9b79dSAlexander Graf EFI_GUID(0xf42f7782, 0x12e, 0x4c12, \ 3622bb9b79dSAlexander Graf 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21) 3632bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_TEXT 0 3642bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_GFX 1 3652bb9b79dSAlexander Graf 3662bb9b79dSAlexander Graf struct efi_console_control_protocol 3672bb9b79dSAlexander Graf { 3682bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_mode)( 3692bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int *mode, 3702bb9b79dSAlexander Graf char *uga_exists, char *std_in_locked); 3712bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_mode)( 3722bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int mode); 3732bb9b79dSAlexander Graf efi_status_t (EFIAPI *lock_std_in)( 3742bb9b79dSAlexander Graf struct efi_console_control_protocol *this, 3752bb9b79dSAlexander Graf uint16_t *password); 3762bb9b79dSAlexander Graf }; 3772bb9b79dSAlexander Graf 378be8d3241SAlexander Graf #define EFI_GOP_GUID \ 379be8d3241SAlexander Graf EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \ 380be8d3241SAlexander Graf 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) 381be8d3241SAlexander Graf 382be8d3241SAlexander Graf #define EFI_GOT_RGBA8 0 383be8d3241SAlexander Graf #define EFI_GOT_BGRA8 1 384be8d3241SAlexander Graf #define EFI_GOT_BITMASK 2 385be8d3241SAlexander Graf 386be8d3241SAlexander Graf struct efi_gop_mode_info 387be8d3241SAlexander Graf { 388be8d3241SAlexander Graf u32 version; 389be8d3241SAlexander Graf u32 width; 390be8d3241SAlexander Graf u32 height; 391be8d3241SAlexander Graf u32 pixel_format; 392be8d3241SAlexander Graf u32 pixel_bitmask[4]; 393be8d3241SAlexander Graf u32 pixels_per_scanline; 394be8d3241SAlexander Graf }; 395be8d3241SAlexander Graf 396be8d3241SAlexander Graf struct efi_gop_mode 397be8d3241SAlexander Graf { 398be8d3241SAlexander Graf u32 max_mode; 399be8d3241SAlexander Graf u32 mode; 400be8d3241SAlexander Graf struct efi_gop_mode_info *info; 401be8d3241SAlexander Graf unsigned long info_size; 402be8d3241SAlexander Graf efi_physical_addr_t fb_base; 403be8d3241SAlexander Graf unsigned long fb_size; 404be8d3241SAlexander Graf }; 405be8d3241SAlexander Graf 406be8d3241SAlexander Graf #define EFI_BLT_VIDEO_FILL 0 407be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1 408be8d3241SAlexander Graf #define EFI_BLT_BUFFER_TO_VIDEO 2 409be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_VIDEO 3 410be8d3241SAlexander Graf 411be8d3241SAlexander Graf struct efi_gop 412be8d3241SAlexander Graf { 413be8d3241SAlexander Graf efi_status_t (EFIAPI *query_mode)(struct efi_gop *this, u32 mode_number, 414be8d3241SAlexander Graf unsigned long *size_of_info, 415be8d3241SAlexander Graf struct efi_gop_mode_info **info); 416be8d3241SAlexander Graf efi_status_t (EFIAPI *set_mode)(struct efi_gop *this, u32 mode_number); 417be8d3241SAlexander Graf efi_status_t (EFIAPI *blt)(struct efi_gop *this, void *buffer, 418be8d3241SAlexander Graf unsigned long operation, unsigned long sx, 419be8d3241SAlexander Graf unsigned long sy, unsigned long dx, 420be8d3241SAlexander Graf unsigned long dy, unsigned long width, 421be8d3241SAlexander Graf unsigned long height, unsigned long delta); 422be8d3241SAlexander Graf struct efi_gop_mode *mode; 423be8d3241SAlexander Graf }; 424be8d3241SAlexander Graf 4250efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_GUID \ 4260efe1bcfSAlexander Graf EFI_GUID(0xa19832b9, 0xac25, 0x11d3, \ 4270efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 4280efe1bcfSAlexander Graf 4290efe1bcfSAlexander Graf struct efi_mac_address { 4300efe1bcfSAlexander Graf char mac_addr[32]; 4310efe1bcfSAlexander Graf }; 4320efe1bcfSAlexander Graf 4330efe1bcfSAlexander Graf struct efi_ip_address { 4340efe1bcfSAlexander Graf u8 ip_addr[16]; 4350efe1bcfSAlexander Graf }; 4360efe1bcfSAlexander Graf 4370efe1bcfSAlexander Graf enum efi_simple_network_state { 4380efe1bcfSAlexander Graf EFI_NETWORK_STOPPED, 4390efe1bcfSAlexander Graf EFI_NETWORK_STARTED, 4400efe1bcfSAlexander Graf EFI_NETWORK_INITIALIZED, 4410efe1bcfSAlexander Graf }; 4420efe1bcfSAlexander Graf 4430efe1bcfSAlexander Graf struct efi_simple_network_mode { 4440efe1bcfSAlexander Graf enum efi_simple_network_state state; 4450efe1bcfSAlexander Graf u32 hwaddr_size; 4460efe1bcfSAlexander Graf u32 media_header_size; 4470efe1bcfSAlexander Graf u32 max_packet_size; 4480efe1bcfSAlexander Graf u32 nvram_size; 4490efe1bcfSAlexander Graf u32 nvram_access_size; 4500efe1bcfSAlexander Graf u32 receive_filter_mask; 4510efe1bcfSAlexander Graf u32 receive_filter_setting; 4520efe1bcfSAlexander Graf u32 max_mcast_filter_count; 4530efe1bcfSAlexander Graf u32 mcast_filter_count; 4540efe1bcfSAlexander Graf struct efi_mac_address mcast_filter[16]; 4550efe1bcfSAlexander Graf struct efi_mac_address current_address; 4560efe1bcfSAlexander Graf struct efi_mac_address broadcast_address; 4570efe1bcfSAlexander Graf struct efi_mac_address permanent_address; 4580efe1bcfSAlexander Graf u8 if_type; 4590efe1bcfSAlexander Graf u8 mac_changeable; 4600efe1bcfSAlexander Graf u8 multitx_supported; 4610efe1bcfSAlexander Graf u8 media_present_supported; 4620efe1bcfSAlexander Graf u8 media_present; 4630efe1bcfSAlexander Graf }; 4640efe1bcfSAlexander Graf 4650efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01, 4660efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02, 4670efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04, 4680efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08, 4690efe1bcfSAlexander Graf #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10, 4700efe1bcfSAlexander Graf 4710efe1bcfSAlexander Graf struct efi_simple_network 4720efe1bcfSAlexander Graf { 4730efe1bcfSAlexander Graf u64 revision; 4740efe1bcfSAlexander Graf efi_status_t (EFIAPI *start)(struct efi_simple_network *this); 4750efe1bcfSAlexander Graf efi_status_t (EFIAPI *stop)(struct efi_simple_network *this); 4760efe1bcfSAlexander Graf efi_status_t (EFIAPI *initialize)(struct efi_simple_network *this, 4770efe1bcfSAlexander Graf ulong extra_rx, ulong extra_tx); 4780efe1bcfSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_simple_network *this, 4790efe1bcfSAlexander Graf int extended_verification); 4800efe1bcfSAlexander Graf efi_status_t (EFIAPI *shutdown)(struct efi_simple_network *this); 4810efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive_filters)(struct efi_simple_network *this, 4820efe1bcfSAlexander Graf u32 enable, u32 disable, int reset_mcast_filter, 4830efe1bcfSAlexander Graf ulong mcast_filter_count, 4840efe1bcfSAlexander Graf struct efi_mac_address *mcast_filter); 4850efe1bcfSAlexander Graf efi_status_t (EFIAPI *station_address)(struct efi_simple_network *this, 4860efe1bcfSAlexander Graf int reset, struct efi_mac_address *new_mac); 4870efe1bcfSAlexander Graf efi_status_t (EFIAPI *statistics)(struct efi_simple_network *this, 4880efe1bcfSAlexander Graf int reset, ulong *stat_size, void *stat_table); 4890efe1bcfSAlexander Graf efi_status_t (EFIAPI *mcastiptomac)(struct efi_simple_network *this, 4900efe1bcfSAlexander Graf int ipv6, struct efi_ip_address *ip, 4910efe1bcfSAlexander Graf struct efi_mac_address *mac); 4920efe1bcfSAlexander Graf efi_status_t (EFIAPI *nvdata)(struct efi_simple_network *this, 4930efe1bcfSAlexander Graf int read_write, ulong offset, ulong buffer_size, 4940efe1bcfSAlexander Graf char *buffer); 4950efe1bcfSAlexander Graf efi_status_t (EFIAPI *get_status)(struct efi_simple_network *this, 4960efe1bcfSAlexander Graf u32 *int_status, void **txbuf); 4970efe1bcfSAlexander Graf efi_status_t (EFIAPI *transmit)(struct efi_simple_network *this, 4980efe1bcfSAlexander Graf ulong header_size, ulong buffer_size, void *buffer, 4990efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5000efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5010efe1bcfSAlexander Graf efi_status_t (EFIAPI *receive)(struct efi_simple_network *this, 5020efe1bcfSAlexander Graf ulong *header_size, ulong *buffer_size, void *buffer, 5030efe1bcfSAlexander Graf struct efi_mac_address *src_addr, 5040efe1bcfSAlexander Graf struct efi_mac_address *dest_addr, u16 *protocol); 5050efe1bcfSAlexander Graf void (EFIAPI *waitforpacket)(void); 5060efe1bcfSAlexander Graf struct efi_simple_network_mode *mode; 5070efe1bcfSAlexander Graf }; 5080efe1bcfSAlexander Graf 5090efe1bcfSAlexander Graf #define EFI_PXE_GUID \ 5100efe1bcfSAlexander Graf EFI_GUID(0x03c4e603, 0xac28, 0x11d3, \ 5110efe1bcfSAlexander Graf 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) 5120efe1bcfSAlexander Graf 5130efe1bcfSAlexander Graf struct efi_pxe_packet { 5140efe1bcfSAlexander Graf u8 packet[1472]; 5150efe1bcfSAlexander Graf }; 5160efe1bcfSAlexander Graf 5170efe1bcfSAlexander Graf struct efi_pxe_mode 5180efe1bcfSAlexander Graf { 5190efe1bcfSAlexander Graf u8 unused[52]; 5200efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_discover; 5210efe1bcfSAlexander Graf struct efi_pxe_packet dhcp_ack; 5220efe1bcfSAlexander Graf struct efi_pxe_packet proxy_offer; 5230efe1bcfSAlexander Graf struct efi_pxe_packet pxe_discover; 5240efe1bcfSAlexander Graf struct efi_pxe_packet pxe_reply; 5250efe1bcfSAlexander Graf }; 5260efe1bcfSAlexander Graf 5270efe1bcfSAlexander Graf struct efi_pxe { 5280efe1bcfSAlexander Graf u64 rev; 5290efe1bcfSAlexander Graf void (EFIAPI *start)(void); 5300efe1bcfSAlexander Graf void (EFIAPI *stop)(void); 5310efe1bcfSAlexander Graf void (EFIAPI *dhcp)(void); 5320efe1bcfSAlexander Graf void (EFIAPI *discover)(void); 5330efe1bcfSAlexander Graf void (EFIAPI *mftp)(void); 5340efe1bcfSAlexander Graf void (EFIAPI *udpwrite)(void); 5350efe1bcfSAlexander Graf void (EFIAPI *udpread)(void); 5360efe1bcfSAlexander Graf void (EFIAPI *setipfilter)(void); 5370efe1bcfSAlexander Graf void (EFIAPI *arp)(void); 5380efe1bcfSAlexander Graf void (EFIAPI *setparams)(void); 5390efe1bcfSAlexander Graf void (EFIAPI *setstationip)(void); 5400efe1bcfSAlexander Graf void (EFIAPI *setpackets)(void); 5410efe1bcfSAlexander Graf struct efi_pxe_mode *mode; 5420efe1bcfSAlexander Graf }; 5430efe1bcfSAlexander Graf 544867a6ac8SSimon Glass #endif 545