summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/VBox/Main/include/KeyboardImpl.h3
-rw-r--r--src/VBox/Main/src-client/AudioSnifferInterface.cpp4
-rw-r--r--src/VBox/Main/src-client/ConsoleImpl.cpp4
-rw-r--r--src/VBox/Main/src-client/DisplayImpl.cpp8
-rw-r--r--src/VBox/Main/src-client/KeyboardImpl.cpp51
-rw-r--r--src/VBox/Main/src-client/MouseImpl.cpp4
-rw-r--r--src/VBox/Main/src-client/Nvram.cpp2
-rw-r--r--src/VBox/Main/src-client/PCIRawDevImpl.cpp32
-rw-r--r--src/VBox/Main/src-client/UsbCardReader.cpp51
-rw-r--r--src/VBox/Main/src-client/UsbWebcamInterface.cpp30
-rw-r--r--src/VBox/Main/src-client/VMMDevInterface.cpp35
11 files changed, 111 insertions, 113 deletions
diff --git a/src/VBox/Main/include/KeyboardImpl.h b/src/VBox/Main/include/KeyboardImpl.h
index f3671340b09..fe6d2b9f33b 100644
--- a/src/VBox/Main/include/KeyboardImpl.h
+++ b/src/VBox/Main/include/KeyboardImpl.h
@@ -85,8 +85,9 @@ public:
private:
- static DECLCALLBACK(void *) drvQueryInterface(PPDMIBASE pInterface, const char *pszIID);
+ static DECLCALLBACK(void) keyboardLedStatusChange(PPDMIKEYBOARDCONNECTOR pInterface, PDMKEYBLEDS enmLeds);
static DECLCALLBACK(void) keyboardSetActive(PPDMIKEYBOARDCONNECTOR pInterface, bool fActive);
+ static DECLCALLBACK(void *) drvQueryInterface(PPDMIBASE pInterface, const char *pszIID);
static DECLCALLBACK(int) drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags);
static DECLCALLBACK(void) drvDestruct(PPDMDRVINS pDrvIns);
diff --git a/src/VBox/Main/src-client/AudioSnifferInterface.cpp b/src/VBox/Main/src-client/AudioSnifferInterface.cpp
index 8684b84651f..38a34f4cf84 100644
--- a/src/VBox/Main/src-client/AudioSnifferInterface.cpp
+++ b/src/VBox/Main/src-client/AudioSnifferInterface.cpp
@@ -160,9 +160,9 @@ DECLCALLBACK(void *) AudioSniffer::drvQueryInterface(PPDMIBASE pInterface, const
*/
DECLCALLBACK(void) AudioSniffer::drvDestruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
PDRVAUDIOSNIFFER pThis = PDMINS_2_DATA(pDrvIns, PDRVAUDIOSNIFFER);
LogFlow(("AudioSniffer::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
if (pThis->pAudioSniffer)
{
@@ -178,10 +178,10 @@ DECLCALLBACK(void) AudioSniffer::drvDestruct(PPDMDRVINS pDrvIns)
*/
DECLCALLBACK(int) AudioSniffer::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
PDRVAUDIOSNIFFER pThis = PDMINS_2_DATA(pDrvIns, PDRVAUDIOSNIFFER);
LogFlow(("AudioSniffer::drvConstruct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
/*
* Validate configuration.
diff --git a/src/VBox/Main/src-client/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp
index 37207b37889..c0b670f1841 100644
--- a/src/VBox/Main/src-client/ConsoleImpl.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl.cpp
@@ -9901,9 +9901,9 @@ DECLCALLBACK(void *) Console::drvStatus_QueryInterface(PPDMIBASE pInterface, co
*/
DECLCALLBACK(void) Console::drvStatus_Destruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
PDRVMAINSTATUS pData = PDMINS_2_DATA(pDrvIns, PDRVMAINSTATUS);
LogFlowFunc(("iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
if (pData->papLeds)
{
@@ -9921,9 +9921,9 @@ DECLCALLBACK(void) Console::drvStatus_Destruct(PPDMDRVINS pDrvIns)
*/
DECLCALLBACK(int) Console::drvStatus_Construct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
PDRVMAINSTATUS pData = PDMINS_2_DATA(pDrvIns, PDRVMAINSTATUS);
LogFlowFunc(("iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
/*
* Validate configuration.
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index 87c0a77aaac..b223f7cb7f9 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -4264,9 +4264,9 @@ DECLCALLBACK(void *) Display::drvQueryInterface(PPDMIBASE pInterface, const cha
*/
DECLCALLBACK(void) Display::drvDestruct(PPDMDRVINS pDrvIns)
{
- PDRVMAINDISPLAY pData = PDMINS_2_DATA(pDrvIns, PDRVMAINDISPLAY);
- LogRelFlowFunc (("iInstance=%d\n", pDrvIns->iInstance));
PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ PDRVMAINDISPLAY pData = PDMINS_2_DATA(pDrvIns, PDRVMAINDISPLAY);
+ LogRelFlowFunc(("iInstance=%d\n", pDrvIns->iInstance));
if (pData->pDisplay)
{
@@ -4292,9 +4292,9 @@ DECLCALLBACK(void) Display::drvDestruct(PPDMDRVINS pDrvIns)
*/
DECLCALLBACK(int) Display::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
- PDRVMAINDISPLAY pData = PDMINS_2_DATA(pDrvIns, PDRVMAINDISPLAY);
- LogRelFlowFunc (("iInstance=%d\n", pDrvIns->iInstance));
PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
+ PDRVMAINDISPLAY pData = PDMINS_2_DATA(pDrvIns, PDRVMAINDISPLAY);
+ LogRelFlowFunc(("iInstance=%d\n", pDrvIns->iInstance));
/*
* Validate configuration.
diff --git a/src/VBox/Main/src-client/KeyboardImpl.cpp b/src/VBox/Main/src-client/KeyboardImpl.cpp
index 87497f65b37..cfee2c9423c 100644
--- a/src/VBox/Main/src-client/KeyboardImpl.cpp
+++ b/src/VBox/Main/src-client/KeyboardImpl.cpp
@@ -271,6 +271,27 @@ STDMETHODIMP Keyboard::COMGETTER(EventSource)(IEventSource ** aEventSource)
// private methods
//
+DECLCALLBACK(void) Keyboard::keyboardLedStatusChange(PPDMIKEYBOARDCONNECTOR pInterface, PDMKEYBLEDS enmLeds)
+{
+ PDRVMAINKEYBOARD pDrv = PPDMIKEYBOARDCONNECTOR_2_MAINKEYBOARD(pInterface);
+ pDrv->pKeyboard->getParent()->onKeyboardLedsChange(RT_BOOL(enmLeds & PDMKEYBLEDS_NUMLOCK),
+ RT_BOOL(enmLeds & PDMKEYBLEDS_CAPSLOCK),
+ RT_BOOL(enmLeds & PDMKEYBLEDS_SCROLLLOCK));
+}
+
+/**
+ * @interface_method_impl{PDMIKEYBOARDCONNECTOR,pfnSetActive}
+ */
+DECLCALLBACK(void) Keyboard::keyboardSetActive(PPDMIKEYBOARDCONNECTOR pInterface, bool fActive)
+{
+ PDRVMAINKEYBOARD pDrv = PPDMIKEYBOARDCONNECTOR_2_MAINKEYBOARD(pInterface);
+ if (fActive)
+ pDrv->u32DevCaps |= KEYBOARD_DEVCAP_ENABLED;
+ else
+ pDrv->u32DevCaps &= ~KEYBOARD_DEVCAP_ENABLED;
+}
+
+
/**
* @interface_method_impl{PDMIBASE,pfnQueryInterface}
*/
@@ -293,9 +314,9 @@ DECLCALLBACK(void *) Keyboard::drvQueryInterface(PPDMIBASE pInterface, const cha
*/
DECLCALLBACK(void) Keyboard::drvDestruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
PDRVMAINKEYBOARD pData = PDMINS_2_DATA(pDrvIns, PDRVMAINKEYBOARD);
LogFlow(("Keyboard::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
if (pData->pKeyboard)
{
@@ -310,38 +331,16 @@ DECLCALLBACK(void) Keyboard::drvDestruct(PPDMDRVINS pDrvIns)
}
}
-DECLCALLBACK(void) keyboardLedStatusChange(PPDMIKEYBOARDCONNECTOR pInterface,
- PDMKEYBLEDS enmLeds)
-{
- PDRVMAINKEYBOARD pDrv = PPDMIKEYBOARDCONNECTOR_2_MAINKEYBOARD(pInterface);
- pDrv->pKeyboard->getParent()->onKeyboardLedsChange(!!(enmLeds & PDMKEYBLEDS_NUMLOCK),
- !!(enmLeds & PDMKEYBLEDS_CAPSLOCK),
- !!(enmLeds & PDMKEYBLEDS_SCROLLLOCK));
-}
-
-/**
- * @interface_method_impl{PDMIKEYBOARDCONNECTOR,pfnSetActive}
- */
-DECLCALLBACK(void) Keyboard::keyboardSetActive(PPDMIKEYBOARDCONNECTOR pInterface, bool fActive)
-{
- PDRVMAINKEYBOARD pDrv = PPDMIKEYBOARDCONNECTOR_2_MAINKEYBOARD(pInterface);
- if (fActive)
- pDrv->u32DevCaps |= KEYBOARD_DEVCAP_ENABLED;
- else
- pDrv->u32DevCaps &= ~KEYBOARD_DEVCAP_ENABLED;
-}
-
/**
* Construct a keyboard driver instance.
*
* @copydoc FNPDMDRVCONSTRUCT
*/
-DECLCALLBACK(int) Keyboard::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg,
- uint32_t fFlags)
+DECLCALLBACK(int) Keyboard::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
PDRVMAINKEYBOARD pData = PDMINS_2_DATA(pDrvIns, PDRVMAINKEYBOARD);
LogFlow(("Keyboard::drvConstruct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
/*
* Validate configuration.
@@ -358,7 +357,7 @@ DECLCALLBACK(int) Keyboard::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg,
pDrvIns->IBase.pfnQueryInterface = Keyboard::drvQueryInterface;
pData->IConnector.pfnLedStatusChange = keyboardLedStatusChange;
- pData->IConnector.pfnSetActive = keyboardSetActive;
+ pData->IConnector.pfnSetActive = Keyboard::keyboardSetActive;
/*
* Get the IKeyboardPort interface of the above driver/device.
diff --git a/src/VBox/Main/src-client/MouseImpl.cpp b/src/VBox/Main/src-client/MouseImpl.cpp
index 579900209c2..a07cda06f81 100644
--- a/src/VBox/Main/src-client/MouseImpl.cpp
+++ b/src/VBox/Main/src-client/MouseImpl.cpp
@@ -712,9 +712,9 @@ DECLCALLBACK(void *) Mouse::drvQueryInterface(PPDMIBASE pInterface, const char
*/
DECLCALLBACK(void) Mouse::drvDestruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
PDRVMAINMOUSE pData = PDMINS_2_DATA(pDrvIns, PDRVMAINMOUSE);
LogFlow(("Mouse::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
if (pData->pMouse)
{
@@ -736,9 +736,9 @@ DECLCALLBACK(void) Mouse::drvDestruct(PPDMDRVINS pDrvIns)
*/
DECLCALLBACK(int) Mouse::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
PDRVMAINMOUSE pData = PDMINS_2_DATA(pDrvIns, PDRVMAINMOUSE);
LogFlow(("drvMainMouse_Construct: iInstance=%d\n", pDrvIns->iInstance));
- PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
/*
* Validate configuration.
diff --git a/src/VBox/Main/src-client/Nvram.cpp b/src/VBox/Main/src-client/Nvram.cpp
index 52c2ee59ca7..fd3e1325c69 100644
--- a/src/VBox/Main/src-client/Nvram.cpp
+++ b/src/VBox/Main/src-client/Nvram.cpp
@@ -329,6 +329,7 @@ DECLCALLBACK(void *) Nvram::drvNvram_QueryInterface(PPDMIBASE pInterface, const
*/
DECLCALLBACK(void) Nvram::drvNvram_Destruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
LogFlow(("%s: iInstance/#d\n", __FUNCTION__, pDrvIns->iInstance));
PNVRAM pThis = PDMINS_2_DATA(pDrvIns, PNVRAM);
if (pThis->pNvram != NULL)
@@ -341,6 +342,7 @@ DECLCALLBACK(void) Nvram::drvNvram_Destruct(PPDMDRVINS pDrvIns)
*/
DECLCALLBACK(int) Nvram::drvNvram_Construct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
LogFlowFunc(("iInstance/#d, pCfg:%p, fFlags:%x\n", pDrvIns->iInstance, pCfg, fFlags));
PNVRAM pThis = PDMINS_2_DATA(pDrvIns, PNVRAM);
diff --git a/src/VBox/Main/src-client/PCIRawDevImpl.cpp b/src/VBox/Main/src-client/PCIRawDevImpl.cpp
index 995743535da..b5cdfe99518 100644
--- a/src/VBox/Main/src-client/PCIRawDevImpl.cpp
+++ b/src/VBox/Main/src-client/PCIRawDevImpl.cpp
@@ -14,6 +14,7 @@
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
+
#include "Logging.h"
#include "PCIRawDevImpl.h"
#include "PCIDeviceAttachmentImpl.h"
@@ -104,41 +105,33 @@ DECLCALLBACK(int) PCIRawDev::drvDeviceConstructComplete(PPDMIPCIRAWCONNECTOR pIn
/**
- * Destruct a PCI raw driver instance.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnReset}
*/
-DECLCALLBACK(void) PCIRawDev::drvDestruct(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) PCIRawDev::drvReset(PPDMDRVINS pDrvIns)
{
- PDRVMAINPCIRAWDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINPCIRAWDEV);
- PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
-
- if (pData->pPCIRawDev)
- pData->pPCIRawDev->mpDrv = NULL;
}
/**
- * Reset notification.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnReset}
*/
-DECLCALLBACK(void) PCIRawDev::drvReset(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) PCIRawDev::drvDestruct(PPDMDRVINS pDrvIns)
{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ PDRVMAINPCIRAWDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINPCIRAWDEV);
+
+ if (pData->pPCIRawDev)
+ pData->pPCIRawDev->mpDrv = NULL;
}
/**
- * Construct a raw PCI driver instance.
- *
- * @copydoc FNPDMDRVCONSTRUCT
+ * @interface_method_impl{PDMDRVREG,pfnConstruct}
*/
DECLCALLBACK(int) PCIRawDev::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle, uint32_t fFlags)
{
- PDRVMAINPCIRAWDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINPCIRAWDEV);
PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
+ PDRVMAINPCIRAWDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINPCIRAWDEV);
/*
* Validate configuration.
@@ -227,3 +220,4 @@ const PDMDRVREG PCIRawDev::DrvReg =
/* u32EndVersion */
PDM_DRVREG_VERSION
};
+
diff --git a/src/VBox/Main/src-client/UsbCardReader.cpp b/src/VBox/Main/src-client/UsbCardReader.cpp
index fc4004c3de7..9fa73bc412d 100644
--- a/src/VBox/Main/src-client/UsbCardReader.cpp
+++ b/src/VBox/Main/src-client/UsbCardReader.cpp
@@ -1,5 +1,4 @@
/* $Id$ */
-
/** @file
* UsbCardReader - Driver Interface to USB Smart Card Reader emulation.
*/
@@ -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,
@@ -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 */
diff --git a/src/VBox/Main/src-client/UsbWebcamInterface.cpp b/src/VBox/Main/src-client/UsbWebcamInterface.cpp
index 356e7bac011..d86d38f1f81 100644
--- a/src/VBox/Main/src-client/UsbWebcamInterface.cpp
+++ b/src/VBox/Main/src-client/UsbWebcamInterface.cpp
@@ -329,8 +329,24 @@ int EmWebcam::SendControl(EMWEBCAMDRV *pDrv, void *pvUser, uint64_t u64DeviceId,
return NULL;
}
+/* static */ DECLCALLBACK(void) EmWebcam::drvDestruct(PPDMDRVINS pDrvIns)
+{
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ PEMWEBCAMDRV pThis = PDMINS_2_DATA(pDrvIns, PEMWEBCAMDRV);
+
+ LogFlowFunc(("iInstance %d, pEmWebcam %p, pIWebcamUp %p\n",
+ pDrvIns->iInstance, pThis->pEmWebcam, pThis->pIWebcamUp));
+
+ if (pThis->pEmWebcam)
+ {
+ pThis->pEmWebcam->EmWebcamDestruct(pThis);
+ pThis->pEmWebcam = NULL;
+ }
+}
+
/* static */ DECLCALLBACK(int) EmWebcam::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));
PEMWEBCAMDRV pThis = PDMINS_2_DATA(pDrvIns, PEMWEBCAMDRV);
@@ -368,20 +384,6 @@ int EmWebcam::SendControl(EMWEBCAMDRV *pDrv, void *pvUser, uint64_t u64DeviceId,
return VINF_SUCCESS;
}
-/* static */ DECLCALLBACK(void) EmWebcam::drvDestruct(PPDMDRVINS pDrvIns)
-{
- PEMWEBCAMDRV pThis = PDMINS_2_DATA(pDrvIns, PEMWEBCAMDRV);
-
- LogFlowFunc(("iInstance %d, pEmWebcam %p, pIWebcamUp %p\n",
- pDrvIns->iInstance, pThis->pEmWebcam, pThis->pIWebcamUp));
-
- if (pThis->pEmWebcam)
- {
- pThis->pEmWebcam->EmWebcamDestruct(pThis);
- pThis->pEmWebcam = NULL;
- }
-}
-
/* static */ const PDMDRVREG EmWebcam::DrvReg =
{
/* u32Version */
diff --git a/src/VBox/Main/src-client/VMMDevInterface.cpp b/src/VBox/Main/src-client/VMMDevInterface.cpp
index 388179f9fb5..2ef6cd9a14d 100644
--- a/src/VBox/Main/src-client/VMMDevInterface.cpp
+++ b/src/VBox/Main/src-client/VMMDevInterface.cpp
@@ -745,43 +745,38 @@ DECLCALLBACK(void *) VMMDev::drvQueryInterface(PPDMIBASE pInterface, const char
}
/**
- * Destruct a VMMDev driver instance.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnReset}
*/
-DECLCALLBACK(void) VMMDev::drvDestruct(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) VMMDev::drvReset(PPDMDRVINS pDrvIns)
{
- PDRVMAINVMMDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
- LogFlow(("VMMDev::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
+ LogFlow(("VMMDev::drvReset: iInstance=%d\n", pDrvIns->iInstance));
#ifdef VBOX_WITH_HGCM
- /* HGCM is shut down on the VMMDev destructor. */
+ HGCMHostReset ();
#endif /* VBOX_WITH_HGCM */
- if (pData->pVMMDev)
- pData->pVMMDev->mpDrv = NULL;
}
/**
- * Reset notification.
- *
- * @returns VBox status.
- * @param pDrvIns The driver instance data.
+ * @interface_method_impl{PDMDRVREG,pfnDestruct}
*/
-DECLCALLBACK(void) VMMDev::drvReset(PPDMDRVINS pDrvIns)
+DECLCALLBACK(void) VMMDev::drvDestruct(PPDMDRVINS pDrvIns)
{
- LogFlow(("VMMDev::drvReset: iInstance=%d\n", pDrvIns->iInstance));
+ PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+ PDRVMAINVMMDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
+ LogFlow(("VMMDev::drvDestruct: iInstance=%d\n", pDrvIns->iInstance));
+
#ifdef VBOX_WITH_HGCM
- HGCMHostReset ();
+ /* HGCM is shut down on the VMMDev destructor. */
#endif /* VBOX_WITH_HGCM */
+ if (pData->pVMMDev)
+ pData->pVMMDev->mpDrv = NULL;
}
/**
- * Construct a VMMDev driver instance.
- *
- * @copydoc FNPDMDRVCONSTRUCT
+ * @interface_method_impl{PDMDRVREG,pfnConstruct}
*/
DECLCALLBACK(int) VMMDev::drvConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle, uint32_t fFlags)
{
+ PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
PDRVMAINVMMDEV pData = PDMINS_2_DATA(pDrvIns, PDRVMAINVMMDEV);
LogFlow(("Keyboard::drvConstruct: iInstance=%d\n", pDrvIns->iInstance));