Changeset 41642 in vbox
- Timestamp:
- Jun 11, 2012 10:30:54 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
include/VBox/VBoxGuest.h (modified) (3 diffs)
-
src/VBox/Additions/WINNT/Mouse/NT5/VBoxMFInternal.cpp (modified) (1 diff)
-
src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp (modified) (1 diff)
-
src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp (modified) (6 diffs)
-
src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/VBoxGuest.h
r41640 r41642 312 312 #define VBOXGUEST_IOCTL_WRITE_CORE_DUMP VBOXGUEST_IOCTL_CODE(9, sizeof(VBoxGuestWriteCoreDump)) 313 313 314 /** IOCTL to VBoxGuest to update the mouse status features. */315 # define VBOXGUEST_IOCTL_SET_MOUSE_STATUS VBOXGUEST_IOCTL_CODE_(10, sizeof(uint32_t))316 317 314 /** Input and output buffer layout of the VBOXGUEST_IOCTL_WRITE_CORE 318 315 * request. */ … … 324 321 AssertCompileSize(VBoxGuestWriteCoreDump, 4); 325 322 323 /** IOCTL to VBoxGuest to update the mouse status features. */ 324 # define VBOXGUEST_IOCTL_SET_MOUSE_STATUS VBOXGUEST_IOCTL_CODE_(10, sizeof(uint32_t)) 326 325 327 326 #ifdef VBOX_WITH_HGCM … … 362 361 #endif /* VBOX_WITH_HGCM */ 363 362 364 typedef DECLCALLBACK(void) FNVBOXMOUSENOTIFYCB(void *pvContext); 365 typedef FNVBOXMOUSENOTIFYCB *PFNVBOXMOUSENOTIFYCB; 363 /** IOCTL to for setting the mouse driver callback. (kernel only) */ 364 #define VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK VBOXGUEST_IOCTL_CODE_(31, sizeof(VBoxGuestMouseSetNotifyCallback)) 365 366 /** Input buffer for VBOXGUEST_IOCTL_INTERNAL_SET_MOUSE_NOTIFY_CALLBACK. */ 366 367 typedef struct VBoxGuestMouseSetNotifyCallback 367 368 { 368 PFNVBOXMOUSENOTIFYCB pfnNotify; 369 void *pvNotify; 369 /** 370 * Mouse notification callback. 371 * 372 * @param pvUser The callback argument. 373 */ 374 DECLR0CALLBACKMEMBER(void, pfnNotify, (void *pvUser)); 375 /** The callback argument*/ 376 void *pvUser; 370 377 } VBoxGuestMouseSetNotifyCallback; 371 378 372 #define VBOXGUEST_IOCTL_INTERNAL_SET_MOUSE_NOTIFY_CALLBACK VBOXGUEST_IOCTL_CODE_(31, sizeof(VBoxGuestMouseSetNotifyCallback))373 379 374 380 #ifdef RT_OS_OS2 -
trunk/src/VBox/Additions/WINNT/Mouse/NT5/VBoxMFInternal.cpp
r37423 r41642 150 150 CbInfo.pfnNotify = fRegister ? vboxNewProtMouseEventCb : NULL; 151 151 152 NTSTATUS Status = vboxGdcSubmit(VBOXGUEST_IOCTL_ INTERNAL_SET_MOUSE_NOTIFY_CALLBACK, &CbInfo, sizeof (CbInfo));152 NTSTATUS Status = vboxGdcSubmit(VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK, &CbInfo, sizeof (CbInfo)); 153 153 if (!NT_SUCCESS(Status)) 154 154 { -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
r40198 r41642 843 843 switch (uCmd) 844 844 { 845 case VBOXGUEST_IOCTL_ INTERNAL_SET_MOUSE_NOTIFY_CALLBACK:845 case VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: 846 846 { 847 847 PVOID pvBuf = pStack->Parameters.Others.Argument1; -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
r41640 r41642 727 727 pDevExt->acMouseFeatureUsage[i] = 0; 728 728 pDevExt->fMouseStatus = 0; 729 pDevExt->Mouse SetNotifyCallback.pfnNotify = NULL;730 pDevExt->Mouse SetNotifyCallback.pvNotify= NULL;729 pDevExt->MouseNotifyCallback.pfnNotify = NULL; 730 pDevExt->MouseNotifyCallback.pvUser = NULL; 731 731 pDevExt->cISR = 0; 732 732 … … 1248 1248 { 1249 1249 Log(("VBoxGuestCommonIOCtl: SET_MOUSE_NOTIFY_CALLBACK\n")); 1250 RTSpinlockAcquire(pDevExt->SessionSpinlock); 1251 ASMAtomicWriteNullPtr(&pDevExt->MouseSetNotifyCallback.pfnNotify); 1252 pDevExt->MouseSetNotifyCallback.pvNotify = pNotify->pvNotify; 1253 ASMAtomicWritePtr(&pDevExt->MouseSetNotifyCallback.pfnNotify, 1254 pNotify->pfnNotify); 1255 RTSpinlockReleaseNoInts(pDevExt->SessionSpinlock); 1256 /* Make sure no one is referencing the old data - hacky but should be 1250 1251 RTSpinlockAcquire(pDevExt->EventSpinlock); 1252 pDevExt->MouseNotifyCallback = *pNotify; 1253 RTSpinlockReleaseNoInts(pDevExt->EventSpinlock); 1254 1255 /* Make sure an active ISR is referencing the old data - hacky but should be 1257 1256 * effective. */ 1258 while (pDevExt->cISR > 0); 1257 while (pDevExt->cISR > 0) 1258 ASMNopPause(); 1259 1259 1260 return VINF_SUCCESS; 1260 1261 } … … 2540 2541 2541 2542 #ifndef RT_OS_WINDOWS /* Windows has its own implementation of this. */ 2542 case VBOXGUEST_IOCTL_ INTERNAL_SET_MOUSE_NOTIFY_CALLBACK:2543 case VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: 2543 2544 CHECKRET_RING0("SET_MOUSE_NOTIFY_CALLBACK"); 2544 CHECKRET_SIZE("SET_MOUSE_NOTIFY_CALLBACK", 2545 sizeof(VBoxGuestMouseSetNotifyCallback)); 2545 CHECKRET_SIZE("SET_MOUSE_NOTIFY_CALLBACK", sizeof(VBoxGuestMouseSetNotifyCallback)); 2546 2546 rc = VBoxGuestCommonIOCtl_SetMouseNotifyCallback(pDevExt, (VBoxGuestMouseSetNotifyCallback *)pvData); 2547 2547 break; … … 2639 2639 bool VBoxGuestCommonISR(PVBOXGUESTDEVEXT pDevExt) 2640 2640 { 2641 bool fMousePositionChanged = false; 2642 VMMDevEvents volatile *pReq = pDevExt->pIrqAckEvents; 2643 int rc = 0; 2644 bool fOurIrq; 2641 #ifndef RT_OS_WINDOWS 2642 VBoxGuestMouseSetNotifyCallback MouseNotifyCallback = { NULL, NULL }; 2643 #endif 2644 bool fMousePositionChanged = false; 2645 VMMDevEvents volatile *pReq = pDevExt->pIrqAckEvents; 2646 int rc = 0; 2647 bool fOurIrq; 2645 2648 2646 2649 /* … … 2681 2684 if (fEvents & VMMDEV_EVENT_MOUSE_POSITION_CHANGED) 2682 2685 { 2686 MouseNotifyCallback = pDevExt->MouseNotifyCallback; 2683 2687 fMousePositionChanged = true; 2684 2688 fEvents &= ~VMMDEV_EVENT_MOUSE_POSITION_CHANGED; … … 2760 2764 VBoxGuestNativeISRMousePollEvent(pDevExt); 2761 2765 #ifndef RT_OS_WINDOWS 2762 if ( pDevExt->MouseSetNotifyCallback.pfnNotify)2763 pDevExt->MouseSetNotifyCallback.pfnNotify(pDevExt->MouseSetNotifyCallback.pvNotify);2766 if (MouseNotifyCallback.pfnNotify) 2767 MouseNotifyCallback.pfnNotify(MouseNotifyCallback.pvUser); 2764 2768 #endif 2765 2769 } -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
r41640 r41642 167 167 * together inside the session spinlock. */ 168 168 uint32_t volatile fMouseStatus; 169 /** Callback and user data for a kernel mouse handler. */170 VBoxGuestMouseSetNotifyCallback volatile MouseSetNotifyCallback;171 169 /** Counter of number of active ISRs. Currently used for safely removing 172 170 * the mouse handler callback. */ 173 171 uint32_t volatile cISR; 172 /** Callback and user data for a kernel mouse handler. */ 173 VBoxGuestMouseSetNotifyCallback MouseNotifyCallback; 174 174 175 175 /** Windows part. */
Note:
See TracChangeset
for help on using the changeset viewer.

