Lines Matching defs:pUVM

39 #define DBGF_OS_READ_LOCK(pUVM) \
40 do { int rcLock = RTCritSectRwEnterShared(&pUVM->dbgf.s.OSCritSect); AssertRC(rcLock); } while (0)
41 #define DBGF_OS_READ_UNLOCK(pUVM) \
42 do { int rcLock = RTCritSectRwLeaveShared(&pUVM->dbgf.s.OSCritSect); AssertRC(rcLock); } while (0)
44 #define DBGF_OS_WRITE_LOCK(pUVM) \
45 do { int rcLock = RTCritSectRwEnterExcl(&pUVM->dbgf.s.OSCritSect); AssertRC(rcLock); } while (0)
46 #define DBGF_OS_WRITE_UNLOCK(pUVM) \
47 do { int rcLock = RTCritSectRwLeaveExcl(&pUVM->dbgf.s.OSCritSect); AssertRC(rcLock); } while (0)
75 PUVM pUVM;
91 * @param pUVM The user mode VM handle.
93 int dbgfR3OSInit(PUVM pUVM)
95 return RTCritSectRwInit(&pUVM->dbgf.s.OSCritSect);
102 * @param pUVM The user mode VM handle.
104 void dbgfR3OSTerm(PUVM pUVM)
106 RTCritSectRwDelete(&pUVM->dbgf.s.OSCritSect);
111 if (pUVM->dbgf.s.pCurOS)
113 pUVM->dbgf.s.pCurOS->pReg->pfnTerm(pUVM, pUVM->dbgf.s.pCurOS->abData);
114 pUVM->dbgf.s.pCurOS = NULL;
120 while (pUVM->dbgf.s.pOSHead)
122 PDBGFOS pOS = pUVM->dbgf.s.pOSHead;
123 pUVM->dbgf.s.pOSHead = pOS->pNext;
125 pOS->pReg->pfnDestruct(pUVM, pOS->abData);
144 * @param pUVM The user mode VM handle.
147 static DECLCALLBACK(int) dbgfR3OSRegister(PUVM pUVM, PDBGFOSREG pReg)
150 DBGF_OS_READ_LOCK(pUVM);
152 for (pOS = pUVM->dbgf.s.pOSHead; pOS; pOS = pOS->pNext)
155 DBGF_OS_READ_UNLOCK(pUVM);
159 DBGF_OS_READ_UNLOCK(pUVM);
164 pOS = (PDBGFOS)MMR3HeapAllocZU(pUVM, MM_TAG_DBGF_OS, RT_OFFSETOF(DBGFOS, abData[pReg->cbData]));
168 int rc = pOS->pReg->pfnConstruct(pUVM, pOS->abData);
171 DBGF_OS_WRITE_LOCK(pUVM);
172 pOS->pNext = pUVM->dbgf.s.pOSHead;
173 pUVM->dbgf.s.pOSHead = pOS;
174 DBGF_OS_WRITE_UNLOCK(pUVM);
179 pOS->pReg->pfnDestruct(pUVM, pOS->abData);
194 * @param pUVM The user mode VM handle.
198 VMMR3DECL(int) DBGFR3OSRegister(PUVM pUVM, PCDBGFOSREG pReg)
203 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
224 return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/, (PFNRT)dbgfR3OSRegister, 2, pUVM, pReg);
232 * @param pUVM The user mode VM handle.
235 static DECLCALLBACK(int) dbgfR3OSDeregister(PUVM pUVM, PDBGFOSREG pReg)
243 DBGF_OS_WRITE_LOCK(pUVM);
244 for (pOS = pUVM->dbgf.s.pOSHead; pOS; pOSPrev = pOS, pOS = pOS->pNext)
250 pUVM->dbgf.s.pOSHead = pOS->pNext;
251 if (pUVM->dbgf.s.pCurOS == pOS)
253 pUVM->dbgf.s.pCurOS = NULL;
258 DBGF_OS_WRITE_UNLOCK(pUVM);
270 pOS->pReg->pfnTerm(pUVM, pOS->abData);
272 pOS->pReg->pfnDestruct(pUVM, pOS->abData);
293 * @param pUVM The user mode VM handle.
297 VMMR3DECL(int) DBGFR3OSDeregister(PUVM pUVM, PCDBGFOSREG pReg)
302 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
308 DBGF_OS_READ_LOCK(pUVM);
310 for (pOS = pUVM->dbgf.s.pOSHead; pOS; pOS = pOS->pNext)
313 DBGF_OS_READ_UNLOCK(pUVM);
324 return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/, (PFNRT)dbgfR3OSDeregister, 2, pUVM, pReg);
335 * @param pUVM The user mode VM handle.
339 static DECLCALLBACK(int) dbgfR3OSDetect(PUVM pUVM, char *pszName, size_t cchName)
344 DBGF_OS_WRITE_LOCK(pUVM);
346 PDBGFOS const pOldOS = pUVM->dbgf.s.pCurOS;
347 pUVM->dbgf.s.pCurOS = NULL;
349 for (PDBGFOS pNewOS = pUVM->dbgf.s.pOSHead; pNewOS; pNewOS = pNewOS->pNext)
350 if (pNewOS->pReg->pfnProbe(pUVM, pNewOS->abData))
353 pUVM->dbgf.s.pCurOS = pNewOS;
355 rc = pNewOS->pReg->pfnRefresh(pUVM, pNewOS->abData);
359 pOldOS->pReg->pfnTerm(pUVM, pNewOS->abData);
360 rc = pNewOS->pReg->pfnInit(pUVM, pNewOS->abData);
365 DBGF_OS_WRITE_UNLOCK(pUVM);
371 pOldOS->pReg->pfnTerm(pUVM, pOldOS->abData);
373 DBGF_OS_WRITE_UNLOCK(pUVM);
388 * @param pUVM The user mode VM handle.
393 VMMR3DECL(int) DBGFR3OSDetect(PUVM pUVM, char *pszName, size_t cchName)
398 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
403 return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/, (PFNRT)dbgfR3OSDetect, 3, pUVM, pszName, cchName);
411 * @param pUVM The user mode VM handle.
417 static DECLCALLBACK(int) dbgfR3OSQueryNameAndVersion(PUVM pUVM, char *pszName, size_t cchName, char *pszVersion, size_t cchVersion)
422 DBGF_OS_READ_LOCK(pUVM);
424 if (pUVM->dbgf.s.pCurOS)
429 size_t cch = strlen(pUVM->dbgf.s.pCurOS->pReg->szName);
431 memcpy(pszName, pUVM->dbgf.s.pCurOS->pReg->szName, cch + 1);
434 memcpy(pszName, pUVM->dbgf.s.pCurOS->pReg->szName, cchName - 1);
442 int rc2 = pUVM->dbgf.s.pCurOS->pReg->pfnQueryVersion(pUVM, pUVM->dbgf.s.pCurOS->abData, pszVersion, cchVersion);
447 DBGF_OS_READ_UNLOCK(pUVM);
451 DBGF_OS_READ_UNLOCK(pUVM);
463 * @param pUVM The user mode VM handle.
470 VMMR3DECL(int) DBGFR3OSQueryNameAndVersion(PUVM pUVM, char *pszName, size_t cchName, char *pszVersion, size_t cchVersion)
472 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
487 return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/,
488 (PFNRT)dbgfR3OSQueryNameAndVersion, 5, pUVM, pszName, cchName, pszVersion, cchVersion);
495 static DECLCALLBACK(int) dbgfR3OSEmtIDmesg_QueryKernelLog(PDBGFOSIDMESG pThis, PUVM pUVM, uint32_t fFlags, uint32_t cMessages,
499 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
500 AssertReturn(pUVM == pWrapper->pUVM, VERR_INVALID_VM_HANDLE);
507 return VMR3ReqPriorityCallWaitU(pWrapper->pUVM, 0 /*idDstCpu*/,
509 pWrapper->uDigger.pDmesg, pUVM, fFlags, cMessages, pszBuf, cbBuf, pcbActual);
517 * @param pUVM The user mode VM handle.
521 static DECLCALLBACK(void) dbgfR3OSQueryInterface(PUVM pUVM, DBGFOSINTERFACE enmIf, void **ppvIf)
526 UVM_ASSERT_VALID_EXT_RETURN_VOID(pUVM);
531 DBGF_OS_READ_LOCK(pUVM);
532 PDBGFOS pOS = pUVM->dbgf.s.pCurOS;
536 pvDiggerIf = pOS->pReg->pfnQueryInterface(pUVM, pUVM->dbgf.s.pCurOS->abData, enmIf);
553 DBGF_OS_READ_UNLOCK(pUVM);
556 DBGF_OS_READ_UNLOCK(pUVM);
561 int rc = MMR3HeapAllocExU(pUVM, MM_TAG_DBGF_OS, sizeof(*pWrapper), (void **)&pWrapper);
565 pWrapper->pUVM = pUVM;
580 DBGF_OS_WRITE_LOCK(pUVM);
581 if (pUVM->dbgf.s.pCurOS == pOS)
586 DBGF_OS_WRITE_UNLOCK(pUVM);
590 DBGF_OS_WRITE_UNLOCK(pUVM);
596 DBGF_OS_READ_UNLOCK(pUVM);
605 * @param pUVM The user mode VM handle.
609 VMMR3DECL(void *) DBGFR3OSQueryInterface(PUVM pUVM, DBGFOSINTERFACE enmIf)
617 VMR3ReqPriorityCallVoidWaitU(pUVM, VMCPUID_ANY, (PFNRT)dbgfR3OSQueryInterface, 3, pUVM, enmIf, &pvIf);