efilib.h 21 KB

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