efilib.h 21 KB

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