QemuFwCfgItemKernelSetupAddress = 0x0016,\r
QemuFwCfgItemKernelSetupSize = 0x0017,\r
QemuFwCfgItemKernelSetupData = 0x0018,\r
+ QemuFwCfgItemFileDir = 0x0019,\r
\r
QemuFwCfgItemX86AcpiTables = 0x8000,\r
QemuFwCfgItemX86SmbiosTables = 0x8001,\r
);\r
\r
\r
+/**\r
+ Find the configuration item corresponding to the firmware configuration file.\r
+\r
+ @param[in] Name - Name of file to look up.\r
+ @param[out] Item - Configuration item corresponding to the file, to be passed\r
+ to QemuFwCfgSelectItem ().\r
+ @param[out] Size - Number of bytes in the file.\r
+\r
+ @return RETURN_SUCCESS If file is found.\r
+ RETURN_NOT_FOUND If file is not found.\r
+ RETURN_UNSUPPORTED If firmware configuration is unavailable.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+QemuFwCfgFindFile (\r
+ IN CONST CHAR8 *Name,\r
+ OUT FIRMWARE_CONFIG_ITEM *Item,\r
+ OUT UINTN *Size\r
+ );\r
#endif\r
\r
DEBUG ((EFI_D_INFO, "QemuFwCfg interface is supported.\n"));\r
return RETURN_SUCCESS;\r
}\r
+\r
+\r
+/**\r
+ Find the configuration item corresponding to the firmware configuration file.\r
+\r
+ @param[in] Name - Name of file to look up.\r
+ @param[out] Item - Configuration item corresponding to the file, to be passed\r
+ to QemuFwCfgSelectItem ().\r
+ @param[out] Size - Number of bytes in the file.\r
+\r
+ @return RETURN_SUCCESS If file is found.\r
+ RETURN_NOT_FOUND If file is not found.\r
+ RETURN_UNSUPPORTED If firmware configuration is unavailable.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+QemuFwCfgFindFile (\r
+ IN CONST CHAR8 *Name,\r
+ OUT FIRMWARE_CONFIG_ITEM *Item,\r
+ OUT UINTN *Size\r
+ )\r
+{\r
+ UINT32 Count;\r
+ UINT32 Idx;\r
+\r
+ if (!mQemuFwCfgSupported) {\r
+ return RETURN_UNSUPPORTED;\r
+ }\r
+\r
+ QemuFwCfgSelectItem (QemuFwCfgItemFileDir);\r
+ Count = SwapBytes32 (QemuFwCfgRead32 ());\r
+\r
+ for (Idx = 0; Idx < Count; ++Idx) {\r
+ UINT32 FileSize;\r
+ UINT16 FileSelect;\r
+ UINT16 FileReserved;\r
+ CHAR8 FName[56];\r
+\r
+ FileSize = QemuFwCfgRead32 ();\r
+ FileSelect = QemuFwCfgRead16 ();\r
+ FileReserved = QemuFwCfgRead16 ();\r
+ InternalQemuFwCfgReadBytes (sizeof (FName), FName);\r
+\r
+ if (AsciiStrCmp (Name, FName) == 0) {\r
+ *Item = SwapBytes16 (FileSelect);\r
+ *Size = SwapBytes32 (FileSize);\r
+ return RETURN_SUCCESS;\r
+ }\r
+ }\r
+\r
+ return RETURN_NOT_FOUND;\r
+}\r