efiapi.h 29 KB

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