efilib.h 22 KB

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