efilib.h 18 KB

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