summaryrefslogtreecommitdiff
path: root/src/VBox/Main/src-client/UsbCardReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Main/src-client/UsbCardReader.cpp')
-rw-r--r--src/VBox/Main/src-client/UsbCardReader.cpp381
1 files changed, 193 insertions, 188 deletions
diff --git a/src/VBox/Main/src-client/UsbCardReader.cpp b/src/VBox/Main/src-client/UsbCardReader.cpp
index f7a7bc5b..477beeff 100644
--- a/src/VBox/Main/src-client/UsbCardReader.cpp
+++ b/src/VBox/Main/src-client/UsbCardReader.cpp
@@ -1,5 +1,4 @@
/* $Id: UsbCardReader.cpp $ */
-
/** @file
* UsbCardReader - Driver Interface to USB Smart Card Reader emulation.
*/
@@ -69,9 +68,9 @@ static DECLCALLBACK(void) drvCardReaderCmdStatusChange(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpSetStatusChange(pThis->pICardReaderUp,
- pvUser, VRDE_SCARD_E_NO_SMARTCARD,
- paReaderStats, cReaderStats);
+ pThis->pICardReaderUp->pfnSetStatusChange(pThis->pICardReaderUp,
+ pvUser, VRDE_SCARD_E_NO_SMARTCARD,
+ paReaderStats, cReaderStats);
}
else
{
@@ -90,8 +89,8 @@ static DECLCALLBACK(void) drvCardReaderCmdEstablishContext(PUSBCARDREADER pThis)
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpEstablishContext(pThis->pICardReaderUp,
- VRDE_SCARD_E_NO_SMARTCARD);
+ pThis->pICardReaderUp->pfnEstablishContext(pThis->pICardReaderUp,
+ VRDE_SCARD_E_NO_SMARTCARD);
}
else
{
@@ -130,15 +129,15 @@ static DECLCALLBACK(void) drvCardReaderCmdStatus(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpStatus(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- /* pszReaderName */ NULL,
- /* cchReaderName */ 0,
- /* u32CardState */ 0,
- /* u32Protocol */ 0,
- /* pu8Atr */ 0,
- /* cbAtr */ 0);
+ pThis->pICardReaderUp->pfnStatus(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ /* pszReaderName */ NULL,
+ /* cchReaderName */ 0,
+ /* u32CardState */ 0,
+ /* u32Protocol */ 0,
+ /* pu8Atr */ 0,
+ /* cbAtr */ 0);
}
else
{
@@ -160,10 +159,10 @@ static DECLCALLBACK(void) drvCardReaderCmdConnect(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpConnect(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- 0);
+ pThis->pICardReaderUp->pfnConnect(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ 0);
}
else
{
@@ -184,9 +183,9 @@ static DECLCALLBACK(void) drvCardReaderCmdDisconnect(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpDisconnect(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD);
+ pThis->pICardReaderUp->pfnDisconnect(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD);
}
else
{
@@ -209,12 +208,12 @@ static DECLCALLBACK(void) drvCardReaderCmdTransmit(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpTransmit(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- /* pioRecvPci */ NULL,
- /* pu8RecvBuffer */ NULL,
- /* cbRecvBuffer*/ 0);
+ pThis->pICardReaderUp->pfnTransmit(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ /* pioRecvPci */ NULL,
+ /* pu8RecvBuffer */ NULL,
+ /* cbRecvBuffer*/ 0);
}
else
{
@@ -240,12 +239,12 @@ static DECLCALLBACK(void) drvCardReaderCmdGetAttr(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpGetAttrib(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- u32AttrId,
- /* pvAttrib */ NULL,
- /* cbAttrib */ 0);
+ pThis->pICardReaderUp->pfnGetAttrib(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ u32AttrId,
+ /* pvAttrib */ NULL,
+ /* cbAttrib */ 0);
}
else
{
@@ -267,10 +266,10 @@ static DECLCALLBACK(void) drvCardReaderCmdSetAttr(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpSetAttrib(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- u32AttrId);
+ pThis->pICardReaderUp->pfnSetAttrib(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ u32AttrId);
}
else
{
@@ -296,12 +295,12 @@ static DECLCALLBACK(void) drvCardReaderCmdControl(PUSBCARDREADER pThis,
UsbCardReader *pUsbCardReader = pThis->pUsbCardReader;
if (!pUsbCardReader)
{
- pThis->pICardReaderUp->pfnCardReaderUpControl(pThis->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- u32ControlCode,
- /* pvOutBuffer */ NULL,
- /* cbOutBuffer */ 0);
+ pThis->pICardReaderUp->pfnControl(pThis->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ u32ControlCode,
+ /* pvOutBuffer */ NULL,
+ /* cbOutBuffer */ 0);
}
else
{
@@ -891,11 +890,11 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpSetStatusChange(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pCtx->u.GetStatusChange.paReaderStats,
- pCtx->u.GetStatusChange.cReaderStats);
+ mpDrv->pICardReaderUp->pfnSetStatusChange(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pCtx->u.GetStatusChange.paReaderStats,
+ pCtx->u.GetStatusChange.cReaderStats);
RTMemFree(pCtx);
} break;
@@ -942,10 +941,10 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpConnect(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- u32ActiveProtocol);
+ mpDrv->pICardReaderUp->pfnConnect(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ u32ActiveProtocol);
RTMemFree(pCtx);
} break;
@@ -984,9 +983,9 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
rcCard = pRsp->u32ReturnCode;
}
- mpDrv->pICardReaderUp->pfnCardReaderUpDisconnect(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard);
+ mpDrv->pICardReaderUp->pfnDisconnect(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard);
RTMemFree(pCtx);
} break;
@@ -1054,7 +1053,7 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
if (pRsp->u32ReturnCode == VRDE_SCARD_S_SUCCESS)
{
pszReaderName = pRsp->szReader;
- cchReaderName = strlen(pRsp->szReader) + 1;
+ cchReaderName = (uint32_t)strlen(pRsp->szReader) + 1;
u32CardState = pRsp->u32State;
u32Protocol = pRsp->u32Protocol;
u32AtrLength = pRsp->u32AtrLength;
@@ -1062,15 +1061,15 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpStatus(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pszReaderName,
- cchReaderName,
- u32CardState,
- u32Protocol,
- pbAtr,
- u32AtrLength);
+ mpDrv->pICardReaderUp->pfnStatus(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pszReaderName,
+ cchReaderName,
+ u32CardState,
+ u32Protocol,
+ pbAtr,
+ u32AtrLength);
RTMemFree(pCtx);
} break;
@@ -1107,12 +1106,12 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpTransmit(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pioRecvPci,
- pu8RecvBuffer,
- cbRecvBuffer);
+ mpDrv->pICardReaderUp->pfnTransmit(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pioRecvPci,
+ pu8RecvBuffer,
+ cbRecvBuffer);
RTMemFree(pioRecvPci);
@@ -1149,12 +1148,12 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpControl(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pCtx->u.Control.u32ControlCode,
- pu8OutBuffer,
- cbOutBuffer);
+ mpDrv->pICardReaderUp->pfnControl(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pCtx->u.Control.u32ControlCode,
+ pu8OutBuffer,
+ cbOutBuffer);
RTMemFree(pCtx);
} break;
@@ -1189,12 +1188,12 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
}
}
- mpDrv->pICardReaderUp->pfnCardReaderUpGetAttrib(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pCtx->u.GetAttrib.u32AttrId,
- pu8Attrib,
- cbAttrib);
+ mpDrv->pICardReaderUp->pfnGetAttrib(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pCtx->u.GetAttrib.u32AttrId,
+ pu8Attrib,
+ cbAttrib);
RTMemFree(pCtx);
} break;
@@ -1220,10 +1219,10 @@ int UsbCardReader::VRDEResponse(int rcRequest, void *pvUser, uint32_t u32Functio
rcCard = pRsp->u32ReturnCode;
}
- mpDrv->pICardReaderUp->pfnCardReaderUpSetAttrib(mpDrv->pICardReaderUp,
- pCtx->pvUser,
- rcCard,
- pCtx->u.SetAttrib.u32AttrId);
+ mpDrv->pICardReaderUp->pfnSetAttrib(mpDrv->pICardReaderUp,
+ pCtx->pvUser,
+ rcCard,
+ pCtx->u.SetAttrib.u32AttrId);
RTMemFree(pCtx);
} break;
@@ -1245,8 +1244,8 @@ int UsbCardReader::EstablishContext(struct USBCARDREADER *pDrv)
* The device can be detached at the moment, for example the VRDP client did not connect yet.
*/
- return mpDrv->pICardReaderUp->pfnCardReaderUpEstablishContext(mpDrv->pICardReaderUp,
- VRDE_SCARD_S_SUCCESS);
+ return mpDrv->pICardReaderUp->pfnEstablishContext(mpDrv->pICardReaderUp,
+ VRDE_SCARD_S_SUCCESS);
}
int UsbCardReader::ReleaseContext(struct USBCARDREADER *pDrv)
@@ -1306,22 +1305,22 @@ int UsbCardReader::GetStatusChange(struct USBCARDREADER *pDrv,
|| !m_pRemote->fContext
|| !m_pRemote->reader.fAvailable)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpSetStatusChange(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- paReaderStats,
- cReaderStats);
+ rc = mpDrv->pICardReaderUp->pfnSetStatusChange(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ paReaderStats,
+ cReaderStats);
}
else
{
UCRREQCTX *pCtx = (UCRREQCTX *)RTMemAlloc(sizeof(UCRREQCTX));
if (!pCtx)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpSetStatusChange(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_MEMORY,
- paReaderStats,
- cReaderStats);
+ rc = mpDrv->pICardReaderUp->pfnSetStatusChange(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_MEMORY,
+ paReaderStats,
+ cReaderStats);
}
else
{
@@ -1364,20 +1363,20 @@ int UsbCardReader::Connect(struct USBCARDREADER *pDrv,
|| !m_pRemote->fContext
|| !m_pRemote->reader.fAvailable)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpConnect(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- VRDE_SCARD_PROTOCOL_T0);
+ rc = mpDrv->pICardReaderUp->pfnConnect(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ VRDE_SCARD_PROTOCOL_T0);
}
else
{
UCRREQCTX *pCtx = (UCRREQCTX *)RTMemAlloc(sizeof(UCRREQCTX));
if (!pCtx)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpConnect(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_MEMORY,
- VRDE_SCARD_PROTOCOL_T0);
+ rc = mpDrv->pICardReaderUp->pfnConnect(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_MEMORY,
+ VRDE_SCARD_PROTOCOL_T0);
}
else
{
@@ -1416,18 +1415,18 @@ int UsbCardReader::Disconnect(struct USBCARDREADER *pDrv,
|| !m_pRemote->reader.fAvailable
|| !m_pRemote->reader.fHandle)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpDisconnect(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD);
+ rc = mpDrv->pICardReaderUp->pfnDisconnect(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD);
}
else
{
UCRREQCTX *pCtx = (UCRREQCTX *)RTMemAlloc(sizeof(UCRREQCTX));
if (!pCtx)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpDisconnect(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_MEMORY);
+ rc = mpDrv->pICardReaderUp->pfnDisconnect(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_MEMORY);
}
else
{
@@ -1467,30 +1466,30 @@ int UsbCardReader::Status(struct USBCARDREADER *pDrv,
|| !m_pRemote->reader.fAvailable
|| !m_pRemote->reader.fHandle)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpStatus(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_SMARTCARD,
- /* pszReaderName */ NULL,
- /* cchReaderName */ 0,
- /* u32CardState */ 0,
- /* u32Protocol */ 0,
- /* pu8Atr */ 0,
- /* cbAtr */ 0);
+ rc = mpDrv->pICardReaderUp->pfnStatus(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_SMARTCARD,
+ /* pszReaderName */ NULL,
+ /* cchReaderName */ 0,
+ /* u32CardState */ 0,
+ /* u32Protocol */ 0,
+ /* pu8Atr */ 0,
+ /* cbAtr */ 0);
}
else
{
UCRREQCTX *pCtx = (UCRREQCTX *)RTMemAlloc(sizeof(UCRREQCTX));
if (!pCtx)
{
- rc = mpDrv->pICardReaderUp->pfnCardReaderUpStatus(mpDrv->pICardReaderUp,
- pvUser,
- VRDE_SCARD_E_NO_MEMORY,
- /* pszReaderName */ NULL,
- /* cchReaderName */ 0,
- /* u32CardState */ 0,
- /* u32Protocol */ 0,
- /* pu8Atr */ 0,
- /* cbAtr */ 0);
+ rc = mpDrv->pICardReaderUp->pfnStatus(mpDrv->pICardReaderUp,
+ pvUser,
+ VRDE_SCARD_E_NO_MEMORY,
+ /* pszReaderName */ NULL,
+ /* cchReaderName */ 0,
+ /* u32CardState */ 0,
+ /* u32Protocol */ 0,
+ /* pu8Atr */ 0,
+ /* cbAtr */ 0);
}
else
{
@@ -1560,12 +1559,12 @@ int UsbCardReader::Transmit(struct USBCARDREADER *pDrv,
{
Assert(pCtx == NULL);
- rc = pDrv->pICardReaderUp->pfnCardReaderUpTransmit(pDrv->pICardReaderUp,
- pvUser,
- rcSCard,
- /* pioRecvPci */ NULL,
- /* pu8RecvBuffer */ NULL,
- /* cbRecvBuffer*/ 0);
+ rc = pDrv->pICardReaderUp->pfnTransmit(pDrv->pICardReaderUp,
+ pvUser,
+ rcSCard,
+ /* pioRecvPci */ NULL,
+ /* pu8RecvBuffer */ NULL,
+ /* cbRecvBuffer*/ 0);
}
else
{
@@ -1645,12 +1644,12 @@ int UsbCardReader::Control(struct USBCARDREADER *pDrv,
{
Assert(pCtx == NULL);
- rc = pDrv->pICardReaderUp->pfnCardReaderUpControl(pDrv->pICardReaderUp,
- pvUser,
- rcSCard,
- u32ControlCode,
- /* pvOutBuffer */ NULL,
- /* cbOutBuffer*/ 0);
+ rc = pDrv->pICardReaderUp->pfnControl(pDrv->pICardReaderUp,
+ pvUser,
+ rcSCard,
+ u32ControlCode,
+ /* pvOutBuffer */ NULL,
+ /* cbOutBuffer*/ 0);
}
else
{
@@ -1719,12 +1718,12 @@ int UsbCardReader::GetAttrib(struct USBCARDREADER *pDrv,
{
Assert(pCtx == NULL);
- pDrv->pICardReaderUp->pfnCardReaderUpGetAttrib(pDrv->pICardReaderUp,
- pvUser,
- rcSCard,
- u32AttrId,
- /* pvAttrib */ NULL,
- /* cbAttrib */ 0);
+ pDrv->pICardReaderUp->pfnGetAttrib(pDrv->pICardReaderUp,
+ pvUser,
+ rcSCard,
+ u32AttrId,
+ /* pvAttrib */ NULL,
+ /* cbAttrib */ 0);
}
else
{
@@ -1792,10 +1791,10 @@ int UsbCardReader::SetAttrib(struct USBCARDREADER *pDrv,
{
Assert(pCtx == NULL);
- pDrv->pICardReaderUp->pfnCardReaderUpSetAttrib(pDrv->pICardReaderUp,
- pvUser,
- rcSCard,
- u32AttrId);
+ pDrv->pICardReaderUp->pfnSetAttrib(pDrv->pICardReaderUp,
+ pvUser,
+ rcSCard,
+ u32AttrId);
}
else
{
@@ -1823,7 +1822,7 @@ int UsbCardReader::SetAttrib(struct USBCARDREADER *pDrv,
/*
- * PDM
+ * PDMDRVINS
*/
/* static */ DECLCALLBACK(void *) UsbCardReader::drvQueryInterface(PPDMIBASE pInterface, const char *pszIID)
@@ -1837,11 +1836,38 @@ int UsbCardReader::SetAttrib(struct USBCARDREADER *pDrv,
return NULL;
}
+/* static */ DECLCALLBACK(void) UsbCardReader::drvDestruct(PPDMDRVINS pDrvIns)
+{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ LogFlowFunc(("iInstance/%d\n",pDrvIns->iInstance));
+ PUSBCARDREADER pThis = PDMINS_2_DATA(pDrvIns, PUSBCARDREADER);
+
+ /** @todo The driver is destroyed before the device.
+ * So device calls ReleaseContext when there is no more driver.
+ * Notify the device here so it can do cleanup or
+ * do a cleanup now in the driver.
+ */
+ if (pThis->hReqQCardReaderCmd != NIL_RTREQQUEUE)
+ {
+ int rc = RTReqQueueDestroy(pThis->hReqQCardReaderCmd);
+ AssertRC(rc);
+ pThis->hReqQCardReaderCmd = NIL_RTREQQUEUE;
+ }
+
+ /** @todo r=bird: why doesn't this set pThis->pUsbCardReader->mpDrv to NULL like
+ * everyone else? */
+ pThis->pUsbCardReader = NULL;
+ LogFlowFuncLeave();
+}
+
/* static */ DECLCALLBACK(int) UsbCardReader::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
LogFlowFunc(("iInstance/%d, pCfg:%p, fFlags:%x\n", pDrvIns->iInstance, pCfg, fFlags));
PUSBCARDREADER pThis = PDMINS_2_DATA(pDrvIns, PUSBCARDREADER);
+ pThis->hReqQCardReaderCmd = NIL_RTREQQUEUE;
+
if (!CFGMR3AreValuesValid(pCfg, "Object\0"))
return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
AssertMsgReturn(PDMDrvHlpNoAttach(pDrvIns) == VERR_PDM_NO_ATTACHED_DRIVER,
@@ -1858,18 +1884,18 @@ int UsbCardReader::SetAttrib(struct USBCARDREADER *pDrv,
pDrvIns->IBase.pfnQueryInterface = UsbCardReader::drvQueryInterface;
- pThis->ICardReaderDown.pfnCardReaderDownEstablishContext = drvCardReaderDownEstablishContext;
- pThis->ICardReaderDown.pfnCardReaderDownReleaseContext = drvCardReaderDownReleaseContext;
- pThis->ICardReaderDown.pfnCardReaderDownConnect = drvCardReaderDownConnect;
- pThis->ICardReaderDown.pfnCardReaderDownDisconnect = drvCardReaderDownDisconnect;
- pThis->ICardReaderDown.pfnCardReaderDownStatus = drvCardReaderDownStatus;
- pThis->ICardReaderDown.pfnCardReaderDownGetStatusChange = drvCardReaderDownGetStatusChange;
- pThis->ICardReaderDown.pfnCardReaderDownBeginTransaction = drvCardReaderDownBeginTransaction;
- pThis->ICardReaderDown.pfnCardReaderDownEndTransaction = drvCardReaderDownEndTransaction;
- pThis->ICardReaderDown.pfnCardReaderDownTransmit = drvCardReaderDownTransmit;
- pThis->ICardReaderDown.pfnCardReaderDownGetAttr = drvCardReaderDownGetAttr;
- pThis->ICardReaderDown.pfnCardReaderDownSetAttr = drvCardReaderDownSetAttr;
- pThis->ICardReaderDown.pfnCardReaderDownControl = drvCardReaderDownControl;
+ pThis->ICardReaderDown.pfnEstablishContext = drvCardReaderDownEstablishContext;
+ pThis->ICardReaderDown.pfnReleaseContext = drvCardReaderDownReleaseContext;
+ pThis->ICardReaderDown.pfnConnect = drvCardReaderDownConnect;
+ pThis->ICardReaderDown.pfnDisconnect = drvCardReaderDownDisconnect;
+ pThis->ICardReaderDown.pfnStatus = drvCardReaderDownStatus;
+ pThis->ICardReaderDown.pfnGetStatusChange = drvCardReaderDownGetStatusChange;
+ pThis->ICardReaderDown.pfnBeginTransaction = drvCardReaderDownBeginTransaction;
+ pThis->ICardReaderDown.pfnEndTransaction = drvCardReaderDownEndTransaction;
+ pThis->ICardReaderDown.pfnTransmit = drvCardReaderDownTransmit;
+ pThis->ICardReaderDown.pfnGetAttr = drvCardReaderDownGetAttr;
+ pThis->ICardReaderDown.pfnSetAttr = drvCardReaderDownSetAttr;
+ pThis->ICardReaderDown.pfnControl = drvCardReaderDownControl;
pThis->pICardReaderUp = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMICARDREADERUP);
AssertReturn(pThis->pICardReaderUp, VERR_PDM_MISSING_INTERFACE);
@@ -1894,27 +1920,6 @@ int UsbCardReader::SetAttrib(struct USBCARDREADER *pDrv,
return rc;
}
-/* static */ DECLCALLBACK(void) UsbCardReader::drvDestruct(PPDMDRVINS pDrvIns)
-{
- LogFlowFunc(("iInstance/%d\n",pDrvIns->iInstance));
- PUSBCARDREADER pThis = PDMINS_2_DATA(pDrvIns, PUSBCARDREADER);
-
- /* @todo The driver is destroyed before the device.
- * So device calls ReleaseContext when there is no more driver.
- * Notify the device here so it can do cleanup or
- * do a cleanup now in the driver.
- */
- if (pThis->hReqQCardReaderCmd != NIL_RTREQQUEUE)
- {
- int rc = RTReqQueueDestroy(pThis->hReqQCardReaderCmd);
- AssertRC(rc);
- pThis->hReqQCardReaderCmd = NIL_RTREQQUEUE;
- }
-
- pThis->pUsbCardReader = NULL;
- LogFlowFuncLeave();
-}
-
/* static */ const PDMDRVREG UsbCardReader::DrvReg =
{
/* u32Version */