VirtualBox

Ignore:
Timestamp:
Mar 11, 2009 9:56:29 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
44161
Message:

Main: Rework storage controller handling to allow an arbitrary number of different storage controllers and remove code duplication:

  • XML format changed
  • New StorageController class
  • Removed SATAController (obsolete)
  • Removed the IDE controller code from BIOSSettings, handled in StorageController now
Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h

    r17475 r17669  
    409409    }
    410410
    411     QString toString (KIDEControllerType t) const
    412     {
    413         AssertMsg (!mIDEControllerTypes.value (t).isNull(), ("No text for %d", t));
    414         return mIDEControllerTypes.value (t);
    415     }
    416 
    417     KIDEControllerType toIDEControllerType (const QString &s) const
    418     {
    419         QULongStringHash::const_iterator it =
    420             qFind (mIDEControllerTypes.begin(), mIDEControllerTypes.end(), s);
    421         AssertMsg (it != mIDEControllerTypes.end(), ("No value for {%s}",
    422                                                      s.toLatin1().constData()));
    423         return KIDEControllerType (it.key());
     411    QString toString (KStorageControllerType t) const
     412    {
     413        AssertMsg (!mStorageControllerTypes.value (t).isNull(), ("No text for %d", t));
     414        return mStorageControllerTypes.value (t);
     415    }
     416
     417    KStorageControllerType toIDEControllerType (const QString &s) const
     418    {
     419        QULongStringHash::const_iterator it =
     420            qFind (mStorageControllerTypes.begin(), mStorageControllerTypes.end(), s);
     421        AssertMsg (it != mStorageControllerTypes.end(), ("No value for {%s}",
     422                                                         s.toLatin1().constData()));
     423        return KStorageControllerType (it.key());
    424424    }
    425425
     
    877877    QULongStringHash mNetworkAttachmentTypes;
    878878    QULongStringHash mClipboardTypes;
    879     QULongStringHash mIDEControllerTypes;
     879    QULongStringHash mStorageControllerTypes;
    880880    QULongStringHash mUSBDeviceStates;
    881881
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMInformationDlg.h

    r12695 r17669  
    7272
    7373    QString formatValue (const QString &aValueName, const QString &aValue, int aMaxSize);
    74     QString formatHardDisk (KStorageBus aBus, LONG aChannel, LONG aDevice, const QString &aBelongsTo);
     74    QString formatHardDisk (const QString &ctlName, LONG aChannel, LONG aDevice, const QString &aBelongsTo);
    7575    QString formatAdapter (ULONG aSlot, const QString &aBelongsTo);
    7676
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r17340 r17669  
    548548        QApplication::postEvent (mView,
    549549            new NetworkAdapterChangeEvent (aNetworkAdapter));
     550        return S_OK;
     551    }
     552
     553    STDMETHOD(OnStorageControllerChange) ()
     554    {
     555        /* @todo */
     556        //QApplication::postEvent (mView,
     557        //    new StorageControllerChangeEvent ());
    550558        return S_OK;
    551559    }
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp

    r17553 r17669  
    19071907        {
    19081908            CHardDisk hd = hda->GetHardDisk();
     1909            const QString ctlName = hda->GetController();
     1910            CStorageController ctl = cmachine.GetStorageControllerByName(ctlName);
     1911
    19091912            data += QString ("<br><nobr><b>%1 %2</b>: %3</nobr>")
    1910                 .arg (vboxGlobal().toString (hda->GetBus(), hda->GetChannel()))
    1911                 .arg (vboxGlobal().toString (hda->GetBus(), hda->GetChannel(),
     1913                .arg (vboxGlobal().toString (ctl.GetBus(), hda->GetPort()))
     1914                .arg (vboxGlobal().toString (ctl.GetBus(), hda->GetPort(),
    19121915                                             hda->GetDevice()))
    19131916                .arg (QDir::convertSeparators (hd.GetLocation()));
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp

    r17553 r17669  
    11161116            break;
    11171117        }
     1118        case KStorageBus_SCSI:
     1119        {
     1120            channel = mStorageBusChannels [2].arg (aChannel);
     1121            break;
     1122        }
    11181123        default:
    11191124            AssertFailedBreak();
     
    11451150        }
    11461151        case KStorageBus_SATA:
     1152        case KStorageBus_SCSI:
    11471153        {
    11481154            /// @todo use regexp to properly extract the %1 text
     
    11881194        }
    11891195        case KStorageBus_SATA:
     1196        case KStorageBus_SCSI:
    11901197        {
    11911198            AssertMsgBreak (aDevice == 0, ("Invalid device %d\n", aDevice));
     
    12271234        }
    12281235        case KStorageBus_SATA:
     1236        case KStorageBus_SCSI:
    12291237        {
    12301238            AssertMsgBreak(aDevice.isEmpty(), ("Invalid device {%s}\n", aDevice.toLatin1().constData()));
     
    12601268        }
    12611269        case KStorageBus_SATA:
     1270        case KStorageBus_SCSI:
    12621271        {
    12631272            /* we only have one SATA device so far which is always zero */
     
    16531662            if (hda.isOk())
    16541663            {
    1655                 KStorageBus bus = hda.GetBus();
    1656                 LONG channel = hda.GetChannel();
     1664                const QString controller = hda.GetController();
     1665                KStorageBus bus;
     1666
     1667                CStorageController ctrl = aMachine.GetStorageControllerByName(controller);
     1668                bus = ctrl.GetBus();
     1669
     1670                LONG port   = hda.GetPort();
    16571671                LONG device = hda.GetDevice();
    16581672                hardDisks += QString (sSectionItemTpl2)
    1659                     .arg (toFullString (bus, channel, device))
     1673                    .arg (toFullString (bus, port, device))
    16601674                    .arg (details (hd, aIsNewVM));
    16611675                ++ rows;
     
    28382852    mStorageBuses [KStorageBus_IDE] =   tr ("IDE", "StorageBus");
    28392853    mStorageBuses [KStorageBus_SATA] =  tr ("SATA", "StorageBus");
     2854    mStorageBuses [KStorageBus_SCSI] =  tr ("SCSI", "StorageBus");
    28402855
    28412856    mStorageBusChannels [0] =   tr ("Primary", "StorageBusChannel");
     
    29152930        tr ("Bidirectional", "ClipboardType");
    29162931
    2917     mIDEControllerTypes [KIDEControllerType_PIIX3] =
    2918         tr ("PIIX3", "IDEControllerType");
    2919     mIDEControllerTypes [KIDEControllerType_PIIX4] =
    2920         tr ("PIIX4", "IDEControllerType");
    2921     mIDEControllerTypes [KIDEControllerType_ICH6] =
    2922         tr ("ICH6", "IDEControllerType");
     2932    mStorageControllerTypes [KStorageControllerType_PIIX3] =
     2933        tr ("PIIX3", "StorageControllerType");
     2934    mStorageControllerTypes [KStorageControllerType_PIIX4] =
     2935        tr ("PIIX4", "StorageControllerType");
     2936    mStorageControllerTypes [KStorageControllerType_ICH6] =
     2937        tr ("ICH6", "StorageControllerType");
     2938    /* Leave them out for now because this is used for the IDE controller
     2939     * setting in the general page and we do not want that the other controllers
     2940     * show up there.
     2941     */
     2942#if 0
     2943    mStorageControllerTypes [KStorageControllerType_IntelAhci] =
     2944        tr ("AHCI", "StorageControllerType");
     2945    mStorageControllerTypes [KStorageControllerType_LsiLogic] =
     2946        tr ("Lsilogic", "StorageControllerType");
     2947    mStorageControllerTypes [KStorageControllerType_BusLogic] =
     2948        tr ("BusLogic", "StorageControllerType");
     2949#endif
    29232950
    29242951    mUSBDeviceStates [KUSBDeviceState_NotSupported] =
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxImportApplianceWgt.cpp

    r17160 r17669  
    443443                {
    444444                    QComboBox *e = new QComboBox (aParent);
    445                     e->addItem (vboxGlobal().toString (KIDEControllerType_PIIX3), "PIIX3");
    446                     e->addItem (vboxGlobal().toString (KIDEControllerType_PIIX4), "PIIX4");
    447                     e->addItem (vboxGlobal().toString (KIDEControllerType_ICH6),  "ICH6");
     445                    e->addItem (vboxGlobal().toString (KStorageControllerType_PIIX3), "PIIX3");
     446                    e->addItem (vboxGlobal().toString (KStorageControllerType_PIIX4), "PIIX4");
     447                    e->addItem (vboxGlobal().toString (KStorageControllerType_ICH6),  "ICH6");
    448448                    editor = e;
    449449                    break;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxMediaManagerDlg.cpp

    r16867 r17669  
    12381238                if (hda.GetHardDisk().GetId() == aMedium.id())
    12391239                {
    1240                     machine.DetachHardDisk(hda.GetBus(),
    1241                                            hda.GetChannel(),
     1240                    machine.DetachHardDisk(hda.GetController(),
     1241                                           hda.GetPort(),
    12421242                                           hda.GetDevice());
    12431243                    if (!machine.isOk())
    12441244                    {
     1245                        CStorageController ctl = machine.GetStorageControllerByName(hda.GetController());
     1246
    12451247                        vboxProblem().cannotDetachHardDisk (
    1246                             this, machine, aMedium.location(), hda.GetBus(),
    1247                             hda.GetChannel(), hda.GetDevice());
     1248                            this, machine, aMedium.location(), ctl.GetBus(),
     1249                            hda.GetPort(), hda.GetDevice());
    12481250                        success = false;
    12491251                        break;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxNewVMWzd.cpp

    r16867 r17669  
    352352        {
    353353            CMachine m = session.GetMachine();
    354             m.AttachHardDisk(mHDCombo->id(), KStorageBus_IDE, 0, 0);
     354            m.AttachHardDisk(mHDCombo->id(), QString("IDE"), 0, 0);
    355355            if (m.isOk())
    356356            {
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxSelectorWnd.cpp

    r17450 r17669  
    901901            {
    902902                CHardDiskAttachment hda = vec [i];
    903                 machine.DetachHardDisk(hda.GetBus(), hda.GetChannel(), hda.GetDevice());
     903                const QString ctlName = hda.GetController();
     904
     905                machine.DetachHardDisk(ctlName, hda.GetPort(), hda.GetDevice());
    904906                if (!machine.isOk())
     907                {
     908                    CStorageController ctl = machine.GetStorageControllerByName(ctlName);
    905909                    vboxProblem().cannotDetachHardDisk (this, machine,
    906910                        vboxGlobal().getMedium (CMedium (hda.GetHardDisk())).location(),
    907                         hda.GetBus(), hda.GetChannel(), hda.GetDevice());
     911                        ctl.GetBus(), hda.GetPort(), hda.GetDevice());
     912                }
    908913            }
    909914            /* Commit changes */
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMInformationDlg.cpp

    r16867 r17669  
    463463    {
    464464        QString hdStat;
     465        const QString ideCtl = QString("IDE");
     466        const QString sataCtl = QString("SATA");
    465467
    466468        result += hdrRow.arg (":/hd_16px.png").arg (tr ("Hard Disk Statistics"));
    467469
    468470        /* IDE Hard Disk (Primary Master) */
    469         if (!m.GetHardDisk(KStorageBus_IDE, 0, 0).isNull())
    470         {
    471             hdStat += formatHardDisk (KStorageBus_IDE, 0, 0, "IDE00");
     471        if (!m.GetHardDisk(ideCtl, 0, 0).isNull())
     472        {
     473            hdStat += formatHardDisk (ideCtl, 0, 0, "IDE00");
    472474            hdStat += paragraph;
    473475        }
    474476
    475477        /* IDE Hard Disk (Primary Slave) */
    476         if (!m.GetHardDisk(KStorageBus_IDE, 0, 1).isNull())
    477         {
    478             hdStat += formatHardDisk (KStorageBus_IDE, 0, 1, "IDE01");
     478        if (!m.GetHardDisk(ideCtl, 0, 1).isNull())
     479        {
     480            hdStat += formatHardDisk (ideCtl, 0, 1, "IDE01");
    479481            hdStat += paragraph;
    480482        }
    481483
    482484        /* IDE Hard Disk (Secondary Slave) */
    483         if (!m.GetHardDisk(KStorageBus_IDE, 1, 1).isNull())
    484         {
    485             hdStat += formatHardDisk (KStorageBus_IDE, 1, 1, "IDE11");
     485        if (!m.GetHardDisk(ideCtl, 1, 1).isNull())
     486        {
     487            hdStat += formatHardDisk (ideCtl, 1, 1, "IDE11");
    486488            hdStat += paragraph;
    487489        }
     
    490492        for (int i = 0; i < 30; ++ i)
    491493        {
    492             if (!m.GetHardDisk(KStorageBus_SATA, i, 0).isNull())
     494            if (!m.GetHardDisk(sataCtl, i, 0).isNull())
    493495            {
    494                 hdStat += formatHardDisk (KStorageBus_SATA, i, 0,
     496                hdStat += formatHardDisk (sataCtl, i, 0,
    495497                                          QString ("SATA%1").arg (i));
    496498                hdStat += paragraph;
     
    509511        /* CD/DVD-ROM (Secondary Master) */
    510512        result += hdrRow.arg (":/cd_16px.png").arg (tr ("CD/DVD-ROM Statistics"));
    511         result += formatHardDisk (KStorageBus_IDE, 1, 0, "IDE10");
     513        result += formatHardDisk (ideCtl, 1, 0, "IDE10");
    512514        result += paragraph;
    513515    }
     
    566568}
    567569
    568 QString VBoxVMInformationDlg::formatHardDisk (KStorageBus aBus,
     570QString VBoxVMInformationDlg::formatHardDisk (const QString &ctlName,
    569571                                              LONG aChannel,
    570572                                              LONG aDevice,
     
    574576        return QString::null;
    575577
    576     CHardDisk hd = mSession.GetMachine().GetHardDisk(aBus, aChannel, aDevice);
     578    CStorageController ctl = mSession.GetMachine().GetStorageControllerByName(ctlName);
     579
     580    CHardDisk hd = mSession.GetMachine().GetHardDisk(ctlName, aChannel, aDevice);
    577581    QString header = "<tr><td></td><td colspan=2><nobr><u>%1</u></nobr></td></tr>";
    578     QString name = vboxGlobal().toFullString (aBus, aChannel, aDevice);
     582    QString name = vboxGlobal().toFullString (ctl.GetBus(), aChannel, aDevice);
    579583    QString result = hd.isNull() ? QString::null : header.arg (name);
    580584    result += composeArticle (aBelongsTo);
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp

    r17160 r17669  
    237237
    238238    /* IDE controller type */
     239    const QString ideName = QString("IDE");
     240    CStorageController ideCtl = aMachine.GetStorageControllerByName(ideName);
    239241    mCbIDEController->setCurrentIndex (mCbIDEController->
    240         findText (vboxGlobal().toString (biosSettings.GetIDEControllerType())));
     242        findText (vboxGlobal().toString (ideCtl.GetControllerType())));
    241243
    242244    /* Other features */
     
    334336
    335337    /* IDE controller type */
    336     biosSettings.SetIDEControllerType (vboxGlobal().toIDEControllerType (mCbIDEController->currentText()));
     338    const QString ideName = QString("IDE");
     339    CStorageController ideCtl = mMachine.GetStorageControllerByName(ideName);
     340    ideCtl.SetControllerType (vboxGlobal().toIDEControllerType (mCbIDEController->currentText()));
    337341
    338342    /* Other features */
     
    459463
    460464    /* IDE Controller Type */
    461     mCbIDEController->setItemText (0, vboxGlobal().toString (KIDEControllerType_PIIX3));
    462     mCbIDEController->setItemText (1, vboxGlobal().toString (KIDEControllerType_PIIX4));
    463     mCbIDEController->setItemText (2, vboxGlobal().toString (KIDEControllerType_ICH6));
     465    mCbIDEController->setItemText (0, vboxGlobal().toString (KStorageControllerType_PIIX3));
     466    mCbIDEController->setItemText (1, vboxGlobal().toString (KStorageControllerType_PIIX4));
     467    mCbIDEController->setItemText (2, vboxGlobal().toString (KStorageControllerType_ICH6));
    464468
    465469    /* Path selector */
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsHD.cpp

    r16867 r17669  
    651651    HDSettings::instance()->setMachine (mMachine);
    652652
    653     CSATAController ctl = mMachine.GetSATAController();
    654     /* Hide the SATA check box if the SATA controller is not available
    655      * (i.e. in VirtualBox OSE) */
    656     if (ctl.isNull())
    657         mSATACheck->setHidden (true);
    658     else
    659         mSATACheck->setChecked (ctl.GetEnabled());
     653    const QString sataName = QString("SATA");
     654    CStorageController sataCtl = mMachine.GetStorageControllerByName(sataName);
     655
     656    mSATACheck->setChecked (!sataCtl.isNull());
     657
    660658    onSATACheckToggled (mSATACheck->checkState());
    661659    onShowDiffsCheckToggled (mShowDiffsCheck->checkState());
     
    666664    {
    667665        CHardDiskAttachment hda = vec [i];
    668         SlotValue slot (hda.GetBus(), hda.GetChannel(), hda.GetDevice());
     666        CStorageController  ctl = mMachine.GetStorageControllerByName(hda.GetController());
     667
     668        SlotValue slot (ctl.GetBus(), hda.GetPort(), hda.GetDevice());
    669669        DiskValue disk (hda.GetHardDisk().GetId());
    670670        mModel->addItem (slot, disk);
     
    682682void VBoxVMSettingsHD::putBackTo()
    683683{
    684     CSATAController ctl = mMachine.GetSATAController();
    685     if (!ctl.isNull())
    686         ctl.SetEnabled (mSATACheck->isChecked());
     684    const QString sataName = QString("SATA");
     685    const QString ideName = QString("IDE");
    687686
    688687    /* Detach all attached Hard Disks */
     
    691690    {
    692691        CHardDiskAttachment hda = vec [i];
    693         mMachine.DetachHardDisk(hda.GetBus(), hda.GetChannel(), hda.GetDevice());
     692
     693        mMachine.DetachHardDisk(hda.GetController(), hda.GetPort(), hda.GetDevice());
    694694
    695695        /* [dsen] check this */
    696696        if (!mMachine.isOk())
     697        {
     698            CStorageController ctl = mMachine.GetStorageControllerByName(hda.GetController());
    697699            vboxProblem().cannotDetachHardDisk (this, mMachine,
    698700                vboxGlobal().getMedium (CMedium (hda.GetHardDisk())).location(),
    699                 hda.GetBus(), hda.GetChannel(), hda.GetDevice());
    700     }
     701                ctl.GetBus(), hda.GetPort(), hda.GetDevice());
     702        }
     703    }
     704
     705    /* Check the SATA setting. */
     706    CStorageController sataCtl = mMachine.GetStorageControllerByName(sataName);
     707
     708    if (mSATACheck->isChecked() && sataCtl.isNull())
     709    {
     710        /* The SATA controller is enabled and was disabled previously. */
     711        mMachine.AddStorageController(sataName, KStorageBus_SATA);
     712        sataCtl = mMachine.GetStorageControllerByName(sataName);
     713        sataCtl.SetControllerType(KStorageControllerType_IntelAhci);
     714    }
     715    else if (!mSATACheck->isChecked() && !sataCtl.isNull())
     716    {
     717        /* The SATA controller is disabled now but was enabled previously. */
     718        sataCtl = NULL;
     719        mMachine.RemoveStorageController(sataName);
     720    }
     721
     722    /* Set to the maximum because we get errors if there are more hard disks
     723     * than currently activated ports. */
     724    if (!sataCtl.isNull())
     725        sataCtl.SetPortCount (30);
    701726
    702727    /* Attach all listed Hard Disks */
     
    706731    {
    707732        if (list [i].slot.bus == KStorageBus_SATA)
     733        {
    708734            maxSATAPort = maxSATAPort < (list [i].slot.channel + 1) ?
    709735                          (list [i].slot.channel + 1) : maxSATAPort;
    710         mMachine.AttachHardDisk(list [i].disk.id,
    711             list [i].slot.bus, list [i].slot.channel, list [i].slot.device);
     736
     737            mMachine.AttachHardDisk(list [i].disk.id,
     738                sataName, list [i].slot.channel, list [i].slot.device);
     739        }
     740        else if (list [i].slot.bus == KStorageBus_IDE)
     741        {
     742            mMachine.AttachHardDisk(list [i].disk.id,
     743                ideName, list [i].slot.channel, list [i].slot.device);
     744        }
    712745
    713746        /* [dsen] check this */
     
    719752    }
    720753
    721     if (!ctl.isNull())
    722         ctl.SetPortCount (maxSATAPort);
     754    if (!sataCtl.isNull())
     755        sataCtl.SetPortCount (maxSATAPort);
    723756}
    724757
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