efilib.h 18 KB

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