Changeset 3652 in vbox
- Timestamp:
- Jul 16, 2007 4:02:03 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 22924
- Location:
- trunk/src/VBox/Main
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/ConsoleImpl.cpp
r3603 r3652 1847 1847 // Paused, Starting, Saving, Stopping, etc? if not, we should make a 1848 1848 // stricter check (mMachineState != MachineState_Running). 1849 /* bird: It is not permitted to attach or detach while the VM is saving, is restoring 1849 /* bird: It is not permitted to attach or detach while the VM is saving, is restoring 1850 1850 * or has stopped - definintly not. 1851 1851 * 1852 * Attaching while starting, well, if you don't create any deadlock it should work... 1853 * Paused should work I guess, but we shouldn't push our luck if we're pausing because an 1854 * runtime error condition was raised (which is one of the reasons there better be a separate 1852 * Attaching while starting, well, if you don't create any deadlock it should work... 1853 * Paused should work I guess, but we shouldn't push our luck if we're pausing because an 1854 * runtime error condition was raised (which is one of the reasons there better be a separate 1855 1855 * state for that in the VMM). 1856 1856 */ … … 1911 1911 1912 1912 #ifdef __DARWIN__ 1913 /* Notify the USB Proxy that we're about to detach the device. Since 1914 * we don't dare do IPC when holding the console lock, so we'll have 1913 /* Notify the USB Proxy that we're about to detach the device. Since 1914 * we don't dare do IPC when holding the console lock, so we'll have 1915 1915 * to revalidate the device when we get back. */ 1916 1916 alock.leave(); … … 1925 1925 if (it == mUSBDevices.end()) 1926 1926 return S_OK; 1927 #endif 1927 #endif 1928 1928 1929 1929 /* First, request VMM to detach the device */ … … 3054 3054 */ 3055 3055 HRESULT Console::onSerialPortChange(ISerialPort *serialPort) 3056 { 3057 LogFlowThisFunc (("\n")); 3058 3059 AutoCaller autoCaller (this); 3060 AssertComRCReturnRC (autoCaller.rc()); 3061 3062 AutoLock alock (this); 3063 3064 /* Don't do anything if the VM isn't running */ 3065 if (!mpVM) 3066 return S_OK; 3067 3068 /* protect mpVM */ 3069 AutoVMCaller autoVMCaller (this); 3070 CheckComRCReturnRC (autoVMCaller.rc()); 3071 3072 LogFlowThisFunc (("Leaving rc=%#x\n", S_OK)); 3073 return S_OK; 3074 } 3075 3076 /** 3077 * Called by IInternalSessionControl::OnParallelPortChange(). 3078 * 3079 * @note Locks this object for writing. 3080 */ 3081 HRESULT Console::onParallelPortChange(IParallelPort *parallelPort) 3056 3082 { 3057 3083 LogFlowThisFunc (("\n")); … … 5435 5461 5436 5462 /* 5463 * Parallel (LPT) Ports 5464 */ 5465 rc = CFGMR3InsertNode(pDevices, "parallel", &pDev); RC_CHECK(); 5466 for (ULONG ulInstance = 0; ulInstance < SchemaDefs::ParallelPortCount; ulInstance++) 5467 { 5468 ComPtr<IParallelPort> parallelPort; 5469 hrc = pMachine->GetParallelPort (ulInstance, parallelPort.asOutParam()); H(); 5470 BOOL fEnabled = FALSE; 5471 if (parallelPort) 5472 hrc = parallelPort->COMGETTER(Enabled)(&fEnabled); H(); 5473 if (!fEnabled) 5474 continue; 5475 5476 char szInstance[4]; Assert(ulInstance <= 999); 5477 RTStrPrintf(szInstance, sizeof(szInstance), "%lu", ulInstance); 5478 5479 rc = CFGMR3InsertNode(pDev, szInstance, &pInst); RC_CHECK(); 5480 rc = CFGMR3InsertNode(pInst, "Config", &pCfg); RC_CHECK(); 5481 5482 ULONG uIRQ, uIOBase; 5483 Bstr DevicePath; 5484 hrc = parallelPort->COMGETTER(IRQ)(&uIRQ); H(); 5485 hrc = parallelPort->COMGETTER(IOBase)(&uIOBase); H(); 5486 hrc = parallelPort->COMGETTER(DevicePath)(DevicePath.asOutParam()); H(); 5487 rc = CFGMR3InsertInteger(pCfg, "IRQ", uIRQ); RC_CHECK(); 5488 rc = CFGMR3InsertInteger(pCfg, "IOBase", uIOBase); RC_CHECK(); 5489 rc = CFGMR3InsertNode(pInst, "LUN#0", &pLunL0); RC_CHECK(); 5490 rc = CFGMR3InsertString(pLunL0, "Driver", "HostParallel"); RC_CHECK(); 5491 rc = CFGMR3InsertNode(pLunL0, "AttachedDriver", &pLunL1); RC_CHECK(); 5492 rc = CFGMR3InsertString(pLunL1, "DevicePath", Utf8Str(DevicePath)); RC_CHECK(); 5493 } 5494 5495 /* 5437 5496 * VMM Device 5438 5497 */ -
trunk/src/VBox/Main/MachineImpl.cpp
r3566 r3652 458 458 unconst (mSerialPorts [slot]).createObject(); 459 459 mSerialPorts [slot]->init (this, slot); 460 } 461 462 /* create associated parallel port objects */ 463 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 464 { 465 unconst (mParallelPorts [slot]).createObject(); 466 mParallelPorts [slot]->init (this, slot); 460 467 } 461 468 … … 1838 1845 } 1839 1846 1847 STDMETHODIMP Machine::GetParallelPort (ULONG slot, IParallelPort **port) 1848 { 1849 if (!port) 1850 return E_POINTER; 1851 if (slot >= ELEMENTS (mParallelPorts)) 1852 return setError (E_INVALIDARG, tr ("Invalid slot number: %d"), slot); 1853 1854 AutoCaller autoCaller (this); 1855 CheckComRCReturnRC (autoCaller.rc()); 1856 1857 AutoReaderLock alock (this); 1858 1859 mParallelPorts [slot].queryInterfaceTo (port); 1860 1861 return S_OK; 1862 } 1863 1840 1864 STDMETHODIMP Machine::GetNetworkAdapter (ULONG slot, INetworkAdapter **adapter) 1841 1865 { … … 3259 3283 } 3260 3284 3285 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 3286 { 3287 if (mParallelPorts [slot]) 3288 { 3289 mParallelPorts [slot]->uninit(); 3290 unconst (mParallelPorts [slot]).setNull(); 3291 } 3292 } 3293 3261 3294 if (mFloppyDrive) 3262 3295 { … … 4285 4318 } 4286 4319 CFGLDRReleaseNode (serialNode); 4320 } 4321 4322 /* Parallel node (optional) */ 4323 CFGNODE parallelNode = 0; 4324 CFGLDRGetChildNode (aNode, "Lpt", 0, ¶llelNode); 4325 if (parallelNode) 4326 { 4327 HRESULT rc = S_OK; 4328 unsigned cPorts = 0; 4329 CFGLDRCountChildren (parallelNode, "Port", &cPorts); 4330 for (unsigned slot = 0; slot < cPorts; slot++) 4331 { 4332 rc = mParallelPorts [slot]->loadSettings (parallelNode, slot); 4333 CheckComRCReturnRC (rc); 4334 } 4335 CFGLDRReleaseNode (parallelNode); 4287 4336 } 4288 4337 … … 6096 6145 CFGLDRReleaseNode (serialNode); 6097 6146 6147 /* Parallel ports */ 6148 CFGNODE parallelNode = 0; 6149 CFGLDRCreateChildNode (aNode, "Lpt", ¶llelNode); 6150 6151 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot++) 6152 { 6153 rc = mParallelPorts [slot]->saveSettings (parallelNode); 6154 CheckComRCReturnRC (rc); 6155 } 6156 CFGLDRReleaseNode (parallelNode); 6157 6098 6158 /* Audio adapter */ 6099 6159 do … … 7144 7204 return true; 7145 7205 7206 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7207 if (mParallelPorts [slot] && mParallelPorts [slot]->isModified()) 7208 return true; 7209 7146 7210 return 7147 7211 mUserData.isBackedUp() || … … 7179 7243 for (ULONG slot = 0; slot < ELEMENTS (mSerialPorts); slot ++) 7180 7244 if (mSerialPorts [slot] && mSerialPorts [slot]->isReallyModified()) 7245 return true; 7246 7247 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7248 if (mParallelPorts [slot] && mParallelPorts [slot]->isReallyModified()) 7181 7249 return true; 7182 7250 … … 7221 7289 ComPtr <INetworkAdapter> networkAdapters [ELEMENTS (mNetworkAdapters)]; 7222 7290 ComPtr <ISerialPort> serialPorts [ELEMENTS (mSerialPorts)]; 7291 ComPtr <IParallelPort> parallelPorts [ELEMENTS (mParallelPorts)]; 7223 7292 7224 7293 if (mBIOSSettings) … … 7251 7320 if (mSerialPorts [slot]->rollback()) 7252 7321 serialPorts [slot] = mSerialPorts [slot]; 7322 7323 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7324 if (mParallelPorts [slot]) 7325 if (mParallelPorts [slot]->rollback()) 7326 parallelPorts [slot] = mParallelPorts [slot]; 7253 7327 7254 7328 if (aNotify) … … 7273 7347 if (serialPorts [slot]) 7274 7348 that->onSerialPortChange (serialPorts [slot]); 7349 for (ULONG slot = 0; slot < ELEMENTS (parallelPorts); slot ++) 7350 if (parallelPorts [slot]) 7351 that->onParallelPortChange (parallelPorts [slot]); 7275 7352 } 7276 7353 } … … 7321 7398 for (ULONG slot = 0; slot < ELEMENTS (mSerialPorts); slot ++) 7322 7399 mSerialPorts [slot]->commit(); 7400 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7401 mParallelPorts [slot]->commit(); 7323 7402 7324 7403 if (mType == IsSessionMachine) … … 7384 7463 for (ULONG slot = 0; slot < ELEMENTS (mSerialPorts); slot ++) 7385 7464 mSerialPorts [slot]->copyFrom (aThat->mSerialPorts [slot]); 7465 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7466 mParallelPorts [slot]->copyFrom (aThat->mParallelPorts [slot]); 7386 7467 } 7387 7468 … … 7570 7651 mSerialPorts [slot]->init (this, aMachine->mSerialPorts [slot]); 7571 7652 } 7653 /* create a list of parallel ports that will be mutable */ 7654 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 7655 { 7656 unconst (mParallelPorts [slot]).createObject(); 7657 mParallelPorts [slot]->init (this, aMachine->mParallelPorts [slot]); 7658 } 7572 7659 /* create another USB controller object that will be mutable */ 7573 7660 unconst (mUSBController).createObject(); … … 8736 8823 * @note Locks this object for reading. 8737 8824 */ 8825 HRESULT SessionMachine::onParallelPortChange(IParallelPort *parallelPort) 8826 { 8827 LogFlowThisFunc (("\n")); 8828 8829 AutoCaller autoCaller (this); 8830 AssertComRCReturn (autoCaller.rc(), autoCaller.rc()); 8831 8832 ComPtr <IInternalSessionControl> directControl; 8833 { 8834 AutoReaderLock alock (this); 8835 directControl = mData->mSession.mDirectControl; 8836 } 8837 8838 /* ignore notifications sent after #OnSessionEnd() is called */ 8839 if (!directControl) 8840 return S_OK; 8841 8842 return directControl->OnParallelPortChange(parallelPort); 8843 } 8844 8845 /** 8846 * @note Locks this object for reading. 8847 */ 8738 8848 HRESULT SessionMachine::onVRDPServerChange() 8739 8849 { … … 10055 10165 } 10056 10166 10167 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 10168 { 10169 unconst (mParallelPorts [slot]).createObject(); 10170 mParallelPorts [slot]->initCopy (this, mPeer->mParallelPorts [slot]); 10171 } 10172 10057 10173 /* Confirm a successful initialization when it's the case */ 10058 10174 autoInitSpan.setSucceeded(); … … 10145 10261 } 10146 10262 10263 for (ULONG slot = 0; slot < ELEMENTS (mParallelPorts); slot ++) 10264 { 10265 unconst (mParallelPorts [slot]).createObject(); 10266 mParallelPorts [slot]->init (this, slot); 10267 } 10268 10147 10269 /* load hardware and harddisk settings */ 10148 10270 -
trunk/src/VBox/Main/Makefile.kmk
r3494 r3652 182 182 NetworkAdapterImpl.cpp \ 183 183 SerialPortImpl.cpp \ 184 ParallelPortImpl.cpp \ 184 185 USBControllerImpl.cpp \ 185 186 AudioAdapterImpl.cpp \ -
trunk/src/VBox/Main/SessionImpl.cpp
r3497 r3652 551 551 552 552 return mConsole->onSerialPortChange(serialPort); 553 } 554 555 STDMETHODIMP Session::OnParallelPortChange(IParallelPort *parallelPort) 556 { 557 LogFlowThisFunc (("\n")); 558 559 AutoCaller autoCaller (this); 560 AssertComRCReturn (autoCaller.rc(), autoCaller.rc()); 561 562 AutoReaderLock alock (this); 563 AssertReturn (mState == SessionState_SessionOpen && 564 mType == SessionType_DirectSession, E_FAIL); 565 566 return mConsole->onParallelPortChange(parallelPort); 553 567 } 554 568 -
trunk/src/VBox/Main/SystemPropertiesImpl.cpp
r3494 r3652 202 202 } 203 203 204 STDMETHODIMP SystemProperties::COMGETTER(ParallelPortCount)(ULONG *count) 205 { 206 if (!count) 207 return E_POINTER; 208 AutoLock lock (this); 209 CHECK_READY(); 210 211 *count = SchemaDefs::ParallelPortCount; 212 213 return S_OK; 214 } 215 204 216 STDMETHODIMP SystemProperties::COMGETTER(MaxBootPosition)(ULONG *aMaxBootPosition) 205 217 { -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r3611 r3652 1655 1655 <method name="detachUSBDevice"> 1656 1656 <desc> 1657 Notification that a VM is going to detach (done = false) or has 1657 Notification that a VM is going to detach (done = false) or has 1658 1658 already detached (done = true) the given USB device. 1659 1659 When the done = true request is completed, the VM process will … … 1661 1661 notification. 1662 1662 <note> 1663 In the done = true case, the server must run its own filters 1664 and filters of all VMs but this one on the detached device 1663 In the done = true case, the server must run its own filters 1664 and filters of all VMs but this one on the detached device 1665 1665 as if it were just attached to the host computer. 1666 1666 </note> … … 1682 1682 <desc> 1683 1683 Notification that a VM that is being powered down. The done 1684 parameter indicates whether which stage of the power down 1685 we're at. When done = false the VM is announcing its 1686 intentions, while when done = true the VM is reporting 1684 parameter indicates whether which stage of the power down 1685 we're at. When done = false the VM is announcing its 1686 intentions, while when done = true the VM is reporting 1687 1687 what it has done. 1688 1688 <note> 1689 In the done = true case, the server must run its own filters 1690 and filters of all VMs but this one on all detach devices as 1689 In the done = true case, the server must run its own filters 1690 and filters of all VMs but this one on all detach devices as 1691 1691 if they were just attached to the host computer. 1692 1692 </note> … … 1900 1900 <interface 1901 1901 name="IMachine" extends="$unknown" 1902 uuid=" 0332de0e-ce75-461f-8c6f-0fa42616404a"1902 uuid="31f7169f-14da-4c55-8cb6-a3665186e35e" 1903 1903 wsmap="managed" 1904 1904 > … … 2456 2456 </method> 2457 2457 2458 <method name="getParallelPort" const="yes"> 2459 <desc> 2460 Returns the parallel port associated with the given slot. 2461 Slots are numbered sequentially, starting with zero. The total 2462 number of parallel ports per every machine is defined by the 2463 <link to="ISystemProperties::parallelPortCount"/> property, 2464 so the maximum slot number is one less than that property's value. 2465 </desc> 2466 <param name="slot" type="unsigned long" dir="in"/> 2467 <param name="port" type="IParallelPort" dir="return"/> 2468 </method> 2469 2458 2470 <method name="getNextExtraDataKey"> 2459 2471 <desc> … … 3928 3940 name="ISystemProperties" 3929 3941 extends="$unknown" 3930 uuid=" 6dc28c62-7924-43de-8336-fa754aa531d7"3942 uuid="12c2e31e-247f-4d51-82e5-5b9d4a6c7d5b" 3931 3943 wsmap="struct" 3932 3944 > … … 3972 3984 <desc> 3973 3985 Number of serial ports associated with every 3986 <link to="IMachine"/> instance. 3987 </desc> 3988 </attribute> 3989 3990 <attribute name="parallelPortCount" type="unsigned long" readonly="yes"> 3991 <desc> 3992 Number of parallel ports associated with every 3974 3993 <link to="IMachine"/> instance. 3975 3994 </desc> … … 6785 6804 wsmap="managed" 6786 6805 > 6787 6806 6788 6807 <attribute name="slot" type="unsigned long" readonly="yes"> 6789 6808 <desc> … … 6815 6834 <attribute name="server" type="boolean"> 6816 6835 <desc>Flag whether this serial port acts as a server or a client.</desc> 6836 </attribute> 6837 6838 </interface> 6839 6840 <!-- 6841 // IParallelPort 6842 ///////////////////////////////////////////////////////////////////////// 6843 --> 6844 6845 <interface 6846 name="IParallelPort" extends="$unknown" 6847 uuid="6d7f2385-8ce3-4342-a042-61fa1882354b" 6848 wsmap="managed" 6849 > 6850 6851 <attribute name="slot" type="unsigned long" readonly="yes"> 6852 <desc> 6853 Slot number this parallel port is plugged into. Corresponds to 6854 the value you pass to <link to="IMachine::getParallelPort"/> 6855 to obtain this instance. 6856 </desc> 6857 </attribute> 6858 6859 <attribute name="enabled" type="boolean"> 6860 <desc> 6861 Flag whether the parallel port is enabled. If it is disabled, 6862 the parallel port will not be reported to the guest. 6863 </desc> 6864 </attribute> 6865 6866 <attribute name="IOBase" type="unsigned long"> 6867 <desc>Gets the I/O base of the parallel port.</desc> 6868 </attribute> 6869 6870 <attribute name="IRQ" type="unsigned long"> 6871 <desc>Gets the IRQ of the parallel port.</desc> 6872 </attribute> 6873 6874 <attribute name="DevicePath" type="wstring"> 6875 <desc>Gets the of the device path connected to the parallel port.</desc> 6817 6876 </attribute> 6818 6877 … … 7794 7853 </method> 7795 7854 7855 <method name="onParallelPortChange"> 7856 <desc> 7857 Triggered when settings of a parallel port of the 7858 associated virtual machine have changed. 7859 </desc> 7860 <param name="parallelPort" type="IParallelPort" dir="in"/> 7861 </method> 7862 7796 7863 <method name="onVRDPServerChange"> 7797 7864 <desc> -
trunk/src/VBox/Main/include/ConsoleImpl.h
r3566 r3652 173 173 HRESULT onNetworkAdapterChange(INetworkAdapter *networkAdapter); 174 174 HRESULT onSerialPortChange(ISerialPort *serialPort); 175 HRESULT onParallelPortChange(IParallelPort *parallelPort); 175 176 HRESULT onVRDPServerChange(); 176 177 HRESULT onUSBControllerChange(); -
trunk/src/VBox/Main/include/MachineImpl.h
r3566 r3652 35 35 #include "AudioAdapterImpl.h" 36 36 #include "SerialPortImpl.h" 37 #include "ParallelPortImpl.h" 37 38 #include "BIOSSettingsImpl.h" 38 39 … … 482 483 STDMETHOD(DetachHardDisk) (DiskControllerType_T aCtl, LONG aDev); 483 484 STDMETHOD(GetSerialPort) (ULONG slot, ISerialPort **port); 485 STDMETHOD(GetParallelPort) (ULONG slot, IParallelPort **port); 484 486 STDMETHOD(GetNetworkAdapter) (ULONG slot, INetworkAdapter **adapter); 485 487 STDMETHOD(GetNextExtraDataKey)(INPTR BSTR aKey, BSTR *aNextKey, BSTR *aNextValue); … … 529 531 virtual HRESULT onNetworkAdapterChange(INetworkAdapter *networkAdapter) { return S_OK; } 530 532 virtual HRESULT onSerialPortChange(ISerialPort *serialPort) { return S_OK; } 533 virtual HRESULT onParallelPortChange(IParallelPort *ParallelPort) { return S_OK; } 531 534 virtual HRESULT onVRDPServerChange() { return S_OK; } 532 535 virtual HRESULT onUSBControllerChange() { return S_OK; } … … 680 683 const ComObjPtr <SerialPort> 681 684 mSerialPorts [SchemaDefs::SerialPortCount]; 685 const ComObjPtr <ParallelPort> 686 mParallelPorts [SchemaDefs::ParallelPortCount]; 682 687 const ComObjPtr <AudioAdapter> mAudioAdapter; 683 688 const ComObjPtr <USBController> mUSBController; … … 771 776 HRESULT onNetworkAdapterChange(INetworkAdapter *networkAdapter); 772 777 HRESULT onSerialPortChange(ISerialPort *serialPort); 778 HRESULT onParallelPortChange(IParallelPort *parallelPort); 773 779 HRESULT onVRDPServerChange(); 774 780 HRESULT onUSBControllerChange(); -
trunk/src/VBox/Main/include/SessionImpl.h
r3494 r3652 99 99 STDMETHOD(OnNetworkAdapterChange)(INetworkAdapter *networkAdapter); 100 100 STDMETHOD(OnSerialPortChange)(ISerialPort *serialPort); 101 STDMETHOD(OnParallelPortChange)(IParallelPort *parallelPort); 101 102 STDMETHOD(OnVRDPServerChange)(); 102 103 STDMETHOD(OnUSBControllerChange)(); -
trunk/src/VBox/Main/include/SystemPropertiesImpl.h
r3494 r3652 64 64 STDMETHOD(COMGETTER(NetworkAdapterCount)(ULONG *count)); 65 65 STDMETHOD(COMGETTER(SerialPortCount)(ULONG *count)); 66 STDMETHOD(COMGETTER(ParallelPortCount)(ULONG *count)); 66 67 STDMETHOD(COMGETTER(MaxBootPosition)(ULONG *aMaxBootPosition)); 67 68 STDMETHOD(COMGETTER(DefaultVDIFolder)) (BSTR *aDefaultVDIFolder); -
trunk/src/VBox/Main/linux/server.cpp
r3494 r3652 98 98 #include <NetworkAdapterImpl.h> 99 99 #include <SerialPortImpl.h> 100 #include <ParallelPortImpl.h> 100 101 #include <USBControllerImpl.h> 101 102 #include <USBDeviceImpl.h> … … 155 156 NS_DECL_CLASSINFO(SerialPort) 156 157 NS_IMPL_THREADSAFE_ISUPPORTS1_CI(SerialPort, ISerialPort) 158 NS_DECL_CLASSINFO(ParallelPort) 159 NS_IMPL_THREADSAFE_ISUPPORTS1_CI(ParallelPort, IParallelPort) 157 160 NS_DECL_CLASSINFO(USBController) 158 161 NS_IMPL_THREADSAFE_ISUPPORTS1_CI(USBController, IUSBController) -
trunk/src/VBox/Main/xml/SchemaDefs.xsl
r3494 r3652 143 143 </xsl:call-template> 144 144 <xsl:call-template name="defineEnumMember"> 145 <xsl:with-param name="member" select="' ParallelPortCount'"/> 146 <xsl:with-param name="select" select=" 147 xsd:complexType[@name='TLptPort']/xsd:attribute[@name='slot']//xsd:maxExclusive/@value 148 "/> 149 </xsl:call-template> 150 <xsl:call-template name="defineEnumMember"> 145 151 <xsl:with-param name="member" select="' MaxBootPosition'"/> 146 152 <xsl:with-param name="select" select=" -
trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
r3494 r3652 544 544 </xsd:complexType> 545 545 546 <xsd:complexType name="TLptPort"> 547 <xsd:attribute name="slot" use="required"> 548 <xsd:simpleType> 549 <xsd:restriction base="xsd:unsignedInt"> 550 <xsd:minInclusive value="0"/> 551 <xsd:maxExclusive value="2"/> 552 </xsd:restriction> 553 </xsd:simpleType> 554 </xsd:attribute> 555 <xsd:attribute name="enabled" type="xsd:boolean" use="required"/> 556 <xsd:attribute name="IRQ" type="xsd:unsignedInt" default="4"/> 557 <xsd:attribute name="IOBase" type="xsd:unsignedInt" default="888"/> 558 <xsd:attribute name="DevicePath" type="TLocalFile"/> 559 </xsd:complexType> 560 561 <xsd:complexType name="TLpt"> 562 <xsd:sequence> 563 <xsd:element name="Port" minOccurs="0" maxOccurs="unbounded"> 564 <xsd:complexType> 565 <xsd:complexContent> 566 <xsd:extension base="TLptPort"> 567 </xsd:extension> 568 </xsd:complexContent> 569 </xsd:complexType> 570 </xsd:element> 571 </xsd:sequence> 572 </xsd:complexType> 573 546 574 <xsd:complexType name="TSharedFolder"> 547 575 <xsd:attribute name="name" type="TNonEmptyString" use="required"/> … … 583 611 <xsd:element name="Uart" type="TUart" minOccurs="0"> 584 612 <xsd:unique name="THardware-Uart-Port"> 613 <xsd:selector xpath="vb:Port"/> 614 <xsd:field xpath="@slot"/> 615 </xsd:unique> 616 </xsd:element> 617 <xsd:element name="Lpt" type="TLpt" minOccurs="0"> 618 <xsd:unique name="THardware-Lpt-Port"> 585 619 <xsd:selector xpath="vb:Port"/> 586 620 <xsd:field xpath="@slot"/>
Note:
See TracChangeset
for help on using the changeset viewer.