efiapi.h 25 KB

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