VirtualBox

Changeset 100495 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jul 11, 2023 6:43:42 AM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158276
Message:

Devices/EFI: Use our firmware volume definitions to get rid of the header dependency from the EFI firmware sources, bugref:4643

Location:
trunk/src/VBox/Devices
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/DevEFI.cpp

    r98131 r100495  
    5858#include <iprt/utf16.h>
    5959
     60#ifdef IN_RING3
     61# include <iprt/formats/efi-fv.h>
     62#endif
     63
    6064#include "DevEFI.h"
    6165#include "FlashCore.h"
     
    6367#include "VBoxDD2.h"
    6468#include "../PC/DevFwCommon.h"
    65 
    66 /* EFI includes */
    67 #ifdef IN_RING3
    68 # ifdef _MSC_VER
    69 #  pragma warning(push)
    70 #  pragma warning(disable:4668)
    71 # endif
    72 # include <ProcessorBind.h>
    73 # ifdef _MSC_VER
    74 #  pragma warning(pop)
    75 # endif
    76 # include <Common/UefiBaseTypes.h>
    77 # include <Common/PiFirmwareVolume.h>
    78 # include <Common/PiFirmwareFile.h>
    79 #endif
    8069
    8170
     
    11941183     * Validate firmware volume header.
    11951184     */
    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),
    11981187                          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),
    12011190                          VERR_VERSION_MISMATCH);
    12021191    /** @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),
    12051194                          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),
    12091199                          VERR_INVALID_PARAMETER);
    12101200
    12111201    AssertLogRelMsgReturn(!(pThisCC->cbEfiRom & GUEST_PAGE_OFFSET_MASK), ("%RX64\n", pThisCC->cbEfiRom), VERR_INVALID_PARAMETER);
    12121202
    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));
    12141204
    12151205    /** @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)),
    12171207                          ("Expected EFI_SYSTEM_NV_DATA_FV_GUID as an identifier"),
    12181208                          VERR_INVALID_MAGIC);
    12191209
    12201210    /* 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;
    12231213    pThisCC->GCPhysNvram = UINT32_C(0xfffff000) - pThisCC->cbEfiRom + GUEST_PAGE_SIZE;
    12241214    pThisCC->cbEfiRom   -= pThisCC->cbNvram;
    12251215
    1226     int rc = flashR3Init(&pThis->Flash, pThisCC->pDevIns, 0xA289 /*Intel*/, pThisCC->cbNvram, pFwVolHdr->BlockMap[0].Length);
     1216    int rc = flashR3Init(&pThis->Flash, pThisCC->pDevIns, 0xA289 /*Intel*/, pThisCC->cbNvram, pBlockMap->cbBlock);
    12271217    if (RT_FAILURE(rc))
    12281218        return rc;
  • trunk/src/VBox/Devices/Makefile.kmk

    r100161 r100495  
    677677  VBoxDD_DEFS           += VBOX_WITH_EFI
    678678  VBoxDD_SOURCES        += EFI/DevEFI.cpp
    679   EFI/DevEFI.cpp_INCS       += EFI/Firmware/BaseTools/Source/C/Include
    680   EFI/DevEFI.cpp_INCS.x86   += EFI/Firmware/BaseTools/Source/C/Include/Ia32
    681   EFI/DevEFI.cpp_INCS.amd64 += EFI/Firmware/BaseTools/Source/C/Include/X64
    682   EFI/DevEFI.cpp_INCS.arm32 += EFI/Firmware/BaseTools/Source/C/Include/Arm
    683   EFI/DevEFI.cpp_INCS.arm64 += EFI/Firmware/BaseTools/Source/C/Include/AArch64
    684679 endif
    685680
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette