efiapi.h 23 KB

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