VirtualBox

Changeset 37813 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Jul 7, 2011 9:59:23 AM (14 years ago)
Author:
vboxsync
Message:

Main: check for the existance of the extension pack for PCI passthrough

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r37794 r37813  
    457457
    458458#ifdef VBOX_WITH_PCI_PASSTHROUGH
    459 static HRESULT attachRawPciDevices(BusAssignmentManager* BusMgr,
    460                                    PCFGMNODE             pDevices,
    461                                    Console*              pConsole)
     459HRESULT Console::attachRawPciDevices(PVM pVM,
     460                                     BusAssignmentManager *BusMgr,
     461                                     PCFGMNODE            pDevices)
    462462{
    463463    HRESULT hrc = S_OK;
     
    465465
    466466    SafeIfaceArray<IPciDeviceAttachment> assignments;
    467     ComPtr<IMachine> aMachine =  pConsole->machine();
     467    ComPtr<IMachine> aMachine = machine();
    468468
    469469    hrc = aMachine->COMGETTER(PciDeviceAssignments)(ComSafeArrayAsOutParam(assignments));
    470470    if (hrc != S_OK)
    471471        return hrc;
     472
     473    /*
     474     * PCI passthrough is only available if the proper ExtPack is installed.
     475     *
     476     * Note. Configuring PCI passthrough here and providing messages about
     477     * the missing extpack isn't exactly clean, but it is a necessary evil
     478     * to patch over legacy compatability issues introduced by the new
     479     * distribution model.
     480     */
     481# ifdef VBOX_WITH_EXTPACK
     482    static const char *s_pszPciRawExtPackName = "Oracle VM VirtualBox Extension Pack";
     483    if (!mptrExtPackManager->isExtPackUsable(s_pszPciRawExtPackName))
     484    {
     485        /* Always fatal! */
     486        return VMSetError(pVM, VERR_NOT_FOUND, RT_SRC_POS,
     487                N_("Implementation of the PCI passthrough framework not found!\n"
     488                   "The VM cannot be started. To fix this problem, either "
     489                   "install the '%s' or disable PCI passthrough via VBoxManage"),
     490                s_pszPciRawExtPackName);
     491    }
     492# endif
    472493
    473494    PCFGMNODE pBridges = CFGMR3GetChild(pDevices, "ich9pcibridge");
     
    569590        InsertConfigString(pLunL1,     "Driver", "MainPciRaw");
    570591        InsertConfigNode(pLunL1,       "Config", &pCfg);
    571         PciRawDev* pMainDev = new PciRawDev(pConsole);
     592        PciRawDev* pMainDev = new PciRawDev(this);
    572593        InsertConfigInteger(pCfg,      "Object", (uintptr_t)pMainDev);
    573594    }
     
    670691     */
    671692    ComPtr<IVirtualBox> virtualBox;
    672     hrc = pMachine->COMGETTER(Parent)(virtualBox.asOutParam());                         H();
     693    hrc = pMachine->COMGETTER(Parent)(virtualBox.asOutParam());                             H();
    673694
    674695    ComPtr<IHost> host;
    675     hrc = virtualBox->COMGETTER(Host)(host.asOutParam());                               H();
     696    hrc = virtualBox->COMGETTER(Host)(host.asOutParam());                                   H();
    676697
    677698    ComPtr<ISystemProperties> systemProperties;
    678     hrc = virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());       H();
     699    hrc = virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());           H();
    679700
    680701    ComPtr<IBIOSSettings> biosSettings;
    681     hrc = pMachine->COMGETTER(BIOSSettings)(biosSettings.asOutParam());                 H();
    682 
    683     hrc = pMachine->COMGETTER(HardwareUUID)(bstr.asOutParam());                         H();
     702    hrc = pMachine->COMGETTER(BIOSSettings)(biosSettings.asOutParam());                     H();
     703
     704    hrc = pMachine->COMGETTER(HardwareUUID)(bstr.asOutParam());                             H();
    684705    RTUUID HardwareUuid;
    685706    rc = RTUuidFromUtf16(&HardwareUuid, bstr.raw());
     
    687708
    688709    ULONG cRamMBs;
    689     hrc = pMachine->COMGETTER(MemorySize)(&cRamMBs);                                    H();
     710    hrc = pMachine->COMGETTER(MemorySize)(&cRamMBs);                                        H();
    690711#if 0 /* enable to play with lots of memory. */
    691712    if (RTEnvExist("VBOX_RAM_SIZE"))
     
    698719
    699720    ChipsetType_T chipsetType;
    700     hrc = pMachine->COMGETTER(ChipsetType)(&chipsetType);                               H();
     721    hrc = pMachine->COMGETTER(ChipsetType)(&chipsetType);                                   H();
    701722    if (chipsetType == ChipsetType_ICH9)
    702723    {
     
    711732
    712733    ULONG cCpus = 1;
    713     hrc = pMachine->COMGETTER(CPUCount)(&cCpus);                                        H();
     734    hrc = pMachine->COMGETTER(CPUCount)(&cCpus);                                            H();
    714735
    715736    ULONG ulCpuExecutionCap = 100;
    716     hrc = pMachine->COMGETTER(CPUExecutionCap)(&ulCpuExecutionCap);                     H();
     737    hrc = pMachine->COMGETTER(CPUExecutionCap)(&ulCpuExecutionCap);                         H();
    717738
    718739    Bstr osTypeId;
    719     hrc = pMachine->COMGETTER(OSTypeId)(osTypeId.asOutParam());                         H();
     740    hrc = pMachine->COMGETTER(OSTypeId)(osTypeId.asOutParam());                             H();
    720741
    721742    BOOL fIOAPIC;
    722     hrc = biosSettings->COMGETTER(IOAPICEnabled)(&fIOAPIC);                             H();
     743    hrc = biosSettings->COMGETTER(IOAPICEnabled)(&fIOAPIC);                                 H();
    723744
    724745    ComPtr<IGuestOSType> guestOSType;
    725     hrc = virtualBox->GetGuestOSType(osTypeId.raw(), guestOSType.asOutParam());         H();
     746    hrc = virtualBox->GetGuestOSType(osTypeId.raw(), guestOSType.asOutParam());             H();
    726747
    727748    Bstr guestTypeFamilyId;
    728     hrc = guestOSType->COMGETTER(FamilyId)(guestTypeFamilyId.asOutParam());             H();
     749    hrc = guestOSType->COMGETTER(FamilyId)(guestTypeFamilyId.asOutParam());                 H();
    729750    BOOL fOsXGuest = guestTypeFamilyId == Bstr("MacOS");
    730751
     
    10741095            InsertConfigNode(pDev,     "0", &pInst);
    10751096            InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
    1076             hrc = BusMgr->assignPciDevice("ich9pcibridge", pInst);                               H();
     1097            hrc = BusMgr->assignPciDevice("ich9pcibridge", pInst);                          H();
    10771098
    10781099            InsertConfigNode(pDev,     "1", &pInst);
    10791100            InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
    1080             hrc = BusMgr->assignPciDevice("ich9pcibridge", pInst);                               H();
     1101            hrc = BusMgr->assignPciDevice("ich9pcibridge", pInst);                          H();
    10811102
    10821103#ifdef VBOX_WITH_PCI_PASSTHROUGH
    10831104            /* Add PCI passthrough devices */
    1084             hrc = attachRawPciDevices(BusMgr, pDevices, this);                                   H();
     1105            hrc = attachRawPciDevices(pVM, BusMgr, pDevices);                               H();
    10851106#endif
    10861107        }
     
    11381159            InsertConfigNode(pDevices, "lpc", &pDev);
    11391160            InsertConfigNode(pDev,     "0", &pInst);
    1140             hrc = BusMgr->assignPciDevice("lpc", pInst);                               H();
     1161            hrc = BusMgr->assignPciDevice("lpc", pInst);                                    H();
    11411162            InsertConfigInteger(pInst, "Trusted",   1); /* boolean */
    11421163        }
     
    12341255        InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
    12351256
    1236         hrc = BusMgr->assignPciDevice("vga", pInst);                               H();
     1257        hrc = BusMgr->assignPciDevice("vga", pInst);                                        H();
    12371258        InsertConfigNode(pInst,    "Config", &pCfg);
    12381259        ULONG cVRamMBs;
     
    15051526                case StorageControllerType_LsiLogic:
    15061527                {
    1507                     hrc = BusMgr->assignPciDevice("lsilogic", pCtlInst);                               H();
     1528                    hrc = BusMgr->assignPciDevice("lsilogic", pCtlInst);                    H();
    15081529
    15091530                    InsertConfigInteger(pCfg, "Bootable",  fBootable);
     
    15111532                    /* Attach the status driver */
    15121533                    Assert(cLedScsi >= 16);
    1513                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedScsi], 0, 15, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1534                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedScsi], 0, 15,
     1535                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    15141536                    paLedDevType = &maStorageDevType[iLedScsi];
    15151537                    break;
     
    15181540                case StorageControllerType_BusLogic:
    15191541                {
    1520                     hrc = BusMgr->assignPciDevice("buslogic", pCtlInst);                               H();
     1542                    hrc = BusMgr->assignPciDevice("buslogic", pCtlInst);                    H();
    15211543
    15221544                    InsertConfigInteger(pCfg, "Bootable",  fBootable);
     
    15241546                    /* Attach the status driver */
    15251547                    Assert(cLedScsi >= 16);
    1526                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedScsi], 0, 15, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1548                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedScsi], 0, 15,
     1549                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    15271550                    paLedDevType = &maStorageDevType[iLedScsi];
    15281551                    break;
     
    15311554                case StorageControllerType_IntelAhci:
    15321555                {
    1533                     hrc = BusMgr->assignPciDevice("ahci", pCtlInst);                               H();
     1556                    hrc = BusMgr->assignPciDevice("ahci", pCtlInst);                        H();
    15341557
    15351558                    ULONG cPorts = 0;
     
    15541577
    15551578                            LONG lPortNumber = -1;
    1556                             hrc = ctrls[i]->GetIDEEmulationPort(j, &lPortNumber);               H();
     1579                            hrc = ctrls[i]->GetIDEEmulationPort(j, &lPortNumber);           H();
    15571580                            InsertConfigInteger(pCfg, s_apszConfig[j], lPortNumber);
    15581581                            if (pBiosCfg)
     
    15631586                    /* Attach the status driver */
    15641587                    AssertRelease(cPorts <= cLedSata);
    1565                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedSata], 0, cPorts - 1, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1588                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedSata], 0, cPorts - 1,
     1589                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    15661590                    paLedDevType = &maStorageDevType[iLedSata];
    15671591                    break;
     
    15751599                     * IDE (update this when the main interface changes)
    15761600                     */
    1577                     hrc = BusMgr->assignPciDevice("piix3ide", pCtlInst);                               H();
     1601                    hrc = BusMgr->assignPciDevice("piix3ide", pCtlInst);                    H();
    15781602                    InsertConfigString(pCfg,   "Type", controllerString(enmCtrlType));
    15791603                    /* Attach the status driver */
    15801604                    Assert(cLedIde >= 4);
    1581                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedIde], 0, 3, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1605                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedIde], 0, 3,
     1606                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    15821607                    paLedDevType = &maStorageDevType[iLedIde];
    15831608
     
    16021627                    /* Attach the status driver */
    16031628                    Assert(cLedFloppy >= 2);
    1604                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedFloppy], 0, 1, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1629                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedFloppy], 0, 1,
     1630                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    16051631                    paLedDevType = &maStorageDevType[iLedFloppy];
    16061632                    break;
     
    16091635                case StorageControllerType_LsiLogicSas:
    16101636                {
    1611                     hrc = BusMgr->assignPciDevice("lsilogicsas", pCtlInst);                               H();
     1637                    hrc = BusMgr->assignPciDevice("lsilogicsas", pCtlInst);                 H();
    16121638
    16131639                    InsertConfigString(pCfg,  "ControllerType", "SAS1068");
     
    16161642                    /* Attach the status driver */
    16171643                    Assert(cLedSas >= 8);
    1618                     attachStatusDriver(pCtlInst, &mapStorageLeds[iLedSas], 0, 7, &mapMediumAttachments, pszCtrlDev, ulInstance);
     1644                    attachStatusDriver(pCtlInst, &mapStorageLeds[iLedSas], 0, 7,
     1645                                       &mapMediumAttachments, pszCtrlDev, ulInstance);
    16191646                    paLedDevType = &maStorageDevType[iLedSas];
    16201647                    break;
     
    16281655            com::SafeIfaceArray<IMediumAttachment> atts;
    16291656            hrc = pMachine->GetMediumAttachmentsOfController(controllerName.raw(),
    1630                                                             ComSafeArrayAsOutParam(atts)); H();
     1657                                                            ComSafeArrayAsOutParam(atts));  H();
    16311658
    16321659            /* Builtin I/O cache - per device setting. */
    16331660            BOOL fBuiltinIoCache = true;
    1634             hrc = pMachine->COMGETTER(IoCacheEnabled)(&fBuiltinIoCache);                                  H();
     1661            hrc = pMachine->COMGETTER(IoCacheEnabled)(&fBuiltinIoCache);                    H();
    16351662
    16361663
     
    17571784#endif
    17581785            PciBusAddress PciAddr = PciBusAddress(0, iPciDeviceNo, 0);
    1759             hrc = BusMgr->assignPciDevice(pszAdapterName, pInst, PciAddr);                               H();
     1786            hrc = BusMgr->assignPciDevice(pszAdapterName, pInst, PciAddr);                  H();
    17601787
    17611788            InsertConfigNode(pInst, "Config", &pCfg);
     
    19902017        InsertConfigNode(pInst,    "Config", &pCfg);
    19912018        InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
    1992         hrc = BusMgr->assignPciDevice("VMMDev", pInst);                               H();
     2019        hrc = BusMgr->assignPciDevice("VMMDev", pInst);                                     H();
    19932020
    19942021        Bstr hwVersion;
     
    19982025            InsertConfigInteger(pCfg, "HeapEnabled", 0);
    19992026        Bstr snapshotFolder;
    2000         hrc = pMachine->COMGETTER(SnapshotFolder)(snapshotFolder.asOutParam());            H();
     2027        hrc = pMachine->COMGETTER(SnapshotFolder)(snapshotFolder.asOutParam());             H();
    20012028        InsertConfigString(pCfg, "GuestCoreDumpDir", snapshotFolder);
    20022029
     
    20472074                    InsertConfigNode(pDev,     "0", &pInst);
    20482075                    InsertConfigInteger(pInst, "Trusted",          1); /* boolean */
    2049                     hrc = BusMgr->assignPciDevice("ichac97", pInst);                               H();
     2076                    hrc = BusMgr->assignPciDevice("ichac97", pInst);                        H();
    20502077                    InsertConfigNode(pInst,    "Config", &pCfg);
    20512078                    break;
     
    20712098                    InsertConfigNode(pDev,     "0", &pInst);
    20722099                    InsertConfigInteger(pInst, "Trusted",          1); /* boolean */
    2073                     hrc = BusMgr->assignPciDevice("hda", pInst);                               H();
     2100                    hrc = BusMgr->assignPciDevice("hda", pInst);                            H();
    20742101                    InsertConfigNode(pInst,    "Config", &pCfg);
    20752102                }
     
    32243251                // would be to discard the VM state...
    32253252                MediumState_T mediumState;
    3226                 hrc = pMedium->RefreshState(&mediumState);                              H();
     3253                hrc = pMedium->RefreshState(&mediumState);                                  H();
    32273254                if (mediumState == MediumState_Inaccessible)
    32283255                {
    32293256                    Bstr loc;
    3230                     hrc = pMedium->COMGETTER(Location)(loc.asOutParam());               H();
     3257                    hrc = pMedium->COMGETTER(Location)(loc.asOutParam());                   H();
    32313258                    setVMRuntimeErrorCallbackF(VMR3GetVM(mpUVM),
    32323259                                               this,
     
    33903417                    hrc = pMedium->GetProperties(NULL,
    33913418                                                ComSafeArrayAsOutParam(aNames),
    3392                                                 ComSafeArrayAsOutParam(aValues));          H();
     3419                                                ComSafeArrayAsOutParam(aValues));           H();
    33933420
    33943421                    if (aNames.size() != 0)
     
    34883515
    34893516        ComPtr<IVirtualBox> virtualBox;
    3490         hrc = pMachine->COMGETTER(Parent)(virtualBox.asOutParam());                 H();
     3517        hrc = pMachine->COMGETTER(Parent)(virtualBox.asOutParam());                         H();
    34913518
    34923519        ComPtr<IHost> host;
    3493         hrc = virtualBox->COMGETTER(Host)(host.asOutParam());                       H();
     3520        hrc = virtualBox->COMGETTER(Host)(host.asOutParam());                               H();
    34943521
    34953522        BOOL fSniffer;
    3496         hrc = aNetworkAdapter->COMGETTER(TraceEnabled)(&fSniffer);                  H();
     3523        hrc = aNetworkAdapter->COMGETTER(TraceEnabled)(&fSniffer);                          H();
    34973524
    34983525        NetworkAdapterPromiscModePolicy_T enmPromiscModePolicy;
    3499         hrc = aNetworkAdapter->COMGETTER(PromiscModePolicy)(&enmPromiscModePolicy); H();
     3526        hrc = aNetworkAdapter->COMGETTER(PromiscModePolicy)(&enmPromiscModePolicy);         H();
    35003527        const char *pszPromiscuousGuestPolicy;
    35013528        switch (enmPromiscModePolicy)
     
    37973824//                     * the attachment), calling Detach here will cause a deadlock.
    37983825//                     * See #4750.
    3799 //                     * hrc = aNetworkAdapter->Detach();                        H();
     3826//                     * hrc = aNetworkAdapter->Detach();                                   H();
    38003827//                     */
    38013828//                     return VMSetError(pVM, VERR_INTERNAL_ERROR, RT_SRC_POS,
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