Changeset 82128 in vbox
- Timestamp:
- Nov 23, 2019 11:13:36 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134938
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r81727 r82128 457 457 /** Error counter for bad receive descriptors. */ 458 458 uint32_t uCntBadRMD; 459 /** True if raw context is enabled. */460 bool fGCEnabled;461 /** True if R0 context is enabled. */462 bool fR0Enabled;463 459 /** Emulated device type. */ 464 460 uint8_t uDevType; 465 461 /** Backwards compatible shared memory region during state loading. */ 466 462 bool fSharedRegion; 463 bool afAlignment5[2]; 467 464 /** Link speed to be reported through CSR68. */ 468 465 uint32_t u32LinkSpeed; … … 2752 2749 * @returns VBox status code. VERR_TRY_AGAIN is returned if we're busy. 2753 2750 * 2754 * @param pThis The PCnet instance data.2751 * @param pThis The PCnet shared instance data. 2755 2752 * @param fOnWorkerThread Whether we're on a worker thread or on an EMT. 2756 2753 */ … … 4104 4101 return rc; 4105 4102 4106 if (p This->fGCEnabled)4103 if (pDevIns->fRCEnabled) 4107 4104 { 4108 4105 rc = PDMDevHlpIOPortRegisterRC(pDevIns, Port, 0x10, 0, "pcnetIOPortAPromWrite", … … 4115 4112 return rc; 4116 4113 } 4117 if (p This->fR0Enabled)4114 if (pDevIns->fR0Enabled) 4118 4115 { 4119 4116 rc = PDMDevHlpIOPortRegisterR0(pDevIns, Port, 0x10, 0, "pcnetIOPortAPromWrite", … … 4184 4181 switch (pThis->uDevType) 4185 4182 { 4186 case DEV_AM79C970A: pcszModel = "AM79C970A"; break;4187 case DEV_AM79C973: pcszModel = "AM79C973"; break;4188 case DEV_AM79C960: pcszModel = "AM79C960/NE2100"; break;4189 case DEV_AM79C960_EB: pcszModel = "AM79C960/EtherBlaster"; break;4190 default: pcszModel = "Unknown"; break;4183 case DEV_AM79C970A: pcszModel = "AM79C970A"; break; 4184 case DEV_AM79C973: pcszModel = "AM79C973"; break; 4185 case DEV_AM79C960: pcszModel = "AM79C960/NE2100"; break; 4186 case DEV_AM79C960_EB: pcszModel = "AM79C960/EtherBlaster"; break; 4187 default: pcszModel = "Unknown"; break; 4191 4188 } 4192 4189 pHlp->pfnPrintf(pHlp, … … 4194 4191 pDevIns->iInstance, 4195 4192 pThis->IOPortBase, pThis->MMIOBase, &pThis->MacConfigured, 4196 pcszModel, p This->fGCEnabled ? " RC" : "", pThis->fR0Enabled ? " R0" : "");4193 pcszModel, pDevIns->fRCEnabled ? " RC" : "", pDevIns->fR0Enabled ? " R0" : ""); 4197 4194 4198 4195 PDMCritSectEnter(&pThis->CritSect, VERR_INTERNAL_ERROR); /* Take it here so we know why we're hanging... */ … … 4433 4430 * renegotiate any DHCP lease. 4434 4431 * 4435 * @param pThis The PCnet instance data.4432 * @param pThis The PCnet shared instance data. 4436 4433 */ 4437 4434 static void pcnetTempLinkDown(PPCNETSTATE pThis) … … 4454 4451 * Saves the configuration. 4455 4452 * 4456 * @param pThis The PCnet instance data. 4453 * @param pHlp The device helpers. 4454 * @param pThis The PCnet shared instance data. 4457 4455 * @param pSSM The saved state handle. 4458 4456 */ 4459 static void pcnetSaveConfig(P PCNETSTATE pThis, PSSMHANDLE pSSM)4460 { 4461 SSMR3PutMem(pSSM, &pThis->MacConfigured, sizeof(pThis->MacConfigured));4462 SSMR3PutU8(pSSM, pThis->uDevType);4463 SSMR3PutU32(pSSM, pThis->u32LinkSpeed);4457 static void pcnetSaveConfig(PCPDMDEVHLPR3 pHlp, PPCNETSTATE pThis, PSSMHANDLE pSSM) 4458 { 4459 pHlp->pfnSSMPutMem(pSSM, &pThis->MacConfigured, sizeof(pThis->MacConfigured)); 4460 pHlp->pfnSSMPutU8(pSSM, pThis->uDevType); 4461 pHlp->pfnSSMPutU32(pSSM, pThis->u32LinkSpeed); 4464 4462 } 4465 4463 … … 4472 4470 RT_NOREF(uPass); 4473 4471 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4474 pcnetSaveConfig(p This, pSSM);4472 pcnetSaveConfig(pDevIns->pHlpR3, pThis, pSSM); 4475 4473 return VINF_SSM_DONT_CALL_AGAIN; 4476 4474 } … … 4499 4497 static DECLCALLBACK(int) pcnetSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) 4500 4498 { 4501 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4502 4503 SSMR3PutBool(pSSM, pThis->fLinkUp); 4504 SSMR3PutU32(pSSM, pThis->u32RAP); 4505 SSMR3PutS32(pSSM, pThis->iISR); 4506 SSMR3PutU32(pSSM, pThis->u32Lnkst); 4507 SSMR3PutBool(pSSM, false/* was ffPrivIfEnabled */); /* >= If version 0.9 */ 4508 SSMR3PutBool(pSSM, pThis->fSignalRxMiss); /* >= If version 0.10 */ 4509 SSMR3PutGCPhys32(pSSM, pThis->GCRDRA); 4510 SSMR3PutGCPhys32(pSSM, pThis->GCTDRA); 4511 SSMR3PutMem(pSSM, pThis->aPROM, sizeof(pThis->aPROM)); 4512 SSMR3PutMem(pSSM, pThis->aCSR, sizeof(pThis->aCSR)); 4513 SSMR3PutMem(pSSM, pThis->aBCR, sizeof(pThis->aBCR)); 4514 SSMR3PutMem(pSSM, pThis->aMII, sizeof(pThis->aMII)); 4515 SSMR3PutU16(pSSM, pThis->u16CSR0LastSeenByGuest); 4516 SSMR3PutU64(pSSM, pThis->u64LastPoll); 4517 pcnetSaveConfig(pThis, pSSM); 4499 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4500 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 4501 4502 pHlp->pfnSSMPutBool(pSSM, pThis->fLinkUp); 4503 pHlp->pfnSSMPutU32(pSSM, pThis->u32RAP); 4504 pHlp->pfnSSMPutS32(pSSM, pThis->iISR); 4505 pHlp->pfnSSMPutU32(pSSM, pThis->u32Lnkst); 4506 pHlp->pfnSSMPutBool(pSSM, false/* was ffPrivIfEnabled */); /* >= If version 0.9 */ 4507 pHlp->pfnSSMPutBool(pSSM, pThis->fSignalRxMiss); /* >= If version 0.10 */ 4508 pHlp->pfnSSMPutGCPhys32(pSSM, pThis->GCRDRA); 4509 pHlp->pfnSSMPutGCPhys32(pSSM, pThis->GCTDRA); 4510 pHlp->pfnSSMPutMem(pSSM, pThis->aPROM, sizeof(pThis->aPROM)); 4511 pHlp->pfnSSMPutMem(pSSM, pThis->aCSR, sizeof(pThis->aCSR)); 4512 pHlp->pfnSSMPutMem(pSSM, pThis->aBCR, sizeof(pThis->aBCR)); 4513 pHlp->pfnSSMPutMem(pSSM, pThis->aMII, sizeof(pThis->aMII)); 4514 pHlp->pfnSSMPutU16(pSSM, pThis->u16CSR0LastSeenByGuest); 4515 pHlp->pfnSSMPutU64(pSSM, pThis->u64LastPoll); 4516 pcnetSaveConfig(pHlp, pThis, pSSM); 4518 4517 4519 4518 int rc = VINF_SUCCESS; … … 4535 4534 static DECLCALLBACK(int) pcnetLoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) 4536 4535 { 4537 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4536 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4537 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 4538 4538 4539 4539 int rc = PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 4540 4540 AssertRC(rc); 4541 4541 4542 uint32_t uVer = SSMR3HandleVersion(pSSM);4542 uint32_t uVer = pHlp->pfnSSMHandleVersion(pSSM); 4543 4543 if ( uVer < VBOX_FULL_VERSION_MAKE(4, 3, 6) 4544 4544 || ( uVer >= VBOX_FULL_VERSION_MAKE(4, 3, 51) … … 4564 4564 static DECLCALLBACK(int) pcnetLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) 4565 4565 { 4566 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4566 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 4567 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 4567 4568 4568 4569 if ( SSM_VERSION_MAJOR_CHANGED(uVersion, PCNET_SAVEDSTATE_VERSION) … … 4573 4574 { 4574 4575 /* restore data */ 4575 SSMR3GetBool(pSSM, &pThis->fLinkUp);4576 int rc = SSMR3GetU32(pSSM, &pThis->u32RAP);4576 pHlp->pfnSSMGetBool(pSSM, &pThis->fLinkUp); 4577 int rc = pHlp->pfnSSMGetU32(pSSM, &pThis->u32RAP); 4577 4578 AssertRCReturn(rc, rc); 4578 4579 AssertLogRelMsgReturn(pThis->u32RAP < RT_ELEMENTS(pThis->aCSR), ("%#x\n", pThis->u32RAP), VERR_SSM_LOAD_CONFIG_MISMATCH); 4579 SSMR3GetS32(pSSM, &pThis->iISR);4580 SSMR3GetU32(pSSM, &pThis->u32Lnkst);4580 pHlp->pfnSSMGetS32(pSSM, &pThis->iISR); 4581 pHlp->pfnSSMGetU32(pSSM, &pThis->u32Lnkst); 4581 4582 if ( SSM_VERSION_MAJOR(uVersion) > 0 4582 4583 || SSM_VERSION_MINOR(uVersion) >= 9) 4583 4584 { 4584 4585 bool fPrivIfEnabled = false; 4585 SSMR3GetBool(pSSM, &fPrivIfEnabled);4586 pHlp->pfnSSMGetBool(pSSM, &fPrivIfEnabled); 4586 4587 if (fPrivIfEnabled) 4587 4588 { … … 4593 4594 if ( SSM_VERSION_MAJOR(uVersion) > 0 4594 4595 || SSM_VERSION_MINOR(uVersion) >= 10) 4595 { 4596 SSMR3GetBool(pSSM, &pThis->fSignalRxMiss); 4597 } 4598 SSMR3GetGCPhys32(pSSM, &pThis->GCRDRA); 4599 SSMR3GetGCPhys32(pSSM, &pThis->GCTDRA); 4600 SSMR3GetMem(pSSM, &pThis->aPROM, sizeof(pThis->aPROM)); 4601 SSMR3GetMem(pSSM, &pThis->aCSR, sizeof(pThis->aCSR)); 4602 SSMR3GetMem(pSSM, &pThis->aBCR, sizeof(pThis->aBCR)); 4603 SSMR3GetMem(pSSM, &pThis->aMII, sizeof(pThis->aMII)); 4604 SSMR3GetU16(pSSM, &pThis->u16CSR0LastSeenByGuest); 4605 SSMR3GetU64(pSSM, &pThis->u64LastPoll); 4596 pHlp->pfnSSMGetBool(pSSM, &pThis->fSignalRxMiss); 4597 pHlp->pfnSSMGetGCPhys32(pSSM, &pThis->GCRDRA); 4598 pHlp->pfnSSMGetGCPhys32(pSSM, &pThis->GCTDRA); 4599 pHlp->pfnSSMGetMem(pSSM, &pThis->aPROM, sizeof(pThis->aPROM)); 4600 pHlp->pfnSSMGetMem(pSSM, &pThis->aCSR, sizeof(pThis->aCSR)); 4601 pHlp->pfnSSMGetMem(pSSM, &pThis->aBCR, sizeof(pThis->aBCR)); 4602 pHlp->pfnSSMGetMem(pSSM, &pThis->aMII, sizeof(pThis->aMII)); 4603 pHlp->pfnSSMGetU16(pSSM, &pThis->u16CSR0LastSeenByGuest); 4604 pHlp->pfnSSMGetU64(pSSM, &pThis->u64LastPoll); 4606 4605 } 4607 4606 4608 4607 /* check config */ 4609 4608 RTMAC Mac; 4610 int rc = SSMR3GetMem(pSSM, &Mac, sizeof(Mac));4609 int rc = pHlp->pfnSSMGetMem(pSSM, &Mac, sizeof(Mac)); 4611 4610 AssertRCReturn(rc, rc); 4612 4611 if ( memcmp(&Mac, &pThis->MacConfigured, sizeof(Mac)) … … 4615 4614 4616 4615 uint8_t uDevType; 4617 rc = SSMR3GetU8(pSSM, &uDevType);4616 rc = pHlp->pfnSSMGetU8(pSSM, &uDevType); 4618 4617 AssertRCReturn(rc, rc); 4619 4618 if (pThis->uDevType != uDevType) 4620 return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("The uDevType setting differs: config=%u saved=%u"), pThis->uDevType, uDevType);4619 return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("The uDevType setting differs: config=%u saved=%u"), pThis->uDevType, uDevType); 4621 4620 4622 4621 uint32_t u32LinkSpeed; 4623 rc = SSMR3GetU32(pSSM, &u32LinkSpeed);4622 rc = pHlp->pfnSSMGetU32(pSSM, &u32LinkSpeed); 4624 4623 AssertRCReturn(rc, rc); 4625 4624 if ( pThis->u32LinkSpeed != u32LinkSpeed … … 4690 4689 * 4691 4690 * @returns VBox status code. 4692 * @param pThis The PCnet instance data.4691 * @param pThis The PCnet shared instance data. 4693 4692 */ 4694 4693 static int pcnetCanReceive(PPCNETSTATE pThis) … … 5107 5106 PDMDEV_CHECK_VERSIONS_RETURN(pDevIns); 5108 5107 PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE); 5108 PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3; 5109 5109 PPDMIBASE pBase; 5110 5110 char szTmp[128]; … … 5123 5123 * Validate configuration. 5124 5124 */ 5125 if (!CFGMR3AreValuesValid(pCfg, "MAC\0" "CableConnected\0" "Am79C973\0" "ChipType\0" "Port\0" "IRQ\0" "LineSpeed\0" "GCEnabled\0" "R0Enabled\0" "PrivIfEnabled\0" "LinkUpDelay\0")) 5126 return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, 5127 N_("Invalid configuration for pcnet device")); 5128 5125 PDMDEV_VALIDATE_CONFIG_RETURN(pDevIns, 5126 "MAC|CableConnected|Am79C973|ChipType|Port|IRQ|LineSpeed|PrivIfEnabled|LinkUpDelay", 5127 ""); 5129 5128 /* 5130 5129 * Read the configuration. 5131 5130 */ 5132 rc = CFGMR3QueryBytes(pCfg, "MAC", &pThis->MacConfigured, sizeof(pThis->MacConfigured));5131 rc = pHlp->pfnCFGMQueryBytes(pCfg, "MAC", &pThis->MacConfigured, sizeof(pThis->MacConfigured)); 5133 5132 if (RT_FAILURE(rc)) 5134 return PDMDEV_SET_ERROR(pDevIns, rc, 5135 N_("Configuration error: Failed to get the \"MAC\" value")); 5136 rc = CFGMR3QueryBoolDef(pCfg, "CableConnected", &pThis->fLinkUp, true); 5133 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"MAC\" value")); 5134 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "CableConnected", &pThis->fLinkUp, true); 5137 5135 if (RT_FAILURE(rc)) 5138 return PDMDEV_SET_ERROR(pDevIns, rc, 5139 N_("Configuration error: Failed to get the \"CableConnected\" value")); 5136 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"CableConnected\" value")); 5140 5137 5141 5138 /* … … 5143 5140 */ 5144 5141 char szChipType[16]; 5145 rc = CFGMR3QueryStringDef(pCfg, "ChipType", &szChipType[0], sizeof(szChipType), "Am79C970A");5142 rc = pHlp->pfnCFGMQueryStringDef(pCfg, "ChipType", &szChipType[0], sizeof(szChipType), "Am79C970A"); 5146 5143 if (RT_FAILURE(rc)) 5147 return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, 5148 N_("Configuration error: Querying \"ChipType\" as string failed")); 5144 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"ChipType\" as string failed")); 5149 5145 5150 5146 if (!strcmp(szChipType, "Am79C970A")) … … 5158 5154 pThis->uDevType = DEV_AM79C960_EB; /* 10 Mbps PCnet-ISA, Racal InterLink NI6510 EtherBlaster compatible. */ 5159 5155 /* NI6510 drivers (at least Racal's and Linux) require the OUI to be InterLan's (Racal-Datacom). 5160 * Refuse loading if OUI doesn't match, because otherwise drivers won't load in the guest. 5161 */ 5156 * Refuse loading if OUI doesn't match, because otherwise drivers won't load in the guest. */ 5162 5157 if (memcmp(&pThis->MacConfigured, "\x02\x07\x01", 3)) 5163 5158 return PDMDevHlpVMSetError(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, RT_SRC_POS, … … 5165 5160 } 5166 5161 else 5167 {5168 5162 return PDMDevHlpVMSetError(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, RT_SRC_POS, 5169 5163 N_("Configuration error: The \"ChipType\" value \"%s\" is unsupported"), 5170 5164 szChipType); 5171 }5172 5165 5173 5166 … … 5176 5169 */ 5177 5170 bool fAm79C973; 5178 rc = CFGMR3QueryBoolDef(pCfg, "Am79C973", &fAm79C973, false);5171 rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Am79C973", &fAm79C973, false); 5179 5172 if (RT_FAILURE(rc)) 5180 return PDMDEV_SET_ERROR(pDevIns, rc, 5181 N_("Configuration error: Failed to get the \"Am79C973\" value")); 5173 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"Am79C973\" value")); 5182 5174 if (fAm79C973) 5183 5175 pThis->uDevType = DEV_AM79C973; … … 5186 5178 * Process ISA configuration options. The defaults are chosen to be NE2100/Am2100 compatible. 5187 5179 */ 5188 rc = CFGMR3QueryPortDef(pCfg, "Port", &pThis->IOPortBase, 0x300);5180 rc = pHlp->pfnCFGMQueryPortDef(pCfg, "Port", &pThis->IOPortBase, 0x300); 5189 5181 if (RT_FAILURE(rc)) 5190 return PDMDEV_SET_ERROR(pDevIns, rc, 5191 N_("Configuration error: Failed to get the \"Port\" value")); 5192 5193 rc = CFGMR3QueryU8Def(pCfg, "IRQ", &pThis->uIsaIrq, 3); 5182 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"Port\" value")); 5183 5184 rc = pHlp->pfnCFGMQueryU8Def(pCfg, "IRQ", &pThis->uIsaIrq, 3); 5194 5185 if (RT_FAILURE(rc)) 5195 return PDMDEV_SET_ERROR(pDevIns, rc, 5196 N_("Configuration error: Failed to get the \"IRQ\" value")); 5197 5198 rc = CFGMR3QueryU32Def(pCfg, "LineSpeed", &pThis->u32LinkSpeed, 1000000); /* 1GBit/s (in kbps units)*/ 5186 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"IRQ\" value")); 5187 5188 rc = pHlp->pfnCFGMQueryU32Def(pCfg, "LineSpeed", &pThis->u32LinkSpeed, 1000000); /* 1GBit/s (in kbps units)*/ 5199 5189 if (RT_FAILURE(rc)) 5200 return PDMDEV_SET_ERROR(pDevIns, rc, 5201 N_("Configuration error: Failed to get the \"LineSpeed\" value")); 5202 5203 #ifdef PCNET_GC_ENABLED 5204 rc = CFGMR3QueryBoolDef(pCfg, "GCEnabled", &pThis->fGCEnabled, true); 5190 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the \"LineSpeed\" value")); 5191 5192 rc = pHlp->pfnCFGMQueryU32Def(pCfg, "LinkUpDelay", (uint32_t*)&pThis->cMsLinkUpDelay, 5000); /* ms */ 5205 5193 if (RT_FAILURE(rc)) 5206 return PDMDEV_SET_ERROR(pDevIns, rc, 5207 N_("Configuration error: Failed to get the \"GCEnabled\" value")); 5208 5209 rc = CFGMR3QueryBoolDef(pCfg, "R0Enabled", &pThis->fR0Enabled, true); 5210 if (RT_FAILURE(rc)) 5211 return PDMDEV_SET_ERROR(pDevIns, rc, 5212 N_("Configuration error: Failed to get the \"R0Enabled\" value")); 5213 5214 #else /* !PCNET_GC_ENABLED */ 5215 pThis->fGCEnabled = false; 5216 pThis->fR0Enabled = false; 5217 #endif /* !PCNET_GC_ENABLED */ 5218 5219 rc = CFGMR3QueryU32Def(pCfg, "LinkUpDelay", (uint32_t*)&pThis->cMsLinkUpDelay, 5000); /* ms */ 5220 if (RT_FAILURE(rc)) 5221 return PDMDEV_SET_ERROR(pDevIns, rc, 5222 N_("Configuration error: Failed to get the value of 'LinkUpDelay'")); 5194 return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to get the value of 'LinkUpDelay'")); 5223 5195 Assert(pThis->cMsLinkUpDelay <= 300000); /* less than 5 minutes */ 5224 5196 if (pThis->cMsLinkUpDelay > 5000 || pThis->cMsLinkUpDelay < 100) 5225 { 5226 LogRel(("PCnet#%d WARNING! Link up delay is set to %u seconds!\n", 5227 iInstance, pThis->cMsLinkUpDelay / 1000)); 5228 } 5229 Log(("#%d Link up delay is set to %u seconds\n", 5230 iInstance, pThis->cMsLinkUpDelay / 1000)); 5197 LogRel(("PCnet#%d WARNING! Link up delay is set to %u seconds!\n", iInstance, pThis->cMsLinkUpDelay / 1000)); 5198 Log(("#%d Link up delay is set to %u seconds\n", iInstance, pThis->cMsLinkUpDelay / 1000)); 5231 5199 5232 5200 … … 5301 5269 { 5302 5270 rc = PDMDevHlpPCIRegister(pDevIns, pPciDev); 5303 if (RT_FAILURE(rc)) 5304 return rc; 5271 AssertRCReturn(rc, rc); 5305 5272 rc = PDMDevHlpPCIIORegionRegister(pDevIns, 0, PCNET_IOPORT_SIZE, PCI_ADDRESS_SPACE_IO, pcnetIOPortMap); 5306 if (RT_FAILURE(rc)) 5307 return rc; 5273 AssertRCReturn(rc, rc); 5308 5274 rc = PDMDevHlpPCIIORegionRegister(pDevIns, 1, PCNET_PNPMMIO_SIZE, PCI_ADDRESS_SPACE_MEM, pcnetMMIOMap); 5309 if (RT_FAILURE(rc)) 5310 return rc; 5275 AssertRCReturn(rc, rc); 5311 5276 } 5312 5277 … … 5325 5290 return rc; 5326 5291 5327 if (p This->fGCEnabled)5292 if (pDevIns->fRCEnabled) 5328 5293 { 5329 5294 rc = PDMDevHlpIOPortRegisterRC(pDevIns, pThis->IOPortBase, 0x10, 0, "pcnetIOPortAPromWrite", … … 5336 5301 return rc; 5337 5302 } 5338 if (p This->fR0Enabled)5303 if (pDevIns->fR0Enabled) 5339 5304 { 5340 5305 rc = PDMDevHlpIOPortRegisterR0(pDevIns, pThis->IOPortBase, 0x10, 0, "pcnetIOPortAPromWrite", … … 5382 5347 rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetTimerSoftInt, pThis, /** @todo r=bird: the locking here looks bogus now with SMP... */ 5383 5348 TMTIMER_FLAGS_NO_CRIT_SECT, "PCnet SoftInt Timer", &pThis->pTimerSoftIntR3); 5384 if (RT_FAILURE(rc)) 5385 return rc; 5349 AssertRCReturn(rc, rc); 5386 5350 pThis->pTimerSoftIntR0 = TMTimerR0Ptr(pThis->pTimerSoftIntR3); 5387 5351 pThis->pTimerSoftIntRC = TMTimerRCPtr(pThis->pTimerSoftIntR3); … … 5390 5354 rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetTimerRestore, pThis, 5391 5355 TMTIMER_FLAGS_NO_CRIT_SECT, "PCnet Restore Timer", &pThis->pTimerRestore); 5392 if (RT_FAILURE(rc)) 5393 return rc; 5356 AssertRCReturn(rc, rc); 5394 5357 5395 5358 rc = PDMDevHlpSSMRegisterEx(pDevIns, PCNET_SAVEDSTATE_VERSION, sizeof(*pThis), NULL, … … 5397 5360 pcnetSavePrep, pcnetSaveExec, NULL, 5398 5361 pcnetLoadPrep, pcnetLoadExec, pcnetLoadDone); 5399 if (RT_FAILURE(rc)) 5400 return rc; 5362 AssertRCReturn(rc, rc); 5401 5363 5402 5364 /* … … 5405 5367 rc = PDMDevHlpQueueCreate(pDevIns, sizeof(PDMQUEUEITEMCORE), 1, 0, 5406 5368 pcnetXmitQueueConsumer, true, "PCnet-Xmit", &pThis->pXmitQueueR3); 5407 if (RT_FAILURE(rc)) 5408 return rc; 5369 AssertRCReturn(rc, rc); 5409 5370 pThis->pXmitQueueR0 = PDMQueueR0Ptr(pThis->pXmitQueueR3); 5410 5371 pThis->pXmitQueueRC = PDMQueueRCPtr(pThis->pXmitQueueR3); … … 5415 5376 rc = PDMDevHlpQueueCreate(pDevIns, sizeof(PDMQUEUEITEMCORE), 1, 0, 5416 5377 pcnetCanRxQueueConsumer, true, "PCnet-Rcv", &pThis->pCanRxQueueR3); 5417 if (RT_FAILURE(rc)) 5418 return rc; 5378 AssertRCReturn(rc, rc); 5419 5379 pThis->pCanRxQueueR0 = PDMQueueR0Ptr(pThis->pCanRxQueueR3); 5420 5380 pThis->pCanRxQueueRC = PDMQueueRCPtr(pThis->pCanRxQueueR3); 5421 5422 /*5423 * Register the info item.5424 */5425 RTStrPrintf(szTmp, sizeof(szTmp), "pcnet%d", pDevIns->iInstance);5426 PDMDevHlpDBGFInfoRegister(pDevIns, szTmp, "PCNET info.", pcnetInfo);5427 5381 5428 5382 /* … … 5432 5386 if (RT_SUCCESS(rc)) 5433 5387 pThis->pLedsConnector = PDMIBASE_QUERY_INTERFACE(pBase, PDMILEDCONNECTORS); 5434 else if ( rc != VERR_PDM_NO_ATTACHED_DRIVER 5435 && rc != VERR_PDM_CFG_MISSING_DRIVER_NAME) 5436 { 5437 AssertMsgFailed(("Failed to attach to status driver. rc=%Rrc\n", rc)); 5438 return rc; 5439 } 5388 else 5389 AssertMsgReturn( rc == VERR_PDM_NO_ATTACHED_DRIVER 5390 || rc == VERR_PDM_CFG_MISSING_DRIVER_NAME, 5391 ("Failed to attach to status driver. rc=%Rrc\n", rc), 5392 rc); 5440 5393 5441 5394 /* … … 5465 5418 pcnetR3HardReset(pDevIns, pThis); 5466 5419 5467 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatReceiveBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, "Amount of data received", "/Public/Net/PCnet%u/BytesReceived", iInstance); 5468 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, "Amount of data transmitted", "/Public/Net/PCnet%u/BytesTransmitted", iInstance); 5469 5470 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatReceiveBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, "Amount of data received", "/Devices/PCnet%d/ReceiveBytes", iInstance); 5471 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, "Amount of data transmitted", "/Devices/PCnet%d/TransmitBytes", iInstance); 5420 /* 5421 * Register the info item. 5422 */ 5423 RTStrPrintf(szTmp, sizeof(szTmp), "pcnet%d", pDevIns->iInstance); 5424 PDMDevHlpDBGFInfoRegister(pDevIns, szTmp, "PCNET info.", pcnetInfo); 5425 5426 /* 5427 * Register statistics. 5428 */ 5429 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatReceiveBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, 5430 "Amount of data received", "/Public/Net/PCnet%u/BytesReceived", iInstance); 5431 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitBytes, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_BYTES, 5432 "Amount of data transmitted", "/Public/Net/PCnet%u/BytesTransmitted", iInstance); 5433 5434 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatReceiveBytes, STAMTYPE_COUNTER, "ReceiveBytes", STAMUNIT_BYTES, "Amount of data received"); 5435 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitBytes, STAMTYPE_COUNTER, "TransmitBytes", STAMUNIT_BYTES, "Amount of data transmitted"); 5472 5436 5473 5437 #ifdef VBOX_WITH_STATISTICS 5474 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatMMIOReadRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling MMIO reads in RZ", "/Devices/PCnet%d/MMIO/ReadRZ", iInstance); 5475 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatMMIOReadR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling MMIO reads in R3", "/Devices/PCnet%d/MMIO/ReadR3", iInstance); 5476 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatMMIOWriteRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling MMIO writes in RZ", "/Devices/PCnet%d/MMIO/WriteRZ", iInstance); 5477 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatMMIOWriteR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling MMIO writes in R3", "/Devices/PCnet%d/MMIO/WriteR3", iInstance); 5478 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatAPROMRead, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling APROM reads", "/Devices/PCnet%d/IO/APROMRead", iInstance); 5479 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatAPROMWrite, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling APROM writes", "/Devices/PCnet%d/IO/APROMWrite", iInstance); 5480 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatIOReadRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling IO reads in RZ", "/Devices/PCnet%d/IO/ReadRZ", iInstance); 5481 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatIOReadR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling IO reads in R3", "/Devices/PCnet%d/IO/ReadR3", iInstance); 5482 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatIOWriteRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in RZ", "/Devices/PCnet%d/IO/WriteRZ", iInstance); 5483 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatIOWriteR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in R3", "/Devices/PCnet%d/IO/WriteR3", iInstance); 5484 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTimer, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling Timer", "/Devices/PCnet%d/Timer", iInstance); 5485 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatReceive, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling receive", "/Devices/PCnet%d/Receive", iInstance); 5486 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRxOverflow, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_OCCURENCE, "Profiling RX overflows", "/Devices/PCnet%d/RxOverflow", iInstance); 5487 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRxOverflowWakeup, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_OCCURENCE, "Nr of RX overflow wakeups", "/Devices/PCnet%d/RxOverflowWakeup", iInstance); 5488 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitCase1, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Single descriptor transmit", "/Devices/PCnet%d/Transmit/Case1", iInstance); 5489 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitCase2, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Multi descriptor transmit", "/Devices/PCnet%d/Transmit/Case2", iInstance); 5490 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling transmits in RZ", "/Devices/PCnet%d/Transmit/TotalRZ", iInstance); 5491 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling transmits in R3", "/Devices/PCnet%d/Transmit/TotalR3", iInstance); 5492 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitSendRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet send transmit in RZ","/Devices/PCnet%d/Transmit/SendRZ", iInstance); 5493 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTransmitSendR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet send transmit in R3","/Devices/PCnet%d/Transmit/SendR3", iInstance); 5494 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTxLenCalcRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TX len calc in RZ", "/Devices/PCnet%d/Transmit/LenCalcRZ", iInstance); 5495 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTxLenCalcR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TX len calc in R3", "/Devices/PCnet%d/Transmit/LenCalcR3", iInstance); 5496 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTdtePollRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TdtePoll in RZ", "/Devices/PCnet%d/TdtePollRZ", iInstance); 5497 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTdtePollR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TdtePoll in R3", "/Devices/PCnet%d/TdtePollR3", iInstance); 5498 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRdtePollRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet RdtePoll in RZ", "/Devices/PCnet%d/RdtePollRZ", iInstance); 5499 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRdtePollR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet RdtePoll in R3", "/Devices/PCnet%d/RdtePollR3", iInstance); 5500 5501 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTmdStoreRZ, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TmdStore in RZ", "/Devices/PCnet%d/TmdStoreRZ", iInstance); 5502 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTmdStoreR3, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TmdStore in R3", "/Devices/PCnet%d/TmdStoreR3", iInstance); 5503 5438 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMMIOReadRZ, STAMTYPE_PROFILE, "MMIO/ReadRZ", STAMUNIT_TICKS_PER_CALL, "Profiling MMIO reads in RZ"); 5439 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMMIOReadR3, STAMTYPE_PROFILE, "MMIO/ReadR3", STAMUNIT_TICKS_PER_CALL, "Profiling MMIO reads in R3"); 5440 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMMIOWriteRZ, STAMTYPE_PROFILE, "MMIO/WriteRZ", STAMUNIT_TICKS_PER_CALL, "Profiling MMIO writes in RZ"); 5441 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMMIOWriteR3, STAMTYPE_PROFILE, "MMIO/WriteR3", STAMUNIT_TICKS_PER_CALL, "Profiling MMIO writes in R3"); 5442 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatAPROMRead, STAMTYPE_PROFILE, "IO/APROMRead", STAMUNIT_TICKS_PER_CALL, "Profiling APROM reads"); 5443 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatAPROMWrite, STAMTYPE_PROFILE, "IO/APROMWrite", STAMUNIT_TICKS_PER_CALL, "Profiling APROM writes"); 5444 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatIOReadRZ, STAMTYPE_PROFILE, "IO/ReadRZ", STAMUNIT_TICKS_PER_CALL, "Profiling IO reads in RZ"); 5445 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatIOReadR3, STAMTYPE_PROFILE, "IO/ReadR3", STAMUNIT_TICKS_PER_CALL, "Profiling IO reads in R3"); 5446 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatIOWriteRZ, STAMTYPE_PROFILE, "IO/WriteRZ", STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in RZ"); 5447 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatIOWriteR3, STAMTYPE_PROFILE, "IO/WriteR3", STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in R3"); 5448 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTimer, STAMTYPE_PROFILE, "Timer", STAMUNIT_TICKS_PER_CALL, "Profiling Timer"); 5449 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatReceive, STAMTYPE_PROFILE, "Receive", STAMUNIT_TICKS_PER_CALL, "Profiling receive"); 5450 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRxOverflow, STAMTYPE_PROFILE, "RxOverflow", STAMUNIT_TICKS_PER_OCCURENCE, "Profiling RX overflows"); 5451 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRxOverflowWakeup, STAMTYPE_PROFILE, "RxOverflowWakeup", STAMUNIT_TICKS_PER_OCCURENCE, "Nr of RX overflow wakeups"); 5452 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitCase1, STAMTYPE_COUNTER, "Transmit/Case1", STAMUNIT_OCCURENCES, "Single descriptor transmit"); 5453 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitCase2, STAMTYPE_COUNTER, "Transmit/Case2", STAMUNIT_OCCURENCES, "Multi descriptor transmit"); 5454 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitRZ, STAMTYPE_PROFILE, "Transmit/TotalRZ", STAMUNIT_TICKS_PER_CALL, "Profiling transmits in RZ"); 5455 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitR3, STAMTYPE_PROFILE, "Transmit/TotalR3", STAMUNIT_TICKS_PER_CALL, "Profiling transmits in R3"); 5456 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitSendRZ, STAMTYPE_PROFILE, "Transmit/SendRZ", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet send transmit in RZ"); 5457 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTransmitSendR3, STAMTYPE_PROFILE, "Transmit/SendR3", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet send transmit in R3"); 5458 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTxLenCalcRZ, STAMTYPE_PROFILE, "Transmit/LenCalcRZ", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TX len calc in RZ"); 5459 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTxLenCalcR3, STAMTYPE_PROFILE, "Transmit/LenCalcR3", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TX len calc in R3"); 5460 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTdtePollRZ, STAMTYPE_PROFILE, "TdtePollRZ", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TdtePoll in RZ"); 5461 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTdtePollR3, STAMTYPE_PROFILE, "TdtePollR3", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TdtePoll in R3"); 5462 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRdtePollRZ, STAMTYPE_PROFILE, "RdtePollRZ", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet RdtePoll in RZ"); 5463 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRdtePollR3, STAMTYPE_PROFILE, "RdtePollR3", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet RdtePoll in R3"); 5464 5465 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTmdStoreRZ, STAMTYPE_PROFILE, "TmdStoreRZ", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TmdStore in RZ"); 5466 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTmdStoreR3, STAMTYPE_PROFILE, "TmdStoreR3", STAMUNIT_TICKS_PER_CALL, "Profiling PCnet TmdStore in R3"); 5467 5468 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatXmitSkipCurrent, STAMTYPE_COUNTER, "Xmit/Skipped", STAMUNIT_OCCURENCES, ""); 5469 5470 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatInterrupt, STAMTYPE_PROFILE, "UpdateIRQ", STAMUNIT_TICKS_PER_CALL, "Profiling interrupt checks"); 5471 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatPollTimer, STAMTYPE_PROFILE, "PollTimer", STAMUNIT_TICKS_PER_CALL, "Profiling poll timer"); 5472 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMIIReads, STAMTYPE_COUNTER, "MIIReads", STAMUNIT_OCCURENCES, "Number of MII reads"); 5473 # ifdef PCNET_NO_POLLING 5474 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRCVRingWrite, STAMTYPE_COUNTER, "Ring/RCVWrites", STAMUNIT_OCCURENCES, "Nr of receive ring writes"); 5475 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatTXRingWrite, STAMTYPE_COUNTER, "Ring/TXWrites", STAMUNIT_OCCURENCES, "Nr of transmit ring writes"); 5476 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteR3, STAMTYPE_COUNTER, "Ring/R3/Writes", STAMUNIT_OCCURENCES, "Nr of monitored ring page writes"); 5477 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteR0, STAMTYPE_COUNTER, "Ring/R0/Writes", STAMUNIT_OCCURENCES, "Nr of monitored ring page writes"); 5478 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteRC, STAMTYPE_COUNTER, "Ring/RC/Writes", STAMUNIT_OCCURENCES, "Nr of monitored ring page writes"); 5479 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteFailedR3, STAMTYPE_COUNTER, "Ring/R3/Failed", STAMUNIT_OCCURENCES, "Nr of failed ring page writes"); 5480 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteFailedR0, STAMTYPE_COUNTER, "Ring/R0/Failed", STAMUNIT_OCCURENCES, "Nr of failed ring page writes"); 5481 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteFailedRC, STAMTYPE_COUNTER, "Ring/RC/Failed", STAMUNIT_OCCURENCES, "Nr of failed ring page writes"); 5482 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteOutsideR3, STAMTYPE_COUNTER, "Ring/R3/Outside", STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring"); 5483 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteOutsideR0, STAMTYPE_COUNTER, "Ring/R0/Outside", STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring"); 5484 PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRingWriteOutsideRC, STAMTYPE_COUNTER, "Ring/RC/Outside", STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring"); 5485 # endif /* PCNET_NO_POLLING */ 5504 5486 unsigned i; 5505 5487 for (i = 0; i < RT_ELEMENTS(pThis->aStatXmitFlush) - 1; i++) 5506 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitFlush[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, "", "/Devices/PCnet%d/XmitFlushIrq/%d", iInstance, i + 1); 5507 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitFlush[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, "", "/Devices/PCnet%d/XmitFlushIrq/%d+", iInstance, i + 1); 5488 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitFlush[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, 5489 "", "XmitFlushIrq/%02u", i + 1); 5490 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitFlush[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, 5491 "", "XmitFlushIrq/%02u-inf", i + 1); 5508 5492 5509 5493 for (i = 0; i < RT_ELEMENTS(pThis->aStatXmitChainCounts) - 1; i++) 5510 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitChainCounts[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, "", "/Devices/PCnet%d/XmitChainCounts/%d", iInstance, i + 1); 5511 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitChainCounts[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, "", "/Devices/PCnet%d/XmitChainCounts/%d+", iInstance, i + 1); 5512 5513 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatXmitSkipCurrent, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "", "/Devices/PCnet%d/Xmit/Skipped", iInstance); 5514 5515 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatInterrupt, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling interrupt checks", "/Devices/PCnet%d/UpdateIRQ", iInstance); 5516 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatPollTimer, STAMTYPE_PROFILE, STAMVISIBILITY_ALWAYS, STAMUNIT_TICKS_PER_CALL, "Profiling poll timer", "/Devices/PCnet%d/PollTimer", iInstance); 5517 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatMIIReads, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Number of MII reads", "/Devices/PCnet%d/MIIReads", iInstance); 5518 # ifdef PCNET_NO_POLLING 5519 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRCVRingWrite, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of receive ring writes", "/Devices/PCnet%d/Ring/RCVWrites", iInstance); 5520 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatTXRingWrite, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of transmit ring writes", "/Devices/PCnet%d/Ring/TXWrites", iInstance); 5521 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteR3, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored ring page writes", "/Devices/PCnet%d/Ring/R3/Writes", iInstance); 5522 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteR0, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored ring page writes", "/Devices/PCnet%d/Ring/R0/Writes", iInstance); 5523 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteRC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored ring page writes", "/Devices/PCnet%d/Ring/RC/Writes", iInstance); 5524 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteFailedR3, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of failed ring page writes", "/Devices/PCnet%d/Ring/R3/Failed", iInstance); 5525 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteFailedR0, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of failed ring page writes", "/Devices/PCnet%d/Ring/R0/Failed", iInstance); 5526 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteFailedRC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of failed ring page writes", "/Devices/PCnet%d/Ring/RC/Failed", iInstance); 5527 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteOutsideR3, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring","/Devices/PCnet%d/Ring/R3/Outside", iInstance); 5528 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteOutsideR0, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring","/Devices/PCnet%d/Ring/R0/Outside", iInstance); 5529 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->StatRingWriteOutsideRC, STAMTYPE_COUNTER, STAMVISIBILITY_ALWAYS, STAMUNIT_OCCURENCES, "Nr of monitored writes outside ring","/Devices/PCnet%d/Ring/RC/Outside", iInstance); 5530 # endif /* PCNET_NO_POLLING */ 5494 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitChainCounts[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, 5495 "", "XmitChainCounts/%02u", i + 1); 5496 PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStatXmitChainCounts[i], STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES, 5497 "", "XmitChainCounts/%02u-inf", i + 1); 5531 5498 #endif /* VBOX_WITH_STATISTICS */ 5532 5499
Note:
See TracChangeset
for help on using the changeset viewer.