efilib.h 22 KB

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