VirtualBox

Changeset 65843 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 22, 2017 7:23:56 PM (8 years ago)
Author:
vboxsync
Message:

Main/ACPI: default size for the 64-bit prefetch root bus resource is 64GB and it's only enabled either for 64-bit guests or PAE is enabled

Location:
trunk/src/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r65711 r65843  
    171171    SYSTEM_INFO_INDEX_SERIAL3_IOBASE    = 7,
    172172    SYSTEM_INFO_INDEX_SERIAL3_IRQ       = 8,
    173     SYSTEM_INFO_INDEX_PREF64_MEMORY_START = 9,
     173    SYSTEM_INFO_INDEX_PREF64_MEMORY_MIN = 9,
    174174    SYSTEM_INFO_INDEX_RTC_STATUS        = 10,
    175175    SYSTEM_INFO_INDEX_CPU_LOCKED        = 11, /**< Contains a flag indicating whether the CPU is locked or not */
     
    192192    SYSTEM_INFO_INDEX_PARALLEL1_IOBASE  = 28,
    193193    SYSTEM_INFO_INDEX_PARALLEL1_IRQ     = 29,
    194     SYSTEM_INFO_INDEX_END               = 30,
     194    SYSTEM_INFO_INDEX_PREF64_MEMORY_MAX = 30,
     195    SYSTEM_INFO_INDEX_END               = 31,
    195196    SYSTEM_INFO_INDEX_INVALID           = 0x80,
    196197    SYSTEM_INFO_INDEX_VALID             = 0x200
     
    309310    uint64_t            u64RamSize;
    310311    /** Offset of the 64-bit prefetchable memory window. */
    311     uint64_t            u64PciPref64;
     312    uint64_t            u64PciPref64Min;
     313    /** Limit of the 64-bit prefetchable memory window. */
     314    uint64_t            u64PciPref64Max;
    312315    /** The number of bytes below 4GB. */
    313316    uint32_t            cbRamLow;
     
    13261329            break;
    13271330
    1328         case SYSTEM_INFO_INDEX_PREF64_MEMORY_START:
    1329             *pu32 = pThis->u64PciPref64 >> 16; /* 64KB units */
    1330             Assert(((uint64_t)*pu32 << 16) == pThis->u64PciPref64);
     1331        case SYSTEM_INFO_INDEX_PREF64_MEMORY_MIN:
     1332            *pu32 = pThis->u64PciPref64Min >> 16; /* 64KB units */
     1333            Assert(((uint64_t)*pu32 << 16) == pThis->u64PciPref64Min);
     1334            break;
     1335
     1336        case SYSTEM_INFO_INDEX_PREF64_MEMORY_MAX:
     1337            *pu32 = pThis->u64PciPref64Max >> 16; /* 64KB units */
     1338            Assert(((uint64_t)*pu32 << 16) == pThis->u64PciPref64Max);
     1339            LogRel(("MAX\n"));
    13311340            break;
    13321341
     
    31393148        /* Activate MEM4 */
    31403149        if (pThis->u64RamSize > offRamHole)
    3141             pThis->u64PciPref64 = RT_ALIGN_64(pThis->u64RamSize + cbRamHole, _1G);
     3150            pThis->u64PciPref64Min = RT_ALIGN_64(pThis->u64RamSize + cbRamHole, _1M);
    31423151        else
    3143             pThis->u64PciPref64 = _4G;
     3152            pThis->u64PciPref64Min = _4G;
    31443153    }
    31453154    uint64_t cbRamLow = pThis->u64RamSize > offRamHole ? offRamHole : pThis->u64RamSize;
     
    35693578                              "McfgLength\0"
    35703579                              "PciPref64Enabled\0"
     3580                              "PciPref64Limit\0"
    35713581                              "SmcEnabled\0"
    35723582                              "FdcEnabled\0"
     
    36413651        return PDMDEV_SET_ERROR(pDevIns, rc,
    36423652                                N_("Configuration error: Failed to read \"PciPref64Enabled\""));
     3653
     3654    /* query the limit of the the 64-bit prefetchable memory window */
     3655    rc = CFGMR3QueryU64Def(pCfg, "PciPref64Limit", &pThis->u64PciPref64Max, _1G64*64);
     3656    if (RT_FAILURE(rc))
     3657        return PDMDEV_SET_ERROR(pDevIns, rc,
     3658                                N_("Configuration error: Failed to read \"PciPref64Limit\""));
    36433659
    36443660    /* query whether we are supposed to present custom table */
  • trunk/src/VBox/Devices/PC/vbox.dsl

    r65823 r65843  
    338338    IndexField (IDX0, DAT0, DwordAcc, NoLock, Preserve)
    339339    {
    340         MEML,  32,
     340        MEML,  32, // low-memory length (64KB units)
    341341        UIOA,  32, // if IO APIC enabled
    342342        UHPT,  32, // if HPET enabled
     
    347347        SL3B,  32, // Serial3 base IO address
    348348        SL3I,  32, // Serial3 IRQ
    349         PMEM,  32,
     349        PMNN,  32, // start of 64-bit prefetch window (64KB units)
    350350        URTC,  32, // if RTC shown in tables
    351351        CPUL,  32, // flag of CPU lock state
     
    368368        PP1B,  32, // Parallel1 base IO address
    369369        PP1I,  32, // Parallel1 IRQ
     370        PMNX,  32, // limit of 64-bit prefetch window (64KB units)
    370371        Offset (0x80),
    371372        ININ, 32,
     
    389390            DBG ("UFDC: ")
    390391            HEX4 (UFDC)
    391             DBG ("PMEM: ")
    392             HEX4 (PMEM)
     392            DBG ("PMNN: ")
     393            HEX4 (PMNN)
    393394        }
    394395
     
    15801581                    0x0000000000000000,       // _GRA: Granularity.
    15811582                    0x0000000100000000,       // _MIN: Min address, def. 4GB, will be overwritten.
    1582                     0x00000fffffffffff,       // _MAX: Max possible address, 16TB-1, fixed.
     1583                    0x0000000fffffffff,       // _MAX: Max address, def. 64GB-1, will be overwritten.
    15831584                    0x0000000000000000,       // _TRA: Translation
    1584                     0x00000fff00000000,       // _LEN: Range length (calculated from _MIN)
     1585                    0x0000000f00000000,       // _LEN: Range length (_MAX-_MIN+1)
    15851586                    ,                         // ResourceSourceIndex: Optional field left blank
    15861587                    ,                         // ResourceSource:      Optional field left blank
     
    15971598                Subtract (0xfe000000, RAMT, RAMR)
    15981599
    1599                 if (LNotEqual (PMEM, 0x00000000))
     1600                if (LNotEqual (PMNN, 0x00000000))
    16001601                {
    16011602                    // Not for Windows < 7!
     
    16061607                        CreateQwordField (TOM, \_SB.PCI0.MEM4._LEN, TM4L)
    16071608
    1608                         Multiply (PMEM, 0x10000, TM4N)       // PMEM in units of 64KB
     1609                        Multiply (PMNN, 0x10000, TM4N)       // PMNN in units of 64KB
     1610                        Subtract (Multiply (PMNX, 0x10000), 1, TM4X) // PMNX in units of 64KB
    16091611                        Add (Subtract (TM4X, TM4N), 1, TM4L) // determine LEN, MAX is already there
    16101612
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r65698 r65843  
    32283228                InsertConfigInteger(pCfg,  "McfgBase",   uMcfgBase);
    32293229                InsertConfigInteger(pCfg,  "McfgLength", cbMcfgLength);
    3230                 InsertConfigInteger(pCfg,  "PciPref64Enabled", 1);
     3230                /* 64-bit prefetch window root resource:
     3231                 * Only for ICH9 and if PAE or Long Mode is enabled */
     3232                if (fEnablePAE || fIsGuest64Bit)
     3233                    InsertConfigInteger(pCfg,  "PciPref64Enabled", 1);
    32313234            }
    32323235            InsertConfigInteger(pCfg,  "HostBusPciAddress", uHbcPCIAddress);
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