VirtualBox

Changeset 64002 in vbox for trunk/src/VBox/Devices/Samples


Ignore:
Timestamp:
Sep 26, 2016 11:40:57 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
110910
Message:

Devices/Storage: Throw out PDMIMEDIAASYNC which is superseded by PDMIMEDIAEX now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Samples/DrvStorageFilter.cpp

    r63886 r64002  
    4141    PDMIMEDIA           IMedia;
    4242    PDMIMEDIAPORT       IMediaPort;
    43     PDMIMEDIAASYNC      IMediaAsync;
    44     PDMIMEDIAASYNCPORT  IMediaAsyncPort;
     43    PDMIMEDIAEX         IMediaEx;
     44    PDMIMEDIAEXPORT     IMediaExPort;
    4545    /** @}  */
    4646
     
    4848     * @{ */
    4949    PPDMIMEDIA          pIMediaBelow;
    50     PPDMIMEDIAASYNC     pIMediaAsyncBelow;
     50    PPDMIMEDIAEX        pIMediaExBelow;
    5151    /** @} */
    5252
     
    5454     * @{ */
    5555    PPDMIMEDIAPORT      pIMediaPortAbove;
    56     PPDMIMEDIAASYNCPORT pIMediaAsyncPortAbove;
     56    PPDMIMEDIAEXPORT    pIMediaExPortAbove;
    5757    /** @} */
    5858
     
    6969/*
    7070 *
    71  * IMediaAsyncPort Implementation.
    72  *
    73  */
    74 
    75 /** @interface_method_impl{PDMIMEDIAASYNCPORT,pfnTransferCompleteNotify} */
    76 static DECLCALLBACK(int)
    77 drvStorageFltIMediaAsyncPort_TransferCompleteNotify(PPDMIMEDIAASYNCPORT pInterface, void *pvUser, int rcReq)
    78 {
    79     PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaAsyncPort);
    80     int rc = pThis->pIMediaAsyncPortAbove->pfnTransferCompleteNotify(pThis->pIMediaAsyncPortAbove, pvUser, rcReq);
    81     return rc;
    82 }
    83 
    84 
    85 /*
    86  *
    87  * IMediaAsync Implementation.
    88  *
    89  */
    90 
    91 /** @interface_method_impl{PDMIMEDIAASYNC,pfnStartRead} */
    92 static DECLCALLBACK(int) drvStorageFltIMediaAsync_StartRead(PPDMIMEDIAASYNC pInterface, uint64_t off,
    93                                                             PCRTSGSEG paSegs, unsigned cSegs, size_t cbRead, void *pvUser)
    94 {
    95     PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaAsync);
    96     int rc = pThis->pIMediaAsyncBelow->pfnStartRead(pThis->pIMediaAsyncBelow, off, paSegs, cSegs, cbRead, pvUser);
    97     return rc;
    98 }
    99 
    100 /** @interface_method_impl{PDMIMEDIAASYNC,pfnStartWrite} */
    101 static DECLCALLBACK(int) drvStorageFltIMediaAsync_StartWrite(PPDMIMEDIAASYNC pInterface, uint64_t off,
    102                                                              PCRTSGSEG paSegs, unsigned cSegs, size_t cbWrite, void *pvUser)
    103 {
    104     PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaAsync);
    105     int rc = pThis->pIMediaAsyncBelow->pfnStartWrite(pThis->pIMediaAsyncBelow, off, paSegs, cSegs, cbWrite, pvUser);
    106     return rc;
    107 }
    108 
    109 /** @interface_method_impl{PDMIMEDIAASYNC,pfnStartFlush} */
    110 static DECLCALLBACK(int) drvStorageFltIMediaAsync_StartFlush(PPDMIMEDIAASYNC pInterface, void *pvUser)
    111 {
    112     PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaAsync);
    113     int rc = pThis->pIMediaAsyncBelow->pfnStartFlush(pThis->pIMediaAsyncBelow, pvUser);
    114     return rc;
    115 }
    116 
    117 
    118 /** @interface_method_impl{PDMIMEDIAASYNC,pfnStartDiscard} */
    119 static DECLCALLBACK(int) drvStorageFltIMediaAsync_StartDiscard(PPDMIMEDIAASYNC pInterface, PCRTRANGE paRanges,
    120                                                                unsigned cRanges, void *pvUser)
    121 {
    122     PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaAsync);
    123     int rc = pThis->pIMediaAsyncBelow->pfnStartDiscard(pThis->pIMediaAsyncBelow, paRanges, cRanges, pvUser);
    124     return rc;
    125 }
    126 
    127 
    128 /*
    129  *
    130  * IMedia Implementation.
     71 * IMediaPort Implementation.
    13172 *
    13273 */
     
    242183    int rc = pThis->pIMediaBelow->pfnDiscard(pThis->pIMediaBelow, paRanges, cRanges);
    243184    return rc;
     185}
     186
     187
     188/*
     189 *
     190 * IMediaExPort Implementation.
     191 *
     192 */
     193
     194/** @interface_method_impl{PDMIMEDIAEXPORT,pfnIoReqCompleteNotify} */
     195static DECLCALLBACK(int) drvStorageFltIMedia_IoReqCompleteNotify(PPDMIMEDIAEXPORT pInterface, PDMMEDIAEXIOREQ hIoReq,
     196                                                                 void *pvIoReqAlloc, int rcReq)
     197{
     198    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaExPort);
     199    return pThis->pIMediaExPortAbove->pfnIoReqCompleteNotify(pThis->pIMediaExPortAbove, hIoReq, pvIoReqAlloc, rcReq);
     200}
     201
     202
     203/** @interface_method_impl{PDMIMEDIAEXPORT,pfnIoReqCopyFromBuf} */
     204static DECLCALLBACK(int) drvStorageFltIMedia_IoReqCopyFromBuf(PPDMIMEDIAEXPORT pInterface, PDMMEDIAEXIOREQ hIoReq,
     205                                                              void *pvIoReqAlloc, uint32_t offDst, PRTSGBUF pSgBuf,
     206                                                              size_t cbCopy)
     207{
     208    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaExPort);
     209    return pThis->pIMediaExPortAbove->pfnIoReqCopyFromBuf(pThis->pIMediaExPortAbove, hIoReq, pvIoReqAlloc,
     210                                                       offDst, pSgBuf, cbCopy);
     211}
     212
     213/** @interface_method_impl{PDMIMEDIAEXPORT,pfnIoReqCopyToBuf} */
     214static DECLCALLBACK(int) drvStorageFltIMedia_IoReqCopyToBuf(PPDMIMEDIAEXPORT pInterface, PDMMEDIAEXIOREQ hIoReq,
     215                                              void *pvIoReqAlloc, uint32_t offSrc, PRTSGBUF pSgBuf,
     216                                              size_t cbCopy)
     217{
     218    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaExPort);
     219    return pThis->pIMediaExPortAbove->pfnIoReqCopyToBuf(pThis->pIMediaExPortAbove, hIoReq, pvIoReqAlloc,
     220                                                     offSrc, pSgBuf, cbCopy);
     221}
     222
     223/** @interface_method_impl{PDMIMEDIAEXPORT,pfnIoReqQueryDiscardRanges} */
     224static DECLCALLBACK(int) drvStorageFltIMedia_IoReqQueryDiscardRanges(PPDMIMEDIAEXPORT pInterface, PDMMEDIAEXIOREQ hIoReq,
     225                                                       void *pvIoReqAlloc, uint32_t idxRangeStart,
     226                                                       uint32_t cRanges, PRTRANGE paRanges,
     227                                                       uint32_t *pcRanges)
     228{
     229    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaExPort);
     230    return pThis->pIMediaExPortAbove->pfnIoReqQueryDiscardRanges(pThis->pIMediaExPortAbove, hIoReq, pvIoReqAlloc,
     231                                                              idxRangeStart, cRanges, paRanges, pcRanges);
     232}
     233
     234/** @interface_method_impl{PDMIMEDIAEXPORT,pfnIoReqStateChanged} */
     235static DECLCALLBACK(void) drvStorageFltIMedia_IoReqStateChanged(PPDMIMEDIAEXPORT pInterface, PDMMEDIAEXIOREQ hIoReq,
     236                                                                void *pvIoReqAlloc, PDMMEDIAEXIOREQSTATE enmState)
     237{
     238    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaExPort);
     239    return pThis->pIMediaExPortAbove->pfnIoReqStateChanged(pThis->pIMediaExPortAbove, hIoReq, pvIoReqAlloc, enmState);
     240}
     241
     242
     243/*
     244 *
     245 * IMediaEx Implementation.
     246 *
     247 */
     248
     249/** @interface_method_impl{PDMIMEDIAEX,pfnQueryFeatures} */
     250static DECLCALLBACK(int) drvStorageFltIMedia_QueryFeatures(PPDMIMEDIAEX pInterface, uint32_t *pfFeatures)
     251{
     252    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     253
     254    int rc = pThis->pIMediaExBelow->pfnQueryFeatures(pThis->pIMediaExBelow, pfFeatures);
     255    if (RT_SUCCESS(rc) && !pThis->fAsyncIOSupported)
     256        *pfFeatures &= ~PDMIMEDIAEX_FEATURE_F_ASYNC;
     257
     258    return rc;
     259}
     260
     261/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqAllocSizeSet} */
     262static DECLCALLBACK(int) drvStorageFltIMedia_IoReqAllocSizeSet(PPDMIMEDIAEX pInterface, size_t cbIoReqAlloc)
     263{
     264    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     265    return pThis->pIMediaExBelow->pfnIoReqAllocSizeSet(pThis->pIMediaExBelow, cbIoReqAlloc);
     266}
     267
     268/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqAlloc} */
     269static DECLCALLBACK(int) drvStorageFltIMedia_IoReqAlloc(PPDMIMEDIAEX pInterface, PPDMMEDIAEXIOREQ phIoReq, void **ppvIoReqAlloc,
     270                                                        PDMMEDIAEXIOREQID uIoReqId, uint32_t fFlags)
     271{
     272    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     273
     274    if (!pThis->fAsyncIOSupported)
     275        fFlags |= PDMIMEDIAEX_F_SYNC;
     276    return pThis->pIMediaExBelow->pfnIoReqAlloc(pThis->pIMediaExBelow, phIoReq, ppvIoReqAlloc, uIoReqId, fFlags);
     277}
     278
     279/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqFree} */
     280static DECLCALLBACK(int) drvStorageFltIMedia_IoReqFree(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq)
     281{
     282    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     283    return pThis->pIMediaExBelow->pfnIoReqFree(pThis->pIMediaExBelow, hIoReq);
     284}
     285
     286/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqQueryResidual} */
     287static DECLCALLBACK(int) drvStorageFltIMedia_IoReqQueryResidual(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq, size_t *pcbResidual)
     288{
     289    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     290    return pThis->pIMediaExBelow->pfnIoReqQueryResidual(pThis->pIMediaExBelow, hIoReq, pcbResidual);
     291}
     292
     293/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqCancelAll} */
     294static DECLCALLBACK(int) drvStorageFltIMedia_IoReqCancelAll(PPDMIMEDIAEX pInterface)
     295{
     296    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     297    return pThis->pIMediaExBelow->pfnIoReqCancelAll(pThis->pIMediaExBelow);
     298}
     299
     300/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqCancel} */
     301static DECLCALLBACK(int) drvStorageFltIMedia_IoReqCancel(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQID uIoReqId)
     302{
     303    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     304    return pThis->pIMediaExBelow->pfnIoReqCancel(pThis->pIMediaExBelow, uIoReqId);
     305}
     306
     307/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqRead} */
     308static DECLCALLBACK(int) drvStorageFltIMedia_IoReqRead(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq, uint64_t off, size_t cbRead)
     309{
     310    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     311    return pThis->pIMediaExBelow->pfnIoReqRead(pThis->pIMediaExBelow, hIoReq, off, cbRead);
     312}
     313
     314/**
     315 * @interface_method_impl{PDMIMEDIAEX,pfnIoReqWrite}
     316 */
     317static DECLCALLBACK(int) drvStorageFltIMedia_IoReqWrite(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq, uint64_t off, size_t cbWrite)
     318{
     319    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     320    return pThis->pIMediaExBelow->pfnIoReqWrite(pThis->pIMediaExBelow, hIoReq, off, cbWrite);
     321}
     322
     323/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqFlush} */
     324static DECLCALLBACK(int) drvStorageFltIMedia_IoReqFlush(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq)
     325{
     326    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     327    return pThis->pIMediaExBelow->pfnIoReqFlush(pThis->pIMediaExBelow, hIoReq);
     328}
     329
     330/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqDiscard} */
     331static DECLCALLBACK(int) drvStorageFltIMedia_IoReqDiscard(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq, unsigned cRangesMax)
     332{
     333    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     334    return pThis->pIMediaExBelow->pfnIoReqDiscard(pThis->pIMediaExBelow, hIoReq, cRangesMax);
     335}
     336
     337/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqSendScsiCmd} */
     338static DECLCALLBACK(int) drvStorageFltIMedia_IoReqSendScsiCmd(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq, uint32_t uLun,
     339                                                              const uint8_t *pbCdb, size_t cbCdb, PDMMEDIAEXIOREQSCSITXDIR enmTxDir,
     340                                                              size_t cbBuf, uint8_t *pabSense, size_t cbSense, uint32_t cTimeoutMillies)
     341{
     342    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     343    return pThis->pIMediaExBelow->pfnIoReqSendScsiCmd(pThis->pIMediaExBelow, hIoReq, uLun, pbCdb, cbCdb,
     344                                                      enmTxDir, cbBuf, pabSense, cbSense, cTimeoutMillies);
     345}
     346
     347/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqGetActiveCount} */
     348static DECLCALLBACK(uint32_t) drvStorageFltIMedia_IoReqGetActiveCount(PPDMIMEDIAEX pInterface)
     349{
     350    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     351    return pThis->pIMediaExBelow->pfnIoReqGetActiveCount(pThis->pIMediaExBelow);
     352}
     353
     354/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqGetSuspendedCount} */
     355static DECLCALLBACK(uint32_t) drvStorageFltIMedia_IoReqGetSuspendedCount(PPDMIMEDIAEX pInterface)
     356{
     357    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     358    return pThis->pIMediaExBelow->pfnIoReqGetSuspendedCount(pThis->pIMediaExBelow);
     359}
     360
     361/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqQuerySuspendedFirst} */
     362static DECLCALLBACK(int) drvStorageFltIMedia_IoReqQuerySuspendedStart(PPDMIMEDIAEX pInterface, PPDMMEDIAEXIOREQ phIoReq,
     363                                                                      void **ppvIoReqAlloc)
     364{
     365    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     366    return pThis->pIMediaExBelow->pfnIoReqQuerySuspendedStart(pThis->pIMediaExBelow, phIoReq, ppvIoReqAlloc);
     367}
     368
     369/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqQuerySuspendedNext} */
     370static DECLCALLBACK(int) drvStorageFltIMedia_IoReqQuerySuspendedNext(PPDMIMEDIAEX pInterface, PDMMEDIAEXIOREQ hIoReq,
     371                                                                     PPDMMEDIAEXIOREQ phIoReqNext, void **ppvIoReqAllocNext)
     372{
     373    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     374    return pThis->pIMediaExBelow->pfnIoReqQuerySuspendedNext(pThis->pIMediaExBelow, hIoReq, phIoReqNext, ppvIoReqAllocNext);
     375}
     376
     377/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqSuspendedSave} */
     378static DECLCALLBACK(int) drvStorageFltIMedia_IoReqSuspendedSave(PPDMIMEDIAEX pInterface, PSSMHANDLE pSSM, PDMMEDIAEXIOREQ hIoReq)
     379{
     380    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     381    return pThis->pIMediaExBelow->pfnIoReqSuspendedSave(pThis->pIMediaExBelow, pSSM, hIoReq);
     382}
     383
     384/** @interface_method_impl{PDMIMEDIAEX,pfnIoReqSuspendedLoad} */
     385static DECLCALLBACK(int) drvStorageFltIMedia_IoReqSuspendedLoad(PPDMIMEDIAEX pInterface, PSSMHANDLE pSSM, PDMMEDIAEXIOREQ hIoReq)
     386{
     387    PDRVSTORAGEFILTER pThis = RT_FROM_MEMBER(pInterface, DRVSTORAGEFILTER, IMediaEx);
     388    return pThis->pIMediaExBelow->pfnIoReqSuspendedLoad(pThis->pIMediaExBelow, pSSM, hIoReq);
    244389}
    245390
     
    262407    if (pThis->pIMediaPortAbove)
    263408        PDMIBASE_RETURN_INTERFACE(pszIID, PDMIMEDIAPORT, &pThis->IMediaPort);
    264 
    265     if (pThis->fAsyncIOSupported && pThis->pIMediaAsyncBelow)
    266         PDMIBASE_RETURN_INTERFACE(pszIID, PDMIMEDIAASYNC, &pThis->IMediaAsync);
    267     if (pThis->fAsyncIOSupported && pThis->pIMediaAsyncPortAbove)
    268         PDMIBASE_RETURN_INTERFACE(pszIID, PDMIMEDIAASYNCPORT, &pThis->IMediaAsyncPort);
     409    if (pThis->pIMediaExBelow)
     410        PDMIBASE_RETURN_INTERFACE(pszIID, PDMIMEDIAEX, &pThis->IMediaEx);
     411    if (pThis->pIMediaExPortAbove)
     412        PDMIBASE_RETURN_INTERFACE(pszIID, PDMIMEDIAEXPORT, &pThis->IMediaExPort);
     413
    269414    return NULL;
    270415}
     
    307452    pThis->IMedia.pfnDiscard             = drvStorageFltIMedia_Discard;
    308453
     454    pThis->IMediaEx.pfnQueryFeatures            = drvStorageFltIMedia_QueryFeatures;
     455    pThis->IMediaEx.pfnIoReqAllocSizeSet        = drvStorageFltIMedia_IoReqAllocSizeSet;
     456    pThis->IMediaEx.pfnIoReqAlloc               = drvStorageFltIMedia_IoReqAlloc;
     457    pThis->IMediaEx.pfnIoReqFree                = drvStorageFltIMedia_IoReqFree;
     458    pThis->IMediaEx.pfnIoReqQueryResidual       = drvStorageFltIMedia_IoReqQueryResidual;
     459    pThis->IMediaEx.pfnIoReqCancelAll           = drvStorageFltIMedia_IoReqCancelAll;
     460    pThis->IMediaEx.pfnIoReqCancel              = drvStorageFltIMedia_IoReqCancel;
     461    pThis->IMediaEx.pfnIoReqRead                = drvStorageFltIMedia_IoReqRead;
     462    pThis->IMediaEx.pfnIoReqWrite               = drvStorageFltIMedia_IoReqWrite;
     463    pThis->IMediaEx.pfnIoReqFlush               = drvStorageFltIMedia_IoReqFlush;
     464    pThis->IMediaEx.pfnIoReqDiscard             = drvStorageFltIMedia_IoReqDiscard;
     465    pThis->IMediaEx.pfnIoReqSendScsiCmd         = drvStorageFltIMedia_IoReqSendScsiCmd;
     466    pThis->IMediaEx.pfnIoReqGetActiveCount      = drvStorageFltIMedia_IoReqGetActiveCount;
     467    pThis->IMediaEx.pfnIoReqGetSuspendedCount   = drvStorageFltIMedia_IoReqGetSuspendedCount;
     468    pThis->IMediaEx.pfnIoReqQuerySuspendedStart = drvStorageFltIMedia_IoReqQuerySuspendedStart;
     469    pThis->IMediaEx.pfnIoReqQuerySuspendedNext  = drvStorageFltIMedia_IoReqQuerySuspendedNext;
     470    pThis->IMediaEx.pfnIoReqSuspendedSave       = drvStorageFltIMedia_IoReqSuspendedSave;
     471    pThis->IMediaEx.pfnIoReqSuspendedLoad       = drvStorageFltIMedia_IoReqSuspendedLoad;
     472
    309473    pThis->IMediaPort.pfnQueryDeviceLocation = drvStorageFltIMediaPort_QueryDeviceLocation;
    310474
    311     pThis->IMediaAsync.pfnStartRead      = drvStorageFltIMediaAsync_StartRead;
    312     pThis->IMediaAsync.pfnStartWrite     = drvStorageFltIMediaAsync_StartWrite;
    313     pThis->IMediaAsync.pfnStartFlush     = drvStorageFltIMediaAsync_StartFlush;
    314     pThis->IMediaAsync.pfnStartDiscard   = drvStorageFltIMediaAsync_StartDiscard;
    315 
    316     pThis->IMediaAsyncPort.pfnTransferCompleteNotify = drvStorageFltIMediaAsyncPort_TransferCompleteNotify;
     475    pThis->IMediaExPort.pfnIoReqCompleteNotify     = drvStorageFltIMedia_IoReqCompleteNotify;
     476    pThis->IMediaExPort.pfnIoReqCopyFromBuf        = drvStorageFltIMedia_IoReqCopyFromBuf;
     477    pThis->IMediaExPort.pfnIoReqCopyToBuf          = drvStorageFltIMedia_IoReqCopyToBuf;
     478    pThis->IMediaExPort.pfnIoReqQueryDiscardRanges = drvStorageFltIMedia_IoReqQueryDiscardRanges;
     479    pThis->IMediaExPort.pfnIoReqStateChanged       = drvStorageFltIMedia_IoReqStateChanged;
    317480
    318481    /*
     
    327490     * Query interfaces from the driver/device above us.
    328491     */
    329     pThis->pIMediaPortAbove      = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIMEDIAPORT);
    330     pThis->pIMediaAsyncPortAbove = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIMEDIAASYNCPORT);
     492    pThis->pIMediaPortAbove   = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIMEDIAPORT);
     493    pThis->pIMediaExPortAbove = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIMEDIAEXPORT);
    331494
    332495    /*
     
    337500    AssertLogRelRCReturn(rc, rc);
    338501
    339     pThis->pIMediaBelow      = PDMIBASE_QUERY_INTERFACE(pIBaseBelow, PDMIMEDIA);
    340     pThis->pIMediaAsyncBelow = PDMIBASE_QUERY_INTERFACE(pIBaseBelow, PDMIMEDIAASYNC);
     502    pThis->pIMediaBelow   = PDMIBASE_QUERY_INTERFACE(pIBaseBelow, PDMIMEDIA);
     503    pThis->pIMediaExBelow = PDMIBASE_QUERY_INTERFACE(pIBaseBelow, PDMIMEDIAEX);
    341504
    342505    AssertLogRelReturn(pThis->pIMediaBelow, VERR_PDM_MISSING_INTERFACE_BELOW);
     
    344507    if (!pThis->pIMediaBelow->pfnDiscard)
    345508        pThis->IMedia.pfnDiscard = NULL;
    346     if (!pThis->pIMediaAsyncBelow || !pThis->pIMediaAsyncBelow->pfnStartDiscard)
    347         pThis->IMediaAsync.pfnStartDiscard = NULL;
    348509
    349510    return VINF_SUCCESS;
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