Changeset 100495 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Jul 11, 2023 6:43:42 AM (20 months ago)
- svn:sync-xref-src-repo-rev:
- 158276
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevEFI.cpp
r98131 r100495 58 58 #include <iprt/utf16.h> 59 59 60 #ifdef IN_RING3 61 # include <iprt/formats/efi-fv.h> 62 #endif 63 60 64 #include "DevEFI.h" 61 65 #include "FlashCore.h" … … 63 67 #include "VBoxDD2.h" 64 68 #include "../PC/DevFwCommon.h" 65 66 /* EFI includes */67 #ifdef IN_RING368 # ifdef _MSC_VER69 # pragma warning(push)70 # pragma warning(disable:4668)71 # endif72 # include <ProcessorBind.h>73 # ifdef _MSC_VER74 # pragma warning(pop)75 # endif76 # include <Common/UefiBaseTypes.h>77 # include <Common/PiFirmwareVolume.h>78 # include <Common/PiFirmwareFile.h>79 #endif80 69 81 70 … … 1194 1183 * Validate firmware volume header. 1195 1184 */ 1196 AssertLogRelMsgReturn(pFwVolHdr-> Signature == RT_MAKE_U32_FROM_U8('_', 'F', 'V', 'H'),1197 ("%#x, expected %#x\n", pFwVolHdr-> Signature, RT_MAKE_U32_FROM_U8('_', 'F', 'V', 'H')),1185 AssertLogRelMsgReturn(pFwVolHdr->u32Signature == EFI_FIRMWARE_VOLUME_HEADER_SIGNATURE, 1186 ("%#x, expected %#x\n", pFwVolHdr->u32Signature, EFI_FIRMWARE_VOLUME_HEADER_SIGNATURE), 1198 1187 VERR_INVALID_MAGIC); 1199 AssertLogRelMsgReturn(pFwVolHdr-> Revision == EFI_FVH_REVISION,1200 ("%#x, expected %#x\n", pFwVolHdr-> Signature, EFI_FVH_REVISION),1188 AssertLogRelMsgReturn(pFwVolHdr->bRevision == EFI_FIRMWARE_VOLUME_HEADER_REVISION, 1189 ("%#x, expected %#x\n", pFwVolHdr->bRevision, EFI_FIRMWARE_VOLUME_HEADER_REVISION), 1201 1190 VERR_VERSION_MISMATCH); 1202 1191 /** @todo check checksum, see PE spec vol. 3 */ 1203 AssertLogRelMsgReturn(pFwVolHdr-> FvLength<= pThisCC->cbEfiRom,1204 ("%#llx, expected %#llx\n", pFwVolHdr-> FvLength, pThisCC->cbEfiRom),1192 AssertLogRelMsgReturn(pFwVolHdr->cbFv <= pThisCC->cbEfiRom, 1193 ("%#llx, expected %#llx\n", pFwVolHdr->cbFv, pThisCC->cbEfiRom), 1205 1194 VERR_INVALID_PARAMETER); 1206 AssertLogRelMsgReturn( pFwVolHdr->BlockMap[0].Length > 0 1207 && pFwVolHdr->BlockMap[0].NumBlocks > 0, 1208 ("%#x, %x\n", pFwVolHdr->BlockMap[0].Length, pFwVolHdr->BlockMap[0].NumBlocks), 1195 PCEFI_FW_BLOCK_MAP pBlockMap = (PCEFI_FW_BLOCK_MAP)(pFwVolHdr + 1); 1196 AssertLogRelMsgReturn( pBlockMap->cbBlock > 0 1197 && pBlockMap->cBlocks > 0, 1198 ("%#x, %x\n", pBlockMap->cbBlock, pBlockMap->cBlocks), 1209 1199 VERR_INVALID_PARAMETER); 1210 1200 1211 1201 AssertLogRelMsgReturn(!(pThisCC->cbEfiRom & GUEST_PAGE_OFFSET_MASK), ("%RX64\n", pThisCC->cbEfiRom), VERR_INVALID_PARAMETER); 1212 1202 1213 LogRel(("Found EFI FW Volume, %u bytes (%u %u-byte blocks)\n", pFwVolHdr-> FvLength, pFwVolHdr->BlockMap[0].NumBlocks, pFwVolHdr->BlockMap[0].Length));1203 LogRel(("Found EFI FW Volume, %u bytes (%u %u-byte blocks)\n", pFwVolHdr->cbFv, pBlockMap->cBlocks, pBlockMap->cbBlock)); 1214 1204 1215 1205 /** @todo Make this more dynamic, this assumes that the NV storage area comes first (always the case for our builds). */ 1216 AssertLogRelMsgReturn(!memcmp(&pFwVolHdr-> FileSystemGuid, &g_UuidNvDataFv, sizeof(g_UuidNvDataFv)),1206 AssertLogRelMsgReturn(!memcmp(&pFwVolHdr->GuidFilesystem, &g_UuidNvDataFv, sizeof(g_UuidNvDataFv)), 1217 1207 ("Expected EFI_SYSTEM_NV_DATA_FV_GUID as an identifier"), 1218 1208 VERR_INVALID_MAGIC); 1219 1209 1220 1210 /* Found NVRAM storage, configure flash device. */ 1221 pThisCC->offEfiRom = pFwVolHdr-> FvLength;1222 pThisCC->cbNvram = pFwVolHdr-> FvLength;1211 pThisCC->offEfiRom = pFwVolHdr->cbFv; 1212 pThisCC->cbNvram = pFwVolHdr->cbFv; 1223 1213 pThisCC->GCPhysNvram = UINT32_C(0xfffff000) - pThisCC->cbEfiRom + GUEST_PAGE_SIZE; 1224 1214 pThisCC->cbEfiRom -= pThisCC->cbNvram; 1225 1215 1226 int rc = flashR3Init(&pThis->Flash, pThisCC->pDevIns, 0xA289 /*Intel*/, pThisCC->cbNvram, p FwVolHdr->BlockMap[0].Length);1216 int rc = flashR3Init(&pThis->Flash, pThisCC->pDevIns, 0xA289 /*Intel*/, pThisCC->cbNvram, pBlockMap->cbBlock); 1227 1217 if (RT_FAILURE(rc)) 1228 1218 return rc; -
trunk/src/VBox/Devices/Makefile.kmk
r100161 r100495 677 677 VBoxDD_DEFS += VBOX_WITH_EFI 678 678 VBoxDD_SOURCES += EFI/DevEFI.cpp 679 EFI/DevEFI.cpp_INCS += EFI/Firmware/BaseTools/Source/C/Include680 EFI/DevEFI.cpp_INCS.x86 += EFI/Firmware/BaseTools/Source/C/Include/Ia32681 EFI/DevEFI.cpp_INCS.amd64 += EFI/Firmware/BaseTools/Source/C/Include/X64682 EFI/DevEFI.cpp_INCS.arm32 += EFI/Firmware/BaseTools/Source/C/Include/Arm683 EFI/DevEFI.cpp_INCS.arm64 += EFI/Firmware/BaseTools/Source/C/Include/AArch64684 679 endif 685 680
Note:
See TracChangeset
for help on using the changeset viewer.