Lines Matching refs:pSession

74 static int      vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
76 static uint32_t vbgdGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
80 static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
82 static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
84 static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
86 static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fOrMask,
482 * @param pSession The session.
590 * @param pSession The session.
595 static int vbgdSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint64_t u64ChunkAddr, bool fInflate)
709 static void vbgdCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
712 if ( pDevExt->MemBalloon.pOwner == pSession
713 || pSession == NULL /*unload*/)
1133 pWait->pSession = NULL;
1227 PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession));
1228 if (RT_UNLIKELY(!pSession))
1234 pSession->Process = RTProcSelf();
1235 pSession->R0Process = RTR0ProcHandleSelf();
1236 pSession->pDevExt = pDevExt;
1238 RTListAppend(&pDevExt->SessionList, &pSession->ListNode);
1242 *ppSession = pSession;
1243 LogFlow(("VbgdCommonCreateUserSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
1244 pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
1261 PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession));
1262 if (RT_UNLIKELY(!pSession))
1268 pSession->Process = NIL_RTPROCESS;
1269 pSession->R0Process = NIL_RTR0PROCESS;
1270 pSession->pDevExt = pDevExt;
1272 RTListAppend(&pDevExt->SessionList, &pSession->ListNode);
1276 *ppSession = pSession;
1277 LogFlow(("VbgdCommonCreateKernelSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
1278 pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
1287 * @param pSession The session to close (and free).
1289 void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
1294 LogFlow(("VbgdCommonCloseSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
1295 pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
1298 RTListNodeRemove(&pSession->ListNode);
1301 vbgdAcquireSessionCapabilities(pDevExt, pSession, 0, UINT32_MAX, VBOXGUESTCAPSACQUIRE_FLAGS_NONE,
1303 vbgdSetSessionCapabilities(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
1304 vbgdSetSessionEventFilter(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
1305 vbgdSetSessionMouseStatus(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
1307 vbgdIoCtl_CancelAllWaitEvents(pDevExt, pSession);
1310 for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++)
1311 if (pSession->aHGCMClientIds[i])
1315 Info.u32ClientID = pSession->aHGCMClientIds[i];
1316 pSession->aHGCMClientIds[i] = 0;
1322 pSession->pDevExt = NULL;
1323 pSession->Process = NIL_RTPROCESS;
1324 pSession->R0Process = NIL_RTR0PROCESS;
1325 vbgdCloseMemBalloon(pDevExt, pSession);
1326 RTMemFree(pSession);
1335 * @param pSession The session that's allocating this. Can be NULL.
1337 static PVBOXGUESTWAIT vbgdWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
1385 pWait->pSession = pSession;
1490 * @param pSession The session.
1492 int VbgdCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
1494 LogFlow(("VbgdCommonIoCtlFast: iFunction=%#x pDevExt=%p pSession=%p\n", iFunction, pDevExt, pSession));
1498 NOREF(pSession);
1550 DECLINLINE(int) vbdgCheckWaitEventCondition(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
1555 fMatches &= vbgdGetAllowedEventMaskForSession(pDevExt, pSession);
1556 if (fMatches || pSession->fPendingCancelWaitEvents)
1567 pSession->fPendingCancelWaitEvents = false;
1576 static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
1604 rc = vbdgCheckWaitEventCondition(pDevExt, pSession, pInfo, iEvent, fReqEvents);
1615 pWait = vbgdWaitAlloc(pDevExt, pSession);
1627 rc = vbdgCheckWaitEventCondition(pDevExt, pSession, pInfo, iEvent, fReqEvents);
1698 static int vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
1717 if (pWait->pSession == pSession)
1731 pSession->fPendingCancelWaitEvents = true;
1748 * @param pSession The calling session.
1752 static int vbgdCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VMMDevRequestType enmType,
1886 if (pSession->R0Process == NIL_RTR0PROCESS)
1897 static int vbgdIoCtl_VMMRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
1932 rc = vbgdCheckIfVmmReqIsAllowed(pDevExt, pSession, enmType, pReqHdr);
1956 pSession->u32MousePosChangedSeq = ASMAtomicUoReadU32(&pDevExt->u32MousePosChangedSeq);
2084 static int vbgdIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2111 for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++)
2112 if (!pSession->aHGCMClientIds[i])
2114 pSession->aHGCMClientIds[i] = pInfo->u32ClientID;
2118 if (i >= RT_ELEMENTS(pSession->aHGCMClientIds))
2137 static int vbgdIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2147 for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++)
2148 if (pSession->aHGCMClientIds[i] == u32ClientId)
2150 pSession->aHGCMClientIds[i] = UINT32_MAX;
2154 if (i >= RT_ELEMENTS(pSession->aHGCMClientIds))
2176 if (pSession->aHGCMClientIds[i] == UINT32_MAX)
2177 pSession->aHGCMClientIds[i] = RT_SUCCESS(rc) && RT_SUCCESS(pInfo->result) ? 0 : u32ClientId;
2184 static int vbgdIoCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestHGCMCallInfo *pInfo,
2221 for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++)
2222 if (pSession->aHGCMClientIds[i] == u32ClientId)
2225 if (RT_UNLIKELY(i >= RT_ELEMENTS(pSession->aHGCMClientIds)))
2238 fFlags = !fUserData && pSession->R0Process == NIL_RTR0PROCESS ? VBGLR0_HGCMCALL_F_KERNEL : VBGLR0_HGCMCALL_F_USER;
2285 * @param pSession The session.
2290 static int vbgdIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2304 if ( pDevExt->MemBalloon.pOwner != pSession
2306 pDevExt->MemBalloon.pOwner = pSession;
2308 if (pDevExt->MemBalloon.pOwner == pSession)
2358 * @param pSession The session.
2363 static int vbgdIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2378 if ( pDevExt->MemBalloon.pOwner != pSession
2380 pDevExt->MemBalloon.pOwner = pSession;
2382 if (pDevExt->MemBalloon.pOwner == pSession)
2384 rc = vbgdSetBalloonSizeFromUser(pDevExt, pSession, pInfo->u64ChunkAddr, !!pInfo->fInflate);
2591 * @param pSession The session.
2601 static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2629 fPrevious = pSession->fEventFilter;
2630 pSession->fEventFilter |= fOrMask;
2631 pSession->fEventFilter &= ~fNotMask;
2636 fChanged = fPrevious ^ pSession->fEventFilter;
2666 vbgdBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, pSession->fEventFilter,
2668 pSession->fEventFilter = fPrevious;
2691 * @param pSession The session.
2694 static int vbgdIoCtl_CtlFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestFilterMaskInfo *pInfo)
2704 return vbgdSetSessionEventFilter(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
2740 * @param pSession The session.
2750 static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
2778 fPrevious = pSession->fMouseStatus;
2779 pSession->fMouseStatus |= fOrMask;
2780 pSession->fMouseStatus &= ~fNotMask;
2785 fChanged = fPrevious ^ pSession->fMouseStatus;
2816 vbgdBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, pSession->fMouseStatus,
2818 pSession->fMouseStatus = fPrevious;
2841 * @param pSession The session.
2844 static int vbgdIoCtl_SetMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fFeatures)
2851 return vbgdSetSessionMouseStatus(pDevExt, pSession, fFeatures, ~fFeatures, false /*fSessionTermination*/);
2868 * @param pSession The session.
2873 static uint32_t vbgdGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
2880 * Note! Reads pSession->fAcquiredGuestCaps and pDevExt->fAcquireModeGuestCaps
2886 fAcquiredGuestCaps = ASMAtomicUoReadU32(&pSession->fAcquiredGuestCaps);
2967 * @param pSession The session.
2984 static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
3003 LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x -- invalid fOrMask\n",
3004 pSession, fOrMask, fNotMask, enmFlags));
3011 LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: invalid enmFlags %d\n",
3012 pSession, fOrMask, fNotMask, enmFlags));
3031 LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: VbglGRAlloc failure: %Rrc\n",
3032 pSession, fOrMask, fNotMask, enmFlags, rc));
3056 LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: calling caps acquire for set caps\n",
3057 pSession, fOrMask, fNotMask, enmFlags));
3069 Log(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: configured acquire caps: 0x%x\n",
3070 pSession, fOrMask, fNotMask, enmFlags));
3081 fCurrentOwnedCaps = pSession->fAcquiredGuestCaps;
3091 pSession->fAcquiredGuestCaps |= fSessionAddedCaps;
3097 pSession->fAcquiredGuestCaps &= ~fSessionRemovedCaps;
3115 pSession->fAcquiredGuestCaps &= ~fSessionAddedCaps;
3120 pSession->fAcquiredGuestCaps |= fSessionRemovedCaps;
3181 * @param pSession The session.
3184 static int vbgdIoCtl_GuestCapsAcquire(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestCapsAquire *pAcquire)
3190 rc = vbgdAcquireSessionCapabilities(pDevExt, pSession, pAcquire->u32OrMask, pAcquire->u32NotMask, pAcquire->enmFlags,
3204 * @param pSession The session.
3214 static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
3247 uint32_t fPrevious = pSession->fCapabilities;
3248 pSession->fCapabilities |= fOrMask;
3249 pSession->fCapabilities &= ~fNotMask;
3254 fChanged = fPrevious ^ pSession->fCapabilities;
3273 vbgdBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, pSession->fCapabilities,
3275 pSession->fCapabilities = fPrevious;
3299 * @param pSession The session.
3302 static int vbgdIoCtl_SetCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestSetCapabilitiesInfo *pInfo)
3308 rc = vbgdSetSessionCapabilities(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
3328 * @param pSession The client session.
3333 int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
3337 LogFlow(("VbgdCommonIoCtl: iFunction=%#x pDevExt=%p pSession=%p pvData=%p cbData=%zu\n",
3338 iFunction, pDevExt, pSession, pvData, cbData));
3351 if (pSession->R0Process != NIL_RTR0PROCESS) \
3354 pSession->Process, (uintptr_t)pSession->R0Process)); \
3395 rc = vbgdIoCtl_VMMRequest(pDevExt, pSession, (VMMDevRequestHeader *)pvData, cbData, pcbDataReturned);
3403 bool fInterruptible = pSession->R0Process != NIL_RTR0PROCESS;
3405 rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
3413 rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
3414 !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
3422 rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
3429 bool fInterruptible = pSession->R0Process != NIL_RTR0PROCESS;
3431 rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
3439 rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
3440 !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
3449 rc = vbgdIoCtl_Log(pDevExt, (char *)pvData, cbData, pcbDataReturned, pSession->fUserSession);
3471 rc = vbgdIoCtl_WaitEvent(pDevExt, pSession, (VBoxGuestWaitEventInfo *)pvData,
3472 pcbDataReturned, pSession->R0Process != NIL_RTR0PROCESS);
3477 rc = vbgdIoCtl_CancelAllWaitEvents(pDevExt, pSession);
3482 rc = vbgdIoCtl_CtlFilterMask(pDevExt, pSession, (VBoxGuestFilterMaskInfo *)pvData);
3491 rc = vbgdIoCtl_HGCMConnect(pDevExt, pSession, (VBoxGuestHGCMConnectInfo *)pvData, pcbDataReturned);
3499 rc = vbgdIoCtl_HGCMDisconnect(pDevExt, pSession, (VBoxGuestHGCMDisconnectInfo *)pvData, pcbDataReturned);
3505 rc = vbgdIoCtl_CheckMemoryBalloon(pDevExt, pSession, (VBoxGuestCheckBalloonInfo *)pvData, pcbDataReturned);
3510 rc = vbgdIoCtl_ChangeMemoryBalloon(pDevExt, pSession, (VBoxGuestChangeBalloonInfo *)pvData, pcbDataReturned);
3520 rc = vbgdIoCtl_SetMouseStatus(pDevExt, pSession, *(uint32_t *)pvData);
3532 rc = vbgdIoCtl_GuestCapsAcquire(pDevExt, pSession, (VBoxGuestCapsAquire *)pvData);
3538 rc = vbgdIoCtl_SetCapabilities(pDevExt, pSession, (VBoxGuestSetCapabilitiesInfo *)pvData);
3581 fHandledEvents &= vbgdGetAllowedEventMaskForSession(pDevExt, pWait->pSession);