efilib.h 22 KB

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