efilib.h 22 KB

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