efilib.h 22 KB

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