- Timestamp:
- Oct 14, 2009 9:26:48 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 53476
- Location:
- trunk/src/VBox
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
r23733 r23750 228 228 RTPrintf("Number of CPUs: %u\n", numCpus); 229 229 230 BOOL fSyntheticCpu; 231 machine->GetCpuProperty(CpuPropertyType_Synthetic, &fSyntheticCpu); 232 if (details == VMINFO_MACHINEREADABLE) 233 RTPrintf("synthcpu=\"%s\"\n", fSyntheticCpu ? "on" : "off"); 234 else 235 RTPrintf("Synthetic Cpu: %s\n", fSyntheticCpu ? "on" : "off"); 236 230 237 ComPtr <IBIOSSettings> biosSettings; 231 238 machine->COMGETTER(BIOSSettings)(biosSettings.asOutParam()); … … 330 337 331 338 BOOL PAEEnabled; 332 machine-> COMGETTER(PAEEnabled)(&PAEEnabled);339 machine->GetCpuProperty(CpuPropertyType_PAE, &PAEEnabled); 333 340 if (details == VMINFO_MACHINEREADABLE) 334 341 RTPrintf("pae=\"%s\"\n", PAEEnabled ? "on" : "off"); … … 358 365 359 366 BOOL HWVirtExNestedPagingEnabled; 360 machine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPaging Enabled, &HWVirtExNestedPagingEnabled);367 machine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, &HWVirtExNestedPagingEnabled); 361 368 if (details == VMINFO_MACHINEREADABLE) 362 369 RTPrintf("nestedpaging=\"%s\"\n", HWVirtExNestedPagingEnabled ? "on" : "off"); … … 365 372 366 373 BOOL HWVirtExVPIDEnabled; 367 machine->GetHWVirtExProperty(HWVirtExPropertyType_VPID Enabled, &HWVirtExVPIDEnabled);374 machine->GetHWVirtExProperty(HWVirtExPropertyType_VPID, &HWVirtExVPIDEnabled); 368 375 if (details == VMINFO_MACHINEREADABLE) 369 376 RTPrintf("vtxvpid=\"%s\"\n", HWVirtExVPIDEnabled ? "on" : "off"); -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
r23738 r23750 65 65 MODIFYVMIOAPIC, 66 66 MODIFYVMPAE, 67 MODIFYVMSYNTHCPU, 67 68 MODIFYVMHWVIRTEX, 68 69 MODIFYVMHWVIRTEXEXCLUSIVE, … … 137 138 { "--ioapic", MODIFYVMIOAPIC, RTGETOPT_REQ_STRING }, 138 139 { "--pae", MODIFYVMPAE, RTGETOPT_REQ_STRING }, 140 { "--synthcpu", MODIFYVMSYNTHCPU, RTGETOPT_REQ_STRING }, 139 141 { "--hwvirtex", MODIFYVMHWVIRTEX, RTGETOPT_REQ_STRING }, 140 142 { "--hwvirtexexcl", MODIFYVMHWVIRTEXEXCLUSIVE, RTGETOPT_REQ_STRING }, … … 363 365 if (!strcmp(pValueUnion.psz, "on")) 364 366 { 365 CHECK_ERROR (machine, COMSETTER(PAEEnabled)(true));367 CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_PAE, true)); 366 368 } 367 369 else if (!strcmp(pValueUnion.psz, "off")) 368 370 { 369 CHECK_ERROR (machine, COMSETTER(PAEEnabled)(false));371 CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_PAE, false)); 370 372 } 371 373 else … … 378 380 } 379 381 382 case MODIFYVMSYNTHCPU: 383 { 384 if (pValueUnion.psz) 385 { 386 if (!strcmp(pValueUnion.psz, "on")) 387 { 388 CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_Synthetic, true)); 389 } 390 else if (!strcmp(pValueUnion.psz, "off")) 391 { 392 CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_Synthetic, false)); 393 } 394 else 395 { 396 errorArgument("Invalid --synthcpu argument '%s'", pValueUnion.psz); 397 rc = E_FAIL; 398 } 399 } 400 break; 401 } 402 380 403 case MODIFYVMHWVIRTEX: 381 404 { … … 426 449 if (!strcmp(pValueUnion.psz, "on")) 427 450 { 428 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging Enabled, TRUE));451 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, TRUE)); 429 452 } 430 453 else if (!strcmp(pValueUnion.psz, "off")) 431 454 { 432 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging Enabled, FALSE));455 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, FALSE)); 433 456 } 434 457 else … … 447 470 if (!strcmp(pValueUnion.psz, "on")) 448 471 { 449 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID Enabled, TRUE));472 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID, TRUE)); 450 473 } 451 474 else if (!strcmp(pValueUnion.psz, "off")) 452 475 { 453 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID Enabled, FALSE));476 CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID, FALSE)); 454 477 } 455 478 else -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp
r23733 r23750 1617 1617 1618 1618 /* PAE/NX */ 1619 QString pae = aMachine.Get PAEEnabled()1619 QString pae = aMachine.GetCpuProperty(KCpuPropertyType_PAE) 1620 1620 ? tr ("Enabled", "details report (PAE/NX)") 1621 1621 : tr ("Disabled", "details report (PAE/NX)"); … … 1628 1628 1629 1629 /* Nested Paging */ 1630 QString nested = aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging Enabled)1630 QString nested = aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging) 1631 1631 ? tr ("Enabled", "details report (Nested Paging)") 1632 1632 : tr ("Disabled", "details report (Nested Paging)"); -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp
r23733 r23750 174 174 .GetProcessorFeature (KProcessorFeature_PAE); 175 175 mCbPae->setEnabled (fPAESupported); 176 mCbPae->setChecked (aMachine.Get PAEEnabled());176 mCbPae->setChecked (aMachine.GetCpuProperty(KCpuPropertyType_PAE)); 177 177 178 178 /* VT-x/AMD-V */ … … 183 183 mCbNestedPaging->setEnabled (fVTxAMDVSupported && 184 184 aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled)); 185 mCbNestedPaging->setChecked (aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging Enabled));185 mCbNestedPaging->setChecked (aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging)); 186 186 187 187 if (mValidator) … … 228 228 229 229 /* PAE/NX */ 230 mMachine.Set PAEEnabled (mCbPae->isChecked());230 mMachine.SetCpuProperty(KCpuPropertyType_PAE, mCbPae->isChecked()); 231 231 232 232 /* VT-x/AMD-V */ … … 235 235 236 236 /* Nested Paging */ 237 mMachine.SetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging Enabled, mCbNestedPaging->isChecked());237 mMachine.SetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging, mCbNestedPaging->isChecked()); 238 238 } 239 239 -
trunk/src/VBox/Main/ConsoleImpl2.cpp
r23733 r23750 328 328 /* HWVirtEx exclusive mode */ 329 329 BOOL fHWVirtExExclusive = true; 330 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_Exclusive, &fHWVirtExExclusive); 330 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_Exclusive, &fHWVirtExExclusive); H(); 331 331 rc = CFGMR3InsertInteger(pHWVirtExt, "Exclusive", fHWVirtExExclusive); RC_CHECK(); 332 332 333 333 /* Nested paging (VT-x/AMD-V) */ 334 334 BOOL fEnableNestedPaging = false; 335 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPaging Enabled, &fEnableNestedPaging); H();335 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, &fEnableNestedPaging); H(); 336 336 rc = CFGMR3InsertInteger(pHWVirtExt, "EnableNestedPaging", fEnableNestedPaging); RC_CHECK(); 337 337 338 338 /* VPID (VT-x) */ 339 339 BOOL fEnableVPID = false; 340 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_VPID Enabled, &fEnableVPID);H();340 hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_VPID, &fEnableVPID); H(); 341 341 rc = CFGMR3InsertInteger(pHWVirtExt, "EnableVPID", fEnableVPID); RC_CHECK(); 342 342 343 343 /* Physical Address Extension (PAE) */ 344 344 BOOL fEnablePAE = false; 345 hrc = pMachine-> COMGETTER(PAEEnabled)(&fEnablePAE);H();345 hrc = pMachine->GetCpuProperty(CpuPropertyType_PAE, &fEnablePAE); H(); 346 346 rc = CFGMR3InsertInteger(pRoot, "EnablePAE", fEnablePAE); RC_CHECK(); 347 348 /* Synthetic CPU */ 349 BOOL fSyntheticCpu = false; 350 hrc = pMachine->GetCpuProperty(CpuPropertyType_Synthetic, &fSyntheticCpu); H(); 351 rc = CFGMR3InsertInteger(pRoot, "SyntheticCpu", fSyntheticCpu); RC_CHECK(); 347 352 348 353 BOOL fPXEDebug; -
trunk/src/VBox/Main/MachineImpl.cpp
r23733 r23750 187 187 mHWVirtExExclusive = true; 188 188 mPAEEnabled = false; 189 mSyntheticCpu = false; 189 190 mPropertyServiceActive = false; 190 191 … … 225 226 mHWVirtExExclusive != that.mHWVirtExExclusive || 226 227 mPAEEnabled != that.mPAEEnabled || 228 mSyntheticCpu != that.mSyntheticCpu || 227 229 mCPUCount != that.mCPUCount || 228 230 mClipboardMode != that.mClipboardMode) … … 1297 1299 } 1298 1300 1299 STDMETHODIMP Machine::Get HWVirtExProperty(HWVirtExPropertyType_T property, BOOL *aVal)1301 STDMETHODIMP Machine::GetCpuProperty(CpuPropertyType_T property, BOOL *aVal) 1300 1302 { 1301 1303 if (!aVal) … … 1304 1306 AutoCaller autoCaller(this); 1305 1307 CheckComRCReturnRC(autoCaller.rc()); 1308 1309 AutoReadLock alock(this); 1310 1311 switch(property) 1312 { 1313 case CpuPropertyType_PAE: 1314 *aVal = mHWData->mPAEEnabled; 1315 break; 1316 1317 case CpuPropertyType_Synthetic: 1318 *aVal = mHWData->mSyntheticCpu; 1319 break; 1320 1321 default: 1322 return E_INVALIDARG; 1323 } 1324 return S_OK; 1325 } 1326 1327 STDMETHODIMP Machine::SetCpuProperty(CpuPropertyType_T property, BOOL aVal) 1328 { 1329 if (!aVal) 1330 return E_POINTER; 1331 1332 AutoCaller autoCaller(this); 1333 CheckComRCReturnRC(autoCaller.rc()); 1334 1335 AutoWriteLock alock(this); 1336 1337 HRESULT rc = checkStateDependency(MutableStateDep); 1338 CheckComRCReturnRC(rc); 1339 1340 switch(property) 1341 { 1342 case CpuPropertyType_PAE: 1343 mHWData->mPAEEnabled = !!aVal; 1344 break; 1345 1346 case CpuPropertyType_Synthetic: 1347 mHWData->mSyntheticCpu = !!aVal; 1348 break; 1349 1350 default: 1351 return E_INVALIDARG; 1352 } 1353 return S_OK; 1354 } 1355 1356 STDMETHODIMP Machine::GetHWVirtExProperty(HWVirtExPropertyType_T property, BOOL *aVal) 1357 { 1358 if (!aVal) 1359 return E_POINTER; 1360 1361 AutoCaller autoCaller(this); 1362 CheckComRCReturnRC(autoCaller.rc()); 1363 1364 AutoReadLock alock(this); 1306 1365 1307 1366 switch(property) … … 1315 1374 break; 1316 1375 1317 case HWVirtExPropertyType_VPID Enabled:1376 case HWVirtExPropertyType_VPID: 1318 1377 *aVal = mHWData->mHWVirtExVPIDEnabled; 1319 1378 break; 1320 1379 1321 case HWVirtExPropertyType_NestedPaging Enabled:1380 case HWVirtExPropertyType_NestedPaging: 1322 1381 *aVal = mHWData->mHWVirtExNestedPagingEnabled; 1323 1382 break; … … 1343 1402 case HWVirtExPropertyType_Enabled: 1344 1403 mHWData.backup(); 1345 mHWData->mHWVirtExEnabled = aVal;1404 mHWData->mHWVirtExEnabled = !!aVal; 1346 1405 break; 1347 1406 1348 1407 case HWVirtExPropertyType_Exclusive: 1349 1408 mHWData.backup(); 1350 mHWData->mHWVirtExExclusive = aVal;1409 mHWData->mHWVirtExExclusive = !!aVal; 1351 1410 break; 1352 1411 1353 case HWVirtExPropertyType_VPID Enabled:1412 case HWVirtExPropertyType_VPID: 1354 1413 mHWData.backup(); 1355 mHWData->mHWVirtExVPIDEnabled = aVal;1414 mHWData->mHWVirtExVPIDEnabled = !!aVal; 1356 1415 break; 1357 1416 1358 case HWVirtExPropertyType_NestedPaging Enabled:1417 case HWVirtExPropertyType_NestedPaging: 1359 1418 mHWData.backup(); 1360 mHWData->mHWVirtExNestedPagingEnabled = aVal;1419 mHWData->mHWVirtExNestedPagingEnabled = !!aVal; 1361 1420 break; 1362 1421 … … 1364 1423 return E_INVALIDARG; 1365 1424 } 1366 return S_OK;1367 }1368 1369 STDMETHODIMP Machine::COMGETTER(PAEEnabled)(BOOL *enabled)1370 {1371 if (!enabled)1372 return E_POINTER;1373 1374 AutoCaller autoCaller(this);1375 CheckComRCReturnRC(autoCaller.rc());1376 1377 AutoReadLock alock(this);1378 1379 *enabled = mHWData->mPAEEnabled;1380 1381 return S_OK;1382 }1383 1384 STDMETHODIMP Machine::COMSETTER(PAEEnabled)(BOOL enable)1385 {1386 AutoCaller autoCaller(this);1387 CheckComRCReturnRC(autoCaller.rc());1388 1389 AutoWriteLock alock(this);1390 1391 HRESULT rc = checkStateDependency(MutableStateDep);1392 CheckComRCReturnRC(rc);1393 1394 /** @todo check validity! */1395 1396 mHWData.backup();1397 mHWData->mPAEEnabled = enable;1398 1399 1425 return S_OK; 1400 1426 } … … 5172 5198 mHWData->mHWVirtExVPIDEnabled = data.fVPID; 5173 5199 mHWData->mPAEEnabled = data.fPAE; 5200 mHWData->mSyntheticCpu = data.fSyntheticCpu; 5174 5201 5175 5202 mHWData->mCPUCount = data.cCPUs; … … 6120 6147 data.fVPID = !!mHWData->mHWVirtExVPIDEnabled; 6121 6148 data.fPAE = !!mHWData->mPAEEnabled; 6149 data.fSyntheticCpu = !!mHWData->mSyntheticCpu; 6122 6150 6123 6151 data.cCPUs = mHWData->mCPUCount; -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r23733 r23750 758 758 759 759 <enum 760 name="CpuPropertyType" 761 uuid="af7bb668-eeb1-4404-b77f-a114b30c92d6" 762 > 763 <desc> 764 Virtual CPU property type. This enumeration represents possible values of the 765 IMachine get- and setCpuProperty methods. 766 </desc> 767 <const name="Null" value="0"> 768 <desc>Null value (never used by the API).</desc> 769 </const> 770 <const name="PAE" value="1"> 771 <desc> 772 This setting determines whether VirtualBox will expose the Physical Address 773 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE 774 is not available, it will not be reported. 775 </desc> 776 </const> 777 <const name="Synthetic" value="2"> 778 <desc> 779 This setting determines whether VirtualBox will expose a synthetic CPU to the guest to allow 780 live migration between host systems that differ significantly. 781 </desc> 782 </const> 783 </enum> 784 785 786 <enum 760 787 name="HWVirtExPropertyType" 761 uuid=" 843794f2-f392-46a7-8ff4-a0857a9b4b32"788 uuid="ce81dfdd-d2b8-4a90-bbea-40ee8b7ffcee" 762 789 > 763 790 <desc> … … 765 792 IMachine get- and setHWVirtExProperty methods. 766 793 </desc> 767 <const name="Null" 794 <const name="Null" value="0"> 768 795 <desc>Null value (never used by the API).</desc> 769 796 </const> … … 780 807 </desc> 781 808 </const> 782 <const name="VPID Enabled"value="3">809 <const name="VPID" value="3"> 783 810 <desc> 784 811 VT-x VPID boolean property. Note that in case this extension is not available, … … 786 813 </desc> 787 814 </const> 788 <const name="NestedPaging Enabled"value="4">815 <const name="NestedPaging" value="4"> 789 816 <desc> 790 817 Nested Paging boolean property. Note that in case this extension is not available, … … 4045 4072 <interface 4046 4073 name="IMachine" extends="$unknown" 4047 uuid=" ff5155a9-da1e-4225-8829-2f9f105d4db2"4074 uuid="e8e1c6a9-679e-4a73-a1e5-d9a81027fbda" 4048 4075 wsmap="managed" 4049 4076 > … … 4273 4300 </attribute> 4274 4301 4275 <attribute name="PAEEnabled" type="boolean" default="false">4276 <desc>4277 This setting determines whether VirtualBox will expose the Physical Address4278 Extension (PAE) feature of the host CPU to the guest. Note that in case PAE4279 is not available, it will not be reported.4280 </desc>4281 </attribute>4282 4283 4302 <attribute name="snapshotFolder" type="wstring"> 4284 4303 <desc> … … 5011 5030 <param name="value" type="wstring" dir="in"> 5012 5031 <desc>Value to assign to the key.</desc> 5032 </param> 5033 </method> 5034 5035 <method name="getCpuProperty" const="yes"> 5036 <desc> 5037 Returns the virtual CPU boolean value of the specified property. 5038 5039 <result name="E_INVALIDARG"> 5040 Invalid property. 5041 </result> 5042 5043 </desc> 5044 <param name="property" type="CpuPropertyType" dir="in"> 5045 <desc> 5046 Property type to query. 5047 </desc> 5048 </param> 5049 <param name="value" type="boolean" dir="return"> 5050 <desc> 5051 Property value. 5052 </desc> 5053 </param> 5054 </method> 5055 5056 <method name="setCpuProperty"> 5057 <desc> 5058 Sets the virtual CPU boolean value of the specified property. 5059 5060 <result name="E_INVALIDARG"> 5061 Invalid property. 5062 </result> 5063 5064 </desc> 5065 <param name="property" type="CpuPropertyType" dir="in"> 5066 <desc> 5067 Property type to query. 5068 </desc> 5069 </param> 5070 <param name="value" type="boolean" dir="in"> 5071 <desc> 5072 Property value. 5073 </desc> 5013 5074 </param> 5014 5075 </method> -
trunk/src/VBox/Main/include/MachineImpl.h
r23733 r23750 291 291 BOOL mAccelerate2DVideoEnabled; 292 292 BOOL mPAEEnabled; 293 BOOL mSyntheticCpu; 293 294 ULONG mCPUCount; 294 295 BOOL mAccelerate3DEnabled; … … 535 536 STDMETHOD(COMSETTER(Accelerate2DVideoEnabled))(BOOL enabled); 536 537 STDMETHOD(COMGETTER(BIOSSettings))(IBIOSSettings **biosSettings); 537 STDMETHOD(COMGETTER(PAEEnabled))(BOOL *enabled);538 STDMETHOD(COMSETTER(PAEEnabled))(BOOL enabled);539 538 STDMETHOD(COMGETTER(SnapshotFolder))(BSTR *aSavedStateFolder); 540 539 STDMETHOD(COMSETTER(SnapshotFolder))(IN_BSTR aSavedStateFolder); … … 584 583 STDMETHOD(GetExtraData)(IN_BSTR aKey, BSTR *aValue); 585 584 STDMETHOD(SetExtraData)(IN_BSTR aKey, IN_BSTR aValue); 585 STDMETHOD(GetCpuProperty)(CpuPropertyType_T property, BOOL *aVal); 586 STDMETHOD(SetCpuProperty)(CpuPropertyType_T property, BOOL aVal); 586 587 STDMETHOD(GetHWVirtExProperty)(HWVirtExPropertyType_T property, BOOL *aVal); 587 588 STDMETHOD(SetHWVirtExProperty)(HWVirtExPropertyType_T property, BOOL aVal); -
trunk/src/VBox/Main/xml/Settings.cpp
r23727 r23750 1210 1210 fVPID(false), 1211 1211 fPAE(false), 1212 fSyntheticCpu(false), 1212 1213 cCPUs(1), 1213 1214 ulMemorySizeMB((uint32_t)-1), … … 1472 1473 if ((pelmCPUChild = pelmHwChild->findChildElement("PAE"))) 1473 1474 pelmCPUChild->getAttributeValue("enabled", hw.fPAE); 1475 if ((pelmCPUChild = pelmHwChild->findChildElement("SyntheticCpu"))) 1476 pelmCPUChild->getAttributeValue("enabled", hw.fSyntheticCpu); 1474 1477 } 1475 1478 else if (pelmHwChild->nameEquals("Memory")) … … 2320 2323 if (hw.fPAE) 2321 2324 pelmCPU->createChild("PAE")->setAttribute("enabled", hw.fPAE); 2325 if (hw.fSyntheticCpu) 2326 pelmCPU->createChild("SyntheticCpu")->setAttribute("enabled", hw.fSyntheticCpu); 2322 2327 pelmCPU->setAttribute("count", hw.cCPUs); 2323 2328 -
trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
r23727 r23750 446 446 </xsd:complexType> 447 447 448 <xsd:complexType name="TSyntheticCpuType"> 449 <xsd:attribute name="enabled" type="xsd:boolean"/> 450 </xsd:complexType> 451 448 452 <xsd:complexType name="TPAEType"> 449 453 <xsd:attribute name="enabled" type="xsd:boolean"/> … … 463 467 <xsd:element name="HardwareVirtExVPID" type="THWVirtExVPIDType" minOccurs="0"/> 464 468 <xsd:element name="PAE" type="TPAEType" minOccurs="0"/> 469 <xsd:element name="SyntheticCpu" type="TSyntheticCpuType" minOccurs="0"/> 465 470 </xsd:sequence> 466 471 <xsd:attribute name="count" type="TCPUCount" default="1"/>
Note:
See TracChangeset
for help on using the changeset viewer.