efilib.h 18 KB

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