VirtualBox

Changeset 61042 in vbox for trunk/src/VBox/Main/xml


Ignore:
Timestamp:
May 19, 2016 11:57:10 AM (9 years ago)
Author:
vboxsync
Message:

Main/Machine+BIOSSettings: introduce APIC/X2APIC CPU feature settings and a BIOS setting what should be used.
Frontends/VBoxManage: corresponding changes to allow making the settings changes
Devices/BIOS+EFI: placeholder for the BIOS setting part, which isn't implemented yet

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/xml/Settings.cpp

    r61036 r61042  
    21552155    fLogoFadeIn(true),
    21562156    fLogoFadeOut(true),
     2157    fPXEDebugEnabled(false),
    21572158    ulLogoDisplayTime(0),
    21582159    biosBootMenuMode(BIOSBootMenuMode_MessageAndMenu),
    2159     fPXEDebugEnabled(false),
     2160    apicMode(APICMode_APIC),
    21602161    llTimeOffset(0)
    21612162{
     
    21712172        && fLogoFadeIn
    21722173        && fLogoFadeOut
     2174        && !fPXEDebugEnabled
    21732175        && ulLogoDisplayTime == 0
    21742176        && biosBootMenuMode == BIOSBootMenuMode_MessageAndMenu
    2175         && !fPXEDebugEnabled
    2176         && llTimeOffset == 0;
     2177        && apicMode == APICMode_APIC
     2178        && llTimeOffset == 0
     2179        && strLogoImagePath.isEmpty();
    21772180}
    21782181
     
    21892192            && fLogoFadeIn         == d.fLogoFadeIn
    21902193            && fLogoFadeOut        == d.fLogoFadeOut
     2194            && fPXEDebugEnabled    == d.fPXEDebugEnabled
    21912195            && ulLogoDisplayTime   == d.ulLogoDisplayTime
    2192             && strLogoImagePath    == d.strLogoImagePath
    21932196            && biosBootMenuMode    == d.biosBootMenuMode
    2194             && fPXEDebugEnabled    == d.fPXEDebugEnabled
    2195             && llTimeOffset        == d.llTimeOffset);
     2197            && apicMode            == d.apicMode
     2198            && llTimeOffset        == d.llTimeOffset
     2199            && strLogoImagePath    == d.strLogoImagePath);
    21962200}
    21972201
     
    26922696    fTripleFaultReset(false),
    26932697    fPAE(false),
     2698    fAPIC(true),
     2699    fX2APIC(false),
    26942700    enmLongMode(HC_ARCH_BITS == 64 ? Hardware::LongMode_Enabled : Hardware::LongMode_Disabled),
    26952701    cCPUs(1),
     
    28422848            && enmLongMode               == h.enmLongMode
    28432849            && fTripleFaultReset         == h.fTripleFaultReset
     2850            && fAPIC                     == h.fAPIC
     2851            && fX2APIC                   == h.fX2APIC
    28442852            && cCPUs                     == h.cCPUs
    28452853            && fCpuHotPlug               == h.fCpuHotPlug
     
    37953803                pelmCPUChild->getAttributeValue("enabled", hw.fTripleFaultReset);
    37963804
     3805            if ((pelmCPUChild = pelmHwChild->findChildElement("APIC")))
     3806                pelmCPUChild->getAttributeValue("enabled", hw.fAPIC);
     3807            if ((pelmCPUChild = pelmHwChild->findChildElement("X2APIC")))
     3808                pelmCPUChild->getAttributeValue("enabled", hw.fX2APIC);
     3809
    37973810            if ((pelmCPUChild = pelmHwChild->findChildElement("CpuIdTree")))
    37983811                readCpuIdTree(*pelmCPUChild, hw.llCpuIdLeafs);
     
    40784091            if ((pelmBIOSChild = pelmHwChild->findChildElement("IOAPIC")))
    40794092                pelmBIOSChild->getAttributeValue("enabled", hw.biosSettings.fIOAPICEnabled);
     4093            if ((pelmBIOSChild = pelmHwChild->findChildElement("APIC")))
     4094            {
     4095                Utf8Str strAPIC;
     4096                if (pelmBIOSChild->getAttributeValue("mode", strAPIC))
     4097                {
     4098                    strAPIC.toUpper();
     4099                    if (strAPIC == "DISABLED")
     4100                        hw.biosSettings.apicMode = APICMode_Disabled;
     4101                    else if (strAPIC == "APIC")
     4102                        hw.biosSettings.apicMode = APICMode_APIC;
     4103                    else if (strAPIC == "X2APIC")
     4104                        hw.biosSettings.apicMode = APICMode_X2APIC;
     4105                    else
     4106                        throw ConfigFileError(this, pelmBIOSChild, N_("Invalid value '%s' in APIC/@mode attribute"), strAPIC.c_str());
     4107                }
     4108            }
    40804109            if ((pelmBIOSChild = pelmHwChild->findChildElement("Logo")))
    40814110            {
     
    51005129    // PAE has too crazy default handling, must always save this setting.
    51015130    pelmCPU->createChild("PAE")->setAttribute("enabled", hw.fPAE);
     5131    if (m->sv >= SettingsVersion_v1_16)
     5132    {
     5133    }
    51025134    if (m->sv >= SettingsVersion_v1_14 && hw.enmLongMode != Hardware::LongMode_Legacy)
    51035135    {
     
    51085140    if (hw.fTripleFaultReset)
    51095141        pelmCPU->createChild("TripleFaultReset")->setAttribute("enabled", hw.fTripleFaultReset);
     5142    if (m->sv >= SettingsVersion_v1_14)
     5143    {
     5144        if (hw.fX2APIC)
     5145            pelmCPU->createChild("X2APIC")->setAttribute("enabled", hw.fX2APIC);
     5146        else if (!hw.fAPIC)
     5147            pelmCPU->createChild("APIC")->setAttribute("enabled", hw.fAPIC);
     5148    }
    51105149    if (hw.cCPUs > 1)
    51115150        pelmCPU->setAttribute("count", hw.cCPUs);
     
    54505489        if (hw.biosSettings.fIOAPICEnabled)
    54515490            pelmBIOS->createChild("IOAPIC")->setAttribute("enabled", hw.biosSettings.fIOAPICEnabled);
     5491        if (hw.biosSettings.apicMode != APICMode_APIC)
     5492        {
     5493            const char *pcszAPIC;
     5494            switch (hw.biosSettings.apicMode)
     5495            {
     5496                case APICMode_Disabled:
     5497                    pcszAPIC = "Disabled";
     5498                    break;
     5499                case APICMode_APIC:
     5500                default:
     5501                    pcszAPIC = "APIC";
     5502                    break;
     5503                case APICMode_X2APIC:
     5504                    pcszAPIC = "X2APIC";
     5505                    break;
     5506            }
     5507            pelmBIOS->createChild("APIC")->setAttribute("mode", pcszAPIC);
     5508        }
    54525509
    54535510        if (   !hw.biosSettings.fLogoFadeIn
     
    67266783    if (m->sv < SettingsVersion_v1_16)
    67276784    {
    6728         // VirtualBox 5.1 adds a NVMe storage controller, paravirt debug options, cpu profile.
     6785        // VirtualBox 5.1 adds a NVMe storage controller, paravirt debug
     6786        // options, cpu profile, APIC settings (CPU capability and BIOS).
    67296787
    67306788        if (   hardwareMachine.strParavirtDebug.isNotEmpty()
    6731             || (!hardwareMachine.strCpuProfile.equals("host") && hardwareMachine.strCpuProfile.isNotEmpty())
     6789            || (!hardwareMachine.strCpuProfile.equals("host") && hardwareMachine.strCpuProfile.isNotEmpty()
     6790            || hardwareMachine.biosSettings.apicMode != APICMode_APIC
     6791            || !hardwareMachine.fAPIC
     6792            || hardwareMachine.fX2APIC)
    67326793           )
    67336794        {
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