-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathboot-services.h
211 lines (146 loc) · 8.07 KB
/
boot-services.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
// Copyright 2016 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#ifndef ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_BOOT_SERVICES_H_
#define ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_BOOT_SERVICES_H_
#include <stdbool.h>
#include <efi/protocol/device-path.h>
#include <efi/types.h>
#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION
#ifdef __cplusplus
extern "C" {
#endif
typedef size_t efi_tpl;
#define TPL_APPLICATION 4
#define TPL_CALLBACK 8
#define TPL_NOTIFY 16
#define TPL_HIGH_LEVEL 31
typedef enum {
AllocateAnyPages,
AllocateMaxAddress,
AllocateAddress,
MaxAllocateType
} efi_allocate_type;
typedef struct {
uint32_t Type;
uint32_t Padding;
efi_physical_addr PhysicalStart;
efi_virtual_addr VirtualStart;
uint64_t NumberOfPages;
uint64_t Attribute;
} efi_memory_descriptor;
#define EFI_MEMORY_UC 0x0000000000000001
#define EFI_MEMORY_WC 0x0000000000000002
#define EFI_MEMORY_WT 0x0000000000000004
#define EFI_MEMORY_WB 0x0000000000000008
#define EFI_MEMORY_UCE 0x0000000000000010
#define EFI_MEMORY_WP 0x0000000000001000
#define EFI_MEMORY_RP 0x0000000000002000
#define EFI_MEMORY_XP 0x0000000000004000
#define EFI_MEMORY_NV 0x0000000000008000
#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000
#define EFI_MEMORY_RO 0x0000000000020000
#define EFI_MEMORY_RUNTIME 0x8000000000000000
#define EFI_MEMORY_DESCRIPTOR_VERSION 1
typedef enum { EFI_NATIVE_INTERFACE } efi_interface_type;
typedef enum { AllHandles, ByRegisterNotify, ByProtocol } efi_locate_search_type;
#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002
#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004
#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010
#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020
typedef struct {
efi_handle agent_handle;
efi_handle controller_handle;
uint32_t attributes;
uint32_t open_count;
} efi_open_protocol_information_entry;
#define EFI_HII_PACKAGE_LIST_PROTOCOL_GUID \
{ \
0x6a1ee763, 0xd47a, 0x43b4, { 0xaa, 0xbe, 0xef, 0x1d, 0xe2, 0xab, 0x56, 0xfc } \
}
typedef struct efi_hii_package_list_header efi_hii_package_list_header;
typedef efi_hii_package_list_header* efi_hii_package_list_protocol;
// fwd declare efi_system_table to break circular dependencies
typedef struct efi_system_table efi_system_table;
typedef efi_status (*efi_image_entry_point)(efi_handle img, efi_system_table* sys) EFIAPI;
typedef struct {
efi_table_header Hdr;
efi_tpl (*RaiseTPL)(efi_tpl new_tpl) EFIAPI;
void (*RestoreTPL)(efi_tpl old_tpl) EFIAPI;
efi_status (*AllocatePages)(efi_allocate_type type, efi_memory_type memory_type, size_t pages,
efi_physical_addr* memory) EFIAPI;
efi_status (*FreePages)(efi_physical_addr memory, size_t pages) EFIAPI;
efi_status (*GetMemoryMap)(size_t* memory_map_size, efi_memory_descriptor* memory_map,
size_t* map_key, size_t* desc_size, uint32_t* desc_version) EFIAPI;
efi_status (*AllocatePool)(efi_memory_type pool_type, size_t size, void** buf) EFIAPI;
efi_status (*FreePool)(void* buf) EFIAPI;
efi_status (*CreateEvent)(uint32_t type, efi_tpl notify_tpl, efi_event_notify notify_fn,
void* notify_ctx, efi_event* event) EFIAPI;
efi_status (*SetTimer)(efi_event event, efi_timer_delay type, uint64_t trigger_time) EFIAPI;
efi_status (*WaitForEvent)(size_t num_events, efi_event* event, size_t* index) EFIAPI;
efi_status (*SignalEvent)(efi_event event) EFIAPI;
efi_status (*CloseEvent)(efi_event event) EFIAPI;
efi_status (*CheckEvent)(efi_event event) EFIAPI;
efi_status (*InstallProtocolInterface)(efi_handle* handle, const efi_guid* protocol,
efi_interface_type intf_type, void* intf) EFIAPI;
efi_status (*ReinstallProtocolInterface)(efi_handle hadle, const efi_guid* protocol,
void* old_intf, void* new_intf) EFIAPI;
efi_status (*UninstallProtocolInterface)(efi_handle handle, const efi_guid* protocol,
void* intf) EFIAPI;
efi_status (*HandleProtocol)(efi_handle handle, const efi_guid* protocol, void** intf) EFIAPI;
void* Reserved;
efi_status (*RegisterProtocolNotify)(const efi_guid* protocol, efi_event event,
void** registration) EFIAPI;
efi_status (*LocateHandle)(efi_locate_search_type search_type, const efi_guid* protocol,
void* search_key, size_t* buf_size, efi_handle* buf) EFIAPI;
efi_status (*LocateDevicePath)(const efi_guid* protocol, efi_device_path_protocol** path,
efi_handle* device) EFIAPI;
efi_status (*InstallConfigurationTable)(const efi_guid* guid, void* table) EFIAPI;
efi_status (*LoadImage)(bool boot_policy, efi_handle parent_image_handle,
efi_device_path_protocol* path, void* src, size_t src_size,
efi_handle* image_handle) EFIAPI;
efi_status (*StartImage)(efi_handle image_handle, size_t* exit_data_size,
char16_t** exit_data) EFIAPI;
efi_status (*Exit)(efi_handle image_handle, efi_status exit_status, size_t exit_data_size,
char16_t* exit_data) EFIAPI;
efi_status (*UnloadImage)(efi_handle image_handle) EFIAPI;
efi_status (*ExitBootServices)(efi_handle image_handle, size_t map_key) EFIAPI;
efi_status (*GetNextMonotonicCount)(uint64_t* count) EFIAPI;
efi_status (*Stall)(size_t microseconds) EFIAPI;
efi_status (*SetWatchdogTimer)(size_t timeout, uint64_t watchdog_code, size_t data_size,
char16_t* watchdog_data) EFIAPI;
efi_status (*ConnectController)(efi_handle controller_handle, efi_handle* driver_image_handle,
efi_device_path_protocol* remaining_path, bool recursive) EFIAPI;
efi_status (*DisconnectController)(efi_handle controller_handle, efi_handle driver_image_handle,
efi_handle child_handle) EFIAPI;
efi_status (*OpenProtocol)(efi_handle handle, const efi_guid* protocol, void** intf,
efi_handle agent_handle, efi_handle controller_handle,
uint32_t attributes) EFIAPI;
efi_status (*CloseProtocol)(efi_handle handle, const efi_guid* protocol, efi_handle agent_handle,
efi_handle controller_handle) EFIAPI;
efi_status (*OpenProtocolInformation)(efi_handle handle, const efi_guid* protocol,
efi_open_protocol_information_entry** entry_buf,
size_t* entry_count) EFIAPI;
efi_status (*ProtocolsPerHandle)(efi_handle handle, efi_guid*** protocol_buf,
size_t* protocol_buf_count) EFIAPI;
efi_status (*LocateHandleBuffer)(efi_locate_search_type search_type, const efi_guid* protocol,
void* search_key, size_t* num_handles, efi_handle** buf) EFIAPI;
efi_status (*LocateProtocol)(const efi_guid* protocol, void* registration, void** intf) EFIAPI;
efi_status (*InstallMultipleProtocolInterfaces)(efi_handle* handle, ...) EFIAPI;
efi_status (*UninstallMultipleProtocolInterfaces)(efi_handle handle, ...) EFIAPI;
efi_status (*CalculateCrc32)(void* data, size_t len, uint32_t* crc32) EFIAPI;
void (*CopyMem)(void* dest, const void* src, size_t len) EFIAPI;
void (*SetMem)(void* buf, size_t len, uint8_t val) EFIAPI;
efi_status (*CreateEventEx)(uint32_t type, efi_tpl notify_tpl, efi_event_notify notify_fn,
const void* notify_ctx, const efi_guid* event_group,
efi_event* event) EFIAPI;
} efi_boot_services;
#ifdef __cplusplus
}
#endif
#endif // ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_BOOT_SERVICES_H_