static VOID VBoxMPHGSMIDpc(IN PVOID HwDeviceExtension, IN PVOID Context) { NOREF(Context); PVBOXMP_DEVEXT pExt = (PVBOXMP_DEVEXT) HwDeviceExtension; VBoxHGSMIProcessHostQueue(&VBoxCommonFromDeviceExt(pExt)->hostCtx); }
DECLCALLBACK(int) VBoxMPHGSMIHostCmdRequestCB(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDisplay, struct VBVAHOSTCMD **ppCmd) { LOGF_ENTER(); if (!ppCmd) { LOGF_LEAVE(); return VERR_INVALID_PARAMETER; } PHGSMIHOSTCOMMANDCONTEXT pCtx = &((PVBOXMP_COMMON)hHGSMI)->hostCtx; /* pick up the host commands */ VBoxHGSMIProcessHostQueue(pCtx); HGSMICHANNEL *pChannel = HGSMIChannelFindById(&pCtx->channels, u8Channel); if(pChannel) { VBVA_CHANNELCONTEXTS * pContexts = (VBVA_CHANNELCONTEXTS *)pChannel->handler.pvHandler; VBVADISP_CHANNELCONTEXT *pDispContext = VBoxVbvaFindHandlerInfo(pContexts, iDisplay); if(pDispContext) { VBVAHOSTCMD *pCmd; do { pCmd = ASMAtomicReadPtrT(&pDispContext->pCmd, VBVAHOSTCMD *); } while (!ASMAtomicCmpXchgPtr(&pDispContext->pCmd, NULL, pCmd)); *ppCmd = VBoxVbvaReverseList(pCmd); LOGF_LEAVE(); return VINF_SUCCESS; } else { WARN(("!pDispContext for display %d", iDisplay)); } }