VirtualBox

Changeset 82128 in vbox


Ignore:
Timestamp:
Nov 23, 2019 11:13:36 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
134938
Message:

DevPCNet: Do CFGM and SSM via devhlp. Use default statistics prefix. bugref:9218

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DevPCNet.cpp

    r81727 r82128  
    457457    /** Error counter for bad receive descriptors. */
    458458    uint32_t                            uCntBadRMD;
    459     /** True if raw context is enabled. */
    460     bool                                fGCEnabled;
    461     /** True if R0 context is enabled. */
    462     bool                                fR0Enabled;
    463459    /** Emulated device type. */
    464460    uint8_t                             uDevType;
    465461    /** Backwards compatible shared memory region during state loading. */
    466462    bool                                fSharedRegion;
     463    bool                                afAlignment5[2];
    467464    /** Link speed to be reported through CSR68. */
    468465    uint32_t                            u32LinkSpeed;
     
    27522749 * @returns VBox status code.  VERR_TRY_AGAIN is returned if we're busy.
    27532750 *
    2754  * @param   pThis               The PCnet instance data.
     2751 * @param   pThis               The PCnet shared instance data.
    27552752 * @param   fOnWorkerThread     Whether we're on a worker thread or on an EMT.
    27562753 */
     
    41044101        return rc;
    41054102
    4106     if (pThis->fGCEnabled)
     4103    if (pDevIns->fRCEnabled)
    41074104    {
    41084105        rc = PDMDevHlpIOPortRegisterRC(pDevIns, Port, 0x10, 0, "pcnetIOPortAPromWrite",
     
    41154112            return rc;
    41164113    }
    4117     if (pThis->fR0Enabled)
     4114    if (pDevIns->fR0Enabled)
    41184115    {
    41194116        rc = PDMDevHlpIOPortRegisterR0(pDevIns, Port, 0x10, 0, "pcnetIOPortAPromWrite",
     
    41844181    switch (pThis->uDevType)
    41854182    {
    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;
    41914188    }
    41924189    pHlp->pfnPrintf(pHlp,
     
    41944191                    pDevIns->iInstance,
    41954192                    pThis->IOPortBase, pThis->MMIOBase, &pThis->MacConfigured,
    4196                     pcszModel, pThis->fGCEnabled ? " RC" : "", pThis->fR0Enabled ? " R0" : "");
     4193                    pcszModel, pDevIns->fRCEnabled ? " RC" : "", pDevIns->fR0Enabled ? " R0" : "");
    41974194
    41984195    PDMCritSectEnter(&pThis->CritSect, VERR_INTERNAL_ERROR); /* Take it here so we know why we're hanging... */
     
    44334430 * renegotiate any DHCP lease.
    44344431 *
    4435  * @param  pThis        The PCnet instance data.
     4432 * @param  pThis        The PCnet shared instance data.
    44364433 */
    44374434static void pcnetTempLinkDown(PPCNETSTATE pThis)
     
    44544451 * Saves the configuration.
    44554452 *
    4456  * @param   pThis       The PCnet instance data.
     4453 * @param   pHlp        The device helpers.
     4454 * @param   pThis       The PCnet shared instance data.
    44574455 * @param   pSSM        The saved state handle.
    44584456 */
    4459 static void pcnetSaveConfig(PPCNETSTATE pThis, PSSMHANDLE pSSM)
    4460 {
    4461     SSMR3PutMem(pSSM, &pThis->MacConfigured, sizeof(pThis->MacConfigured));
    4462     SSMR3PutU8(pSSM, pThis->uDevType);
    4463     SSMR3PutU32(pSSM, pThis->u32LinkSpeed);
     4457static 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);
    44644462}
    44654463
     
    44724470    RT_NOREF(uPass);
    44734471    PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
    4474     pcnetSaveConfig(pThis, pSSM);
     4472    pcnetSaveConfig(pDevIns->pHlpR3, pThis, pSSM);
    44754473    return VINF_SSM_DONT_CALL_AGAIN;
    44764474}
     
    44994497static DECLCALLBACK(int) pcnetSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
    45004498{
    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);
    45184517
    45194518    int rc = VINF_SUCCESS;
     
    45354534static DECLCALLBACK(int) pcnetLoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
    45364535{
    4537     PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
     4536    PPCNETSTATE     pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
     4537    PCPDMDEVHLPR3   pHlp  = pDevIns->pHlpR3;
    45384538
    45394539    int rc = PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY);
    45404540    AssertRC(rc);
    45414541
    4542     uint32_t uVer = SSMR3HandleVersion(pSSM);
     4542    uint32_t uVer = pHlp->pfnSSMHandleVersion(pSSM);
    45434543    if (    uVer  < VBOX_FULL_VERSION_MAKE(4, 3,  6)
    45444544        || (   uVer >= VBOX_FULL_VERSION_MAKE(4, 3, 51)
     
    45644564static DECLCALLBACK(int) pcnetLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
    45654565{
    4566     PPCNETSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
     4566    PPCNETSTATE     pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
     4567    PCPDMDEVHLPR3   pHlp  = pDevIns->pHlpR3;
    45674568
    45684569    if (   SSM_VERSION_MAJOR_CHANGED(uVersion, PCNET_SAVEDSTATE_VERSION)
     
    45734574    {
    45744575        /* 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);
    45774578        AssertRCReturn(rc, rc);
    45784579        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);
    45814582        if (   SSM_VERSION_MAJOR(uVersion) >  0
    45824583            || SSM_VERSION_MINOR(uVersion) >= 9)
    45834584        {
    45844585            bool fPrivIfEnabled = false;
    4585             SSMR3GetBool(pSSM, &fPrivIfEnabled);
     4586            pHlp->pfnSSMGetBool(pSSM, &fPrivIfEnabled);
    45864587            if (fPrivIfEnabled)
    45874588            {
     
    45934594        if (   SSM_VERSION_MAJOR(uVersion) >  0
    45944595            || 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);
    46064605    }
    46074606
    46084607    /* check config */
    46094608    RTMAC       Mac;
    4610     int rc = SSMR3GetMem(pSSM, &Mac, sizeof(Mac));
     4609    int rc = pHlp->pfnSSMGetMem(pSSM, &Mac, sizeof(Mac));
    46114610    AssertRCReturn(rc, rc);
    46124611    if (    memcmp(&Mac, &pThis->MacConfigured, sizeof(Mac))
     
    46154614
    46164615    uint8_t     uDevType;
    4617     rc = SSMR3GetU8(pSSM, &uDevType);
     4616    rc = pHlp->pfnSSMGetU8(pSSM, &uDevType);
    46184617    AssertRCReturn(rc, rc);
    46194618    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);
    46214620
    46224621    uint32_t    u32LinkSpeed;
    4623     rc = SSMR3GetU32(pSSM, &u32LinkSpeed);
     4622    rc = pHlp->pfnSSMGetU32(pSSM, &u32LinkSpeed);
    46244623    AssertRCReturn(rc, rc);
    46254624    if (    pThis->u32LinkSpeed != u32LinkSpeed
     
    46904689 *
    46914690 * @returns VBox status code.
    4692  * @param   pThis           The PCnet instance data.
     4691 * @param   pThis           The PCnet shared instance data.
    46934692 */
    46944693static int pcnetCanReceive(PPCNETSTATE pThis)
     
    51075106    PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
    51085107    PPCNETSTATE     pThis = PDMDEVINS_2_DATA(pDevIns, PPCNETSTATE);
     5108    PCPDMDEVHLPR3   pHlp  = pDevIns->pHlpR3;
    51095109    PPDMIBASE       pBase;
    51105110    char            szTmp[128];
     
    51235123     * Validate configuration.
    51245124     */
    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                                  "");
    51295128    /*
    51305129     * Read the configuration.
    51315130     */
    5132     rc = CFGMR3QueryBytes(pCfg, "MAC", &pThis->MacConfigured, sizeof(pThis->MacConfigured));
     5131    rc = pHlp->pfnCFGMQueryBytes(pCfg, "MAC", &pThis->MacConfigured, sizeof(pThis->MacConfigured));
    51335132    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);
    51375135    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"));
    51405137
    51415138    /*
     
    51435140     */
    51445141    char szChipType[16];
    5145     rc = CFGMR3QueryStringDef(pCfg, "ChipType", &szChipType[0], sizeof(szChipType), "Am79C970A");
     5142    rc = pHlp->pfnCFGMQueryStringDef(pCfg, "ChipType", &szChipType[0], sizeof(szChipType), "Am79C970A");
    51465143    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"));
    51495145
    51505146    if (!strcmp(szChipType, "Am79C970A"))
     
    51585154        pThis->uDevType = DEV_AM79C960_EB;  /* 10 Mbps PCnet-ISA, Racal InterLink NI6510 EtherBlaster compatible. */
    51595155        /* 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. */
    51625157        if (memcmp(&pThis->MacConfigured, "\x02\x07\x01", 3))
    51635158            return PDMDevHlpVMSetError(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, RT_SRC_POS,
     
    51655160    }
    51665161    else
    5167     {
    51685162        return PDMDevHlpVMSetError(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, RT_SRC_POS,
    51695163                                   N_("Configuration error: The \"ChipType\" value \"%s\" is unsupported"),
    51705164                                   szChipType);
    5171     }
    51725165
    51735166
     
    51765169     */
    51775170    bool fAm79C973;
    5178     rc = CFGMR3QueryBoolDef(pCfg, "Am79C973", &fAm79C973, false);
     5171    rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Am79C973", &fAm79C973, false);
    51795172    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"));
    51825174    if (fAm79C973)
    51835175        pThis->uDevType = DEV_AM79C973;
     
    51865178     * Process ISA configuration options. The defaults are chosen to be NE2100/Am2100 compatible.
    51875179     */
    5188     rc = CFGMR3QueryPortDef(pCfg, "Port", &pThis->IOPortBase, 0x300);
     5180    rc = pHlp->pfnCFGMQueryPortDef(pCfg, "Port", &pThis->IOPortBase, 0x300);
    51895181    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);
    51945185    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)*/
    51995189    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 */
    52055193    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'"));
    52235195    Assert(pThis->cMsLinkUpDelay <= 300000); /* less than 5 minutes */
    52245196    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));
    52315199
    52325200
     
    53015269    {
    53025270        rc = PDMDevHlpPCIRegister(pDevIns, pPciDev);
    5303         if (RT_FAILURE(rc))
    5304             return rc;
     5271        AssertRCReturn(rc, rc);
    53055272        rc = PDMDevHlpPCIIORegionRegister(pDevIns, 0, PCNET_IOPORT_SIZE,  PCI_ADDRESS_SPACE_IO,  pcnetIOPortMap);
    5306         if (RT_FAILURE(rc))
    5307             return rc;
     5273        AssertRCReturn(rc, rc);
    53085274        rc = PDMDevHlpPCIIORegionRegister(pDevIns, 1, PCNET_PNPMMIO_SIZE, PCI_ADDRESS_SPACE_MEM, pcnetMMIOMap);
    5309         if (RT_FAILURE(rc))
    5310             return rc;
     5275        AssertRCReturn(rc, rc);
    53115276    }
    53125277
     
    53255290            return rc;
    53265291
    5327         if (pThis->fGCEnabled)
     5292        if (pDevIns->fRCEnabled)
    53285293        {
    53295294            rc = PDMDevHlpIOPortRegisterRC(pDevIns, pThis->IOPortBase, 0x10, 0, "pcnetIOPortAPromWrite",
     
    53365301                return rc;
    53375302        }
    5338         if (pThis->fR0Enabled)
     5303        if (pDevIns->fR0Enabled)
    53395304        {
    53405305            rc = PDMDevHlpIOPortRegisterR0(pDevIns, pThis->IOPortBase, 0x10, 0, "pcnetIOPortAPromWrite",
     
    53825347        rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetTimerSoftInt, pThis, /** @todo r=bird: the locking here looks bogus now with SMP... */
    53835348                                    TMTIMER_FLAGS_NO_CRIT_SECT, "PCnet SoftInt Timer", &pThis->pTimerSoftIntR3);
    5384         if (RT_FAILURE(rc))
    5385             return rc;
     5349        AssertRCReturn(rc, rc);
    53865350        pThis->pTimerSoftIntR0 = TMTimerR0Ptr(pThis->pTimerSoftIntR3);
    53875351        pThis->pTimerSoftIntRC = TMTimerRCPtr(pThis->pTimerSoftIntR3);
     
    53905354    rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetTimerRestore, pThis,
    53915355                                TMTIMER_FLAGS_NO_CRIT_SECT, "PCnet Restore Timer", &pThis->pTimerRestore);
    5392     if (RT_FAILURE(rc))
    5393         return rc;
     5356    AssertRCReturn(rc, rc);
    53945357
    53955358    rc = PDMDevHlpSSMRegisterEx(pDevIns, PCNET_SAVEDSTATE_VERSION, sizeof(*pThis), NULL,
     
    53975360                                pcnetSavePrep, pcnetSaveExec, NULL,
    53985361                                pcnetLoadPrep, pcnetLoadExec, pcnetLoadDone);
    5399     if (RT_FAILURE(rc))
    5400         return rc;
     5362    AssertRCReturn(rc, rc);
    54015363
    54025364    /*
     
    54055367    rc = PDMDevHlpQueueCreate(pDevIns, sizeof(PDMQUEUEITEMCORE), 1, 0,
    54065368                              pcnetXmitQueueConsumer, true, "PCnet-Xmit", &pThis->pXmitQueueR3);
    5407     if (RT_FAILURE(rc))
    5408         return rc;
     5369    AssertRCReturn(rc, rc);
    54095370    pThis->pXmitQueueR0 = PDMQueueR0Ptr(pThis->pXmitQueueR3);
    54105371    pThis->pXmitQueueRC = PDMQueueRCPtr(pThis->pXmitQueueR3);
     
    54155376    rc = PDMDevHlpQueueCreate(pDevIns, sizeof(PDMQUEUEITEMCORE), 1, 0,
    54165377                              pcnetCanRxQueueConsumer, true, "PCnet-Rcv", &pThis->pCanRxQueueR3);
    5417     if (RT_FAILURE(rc))
    5418         return rc;
     5378    AssertRCReturn(rc, rc);
    54195379    pThis->pCanRxQueueR0 = PDMQueueR0Ptr(pThis->pCanRxQueueR3);
    54205380    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);
    54275381
    54285382    /*
     
    54325386    if (RT_SUCCESS(rc))
    54335387        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);
    54405393
    54415394    /*
     
    54655418    pcnetR3HardReset(pDevIns, pThis);
    54665419
    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");
    54725436
    54735437#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 */
    55045486    unsigned i;
    55055487    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);
    55085492
    55095493    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);
    55315498#endif /* VBOX_WITH_STATISTICS */
    55325499
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