VirtualBox

Changeset 65850 in vbox for trunk/src/VBox/Devices/EFI


Ignore:
Timestamp:
Feb 23, 2017 10:16:04 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
113619
Message:

Devices/Main: don't set RamSize and RamHole explicitly for DevACPI, DevEFI, DevPcBios and VMMDev but use the MMR3Phys* API for that. This simplifies and unifies the calculation of RAM below 4GB and RAM above 4GB. Also renamed PciPref64Limit to PciPref64LimitGB to show that the limit is in GB.

File:
1 edited

Legend:

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

    r65714 r65850  
    191191    /** Number of virtual CPUs. (Config) */
    192192    uint32_t                cCpus;
    193     /** RAM below 4GB (in bytes). (Config) */
    194     uint32_t                cbBelow4GB;
    195     /** RAM above 4GB (in bytes). (Config) */
    196     uint64_t                cbAbove4GB;
    197     /** The total amount of memory. */
    198     uint64_t                cbRam;
    199     /** The size of the RAM hole below 4GB. */
    200     uint64_t                cbRamHole;
    201193
    202194    /** The size of the DMI tables. */
     
    17441736    PDEVEFI pThis = PDMINS_2_DATA(pDevIns, PDEVEFI);
    17451737
     1738    PVM pVM                    = PDMDevHlpGetVM(pDevIns);
     1739    uint64_t const  cbRamSize  = MMR3PhysGetRamSize(pVM);
     1740    uint32_t const  cbBelow4GB = MMR3PhysGetRamSizeBelow4GB(pVM);
     1741    uint64_t const  cbAbove4GB = MMR3PhysGetRamSizeAbove4GB(pVM);
     1742    NOREF(cbAbove4GB);
     1743
    17461744    /*
    17471745     * Memory sizes.
    17481746     */
    1749     uint64_t const offRamHole = _4G - pThis->cbRamHole;
    17501747    uint32_t u32Low = 0;
    17511748    uint32_t u32Chunks = 0;
    1752     if (pThis->cbRam > 16 * _1M)
    1753     {
    1754         u32Low = (uint32_t)RT_MIN(RT_MIN(pThis->cbRam, offRamHole), UINT32_C(0xffe00000));
     1749    if (cbRamSize > 16 * _1M)
     1750    {
     1751        u32Low = RT_MIN(cbBelow4GB, UINT32_C(0xffe00000));
    17551752        u32Chunks = (u32Low - 16U * _1M) / _64K;
    17561753    }
     
    17581755    cmosWrite(pDevIns, 0x35, RT_BYTE2(u32Chunks));
    17591756
    1760     if (u32Low < pThis->cbRam)
    1761     {
    1762         uint64_t u64 = pThis->cbRam - u32Low;
     1757    if (u32Low < cbRamSize)
     1758    {
     1759        uint64_t u64 = cbRamSize - u32Low;
    17631760        u32Chunks = (uint32_t)(u64 / _64K);
    17641761        cmosWrite(pDevIns, 0x5b, RT_BYTE1(u32Chunks));
     
    21422139    if (!CFGMR3AreValuesValid(pCfg,
    21432140                              "EfiRom\0"
    2144                               "RamSize\0"
    2145                               "RamHoleSize\0"
    21462141                              "NumCPUs\0"
    21472142                              "UUID\0"
     
    22212216    uuid.Gen.u16TimeHiAndVersion = RT_H2BE_U16(uuid.Gen.u16TimeHiAndVersion);
    22222217    memcpy(&pThis->aUuid, &uuid, sizeof pThis->aUuid);
    2223 
    2224     /*
    2225      * RAM sizes
    2226      */
    2227     rc = CFGMR3QueryU64(pCfg, "RamSize", &pThis->cbRam);
    2228     AssertLogRelRCReturn(rc, rc);
    2229     rc = CFGMR3QueryU64(pCfg, "RamHoleSize", &pThis->cbRamHole);
    2230     AssertLogRelRCReturn(rc, rc);
    2231     pThis->cbBelow4GB = RT_MIN(pThis->cbRam, _4G - pThis->cbRamHole);
    2232     pThis->cbAbove4GB = pThis->cbRam - pThis->cbBelow4GB;
    22332218
    22342219    /*
Note: See TracChangeset for help on using the changeset viewer.

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