xref: /rk3399_rockchip-uboot/include/efi_api.h (revision ecbe1a07c507d37aeb5f0f9ce1c4cc20c70fec64)
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