Index: /trunk/src/VBox/Devices/Audio/DevHDA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 80690)
+++ /trunk/src/VBox/Devices/Audio/DevHDA.cpp	(revision 80691)
@@ -110,7 +110,7 @@
  * Acquires the HDA lock.
  */
-#define DEVHDA_LOCK(a_pThis) \
+#define DEVHDA_LOCK(a_pDevIns, a_pThis) \
     do { \
-        int rcLock = PDMCritSectEnter(&(a_pThis)->CritSect, VERR_IGNORED); \
+        int rcLock = PDMDevHlpCritSectEnter((a_pDevIns), &(a_pThis)->CritSect, VERR_IGNORED); \
         AssertRC(rcLock); \
     } while (0)
@@ -119,8 +119,10 @@
  * Acquires the HDA lock or returns.
  */
-# define DEVHDA_LOCK_RETURN(a_pThis, a_rcBusy) \
+#define DEVHDA_LOCK_RETURN(a_pDevIns, a_pThis, a_rcBusy) \
     do { \
-        int rcLock = PDMCritSectEnter(&(a_pThis)->CritSect, a_rcBusy); \
-        if (rcLock != VINF_SUCCESS) \
+        int rcLock = PDMDevHlpCritSectEnter((a_pDevIns), &(a_pThis)->CritSect, a_rcBusy); \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
         { \
             AssertRC(rcLock); \
@@ -132,8 +134,10 @@
  * Acquires the HDA lock or returns.
  */
-# define DEVHDA_LOCK_RETURN_VOID(a_pThis) \
+# define DEVHDA_LOCK_RETURN_VOID(a_pDevIns, a_pThis) \
     do { \
-        int rcLock = PDMCritSectEnter(&(a_pThis)->CritSect, VERR_IGNORED); \
-        if (rcLock != VINF_SUCCESS) \
+        int rcLock = PDMDevHlpCritSectEnter((a_pDevIns), &(a_pThis)->CritSect, VERR_IGNORED); \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
         { \
             AssertRC(rcLock); \
@@ -145,20 +149,24 @@
  * Releases the HDA lock.
  */
-#define DEVHDA_UNLOCK(a_pThis) \
-    do { PDMCritSectLeave(&(a_pThis)->CritSect); } while (0)
+#define DEVHDA_UNLOCK(a_pDevIns, a_pThis) \
+    do { PDMDevHlpCritSectLeave((a_pDevIns), &(a_pThis)->CritSect); } while (0)
 
 /**
  * Acquires the TM lock and HDA lock, returns on failure.
  */
-#define DEVHDA_LOCK_BOTH_RETURN_VOID(a_pThis, a_SD) \
+#define DEVHDA_LOCK_BOTH_RETURN_VOID(a_pDevIns, a_pThis, a_SD) \
     do { \
         int rcLock = TMTimerLock((a_pThis)->pTimer[a_SD], VERR_IGNORED); \
-        if (rcLock != VINF_SUCCESS) \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
         { \
             AssertRC(rcLock); \
             return; \
         } \
-        rcLock = PDMCritSectEnter(&(a_pThis)->CritSect, VERR_IGNORED); \
-        if (rcLock != VINF_SUCCESS) \
+        rcLock = PDMDevHlpCritSectEnter((a_pDevIns), &(a_pThis)->CritSect, VERR_IGNORED); \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
         { \
             AssertRC(rcLock); \
@@ -171,11 +179,18 @@
  * Acquires the TM lock and HDA lock, returns on failure.
  */
-#define DEVHDA_LOCK_BOTH_RETURN(a_pThis, a_SD, a_rcBusy) \
+#define DEVHDA_LOCK_BOTH_RETURN(a_pDevIns, a_pThis, a_SD, a_rcBusy) \
     do { \
         int rcLock = TMTimerLock((a_pThis)->pTimer[a_SD], (a_rcBusy)); \
-        if (rcLock != VINF_SUCCESS) \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
+        { \
+            AssertRC(rcLock); \
             return rcLock; \
-        rcLock = PDMCritSectEnter(&(a_pThis)->CritSect, (a_rcBusy)); \
-        if (rcLock != VINF_SUCCESS) \
+        } \
+        rcLock = PDMDevHlpCritSectEnter((a_pDevIns), &(a_pThis)->CritSect, (a_rcBusy)); \
+        if (rcLock == VINF_SUCCESS) \
+        { /* likely */ } \
+        else \
         { \
             AssertRC(rcLock); \
@@ -188,7 +203,7 @@
  * Releases the HDA lock and TM lock.
  */
-#define DEVHDA_UNLOCK_BOTH(a_pThis, a_SD) \
+#define DEVHDA_UNLOCK_BOTH(a_pDevIns, a_pThis, a_SD) \
     do { \
-        PDMCritSectLeave(&(a_pThis)->CritSect); \
+        PDMDevHlpCritSectLeave((a_pDevIns), &(a_pThis)->CritSect); \
         TMTimerUnlock((a_pThis)->pTimer[a_SD]); \
     } while (0)
@@ -290,6 +305,6 @@
  * @{
  */
-static int hdaRegReadUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
+static int hdaRegReadUnimpl(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteUnimpl(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 /** @} */
 
@@ -297,19 +312,19 @@
  * @{
  */
-static int hdaRegWriteGCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegReadLPIB(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegReadWALCLK(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteCORBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteCORBRP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteCORBCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteCORBSIZE(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteCORBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteRINTCNT(PHDASTATE pThis, uint32_t iReg, uint32_t pu32Value);
-static int hdaRegWriteRIRBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSTATESTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteIRS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegReadIRS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteBase(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteGCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegReadLPIB(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegReadWALCLK(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteCORBWP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteCORBRP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteCORBCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteCORBSIZE(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteCORBSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteRINTCNT(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteRIRBWP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteRIRBSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSTATESTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteIRS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegReadIRS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteBase(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 /** @} */
 
@@ -317,13 +332,13 @@
  * @{
  */
-static int hdaRegWriteSDCBL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDLVI(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDFIFOW(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDBDPL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegWriteSDBDPU(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDCBL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDLVI(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDFIFOW(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDFIFOS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDFMT(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDBDPL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteSDBDPU(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 /** @} */
 
@@ -331,14 +346,14 @@
  * @{
  */
-static int hdaRegReadU32(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteU32(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegReadU24(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegReadU32(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteU32(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegReadU24(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
 #ifdef IN_RING3
-static int hdaRegWriteU24(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegWriteU24(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 #endif
-static int hdaRegReadU16(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteU16(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
-static int hdaRegReadU8(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
-static int hdaRegWriteU8(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegReadU16(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteU16(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+static int hdaRegReadU8(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+static int hdaRegWriteU8(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
 /** @} */
 
@@ -903,92 +918,92 @@
 /* Register access handlers. */
 
-static int hdaRegReadUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    RT_NOREF_PV(pThis); RT_NOREF_PV(iReg);
+static int hdaRegReadUnimpl(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    RT_NOREF(pDevIns, pThis, iReg);
     *pu32Value = 0;
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteUnimpl(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    RT_NOREF_PV(pThis); RT_NOREF_PV(iReg); RT_NOREF_PV(u32Value);
+static int hdaRegWriteUnimpl(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_SUCCESS;
 }
 
 /* U8 */
-static int hdaRegReadU8(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+static int hdaRegReadU8(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
     Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffffff00) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
-}
-
-static int hdaRegWriteU8(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+    return hdaRegReadU32(pDevIns, pThis, iReg, pu32Value);
+}
+
+static int hdaRegWriteU8(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     Assert((u32Value & 0xffffff00) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
+    return hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
 }
 
 /* U16 */
-static int hdaRegReadU16(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+static int hdaRegReadU16(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
     Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xffff0000) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
-}
-
-static int hdaRegWriteU16(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+    return hdaRegReadU32(pDevIns, pThis, iReg, pu32Value);
+}
+
+static int hdaRegWriteU16(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     Assert((u32Value & 0xffff0000) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
+    return hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
 }
 
 /* U24 */
-static int hdaRegReadU24(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+static int hdaRegReadU24(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
     Assert(((pThis->au32Regs[g_aHdaRegMap[iReg].mem_idx] & g_aHdaRegMap[iReg].readable) & 0xff000000) == 0);
-    return hdaRegReadU32(pThis, iReg, pu32Value);
+    return hdaRegReadU32(pDevIns, pThis, iReg, pu32Value);
 }
 
 #ifdef IN_RING3
-static int hdaRegWriteU24(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteU24(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     Assert((u32Value & 0xff000000) == 0);
-    return hdaRegWriteU32(pThis, iReg, u32Value);
+    return hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
 }
 #endif
 
 /* U32 */
-static int hdaRegReadU32(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+static int hdaRegReadU32(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
     uint32_t iRegMem = g_aHdaRegMap[iReg].mem_idx;
 
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_READ);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_READ);
 
     *pu32Value = pThis->au32Regs[iRegMem] & g_aHdaRegMap[iReg].readable;
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteU32(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteU32(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     uint32_t iRegMem = g_aHdaRegMap[iReg].mem_idx;
 
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     pThis->au32Regs[iRegMem]  = (u32Value & g_aHdaRegMap[iReg].writable)
                               | (pThis->au32Regs[iRegMem] & ~g_aHdaRegMap[iReg].writable);
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteGCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteGCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF_PV(iReg);
 #ifdef IN_RING3
-    DEVHDA_LOCK(pThis);
+    DEVHDA_LOCK(pDevIns, pThis);
 #else
     if (!(u32Value & HDA_GCTL_CRST))
         return VINF_IOM_R3_MMIO_WRITE;
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 #endif
 
@@ -1012,5 +1027,5 @@
         hdaR3GCTLReset(pThis);
 #else
-        AssertFailedReturnStmt(DEVHDA_UNLOCK(pThis), VINF_IOM_R3_MMIO_WRITE);
+        AssertFailedReturnStmt(DEVHDA_UNLOCK(pDevIns, pThis), VINF_IOM_R3_MMIO_WRITE);
 #endif
     }
@@ -1023,11 +1038,11 @@
     }
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteSTATESTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteSTATESTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     uint32_t v  = HDA_REG_IND(pThis, iReg);
@@ -1036,11 +1051,11 @@
     HDA_REG(pThis, STATESTS) &= ~(v & nv); /* Write of 1 clears corresponding bit. */
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegReadLPIB(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_READ);
+static int hdaRegReadLPIB(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_READ);
 
     const uint8_t  uSD     = HDA_SD_NUM_FROM_REG(pThis, LPIB, iReg);
@@ -1053,5 +1068,5 @@
     *pu32Value = u32LPIB;
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
@@ -1098,10 +1113,10 @@
 #endif /* IN_RING3 */
 
-static int hdaRegReadWALCLK(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+static int hdaRegReadWALCLK(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
 {
 #ifdef IN_RING3
     RT_NOREF(iReg);
 
-    DEVHDA_LOCK(pThis);
+    DEVHDA_LOCK(pDevIns, pThis);
 
     *pu32Value = RT_LO_U32(ASMAtomicReadU64(&pThis->u64WalClk));
@@ -1109,16 +1124,16 @@
     Log3Func(("%RU32 (max @ %RU64)\n",*pu32Value, hdaR3WalClkGetMax(pThis)));
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 #else
-    RT_NOREF(pThis, iReg, pu32Value);
+    RT_NOREF(pDevIns, pThis, iReg, pu32Value);
     return VINF_IOM_R3_MMIO_READ;
 #endif
 }
 
-static int hdaRegWriteCORBRP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteCORBRP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     if (u32Value & HDA_CORBRP_RST)
@@ -1131,5 +1146,5 @@
             RT_BZERO((void *)pThis->pu32CorbBuf, pThis->cbCorbBuf);
 #else
-            DEVHDA_UNLOCK(pThis);
+            DEVHDA_UNLOCK(pDevIns, pThis);
             return VINF_IOM_R3_MMIO_WRITE;
 #endif
@@ -1143,14 +1158,14 @@
         HDA_REG(pThis, CORBRP) &= ~HDA_CORBRP_RST;  /* Only CORBRP_RST bit is writable. */
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteCORBCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteCORBCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
-
-    int rc = hdaRegWriteU8(pThis, iReg, u32Value);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
+
+    int rc = hdaRegWriteU8(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc);
 
@@ -1162,17 +1177,17 @@
         LogFunc(("CORB DMA not running, skipping\n"));
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 #else
-    RT_NOREF(pThis, iReg, u32Value);
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_IOM_R3_MMIO_WRITE;
 #endif
 }
 
-static int hdaRegWriteCORBSIZE(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteCORBSIZE(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
     RT_NOREF(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     if (HDA_REG(pThis, CORBCTL) & HDA_CORBCTL_DMA) /* Ignore request if CORB DMA engine is (still) running. */
@@ -1180,5 +1195,5 @@
         LogFunc(("CORB DMA is (still) running, skipping\n"));
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
     }
@@ -1222,54 +1237,54 @@
     HDA_REG(pThis, CORBSIZE) = u32Value;
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 #else
-    RT_NOREF(pThis, iReg, u32Value);
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_IOM_R3_MMIO_WRITE;
 #endif
 }
 
-static int hdaRegWriteCORBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteCORBSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF_PV(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     uint32_t v = HDA_REG(pThis, CORBSTS);
     HDA_REG(pThis, CORBSTS) &= ~(v & u32Value);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteCORBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteCORBWP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
-
-    int rc = hdaRegWriteU16(pThis, iReg, u32Value);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
+
+    int rc = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
     AssertRCSuccess(rc);
 
     rc = hdaR3CORBCmdProcess(pThis);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 #else
-    RT_NOREF(pThis, iReg, u32Value);
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_IOM_R3_MMIO_WRITE;
 #endif
 }
 
-static int hdaRegWriteSDCBL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
-
-    int rc = hdaRegWriteU32(pThis, iReg, u32Value);
+static int hdaRegWriteSDCBL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
+
+    int rc = hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
     AssertRCSuccess(rc);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 }
 
-static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteSDCTL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
@@ -1277,5 +1292,5 @@
     const uint8_t uSD = HDA_SD_NUM_FROM_REG(pThis, CTL, iReg);
 
-    DEVHDA_LOCK_BOTH_RETURN(pThis, uSD, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_BOTH_RETURN(pDevIns, pThis, uSD, VINF_IOM_R3_MMIO_WRITE);
 
     /*
@@ -1306,6 +1321,6 @@
         LogFunc(("[SD%RU8] Warning: Invalid stream tag %RU8 specified!\n", uSD, uTag));
 
-        int rc = hdaRegWriteU24(pThis, iReg, u32Value);
-        DEVHDA_UNLOCK_BOTH(pThis, uSD);
+        int rc = hdaRegWriteU24(pDevIns, pThis, iReg, u32Value);
+        DEVHDA_UNLOCK_BOTH(pDevIns, pThis, uSD);
         return rc;
     }
@@ -1455,21 +1470,21 @@
     }
 
-    int rc2 = hdaRegWriteU24(pThis, iReg, u32Value);
+    int rc2 = hdaRegWriteU24(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc2);
 
-    DEVHDA_UNLOCK_BOTH(pThis, uSD);
+    DEVHDA_UNLOCK_BOTH(pDevIns, pThis, uSD);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 #else  /* !IN_RING3 */
-    RT_NOREF_PV(pThis); RT_NOREF_PV(iReg); RT_NOREF_PV(u32Value);
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_IOM_R3_MMIO_WRITE;
-#endif /* IN_RING3 */
-}
-
-static int hdaRegWriteSDSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+#endif /* !IN_RING3 */
+}
+
+static int hdaRegWriteSDSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
 #ifdef IN_RING3
     const uint8_t uSD = HDA_SD_NUM_FROM_REG(pThis, STS, iReg);
 
-    DEVHDA_LOCK_BOTH_RETURN(pThis, uSD, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_BOTH_RETURN(pDevIns, pThis, uSD, VINF_IOM_R3_MMIO_WRITE);
 
     PHDASTREAM pStream = hdaGetStreamFromSD(pThis, uSD);
@@ -1479,6 +1494,6 @@
                          HDA_SD_NUM_FROM_REG(pThis, STS, iReg), u32Value));
 
-        int rc = hdaRegWriteU16(pThis, iReg, u32Value);
-        DEVHDA_UNLOCK_BOTH(pThis, uSD);
+        int rc = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
+        DEVHDA_UNLOCK_BOTH(pDevIns, pThis, uSD);
         return rc;
     }
@@ -1582,15 +1597,15 @@
     hdaR3StreamUnlock(pStream);
 
-    DEVHDA_UNLOCK_BOTH(pThis, uSD);
+    DEVHDA_UNLOCK_BOTH(pDevIns, pThis, uSD);
     return VINF_SUCCESS;
-#else /* IN_RING3 */
-    RT_NOREF(pThis, iReg, u32Value);
+#else  /* !IN_RING3 */
+    RT_NOREF(pDevIns, pThis, iReg, u32Value);
     return VINF_IOM_R3_MMIO_WRITE;
 #endif /* !IN_RING3 */
 }
 
-static int hdaRegWriteSDLVI(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteSDLVI(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
 #ifdef HDA_USE_DMA_ACCESS_HANDLER
@@ -1611,14 +1626,14 @@
 #endif
 
-    int rc2 = hdaRegWriteU16(pThis, iReg, u32Value);
+    int rc2 = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc2);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 }
 
-static int hdaRegWriteSDFIFOW(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteSDFIFOW(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     uint8_t uSD = HDA_SD_NUM_FROM_REG(pThis, FIFOW, iReg);
@@ -1628,8 +1643,8 @@
 #ifndef IN_RING0
         LogRel(("HDA: Warning: Guest tried to write read-only FIFOW to output stream #%RU8, ignoring\n", uSD));
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
 #else
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_IOM_R3_MMIO_WRITE;
 #endif
@@ -1641,6 +1656,6 @@
         AssertMsgFailed(("[SD%RU8] Warning: Changing FIFOW on non-attached stream (0x%x)\n", uSD, u32Value));
 
-        int rc = hdaRegWriteU16(pThis, iReg, u32Value);
-        DEVHDA_UNLOCK(pThis);
+        int rc = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return rc;
     }
@@ -1667,9 +1682,9 @@
         LogFunc(("[SD%RU8] Updating FIFOW to %RU32 bytes\n", uSD, pStream->u16FIFOW));
 
-        int rc2 = hdaRegWriteU16(pThis, iReg, u32FIFOW);
+        int rc2 = hdaRegWriteU16(pDevIns, pThis, iReg, u32FIFOW);
         AssertRC(rc2);
     }
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 }
@@ -1678,7 +1693,7 @@
  * @note This method could be called for changing value on Output Streams only (ICH6 datasheet 18.2.39).
  */
-static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteSDFIFOS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     uint8_t uSD = HDA_SD_NUM_FROM_REG(pThis, FIFOS, iReg);
@@ -1688,5 +1703,5 @@
         LogRel(("HDA: Warning: Guest tried to write read-only FIFOS to input stream #%RU8, ignoring\n", uSD));
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
     }
@@ -1712,8 +1727,8 @@
     }
 
-    int rc2 = hdaRegWriteU16(pThis, iReg, u32FIFOS);
+    int rc2 = hdaRegWriteU16(pDevIns, pThis, iReg, u32FIFOS);
     AssertRC(rc2);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 }
@@ -1999,7 +2014,7 @@
 #endif /* IN_RING3 */
 
-static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteSDFMT(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     /* Write the wanted stream format into the register in any case.
@@ -2010,16 +2025,16 @@
      * When ignoring those (invalid) formats, this leads to MacOS thinking that the device is malfunctioning
      * and therefore disabling the device completely. */
-    int rc = hdaRegWriteU16(pThis, iReg, u32Value);
+    int rc = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 }
 
 /* Note: Will be called for both, BDPL and BDPU, registers. */
-DECLINLINE(int) hdaRegWriteSDBDPX(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value, uint8_t uSD)
+DECLINLINE(int) hdaRegWriteSDBDPX(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value, uint8_t uSD)
 {
 #ifdef IN_RING3
-    DEVHDA_LOCK(pThis);
+    DEVHDA_LOCK(pDevIns, pThis);
 
 # ifdef HDA_USE_DMA_ACCESS_HANDLER
@@ -2040,28 +2055,28 @@
 # endif
 
-    int rc2 = hdaRegWriteU32(pThis, iReg, u32Value);
+    int rc2 = hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc2);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS; /* Always return success to the MMIO handler. */
 #else  /* !IN_RING3 */
-    RT_NOREF_PV(pThis); RT_NOREF_PV(iReg); RT_NOREF_PV(u32Value); RT_NOREF_PV(uSD);
+    RT_NOREF(pDevIns, pThis, iReg, u32Value, uSD);
     return VINF_IOM_R3_MMIO_WRITE;
-#endif /* IN_RING3 */
-}
-
-static int hdaRegWriteSDBDPL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    return hdaRegWriteSDBDPX(pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPL, iReg));
-}
-
-static int hdaRegWriteSDBDPU(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    return hdaRegWriteSDBDPX(pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPU, iReg));
-}
-
-static int hdaRegReadIRS(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_READ);
+#endif /* !IN_RING3 */
+}
+
+static int hdaRegWriteSDBDPL(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    return hdaRegWriteSDBDPX(pDevIns, pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPL, iReg));
+}
+
+static int hdaRegWriteSDBDPU(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    return hdaRegWriteSDBDPX(pDevIns, pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPU, iReg));
+}
+
+static int hdaRegReadIRS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_READ);
 
     /* regarding 3.4.3 we should mark IRS as busy in case CORB is active */
@@ -2072,14 +2087,14 @@
     }
 
-    int rc = hdaRegReadU32(pThis, iReg, pu32Value);
-    DEVHDA_UNLOCK(pThis);
+    int rc = hdaRegReadU32(pDevIns, pThis, iReg, pu32Value);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 
     return rc;
 }
 
-static int hdaRegWriteIRS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteIRS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF_PV(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     /*
@@ -2095,5 +2110,5 @@
         if (HDA_REG(pThis, CORBWP) != HDA_REG(pThis, CORBRP))
         {
-            DEVHDA_UNLOCK(pThis);
+            DEVHDA_UNLOCK(pDevIns, pThis);
 
             /*
@@ -2117,8 +2132,8 @@
         HDA_REG(pThis, IRS) &= ~HDA_IRS_ICB;    /* busy is clear */
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
 #else  /* !IN_RING3 */
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_IOM_R3_MMIO_WRITE;
 #endif /* !IN_RING3 */
@@ -2130,12 +2145,12 @@
     HDA_REG(pThis, IRS) &= ~(u32Value & HDA_IRS_IRV);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteRIRBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteRIRBWP(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     if (HDA_REG(pThis, CORBCTL) & HDA_CORBCTL_DMA) /* Ignore request if CORB DMA engine is (still) running. */
@@ -2143,5 +2158,5 @@
         LogFunc(("CORB DMA (still) running, skipping\n"));
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
     }
@@ -2163,11 +2178,11 @@
     /* The remaining bits are O, see 6.2.22. */
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
 
-static int hdaRegWriteRINTCNT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+static int hdaRegWriteRINTCNT(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     if (HDA_REG(pThis, CORBCTL) & HDA_CORBCTL_DMA) /* Ignore request if CORB DMA engine is (still) running. */
@@ -2175,23 +2190,23 @@
         LogFunc(("CORB DMA is (still) running, skipping\n"));
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
     }
 
-    int rc = hdaRegWriteU16(pThis, iReg, u32Value);
+    int rc = hdaRegWriteU16(pDevIns, pThis, iReg, u32Value);
     AssertRC(rc);
 
     LogFunc(("Response interrupt count is now %RU8\n", HDA_REG(pThis, RINTCNT) & 0xFF));
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 }
 
-static int hdaRegWriteBase(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteBase(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     uint32_t iRegMem = g_aHdaRegMap[iReg].mem_idx;
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
-
-    int rc = hdaRegWriteU32(pThis, iReg, u32Value);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
+
+    int rc = hdaRegWriteU32(pDevIns, pThis, iReg, u32Value);
     AssertRCSuccess(rc);
 
@@ -2235,12 +2250,12 @@
              pThis->u64CORBBase, pThis->u64RIRBBase, pThis->u64DPBase));
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 }
 
-static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteRIRBSTS(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
     RT_NOREF_PV(iReg);
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     uint8_t v = HDA_REG(pThis, RIRBSTS);
@@ -2253,5 +2268,5 @@
 #endif
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return rc;
 }
@@ -2859,5 +2874,5 @@
 static DECLCALLBACK(void) hdaR3Timer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
-    RT_NOREF(pDevIns, pTimer);
+    RT_NOREF(pTimer);
 
     PHDASTREAM pStream = (PHDASTREAM)pvUser;
@@ -2866,5 +2881,5 @@
     PHDASTATE  pThis   = pStream->pHDAState;
 
-    DEVHDA_LOCK_BOTH_RETURN_VOID(pStream->pHDAState, pStream->u8SD);
+    DEVHDA_LOCK_BOTH_RETURN_VOID(pDevIns, pStream->pHDAState, pStream->u8SD);
 
     hdaR3StreamUpdate(pStream, true /* fInTimer */);
@@ -2888,5 +2903,5 @@
         Log3Func(("fSinksActive=%RTbool\n", fSinkActive));
 
-    DEVHDA_UNLOCK_BOTH(pThis, pStream->u8SD);
+    DEVHDA_UNLOCK_BOTH(pDevIns, pThis, pStream->u8SD);
 }
 
@@ -3163,5 +3178,5 @@
     Assert(cb == 4); Assert((offReg & 3) == 0);
 
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_READ);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_READ);
 
     if (!(HDA_REG(pThis, GCTL) & HDA_GCTL_CRST) && idxRegDsc != HDA_REG_GCTL)
@@ -3174,5 +3189,5 @@
     {
         /* Leave lock before calling read function. */
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
 
         /* ASSUMES gapless DWORD at end of map. */
@@ -3182,5 +3197,5 @@
              * Straight forward DWORD access.
              */
-            rc = g_aHdaRegMap[idxRegDsc].pfnRead(pThis, idxRegDsc, (uint32_t *)pv);
+            rc = g_aHdaRegMap[idxRegDsc].pfnRead(pDevIns, pThis, idxRegDsc, (uint32_t *)pv);
             Log3Func(("\tRead %s => %x (%Rrc)\n", g_aHdaRegMap[idxRegDsc].abbrev, *(uint32_t *)pv, rc));
         }
@@ -3199,5 +3214,5 @@
                 uint32_t        u32Tmp       = 0;
 
-                rc = g_aHdaRegMap[idxRegDsc].pfnRead(pThis, idxRegDsc, &u32Tmp);
+                rc = g_aHdaRegMap[idxRegDsc].pfnRead(pDevIns, pThis, idxRegDsc, &u32Tmp);
                 Log3Func(("\tRead %s[%db] => %x (%Rrc)*\n", g_aHdaRegMap[idxRegDsc].abbrev, cbReg, u32Tmp, rc));
                 if (rc != VINF_SUCCESS)
@@ -3222,5 +3237,5 @@
     else
     {
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
 
         rc = VINF_IOM_MMIO_UNUSED_FF;
@@ -3243,7 +3258,7 @@
 
 
-DECLINLINE(int) hdaWriteReg(PHDASTATE pThis, int idxRegDsc, uint32_t u32Value, char const *pszLog)
-{
-    DEVHDA_LOCK_RETURN(pThis, VINF_IOM_R3_MMIO_WRITE);
+DECLINLINE(int) hdaWriteReg(PPDMDEVINS pDevIns, PHDASTATE pThis, int idxRegDsc, uint32_t u32Value, char const *pszLog)
+{
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_MMIO_WRITE);
 
     if (!(HDA_REG(pThis, GCTL) & HDA_GCTL_CRST) && idxRegDsc != HDA_REG_GCTL)
@@ -3253,5 +3268,5 @@
                  g_aHdaRegMap[idxRegDsc].abbrev));
 
-        DEVHDA_UNLOCK(pThis);
+        DEVHDA_UNLOCK(pDevIns, pThis);
         return VINF_SUCCESS;
     }
@@ -3280,5 +3295,5 @@
                      g_aHdaRegMap[idxRegDsc].abbrev));
 
-            DEVHDA_UNLOCK(pThis);
+            DEVHDA_UNLOCK(pDevIns, pThis);
             return VINF_SUCCESS;
         }
@@ -3295,5 +3310,5 @@
      * do the two-three things a write handle needs to do than enter
      * and exit the lock all the time. */
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 
 #ifdef LOG_ENABLED
@@ -3301,5 +3316,5 @@
     uint32_t const u32OldValue = pThis->au32Regs[idxRegMem];
 #endif
-    int rc = g_aHdaRegMap[idxRegDsc].pfnWrite(pThis, idxRegDsc, u32Value);
+    int rc = g_aHdaRegMap[idxRegDsc].pfnWrite(pDevIns, pThis, idxRegDsc, u32Value);
     Log3Func(("Written value %#x to %s[%d byte]; %x => %x%s, rc=%d\n", u32Value, g_aHdaRegMap[idxRegDsc].abbrev,
               g_aHdaRegMap[idxRegDsc].size, u32OldValue, pThis->au32Regs[idxRegMem], pszLog, rc));
@@ -3367,5 +3382,5 @@
     if (idxRegDsc != -1 && g_aHdaRegMap[idxRegDsc].size == cb)
     {
-        rc = hdaWriteReg(pThis, idxRegDsc, u64Value, "");
+        rc = hdaWriteReg(pDevIns, pThis, idxRegDsc, u64Value, "");
         Log3Func(("\t%#x -> %#x\n", u32LogOldValue, idxRegMem != UINT32_MAX ? pThis->au32Regs[idxRegMem] : UINT32_MAX));
     }
@@ -3411,5 +3426,5 @@
                 uint32_t uLogOldVal = pThis->au32Regs[idxRegMem];
 # endif
-                rc = hdaWriteReg(pThis, idxRegDsc, u64Value, "*");
+                rc = hdaWriteReg(pDevIns, pThis, idxRegDsc, u64Value, "*");
                 Log3Func(("\t%#x -> %#x\n", uLogOldVal, pThis->au32Regs[idxRegMem]));
             }
@@ -4572,5 +4587,5 @@
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
 
-    DEVHDA_LOCK_RETURN(pThis, VERR_IGNORED);
+    DEVHDA_LOCK_RETURN(pDevIns, pThis, VERR_IGNORED);
 
     LogFunc(("uLUN=%u, fFlags=0x%x\n", uLUN, fFlags));
@@ -4584,5 +4599,5 @@
         LogFunc(("Failed with %Rrc\n", rc2));
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 
     return VINF_SUCCESS;
@@ -4596,5 +4611,5 @@
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
 
-    DEVHDA_LOCK(pThis);
+    DEVHDA_LOCK(pDevIns, pThis);
 
     LogFunc(("uLUN=%u, fFlags=0x%x\n", uLUN, fFlags));
@@ -4616,5 +4631,5 @@
     }
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 }
 
@@ -4628,5 +4643,5 @@
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
 
-    DEVHDA_LOCK_RETURN_VOID(pThis);
+    DEVHDA_LOCK_RETURN_VOID(pDevIns, pThis);
 
     LogRel2(("HDA: Powering off ...\n"));
@@ -4646,5 +4661,5 @@
     }
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 }
 
@@ -4728,5 +4743,5 @@
     LogFlowFuncEnter();
 
-    DEVHDA_LOCK_RETURN_VOID(pThis);
+    DEVHDA_LOCK_RETURN_VOID(pDevIns, pThis);
 
      /*
@@ -4743,5 +4758,5 @@
     HDA_REG(pThis, GCTL)    = HDA_GCTL_CRST;
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
 }
 
@@ -4765,5 +4780,5 @@
     PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns); /* this shall come first */
     PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
-    DEVHDA_LOCK(pThis); /** @todo r=bird: this will fail on early constructor failure. */
+    DEVHDA_LOCK(pDevIns, pThis); /** @todo r=bird: this will fail on early constructor failure. */
 
     PHDADRIVER pDrv;
@@ -4793,5 +4808,5 @@
         hdaR3StreamDestroy(&pThis->aStreams[i]);
 
-    DEVHDA_UNLOCK(pThis);
+    DEVHDA_UNLOCK(pDevIns, pThis);
     return VINF_SUCCESS;
 }
Index: /trunk/src/VBox/Devices/Audio/DevHDACommon.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHDACommon.h	(revision 80690)
+++ /trunk/src/VBox/Devices/Audio/DevHDACommon.h	(revision 80691)
@@ -41,7 +41,7 @@
     uint32_t    fFlags;
     /** Read callback. */
-    int       (*pfnRead)(PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
+    int       (*pfnRead)(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t *pu32Value);
     /** Write callback. */
-    int       (*pfnWrite)(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
+    int       (*pfnWrite)(PPDMDEVINS pDevIns, PHDASTATE pThis, uint32_t iReg, uint32_t u32Value);
     /** Index into the register storage array. */
     uint32_t    mem_idx;
