efilib.h 23 KB

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