1 1.3 jmcneill /* $NetBSD: efiapi.h,v 1.4 2021/09/30 19:02:47 jmcneill Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _EFI_API_H 4 1.1 jakllsch #define _EFI_API_H 5 1.1 jakllsch 6 1.1 jakllsch /*++ 7 1.1 jakllsch 8 1.1 jakllsch Copyright (c) 1998 Intel Corporation 9 1.1 jakllsch 10 1.1 jakllsch Module Name: 11 1.1 jakllsch 12 1.1 jakllsch efiapi.h 13 1.1 jakllsch 14 1.1 jakllsch Abstract: 15 1.1 jakllsch 16 1.1 jakllsch Global EFI runtime & boot service interfaces 17 1.1 jakllsch 18 1.1 jakllsch 19 1.1 jakllsch 20 1.1 jakllsch 21 1.1 jakllsch Revision History 22 1.1 jakllsch 23 1.1 jakllsch --*/ 24 1.1 jakllsch 25 1.1 jakllsch // 26 1.1 jakllsch // EFI Specification Revision 27 1.1 jakllsch // 28 1.1 jakllsch 29 1.1 jakllsch #define EFI_SPECIFICATION_MAJOR_REVISION 1 30 1.1 jakllsch #define EFI_SPECIFICATION_MINOR_REVISION 02 31 1.1 jakllsch 32 1.1 jakllsch // 33 1.1 jakllsch // Declare forward referenced data structures 34 1.1 jakllsch // 35 1.1 jakllsch 36 1.1 jakllsch INTERFACE_DECL(_EFI_SYSTEM_TABLE); 37 1.1 jakllsch 38 1.1 jakllsch // 39 1.1 jakllsch // EFI Memory 40 1.1 jakllsch // 41 1.1 jakllsch 42 1.1 jakllsch typedef 43 1.1 jakllsch EFI_STATUS 44 1.1 jakllsch (EFIAPI *EFI_ALLOCATE_PAGES) ( 45 1.1 jakllsch IN EFI_ALLOCATE_TYPE Type, 46 1.1 jakllsch IN EFI_MEMORY_TYPE MemoryType, 47 1.1 jakllsch IN UINTN NoPages, 48 1.1 jakllsch OUT EFI_PHYSICAL_ADDRESS *Memory 49 1.1 jakllsch ); 50 1.1 jakllsch 51 1.1 jakllsch typedef 52 1.1 jakllsch EFI_STATUS 53 1.1 jakllsch (EFIAPI *EFI_FREE_PAGES) ( 54 1.1 jakllsch IN EFI_PHYSICAL_ADDRESS Memory, 55 1.1 jakllsch IN UINTN NoPages 56 1.1 jakllsch ); 57 1.1 jakllsch 58 1.1 jakllsch typedef 59 1.1 jakllsch EFI_STATUS 60 1.1 jakllsch (EFIAPI *EFI_GET_MEMORY_MAP) ( 61 1.1 jakllsch IN OUT UINTN *MemoryMapSize, 62 1.1 jakllsch IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, 63 1.1 jakllsch OUT UINTN *MapKey, 64 1.1 jakllsch OUT UINTN *DescriptorSize, 65 1.1 jakllsch OUT UINT32 *DescriptorVersion 66 1.1 jakllsch ); 67 1.1 jakllsch 68 1.1 jakllsch #define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size)) 69 1.1 jakllsch 70 1.1 jakllsch 71 1.1 jakllsch typedef 72 1.1 jakllsch EFI_STATUS 73 1.1 jakllsch (EFIAPI *EFI_ALLOCATE_POOL) ( 74 1.1 jakllsch IN EFI_MEMORY_TYPE PoolType, 75 1.1 jakllsch IN UINTN Size, 76 1.1 jakllsch OUT VOID **Buffer 77 1.1 jakllsch ); 78 1.1 jakllsch 79 1.1 jakllsch typedef 80 1.1 jakllsch EFI_STATUS 81 1.1 jakllsch (EFIAPI *EFI_FREE_POOL) ( 82 1.1 jakllsch IN VOID *Buffer 83 1.1 jakllsch ); 84 1.1 jakllsch 85 1.1 jakllsch typedef 86 1.1 jakllsch EFI_STATUS 87 1.1 jakllsch (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( 88 1.1 jakllsch IN UINTN MemoryMapSize, 89 1.1 jakllsch IN UINTN DescriptorSize, 90 1.1 jakllsch IN UINT32 DescriptorVersion, 91 1.1 jakllsch IN EFI_MEMORY_DESCRIPTOR *VirtualMap 92 1.1 jakllsch ); 93 1.1 jakllsch 94 1.1 jakllsch 95 1.1 jakllsch #define EFI_OPTIONAL_PTR 0x00000001 96 1.1 jakllsch #define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc 97 1.1 jakllsch #define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data 98 1.1 jakllsch 99 1.1 jakllsch 100 1.1 jakllsch typedef 101 1.1 jakllsch EFI_STATUS 102 1.1 jakllsch (EFIAPI *EFI_CONVERT_POINTER) ( 103 1.1 jakllsch IN UINTN DebugDisposition, 104 1.1 jakllsch IN OUT VOID **Address 105 1.1 jakllsch ); 106 1.1 jakllsch 107 1.1 jakllsch 108 1.1 jakllsch // 109 1.1 jakllsch // EFI Events 110 1.1 jakllsch // 111 1.1 jakllsch 112 1.1 jakllsch #define EVT_TIMER 0x80000000 113 1.1 jakllsch #define EVT_RUNTIME 0x40000000 114 1.1 jakllsch #define EVT_RUNTIME_CONTEXT 0x20000000 115 1.1 jakllsch 116 1.1 jakllsch #define EVT_NOTIFY_WAIT 0x00000100 117 1.1 jakllsch #define EVT_NOTIFY_SIGNAL 0x00000200 118 1.1 jakllsch 119 1.1 jakllsch #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 120 1.1 jakllsch #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 121 1.1 jakllsch 122 1.1 jakllsch #define EVT_EFI_SIGNAL_MASK 0x000000FF 123 1.3 jmcneill #define EVT_EFI_SIGNAL_MAX 4 124 1.3 jmcneill 125 1.3 jmcneill #define EFI_EVENT_TIMER EVT_TIMER 126 1.3 jmcneill #define EFI_EVENT_RUNTIME EVT_RUNTIME 127 1.3 jmcneill #define EFI_EVENT_RUNTIME_CONTEXT EVT_RUNTIME_CONTEXT 128 1.3 jmcneill #define EFI_EVENT_NOTIFY_WAIT EVT_NOTIFY_WAIT 129 1.3 jmcneill #define EFI_EVENT_NOTIFY_SIGNAL EVT_NOTIFY_SIGNAL 130 1.3 jmcneill #define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES EVT_SIGNAL_EXIT_BOOT_SERVICES 131 1.3 jmcneill #define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 132 1.3 jmcneill #define EFI_EVENT_EFI_SIGNAL_MASK EVT_EFI_SIGNAL_MASK 133 1.3 jmcneill #define EFI_EVENT_EFI_SIGNAL_MAX EVT_EFI_SIGNAL_MAX 134 1.3 jmcneill 135 1.1 jakllsch 136 1.1 jakllsch typedef 137 1.1 jakllsch VOID 138 1.1 jakllsch (EFIAPI *EFI_EVENT_NOTIFY) ( 139 1.1 jakllsch IN EFI_EVENT Event, 140 1.1 jakllsch IN VOID *Context 141 1.1 jakllsch ); 142 1.1 jakllsch 143 1.1 jakllsch typedef 144 1.1 jakllsch EFI_STATUS 145 1.1 jakllsch (EFIAPI *EFI_CREATE_EVENT) ( 146 1.1 jakllsch IN UINT32 Type, 147 1.1 jakllsch IN EFI_TPL NotifyTpl, 148 1.1 jakllsch IN EFI_EVENT_NOTIFY NotifyFunction, 149 1.1 jakllsch IN VOID *NotifyContext, 150 1.1 jakllsch OUT EFI_EVENT *Event 151 1.1 jakllsch ); 152 1.1 jakllsch 153 1.1 jakllsch typedef enum { 154 1.1 jakllsch TimerCancel, 155 1.1 jakllsch TimerPeriodic, 156 1.1 jakllsch TimerRelative, 157 1.1 jakllsch TimerTypeMax 158 1.1 jakllsch } EFI_TIMER_DELAY; 159 1.1 jakllsch 160 1.1 jakllsch typedef 161 1.1 jakllsch EFI_STATUS 162 1.1 jakllsch (EFIAPI *EFI_SET_TIMER) ( 163 1.1 jakllsch IN EFI_EVENT Event, 164 1.1 jakllsch IN EFI_TIMER_DELAY Type, 165 1.1 jakllsch IN UINT64 TriggerTime 166 1.1 jakllsch ); 167 1.1 jakllsch 168 1.1 jakllsch typedef 169 1.1 jakllsch EFI_STATUS 170 1.1 jakllsch (EFIAPI *EFI_SIGNAL_EVENT) ( 171 1.1 jakllsch IN EFI_EVENT Event 172 1.1 jakllsch ); 173 1.1 jakllsch 174 1.1 jakllsch typedef 175 1.1 jakllsch EFI_STATUS 176 1.1 jakllsch (EFIAPI *EFI_WAIT_FOR_EVENT) ( 177 1.1 jakllsch IN UINTN NumberOfEvents, 178 1.1 jakllsch IN EFI_EVENT *Event, 179 1.1 jakllsch OUT UINTN *Index 180 1.1 jakllsch ); 181 1.1 jakllsch 182 1.1 jakllsch typedef 183 1.1 jakllsch EFI_STATUS 184 1.1 jakllsch (EFIAPI *EFI_CLOSE_EVENT) ( 185 1.1 jakllsch IN EFI_EVENT Event 186 1.1 jakllsch ); 187 1.1 jakllsch 188 1.1 jakllsch typedef 189 1.1 jakllsch EFI_STATUS 190 1.1 jakllsch (EFIAPI *EFI_CHECK_EVENT) ( 191 1.1 jakllsch IN EFI_EVENT Event 192 1.1 jakllsch ); 193 1.1 jakllsch 194 1.1 jakllsch // 195 1.1 jakllsch // Task priority level 196 1.1 jakllsch // 197 1.1 jakllsch 198 1.3 jmcneill #define TPL_APPLICATION 4 199 1.3 jmcneill #define TPL_CALLBACK 8 200 1.3 jmcneill #define TPL_NOTIFY 16 201 1.3 jmcneill #define TPL_HIGH_LEVEL 31 202 1.3 jmcneill #define EFI_TPL_APPLICATION TPL_APPLICATION 203 1.3 jmcneill #define EFI_TPL_CALLBACK TPL_CALLBACK 204 1.3 jmcneill #define EFI_TPL_NOTIFY TPL_NOTIFY 205 1.3 jmcneill #define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL 206 1.1 jakllsch typedef 207 1.1 jakllsch EFI_TPL 208 1.1 jakllsch (EFIAPI *EFI_RAISE_TPL) ( 209 1.1 jakllsch IN EFI_TPL NewTpl 210 1.1 jakllsch ); 211 1.1 jakllsch 212 1.1 jakllsch typedef 213 1.1 jakllsch VOID 214 1.1 jakllsch (EFIAPI *EFI_RESTORE_TPL) ( 215 1.1 jakllsch IN EFI_TPL OldTpl 216 1.1 jakllsch ); 217 1.1 jakllsch 218 1.1 jakllsch 219 1.1 jakllsch // 220 1.1 jakllsch // EFI platform varibles 221 1.1 jakllsch // 222 1.1 jakllsch 223 1.1 jakllsch #define EFI_GLOBAL_VARIABLE \ 224 1.1 jakllsch { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} } 225 1.1 jakllsch 226 1.1 jakllsch // Variable attributes 227 1.3 jmcneill #define EFI_VARIABLE_NON_VOLATILE 0x00000001 228 1.3 jmcneill #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 229 1.3 jmcneill #define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 230 1.3 jmcneill #define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 231 1.3 jmcneill #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 232 1.3 jmcneill #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 233 1.3 jmcneill #define EFI_VARIABLE_APPEND_WRITE 0x00000040 234 1.1 jakllsch 235 1.1 jakllsch // Variable size limitation 236 1.1 jakllsch #define EFI_MAXIMUM_VARIABLE_SIZE 1024 237 1.1 jakllsch 238 1.1 jakllsch typedef 239 1.1 jakllsch EFI_STATUS 240 1.1 jakllsch (EFIAPI *EFI_GET_VARIABLE) ( 241 1.1 jakllsch IN CHAR16 *VariableName, 242 1.1 jakllsch IN EFI_GUID *VendorGuid, 243 1.1 jakllsch OUT UINT32 *Attributes OPTIONAL, 244 1.1 jakllsch IN OUT UINTN *DataSize, 245 1.1 jakllsch OUT VOID *Data 246 1.1 jakllsch ); 247 1.1 jakllsch 248 1.1 jakllsch typedef 249 1.1 jakllsch EFI_STATUS 250 1.1 jakllsch (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( 251 1.1 jakllsch IN OUT UINTN *VariableNameSize, 252 1.1 jakllsch IN OUT CHAR16 *VariableName, 253 1.1 jakllsch IN OUT EFI_GUID *VendorGuid 254 1.1 jakllsch ); 255 1.1 jakllsch 256 1.1 jakllsch 257 1.1 jakllsch typedef 258 1.1 jakllsch EFI_STATUS 259 1.1 jakllsch (EFIAPI *EFI_SET_VARIABLE) ( 260 1.1 jakllsch IN CHAR16 *VariableName, 261 1.1 jakllsch IN EFI_GUID *VendorGuid, 262 1.1 jakllsch IN UINT32 Attributes, 263 1.1 jakllsch IN UINTN DataSize, 264 1.1 jakllsch IN VOID *Data 265 1.1 jakllsch ); 266 1.1 jakllsch 267 1.1 jakllsch 268 1.1 jakllsch // 269 1.1 jakllsch // EFI Time 270 1.1 jakllsch // 271 1.1 jakllsch 272 1.1 jakllsch typedef struct { 273 1.1 jakllsch UINT32 Resolution; // 1e-6 parts per million 274 1.1 jakllsch UINT32 Accuracy; // hertz 275 1.1 jakllsch BOOLEAN SetsToZero; // Set clears sub-second time 276 1.1 jakllsch } EFI_TIME_CAPABILITIES; 277 1.1 jakllsch 278 1.1 jakllsch 279 1.1 jakllsch typedef 280 1.1 jakllsch EFI_STATUS 281 1.1 jakllsch (EFIAPI *EFI_GET_TIME) ( 282 1.1 jakllsch OUT EFI_TIME *Time, 283 1.1 jakllsch OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 284 1.1 jakllsch ); 285 1.1 jakllsch 286 1.1 jakllsch typedef 287 1.1 jakllsch EFI_STATUS 288 1.1 jakllsch (EFIAPI *EFI_SET_TIME) ( 289 1.1 jakllsch IN EFI_TIME *Time 290 1.1 jakllsch ); 291 1.1 jakllsch 292 1.1 jakllsch typedef 293 1.1 jakllsch EFI_STATUS 294 1.1 jakllsch (EFIAPI *EFI_GET_WAKEUP_TIME) ( 295 1.1 jakllsch OUT BOOLEAN *Enabled, 296 1.1 jakllsch OUT BOOLEAN *Pending, 297 1.1 jakllsch OUT EFI_TIME *Time 298 1.1 jakllsch ); 299 1.1 jakllsch 300 1.1 jakllsch typedef 301 1.1 jakllsch EFI_STATUS 302 1.1 jakllsch (EFIAPI *EFI_SET_WAKEUP_TIME) ( 303 1.1 jakllsch IN BOOLEAN Enable, 304 1.1 jakllsch IN EFI_TIME *Time OPTIONAL 305 1.1 jakllsch ); 306 1.1 jakllsch 307 1.1 jakllsch 308 1.1 jakllsch // 309 1.1 jakllsch // Image functions 310 1.1 jakllsch // 311 1.1 jakllsch 312 1.1 jakllsch 313 1.1 jakllsch // PE32+ Subsystem type for EFI images 314 1.1 jakllsch 315 1.1 jakllsch #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION) 316 1.1 jakllsch #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 317 1.1 jakllsch #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 318 1.1 jakllsch #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 319 1.1 jakllsch #endif 320 1.1 jakllsch 321 1.1 jakllsch // PE32+ Machine type for EFI images 322 1.1 jakllsch 323 1.1 jakllsch #if !defined(EFI_IMAGE_MACHINE_IA32) 324 1.1 jakllsch #define EFI_IMAGE_MACHINE_IA32 0x014c 325 1.1 jakllsch #endif 326 1.1 jakllsch 327 1.1 jakllsch #if !defined(EFI_IMAGE_MACHINE_IA64) 328 1.1 jakllsch #define EFI_IMAGE_MACHINE_IA64 0x0200 329 1.1 jakllsch #endif 330 1.1 jakllsch 331 1.3 jmcneill #if !defined(EFI_IMAGE_MACHINE_EBC) 332 1.3 jmcneill #define EFI_IMAGE_MACHINE_EBC 0x0EBC 333 1.3 jmcneill #endif 334 1.3 jmcneill 335 1.3 jmcneill #if !defined(EFI_IMAGE_MACHINE_X64) 336 1.3 jmcneill #define EFI_IMAGE_MACHINE_X64 0x8664 337 1.3 jmcneill #endif 338 1.3 jmcneill 339 1.3 jmcneill #if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) 340 1.3 jmcneill #define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 341 1.3 jmcneill #endif 342 1.3 jmcneill 343 1.3 jmcneill #if !defined(EFI_IMAGE_MACHINE_AARCH64) 344 1.3 jmcneill #define EFI_IMAGE_MACHINE_AARCH64 0xAA64 345 1.3 jmcneill #endif 346 1.3 jmcneill 347 1.4 jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV32) 348 1.4 jmcneill #define EFI_IMAGE_MACHINE_RISCV32 0x5032 349 1.4 jmcneill #endif 350 1.4 jmcneill 351 1.4 jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV64) 352 1.4 jmcneill #define EFI_IMAGE_MACHINE_RISCV64 0x5064 353 1.4 jmcneill #endif 354 1.4 jmcneill 355 1.4 jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV128) 356 1.4 jmcneill #define EFI_IMAGE_MACHINE_RISCV128 0x5128 357 1.4 jmcneill #endif 358 1.4 jmcneill 359 1.1 jakllsch // Image Entry prototype 360 1.1 jakllsch 361 1.1 jakllsch typedef 362 1.1 jakllsch EFI_STATUS 363 1.1 jakllsch (EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 364 1.1 jakllsch IN EFI_HANDLE ImageHandle, 365 1.1 jakllsch IN struct _EFI_SYSTEM_TABLE *SystemTable 366 1.1 jakllsch ); 367 1.1 jakllsch 368 1.1 jakllsch typedef 369 1.1 jakllsch EFI_STATUS 370 1.1 jakllsch (EFIAPI *EFI_IMAGE_LOAD) ( 371 1.1 jakllsch IN BOOLEAN BootPolicy, 372 1.1 jakllsch IN EFI_HANDLE ParentImageHandle, 373 1.1 jakllsch IN EFI_DEVICE_PATH *FilePath, 374 1.1 jakllsch IN VOID *SourceBuffer OPTIONAL, 375 1.1 jakllsch IN UINTN SourceSize, 376 1.1 jakllsch OUT EFI_HANDLE *ImageHandle 377 1.1 jakllsch ); 378 1.1 jakllsch 379 1.1 jakllsch typedef 380 1.1 jakllsch EFI_STATUS 381 1.1 jakllsch (EFIAPI *EFI_IMAGE_START) ( 382 1.1 jakllsch IN EFI_HANDLE ImageHandle, 383 1.1 jakllsch OUT UINTN *ExitDataSize, 384 1.1 jakllsch OUT CHAR16 **ExitData OPTIONAL 385 1.1 jakllsch ); 386 1.1 jakllsch 387 1.1 jakllsch typedef 388 1.1 jakllsch EFI_STATUS 389 1.1 jakllsch (EFIAPI *EFI_EXIT) ( 390 1.1 jakllsch IN EFI_HANDLE ImageHandle, 391 1.1 jakllsch IN EFI_STATUS ExitStatus, 392 1.1 jakllsch IN UINTN ExitDataSize, 393 1.1 jakllsch IN CHAR16 *ExitData OPTIONAL 394 1.1 jakllsch ); 395 1.1 jakllsch 396 1.1 jakllsch 397 1.1 jakllsch // Image handle 398 1.3 jmcneill /*#define LOADED_IMAGE_PROTOCOL \ 399 1.1 jakllsch { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 400 1.1 jakllsch 401 1.1 jakllsch #define EFI_IMAGE_INFORMATION_REVISION 0x1000 402 1.1 jakllsch typedef struct { 403 1.1 jakllsch UINT32 Revision; 404 1.1 jakllsch EFI_HANDLE ParentHandle; 405 1.1 jakllsch struct _EFI_SYSTEM_TABLE *SystemTable; 406 1.1 jakllsch 407 1.1 jakllsch // Source location of image 408 1.1 jakllsch EFI_HANDLE DeviceHandle; 409 1.1 jakllsch EFI_DEVICE_PATH *FilePath; 410 1.1 jakllsch VOID *Reserved; 411 1.1 jakllsch 412 1.1 jakllsch // Images load options 413 1.1 jakllsch UINT32 LoadOptionsSize; 414 1.1 jakllsch VOID *LoadOptions; 415 1.1 jakllsch 416 1.1 jakllsch // Location of where image was loaded 417 1.1 jakllsch VOID *ImageBase; 418 1.1 jakllsch UINT64 ImageSize; 419 1.1 jakllsch EFI_MEMORY_TYPE ImageCodeType; 420 1.1 jakllsch EFI_MEMORY_TYPE ImageDataType; 421 1.1 jakllsch 422 1.1 jakllsch // If the driver image supports a dynamic unload request 423 1.1 jakllsch EFI_IMAGE_UNLOAD Unload; 424 1.1 jakllsch 425 1.3 jmcneill } EFI_LOADED_IMAGE;*/ 426 1.1 jakllsch 427 1.1 jakllsch 428 1.1 jakllsch typedef 429 1.1 jakllsch EFI_STATUS 430 1.1 jakllsch (EFIAPI *EFI_EXIT_BOOT_SERVICES) ( 431 1.1 jakllsch IN EFI_HANDLE ImageHandle, 432 1.1 jakllsch IN UINTN MapKey 433 1.1 jakllsch ); 434 1.1 jakllsch 435 1.1 jakllsch // 436 1.1 jakllsch // Misc 437 1.1 jakllsch // 438 1.1 jakllsch 439 1.1 jakllsch 440 1.1 jakllsch typedef 441 1.1 jakllsch EFI_STATUS 442 1.1 jakllsch (EFIAPI *EFI_STALL) ( 443 1.1 jakllsch IN UINTN Microseconds 444 1.1 jakllsch ); 445 1.1 jakllsch 446 1.1 jakllsch typedef 447 1.1 jakllsch EFI_STATUS 448 1.1 jakllsch (EFIAPI *EFI_SET_WATCHDOG_TIMER) ( 449 1.1 jakllsch IN UINTN Timeout, 450 1.1 jakllsch IN UINT64 WatchdogCode, 451 1.1 jakllsch IN UINTN DataSize, 452 1.1 jakllsch IN CHAR16 *WatchdogData OPTIONAL 453 1.1 jakllsch ); 454 1.1 jakllsch 455 1.1 jakllsch typedef 456 1.1 jakllsch EFI_STATUS 457 1.1 jakllsch (EFIAPI *EFI_CONNECT_CONTROLLER) ( 458 1.1 jakllsch IN EFI_HANDLE ControllerHandle, 459 1.1 jakllsch IN EFI_HANDLE *DriverImageHandle OPTIONAL, 460 1.1 jakllsch IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, 461 1.1 jakllsch IN BOOLEAN Recursive 462 1.1 jakllsch ); 463 1.1 jakllsch 464 1.1 jakllsch typedef 465 1.1 jakllsch EFI_STATUS 466 1.1 jakllsch (EFIAPI *EFI_DISCONNECT_CONTROLLER) ( 467 1.1 jakllsch IN EFI_HANDLE ControllerHandle, 468 1.1 jakllsch IN EFI_HANDLE DriverImageHandle OPTIONAL, 469 1.1 jakllsch IN EFI_HANDLE ChildHandle OPTIONAL 470 1.1 jakllsch ); 471 1.1 jakllsch 472 1.1 jakllsch #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 473 1.1 jakllsch #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 474 1.1 jakllsch #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 475 1.1 jakllsch #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 476 1.1 jakllsch #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 477 1.1 jakllsch #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 478 1.1 jakllsch 479 1.1 jakllsch typedef 480 1.1 jakllsch EFI_STATUS 481 1.1 jakllsch (EFIAPI *EFI_OPEN_PROTOCOL) ( 482 1.1 jakllsch IN EFI_HANDLE Handle, 483 1.1 jakllsch IN EFI_GUID *Protocol, 484 1.1 jakllsch OUT VOID **Interface OPTIONAL, 485 1.1 jakllsch IN EFI_HANDLE AgentHandle, 486 1.1 jakllsch IN EFI_HANDLE ControllerHandle, 487 1.1 jakllsch IN UINT32 Attributes 488 1.1 jakllsch ); 489 1.1 jakllsch 490 1.1 jakllsch typedef 491 1.1 jakllsch EFI_STATUS 492 1.1 jakllsch (EFIAPI *EFI_CLOSE_PROTOCOL) ( 493 1.1 jakllsch IN EFI_HANDLE Handle, 494 1.1 jakllsch IN EFI_GUID *Protocol, 495 1.1 jakllsch IN EFI_HANDLE AgentHandle, 496 1.1 jakllsch IN EFI_HANDLE ControllerHandle 497 1.1 jakllsch ); 498 1.1 jakllsch 499 1.1 jakllsch typedef struct { 500 1.1 jakllsch EFI_HANDLE AgentHandle; 501 1.1 jakllsch EFI_HANDLE ControllerHandle; 502 1.1 jakllsch UINT32 Attributes; 503 1.1 jakllsch UINT32 OpenCount; 504 1.1 jakllsch } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 505 1.1 jakllsch 506 1.1 jakllsch typedef 507 1.1 jakllsch EFI_STATUS 508 1.1 jakllsch (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( 509 1.1 jakllsch IN EFI_HANDLE Handle, 510 1.1 jakllsch IN EFI_GUID *Protocol, 511 1.1 jakllsch OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 512 1.1 jakllsch OUT UINTN *EntryCount 513 1.1 jakllsch ); 514 1.1 jakllsch 515 1.1 jakllsch typedef 516 1.1 jakllsch EFI_STATUS 517 1.1 jakllsch (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( 518 1.1 jakllsch IN EFI_HANDLE Handle, 519 1.1 jakllsch OUT EFI_GUID ***ProtocolBuffer, 520 1.1 jakllsch OUT UINTN *ProtocolBufferCount 521 1.1 jakllsch ); 522 1.1 jakllsch 523 1.1 jakllsch typedef enum { 524 1.1 jakllsch AllHandles, 525 1.1 jakllsch ByRegisterNotify, 526 1.1 jakllsch ByProtocol 527 1.1 jakllsch } EFI_LOCATE_SEARCH_TYPE; 528 1.1 jakllsch 529 1.1 jakllsch typedef 530 1.1 jakllsch EFI_STATUS 531 1.1 jakllsch (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( 532 1.1 jakllsch IN EFI_LOCATE_SEARCH_TYPE SearchType, 533 1.1 jakllsch IN EFI_GUID *Protocol OPTIONAL, 534 1.1 jakllsch IN VOID *SearchKey OPTIONAL, 535 1.1 jakllsch IN OUT UINTN *NoHandles, 536 1.1 jakllsch OUT EFI_HANDLE **Buffer 537 1.1 jakllsch ); 538 1.1 jakllsch 539 1.1 jakllsch typedef 540 1.1 jakllsch EFI_STATUS 541 1.1 jakllsch (EFIAPI *EFI_LOCATE_PROTOCOL) ( 542 1.1 jakllsch IN EFI_GUID *Protocol, 543 1.1 jakllsch IN VOID *Registration OPTIONAL, 544 1.1 jakllsch OUT VOID **Interface 545 1.1 jakllsch ); 546 1.1 jakllsch 547 1.1 jakllsch typedef 548 1.1 jakllsch EFI_STATUS 549 1.1 jakllsch (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 550 1.1 jakllsch IN OUT EFI_HANDLE *Handle, 551 1.1 jakllsch ... 552 1.1 jakllsch ); 553 1.1 jakllsch 554 1.1 jakllsch typedef 555 1.1 jakllsch EFI_STATUS 556 1.1 jakllsch (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 557 1.1 jakllsch IN OUT EFI_HANDLE Handle, 558 1.1 jakllsch ... 559 1.1 jakllsch ); 560 1.1 jakllsch 561 1.1 jakllsch typedef 562 1.1 jakllsch EFI_STATUS 563 1.1 jakllsch (EFIAPI *EFI_CALCULATE_CRC32) ( 564 1.1 jakllsch IN VOID *Data, 565 1.1 jakllsch IN UINTN DataSize, 566 1.1 jakllsch OUT UINT32 *Crc32 567 1.1 jakllsch ); 568 1.1 jakllsch 569 1.1 jakllsch typedef 570 1.1 jakllsch VOID 571 1.1 jakllsch (EFIAPI *EFI_COPY_MEM) ( 572 1.1 jakllsch IN VOID *Destination, 573 1.1 jakllsch IN VOID *Source, 574 1.1 jakllsch IN UINTN Length 575 1.1 jakllsch ); 576 1.1 jakllsch 577 1.1 jakllsch typedef 578 1.1 jakllsch VOID 579 1.1 jakllsch (EFIAPI *EFI_SET_MEM) ( 580 1.1 jakllsch IN VOID *Buffer, 581 1.1 jakllsch IN UINTN Size, 582 1.1 jakllsch IN UINT8 Value 583 1.1 jakllsch ); 584 1.1 jakllsch 585 1.1 jakllsch 586 1.1 jakllsch typedef 587 1.1 jakllsch EFI_STATUS 588 1.1 jakllsch (EFIAPI *EFI_CREATE_EVENT_EX) ( 589 1.1 jakllsch IN UINT32 Type, 590 1.1 jakllsch IN EFI_TPL NotifyTpl, 591 1.1 jakllsch IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, 592 1.1 jakllsch IN const VOID *NotifyContext OPTIONAL, 593 1.4 jmcneill IN const EFI_GUID *EventGroup OPTIONAL, 594 1.1 jakllsch OUT EFI_EVENT *Event 595 1.1 jakllsch ); 596 1.1 jakllsch 597 1.1 jakllsch typedef enum { 598 1.1 jakllsch EfiResetCold, 599 1.1 jakllsch EfiResetWarm, 600 1.1 jakllsch EfiResetShutdown 601 1.1 jakllsch } EFI_RESET_TYPE; 602 1.1 jakllsch 603 1.1 jakllsch typedef 604 1.1 jakllsch EFI_STATUS 605 1.1 jakllsch (EFIAPI *EFI_RESET_SYSTEM) ( 606 1.1 jakllsch IN EFI_RESET_TYPE ResetType, 607 1.1 jakllsch IN EFI_STATUS ResetStatus, 608 1.1 jakllsch IN UINTN DataSize, 609 1.1 jakllsch IN CHAR16 *ResetData OPTIONAL 610 1.1 jakllsch ); 611 1.1 jakllsch 612 1.1 jakllsch typedef 613 1.1 jakllsch EFI_STATUS 614 1.1 jakllsch (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( 615 1.1 jakllsch OUT UINT64 *Count 616 1.1 jakllsch ); 617 1.1 jakllsch 618 1.1 jakllsch typedef 619 1.1 jakllsch EFI_STATUS 620 1.1 jakllsch (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( 621 1.1 jakllsch OUT UINT32 *HighCount 622 1.1 jakllsch ); 623 1.1 jakllsch 624 1.3 jmcneill typedef struct { 625 1.3 jmcneill UINT64 Length; 626 1.3 jmcneill union { 627 1.3 jmcneill EFI_PHYSICAL_ADDRESS DataBlock; 628 1.3 jmcneill EFI_PHYSICAL_ADDRESS ContinuationPointer; 629 1.3 jmcneill } Union; 630 1.3 jmcneill } EFI_CAPSULE_BLOCK_DESCRIPTOR; 631 1.3 jmcneill 632 1.3 jmcneill typedef struct { 633 1.3 jmcneill EFI_GUID CapsuleGuid; 634 1.3 jmcneill UINT32 HeaderSize; 635 1.3 jmcneill UINT32 Flags; 636 1.3 jmcneill UINT32 CapsuleImageSize; 637 1.3 jmcneill } EFI_CAPSULE_HEADER; 638 1.3 jmcneill 639 1.3 jmcneill #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 640 1.3 jmcneill #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 641 1.3 jmcneill #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 642 1.3 jmcneill 643 1.3 jmcneill typedef 644 1.3 jmcneill EFI_STATUS 645 1.3 jmcneill (EFIAPI *EFI_UPDATE_CAPSULE) ( 646 1.3 jmcneill IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 647 1.3 jmcneill IN UINTN CapsuleCount, 648 1.3 jmcneill IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL 649 1.3 jmcneill ); 650 1.3 jmcneill 651 1.3 jmcneill typedef 652 1.3 jmcneill EFI_STATUS 653 1.3 jmcneill (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( 654 1.3 jmcneill IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 655 1.3 jmcneill IN UINTN CapsuleCount, 656 1.3 jmcneill OUT UINT64 *MaximumCapsuleSize, 657 1.3 jmcneill OUT EFI_RESET_TYPE *ResetType 658 1.3 jmcneill ); 659 1.3 jmcneill 660 1.3 jmcneill typedef 661 1.3 jmcneill EFI_STATUS 662 1.3 jmcneill (EFIAPI *EFI_QUERY_VARIABLE_INFO) ( 663 1.3 jmcneill IN UINT32 Attributes, 664 1.3 jmcneill OUT UINT64 *MaximumVariableStorageSize, 665 1.3 jmcneill OUT UINT64 *RemainingVariableStorageSize, 666 1.3 jmcneill OUT UINT64 *MaximumVariableSize 667 1.3 jmcneill ); 668 1.3 jmcneill 669 1.1 jakllsch // 670 1.1 jakllsch // Protocol handler functions 671 1.1 jakllsch // 672 1.1 jakllsch 673 1.1 jakllsch typedef enum { 674 1.1 jakllsch EFI_NATIVE_INTERFACE, 675 1.1 jakllsch EFI_PCODE_INTERFACE 676 1.1 jakllsch } EFI_INTERFACE_TYPE; 677 1.1 jakllsch 678 1.1 jakllsch typedef 679 1.1 jakllsch EFI_STATUS 680 1.1 jakllsch (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 681 1.1 jakllsch IN OUT EFI_HANDLE *Handle, 682 1.1 jakllsch IN EFI_GUID *Protocol, 683 1.1 jakllsch IN EFI_INTERFACE_TYPE InterfaceType, 684 1.1 jakllsch IN VOID *Interface 685 1.1 jakllsch ); 686 1.1 jakllsch 687 1.1 jakllsch typedef 688 1.1 jakllsch EFI_STATUS 689 1.1 jakllsch (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 690 1.1 jakllsch IN EFI_HANDLE Handle, 691 1.1 jakllsch IN EFI_GUID *Protocol, 692 1.1 jakllsch IN VOID *OldInterface, 693 1.1 jakllsch IN VOID *NewInterface 694 1.1 jakllsch ); 695 1.1 jakllsch 696 1.1 jakllsch typedef 697 1.1 jakllsch EFI_STATUS 698 1.1 jakllsch (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 699 1.1 jakllsch IN EFI_HANDLE Handle, 700 1.1 jakllsch IN EFI_GUID *Protocol, 701 1.1 jakllsch IN VOID *Interface 702 1.1 jakllsch ); 703 1.1 jakllsch 704 1.1 jakllsch typedef 705 1.1 jakllsch EFI_STATUS 706 1.1 jakllsch (EFIAPI *EFI_HANDLE_PROTOCOL) ( 707 1.1 jakllsch IN EFI_HANDLE Handle, 708 1.1 jakllsch IN EFI_GUID *Protocol, 709 1.1 jakllsch OUT VOID **Interface 710 1.1 jakllsch ); 711 1.1 jakllsch 712 1.1 jakllsch typedef 713 1.1 jakllsch EFI_STATUS 714 1.1 jakllsch (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 715 1.1 jakllsch IN EFI_GUID *Protocol, 716 1.1 jakllsch IN EFI_EVENT Event, 717 1.1 jakllsch OUT VOID **Registration 718 1.1 jakllsch ); 719 1.1 jakllsch 720 1.1 jakllsch typedef 721 1.1 jakllsch EFI_STATUS 722 1.1 jakllsch (EFIAPI *EFI_LOCATE_HANDLE) ( 723 1.1 jakllsch IN EFI_LOCATE_SEARCH_TYPE SearchType, 724 1.1 jakllsch IN EFI_GUID *Protocol OPTIONAL, 725 1.1 jakllsch IN VOID *SearchKey OPTIONAL, 726 1.1 jakllsch IN OUT UINTN *BufferSize, 727 1.1 jakllsch OUT EFI_HANDLE *Buffer 728 1.1 jakllsch ); 729 1.1 jakllsch 730 1.1 jakllsch typedef 731 1.1 jakllsch EFI_STATUS 732 1.1 jakllsch (EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 733 1.1 jakllsch IN EFI_GUID *Protocol, 734 1.1 jakllsch IN OUT EFI_DEVICE_PATH **DevicePath, 735 1.1 jakllsch OUT EFI_HANDLE *Device 736 1.1 jakllsch ); 737 1.1 jakllsch 738 1.1 jakllsch typedef 739 1.1 jakllsch EFI_STATUS 740 1.1 jakllsch (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 741 1.1 jakllsch IN EFI_GUID *Guid, 742 1.1 jakllsch IN VOID *Table 743 1.1 jakllsch ); 744 1.1 jakllsch 745 1.1 jakllsch typedef 746 1.1 jakllsch EFI_STATUS 747 1.1 jakllsch (EFIAPI *EFI_RESERVED_SERVICE) ( 748 1.1 jakllsch ); 749 1.1 jakllsch 750 1.1 jakllsch // 751 1.1 jakllsch // Standard EFI table header 752 1.1 jakllsch // 753 1.1 jakllsch 754 1.3 jmcneill typedef struct _EFI_TABLE_HEADER { 755 1.1 jakllsch UINT64 Signature; 756 1.1 jakllsch UINT32 Revision; 757 1.1 jakllsch UINT32 HeaderSize; 758 1.1 jakllsch UINT32 CRC32; 759 1.1 jakllsch UINT32 Reserved; 760 1.1 jakllsch } EFI_TABLE_HEADER; 761 1.1 jakllsch 762 1.1 jakllsch 763 1.1 jakllsch // 764 1.1 jakllsch // EFI Runtime Serivces Table 765 1.1 jakllsch // 766 1.1 jakllsch 767 1.1 jakllsch #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 768 1.1 jakllsch #define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 769 1.1 jakllsch 770 1.1 jakllsch typedef struct { 771 1.1 jakllsch EFI_TABLE_HEADER Hdr; 772 1.1 jakllsch 773 1.1 jakllsch // 774 1.1 jakllsch // Time services 775 1.1 jakllsch // 776 1.1 jakllsch 777 1.1 jakllsch EFI_GET_TIME GetTime; 778 1.1 jakllsch EFI_SET_TIME SetTime; 779 1.1 jakllsch EFI_GET_WAKEUP_TIME GetWakeupTime; 780 1.1 jakllsch EFI_SET_WAKEUP_TIME SetWakeupTime; 781 1.1 jakllsch 782 1.1 jakllsch // 783 1.1 jakllsch // Virtual memory services 784 1.1 jakllsch // 785 1.1 jakllsch 786 1.1 jakllsch EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 787 1.1 jakllsch EFI_CONVERT_POINTER ConvertPointer; 788 1.1 jakllsch 789 1.1 jakllsch // 790 1.1 jakllsch // Variable serviers 791 1.1 jakllsch // 792 1.1 jakllsch 793 1.1 jakllsch EFI_GET_VARIABLE GetVariable; 794 1.1 jakllsch EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 795 1.1 jakllsch EFI_SET_VARIABLE SetVariable; 796 1.1 jakllsch 797 1.1 jakllsch // 798 1.1 jakllsch // Misc 799 1.1 jakllsch // 800 1.1 jakllsch 801 1.1 jakllsch EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 802 1.1 jakllsch EFI_RESET_SYSTEM ResetSystem; 803 1.1 jakllsch 804 1.3 jmcneill EFI_UPDATE_CAPSULE UpdateCapsule; 805 1.3 jmcneill EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; 806 1.3 jmcneill EFI_QUERY_VARIABLE_INFO QueryVariableInfo; 807 1.1 jakllsch } EFI_RUNTIME_SERVICES; 808 1.1 jakllsch 809 1.1 jakllsch 810 1.1 jakllsch // 811 1.1 jakllsch // EFI Boot Services Table 812 1.1 jakllsch // 813 1.1 jakllsch 814 1.1 jakllsch #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 815 1.1 jakllsch #define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 816 1.1 jakllsch 817 1.1 jakllsch typedef struct _EFI_BOOT_SERVICES { 818 1.1 jakllsch 819 1.1 jakllsch EFI_TABLE_HEADER Hdr; 820 1.1 jakllsch 821 1.1 jakllsch // 822 1.1 jakllsch // Task priority functions 823 1.1 jakllsch // 824 1.1 jakllsch 825 1.1 jakllsch EFI_RAISE_TPL RaiseTPL; 826 1.1 jakllsch EFI_RESTORE_TPL RestoreTPL; 827 1.1 jakllsch 828 1.1 jakllsch // 829 1.1 jakllsch // Memory functions 830 1.1 jakllsch // 831 1.1 jakllsch 832 1.1 jakllsch EFI_ALLOCATE_PAGES AllocatePages; 833 1.1 jakllsch EFI_FREE_PAGES FreePages; 834 1.1 jakllsch EFI_GET_MEMORY_MAP GetMemoryMap; 835 1.1 jakllsch EFI_ALLOCATE_POOL AllocatePool; 836 1.1 jakllsch EFI_FREE_POOL FreePool; 837 1.1 jakllsch 838 1.1 jakllsch // 839 1.1 jakllsch // Event & timer functions 840 1.1 jakllsch // 841 1.1 jakllsch 842 1.1 jakllsch EFI_CREATE_EVENT CreateEvent; 843 1.1 jakllsch EFI_SET_TIMER SetTimer; 844 1.1 jakllsch EFI_WAIT_FOR_EVENT WaitForEvent; 845 1.1 jakllsch EFI_SIGNAL_EVENT SignalEvent; 846 1.1 jakllsch EFI_CLOSE_EVENT CloseEvent; 847 1.1 jakllsch EFI_CHECK_EVENT CheckEvent; 848 1.1 jakllsch 849 1.1 jakllsch // 850 1.1 jakllsch // Protocol handler functions 851 1.1 jakllsch // 852 1.1 jakllsch 853 1.1 jakllsch EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 854 1.1 jakllsch EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 855 1.1 jakllsch EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 856 1.1 jakllsch EFI_HANDLE_PROTOCOL HandleProtocol; 857 1.1 jakllsch EFI_HANDLE_PROTOCOL PCHandleProtocol; 858 1.1 jakllsch EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 859 1.1 jakllsch EFI_LOCATE_HANDLE LocateHandle; 860 1.1 jakllsch EFI_LOCATE_DEVICE_PATH LocateDevicePath; 861 1.1 jakllsch EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 862 1.1 jakllsch 863 1.1 jakllsch // 864 1.1 jakllsch // Image functions 865 1.1 jakllsch // 866 1.1 jakllsch 867 1.1 jakllsch EFI_IMAGE_LOAD LoadImage; 868 1.1 jakllsch EFI_IMAGE_START StartImage; 869 1.1 jakllsch EFI_EXIT Exit; 870 1.1 jakllsch EFI_IMAGE_UNLOAD UnloadImage; 871 1.1 jakllsch EFI_EXIT_BOOT_SERVICES ExitBootServices; 872 1.1 jakllsch 873 1.1 jakllsch // 874 1.1 jakllsch // Misc functions 875 1.1 jakllsch // 876 1.1 jakllsch 877 1.1 jakllsch EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 878 1.1 jakllsch EFI_STALL Stall; 879 1.1 jakllsch EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 880 1.1 jakllsch 881 1.1 jakllsch // 882 1.1 jakllsch // DriverSupport Services 883 1.1 jakllsch // 884 1.1 jakllsch 885 1.1 jakllsch EFI_CONNECT_CONTROLLER ConnectController; 886 1.1 jakllsch EFI_DISCONNECT_CONTROLLER DisconnectController; 887 1.1 jakllsch 888 1.1 jakllsch // 889 1.1 jakllsch // Open and Close Protocol Services 890 1.1 jakllsch // 891 1.1 jakllsch EFI_OPEN_PROTOCOL OpenProtocol; 892 1.1 jakllsch EFI_CLOSE_PROTOCOL CloseProtocol; 893 1.1 jakllsch EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 894 1.1 jakllsch 895 1.1 jakllsch // 896 1.1 jakllsch // Library Services 897 1.1 jakllsch // 898 1.1 jakllsch EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 899 1.1 jakllsch EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 900 1.1 jakllsch EFI_LOCATE_PROTOCOL LocateProtocol; 901 1.1 jakllsch EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 902 1.1 jakllsch EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 903 1.1 jakllsch 904 1.1 jakllsch // 905 1.1 jakllsch // 32-bit CRC Services 906 1.1 jakllsch // 907 1.1 jakllsch EFI_CALCULATE_CRC32 CalculateCrc32; 908 1.1 jakllsch 909 1.1 jakllsch // 910 1.1 jakllsch // Misc Services 911 1.1 jakllsch // 912 1.1 jakllsch EFI_COPY_MEM CopyMem; 913 1.1 jakllsch EFI_SET_MEM SetMem; 914 1.1 jakllsch EFI_CREATE_EVENT_EX CreateEventEx; 915 1.1 jakllsch } EFI_BOOT_SERVICES; 916 1.1 jakllsch 917 1.1 jakllsch 918 1.1 jakllsch // 919 1.1 jakllsch // EFI Configuration Table and GUID definitions 920 1.1 jakllsch // 921 1.1 jakllsch 922 1.1 jakllsch #define MPS_TABLE_GUID \ 923 1.1 jakllsch { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 924 1.1 jakllsch 925 1.1 jakllsch #define ACPI_TABLE_GUID \ 926 1.1 jakllsch { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 927 1.1 jakllsch 928 1.1 jakllsch #define ACPI_20_TABLE_GUID \ 929 1.1 jakllsch { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } 930 1.1 jakllsch 931 1.1 jakllsch #define SMBIOS_TABLE_GUID \ 932 1.1 jakllsch { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 933 1.1 jakllsch 934 1.3 jmcneill #define SMBIOS3_TABLE_GUID \ 935 1.3 jmcneill { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} } 936 1.3 jmcneill 937 1.1 jakllsch #define SAL_SYSTEM_TABLE_GUID \ 938 1.1 jakllsch { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 939 1.1 jakllsch 940 1.2 scole /* DIG64 Headless Console & Debug Port Table. */ 941 1.2 scole #define HCDP_TABLE_GUID \ 942 1.2 scole { 0xf951938d, 0x620b, 0x42ef, {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98} } 943 1.1 jakllsch 944 1.4 jmcneill #define EFI_DTB_TABLE_GUID \ 945 1.4 jmcneill { 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} } 946 1.4 jmcneill 947 1.1 jakllsch typedef struct _EFI_CONFIGURATION_TABLE { 948 1.1 jakllsch EFI_GUID VendorGuid; 949 1.1 jakllsch VOID *VendorTable; 950 1.1 jakllsch } EFI_CONFIGURATION_TABLE; 951 1.1 jakllsch 952 1.1 jakllsch 953 1.1 jakllsch // 954 1.1 jakllsch // EFI System Table 955 1.1 jakllsch // 956 1.1 jakllsch 957 1.1 jakllsch 958 1.1 jakllsch 959 1.1 jakllsch 960 1.1 jakllsch #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 961 1.1 jakllsch #define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 962 1.1 jakllsch 963 1.1 jakllsch typedef struct _EFI_SYSTEM_TABLE { 964 1.1 jakllsch EFI_TABLE_HEADER Hdr; 965 1.1 jakllsch 966 1.1 jakllsch CHAR16 *FirmwareVendor; 967 1.1 jakllsch UINT32 FirmwareRevision; 968 1.1 jakllsch 969 1.1 jakllsch EFI_HANDLE ConsoleInHandle; 970 1.1 jakllsch SIMPLE_INPUT_INTERFACE *ConIn; 971 1.1 jakllsch 972 1.1 jakllsch EFI_HANDLE ConsoleOutHandle; 973 1.1 jakllsch SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 974 1.1 jakllsch 975 1.1 jakllsch EFI_HANDLE StandardErrorHandle; 976 1.1 jakllsch SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 977 1.1 jakllsch 978 1.1 jakllsch EFI_RUNTIME_SERVICES *RuntimeServices; 979 1.1 jakllsch EFI_BOOT_SERVICES *BootServices; 980 1.1 jakllsch 981 1.1 jakllsch UINTN NumberOfTableEntries; 982 1.1 jakllsch EFI_CONFIGURATION_TABLE *ConfigurationTable; 983 1.1 jakllsch 984 1.1 jakllsch } EFI_SYSTEM_TABLE; 985 1.1 jakllsch 986 1.1 jakllsch #endif 987 1.1 jakllsch 988