Changeset 24250 in vbox
- Timestamp:
- Nov 2, 2009 1:00:58 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
-
include/VBox/settings.h (modified) (2 diffs)
-
src/VBox/Main/ConsoleImpl.cpp (modified) (1 diff)
-
src/VBox/Main/ConsoleImpl2.cpp (modified) (3 diffs)
-
src/VBox/Main/MachineImpl.cpp (modified) (4 diffs)
-
src/VBox/Main/StorageControllerImpl.cpp (modified) (4 diffs)
-
src/VBox/Main/idl/VirtualBox.xidl (modified) (3 diffs)
-
src/VBox/Main/include/ConsoleImpl.h (modified) (1 diff)
-
src/VBox/Main/include/MachineImpl.h (modified) (1 diff)
-
src/VBox/Main/include/StorageControllerImpl.h (modified) (5 diffs)
-
src/VBox/Main/xml/Settings.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/settings.h
r24136 r24250 477 477 controllerType(StorageControllerType_PIIX3), 478 478 ulPortCount(2), 479 ulInstance(0), 479 480 lIDE0MasterEmulationPort(0), 480 481 lIDE0SlaveEmulationPort(0), … … 487 488 StorageControllerType_T controllerType; 488 489 uint32_t ulPortCount; 490 uint32_t ulInstance; 489 491 490 492 // only for when controllerType == StorageControllerType_IntelAhci: -
trunk/src/VBox/Main/ConsoleImpl.cpp
r24191 r24250 2655 2655 default: 2656 2656 return NULL; 2657 } 2658 } 2659 2660 void Console::controllerDevToBool(const char *pszCtrlDev, bool *afBool) 2661 { 2662 if (!strcmp("lsilogicscsi", pszCtrlDev)) 2663 { 2664 afBool[StorageControllerType_LsiLogic] = true; 2665 } 2666 else if (!strcmp("buslogic", pszCtrlDev)) 2667 { 2668 afBool[StorageControllerType_BusLogic] = true; 2669 } 2670 else if (!strcmp("ahci", pszCtrlDev)) 2671 { 2672 afBool[StorageControllerType_IntelAhci] = true; 2673 } 2674 else if (!strcmp("piix3ide", pszCtrlDev)) 2675 { 2676 afBool[StorageControllerType_PIIX3] = true; 2677 afBool[StorageControllerType_PIIX4] = true; 2678 afBool[StorageControllerType_ICH6] = true; 2679 } 2680 else if (!strcmp("i82078", pszCtrlDev)) 2681 { 2682 afBool[StorageControllerType_I82078] = true; 2657 2683 } 2658 2684 } -
trunk/src/VBox/Main/ConsoleImpl2.cpp
r24159 r24250 766 766 */ 767 767 com::SafeIfaceArray<IStorageController> ctrls; 768 bool afNodePresent[StorageControllerType_I82078 + 1] = {}; 768 769 hrc = pMachine->COMGETTER(StorageControllers)(ComSafeArrayAsOutParam(ctrls)); H(); 769 770 … … 775 776 bool fSCSI = false; 776 777 Bstr controllerName; 778 ULONG ulInstance; 777 779 778 780 rc = ctrls[i]->COMGETTER(ControllerType)(&enmCtrlType); H(); 779 781 rc = ctrls[i]->COMGETTER(Bus)(&enmBus); H(); 780 782 rc = ctrls[i]->COMGETTER(Name)(controllerName.asOutParam()); H(); 783 rc = ctrls[i]->COMGETTER(Instance)(&ulInstance); H(); 781 784 782 785 const char *pszCtrlDev = pConsole->controllerTypeToDev(enmCtrlType); 783 786 784 rc = CFGMR3InsertNode(pDevices, pszCtrlDev, &pDev); RC_CHECK(); 785 /** @todo support multiple instances of a controller */ 786 rc = CFGMR3InsertNode(pDev, "0", &pCtlInst); RC_CHECK(); 787 if (!afNodePresent[enmCtrlType]) 788 { 789 rc = CFGMR3InsertNode(pDevices, pszCtrlDev, &pDev); RC_CHECK(); 790 pConsole->controllerDevToBool(pszCtrlDev, afNodePresent); 791 } 792 else 793 { 794 pDev = CFGMR3GetChildF(pDevices, pszCtrlDev); 795 if (!pDev) 796 rc = VERR_CFGM_CHILD_NOT_FOUND; RC_CHECK(); 797 } 798 rc = CFGMR3InsertNodeF(pDev, &pCtlInst, "%u", ulInstance); RC_CHECK(); 787 799 788 800 switch (enmCtrlType) … … 924 936 AssertMsgFailedReturn(("invalid storage controller type: %d\n", enmCtrlType), VERR_GENERAL_FAILURE); 925 937 } 926 927 /* At the moment we only support one controller per type. So the instance id is always 0. */928 rc = ctrls[i]->COMSETTER(Instance)(0); H();929 938 930 939 /* Attach the hard disks. */ -
trunk/src/VBox/Main/MachineImpl.cpp
r24214 r24250 3593 3593 3594 3594 ctrl.createObject(); 3595 rc = ctrl->init (this, aName, aConnectionType); 3595 3596 /* get a new instance number for the storage controller */ 3597 ULONG ulInstance = 0; 3598 for (StorageControllerList::const_iterator it = mStorageControllers->begin(); 3599 it != mStorageControllers->end(); 3600 ++it) 3601 { 3602 if ((*it)->storageBus() == aConnectionType) 3603 { 3604 ULONG ulCurInst = (*it)->instance(); 3605 3606 if (ulCurInst > ulInstance) 3607 ulInstance = ulCurInst; 3608 } 3609 } 3610 ulInstance++; 3611 3612 rc = ctrl->init(this, aName, aConnectionType, ulInstance); 3596 3613 CheckComRCReturnRC(rc); 3597 3614 … … 3625 3642 3626 3643 return rc; 3644 } 3645 3646 STDMETHODIMP Machine::GetStorageControllerByInstance(ULONG aInstance, 3647 IStorageController **aStorageController) 3648 { 3649 AutoCaller autoCaller(this); 3650 CheckComRCReturnRC(autoCaller.rc()); 3651 3652 AutoReadLock alock(this); 3653 3654 for (StorageControllerList::const_iterator it = mStorageControllers->begin(); 3655 it != mStorageControllers->end(); 3656 ++it) 3657 { 3658 if ((*it)->instance() == aInstance) 3659 { 3660 (*it).queryInterfaceTo(aStorageController); 3661 return S_OK; 3662 } 3663 } 3664 3665 return setError(VBOX_E_OBJECT_NOT_FOUND, 3666 tr("Could not find a storage controller with instance number '%lu'"), 3667 aInstance); 3627 3668 } 3628 3669 … … 5506 5547 rc = pCtl->init(this, 5507 5548 ctlData.strName, 5508 ctlData.storageBus); 5549 ctlData.storageBus, 5550 ctlData.ulInstance); 5509 5551 CheckComRCReturnRC (rc); 5510 5552 … … 6455 6497 ctl.controllerType = pCtl->controllerType(); 6456 6498 ctl.storageBus = pCtl->storageBus(); 6499 ctl.ulInstance = pCtl->instance(); 6457 6500 6458 6501 /* Save the port count. */ -
trunk/src/VBox/Main/StorageControllerImpl.cpp
r23223 r24250 62 62 * @param aParent Pointer to our parent object. 63 63 * @param aName Name of the storage controller. 64 * @param aInstance Instance number of the storage controller. 64 65 */ 65 66 HRESULT StorageController::init(Machine *aParent, 66 67 const Utf8Str &aName, 67 StorageBus_T aStorageBus) 68 { 69 LogFlowThisFunc(("aParent=%p aName=\"%s\"\n", aParent, aName.raw())); 68 StorageBus_T aStorageBus, 69 ULONG aInstance) 70 { 71 LogFlowThisFunc(("aParent=%p aName=\"%s\" aInstance=%u\n", 72 aParent, aName.raw(), aInstance)); 70 73 71 74 ComAssertRet(aParent && !aName.isEmpty(), E_INVALIDARG); … … 89 92 90 93 mData->strName = aName; 94 mData->mInstance = aInstance; 91 95 mData->mStorageBus = aStorageBus; 92 96 … … 501 505 AutoReadLock alock(this); 502 506 503 *aInstance = m Instance;507 *aInstance = mData->mInstance; 504 508 505 509 return S_OK; … … 515 519 AutoWriteLock alock(this); 516 520 517 m Instance = aInstance;521 mData->mInstance = aInstance; 518 522 519 523 return S_OK; -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r24136 r24250 4059 4059 <interface 4060 4060 name="IMachine" extends="$unknown" 4061 uuid=" 37642E74-969A-4590-BD52-390E541F904D"4061 uuid="59080235-41e1-41ca-aa28-33f6992d1646" 4062 4062 wsmap="managed" 4063 4063 > … … 4931 4931 @a name identifies the controller for subsequent calls such as 4932 4932 <link to="#getStorageControllerByName" />, 4933 <link to="#getStorageControllerByInstance" />, 4933 4934 <link to="#removeStorageController" />, 4934 4935 <link to="#attachDevice" /> or <link to="#mountMedium" />. … … 4961 4962 </method> 4962 4963 4963 <method name="removeStorageController"> 4964 <method name="getStorageControllerByInstance" const="yes"> 4965 <desc> 4966 Returns a storage controller with the given instance number. 4967 4968 <result name="VBOX_E_OBJECT_NOT_FOUND"> 4969 A storage controller with given instance number doesn't exist. 4970 </result> 4971 </desc> 4972 <param name="instance" type="unsigned long" dir="in"/> 4973 <param name="storageController" type="IStorageController" dir="return"/> 4974 </method> 4975 4976 <method name="removeStorageController"> 4964 4977 <desc> 4965 4978 Removes a storage controller from the machine. -
trunk/src/VBox/Main/include/ConsoleImpl.h
r23879 r24250 443 443 const char *pszFormat, bool fPassthrough); 444 444 const char *controllerTypeToDev(StorageControllerType_T enmCtrlType); 445 void controllerDevToBool(const char *pszCtrlDev, bool *afBool); 445 446 HRESULT convertBusPortDeviceToLun(StorageBus_T enmBus, LONG port, LONG device, unsigned &uLun); 446 447 HRESULT doMediumChange(IMediumAttachment *aMediumAttachment); -
trunk/src/VBox/Main/include/MachineImpl.h
r24196 r24250 617 617 STDMETHOD(RemoveStorageController(IN_BSTR aName)); 618 618 STDMETHOD(GetStorageControllerByName(IN_BSTR aName, IStorageController **storageController)); 619 STDMETHOD(GetStorageControllerByInstance(ULONG aInstance, IStorageController **storageController)); 619 620 STDMETHOD(COMGETTER(FirmwareType)) (FirmwareType_T *aFirmware); 620 621 STDMETHOD(COMSETTER(FirmwareType)) (FirmwareType_T aFirmware); -
trunk/src/VBox/Main/include/StorageControllerImpl.h
r23223 r24250 44 44 Data() : mStorageBus (StorageBus_IDE), 45 45 mStorageControllerType (StorageControllerType_PIIX4), 46 mInstance (0), 46 47 mPortCount (2), 47 48 mPortIde0Master (0), … … 68 69 /** Type of the Storage controller. */ 69 70 StorageControllerType_T mStorageControllerType; 71 /** Instance number of the storage controller. */ 72 ULONG mInstance; 70 73 /** Number of usable ports. */ 71 74 ULONG mPortCount; … … 104 107 HRESULT init(Machine *aParent, 105 108 const Utf8Str &aName, 106 StorageBus_T aBus); 109 StorageBus_T aBus, 110 ULONG aInstance); 107 111 HRESULT init(Machine *aParent, 108 112 StorageController *aThat, … … 134 138 StorageControllerType_T controllerType() const { return mData->mStorageControllerType; } 135 139 StorageBus_T storageBus() const { return mData->mStorageBus; } 140 ULONG instance() const { return mData->mInstance; } 136 141 137 142 bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); } … … 164 169 /** Data. */ 165 170 Backupable<Data> mData; 166 167 /* Instance number of the device in the running VM. */168 ULONG mInstance;169 171 }; 170 172 -
trunk/src/VBox/Main/xml/Settings.cpp
r24136 r24250 1862 1862 sctl.strName = "SATA Controller"; 1863 1863 } 1864 1865 if (!pelmController->getAttributeValue("Instance", sctl.ulInstance)) 1866 sctl.ulInstance = 0; 1867 1864 1868 Utf8Str strType; 1865 1869 if (!pelmController->getAttributeValue("type", strType)) … … 2735 2739 pelmController->setAttribute("PortCount", sc.ulPortCount); 2736 2740 2741 pelmController->setAttribute("Instance", sc.ulInstance); 2742 2737 2743 if (sc.controllerType == StorageControllerType_IntelAhci) 2738 2744 {
Note:
See TracChangeset
for help on using the changeset viewer.

