儲存庫 vbox 的更動 91920
- 時間撮記:
- 2021-10-21 上午06:45:26 (3 年 以前)
- svn:sync-xref-src-repo-rev:
- 147725
- 位置:
- trunk
- 檔案:
-
- 修改 10 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/include/VBox/vmm/pdmdev.h
r91909 r91920 2424 2424 2425 2425 /** Current PDMDEVHLPR3 version number. */ 2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 5 2, 0)2426 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 53, 0) 2427 2427 2428 2428 /** … … 3129 3129 3130 3130 /** 3131 * Checks if a GC physical address is a normal page, 3132 * i.e. not ROM, MMIO or reserved. 3133 * 3134 * @returns true if normal. 3135 * @returns false if invalid, ROM, MMIO or reserved page. 3136 * @param pDevIns The device instance. 3137 * @param GCPhys The physical address to check. 3138 */ 3139 DECLR3CALLBACKMEMBER(bool, pfnPhysIsGCPhysNormal,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys)); 3140 3141 /** 3131 3142 * Allocate memory which is associated with current VM instance 3132 3143 * and automatically freed on it's destruction. … … 3234 3245 DECLR3CALLBACKMEMBER(int, pfnVMSetRuntimeErrorV,(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszErrorId, 3235 3246 const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(4, 0)); 3247 3248 /** 3249 * Special interface for implementing a HLT-like port on a device. 3250 * 3251 * This can be called directly from device code, provide the device is trusted 3252 * to access the VMM directly. Since we may not have an accurate register set 3253 * and the caller certainly shouldn't (device code does not access CPU 3254 * registers), this function will return when interrupts are pending regardless 3255 * of the actual EFLAGS.IF state. 3256 * 3257 * @returns VBox error status (never informational statuses). 3258 * @param pDevIns The device instance. 3259 * @param idCpu The id of the calling EMT. 3260 */ 3261 DECLR3CALLBACKMEMBER(int, pfnVMWaitForDeviceReady,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 3262 3263 /** 3264 * Wakes up a CPU that has called PDMDEVHLPR3::pfnVMWaitForDeviceReady. 3265 * 3266 * @returns VBox error status (never informational statuses). 3267 * @param pDevIns The device instance. 3268 * @param idCpu The id of the calling EMT. 3269 */ 3270 DECLR3CALLBACKMEMBER(int, pfnVMNotifyCpuDeviceReady,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 3271 3272 /** 3273 * Convenience wrapper for VMR3ReqCallU. 3274 * 3275 * This assumes (1) you're calling a function that returns an VBox status code 3276 * and that you do not wish to wait for it to complete. 3277 * 3278 * @returns VBox status code returned by VMR3ReqCallVU. 3279 * 3280 * @param pDevIns The device instance. 3281 * @param idDstCpu The destination CPU(s). Either a specific CPU ID or 3282 * one of the following special values: 3283 * VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE. 3284 * @param pfnFunction Pointer to the function to call. 3285 * @param cArgs Number of arguments following in the ellipsis. 3286 * @param Args Argument vector. 3287 * 3288 * @remarks See remarks on VMR3ReqCallVU. 3289 */ 3290 DECLR3CALLBACKMEMBER(int, pfnVMReqCallNoWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args)); 3291 3292 /** 3293 * Convenience wrapper for VMR3ReqCallU. 3294 * 3295 * This assumes (1) you're calling a function that returns void, (2) that you 3296 * wish to wait for ever for it to return, and (3) that it's priority request 3297 * that can be safely be handled during async suspend and power off. 3298 * 3299 * @returns VBox status code of VMR3ReqCallVU. 3300 * 3301 * @param pDevIns The device instance. 3302 * @param idDstCpu The destination CPU(s). Either a specific CPU ID or 3303 * one of the following special values: 3304 * VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE. 3305 * @param pfnFunction Pointer to the function to call. 3306 * @param cArgs Number of arguments following in the ellipsis. 3307 * @param Args Argument vector. 3308 * 3309 * @remarks See remarks on VMR3ReqCallVU. 3310 */ 3311 DECLR3CALLBACKMEMBER(int, pfnVMReqPriorityCallWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args)); 3236 3312 3237 3313 /** … … 4571 4647 const char *pszHandlerRC, const char *pszPfHandlerRC, 4572 4648 const char *pszDesc, PPGMPHYSHANDLERTYPE phType)); 4649 4650 /** 4651 * Registers the guest memory range that can be used for patching. 4652 * 4653 * @returns VBox status code. 4654 * @param pDevIns The device instance. 4655 * @param GCPtrPatchMem Patch memory range. 4656 * @param cbPatchMem Size of the memory range. 4657 */ 4658 DECLR3CALLBACKMEMBER(int, pfnVMMRegisterPatchMemory, (PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)); 4659 4660 /** 4661 * Deregisters the guest memory range that can be used for patching. 4662 * 4663 * @returns VBox status code. 4664 * @param pDevIns The device instance. 4665 * @param GCPtrPatchMem Patch memory range. 4666 * @param cbPatchMem Size of the memory range. 4667 */ 4668 DECLR3CALLBACKMEMBER(int, pfnVMMDeregisterPatchMemory, (PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)); 4573 4669 4574 4670 /** @} */ … … 6658 6754 6659 6755 /** 6756 * @copydoc PDMDEVHLPR3::pfnPhysIsGCPhysNormal 6757 */ 6758 DECLINLINE(bool) PDMDevHlpPhysIsGCPhysNormal(PPDMDEVINS pDevIns, RTGCPHYS GCPhys) 6759 { 6760 return pDevIns->CTX_SUFF(pHlp)->pfnPhysIsGCPhysNormal(pDevIns, GCPhys); 6761 } 6762 6763 /** 6660 6764 * @copydoc PDMDEVHLPR3::pfnCpuGetGuestMicroarch 6661 6765 */ … … 6823 6927 rc = pDevIns->CTX_SUFF(pHlp)->pfnVMSetRuntimeErrorV(pDevIns, fFlags, pszErrorId, pszFormat, va); 6824 6928 va_end(va); 6929 return rc; 6930 } 6931 6932 /** 6933 * @copydoc PDMDEVHLPR3::pfnVMWaitForDeviceReady 6934 */ 6935 DECLINLINE(int) PDMDevHlpVMWaitForDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu) 6936 { 6937 return pDevIns->CTX_SUFF(pHlp)->pfnVMWaitForDeviceReady(pDevIns, idCpu); 6938 } 6939 6940 /** 6941 * @copydoc PDMDEVHLPR3::pfnVMNotifyCpuDeviceReady 6942 */ 6943 DECLINLINE(int) PDMDevHlpVMNotifyCpuDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu) 6944 { 6945 return pDevIns->CTX_SUFF(pHlp)->pfnVMNotifyCpuDeviceReady(pDevIns, idCpu); 6946 } 6947 6948 /** 6949 * Convenience wrapper for VMR3ReqCallU. 6950 * 6951 * This assumes (1) you're calling a function that returns an VBox status code 6952 * and that you do not wish to wait for it to complete. 6953 * 6954 * @returns VBox status code returned by VMR3ReqCallVU. 6955 * 6956 * @param pDevIns The device instance. 6957 * @param idDstCpu The destination CPU(s). Either a specific CPU ID or 6958 * one of the following special values: 6959 * VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE. 6960 * @param pfnFunction Pointer to the function to call. 6961 * @param cArgs Number of arguments following in the ellipsis. 6962 * @param ... Argument list. 6963 * 6964 * @remarks See remarks on VMR3ReqCallVU. 6965 */ 6966 DECLINLINE(int) PDMDevHlpVMReqCallNoWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) 6967 { 6968 va_list Args; 6969 va_start(Args, cArgs); 6970 int rc = pDevIns->CTX_SUFF(pHlp)->pfnVMReqCallNoWaitV(pDevIns, idDstCpu, pfnFunction, cArgs, Args); 6971 va_end(Args); 6972 return rc; 6973 } 6974 6975 /** 6976 * Convenience wrapper for VMR3ReqCallU. 6977 * 6978 * This assumes (1) you're calling a function that returns void, (2) that you 6979 * wish to wait for ever for it to return, and (3) that it's priority request 6980 * that can be safely be handled during async suspend and power off. 6981 * 6982 * @returns VBox status code of VMR3ReqCallVU. 6983 * 6984 * @param pDevIns The device instance. 6985 * @param idDstCpu The destination CPU(s). Either a specific CPU ID or 6986 * one of the following special values: 6987 * VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE. 6988 * @param pfnFunction Pointer to the function to call. 6989 * @param cArgs Number of arguments following in the ellipsis. 6990 * @param ... Argument list. 6991 * 6992 * @remarks See remarks on VMR3ReqCallVU. 6993 */ 6994 DECLINLINE(int) PDMDevHlpVMReqPriorityCallWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) 6995 { 6996 va_list Args; 6997 va_start(Args, cArgs); 6998 int rc = pDevIns->CTX_SUFF(pHlp)->pfnVMReqPriorityCallWaitV(pDevIns, idDstCpu, pfnFunction, cArgs, Args); 6999 va_end(Args); 6825 7000 return rc; 6826 7001 } … … 8660 8835 } 8661 8836 8837 /** 8838 * @copydoc PDMDEVHLPR3::pfnVMMRegisterPatchMemory 8839 */ 8840 DECLINLINE(int) PDMDevHlpVMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 8841 { 8842 return pDevIns->pHlpR3->pfnVMMRegisterPatchMemory(pDevIns, GCPtrPatchMem, cbPatchMem); 8843 } 8844 8845 /** 8846 * @copydoc PDMDEVHLPR3::pfnVMMDeregisterPatchMemory 8847 */ 8848 DECLINLINE(int) PDMDevHlpVMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 8849 { 8850 return pDevIns->pHlpR3->pfnVMMDeregisterPatchMemory(pDevIns, GCPtrPatchMem, cbPatchMem); 8851 } 8852 8662 8853 /** Wrapper around SSMR3GetU32 for simplifying getting enum values saved as uint32_t. */ 8663 8854 # define PDMDEVHLP_SSM_GET_ENUM32_RET(a_pHlp, a_pSSM, a_enmDst, a_EnumType) \ -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r91901 r91920 1257 1257 PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State; 1258 1258 STAM_REL_PROFILE_START(&pSVGAState->StatBusyDelayEmts, EmtDelay); 1259 PVM pVM = PDMDevHlpGetVM(pDevIns);1260 1259 VMCPUID idCpu = PDMDevHlpGetCurrentCpuId(pDevIns); 1261 1260 VMCPUSET_ATOMIC_ADD(&pSVGAState->BusyDelayedEmts, idCpu); … … 1264 1263 { 1265 1264 PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect); /* hack around lock order issue. */ 1266 rc = VMR3WaitForDeviceReady(pVM, idCpu);1265 rc = PDMDevHlpVMWaitForDeviceReady(pDevIns, idCpu); 1267 1266 int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED); 1268 1267 PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock); … … 4111 4110 { 4112 4111 # ifdef VMSVGA_USE_EMT_HALT_CODE 4113 PVM pVM = PDMDevHlpGetVM(pDevIns);4114 4112 VMCPUID idCpu = VMCpuSetFindLastPresentInternal(&pSVGAState->BusyDelayedEmts); 4115 4113 if (idCpu != NIL_VMCPUID) 4116 4114 { 4117 VMR3NotifyCpuDeviceReady(pVM, idCpu);4115 PDMDevHlpVMNotifyCpuDeviceReady(pDevIns, idCpu); 4118 4116 while (idCpu-- > 0) 4119 4117 if (VMCPUSET_IS_PRESENT(&pSVGAState->BusyDelayedEmts, idCpu)) 4120 VMR3NotifyCpuDeviceReady(pVM, idCpu);4118 PDMDevHlpVMNotifyCpuDeviceReady(pDevIns, idCpu); 4121 4119 } 4122 4120 # else -
trunk/src/VBox/Devices/PC/DevPcArch.cpp
r91897 r91920 225 225 static DECLCALLBACK(int) pcarchInitComplete(PPDMDEVINS pDevIns) 226 226 { 227 PVM pVM = PDMDevHlpGetVM(pDevIns);228 227 int iRegion = 0; 229 228 RTGCPHYS const GCPhysEnd = 0x100000; … … 231 230 do 232 231 { 233 if (!P GMPhysIsGCPhysNormal(pVM, GCPhysCur))232 if (!PDMDevHlpPhysIsGCPhysNormal(pDevIns, GCPhysCur)) 234 233 GCPhysCur += X86_PAGE_SIZE; 235 234 else … … 238 237 do 239 238 GCPhysCur += X86_PAGE_SIZE; 240 while (GCPhysCur < GCPhysEnd && P GMPhysIsGCPhysNormal(pVM, GCPhysCur));239 while (GCPhysCur < GCPhysEnd && PDMDevHlpPhysIsGCPhysNormal(pDevIns, GCPhysCur)); 241 240 242 241 IOMMMIOHANDLE hMmioRegion; -
trunk/src/VBox/Devices/Storage/DevAHCI.cpp
r90791 r91920 3952 3952 if (pThisCC->pMediaNotify) 3953 3953 { 3954 int rc = VMR3ReqCallNoWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,3955 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2,3956 pThisCC->pMediaNotify, pAhciPort->iLUN);3954 int rc = PDMDevHlpVMReqCallNoWait(pDevIns, VMCPUID_ANY, 3955 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2, 3956 pThisCC->pMediaNotify, pAhciPort->iLUN); 3957 3957 AssertRC(rc); 3958 3958 } -
trunk/src/VBox/Devices/Storage/DevATA.cpp
r90500 r91920 3789 3789 3790 3790 ataR3LockLeave(pDevIns, pCtl); 3791 rc = VMR3ReqPriorityCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,3792 (PFNRT)pDevR3->pDrvMount->pfnUnmount, 3,3793 pDevR3->pDrvMount, false /*=fForce*/, true /*=fEject*/);3791 rc = PDMDevHlpVMReqPriorityCallWait(pDevIns, VMCPUID_ANY, 3792 (PFNRT)pDevR3->pDrvMount->pfnUnmount, 3, 3793 pDevR3->pDrvMount, false /*=fForce*/, true /*=fEject*/); 3794 3794 Assert(RT_SUCCESS(rc) || rc == VERR_PDM_MEDIA_LOCKED || rc == VERR_PDM_MEDIA_NOT_MOUNTED); 3795 3795 if (RT_SUCCESS(rc) && pThisCC->pMediaNotify) 3796 3796 { 3797 rc = VMR3ReqCallNoWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,3798 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2,3799 pThisCC->pMediaNotify, s->iLUN);3797 rc = PDMDevHlpVMReqCallNoWait(pDevIns, VMCPUID_ANY, 3798 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2, 3799 pThisCC->pMediaNotify, s->iLUN); 3800 3800 AssertRC(rc); 3801 3801 } -
trunk/src/VBox/Devices/Storage/DevBusLogic.cpp
r90791 r91920 3149 3149 if (pThisCC->pMediaNotify) 3150 3150 { 3151 int rc = VMR3ReqCallNoWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,3152 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2,3153 pThisCC->pMediaNotify, pTgtDev->iLUN);3151 int rc = PDMDevHlpVMReqCallNoWait(pDevIns, VMCPUID_ANY, 3152 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2, 3153 pThisCC->pMediaNotify, pTgtDev->iLUN); 3154 3154 AssertRC(rc); 3155 3155 } -
trunk/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
r90791 r91920 2512 2512 if (pThisCC->pMediaNotify) 2513 2513 { 2514 int rc = VMR3ReqCallNoWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,2515 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2,2516 pThisCC->pMediaNotify, pTgtDev->iLUN);2514 int rc = PDMDevHlpVMReqCallNoWait(pDevIns, VMCPUID_ANY, 2515 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2, 2516 pThisCC->pMediaNotify, pTgtDev->iLUN); 2517 2517 AssertRC(rc); 2518 2518 } -
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r91703 r91920 2321 2321 if (pThisCC->pMediaNotify) 2322 2322 { 2323 int rc = VMR3ReqCallNoWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,2324 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2,2325 pThisCC->pMediaNotify, pTarget->uTarget);2323 int rc = PDMDevHlpVMReqCallNoWait(pDevIns, VMCPUID_ANY, 2324 (PFNRT)pThisCC->pMediaNotify->pfnEjected, 2, 2325 pThisCC->pMediaNotify, pTarget->uTarget); 2326 2326 AssertRC(rc); 2327 2327 } -
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r91897 r91920 1275 1275 AssertMsgReturn(pReq->header.size == sizeof(*pReq), ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER); 1276 1276 1277 return VMMR3RegisterPatchMemory(PDMDevHlpGetVM(pDevIns), pReq->pPatchMem, pReq->cbPatchMem);1277 return PDMDevHlpVMMRegisterPatchMemory(pDevIns, pReq->pPatchMem, pReq->cbPatchMem); 1278 1278 } 1279 1279 … … 1291 1291 AssertMsgReturn(pReq->header.size == sizeof(*pReq), ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER); 1292 1292 1293 return VMMR3DeregisterPatchMemory(PDMDevHlpGetVM(pDevIns), pReq->pPatchMem, pReq->cbPatchMem);1293 return PDMDevHlpVMMDeregisterPatchMemory(pDevIns, pReq->pPatchMem, pReq->cbPatchMem); 1294 1294 } 1295 1295 -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r91909 r91920 963 963 964 964 965 /** @interface_method_impl{PDMDEVHLPR3,pfnPhysIsGCPhysNormal} */ 966 static DECLCALLBACK(bool) pdmR3DevHlp_PhysIsGCPhysNormal(PPDMDEVINS pDevIns, RTGCPHYS GCPhys) 967 { 968 PDMDEV_ASSERT_DEVINS(pDevIns); 969 LogFlow(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: GCPhys=%RGp\n", 970 pDevIns->pReg->szName, pDevIns->iInstance, GCPhys)); 971 972 bool fNormal = PGMPhysIsGCPhysNormal(pDevIns->Internal.s.pVMR3, GCPhys); 973 974 Log(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: returns %RTbool\n", pDevIns->pReg->szName, pDevIns->iInstance, fNormal)); 975 return fNormal; 976 } 977 978 965 979 /** @interface_method_impl{PDMDEVHLPR3,pfnCpuGetGuestMicroarch} */ 966 980 static DECLCALLBACK(CPUMMICROARCH) pdmR3DevHlp_CpuGetGuestMicroarch(PPDMDEVINS pDevIns) … … 1201 1215 PDMDEV_ASSERT_DEVINS(pDevIns); 1202 1216 int rc = VMSetRuntimeErrorV(pDevIns->Internal.s.pVMR3, fFlags, pszErrorId, pszFormat, va); 1217 return rc; 1218 } 1219 1220 1221 /** @interface_method_impl{PDMDEVHLPR3,pfnVMWaitForDeviceReady} */ 1222 static DECLCALLBACK(int) pdmR3DevHlp_VMWaitForDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu) 1223 { 1224 PDMDEV_ASSERT_DEVINS(pDevIns); 1225 LogFlow(("pdmR3DevHlp_VMWaitForDeviceReady: caller='%s'/%d: idCpu=%u\n", pDevIns->pReg->szName, pDevIns->iInstance, idCpu)); 1226 1227 int rc = VMR3WaitForDeviceReady(pDevIns->Internal.s.pVMR3, idCpu); 1228 1229 LogFlow(("pdmR3DevHlp_VMWaitForDeviceReady: caller='%s'/%d: returns %Rrc\n", 1230 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1231 return rc; 1232 } 1233 1234 1235 /** @interface_method_impl{PDMDEVHLPR3,pfnVMNotifyCpuDeviceReady} */ 1236 static DECLCALLBACK(int) pdmR3DevHlp_VMNotifyCpuDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu) 1237 { 1238 PDMDEV_ASSERT_DEVINS(pDevIns); 1239 LogFlow(("pdmR3DevHlp_VMNotifyCpuDeviceReady: caller='%s'/%d: idCpu=%u\n", pDevIns->pReg->szName, pDevIns->iInstance, idCpu)); 1240 1241 int rc = VMR3NotifyCpuDeviceReady(pDevIns->Internal.s.pVMR3, idCpu); 1242 1243 LogFlow(("pdmR3DevHlp_VMNotifyCpuDeviceReady: caller='%s'/%d: returns %Rrc\n", 1244 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1245 return rc; 1246 } 1247 1248 1249 /** @interface_method_impl{PDMDEVHLPR3,pfnVMReqCallNoWaitV} */ 1250 static DECLCALLBACK(int) pdmR3DevHlp_VMReqCallNoWaitV(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args) 1251 { 1252 PDMDEV_ASSERT_DEVINS(pDevIns); 1253 LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: idDstCpu=%u pfnFunction=%p cArgs=%u\n", 1254 pDevIns->pReg->szName, pDevIns->iInstance, idDstCpu, pfnFunction, cArgs)); 1255 1256 int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, NULL, 0, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_NO_WAIT, 1257 pfnFunction, cArgs, Args); 1258 1259 LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: returns %Rrc\n", 1260 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1261 return rc; 1262 } 1263 1264 1265 /** @interface_method_impl{PDMDEVHLPR3,pfnVMReqPriorityCallWaitV} */ 1266 static DECLCALLBACK(int) pdmR3DevHlp_VMReqPriorityCallWaitV(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args) 1267 { 1268 PDMDEV_ASSERT_DEVINS(pDevIns); 1269 LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: idDstCpu=%u pfnFunction=%p cArgs=%u\n", 1270 pDevIns->pReg->szName, pDevIns->iInstance, idDstCpu, pfnFunction, cArgs)); 1271 1272 PVMREQ pReq; 1273 int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY, 1274 pfnFunction, cArgs, Args); 1275 if (RT_SUCCESS(rc)) 1276 rc = pReq->iStatus; 1277 VMR3ReqFree(pReq); 1278 1279 LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: returns %Rrc\n", 1280 pDevIns->pReg->szName, pDevIns->iInstance, rc)); 1203 1281 return rc; 1204 1282 } … … 4272 4350 LogFlow(("pdmR3DevHlp_GetCpuId: caller='%s'/%d: returns void - *pEax=%#x *pEbx=%#x *pEcx=%#x *pEdx=%#x\n", 4273 4351 pDevIns->pReg->szName, pDevIns->iInstance, *pEax, *pEbx, *pEcx, *pEdx)); 4352 } 4353 4354 4355 /** @interface_method_impl{PDMDEVHLPR3,pfnVMMRegisterPatchMemory} */ 4356 static DECLCALLBACK(int) pdmR3DevHlp_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 4357 { 4358 PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns); 4359 4360 LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n", 4361 pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPatchMem, cbPatchMem)); 4362 4363 int rc = VMMR3RegisterPatchMemory(pDevIns->Internal.s.pVMR3, GCPtrPatchMem, cbPatchMem); 4364 4365 LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4366 return rc; 4367 } 4368 4369 4370 /** @interface_method_impl{PDMDEVHLPR3,pfnVMMDeregisterPatchMemory} */ 4371 static DECLCALLBACK(int) pdmR3DevHlp_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 4372 { 4373 PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns); 4374 4375 LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n", 4376 pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPatchMem, cbPatchMem)); 4377 4378 int rc = VMMR3DeregisterPatchMemory(pDevIns->Internal.s.pVMR3, GCPtrPatchMem, cbPatchMem); 4379 4380 LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 4381 return rc; 4274 4382 } 4275 4383 … … 4475 4583 pdmR3DevHlp_PhysWriteGCVirt, 4476 4584 pdmR3DevHlp_PhysGCPtr2GCPhys, 4585 pdmR3DevHlp_PhysIsGCPhysNormal, 4477 4586 pdmR3DevHlp_MMHeapAlloc, 4478 4587 pdmR3DevHlp_MMHeapAllocZ, … … 4486 4595 pdmR3DevHlp_VMSetErrorV, 4487 4596 pdmR3DevHlp_VMSetRuntimeErrorV, 4597 pdmR3DevHlp_VMWaitForDeviceReady, 4598 pdmR3DevHlp_VMNotifyCpuDeviceReady, 4599 pdmR3DevHlp_VMReqCallNoWaitV, 4600 pdmR3DevHlp_VMReqPriorityCallWaitV, 4488 4601 pdmR3DevHlp_DBGFStopV, 4489 4602 pdmR3DevHlp_DBGFInfoRegister, … … 4633 4746 pdmR3DevHlp_QueryGenericUserObject, 4634 4747 pdmR3DevHlp_PGMHandlerPhysicalTypeRegister, 4748 pdmR3DevHlp_VMMRegisterPatchMemory, 4749 pdmR3DevHlp_VMMDeregisterPatchMemory, 4635 4750 PDM_DEVHLPR3_VERSION /* the end */ 4636 4751 }; … … 4838 4953 pdmR3DevHlp_PhysWriteGCVirt, 4839 4954 pdmR3DevHlp_PhysGCPtr2GCPhys, 4955 pdmR3DevHlp_PhysIsGCPhysNormal, 4840 4956 pdmR3DevHlp_MMHeapAlloc, 4841 4957 pdmR3DevHlp_MMHeapAllocZ, … … 4849 4965 pdmR3DevHlp_VMSetErrorV, 4850 4966 pdmR3DevHlp_VMSetRuntimeErrorV, 4967 pdmR3DevHlp_VMWaitForDeviceReady, 4968 pdmR3DevHlp_VMNotifyCpuDeviceReady, 4969 pdmR3DevHlp_VMReqCallNoWaitV, 4970 pdmR3DevHlp_VMReqPriorityCallWaitV, 4851 4971 pdmR3DevHlp_DBGFStopV, 4852 4972 pdmR3DevHlp_DBGFInfoRegister, … … 4996 5116 pdmR3DevHlp_QueryGenericUserObject, 4997 5117 pdmR3DevHlp_PGMHandlerPhysicalTypeRegister, 5118 pdmR3DevHlp_VMMRegisterPatchMemory, 5119 pdmR3DevHlp_VMMDeregisterPatchMemory, 4998 5120 PDM_DEVHLPR3_VERSION /* the end */ 4999 5121 }; … … 5152 5274 PDMDEV_ASSERT_DEVINS(pDevIns); 5153 5275 RT_NOREF(enmKind, pfnHandlerR3, pszHandlerR0, pszPfHandlerR0, pszHandlerRC, pszPfHandlerRC, pszDesc, phType); 5276 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5277 pDevIns->pReg->szName, pDevIns->iInstance)); 5278 return VERR_ACCESS_DENIED; 5279 } 5280 5281 5282 /** @interface_method_impl{PDMDEVHLPR3,pfnVMMRegisterPatchMemory} */ 5283 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 5284 { 5285 PDMDEV_ASSERT_DEVINS(pDevIns); 5286 RT_NOREF(GCPtrPatchMem, cbPatchMem); 5287 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5288 pDevIns->pReg->szName, pDevIns->iInstance)); 5289 return VERR_ACCESS_DENIED; 5290 } 5291 5292 5293 /** @interface_method_impl{PDMDEVHLPR3,pfnVMMDeregisterPatchMemory} */ 5294 static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem) 5295 { 5296 PDMDEV_ASSERT_DEVINS(pDevIns); 5297 RT_NOREF(GCPtrPatchMem, cbPatchMem); 5154 5298 AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n", 5155 5299 pDevIns->pReg->szName, pDevIns->iInstance)); … … 5358 5502 pdmR3DevHlp_PhysWriteGCVirt, 5359 5503 pdmR3DevHlp_PhysGCPtr2GCPhys, 5504 pdmR3DevHlp_PhysIsGCPhysNormal, 5360 5505 pdmR3DevHlp_MMHeapAlloc, 5361 5506 pdmR3DevHlp_MMHeapAllocZ, … … 5369 5514 pdmR3DevHlp_VMSetErrorV, 5370 5515 pdmR3DevHlp_VMSetRuntimeErrorV, 5516 pdmR3DevHlp_VMWaitForDeviceReady, 5517 pdmR3DevHlp_VMNotifyCpuDeviceReady, 5518 pdmR3DevHlp_VMReqCallNoWaitV, 5519 pdmR3DevHlp_VMReqPriorityCallWaitV, 5371 5520 pdmR3DevHlp_DBGFStopV, 5372 5521 pdmR3DevHlp_DBGFInfoRegister, … … 5516 5665 pdmR3DevHlp_Untrusted_QueryGenericUserObject, 5517 5666 pdmR3DevHlp_Untrusted_PGMHandlerPhysicalTypeRegister, 5667 pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory, 5668 pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory, 5518 5669 PDM_DEVHLPR3_VERSION /* the end */ 5519 5670 };
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器