efilib.h 17 KB

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