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 202bb9b79dSAlexander Graf /* Types and defines for EFI CreateEvent */ 212bb9b79dSAlexander Graf enum efi_event_type { 222bb9b79dSAlexander Graf EFI_TIMER_STOP = 0, 232bb9b79dSAlexander Graf EFI_TIMER_PERIODIC = 1, 242bb9b79dSAlexander Graf EFI_TIMER_RELATIVE = 2 252bb9b79dSAlexander Graf }; 262bb9b79dSAlexander Graf 27867a6ac8SSimon Glass /* EFI Boot Services table */ 28867a6ac8SSimon Glass struct efi_boot_services { 29867a6ac8SSimon Glass struct efi_table_hdr hdr; 302bb9b79dSAlexander Graf efi_status_t (EFIAPI *raise_tpl)(unsigned long new_tpl); 312bb9b79dSAlexander Graf void (EFIAPI *restore_tpl)(unsigned long old_tpl); 32867a6ac8SSimon Glass 33867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pages)(int, int, unsigned long, 34867a6ac8SSimon Glass efi_physical_addr_t *); 35867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pages)(efi_physical_addr_t, unsigned long); 36867a6ac8SSimon Glass efi_status_t (EFIAPI *get_memory_map)(unsigned long *memory_map_size, 37867a6ac8SSimon Glass struct efi_mem_desc *desc, unsigned long *key, 38867a6ac8SSimon Glass unsigned long *desc_size, u32 *desc_version); 39867a6ac8SSimon Glass efi_status_t (EFIAPI *allocate_pool)(int, unsigned long, void **); 40867a6ac8SSimon Glass efi_status_t (EFIAPI *free_pool)(void *); 41867a6ac8SSimon Glass 422bb9b79dSAlexander Graf efi_status_t (EFIAPI *create_event)(enum efi_event_type type, 432bb9b79dSAlexander Graf unsigned long notify_tpl, 442bb9b79dSAlexander Graf void (EFIAPI *notify_function) (void *event, 452bb9b79dSAlexander Graf void *context), 462bb9b79dSAlexander Graf void *notify_context, void **event); 472bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_timer)(void *event, int type, 482bb9b79dSAlexander Graf uint64_t trigger_time); 49867a6ac8SSimon Glass efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events, 50867a6ac8SSimon Glass void *event, unsigned long *index); 512bb9b79dSAlexander Graf efi_status_t (EFIAPI *signal_event)(void *event); 522bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_event)(void *event); 532bb9b79dSAlexander Graf efi_status_t (EFIAPI *check_event)(void *event); 54867a6ac8SSimon Glass 552bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_protocol_interface)( 562bb9b79dSAlexander Graf void **handle, efi_guid_t *protocol, 572bb9b79dSAlexander Graf int protocol_interface_type, void *protocol_interface); 582bb9b79dSAlexander Graf efi_status_t (EFIAPI *reinstall_protocol_interface)( 592bb9b79dSAlexander Graf void *handle, efi_guid_t *protocol, 602bb9b79dSAlexander Graf void *old_interface, void *new_interface); 612bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_protocol_interface)(void *handle, 622bb9b79dSAlexander Graf efi_guid_t *protocol, void *protocol_interface); 63867a6ac8SSimon Glass efi_status_t (EFIAPI *handle_protocol)(efi_handle_t, efi_guid_t *, 64867a6ac8SSimon Glass void **); 65867a6ac8SSimon Glass void *reserved; 662bb9b79dSAlexander Graf efi_status_t (EFIAPI *register_protocol_notify)( 672bb9b79dSAlexander Graf efi_guid_t *protocol, void *event, 682bb9b79dSAlexander Graf void **registration); 69867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle)( 70867a6ac8SSimon Glass enum efi_locate_search_type search_type, 71867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 72867a6ac8SSimon Glass unsigned long *buffer_size, efi_handle_t *buffer); 73867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_device_path)(efi_guid_t *protocol, 74867a6ac8SSimon Glass struct efi_device_path **device_path, 75867a6ac8SSimon Glass efi_handle_t *device); 762bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_configuration_table)( 772bb9b79dSAlexander Graf efi_guid_t *guid, void *table); 78867a6ac8SSimon Glass 79867a6ac8SSimon Glass efi_status_t (EFIAPI *load_image)(bool boot_policiy, 80867a6ac8SSimon Glass efi_handle_t parent_image, 81867a6ac8SSimon Glass struct efi_device_path *file_path, void *source_buffer, 82867a6ac8SSimon Glass unsigned long source_size, efi_handle_t *image); 83867a6ac8SSimon Glass efi_status_t (EFIAPI *start_image)(efi_handle_t handle, 84867a6ac8SSimon Glass unsigned long *exitdata_size, 85867a6ac8SSimon Glass s16 **exitdata); 86867a6ac8SSimon Glass efi_status_t (EFIAPI *exit)(efi_handle_t handle, 87867a6ac8SSimon Glass efi_status_t exit_status, 88867a6ac8SSimon Glass unsigned long exitdata_size, s16 *exitdata); 892bb9b79dSAlexander Graf efi_status_t (EFIAPI *unload_image)(void *image_handle); 90867a6ac8SSimon Glass efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); 91867a6ac8SSimon Glass 92867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_monotonic_count)(u64 *count); 93867a6ac8SSimon Glass efi_status_t (EFIAPI *stall)(unsigned long usecs); 942bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, 952bb9b79dSAlexander Graf uint64_t watchdog_code, unsigned long data_size, 962bb9b79dSAlexander Graf uint16_t *watchdog_data); 97867a6ac8SSimon Glass efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, 98867a6ac8SSimon Glass efi_handle_t *driver_image_handle, 99867a6ac8SSimon Glass struct efi_device_path *remaining_device_path, 100867a6ac8SSimon Glass bool recursive); 1012bb9b79dSAlexander Graf efi_status_t (EFIAPI *disconnect_controller)(void *controller_handle, 1022bb9b79dSAlexander Graf void *driver_image_handle, void *child_handle); 103867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 104867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 105867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 106867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 107867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 108867a6ac8SSimon Glass #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 109867a6ac8SSimon Glass efi_status_t (EFIAPI *open_protocol)(efi_handle_t handle, 110867a6ac8SSimon Glass efi_guid_t *protocol, void **interface, 111867a6ac8SSimon Glass efi_handle_t agent_handle, 112867a6ac8SSimon Glass efi_handle_t controller_handle, u32 attributes); 1132bb9b79dSAlexander Graf efi_status_t (EFIAPI *close_protocol)(void *handle, 1142bb9b79dSAlexander Graf efi_guid_t *protocol, void *agent_handle, 1152bb9b79dSAlexander Graf void *controller_handle); 116867a6ac8SSimon Glass efi_status_t(EFIAPI *open_protocol_information)(efi_handle_t handle, 117867a6ac8SSimon Glass efi_guid_t *protocol, 118867a6ac8SSimon Glass struct efi_open_protocol_info_entry **entry_buffer, 119867a6ac8SSimon Glass unsigned long *entry_count); 120867a6ac8SSimon Glass efi_status_t (EFIAPI *protocols_per_handle)(efi_handle_t handle, 121867a6ac8SSimon Glass efi_guid_t ***protocol_buffer, 122867a6ac8SSimon Glass unsigned long *protocols_buffer_count); 123867a6ac8SSimon Glass efi_status_t (EFIAPI *locate_handle_buffer) ( 124867a6ac8SSimon Glass enum efi_locate_search_type search_type, 125867a6ac8SSimon Glass efi_guid_t *protocol, void *search_key, 126867a6ac8SSimon Glass unsigned long *no_handles, efi_handle_t **buffer); 1272bb9b79dSAlexander Graf efi_status_t (EFIAPI *locate_protocol)(efi_guid_t *protocol, 1282bb9b79dSAlexander Graf void *registration, void **protocol_interface); 1292bb9b79dSAlexander Graf efi_status_t (EFIAPI *install_multiple_protocol_interfaces)( 1302bb9b79dSAlexander Graf void **handle, ...); 1312bb9b79dSAlexander Graf efi_status_t (EFIAPI *uninstall_multiple_protocol_interfaces)( 1322bb9b79dSAlexander Graf void *handle, ...); 1332bb9b79dSAlexander Graf efi_status_t (EFIAPI *calculate_crc32)(void *data, 1342bb9b79dSAlexander Graf unsigned long data_size, uint32_t *crc32); 1352bb9b79dSAlexander Graf void (EFIAPI *copy_mem)(void *destination, void *source, 1362bb9b79dSAlexander Graf unsigned long length); 1372bb9b79dSAlexander Graf void (EFIAPI *set_mem)(void *buffer, unsigned long size, 1382bb9b79dSAlexander Graf uint8_t value); 139867a6ac8SSimon Glass void *create_event_ex; 140867a6ac8SSimon Glass }; 141867a6ac8SSimon Glass 142867a6ac8SSimon Glass /* Types and defines for EFI ResetSystem */ 143867a6ac8SSimon Glass enum efi_reset_type { 144867a6ac8SSimon Glass EFI_RESET_COLD = 0, 145867a6ac8SSimon Glass EFI_RESET_WARM = 1, 146867a6ac8SSimon Glass EFI_RESET_SHUTDOWN = 2 147867a6ac8SSimon Glass }; 148867a6ac8SSimon Glass 149867a6ac8SSimon Glass /* EFI Runtime Services table */ 150867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552ULL 151867a6ac8SSimon Glass #define EFI_RUNTIME_SERVICES_REVISION 0x00010000 152867a6ac8SSimon Glass 153867a6ac8SSimon Glass struct efi_runtime_services { 154867a6ac8SSimon Glass struct efi_table_hdr hdr; 1552bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_time)(struct efi_time *time, 1562bb9b79dSAlexander Graf struct efi_time_cap *capabilities); 1572bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_time)(struct efi_time *time); 1582bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_wakeup_time)(char *enabled, char *pending, 1592bb9b79dSAlexander Graf struct efi_time *time); 1602bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_wakeup_time)(char enabled, 1612bb9b79dSAlexander Graf struct efi_time *time); 1622bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_virtual_address_map)( 1632bb9b79dSAlexander Graf unsigned long memory_map_size, 1642bb9b79dSAlexander Graf unsigned long descriptor_size, 1652bb9b79dSAlexander Graf uint32_t descriptor_version, 1662bb9b79dSAlexander Graf struct efi_mem_desc *virtmap); 1672bb9b79dSAlexander Graf efi_status_t (*convert_pointer)(unsigned long dbg, void **address); 168867a6ac8SSimon Glass efi_status_t (EFIAPI *get_variable)(s16 *variable_name, 169867a6ac8SSimon Glass efi_guid_t *vendor, u32 *attributes, 170867a6ac8SSimon Glass unsigned long *data_size, void *data); 171867a6ac8SSimon Glass efi_status_t (EFIAPI *get_next_variable)( 172867a6ac8SSimon Glass unsigned long *variable_name_size, 173867a6ac8SSimon Glass s16 *variable_name, efi_guid_t *vendor); 174867a6ac8SSimon Glass efi_status_t (EFIAPI *set_variable)(s16 *variable_name, 175867a6ac8SSimon Glass efi_guid_t *vendor, u32 attributes, 176867a6ac8SSimon Glass unsigned long data_size, void *data); 1772bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_next_high_mono_count)( 1782bb9b79dSAlexander Graf uint32_t *high_count); 179867a6ac8SSimon Glass void (EFIAPI *reset_system)(enum efi_reset_type reset_type, 180867a6ac8SSimon Glass efi_status_t reset_status, 181867a6ac8SSimon Glass unsigned long data_size, void *reset_data); 182867a6ac8SSimon Glass void *update_capsule; 183867a6ac8SSimon Glass void *query_capsule_caps; 184867a6ac8SSimon Glass void *query_variable_info; 185867a6ac8SSimon Glass }; 186867a6ac8SSimon Glass 187867a6ac8SSimon Glass /* EFI Configuration Table and GUID definitions */ 188867a6ac8SSimon Glass #define NULL_GUID \ 189867a6ac8SSimon Glass EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ 190867a6ac8SSimon Glass 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) 191867a6ac8SSimon Glass 192867a6ac8SSimon Glass #define LOADED_IMAGE_PROTOCOL_GUID \ 193867a6ac8SSimon Glass EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, \ 194867a6ac8SSimon Glass 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 195867a6ac8SSimon Glass 1962bb9b79dSAlexander Graf #define EFI_FDT_GUID \ 1972bb9b79dSAlexander Graf EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \ 1982bb9b79dSAlexander Graf 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) 1992bb9b79dSAlexander Graf 2002bb9b79dSAlexander Graf struct efi_configuration_table 2012bb9b79dSAlexander Graf { 2022bb9b79dSAlexander Graf efi_guid_t guid; 2032bb9b79dSAlexander Graf void *table; 2042bb9b79dSAlexander Graf }; 2052bb9b79dSAlexander Graf 2062bb9b79dSAlexander Graf #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) 2072bb9b79dSAlexander Graf 208867a6ac8SSimon Glass struct efi_system_table { 209867a6ac8SSimon Glass struct efi_table_hdr hdr; 210867a6ac8SSimon Glass unsigned long fw_vendor; /* physical addr of wchar_t vendor string */ 211867a6ac8SSimon Glass u32 fw_revision; 212867a6ac8SSimon Glass unsigned long con_in_handle; 213867a6ac8SSimon Glass struct efi_simple_input_interface *con_in; 214867a6ac8SSimon Glass unsigned long con_out_handle; 215867a6ac8SSimon Glass struct efi_simple_text_output_protocol *con_out; 216867a6ac8SSimon Glass unsigned long stderr_handle; 2172bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *std_err; 218867a6ac8SSimon Glass struct efi_runtime_services *runtime; 219867a6ac8SSimon Glass struct efi_boot_services *boottime; 220867a6ac8SSimon Glass unsigned long nr_tables; 2212bb9b79dSAlexander Graf struct efi_configuration_table *tables; 222867a6ac8SSimon Glass }; 223867a6ac8SSimon Glass 2242bb9b79dSAlexander Graf #define LOADED_IMAGE_GUID \ 2252bb9b79dSAlexander Graf EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \ 2262bb9b79dSAlexander Graf 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2272bb9b79dSAlexander Graf 228867a6ac8SSimon Glass struct efi_loaded_image { 229867a6ac8SSimon Glass u32 revision; 230867a6ac8SSimon Glass void *parent_handle; 231867a6ac8SSimon Glass struct efi_system_table *system_table; 232867a6ac8SSimon Glass void *device_handle; 233867a6ac8SSimon Glass void *file_path; 234867a6ac8SSimon Glass void *reserved; 235867a6ac8SSimon Glass u32 load_options_size; 236867a6ac8SSimon Glass void *load_options; 237867a6ac8SSimon Glass void *image_base; 238867a6ac8SSimon Glass aligned_u64 image_size; 239867a6ac8SSimon Glass unsigned int image_code_type; 240867a6ac8SSimon Glass unsigned int image_data_type; 241867a6ac8SSimon Glass unsigned long unload; 242867a6ac8SSimon Glass }; 243867a6ac8SSimon Glass 2442bb9b79dSAlexander Graf #define DEVICE_PATH_GUID \ 2452bb9b79dSAlexander Graf EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, \ 2462bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b ) 2472bb9b79dSAlexander Graf 2482bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_END 0x7f 2492bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_END 0xff 2502bb9b79dSAlexander Graf 251867a6ac8SSimon Glass struct efi_device_path { 252867a6ac8SSimon Glass u8 type; 253867a6ac8SSimon Glass u8 sub_type; 254867a6ac8SSimon Glass u16 length; 255867a6ac8SSimon Glass }; 256867a6ac8SSimon Glass 2572bb9b79dSAlexander Graf #define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04 2582bb9b79dSAlexander Graf # define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04 2592bb9b79dSAlexander Graf 2602bb9b79dSAlexander Graf struct efi_device_path_file_path { 2612bb9b79dSAlexander Graf struct efi_device_path dp; 262*ecbe1a07SAlexander Graf u16 str[32]; 2632bb9b79dSAlexander Graf }; 2642bb9b79dSAlexander Graf 2652bb9b79dSAlexander Graf #define BLOCK_IO_GUID \ 2662bb9b79dSAlexander Graf EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \ 2672bb9b79dSAlexander Graf 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) 2682bb9b79dSAlexander Graf 2692bb9b79dSAlexander Graf struct efi_block_io_media 2702bb9b79dSAlexander Graf { 2712bb9b79dSAlexander Graf u32 media_id; 2722bb9b79dSAlexander Graf char removable_media; 2732bb9b79dSAlexander Graf char media_present; 2742bb9b79dSAlexander Graf char logical_partition; 2752bb9b79dSAlexander Graf char read_only; 2762bb9b79dSAlexander Graf char write_caching; 2772bb9b79dSAlexander Graf u8 pad[3]; 2782bb9b79dSAlexander Graf u32 block_size; 2792bb9b79dSAlexander Graf u32 io_align; 2802bb9b79dSAlexander Graf u8 pad2[4]; 2812bb9b79dSAlexander Graf u64 last_block; 2822bb9b79dSAlexander Graf }; 2832bb9b79dSAlexander Graf 2842bb9b79dSAlexander Graf struct efi_block_io { 2852bb9b79dSAlexander Graf u64 revision; 2862bb9b79dSAlexander Graf struct efi_block_io_media *media; 2872bb9b79dSAlexander Graf efi_status_t (EFIAPI *reset)(struct efi_block_io *this, 2882bb9b79dSAlexander Graf char extended_verification); 2892bb9b79dSAlexander Graf efi_status_t (EFIAPI *read_blocks)(struct efi_block_io *this, 2902bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 2912bb9b79dSAlexander Graf void *buffer); 2922bb9b79dSAlexander Graf efi_status_t (EFIAPI *write_blocks)(struct efi_block_io *this, 2932bb9b79dSAlexander Graf u32 media_id, u64 lba, unsigned long buffer_size, 2942bb9b79dSAlexander Graf void *buffer); 2952bb9b79dSAlexander Graf efi_status_t (EFIAPI *flush_blocks)(struct efi_block_io *this); 2962bb9b79dSAlexander Graf }; 2972bb9b79dSAlexander Graf 298867a6ac8SSimon Glass struct simple_text_output_mode { 299867a6ac8SSimon Glass s32 max_mode; 300867a6ac8SSimon Glass s32 mode; 301867a6ac8SSimon Glass s32 attribute; 302867a6ac8SSimon Glass s32 cursor_column; 303867a6ac8SSimon Glass s32 cursor_row; 304867a6ac8SSimon Glass bool cursor_visible; 305867a6ac8SSimon Glass }; 306867a6ac8SSimon Glass 307867a6ac8SSimon Glass struct efi_simple_text_output_protocol { 308867a6ac8SSimon Glass void *reset; 309867a6ac8SSimon Glass efi_status_t (EFIAPI *output_string)( 310867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 311867a6ac8SSimon Glass const unsigned short *str); 3122bb9b79dSAlexander Graf efi_status_t (EFIAPI *test_string)( 3132bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3142bb9b79dSAlexander Graf const unsigned short *str); 315867a6ac8SSimon Glass efi_status_t(EFIAPI *query_mode)( 316867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 317867a6ac8SSimon Glass unsigned long mode_number, unsigned long *columns, 318867a6ac8SSimon Glass unsigned long *rows); 319867a6ac8SSimon Glass efi_status_t(EFIAPI *set_mode)( 320867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 321867a6ac8SSimon Glass unsigned long mode_number); 322867a6ac8SSimon Glass efi_status_t(EFIAPI *set_attribute)( 323867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 324867a6ac8SSimon Glass unsigned long attribute); 325867a6ac8SSimon Glass efi_status_t(EFIAPI *clear_screen) ( 326867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this); 327867a6ac8SSimon Glass efi_status_t(EFIAPI *set_cursor_position) ( 328867a6ac8SSimon Glass struct efi_simple_text_output_protocol *this, 329867a6ac8SSimon Glass unsigned long column, unsigned long row); 3302bb9b79dSAlexander Graf efi_status_t(EFIAPI *enable_cursor)( 3312bb9b79dSAlexander Graf struct efi_simple_text_output_protocol *this, 3322bb9b79dSAlexander Graf bool enable); 333867a6ac8SSimon Glass struct simple_text_output_mode *mode; 334867a6ac8SSimon Glass }; 335867a6ac8SSimon Glass 336867a6ac8SSimon Glass struct efi_input_key { 337867a6ac8SSimon Glass u16 scan_code; 338867a6ac8SSimon Glass s16 unicode_char; 339867a6ac8SSimon Glass }; 340867a6ac8SSimon Glass 341867a6ac8SSimon Glass struct efi_simple_input_interface { 342867a6ac8SSimon Glass efi_status_t(EFIAPI *reset)(struct efi_simple_input_interface *this, 343867a6ac8SSimon Glass bool ExtendedVerification); 344867a6ac8SSimon Glass efi_status_t(EFIAPI *read_key_stroke)( 345867a6ac8SSimon Glass struct efi_simple_input_interface *this, 346867a6ac8SSimon Glass struct efi_input_key *key); 347867a6ac8SSimon Glass void *wait_for_key; 348867a6ac8SSimon Glass }; 349867a6ac8SSimon Glass 3502bb9b79dSAlexander Graf #define CONSOLE_CONTROL_GUID \ 3512bb9b79dSAlexander Graf EFI_GUID(0xf42f7782, 0x12e, 0x4c12, \ 3522bb9b79dSAlexander Graf 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21) 3532bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_TEXT 0 3542bb9b79dSAlexander Graf #define EFI_CONSOLE_MODE_GFX 1 3552bb9b79dSAlexander Graf 3562bb9b79dSAlexander Graf struct efi_console_control_protocol 3572bb9b79dSAlexander Graf { 3582bb9b79dSAlexander Graf efi_status_t (EFIAPI *get_mode)( 3592bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int *mode, 3602bb9b79dSAlexander Graf char *uga_exists, char *std_in_locked); 3612bb9b79dSAlexander Graf efi_status_t (EFIAPI *set_mode)( 3622bb9b79dSAlexander Graf struct efi_console_control_protocol *this, int mode); 3632bb9b79dSAlexander Graf efi_status_t (EFIAPI *lock_std_in)( 3642bb9b79dSAlexander Graf struct efi_console_control_protocol *this, 3652bb9b79dSAlexander Graf uint16_t *password); 3662bb9b79dSAlexander Graf }; 3672bb9b79dSAlexander Graf 368be8d3241SAlexander Graf #define EFI_GOP_GUID \ 369be8d3241SAlexander Graf EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \ 370be8d3241SAlexander Graf 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) 371be8d3241SAlexander Graf 372be8d3241SAlexander Graf #define EFI_GOT_RGBA8 0 373be8d3241SAlexander Graf #define EFI_GOT_BGRA8 1 374be8d3241SAlexander Graf #define EFI_GOT_BITMASK 2 375be8d3241SAlexander Graf 376be8d3241SAlexander Graf struct efi_gop_mode_info 377be8d3241SAlexander Graf { 378be8d3241SAlexander Graf u32 version; 379be8d3241SAlexander Graf u32 width; 380be8d3241SAlexander Graf u32 height; 381be8d3241SAlexander Graf u32 pixel_format; 382be8d3241SAlexander Graf u32 pixel_bitmask[4]; 383be8d3241SAlexander Graf u32 pixels_per_scanline; 384be8d3241SAlexander Graf }; 385be8d3241SAlexander Graf 386be8d3241SAlexander Graf struct efi_gop_mode 387be8d3241SAlexander Graf { 388be8d3241SAlexander Graf u32 max_mode; 389be8d3241SAlexander Graf u32 mode; 390be8d3241SAlexander Graf struct efi_gop_mode_info *info; 391be8d3241SAlexander Graf unsigned long info_size; 392be8d3241SAlexander Graf efi_physical_addr_t fb_base; 393be8d3241SAlexander Graf unsigned long fb_size; 394be8d3241SAlexander Graf }; 395be8d3241SAlexander Graf 396be8d3241SAlexander Graf #define EFI_BLT_VIDEO_FILL 0 397be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_BLT_BUFFER 1 398be8d3241SAlexander Graf #define EFI_BLT_BUFFER_TO_VIDEO 2 399be8d3241SAlexander Graf #define EFI_BLT_VIDEO_TO_VIDEO 3 400be8d3241SAlexander Graf 401be8d3241SAlexander Graf struct efi_gop 402be8d3241SAlexander Graf { 403be8d3241SAlexander Graf efi_status_t (EFIAPI *query_mode)(struct efi_gop *this, u32 mode_number, 404be8d3241SAlexander Graf unsigned long *size_of_info, 405be8d3241SAlexander Graf struct efi_gop_mode_info **info); 406be8d3241SAlexander Graf efi_status_t (EFIAPI *set_mode)(struct efi_gop *this, u32 mode_number); 407be8d3241SAlexander Graf efi_status_t (EFIAPI *blt)(struct efi_gop *this, void *buffer, 408be8d3241SAlexander Graf unsigned long operation, unsigned long sx, 409be8d3241SAlexander Graf unsigned long sy, unsigned long dx, 410be8d3241SAlexander Graf unsigned long dy, unsigned long width, 411be8d3241SAlexander Graf unsigned long height, unsigned long delta); 412be8d3241SAlexander Graf struct efi_gop_mode *mode; 413be8d3241SAlexander Graf }; 414be8d3241SAlexander Graf 415867a6ac8SSimon Glass #endif 416