VirtualBox

Changeset 91882 in vbox


Ignore:
Timestamp:
Oct 20, 2021 11:41:52 AM (3 years ago)
Author:
vboxsync
Message:

Devices/Storage: Change the USB mass storage device emulations to access the CFGM and SSM API through the USB helper callback table only, bugref:10074

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/UsbMsd.cpp

    r90791 r91882  
    13481348{
    13491349    RT_NOREF(uPass);
    1350     PUSBMSD pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     1350    PUSBMSD     pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     1351    PCPDMUSBHLP pHlp  = pUsbIns->pHlpR3;
    13511352
    13521353    /* config. */
    1353     SSMR3PutBool(pSSM, pThis->Lun0.pIBase != NULL);
     1354    pHlp->pfnSSMPutBool(pSSM, pThis->Lun0.pIBase != NULL);
    13541355    return VINF_SSM_DONT_CALL_AGAIN;
    13551356}
     
    13601361static DECLCALLBACK(int) usbMsdSaveExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
    13611362{
    1362     PUSBMSD pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
    1363     int rc;
     1363    PUSBMSD     pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     1364    PCPDMUSBHLP pHlp  = pUsbIns->pHlpR3;
    13641365
    13651366    /* The config */
    1366     rc = usbMsdLiveExec(pUsbIns, pSSM, SSM_PASS_FINAL);
     1367    int rc = usbMsdLiveExec(pUsbIns, pSSM, SSM_PASS_FINAL);
    13671368    AssertRCReturn(rc, rc);
    13681369
    1369     SSMR3PutU8(pSSM, pThis->bConfigurationValue);
    1370     SSMR3PutBool(pSSM, pThis->aEps[0].fHalted);
    1371     SSMR3PutBool(pSSM, pThis->aEps[1].fHalted);
    1372     SSMR3PutBool(pSSM, pThis->aEps[2].fHalted);
    1373     SSMR3PutBool(pSSM, pThis->pReq != NULL);
     1370    pHlp->pfnSSMPutU8(pSSM, pThis->bConfigurationValue);
     1371    pHlp->pfnSSMPutBool(pSSM, pThis->aEps[0].fHalted);
     1372    pHlp->pfnSSMPutBool(pSSM, pThis->aEps[1].fHalted);
     1373    pHlp->pfnSSMPutBool(pSSM, pThis->aEps[2].fHalted);
     1374    pHlp->pfnSSMPutBool(pSSM, pThis->pReq != NULL);
    13741375
    13751376    if (pThis->pReq)
     
    13771378        PUSBMSDREQ pReq = pThis->pReq;
    13781379
    1379         SSMR3PutU32(pSSM, pReq->enmState);
    1380         SSMR3PutU32(pSSM, pReq->cbBuf);
     1380        pHlp->pfnSSMPutU32(pSSM, pReq->enmState);
     1381        pHlp->pfnSSMPutU32(pSSM, pReq->cbBuf);
    13811382        if (pReq->cbBuf)
    13821383        {
    13831384            AssertPtr(pReq->pbBuf);
    1384             SSMR3PutMem(pSSM, pReq->pbBuf, pReq->cbBuf);
     1385            pHlp->pfnSSMPutMem(pSSM, pReq->pbBuf, pReq->cbBuf);
    13851386        }
    13861387
    1387         SSMR3PutU32(pSSM, pReq->offBuf);
    1388         SSMR3PutMem(pSSM, &pReq->Cbw, sizeof(pReq->Cbw));
    1389         SSMR3PutU8(pSSM, pReq->iScsiReqStatus);
    1390     }
    1391 
    1392     return SSMR3PutU32(pSSM, UINT32_MAX); /* sanity/terminator */
     1388        pHlp->pfnSSMPutU32(pSSM, pReq->offBuf);
     1389        pHlp->pfnSSMPutMem(pSSM, &pReq->Cbw, sizeof(pReq->Cbw));
     1390        pHlp->pfnSSMPutU8(pSSM, pReq->iScsiReqStatus);
     1391    }
     1392
     1393    return pHlp->pfnSSMPutU32(pSSM, UINT32_MAX); /* sanity/terminator */
    13931394}
    13941395
     
    13981399static DECLCALLBACK(int) usbMsdLoadExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
    13991400{
    1400     PUSBMSD pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
    1401     uint32_t u32;
    1402     int rc;
     1401    PUSBMSD     pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     1402    PCPDMUSBHLP pHlp  = pUsbIns->pHlpR3;
    14031403
    14041404    if (uVersion > USB_MSD_SAVED_STATE_VERSION)
     
    14071407    /* Verify config. */
    14081408    bool fInUse;
    1409     rc = SSMR3GetBool(pSSM, &fInUse);
     1409    int rc = pHlp->pfnSSMGetBool(pSSM, &fInUse);
    14101410    AssertRCReturn(rc, rc);
    14111411    if (fInUse != (pThis->Lun0.pIBase != NULL))
    1412         return SSMR3SetCfgError(pSSM, RT_SRC_POS,
    1413                                 N_("The %s VM is missing a USB mass storage device. Please make sure the source and target VMs have compatible storage configurations"),
    1414                                 fInUse ? "target" : "source");
     1412        return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS,
     1413                                       N_("The %s VM is missing a USB mass storage device. Please make sure the source and target VMs have compatible storage configurations"),
     1414                                       fInUse ? "target" : "source");
    14151415
    14161416    if (uPass == SSM_PASS_FINAL)
     
    14191419        Assert(!pThis->pReq);
    14201420
    1421         SSMR3GetU8(pSSM, &pThis->bConfigurationValue);
    1422         SSMR3GetBool(pSSM, &pThis->aEps[0].fHalted);
    1423         SSMR3GetBool(pSSM, &pThis->aEps[1].fHalted);
    1424         SSMR3GetBool(pSSM, &pThis->aEps[2].fHalted);
     1421        pHlp->pfnSSMGetU8(pSSM, &pThis->bConfigurationValue);
     1422        pHlp->pfnSSMGetBool(pSSM, &pThis->aEps[0].fHalted);
     1423        pHlp->pfnSSMGetBool(pSSM, &pThis->aEps[1].fHalted);
     1424        pHlp->pfnSSMGetBool(pSSM, &pThis->aEps[2].fHalted);
    14251425        bool fReqAlloc = false;
    1426         rc = SSMR3GetBool(pSSM, &fReqAlloc);
     1426        rc = pHlp->pfnSSMGetBool(pSSM, &fReqAlloc);
    14271427        AssertRCReturn(rc, rc);
    14281428        if (fReqAlloc)
     
    14331433
    14341434            AssertCompile(sizeof(pReq->enmState) == sizeof(uint32_t));
    1435             SSMR3GetU32(pSSM, (uint32_t *)&pReq->enmState);
     1435            pHlp->pfnSSMGetU32(pSSM, (uint32_t *)&pReq->enmState);
    14361436
    14371437            uint32_t cbBuf = 0;
    1438             rc = SSMR3GetU32(pSSM, &cbBuf);
     1438            rc = pHlp->pfnSSMGetU32(pSSM, &cbBuf);
    14391439            AssertRCReturn(rc, rc);
    14401440            if (cbBuf)
     
    14441444                    AssertPtr(pReq->pbBuf);
    14451445                    Assert(cbBuf == pReq->cbBuf);
    1446                     SSMR3GetMem(pSSM, pReq->pbBuf, pReq->cbBuf);
     1446                    pHlp->pfnSSMGetMem(pSSM, pReq->pbBuf, pReq->cbBuf);
    14471447                }
    14481448                else
     
    14501450            }
    14511451
    1452             SSMR3GetU32(pSSM, &pReq->offBuf);
    1453             SSMR3GetMem(pSSM, &pReq->Cbw, sizeof(pReq->Cbw));
     1452            pHlp->pfnSSMGetU32(pSSM, &pReq->offBuf);
     1453            pHlp->pfnSSMGetMem(pSSM, &pReq->Cbw, sizeof(pReq->Cbw));
    14541454
    14551455            if (uVersion > USB_MSD_SAVED_STATE_VERSION_PRE_CLEANUP)
    1456                 rc = SSMR3GetU8(pSSM, &pReq->iScsiReqStatus);
     1456                rc = pHlp->pfnSSMGetU8(pSSM, &pReq->iScsiReqStatus);
    14571457            else
    14581458            {
     
    14601460
    14611461                /* Skip old fields which are unused now or can be determined from the CBW. */
    1462                 SSMR3Skip(pSSM, 4 * 4 + 64);
    1463                 rc = SSMR3GetS32(pSSM, &iScsiReqStatus);
     1462                pHlp->pfnSSMSkip(pSSM, 4 * 4 + 64);
     1463                rc = pHlp->pfnSSMGetS32(pSSM, &iScsiReqStatus);
    14641464                pReq->iScsiReqStatus = (uint8_t)iScsiReqStatus;
    14651465            }
     
    14671467        }
    14681468
    1469         rc = SSMR3GetU32(pSSM, &u32);
     1469        uint32_t u32;
     1470        rc = pHlp->pfnSSMGetU32(pSSM, &u32);
    14701471        AssertRCReturn(rc, rc);
    14711472        AssertMsgReturn(u32 == UINT32_MAX, ("%#x\n", u32), VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
     
    22552256    RT_NOREF(pCfgGlobal);
    22562257    PDMUSB_CHECK_VERSIONS_RETURN(pUsbIns);
    2257     PUSBMSD pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     2258    PUSBMSD     pThis = PDMINS_2_DATA(pUsbIns, PUSBMSD);
     2259    PCPDMUSBHLP pHlp  = pUsbIns->pHlpR3;
     2260
    22582261    Log(("usbMsdConstruct/#%u:\n", iInstance));
    22592262
     
    22882291     * Validate and read the configuration.
    22892292     */
    2290     rc = CFGMR3ValidateConfig(pCfg, "/", "", "", "UsbMsd", iInstance);
     2293    rc = pHlp->pfnCFGMValidateConfig(pCfg, "/", "", "", "UsbMsd", iInstance);
    22912294    if (RT_FAILURE(rc))
    22922295        return rc;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette