Lines Matching defs:pVM

327 static DECLCALLBACK(int) pdmR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass);
328 static DECLCALLBACK(int) pdmR3SaveExec(PVM pVM, PSSMHANDLE pSSM);
329 static DECLCALLBACK(int) pdmR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
330 static DECLCALLBACK(int) pdmR3LoadPrep(PVM pVM, PSSMHANDLE pSSM);
359 * @param pVM Pointer to the VM.
361 VMMR3_INT_DECL(int) PDMR3Init(PVM pVM)
369 AssertRelease(sizeof(pVM->pdm.s) <= sizeof(pVM->pdm.padding));
375 pVM->pdm.s.GCPhysVMMDevHeap = NIL_RTGCPHYS;
376 //pVM->pdm.s.idTracingDev = 0;
377 pVM->pdm.s.idTracingOther = 1024;
382 int rc = pdmR3CritSectBothInitStats(pVM);
384 rc = PDMR3CritSectInit(pVM, &pVM->pdm.s.CritSect, RT_SRC_POS, "PDM");
387 rc = PDMR3CritSectInit(pVM, &pVM->pdm.s.NopCritSect, RT_SRC_POS, "NOP");
389 pVM->pdm.s.NopCritSect.s.Core.fFlags |= RTCRITSECT_FLAGS_NOP;
396 rc = pdmR3LdrInitU(pVM->pUVM);
399 rc = pdmR3AsyncCompletionInit(pVM);
403 rc = pdmR3NetShaperInit(pVM);
406 rc = pdmR3BlkCacheInit(pVM);
408 rc = pdmR3DrvInit(pVM);
410 rc = pdmR3DevInit(pVM);
416 rc = SSMR3RegisterInternal(pVM, "pdm", 1, PDM_SAVED_STATE_VERSION, 128,
425 DBGFR3InfoRegisterInternal(pVM, "pdmtracingids",
437 PDMR3Term(pVM);
448 * @param pVM Pointer to the VM.
453 VMMR3_INT_DECL(void) PDMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
460 pdmR3QueueRelocate(pVM, offDelta);
461 pVM->pdm.s.pDevHlpQueueRC = PDMQueueRCPtr(pVM->pdm.s.pDevHlpQueueR3);
466 pdmR3CritSectBothRelocate(pVM);
471 if (pVM->pdm.s.Pic.pDevInsRC)
473 pVM->pdm.s.Pic.pDevInsRC += offDelta;
474 pVM->pdm.s.Pic.pfnSetIrqRC += offDelta;
475 pVM->pdm.s.Pic.pfnGetInterruptRC += offDelta;
481 if (pVM->pdm.s.Apic.pDevInsRC)
483 pVM->pdm.s.Apic.pDevInsRC += offDelta;
484 pVM->pdm.s.Apic.pfnGetInterruptRC += offDelta;
485 pVM->pdm.s.Apic.pfnSetBaseRC += offDelta;
486 pVM->pdm.s.Apic.pfnGetBaseRC += offDelta;
487 pVM->pdm.s.Apic.pfnSetTPRRC += offDelta;
488 pVM->pdm.s.Apic.pfnGetTPRRC += offDelta;
489 pVM->pdm.s.Apic.pfnBusDeliverRC += offDelta;
490 if (pVM->pdm.s.Apic.pfnLocalInterruptRC)
491 pVM->pdm.s.Apic.pfnLocalInterruptRC += offDelta;
492 pVM->pdm.s.Apic.pfnGetTimerFreqRC += offDelta;
493 pVM->pdm.s.Apic.pfnWriteMSRRC += offDelta;
494 pVM->pdm.s.Apic.pfnReadMSRRC += offDelta;
500 if (pVM->pdm.s.IoApic.pDevInsRC)
502 pVM->pdm.s.IoApic.pDevInsRC += offDelta;
503 pVM->pdm.s.IoApic.pfnSetIrqRC += offDelta;
504 if (pVM->pdm.s.IoApic.pfnSendMsiRC)
505 pVM->pdm.s.IoApic.pfnSendMsiRC += offDelta;
511 for (unsigned i = 0; i < RT_ELEMENTS(pVM->pdm.s.aPciBuses); i++)
513 if (pVM->pdm.s.aPciBuses[i].pDevInsRC)
515 pVM->pdm.s.aPciBuses[i].pDevInsRC += offDelta;
516 pVM->pdm.s.aPciBuses[i].pfnSetIrqRC += offDelta;
525 if (!HMIsEnabled(pVM))
527 rc = PDMR3LdrGetSymbolRC(pVM, NULL, "g_pdmRCDevHlp", &pDevHlpRC);
532 if (!HMIsEnabled(pVM))
534 rc = PDMR3LdrGetSymbolRC(pVM, NULL, "g_pdmRCDevHlp", &pDrvHlpRC);
538 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
543 pDevIns->pvInstanceDataRC = MMHyperR3ToRC(pVM, pDevIns->pvInstanceDataR3);
545 pDevIns->pCritSectRoRC = MMHyperR3ToRC(pVM, pDevIns->pCritSectRoR3);
546 pDevIns->Internal.s.pVMRC = pVM->pVMRC;
548 pDevIns->Internal.s.pPciBusRC = MMHyperR3ToRC(pVM, pDevIns->Internal.s.pPciBusR3);
550 pDevIns->Internal.s.pPciDeviceRC = MMHyperR3ToRC(pVM, pDevIns->Internal.s.pPciDeviceR3);
566 pDrvIns->pvInstanceDataRC = MMHyperR3ToRC(pVM, pDrvIns->pvInstanceDataR3);
567 pDrvIns->Internal.s.pVMRC = pVM->pVMRC;
586 * @param pVM Pointer to the VM.
591 static void pdmR3TermLuns(PVM pVM, PPDMLUN pLun, const char *pszDevice, unsigned iInstance)
613 TMR3TimerDestroyDriver(pVM, pDrvIns);
614 //PDMR3QueueDestroyDriver(pVM, pDrvIns);
615 //pdmR3ThreadDestroyDriver(pVM, pDrvIns);
616 SSMR3DeregisterDriver(pVM, pDrvIns, NULL, 0);
631 * @param pVM Pointer to the VM.
633 VMMR3_INT_DECL(int) PDMR3Term(PVM pVM)
636 AssertMsg(PDMCritSectIsInitialized(&pVM->pdm.s.CritSect), ("bad init order!\n"));
646 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
648 pdmR3TermLuns(pVM, pUsbIns->Internal.s.pLuns, pUsbIns->pReg->szName, pUsbIns->iInstance);
678 //TMR3TimerDestroyUsb(pVM, pUsbIns);
679 //SSMR3DeregisterUsb(pVM, pUsbIns, NULL, 0);
680 pdmR3ThreadDestroyUsb(pVM, pUsbIns);
684 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
686 pdmR3TermLuns(pVM, pDevIns->Internal.s.pLunsR3, pDevIns->pReg->szName, pDevIns->iInstance);
695 TMR3TimerDestroyDevice(pVM, pDevIns);
696 SSMR3DeregisterDevice(pVM, pDevIns, NULL, 0);
697 pdmR3CritSectBothDeleteDevice(pVM, pDevIns);
698 pdmR3ThreadDestroyDevice(pVM, pDevIns);
699 PDMR3QueueDestroyDevice(pVM, pDevIns);
700 PGMR3PhysMMIO2Deregister(pVM, pDevIns, UINT32_MAX);
702 pdmR3AsyncCompletionTemplateDestroyDevice(pVM, pDevIns);
704 DBGFR3InfoDeregisterDevice(pVM, pDevIns, NULL);
710 pdmR3ThreadDestroyAll(pVM);
715 pdmR3BlkCacheTerm(pVM);
721 pdmR3NetShaperTerm(pVM);
727 pdmR3AsyncCompletionTerm(pVM);
733 pdmR3LdrTermU(pVM->pUVM);
738 PDMR3CritSectDelete(&pVM->pdm.s.CritSect);
771 * @param pVM Pointer to the VM.
774 static void pdmR3SaveBoth(PVM pVM, PSSMHANDLE pSSM)
781 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3, i++)
795 * @param pVM Pointer to the VM.
799 static DECLCALLBACK(int) pdmR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
803 pdmR3SaveBoth(pVM, pSSM);
812 * @param pVM Pointer to the VM.
815 static DECLCALLBACK(int) pdmR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
822 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
824 PVMCPU pVCpu = &pVM->aCpus[idCpu];
830 SSMR3PutU32(pSSM, VM_FF_IS_SET(pVM, VM_FF_PDM_DMA));
832 pdmR3SaveBoth(pVM, pSSM);
843 * @param pVM Pointer to the VM.
846 static DECLCALLBACK(int) pdmR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
849 VM_FF_IS_SET(pVM, VM_FF_PDM_QUEUES) ? " VM_FF_PDM_QUEUES" : "",
850 VM_FF_IS_SET(pVM, VM_FF_PDM_DMA) ? " VM_FF_PDM_DMA" : ""));
852 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
854 PVMCPU pVCpu = &pVM->aCpus[idCpu];
866 if (VM_FF_IS_SET(pVM, VM_FF_PDM_QUEUES))
867 PDMR3QueueFlushAll(pVM);
870 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
872 PVMCPU pVCpu = &pVM->aCpus[idCpu];
878 VM_FF_CLEAR(pVM, VM_FF_PDM_DMA);
888 * @param pVM Pointer to the VM.
893 static DECLCALLBACK(int) pdmR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
915 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
917 PVMCPU pVCpu = &pVM->aCpus[idCpu];
990 VM_FF_SET(pVM, VM_FF_PDM_DMA);
991 Log(("pdmR3LoadExec: VM_FF_PDM_DMA=%RTbool\n", VM_FF_IS_SET(pVM, VM_FF_PDM_DMA)));
997 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1024 for (pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1057 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1152 * @param pVM Pointer to the VM.
1154 VMMR3DECL(void) PDMR3PowerOn(PVM pVM)
1163 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns && RT_SUCCESS(rc); pDevIns = pDevIns->Internal.s.pNextR3)
1173 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns && RT_SUCCESS(rc); pUsbIns = pUsbIns->Internal.s.pNext)
1184 pdmR3AsyncCompletionResume(pVM);
1191 pdmR3ThreadResumeAll(pVM);
1197 PDMR3Suspend(pVM);
1311 * @param pVM Pointer to the VM.
1313 static void pdmR3NotifyAsyncWaitAndProcessRequests(PPDMNOTIFYASYNCSTATS pThis, PVM pVM)
1315 VM_ASSERT_EMT0(pVM);
1316 int rc = VMR3AsyncPdmNotificationWaitU(&pVM->pUVM->aCpus[0]);
1319 rc = VMR3ReqProcessU(pVM->pUVM, VMCPUID_ANY, true /*fPriorityOnly*/);
1321 rc = VMR3ReqProcessU(pVM->pUVM, 0/*idDstCpu*/, true /*fPriorityOnly*/);
1473 * @param pVM Pointer to the VM.
1475 VMMR3_INT_DECL(void) PDMR3Reset(PVM pVM)
1482 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1490 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
1512 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1531 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
1547 pdmR3NotifyAsyncWaitAndProcessRequests(&Async, pVM);
1553 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
1554 PDMR3ResetCpu(&pVM->aCpus[idCpu]);
1555 VM_FF_CLEAR(pVM, VM_FF_PDM_DMA);
1565 * @param pVM Pointer to the VM.
1569 VMMR3_INT_DECL(void) PDMR3MemSetup(PVM pVM, bool fAtReset)
1577 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1734 * @param pVM Pointer to the VM.
1737 VMMR3_INT_DECL(void) PDMR3Suspend(PVM pVM)
1740 VM_ASSERT_EMT0(pVM);
1766 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
1785 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
1801 pdmR3NotifyAsyncWaitAndProcessRequests(&Async, pVM);
1807 pdmR3ThreadSuspendAll(pVM);
1896 * @param pVM Pointer to the VM.
1898 VMMR3_INT_DECL(void) PDMR3Resume(PVM pVM)
1907 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns && RT_SUCCESS(rc); pDevIns = pDevIns->Internal.s.pNextR3)
1917 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns && RT_SUCCESS(rc); pUsbIns = pUsbIns->Internal.s.pNext)
1931 pdmR3ThreadResumeAll(pVM);
1937 pdmR3BlkCacheResume(pVM);
1943 PDMR3Suspend(pVM);
2097 * @param pVM Pointer to the VM.
2099 VMMR3DECL(void) PDMR3PowerOff(PVM pVM)
2122 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2141 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2157 pdmR3NotifyAsyncWaitAndProcessRequests(&Async, pVM);
2163 pdmR3ThreadSuspendAll(pVM);
2188 VM_ASSERT_VALID_EXT_RETURN(pUVM->pVM, VERR_INVALID_VM_HANDLE);
2194 for (PPDMDEV pDev = pUVM->pVM->pdm.s.pDevs; pDev; pDev = pDev->pNext)
2248 VM_ASSERT_VALID_EXT_RETURN(pUVM->pVM, VERR_INVALID_VM_HANDLE);
2254 int rc = pdmR3DevFindLun(pUVM->pVM, pszDevice, iInstance, iLun, &pLun);
2283 PVM pVM = pUVM->pVM;
2284 VM_ASSERT_VALID_EXT_RETURN(pVM, VERR_INVALID_VM_HANDLE);
2290 int rc = pdmR3DevFindLun(pVM, pszDevice, iInstance, iLun, &pLun);
2328 VM_ASSERT_VALID_EXT_RETURN(pUVM->pVM, VERR_INVALID_VM_HANDLE);
2334 int rc = pdmR3DevFindLun(pUVM->pVM, pszDevice, iInstance, iLun, &pLun);
2360 * @param pVM Pointer to the VM.
2362 VMMR3DECL(void) PDMR3DmaRun(PVM pVM)
2365 if (VMMGetCpuId(pVM) != 0)
2368 if (VM_FF_TEST_AND_CLEAR(pVM, VM_FF_PDM_DMA))
2370 if (pVM->pdm.s.pDmac)
2372 bool fMore = pVM->pdm.s.pDmac->Reg.pfnRun(pVM->pdm.s.pDmac->pDevIns);
2374 VM_FF_SET(pVM, VM_FF_PDM_DMA);
2384 * @param pVM Pointer to the VM.
2386 VMMR3_INT_DECL(int) PDMR3LockCall(PVM pVM)
2388 return PDMR3CritSectEnterEx(&pVM->pdm.s.CritSect, true /* fHostCall */);
2396 * @param pVM Pointer to the VM.
2401 VMMR3_INT_DECL(int) PDMR3VmmDevHeapRegister(PVM pVM, RTGCPHYS GCPhys, RTR3PTR pvHeap, unsigned cbSize)
2403 Assert(pVM->pdm.s.pvVMMDevHeap == NULL);
2406 pVM->pdm.s.pvVMMDevHeap = pvHeap;
2407 pVM->pdm.s.GCPhysVMMDevHeap = GCPhys;
2408 pVM->pdm.s.cbVMMDevHeap = cbSize;
2409 pVM->pdm.s.cbVMMDevHeapLeft = cbSize;
2418 * @param pVM Pointer to the VM.
2421 VMMR3_INT_DECL(int) PDMR3VmmDevHeapUnregister(PVM pVM, RTGCPHYS GCPhys)
2423 Assert(pVM->pdm.s.GCPhysVMMDevHeap == GCPhys);
2426 pVM->pdm.s.pvVMMDevHeap = NULL;
2427 pVM->pdm.s.GCPhysVMMDevHeap = NIL_RTGCPHYS;
2428 pVM->pdm.s.cbVMMDevHeap = 0;
2429 pVM->pdm.s.cbVMMDevHeapLeft = 0;
2438 * @param pVM Pointer to the VM.
2442 VMMR3_INT_DECL(int) PDMR3VmmDevHeapAlloc(PVM pVM, size_t cbSize, RTR3PTR *ppv)
2445 if (!cbSize || cbSize > pVM->pdm.s.cbVMMDevHeapLeft)
2448 AssertReturn(cbSize && cbSize <= pVM->pdm.s.cbVMMDevHeapLeft, VERR_NO_MEMORY);
2454 *ppv = pVM->pdm.s.pvVMMDevHeap;
2455 pVM->pdm.s.cbVMMDevHeapLeft = 0;
2464 * @param pVM Pointer to the VM.
2467 VMMR3_INT_DECL(int) PDMR3VmmDevHeapFree(PVM pVM, RTR3PTR pv)
2472 pVM->pdm.s.cbVMMDevHeapLeft = pVM->pdm.s.cbVMMDevHeap;
2482 * @param pVM Pointer to the VM.
2492 VMMR3_INT_DECL(int) PDMR3TracingConfig(PVM pVM, const char *pszName, size_t cchName, bool fEnable, bool fApply)
2503 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2512 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2534 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2551 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2570 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2588 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2618 * @param pVM Pointer to the VM.
2621 VMMR3_INT_DECL(bool) PDMR3TracingAreAll(PVM pVM, bool fEnabled)
2623 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2635 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2694 * @param pVM Pointer to the VM.
2698 VMMR3_INT_DECL(int) PDMR3TracingQueryConfig(PVM pVM, char *pszConfig, size_t cbConfig)
2704 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2724 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2771 * @param pVM Pointer to the VM.
2777 static DECLCALLBACK(void) pdmR3InfoTracingIds(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs)
2805 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2813 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)
2821 for (PPDMDEVINS pDevIns = pVM->pdm.s.pDevInstances; pDevIns; pDevIns = pDevIns->Internal.s.pNextR3)
2833 for (PPDMUSBINS pUsbIns = pVM->pdm.s.pUsbInstances; pUsbIns; pUsbIns = pUsbIns->Internal.s.pNext)