1
2
3
4
5
6
7
8
9#include <common.h>
10#include <part_efi.h>
11#include <efi_api.h>
12
13
14#if defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)
15
16#include <linux/list.h>
17
18#define EFI_ENTRY(format, ...) do { \
19 efi_restore_gd(); \
20 debug("EFI: Entry %s(" format ")\n", __func__, ##__VA_ARGS__); \
21 } while(0)
22
23#define EFI_EXIT(ret) efi_exit_func(ret);
24
25extern struct efi_runtime_services efi_runtime_services;
26extern struct efi_system_table systab;
27
28extern const struct efi_simple_text_output_protocol efi_con_out;
29extern const struct efi_simple_input_interface efi_con_in;
30extern const struct efi_console_control_protocol efi_console_control;
31
32extern const efi_guid_t efi_guid_console_control;
33extern const efi_guid_t efi_guid_device_path;
34extern const efi_guid_t efi_guid_loaded_image;
35
36extern unsigned int __efi_runtime_start, __efi_runtime_stop;
37extern unsigned int __efi_runtime_rel_start, __efi_runtime_rel_stop;
38
39
40
41
42
43
44struct efi_class_map {
45 const efi_guid_t *guid;
46 const void *interface;
47};
48
49
50
51
52
53
54
55struct efi_handler {
56 const efi_guid_t *guid;
57 efi_status_t (EFIAPI *open)(void *handle,
58 efi_guid_t *protocol, void **protocol_interface,
59 void *agent_handle, void *controller_handle,
60 uint32_t attributes);
61};
62
63
64
65
66
67
68
69
70struct efi_object {
71
72 struct list_head link;
73
74 struct efi_handler protocols[4];
75
76 void *handle;
77};
78
79
80extern struct list_head efi_obj_list;
81
82
83int efi_disk_register(void);
84
85int efi_gop_register(void);
86
87int efi_net_register(void **handle);
88
89
90void efi_net_set_dhcp_ack(void *pkt, int len);
91
92
93
94
95
96efi_status_t efi_return_handle(void *handle,
97 efi_guid_t *protocol, void **protocol_interface,
98 void *agent_handle, void *controller_handle,
99 uint32_t attributes);
100
101void efi_timer_check(void);
102
103void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info);
104
105void efi_save_gd(void);
106
107void efi_restore_gd(void);
108
109efi_status_t efi_exit_func(efi_status_t ret);
110
111void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map);
112
113void efi_set_bootdev(const char *dev, const char *devnr, const char *path);
114
115
116void *efi_alloc(uint64_t len, int memory_type);
117
118efi_status_t efi_allocate_pages(int type, int memory_type, unsigned long pages,
119 uint64_t *memory);
120
121efi_status_t efi_free_pages(uint64_t memory, unsigned long pages);
122
123efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
124 struct efi_mem_desc *memory_map,
125 unsigned long *map_key,
126 unsigned long *descriptor_size,
127 uint32_t *descriptor_version);
128
129uint64_t efi_add_memory_map(uint64_t start, uint64_t pages, int memory_type,
130 bool overlap_only_ram);
131
132int efi_memory_init(void);
133
134#ifdef CONFIG_EFI_LOADER_BOUNCE_BUFFER
135extern void *efi_bounce_buffer;
136#define EFI_LOADER_BOUNCE_BUFFER_SIZE (64 * 1024 * 1024)
137#endif
138
139
140static inline void ascii2unicode(u16 *unicode, const char *ascii)
141{
142 while (*ascii)
143 *(unicode++) = *(ascii++);
144}
145
146
147
148
149
150#define EFI_RUNTIME_DATA __attribute__ ((section ("efi_runtime_data")))
151#define EFI_RUNTIME_TEXT __attribute__ ((section ("efi_runtime_text")))
152
153#else
154
155
156#define EFI_RUNTIME_DATA
157#define EFI_RUNTIME_TEXT
158
159
160static inline void efi_restore_gd(void) { }
161static inline void efi_set_bootdev(const char *dev, const char *devnr,
162 const char *path) { }
163static inline void efi_net_set_dhcp_ack(void *pkt, int len) { }
164
165#endif
166