efilib.h 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. #ifndef _EFILIB_INCLUDE_
  2. #define _EFILIB_INCLUDE_
  3. /*++
  4. Copyright (c) 2000 Intel Corporation
  5. Module Name:
  6. efilib.h
  7. Abstract:
  8. EFI library functions
  9. Revision History
  10. --*/
  11. #include "efidebug.h"
  12. #include "efipart.h"
  13. #if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__)
  14. #include "x86_64/efilibplat.h"
  15. #elif defined(_M_IX86) || defined(__i386__)
  16. #include "ia32/efilibplat.h"
  17. #elif defined(_M_IA64) || defined(__ia64__)
  18. #include "ia64/efilibplat.h"
  19. #elif defined (_M_ARM64) || defined(__aarch64__)
  20. #include "aarch64/efilibplat.h"
  21. #elif defined (_M_ARM) || defined(__arm__)
  22. #include "arm/efilibplat.h"
  23. #elif defined (_M_MIPS64) || defined(__mips64__)
  24. #include "mips64el/efilibplat.h"
  25. #elif defined (__riscv) && __riscv_xlen == 64
  26. #include "riscv64/efilibplat.h"
  27. #endif
  28. #include "efilink.h"
  29. #include "efirtlib.h"
  30. #include "efistdarg.h"
  31. #include "pci22.h"
  32. #include "libsmbios.h"
  33. //
  34. // Public read-only data in the EFI library
  35. //
  36. extern EFI_SYSTEM_TABLE *ST;
  37. #define gST ST
  38. extern EFI_BOOT_SERVICES *BS;
  39. #define gBS BS
  40. extern EFI_RUNTIME_SERVICES *RT;
  41. #define gRT RT
  42. extern EFI_GUID gEfiDevicePathProtocolGuid;
  43. #define DevicePathProtocol gEfiDevicePathProtocolGuid
  44. extern EFI_GUID gEfiDevicePathToTextProtocolGuid;
  45. #define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid
  46. extern EFI_GUID gEfiDevicePathFromTextProtocolGuid;
  47. #define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid
  48. extern EFI_GUID gEfiDevicePathUtilitiesProtocolGuid;
  49. #define DevicePathUtilitiesProtocol gEfiDevicePathUtilitiesProtocolGuid
  50. extern EFI_GUID gEfiLoadedImageProtocolGuid;
  51. #define LoadedImageProtocol gEfiLoadedImageProtocolGuid
  52. extern EFI_GUID gEfiSimpleTextInProtocolGuid;
  53. #define TextInProtocol gEfiSimpleTextInProtocolGuid
  54. extern EFI_GUID gEfiSimpleTextOutProtocolGuid;
  55. #define TextOutProtocol gEfiSimpleTextOutProtocolGuid
  56. extern EFI_GUID gEfiGraphicsOutputProtocolGuid;
  57. #define GraphicsOutputProtocol gEfiGraphicsOutputProtocolGuid
  58. extern EFI_GUID gEfiEdidDiscoveredProtocolGuid;
  59. #define EdidDiscoveredProtocol gEfiEdidDiscoveredProtocolGuid
  60. extern EFI_GUID gEfiEdidActiveProtocolGuid;
  61. #define EdidActiveProtocol gEfiEdidActiveProtocolGuid
  62. extern EFI_GUID gEfiEdidOverrideProtocolGuid;
  63. #define EdidOverrideProtocol gEfiEdidOverrideProtocolGuid
  64. extern EFI_GUID gEfiBlockIoProtocolGuid;
  65. #define BlockIoProtocol gEfiBlockIoProtocolGuid
  66. extern EFI_GUID gEfiBlockIo2ProtocolGuid;
  67. #define BlockIo2Protocol gEfiBlockIo2ProtocolGuid
  68. extern EFI_GUID gEfiDiskIoProtocolGuid;
  69. #define DiskIoProtocol gEfiDiskIoProtocolGuid
  70. extern EFI_GUID gEfiDiskIo2ProtocolGuid;
  71. #define DiskIo2Protocol gEfiDiskIo2ProtocolGuid
  72. extern EFI_GUID gEfiSimpleFileSystemProtocolGuid;
  73. #define FileSystemProtocol gEfiSimpleFileSystemProtocolGuid
  74. extern EFI_GUID gEfiLoadFileProtocolGuid;
  75. #define LoadFileProtocol gEfiLoadFileProtocolGuid
  76. extern EFI_GUID gEfiDeviceIoProtocolGuid;
  77. #define DeviceIoProtocol gEfiDeviceIoProtocolGuid
  78. extern EFI_GUID VariableStoreProtocol;
  79. extern EFI_GUID LegacyBootProtocol;
  80. extern EFI_GUID gEfiUnicodeCollationProtocolGuid;
  81. #define UnicodeCollationProtocol gEfiUnicodeCollationProtocolGuid
  82. extern EFI_GUID gEfiSerialIoProtocolGuid;
  83. #define SerialIoProtocol gEfiSerialIoProtocolGuid
  84. extern EFI_GUID VgaClassProtocol;
  85. extern EFI_GUID TextOutSpliterProtocol;
  86. extern EFI_GUID ErrorOutSpliterProtocol;
  87. extern EFI_GUID TextInSpliterProtocol;
  88. extern EFI_GUID gEfiSimpleNetworkProtocolGuid;
  89. #define SimpleNetworkProtocol gEfiSimpleNetworkProtocolGuid
  90. extern EFI_GUID gEfiPxeBaseCodeProtocolGuid;
  91. #define PxeBaseCodeProtocol gEfiPxeBaseCodeProtocolGuid
  92. extern EFI_GUID gEfiPxeBaseCodeCallbackProtocolGuid;
  93. #define PxeCallbackProtocol gEfiPxeBaseCodeCallbackProtocolGuid
  94. extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid;
  95. #define NetworkInterfaceIdentifierProtocol gEfiNetworkInterfaceIdentifierProtocolGuid
  96. extern EFI_GUID gEFiUiInterfaceProtocolGuid;
  97. #define UiProtocol gEFiUiInterfaceProtocolGuid
  98. extern EFI_GUID InternalShellProtocol;
  99. extern EFI_GUID gEfiPciIoProtocolGuid;
  100. #define PciIoProtocol gEfiPciIoProtocolGuid
  101. extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid;
  102. extern EFI_GUID gEfiDriverBindingProtocolGuid;
  103. #define DriverBindingProtocol gEfiDriverBindingProtocolGuid
  104. extern EFI_GUID gEfiComponentNameProtocolGuid;
  105. #define ComponentNameProtocol gEfiComponentNameProtocolGuid
  106. extern EFI_GUID gEfiComponentName2ProtocolGuid;
  107. #define ComponentName2Protocol gEfiComponentName2ProtocolGuid
  108. extern EFI_GUID gEfiHashProtocolGuid;
  109. #define HashProtocol gEfiHashProtocolGuid
  110. extern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid;
  111. #define PlatformDriverOverrideProtocol gEfiPlatformDriverOverrideProtocolGuid
  112. extern EFI_GUID gEfiBusSpecificDriverOverrideProtocolGuid;
  113. #define BusSpecificDriverOverrideProtocol gEfiBusSpecificDriverOverrideProtocolGuid
  114. extern EFI_GUID gEfiDriverFamilyOverrideProtocolGuid;
  115. #define DriverFamilyOverrideProtocol gEfiDriverFamilyOverrideProtocolGuid
  116. extern EFI_GUID gEfiEbcProtocolGuid;
  117. extern EFI_GUID gEfiGlobalVariableGuid;
  118. #define EfiGlobalVariable gEfiGlobalVariableGuid
  119. extern EFI_GUID gEfiFileInfoGuid;
  120. #define GenericFileInfo gEfiFileInfoGuid
  121. extern EFI_GUID gEfiFileSystemInfoGuid;
  122. #define FileSystemInfo gEfiFileSystemInfoGuid
  123. extern EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid;
  124. #define FileSystemVolumeLabelInfo gEfiFileSystemVolumeLabelInfoIdGuid
  125. extern EFI_GUID gEfiPcAnsiGuid;
  126. #define PcAnsiProtocol gEfiPcAnsiGuid
  127. extern EFI_GUID gEfiVT100Guid;
  128. #define Vt100Protocol gEfiVT100Guid
  129. extern EFI_GUID gEfiVT100PlusGuid;
  130. extern EFI_GUID gEfiVTUTF8Guid;
  131. extern EFI_GUID NullGuid;
  132. extern EFI_GUID UnknownDevice;
  133. extern EFI_GUID EfiPartTypeSystemPartitionGuid;
  134. extern EFI_GUID EfiPartTypeLegacyMbrGuid;
  135. extern EFI_GUID MpsTableGuid;
  136. extern EFI_GUID AcpiTableGuid;
  137. extern EFI_GUID SMBIOSTableGuid;
  138. extern EFI_GUID SMBIOS3TableGuid;
  139. extern EFI_GUID SalSystemTableGuid;
  140. extern EFI_GUID SimplePointerProtocol;
  141. extern EFI_GUID AbsolutePointerProtocol;
  142. extern EFI_GUID gEfiDebugImageInfoTableGuid;
  143. extern EFI_GUID gEfiDebugSupportProtocolGuid;
  144. extern EFI_GUID SimpleTextInputExProtocol;
  145. extern EFI_GUID ShellProtocolGuid;
  146. extern EFI_GUID ShellParametersProtocolGuid;
  147. extern EFI_GUID ShellDynamicCommandProtocolGuid;
  148. //
  149. // EFI Variable strings
  150. //
  151. #define LOAD_OPTION_ACTIVE 0x00000001
  152. #define VarLanguageCodes L"LangCodes"
  153. #define VarLanguage L"Lang"
  154. #define VarTimeout L"Timeout"
  155. #define VarConsoleInp L"ConIn"
  156. #define VarConsoleOut L"ConOut"
  157. #define VarErrorOut L"ErrOut"
  158. #define VarBootOption L"Boot%04x"
  159. #define VarBootOrder L"BootOrder"
  160. #define VarBootNext L"BootNext"
  161. #define VarBootCurrent L"BootCurrent"
  162. #define VarDriverOption L"Driver%04x"
  163. #define VarDriverOrder L"DriverOrder"
  164. #define VarConsoleInpDev L"ConInDev"
  165. #define VarConsoleOutDev L"ConOutDev"
  166. #define VarErrorOutDev L"ErrOutDev"
  167. #define LanguageCodeEnglish "eng"
  168. extern EFI_DEVICE_PATH RootDevicePath[];
  169. extern EFI_DEVICE_PATH EndDevicePath[];
  170. extern EFI_DEVICE_PATH EndInstanceDevicePath[];
  171. //
  172. // Other public data in the EFI library
  173. //
  174. extern EFI_MEMORY_TYPE PoolAllocationType;
  175. //
  176. // STATIC - Name is internal to the module
  177. // INTERNAL - Name is internal to the component (i.e., directory)
  178. // BOOTSERVCE - Name of a boot service function
  179. //
  180. #define STATIC
  181. #define INTERNAL
  182. #define BOOTSERVICE
  183. //
  184. // Prototypes
  185. //
  186. VOID
  187. InitializeLib (
  188. IN EFI_HANDLE ImageHandle,
  189. IN EFI_SYSTEM_TABLE *SystemTable
  190. );
  191. VOID
  192. InitializeUnicodeSupport (
  193. CHAR8 *LangCode
  194. );
  195. VOID
  196. EFIDebugVariable (
  197. VOID
  198. );
  199. VOID
  200. Exit(
  201. IN EFI_STATUS ExitStatus,
  202. IN UINTN ExitDataSize,
  203. IN CHAR16 *ExitData OPTIONAL
  204. );
  205. INTN
  206. GetShellArgcArgv(
  207. EFI_HANDLE ImageHandle,
  208. CHAR16 **Argv[] /* Statically allocated */
  209. );
  210. VOID
  211. SetCrc (
  212. IN OUT EFI_TABLE_HEADER *Hdr
  213. );
  214. VOID
  215. SetCrcAltSize (
  216. IN UINTN Size,
  217. IN OUT EFI_TABLE_HEADER *Hdr
  218. );
  219. BOOLEAN
  220. CheckCrc (
  221. IN UINTN MaxSize,
  222. IN OUT EFI_TABLE_HEADER *Hdr
  223. );
  224. BOOLEAN
  225. CheckCrcAltSize (
  226. IN UINTN MaxSize,
  227. IN UINTN Size,
  228. IN OUT EFI_TABLE_HEADER *Hdr
  229. );
  230. UINT32
  231. CalculateCrc (
  232. UINT8 *pt,
  233. UINTN Size
  234. );
  235. VOID
  236. ZeroMem (
  237. IN VOID *Buffer,
  238. IN UINTN Size
  239. );
  240. VOID
  241. SetMem (
  242. IN VOID *Buffer,
  243. IN UINTN Size,
  244. IN UINT8 Value
  245. );
  246. VOID
  247. CopyMem (
  248. IN VOID *Dest,
  249. IN CONST VOID *Src,
  250. IN UINTN len
  251. );
  252. INTN
  253. CompareMem (
  254. IN CONST VOID *Dest,
  255. IN CONST VOID *Src,
  256. IN UINTN len
  257. );
  258. INTN
  259. StrCmp (
  260. IN CONST CHAR16 *s1,
  261. IN CONST CHAR16 *s2
  262. );
  263. INTN
  264. StrnCmp (
  265. IN CONST CHAR16 *s1,
  266. IN CONST CHAR16 *s2,
  267. IN UINTN len
  268. );
  269. INTN
  270. StriCmp (
  271. IN CONST CHAR16 *s1,
  272. IN CONST CHAR16 *s2
  273. );
  274. VOID
  275. StrLwr (
  276. IN CHAR16 *Str
  277. );
  278. VOID
  279. StrUpr (
  280. IN CHAR16 *Str
  281. );
  282. VOID
  283. StrCpy (
  284. IN CHAR16 *Dest,
  285. IN CONST CHAR16 *Src
  286. );
  287. VOID
  288. StrnCpy (
  289. IN CHAR16 *Dest,
  290. IN CONST CHAR16 *Src,
  291. IN UINTN Len
  292. );
  293. CHAR16 *
  294. StpCpy (
  295. IN CHAR16 *Dest,
  296. IN CONST CHAR16 *Src
  297. );
  298. CHAR16 *
  299. StpnCpy (
  300. IN CHAR16 *Dest,
  301. IN CONST CHAR16 *Src,
  302. IN UINTN Len
  303. );
  304. VOID
  305. StrCat (
  306. IN CHAR16 *Dest,
  307. IN CONST CHAR16 *Src
  308. );
  309. VOID
  310. StrnCat (
  311. IN CHAR16 *Dest,
  312. IN CONST CHAR16 *Src,
  313. IN UINTN Len
  314. );
  315. UINTN
  316. StrLen (
  317. IN CONST CHAR16 *s1
  318. );
  319. UINTN
  320. StrnLen (
  321. IN CONST CHAR16 *s1,
  322. IN UINTN Len
  323. );
  324. UINTN
  325. StrSize (
  326. IN CONST CHAR16 *s1
  327. );
  328. CHAR16 *
  329. StrDuplicate (
  330. IN CONST CHAR16 *Src
  331. );
  332. UINTN
  333. strlena (
  334. IN CONST CHAR8 *s1
  335. );
  336. UINTN
  337. strcmpa (
  338. IN CONST CHAR8 *s1,
  339. IN CONST CHAR8 *s2
  340. );
  341. UINTN
  342. strncmpa (
  343. IN CONST CHAR8 *s1,
  344. IN CONST CHAR8 *s2,
  345. IN UINTN len
  346. );
  347. UINTN
  348. xtoi (
  349. CONST CHAR16 *str
  350. );
  351. UINTN
  352. Atoi (
  353. CONST CHAR16 *str
  354. );
  355. BOOLEAN
  356. MetaMatch (
  357. IN CHAR16 *String,
  358. IN CHAR16 *Pattern
  359. );
  360. BOOLEAN
  361. MetaiMatch (
  362. IN CHAR16 *String,
  363. IN CHAR16 *Pattern
  364. );
  365. UINT64
  366. LShiftU64 (
  367. IN UINT64 Operand,
  368. IN UINTN Count
  369. );
  370. UINT64
  371. RShiftU64 (
  372. IN UINT64 Operand,
  373. IN UINTN Count
  374. );
  375. UINT64
  376. MultU64x32 (
  377. IN UINT64 Multiplicand,
  378. IN UINTN Multiplier
  379. );
  380. UINT64
  381. DivU64x32 (
  382. IN UINT64 Dividend,
  383. IN UINTN Divisor,
  384. OUT UINTN *Remainder OPTIONAL
  385. );
  386. VOID
  387. InitializeLock (
  388. IN OUT FLOCK *Lock,
  389. IN EFI_TPL Priority
  390. );
  391. VOID
  392. AcquireLock (
  393. IN FLOCK *Lock
  394. );
  395. VOID
  396. ReleaseLock (
  397. IN FLOCK *Lock
  398. );
  399. INTN
  400. CompareGuid(
  401. IN EFI_GUID *Guid1,
  402. IN EFI_GUID *Guid2
  403. );
  404. VOID *
  405. AllocatePool (
  406. IN UINTN Size
  407. );
  408. VOID *
  409. AllocateZeroPool (
  410. IN UINTN Size
  411. );
  412. VOID *
  413. ReallocatePool (
  414. IN VOID *OldPool,
  415. IN UINTN OldSize,
  416. IN UINTN NewSize
  417. );
  418. VOID
  419. FreePool (
  420. IN VOID *p
  421. );
  422. VOID
  423. Output (
  424. IN CHAR16 *Str
  425. );
  426. VOID
  427. Input (
  428. IN CHAR16 *Prompt OPTIONAL,
  429. OUT CHAR16 *InStr,
  430. IN UINTN StrLen
  431. );
  432. VOID
  433. IInput (
  434. IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut,
  435. IN SIMPLE_INPUT_INTERFACE *ConIn,
  436. IN CHAR16 *Prompt OPTIONAL,
  437. OUT CHAR16 *InStr,
  438. IN UINTN StrLen
  439. );
  440. UINTN
  441. Print (
  442. IN CONST CHAR16 *fmt,
  443. ...
  444. );
  445. UINTN
  446. VPrint (
  447. IN CONST CHAR16 *fmt,
  448. va_list args
  449. );
  450. UINTN
  451. UnicodeSPrint (
  452. OUT CHAR16 *Str,
  453. IN UINTN StrSize,
  454. IN CONST CHAR16 *fmt,
  455. ...
  456. );
  457. UINTN
  458. UnicodeVSPrint (
  459. OUT CHAR16 *Str,
  460. IN UINTN StrSize,
  461. IN CONST CHAR16 *fmt,
  462. va_list args
  463. );
  464. CHAR16 *
  465. VPoolPrint (
  466. IN CONST CHAR16 *fmt,
  467. va_list args
  468. );
  469. CHAR16 *
  470. PoolPrint (
  471. IN CONST CHAR16 *fmt,
  472. ...
  473. );
  474. typedef struct {
  475. CHAR16 *str;
  476. UINTN len;
  477. UINTN maxlen;
  478. } POOL_PRINT;
  479. CHAR16 *
  480. CatPrint (
  481. IN OUT POOL_PRINT *Str,
  482. IN CONST CHAR16 *fmt,
  483. ...
  484. );
  485. UINTN
  486. PrintAt (
  487. IN UINTN Column,
  488. IN UINTN Row,
  489. IN CONST CHAR16 *fmt,
  490. ...
  491. );
  492. UINTN
  493. IPrint (
  494. IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out,
  495. IN CONST CHAR16 *fmt,
  496. ...
  497. );
  498. UINTN
  499. IPrintAt (
  500. IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out,
  501. IN UINTN Column,
  502. IN UINTN Row,
  503. IN CONST CHAR16 *fmt,
  504. ...
  505. );
  506. UINTN
  507. AsciiPrint (
  508. IN CONST CHAR8 *fmt,
  509. ...
  510. );
  511. UINTN
  512. AsciiVSPrint(
  513. OUT CHAR8 *Str,
  514. IN UINTN StrSize,
  515. IN CONST CHAR8 *fmt,
  516. va_list args
  517. );
  518. //
  519. // For compatibility with previous gnu-efi versions
  520. //
  521. #define SPrint UnicodeSPrint
  522. #define VSPrint UnicodeVSPrint
  523. #define APrint AsciiPrint
  524. VOID
  525. ValueToHex (
  526. IN CHAR16 *Buffer,
  527. IN UINT64 v
  528. );
  529. VOID
  530. ValueToString (
  531. IN CHAR16 *Buffer,
  532. IN BOOLEAN Comma,
  533. IN INT64 v
  534. );
  535. VOID
  536. FloatToString (
  537. IN CHAR16 *Buffer,
  538. IN BOOLEAN Comma,
  539. IN double v
  540. );
  541. VOID
  542. TimeToString (
  543. OUT CHAR16 *Buffer,
  544. IN EFI_TIME *Time
  545. );
  546. VOID
  547. GuidToString (
  548. OUT CHAR16 *Buffer,
  549. IN EFI_GUID *Guid
  550. );
  551. VOID
  552. StatusToString (
  553. OUT CHAR16 *Buffer,
  554. EFI_STATUS Status
  555. );
  556. VOID
  557. DumpHex (
  558. IN UINTN Indent,
  559. IN UINTN Offset,
  560. IN UINTN DataSize,
  561. IN VOID *UserData
  562. );
  563. BOOLEAN
  564. GrowBuffer(
  565. IN OUT EFI_STATUS *Status,
  566. IN OUT VOID **Buffer,
  567. IN UINTN BufferSize
  568. );
  569. EFI_MEMORY_DESCRIPTOR *
  570. LibMemoryMap (
  571. OUT UINTN *NoEntries,
  572. OUT UINTN *MapKey,
  573. OUT UINTN *DescriptorSize,
  574. OUT UINT32 *DescriptorVersion
  575. );
  576. VOID *
  577. LibGetVariable (
  578. IN CHAR16 *Name,
  579. IN EFI_GUID *VendorGuid
  580. );
  581. VOID *
  582. LibGetVariableAndSize (
  583. IN CHAR16 *Name,
  584. IN EFI_GUID *VendorGuid,
  585. OUT UINTN *VarSize
  586. );
  587. EFI_STATUS
  588. LibDeleteVariable (
  589. IN CHAR16 *VarName,
  590. IN EFI_GUID *VarGuid
  591. );
  592. EFI_STATUS
  593. LibSetNVVariable (
  594. IN CHAR16 *VarName,
  595. IN EFI_GUID *VarGuid,
  596. IN UINTN DataSize,
  597. IN VOID *Data
  598. );
  599. EFI_STATUS
  600. LibSetVariable (
  601. IN CHAR16 *VarName,
  602. IN EFI_GUID *VarGuid,
  603. IN UINTN DataSize,
  604. IN VOID *Data
  605. );
  606. EFI_STATUS
  607. LibInsertToTailOfBootOrder (
  608. IN UINT16 BootOption,
  609. IN BOOLEAN OnlyInsertIfEmpty
  610. );
  611. EFI_STATUS
  612. LibLocateProtocol (
  613. IN EFI_GUID *ProtocolGuid,
  614. OUT VOID **Interface
  615. );
  616. EFI_STATUS
  617. LibLocateHandle (
  618. IN EFI_LOCATE_SEARCH_TYPE SearchType,
  619. IN EFI_GUID *Protocol OPTIONAL,
  620. IN VOID *SearchKey OPTIONAL,
  621. IN OUT UINTN *NoHandles,
  622. OUT EFI_HANDLE **Buffer
  623. );
  624. EFI_STATUS
  625. LibLocateHandleByDiskSignature (
  626. IN UINT8 MBRType,
  627. IN UINT8 SignatureType,
  628. IN VOID *Signature,
  629. IN OUT UINTN *NoHandles,
  630. OUT EFI_HANDLE **Buffer
  631. );
  632. EFI_STATUS
  633. LibInstallProtocolInterfaces (
  634. IN OUT EFI_HANDLE *Handle,
  635. ...
  636. );
  637. VOID
  638. LibUninstallProtocolInterfaces (
  639. IN EFI_HANDLE Handle,
  640. ...
  641. );
  642. EFI_STATUS
  643. LibReinstallProtocolInterfaces (
  644. IN OUT EFI_HANDLE *Handle,
  645. ...
  646. );
  647. EFI_EVENT
  648. LibCreateProtocolNotifyEvent (
  649. IN EFI_GUID *ProtocolGuid,
  650. IN EFI_TPL NotifyTpl,
  651. IN EFI_EVENT_NOTIFY NotifyFunction,
  652. IN VOID *NotifyContext,
  653. OUT VOID *Registration
  654. );
  655. EFI_STATUS
  656. WaitForSingleEvent (
  657. IN EFI_EVENT Event,
  658. IN UINT64 Timeout OPTIONAL
  659. );
  660. VOID
  661. WaitForEventWithTimeout (
  662. IN EFI_EVENT Event,
  663. IN UINTN Timeout,
  664. IN UINTN Row,
  665. IN UINTN Column,
  666. IN CHAR16 *String,
  667. IN EFI_INPUT_KEY TimeoutKey,
  668. OUT EFI_INPUT_KEY *Key
  669. );
  670. EFI_FILE_HANDLE
  671. LibOpenRoot (
  672. IN EFI_HANDLE DeviceHandle
  673. );
  674. EFI_FILE_INFO *
  675. LibFileInfo (
  676. IN EFI_FILE_HANDLE FHand
  677. );
  678. EFI_FILE_SYSTEM_INFO *
  679. LibFileSystemInfo (
  680. IN EFI_FILE_HANDLE FHand
  681. );
  682. EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
  683. LibFileSystemVolumeLabelInfo (
  684. IN EFI_FILE_HANDLE FHand
  685. );
  686. BOOLEAN
  687. ValidMBR(
  688. IN MASTER_BOOT_RECORD *Mbr,
  689. IN EFI_BLOCK_IO *BlkIo
  690. );
  691. BOOLEAN
  692. LibMatchDevicePaths (
  693. IN EFI_DEVICE_PATH *Multi,
  694. IN EFI_DEVICE_PATH *Single
  695. );
  696. EFI_DEVICE_PATH *
  697. LibDuplicateDevicePathInstance (
  698. IN EFI_DEVICE_PATH *DevPath
  699. );
  700. EFI_DEVICE_PATH *
  701. DevicePathFromHandle (
  702. IN EFI_HANDLE Handle
  703. );
  704. EFI_DEVICE_PATH *
  705. DevicePathInstance (
  706. IN OUT EFI_DEVICE_PATH **DevicePath,
  707. OUT UINTN *Size
  708. );
  709. UINTN
  710. DevicePathInstanceCount (
  711. IN EFI_DEVICE_PATH *DevicePath
  712. );
  713. EFI_DEVICE_PATH *
  714. AppendDevicePath (
  715. IN EFI_DEVICE_PATH *Src1,
  716. IN EFI_DEVICE_PATH *Src2
  717. );
  718. EFI_DEVICE_PATH *
  719. AppendDevicePathNode (
  720. IN EFI_DEVICE_PATH *Src1,
  721. IN EFI_DEVICE_PATH *Src2
  722. );
  723. EFI_DEVICE_PATH*
  724. AppendDevicePathInstance (
  725. IN EFI_DEVICE_PATH *Src,
  726. IN EFI_DEVICE_PATH *Instance
  727. );
  728. EFI_DEVICE_PATH *
  729. FileDevicePath (
  730. IN EFI_HANDLE Device OPTIONAL,
  731. IN CHAR16 *FileName
  732. );
  733. UINTN
  734. DevicePathSize (
  735. IN EFI_DEVICE_PATH *DevPath
  736. );
  737. EFI_DEVICE_PATH *
  738. DuplicateDevicePath (
  739. IN EFI_DEVICE_PATH *DevPath
  740. );
  741. EFI_DEVICE_PATH *
  742. UnpackDevicePath (
  743. IN EFI_DEVICE_PATH *DevPath
  744. );
  745. EFI_STATUS
  746. LibDevicePathToInterface (
  747. IN EFI_GUID *Protocol,
  748. IN EFI_DEVICE_PATH *FilePath,
  749. OUT VOID **Interface
  750. );
  751. CHAR16 *
  752. DevicePathToStr (
  753. EFI_DEVICE_PATH *DevPath
  754. );
  755. //
  756. // BugBug: I need my own include files
  757. //
  758. typedef struct {
  759. UINT8 Register;
  760. UINT8 Function;
  761. UINT8 Device;
  762. UINT8 Bus;
  763. UINT32 Reserved;
  764. } EFI_ADDRESS;
  765. typedef union {
  766. UINT64 Address;
  767. EFI_ADDRESS EfiAddress;
  768. } EFI_PCI_ADDRESS_UNION;
  769. EFI_STATUS
  770. PciFindDeviceClass (
  771. IN OUT EFI_PCI_ADDRESS_UNION *Address,
  772. IN UINT8 BaseClass,
  773. IN UINT8 SubClass
  774. );
  775. EFI_STATUS
  776. PciFindDevice (
  777. IN OUT EFI_PCI_ADDRESS_UNION *DeviceAddress,
  778. IN UINT16 VendorId,
  779. IN UINT16 DeviceId,
  780. IN OUT PCI_TYPE00 *Pci
  781. );
  782. //
  783. // SIMPLE_READ_FILE object used to access files
  784. //
  785. typedef VOID *SIMPLE_READ_FILE;
  786. EFI_STATUS
  787. OpenSimpleReadFile (
  788. IN BOOLEAN BootPolicy,
  789. IN VOID *SourceBuffer OPTIONAL,
  790. IN UINTN SourceSize,
  791. IN OUT EFI_DEVICE_PATH **FilePath,
  792. OUT EFI_HANDLE *DeviceHandle,
  793. OUT SIMPLE_READ_FILE *SimpleReadHandle
  794. );
  795. EFI_STATUS
  796. ReadSimpleReadFile (
  797. IN SIMPLE_READ_FILE SimpleReadHandle,
  798. IN UINTN Offset,
  799. IN OUT UINTN *ReadSize,
  800. OUT VOID *Buffer
  801. );
  802. VOID
  803. CloseSimpleReadFile (
  804. IN SIMPLE_READ_FILE SimpleReadHandle
  805. );
  806. VOID
  807. InitializeGuid (
  808. VOID
  809. );
  810. UINT8
  811. DecimaltoBCD(
  812. IN UINT8 DecValue
  813. );
  814. UINT8
  815. BCDtoDecimal(
  816. IN UINT8 BcdValue
  817. );
  818. EFI_STATUS
  819. LibGetSystemConfigurationTable(
  820. IN EFI_GUID *TableGuid,
  821. IN OUT VOID **Table
  822. );
  823. BOOLEAN
  824. LibIsValidTextGraphics (
  825. IN CHAR16 Graphic,
  826. OUT CHAR8 *PcAnsi, OPTIONAL
  827. OUT CHAR8 *Ascii OPTIONAL
  828. );
  829. BOOLEAN
  830. IsValidAscii (
  831. IN CHAR16 Ascii
  832. );
  833. BOOLEAN
  834. IsValidEfiCntlChar (
  835. IN CHAR16 c
  836. );
  837. CHAR16 *
  838. LibGetUiString (
  839. IN EFI_HANDLE Handle,
  840. IN UI_STRING_TYPE StringType,
  841. IN ISO_639_2 *LangCode,
  842. IN BOOLEAN ReturnDevicePathStrOnMismatch
  843. );
  844. CHAR8*
  845. LibGetSmbiosString (
  846. IN SMBIOS_STRUCTURE_POINTER *Smbios,
  847. IN UINT16 StringNumber
  848. );
  849. EFI_STATUS
  850. LibGetSmbiosSystemGuidAndSerialNumber (
  851. IN EFI_GUID *SystemGuid,
  852. OUT CHAR8 **SystemSerialNumber
  853. );
  854. EFI_STATUS
  855. InitializeGlobalIoDevice (
  856. IN EFI_DEVICE_PATH *DevicePath,
  857. IN EFI_GUID *Protocol,
  858. IN CHAR8 *ErrorStr,
  859. OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs
  860. );
  861. UINT32
  862. ReadPort (
  863. IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
  864. IN EFI_IO_WIDTH Width,
  865. IN UINTN Port
  866. );
  867. UINT32
  868. WritePort (
  869. IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
  870. IN EFI_IO_WIDTH Width,
  871. IN UINTN Port,
  872. IN UINTN Data
  873. );
  874. UINT32
  875. ReadPciConfig (
  876. IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
  877. IN EFI_IO_WIDTH Width,
  878. IN UINTN Port
  879. );
  880. UINT32
  881. WritePciConfig (
  882. IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
  883. IN EFI_IO_WIDTH Width,
  884. IN UINTN Port,
  885. IN UINTN Data
  886. );
  887. VOID
  888. Pause (
  889. VOID
  890. );
  891. extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs;
  892. #define outp(_Port, _DataByte) (UINT8)WritePort(GlobalIoFncs, IO_UINT8, (UINTN)_Port, (UINTN)_DataByte)
  893. #define inp(_Port) (UINT8)ReadPort(GlobalIoFncs, IO_UINT8, (UINTN)_Port)
  894. #define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte)
  895. #define inpw(_Port) (UINT16)ReadPort(GlobalIoFncs, IO_UINT16, (UINTN)_Port)
  896. #define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte)
  897. #define inpd(_Port) (UINT32)ReadPort(GlobalIoFncs, IO_UINT32, (UINTN)_Port)
  898. #define writepci8(_Addr, _DataByte) (UINT8)WritePciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr, (UINTN)_DataByte)
  899. #define readpci8(_Addr) (UINT8)ReadPciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr)
  900. #define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte)
  901. #define readpci16(_Addr) (UINT16)ReadPciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr)
  902. #define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
  903. #define readpci32(_Addr) (UINT32)ReadPciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr)
  904. #define Port80(_PostCode) GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
  905. #endif