Changeset 23910 in vbox for trunk/src/VBox/Devices/VMMDev
- Timestamp:
- Oct 20, 2009 3:54:50 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 53712
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r23016 r23910 206 206 } 207 207 208 static void vmmdevCtlGuestFilterMask_EMT (VMMDevState *pVMMDevState, 209 uint32_t u32OrMask, 210 uint32_t u32NotMask) 211 { 208 void VMMDevCtlSetGuestFilterMask (VMMDevState *pVMMDevState, 209 uint32_t u32OrMask, 210 uint32_t u32NotMask) 211 { 212 PDMCritSectEnter(&pVMMDevState->CritSect, VERR_SEM_BUSY); 213 212 214 const bool fHadEvents = 213 215 (pVMMDevState->u32HostEventFlags & pVMMDevState->u32GuestFilterMask) != 0; 214 216 215 Log((" vmmdevCtlGuestFilterMask_EMT: u32OrMask = 0x%08X, u32NotMask = 0x%08X, fHadEvents = %d.\n", u32OrMask, u32NotMask, fHadEvents));217 Log(("VMMDevCtlSetGuestFilterMask: u32OrMask = 0x%08X, u32NotMask = 0x%08X, fHadEvents = %d.\n", u32OrMask, u32NotMask, fHadEvents)); 216 218 if (fHadEvents) 217 219 { … … 229 231 vmmdevMaybeSetIRQ_EMT (pVMMDevState); 230 232 } 231 } 232 233 void VMMDevCtlSetGuestFilterMask (VMMDevState *pVMMDevState, 234 uint32_t u32OrMask, 235 uint32_t u32NotMask) 233 PDMCritSectLeave(&pVMMDevState->CritSect); 234 } 235 236 void VMMDevNotifyGuest (VMMDevState *pVMMDevState, uint32_t u32EventMask) 236 237 { 237 238 PPDMDEVINS pDevIns = VMMDEVSTATE_2_DEVINS(pVMMDevState); 238 PVM pVM = PDMDevHlpGetVM(pDevIns);239 240 Log(("VMMDevCtlSetGuestFilterMask: u32OrMask = 0x%08X, u32NotMask = 0x%08X.\n", u32OrMask, u32NotMask));241 242 if (VM_IS_EMT(pVM))243 {244 vmmdevCtlGuestFilterMask_EMT (pVMMDevState, u32OrMask, u32NotMask);245 }246 else247 {248 int rc = VMR3ReqCallVoidWait (pVM, VMCPUID_ANY, (PFNRT) vmmdevCtlGuestFilterMask_EMT,249 3, pVMMDevState, u32OrMask, u32NotMask);250 AssertReleaseRC (rc);251 }252 }253 254 void VMMDevNotifyGuest (VMMDevState *pVMMDevState, uint32_t u32EventMask)255 {256 PPDMDEVINS pDevIns = VMMDEVSTATE_2_DEVINS(pVMMDevState);257 PVM pVM = PDMDevHlpGetVM(pDevIns);258 int rc;259 239 260 240 Log3(("VMMDevNotifyGuest: u32EventMask = 0x%08X.\n", u32EventMask)); … … 266 246 return; 267 247 248 PDMCritSectEnter(&pVMMDevState->CritSect, VERR_SEM_BUSY); 268 249 /* No need to wait for the completion of this request. It is a notification 269 250 * about something, which has already happened. 270 251 */ 271 rc = VMR3ReqCallVoidNoWait(pVM, VMCPUID_ANY, (PFNRT)vmmdevNotifyGuest_EMT, 2,pVMMDevState, u32EventMask);272 AssertRC(rc);252 vmmdevNotifyGuest_EMT(pVMMDevState, u32EventMask); 253 PDMCritSectLeave(&pVMMDevState->CritSect); 273 254 } 274 255 … … 1056 1037 * cannot disable these notifications. 1057 1038 */ 1058 vmmdevCtlGuestFilterMask_EMT(pThis,1059 1060 1039 VMMDevCtlSetGuestFilterMask (pThis, 1040 pCtlMaskRequest->u32OrMask, 1041 pCtlMaskRequest->u32NotMask & ~VMMDEV_EVENT_HGCM); 1061 1042 pRequestHeader->rc = VINF_SUCCESS; 1062 1043 … … 1854 1835 { 1855 1836 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1837 AssertCompile(sizeof(pThis->mouseXAbs) == sizeof(*pAbsX)); 1838 AssertCompile(sizeof(pThis->mouseYAbs) == sizeof(*pAbsY)); 1856 1839 if (pAbsX) 1857 *pAbsX = pThis->mouseXAbs;1840 ASMAtomicReadSize(&pThis->mouseXAbs, pAbsX); 1858 1841 if (pAbsY) 1859 *pAbsY = pThis->mouseYAbs;1842 ASMAtomicReadSize(&pThis->mouseYAbs, pAbsY); 1860 1843 return VINF_SUCCESS; 1861 1844 } … … 1871 1854 { 1872 1855 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1856 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1857 1873 1858 if ((pThis->mouseXAbs == absX) && (pThis->mouseYAbs == absY)) 1859 { 1860 PDMCritSectLeave(&pThis->CritSect); 1874 1861 return VINF_SUCCESS; 1862 } 1875 1863 Log2(("vmmdevSetAbsoluteMouse: settings absolute position to x = %d, y = %d\n", absX, absY)); 1876 1864 pThis->mouseXAbs = absX; 1877 1865 pThis->mouseYAbs = absY; 1878 1866 VMMDevNotifyGuest (pThis, VMMDEV_EVENT_MOUSE_POSITION_CHANGED); 1867 PDMCritSectLeave(&pThis->CritSect); 1879 1868 return VINF_SUCCESS; 1880 1869 } … … 1904 1893 { 1905 1894 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1895 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1906 1896 1907 1897 bool bCapsChanged = ((capabilities & VMMDEV_MOUSE_HOST_CAN_ABSOLUTE) … … 1923 1913 VMMDevNotifyGuest (pThis, VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED); 1924 1914 1915 PDMCritSectLeave(&pThis->CritSect); 1925 1916 return VINF_SUCCESS; 1926 1917 } … … 1930 1921 { 1931 1922 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1923 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1932 1924 1933 1925 /* Verify that the new resolution is different and that guest does not yet know about it. */ … … 1961 1953 } 1962 1954 1955 PDMCritSectLeave(&pThis->CritSect); 1963 1956 return VINF_SUCCESS; 1964 1957 } … … 1967 1960 { 1968 1961 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1962 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1969 1963 1970 1964 /* Verify that the new resolution is different and that guest does not yet know about it. */ … … 1982 1976 } 1983 1977 1978 PDMCritSectLeave(&pThis->CritSect); 1984 1979 return VINF_SUCCESS; 1985 1980 } … … 1988 1983 { 1989 1984 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1985 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1990 1986 1991 1987 /* Verify that the new resolution is different and that guest does not yet know about it. */ … … 2003 1999 } 2004 2000 2001 PDMCritSectLeave(&pThis->CritSect); 2005 2002 return VINF_SUCCESS; 2006 2003 } … … 2009 2006 { 2010 2007 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 2008 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 2011 2009 2012 2010 bool fSame = (pThis->fVRDPEnabled == fVRDPEnabled); … … 2022 2020 } 2023 2021 2022 PDMCritSectLeave(&pThis->CritSect); 2024 2023 return VINF_SUCCESS; 2025 2024 } … … 2028 2027 { 2029 2028 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 2029 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 2030 2030 2031 2031 /* Verify that the new resolution is different and that guest does not yet know about it. */ … … 2043 2043 } 2044 2044 2045 PDMCritSectLeave(&pThis->CritSect); 2045 2046 return VINF_SUCCESS; 2046 2047 } … … 2052 2053 { 2053 2054 VMMDevState *pThis = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 2055 int rc = VINF_SUCCESS; 2056 2057 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 2054 2058 2055 2059 /* logon mode? */ … … 2073 2077 } 2074 2078 else 2075 return VERR_INVALID_PARAMETER; 2076 2077 return VINF_SUCCESS; 2079 rc = VERR_INVALID_PARAMETER; 2080 2081 PDMCritSectLeave(&pThis->CritSect); 2082 return rc; 2078 2083 } 2079 2084 … … 2094 2099 pThis->u32VideoAccelEnabled = fEnabled; 2095 2100 } 2096 2097 2101 return; 2098 2102 } … … 2592 2596 pThis->pDrv->pfnUpdateGuestCapabilities(pThis->pDrv, pThis->guestCaps); 2593 2597 } 2594 2595 2598 2596 2599 /**
Note:
See TracChangeset
for help on using the changeset viewer.