efilib.h 18 KB

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