efilib.h 23 KB

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