efilib.h 23 KB

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