efilib.h 21 KB

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