efilib.h 22 KB

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