efilib.h 22 KB

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