VirtualBox

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


Ignore:
Timestamp:
Jan 13, 2021 3:56:05 PM (4 years ago)
Author:
vboxsync
Message:

AMD IOMMU: bugref:9654 Main/API: AMD IOMMU support.

File:
1 edited

Legend:

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

    r85769 r87241  
    411411            else if (uMinor == 18)
    412412                sv = SettingsVersion_v1_18;
    413             else if (uMinor > 18)
     413            else if (uMinor == 19)
     414                sv = SettingsVersion_v1_19;
     415            else if (uMinor > 19)
    414416                sv = SettingsVersion_Future;
    415417        }
     
    10431045            break;
    10441046
     1047        case SettingsVersion_v1_19:
     1048            pcszVersion = "1.19";
     1049            break;
     1050
    10451051        default:
    10461052            // catch human error: the assertion below will trigger in debug
     
    10651071                // but as it's an omission of someone who changed this file
    10661072                // it's the only generic possibility.
    1067                 pcszVersion = "1.18";
    1068                 m->sv = SettingsVersion_v1_18;
     1073                pcszVersion = "1.19";
     1074                m->sv = SettingsVersion_v1_19;
    10691075            }
    10701076            break;
     
    33623368    keyboardHIDType(KeyboardHIDType_PS2Keyboard),
    33633369    chipsetType(ChipsetType_PIIX3),
     3370    iommuType(IommuType_None),
    33643371    paravirtProvider(ParavirtProvider_Legacy), // default for old VMs, for new ones it's ParavirtProvider_Default
    33653372    strParavirtDebug(""),
     
    34863493            && keyboardHIDType                == h.keyboardHIDType
    34873494            && chipsetType                    == h.chipsetType
     3495            && iommuType                      == h.iommuType
    34883496            && paravirtProvider               == h.paravirtProvider
    34893497            && strParavirtDebug               == h.strParavirtDebug
     
    46014609                                          N_("Invalid value '%s' in Chipset/@type"),
    46024610                                          strChipsetType.c_str());
     4611            }
     4612        }
     4613        else if (pelmHwChild->nameEquals("Iommu"))
     4614        {
     4615            Utf8Str strIommuType;
     4616            if (pelmHwChild->getAttributeValue("type", strIommuType))
     4617            {
     4618                if (strIommuType == "None")
     4619                    hw.iommuType = IommuType_None;
     4620                else if (strIommuType == "Automatic")
     4621                    hw.iommuType = IommuType_Automatic;
     4622                else if (strIommuType == "AMD")
     4623                    hw.iommuType = IommuType_AMD;
     4624                else
     4625                    throw ConfigFileError(this,
     4626                                          pelmHwChild,
     4627                                          N_("Invalid value '%s' in Iommu/@type"),
     4628                                          strIommuType.c_str());
    46034629            }
    46044630        }
     
    60926118            && hw.strParavirtDebug.isNotEmpty())
    60936119            pelmParavirt->setAttribute("debug", hw.strParavirtDebug);
     6120    }
     6121
     6122    if (   m->sv >= SettingsVersion_v1_19
     6123        && hw.iommuType != IommuType_None)
     6124    {
     6125        const char *pcszIommuType;
     6126        switch (hw.iommuType)
     6127        {
     6128            case IommuType_None:         pcszIommuType = "None";        break;
     6129            case IommuType_Automatic:    pcszIommuType = "Automatic";   break;
     6130            case IommuType_AMD:          pcszIommuType = "AMD";         break;
     6131            default:     Assert(false);  pcszIommuType = "None";        break;
     6132        }
     6133
     6134        xml::ElementNode *pelmIommu = pelmHardware->createChild("Iommu");
     6135        pelmIommu->setAttribute("type", pcszIommuType);
    60946136    }
    60956137
     
    76317673void MachineConfigFile::bumpSettingsVersionIfNeeded()
    76327674{
     7675    if (m->sv < SettingsVersion_v1_19)
     7676    {
     7677        // VirtualBox 6.2 adds iommu device.
     7678        if (hardwareMachine.iommuType != IommuType_None)
     7679        {
     7680            m->sv = SettingsVersion_v1_19;
     7681            return;
     7682        }
     7683    }
     7684
    76337685    if (m->sv < SettingsVersion_v1_18)
    76347686    {
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