Changeset 91921 in vbox
- Timestamp:
- Oct 21, 2021 7:41:36 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 147726
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r91920 r91921 2424 2424 2425 2425 /** Current PDMDEVHLPR3 version number. */ 2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 5 3, 0)2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 54, 0) 2427 2427 2428 2428 /** … … 3140 3140 3141 3141 /** 3142 * Inflate or deflate a memory balloon 3143 * 3144 * @returns VBox status code. 3145 * @param pDevIns The device instance. 3146 * @param fInflate Inflate or deflate memory balloon 3147 * @param cPages Number of pages to free 3148 * @param paPhysPage Array of guest physical addresses 3149 */ 3150 DECLR3CALLBACKMEMBER(int, pfnPhysChangeMemBalloon,(PPDMDEVINS pDevIns, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage)); 3151 3152 /** 3142 3153 * Allocate memory which is associated with current VM instance 3143 3154 * and automatically freed on it's destruction. … … 4667 4678 */ 4668 4679 DECLR3CALLBACKMEMBER(int, pfnVMMDeregisterPatchMemory, (PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)); 4680 4681 /** 4682 * Registers a new shared module for the VM 4683 * 4684 * @returns VBox status code. 4685 * @param pDevIns The device instance. 4686 * @param enmGuestOS Guest OS type. 4687 * @param pszModuleName Module name. 4688 * @param pszVersion Module version. 4689 * @param GCBaseAddr Module base address. 4690 * @param cbModule Module size. 4691 * @param cRegions Number of shared region descriptors. 4692 * @param paRegions Shared region(s). 4693 */ 4694 DECLR3CALLBACKMEMBER(int, pfnSharedModuleRegister,(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion, 4695 RTGCPTR GCBaseAddr, uint32_t cbModule, 4696 uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions)); 4697 4698 /** 4699 * Unregisters a shared module for the VM 4700 * 4701 * @returns VBox status code. 4702 * @param pDevIns The device instance. 4703 * @param pszModuleName Module name. 4704 * @param pszVersion Module version. 4705 * @param GCBaseAddr Module base address. 4706 * @param cbModule Module size. 4707 */ 4708 DECLR3CALLBACKMEMBER(int, pfnSharedModuleUnregister,(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion, 4709 RTGCPTR GCBaseAddr, uint32_t cbModule)); 4710 4711 /** 4712 * Query the state of a page in a shared module 4713 * 4714 * @returns VBox status code. 4715 * @param pVM The cross context VM structure. 4716 * @param GCPtrPage Page address. 4717 * @param pfShared Shared status (out). 4718 * @param pfPageFlags Page flags (out). 4719 */ 4720 DECLR3CALLBACKMEMBER(int, pfnSharedModuleGetPageState, (PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *pfPageFlags)); 4721 4722 /** 4723 * Check all registered modules for changes. 4724 * 4725 * @returns VBox status code. 4726 * @param pDevIns The device instance. 4727 */ 4728 DECLR3CALLBACKMEMBER(int, pfnSharedModuleCheckAll,(PPDMDEVINS pDevIns)); 4669 4729 4670 4730 /** @} */ … … 6759 6819 { 6760 6820 return pDevIns->CTX_SUFF(pHlp)->pfnPhysIsGCPhysNormal(pDevIns, GCPhys); 6821 } 6822 6823 /** 6824 * @copydoc PDMDEVHLPR3::pfnPhysChangeMemBalloon 6825 */ 6826 DECLINLINE(int) PDMDevHlpPhysChangeMemBalloon(PPDMDEVINS pDevIns, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage) 6827 { 6828 return pDevIns->CTX_SUFF(pHlp)->pfnPhysChangeMemBalloon(pDevIns, fInflate, cPages, paPhysPage); 6761 6829 } 6762 6830 … … 8851 8919 } 8852 8920 8921 /** 8922 * @copydoc PDMDEVHLPR3::pfnSharedModuleRegister 8923 */ 8924 DECLINLINE(int) PDMDevHlpSharedModuleRegister(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion, 8925 RTGCPTR GCBaseAddr, uint32_t cbModule, 8926 uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions) 8927 { 8928 return pDevIns->pHlpR3->pfnSharedModuleRegister(pDevIns, enmGuestOS, pszModuleName, pszVersion, 8929 GCBaseAddr, cbModule, cRegions, paRegions); 8930 } 8931 8932 /** 8933 * @copydoc PDMDEVHLPR3::pfnSharedModuleUnregister 8934 */ 8935 DECLINLINE(int) PDMDevHlpSharedModuleUnregister(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion, 8936 RTGCPTR GCBaseAddr, uint32_t cbModule) 8937 { 8938 return pDevIns->pHlpR3->pfnSharedModuleUnregister(pDevIns, pszModuleName, pszVersion, GCBaseAddr, cbModule); 8939 } 8940 8941 /** 8942 * @copydoc PDMDEVHLPR3::pfnSharedModuleGetPageState 8943 */ 8944 DECLINLINE(int) PDMDevHlpSharedModuleGetPageState(PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, 8945 uint64_t *pfPageFlags) 8946 { 8947 return pDevIns->pHlpR3->pfnSharedModuleGetPageState(pDevIns, GCPtrPage, pfShared, pfPageFlags); 8948 } 8949 8950 /** 8951 * @copydoc PDMDEVHLPR3::pfnSharedModuleCheckAll 8952 */ 8953 DECLINLINE(int) PDMDevHlpSharedModuleCheckAll(PPDMDEVINS pDevIns) 8954 { 8955 return pDevIns->pHlpR3->pfnSharedModuleCheckAll(pDevIns); 8956 } 8957 8853 8958 /** Wrapper around SSMR3GetU32 for simplifying getting enum values saved as uint32_t. */ 8854 8959 # define PDMDEVHLP_SSM_GET_ENUM32_RET(a_pHlp, a_pSSM, a_enmDst, a_EnumType) \ -
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r91920 r91921 2126 2126 2127 2127 Log(("VMMDevReq_ChangeMemBalloon\n")); 2128 int rc = P GMR3PhysChangeMemBalloon(PDMDevHlpGetVM(pDevIns), !!pReq->fInflate, pReq->cPages, pReq->aPhysPage);2128 int rc = PDMDevHlpPhysChangeMemBalloon(pDevIns, !!pReq->fInflate, pReq->cPages, pReq->aPhysPage); 2129 2129 if (pReq->fInflate) 2130 2130 STAM_REL_U32_INC(&pThis->StatMemBalloonChunks); … … 2491 2491 * Forward the request to the VMM. 2492 2492 */ 2493 return P GMR3SharedModuleRegister(PDMDevHlpGetVM(pDevIns), pReq->enmGuestOS, pReq->szName, pReq->szVersion,2494 pReq->GCBaseAddr, pReq->cbModule, pReq->cRegions, pReq->aRegions);2493 return PDMDevHlpSharedModuleRegister(pDevIns, pReq->enmGuestOS, pReq->szName, pReq->szVersion, 2494 pReq->GCBaseAddr, pReq->cbModule, pReq->cRegions, pReq->aRegions); 2495 2495 } 2496 2496 … … 2521 2521 * Forward the request to the VMM. 2522 2522 */ 2523 return P GMR3SharedModuleUnregister(PDMDevHlpGetVM(pDevIns), pReq->szName, pReq->szVersion,2524 pReq->GCBaseAddr, pReq->cbModule);2523 return PDMDevHlpSharedModuleUnregister(pDevIns, pReq->szName, pReq->szVersion, 2524 pReq->GCBaseAddr, pReq->cbModule); 2525 2525 } 2526 2526 … … 2537 2537 AssertMsgReturn(pReq->header.size == sizeof(VMMDevSharedModuleCheckRequest), 2538 2538 ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER); 2539 return P GMR3SharedModuleCheckAll(PDMDevHlpGetVM(pDevIns));2539 return PDMDevHlpSharedModuleCheckAll(pDevIns); 2540 2540 } 2541 2541 … … 2574 2574 ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER); 2575 2575 2576 # ifdef DEBUG 2577 return PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), pReq->GCPtrPage, &pReq->fShared, &pReq->uPageFlags); 2578 # else 2579 RT_NOREF(pDevIns); 2580 return VERR_NOT_IMPLEMENTED; 2581 # endif 2576 return PDMDevHlpSharedModuleGetPageState(pDevIns, pReq->GCPtrPage, &pReq->fShared, &pReq->uPageFlags); 2582 2577 } 2583 2578 -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r91920 r91921 974 974 Log(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: returns %RTbool\n", pDevIns->pReg->szName, pDevIns->iInstance, fNormal)); 975 975 return fNormal; 976 } 977 978 979 /** @interface_method_impl{PDMDEVHLPR3,pfnPhysChangeMemBalloon} */ 980 static DECLCALLBACK(int) pdmR3DevHlp_PhysChangeMemBalloon(PPDMDEVINS pDevIns, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage) 981 { 982 PDMDEV_ASSERT_DEVINS(pDevIns); 983 LogFlow(("pdmR3DevHlp_PhysChangeMemBalloon: caller='%s'/%d: fInflate=%RTbool cPages=%u paPhysPage=%p\n", 984 pDevIns->pReg->szName, pDevIns->iInstance, fInflate, cPages, paPhysPage)); 985 986 int rc = PGMR3PhysChangeMemBalloon(pDevIns->Internal.s.pVMR3, fInflate, cPages, paPhysPage); 987 988 Log(("pdmR3DevHlp_PhysChangeMemBalloon: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 989 return rc; 976 990 } 977 991 … … 4356 4370 static DECLCALLBACK(int) pdmR3DevHlp_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 4357 4371 { 4358 PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);4372 PDMDEV_ASSERT_DEVINS(pDevIns); 4359 4373 4360 4374 LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n", … … 4371 4385 static DECLCALLBACK(int) pdmR3DevHlp_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 4372 4386 { 4373 PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);4387 PDMDEV_ASSERT_DEVINS(pDevIns); 4374 4388 4375 4389 LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n", … … 4379 4393 4380 4394 LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4395 return rc; 4396 } 4397 4398 4399 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleRegister} */ 4400 static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleRegister(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion, 4401 RTGCPTR GCBaseAddr, uint32_t cbModule, 4402 uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions) 4403 { 4404 PDMDEV_ASSERT_DEVINS(pDevIns); 4405 4406 LogFlow(("pdmR3DevHlp_SharedModuleRegister: caller='%s'/%d: enmGuestOS=%u pszModuleName=%p:{%s} pszVersion=%p:{%s} GCBaseAddr=%RGv cbModule=%#x cRegions=%u paRegions=%p\n", 4407 pDevIns->pReg->szName, pDevIns->iInstance, enmGuestOS, pszModuleName, pszVersion, GCBaseAddr, cbModule, cRegions, paRegions)); 4408 4409 int rc = PGMR3SharedModuleRegister(pDevIns->Internal.s.pVMR3, enmGuestOS, pszModuleName, pszVersion, 4410 GCBaseAddr, cbModule, cRegions, paRegions); 4411 4412 LogFlow(("pdmR3DevHlp_SharedModuleRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4413 return rc; 4414 } 4415 4416 4417 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleUnregister} */ 4418 static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleUnregister(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion, 4419 RTGCPTR GCBaseAddr, uint32_t cbModule) 4420 { 4421 PDMDEV_ASSERT_DEVINS(pDevIns); 4422 4423 LogFlow(("pdmR3DevHlp_SharedModuleUnregister: caller='%s'/%d: enmGuestOS=%u pszModuleName=%p:{%s} pszVersion=%p:{%s} GCBaseAddr=%RGv cbModule=%#x\n", 4424 pDevIns->pReg->szName, pDevIns->iInstance, pszModuleName, pszVersion, GCBaseAddr, cbModule)); 4425 4426 int rc = PGMR3SharedModuleUnregister(pDevIns->Internal.s.pVMR3, pszModuleName, pszVersion, GCBaseAddr, cbModule); 4427 4428 LogFlow(("pdmR3DevHlp_SharedModuleUnregister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4429 return rc; 4430 } 4431 4432 4433 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleGetPageState} */ 4434 static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleGetPageState(PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *pfPageFlags) 4435 { 4436 PDMDEV_ASSERT_DEVINS(pDevIns); 4437 4438 LogFlow(("pdmR3DevHlp_SharedModuleGetPageState: caller='%s'/%d: GCPtrPage=%RGv pfShared=%p pfPageFlags=%p\n", 4439 pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPage, pfShared, pfPageFlags)); 4440 4441 #ifdef DEBUG 4442 int rc = PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), GCPtrPage, pfShared, pfPageFlags); 4443 #else 4444 int rc = VERR_NOT_IMPLEMENTED; 4445 #endif 4446 4447 LogFlow(("pdmR3DevHlp_SharedModuleGetPageState: caller='%s'/%d: returns %Rrc *pfShared=%RTbool *pfPageFlags=%#RX64\n", 4448 pDevIns->pReg->szName, pDevIns->iInstance, rc, *pfShared, *pfPageFlags)); 4449 return rc; 4450 } 4451 4452 4453 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleCheckAll} */ 4454 static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleCheckAll(PPDMDEVINS pDevIns) 4455 { 4456 PDMDEV_ASSERT_DEVINS(pDevIns); 4457 4458 LogFlow(("pdmR3DevHlp_SharedModuleCheckAll: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance)); 4459 4460 int rc = PGMR3SharedModuleCheckAll(pDevIns->Internal.s.pVMR3); 4461 4462 LogFlow(("pdmR3DevHlp_SharedModuleCheckAll: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4381 4463 return rc; 4382 4464 } … … 4584 4666 pdmR3DevHlp_PhysGCPtr2GCPhys, 4585 4667 pdmR3DevHlp_PhysIsGCPhysNormal, 4668 pdmR3DevHlp_PhysChangeMemBalloon, 4586 4669 pdmR3DevHlp_MMHeapAlloc, 4587 4670 pdmR3DevHlp_MMHeapAllocZ, … … 4748 4831 pdmR3DevHlp_VMMRegisterPatchMemory, 4749 4832 pdmR3DevHlp_VMMDeregisterPatchMemory, 4833 pdmR3DevHlp_SharedModuleRegister, 4834 pdmR3DevHlp_SharedModuleUnregister, 4835 pdmR3DevHlp_SharedModuleGetPageState, 4836 pdmR3DevHlp_SharedModuleCheckAll, 4750 4837 PDM_DEVHLPR3_VERSION /* the end */ 4751 4838 }; … … 4954 5041 pdmR3DevHlp_PhysGCPtr2GCPhys, 4955 5042 pdmR3DevHlp_PhysIsGCPhysNormal, 5043 pdmR3DevHlp_PhysChangeMemBalloon, 4956 5044 pdmR3DevHlp_MMHeapAlloc, 4957 5045 pdmR3DevHlp_MMHeapAllocZ, … … 5118 5206 pdmR3DevHlp_VMMRegisterPatchMemory, 5119 5207 pdmR3DevHlp_VMMDeregisterPatchMemory, 5208 pdmR3DevHlp_SharedModuleRegister, 5209 pdmR3DevHlp_SharedModuleUnregister, 5210 pdmR3DevHlp_SharedModuleGetPageState, 5211 pdmR3DevHlp_SharedModuleCheckAll, 5120 5212 PDM_DEVHLPR3_VERSION /* the end */ 5121 5213 }; … … 5296 5388 PDMDEV_ASSERT_DEVINS(pDevIns); 5297 5389 RT_NOREF(GCPtrPatchMem, cbPatchMem); 5390 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5391 pDevIns->pReg->szName, pDevIns->iInstance)); 5392 return VERR_ACCESS_DENIED; 5393 } 5394 5395 5396 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleRegister} */ 5397 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleRegister(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion, 5398 RTGCPTR GCBaseAddr, uint32_t cbModule, 5399 uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions) 5400 { 5401 PDMDEV_ASSERT_DEVINS(pDevIns); 5402 RT_NOREF(enmGuestOS, pszModuleName, pszVersion, GCBaseAddr, cbModule, cRegions, paRegions); 5403 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5404 pDevIns->pReg->szName, pDevIns->iInstance)); 5405 return VERR_ACCESS_DENIED; 5406 } 5407 5408 5409 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleUnregister} */ 5410 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleUnregister(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion, 5411 RTGCPTR GCBaseAddr, uint32_t cbModule) 5412 { 5413 PDMDEV_ASSERT_DEVINS(pDevIns); 5414 RT_NOREF(pszModuleName, pszVersion, GCBaseAddr, cbModule); 5415 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5416 pDevIns->pReg->szName, pDevIns->iInstance)); 5417 return VERR_ACCESS_DENIED; 5418 } 5419 5420 5421 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleGetPageState} */ 5422 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleGetPageState(PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *pfPageFlags) 5423 { 5424 PDMDEV_ASSERT_DEVINS(pDevIns); 5425 RT_NOREF(GCPtrPage, pfShared, pfPageFlags); 5426 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5427 pDevIns->pReg->szName, pDevIns->iInstance)); 5428 return VERR_ACCESS_DENIED; 5429 } 5430 5431 5432 /** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleCheckAll} */ 5433 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleCheckAll(PPDMDEVINS pDevIns) 5434 { 5435 PDMDEV_ASSERT_DEVINS(pDevIns); 5298 5436 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5299 5437 pDevIns->pReg->szName, pDevIns->iInstance)); … … 5503 5641 pdmR3DevHlp_PhysGCPtr2GCPhys, 5504 5642 pdmR3DevHlp_PhysIsGCPhysNormal, 5643 pdmR3DevHlp_PhysChangeMemBalloon, 5505 5644 pdmR3DevHlp_MMHeapAlloc, 5506 5645 pdmR3DevHlp_MMHeapAllocZ, … … 5667 5806 pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory, 5668 5807 pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory, 5808 pdmR3DevHlp_Untrusted_SharedModuleRegister, 5809 pdmR3DevHlp_Untrusted_SharedModuleUnregister, 5810 pdmR3DevHlp_Untrusted_SharedModuleGetPageState, 5811 pdmR3DevHlp_Untrusted_SharedModuleCheckAll, 5669 5812 PDM_DEVHLPR3_VERSION /* the end */ 5670 5813 };
Note:
See TracChangeset
for help on using the changeset viewer.