Lines Matching refs:pCmd

136 static int vmmdevHGCMAddCommand (PVMMDEV pThis, PVBOXHGCMCMD pCmd, RTGCPHYS GCPhys, uint32_t cbSize, VBOXHGCMCMDTYPE enmCmdType)
144 LogFlowFunc(("%p type %d\n", pCmd, enmCmdType));
147 pCmd->pNext = pThis->pHGCMCmdList;
148 pCmd->pPrev = NULL;
152 pThis->pHGCMCmdList->pPrev = pCmd;
155 pThis->pHGCMCmdList = pCmd;
157 pCmd->fInList = true;
162 pCmd->enmCmdType = enmCmdType;
164 pCmd->GCPhys = GCPhys;
165 pCmd->cbSize = cbSize;
185 static int vmmdevHGCMRemoveCommand (PVMMDEV pThis, PVBOXHGCMCMD pCmd)
193 LogFlowFunc(("%p\n", pCmd));
195 if (!pCmd->fInList)
197 LogFlowFunc(("%p not in the list\n", pCmd));
202 if (pCmd->pNext)
204 pCmd->pNext->pPrev = pCmd->pPrev;
211 if (pCmd->pPrev)
213 pCmd->pPrev->pNext = pCmd->pNext;
217 pThis->pHGCMCmdList = pCmd->pNext;
220 pCmd->pNext = NULL;
221 pCmd->pPrev = NULL;
222 pCmd->fInList = false;
244 for (PVBOXHGCMCMD pCmd = pThis->pHGCMCmdList;
245 pCmd;
246 pCmd = pCmd->pNext)
248 if (pCmd->GCPhys == GCPhys)
249 return pCmd;
475 static void vmmdevRestoreSavedCommand(VBOXHGCMCMD *pCmd, VBOXHGCMCMD *pSavedCmd)
478 pCmd->enmCmdType = pSavedCmd->enmCmdType;
479 pCmd->fCancelled = pSavedCmd->fCancelled;
480 pCmd->GCPhys = pSavedCmd->GCPhys;
481 pCmd->cbSize = pSavedCmd->cbSize;
482 pCmd->cLinPtrs = pSavedCmd->cLinPtrs;
483 pCmd->cLinPtrPages = pSavedCmd->cLinPtrPages;
484 pCmd->paLinPtrs = pSavedCmd->paLinPtrs;
496 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (cbCmdSize);
498 if (pCmd)
500 VMMDevHGCMConnect *pHGCMConnectCopy = (VMMDevHGCMConnect *)(pCmd+1);
502 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT);
506 pCmd->paHostParms = NULL;
507 pCmd->cLinPtrs = 0;
508 pCmd->paLinPtrs = NULL;
514 rc = pThis->pHGCMDrv->pfnConnect (pThis->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID);
517 vmmdevHGCMRemoveCommand(pThis, pCmd);
534 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (cbCmdSize);
536 if (pCmd)
538 vmmdevRestoreSavedCommand(pCmd, pSavedCmd);
539 *ppCmd = pCmd;
541 VMMDevHGCMConnect *pHGCMConnectCopy = (VMMDevHGCMConnect *)(pCmd+1);
543 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT);
551 rc = pThis->pHGCMDrv->pfnConnect (pThis->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID);
574 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (cbCmdSize);
576 if (pCmd)
578 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT);
580 pCmd->paHostParms = NULL;
581 pCmd->cLinPtrs = 0;
582 pCmd->paLinPtrs = NULL;
584 rc = pThis->pHGCMDrv->pfnDisconnect (pThis->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID);
587 vmmdevHGCMRemoveCommand(pThis, pCmd);
603 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (cbCmdSize);
605 if (pCmd)
607 vmmdevRestoreSavedCommand(pCmd, pSavedCmd);
608 *ppCmd = pCmd;
610 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT);
612 pCmd->paHostParms = NULL;
613 pCmd->cLinPtrs = 0;
614 pCmd->paLinPtrs = NULL;
616 rc = pThis->pHGCMDrv->pfnDisconnect (pThis->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID);
803 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ(cbCmdSize);
805 if (pCmd == NULL)
810 pCmd->paHostParms = NULL;
811 pCmd->cLinPtrs = cLinPtrs;
812 pCmd->cLinPtrPages = cLinPtrPages;
816 pCmd->paLinPtrs = (VBOXHGCMLINPTR *)RTMemAllocZ( sizeof (VBOXHGCMLINPTR) * cLinPtrs
819 if (pCmd->paLinPtrs == NULL)
821 RTMemFree (pCmd);
827 pCmd->paLinPtrs = NULL;
830 VBOXDD_HGCMCALL_ENTER(pCmd, pHGCMCall->u32Function, pHGCMCall->u32ClientID, cbCmdSize);
840 VBOXHGCMSVCPARM *pHostParm = (VBOXHGCMSVCPARM *)((char *)pCmd + sizeof (struct VBOXHGCMCMD));
844 pCmd->paHostParms = pHostParm;
845 pCmd->cHostParms = cParms;
848 RTGCPHYS *pPages = (RTGCPHYS *)((uint8_t *)pCmd->paLinPtrs + sizeof (VBOXHGCMLINPTR) *cLinPtrs);
920 rc = vmmdevHGCMSaveLinPtr (pThis->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages);
1061 rc = vmmdevHGCMSaveLinPtr (pThis->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages);
1138 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL);
1141 rc = pThis->pHGCMDrv->pfnCall (pThis->pHGCMDrv, pCmd, pHGCMCall->u32ClientID,
1142 pHGCMCall->u32Function, cParms, pCmd->paHostParms);
1147 vmmdevHGCMRemoveCommand (pThis, pCmd);
1153 if (pCmd->paLinPtrs)
1155 RTMemFree (pCmd->paLinPtrs);
1158 RTMemFree (pCmd);
1332 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (cbCmdSize);
1334 if (pCmd == NULL)
1339 vmmdevRestoreSavedCommand(pCmd, pSavedCmd);
1340 *ppCmd = pCmd;
1342 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL);
1352 VBOXHGCMSVCPARM *pHostParm = (VBOXHGCMSVCPARM *)((uint8_t *)pCmd + sizeof (struct VBOXHGCMCMD));
1356 pCmd->paHostParms = pHostParm;
1357 pCmd->cHostParms = cParms;
1416 /* The saved command already have the page list in pCmd->paLinPtrs.
1422 if ( iLinPtr >= pCmd->cLinPtrs
1423 || pCmd->paLinPtrs[iLinPtr].iParm != iParm)
1425 logRelLoadStatePointerIndexMismatch (iParm, pCmd->paLinPtrs[iLinPtr].iParm, iLinPtr, pCmd->cLinPtrs);
1430 VBOXHGCMLINPTR *pLinPtr = &pCmd->paLinPtrs[iLinPtr];
1596 /* The saved command already have the page list in pCmd->paLinPtrs.
1602 if ( iLinPtr >= pCmd->cLinPtrs
1603 || pCmd->paLinPtrs[iLinPtr].iParm != iParm)
1605 logRelLoadStatePointerIndexMismatch (iParm, pCmd->paLinPtrs[iLinPtr].iParm, iLinPtr, pCmd->cLinPtrs);
1610 VBOXHGCMLINPTR *pLinPtr = &pCmd->paLinPtrs[iLinPtr];
1728 rc = pThis->pHGCMDrv->pfnCall (pThis->pHGCMDrv, pCmd, pHGCMCall->u32ClientID, pHGCMCall->u32Function, cParms, pCmd->paHostParms);
1781 PVBOXHGCMCMD pCmd = vmmdevHGCMFindCommandLocked (pThis, GCPhys);
1782 if (pCmd)
1784 pCmd->fCancelled = true;
1785 Log(("vmmdevHGCMCancel2: Cancelled pCmd=%p / GCPhys=%#x\n", pCmd, GCPhys));
1794 static int vmmdevHGCMCmdVerify (PVBOXHGCMCMD pCmd, VMMDevHGCMRequestHeader *pHeader)
1796 switch (pCmd->enmCmdType)
1824 LogRel(("VMMDEV: Invalid HGCM command: pCmd->enmCmdType = 0x%08X, pHeader->header.requestType = 0x%08X\n",
1825 pCmd->enmCmdType, pHeader->header.requestType));
1911 DECLCALLBACK(void) hgcmCompletedWorker (PPDMIHGCMPORT pInterface, int32_t result, PVBOXHGCMCMD pCmd)
1924 * then currently nothing to be done here. The pCmd stays in the list
1931 LogFlowFunc(("VINF_HGCM_SAVE_STATE for command %p\n", pCmd));
1940 VBOXDD_HGCMCALL_COMPLETED_EMT(pCmd, result);
1941 vmmdevHGCMRemoveCommand (pThis, pCmd);
1943 if (pCmd->fCancelled)
1945 LogFlowFunc(("A cancelled command %p: %d\n", pCmd, pCmd->fCancelled));
1958 if (pCmd->cbSize <= sizeof (au8Prealloc))
1964 pHeader = (VMMDevHGCMRequestHeader *)RTMemAlloc (pCmd->cbSize);
1967 LogRel(("VMMDev: Failed to allocate %u bytes for HGCM request completion!!!\n", pCmd->cbSize));
1970 RTMemFree (pCmd);
1988 PDMDevHlpPhysRead(pThis->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize);
1994 rc = vmmdevHGCMCmdVerify (pCmd, pHeader);
2008 if (cParms != pCmd->cHostParms)
2011 VBOXHGCMSVCPARM *pHostParm = pCmd->paHostParms;
2049 size, iLinPtr, pCmd->paLinPtrs);
2059 uint32_t cbHGCMCall = pCmd->cbSize; /* Size of the request. */
2117 if (cParms != pCmd->cHostParms)
2120 VBOXHGCMSVCPARM *pHostParm = pCmd->paHostParms;
2157 rc = vmmdevHGCMWriteLinPtr (pThis->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs);
2167 uint32_t cbHGCMCall = pCmd->cbSize; /* Size of the request. */
2225 if (cParms != pCmd->cHostParms)
2228 VBOXHGCMSVCPARM *pHostParm = pCmd->paHostParms;
2265 rc = vmmdevHGCMWriteLinPtr (pThis->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs);
2275 uint32_t cbHGCMCall = pCmd->cbSize; /* Size of the request. */
2330 VMMDevHGCMConnect *pHGCMConnectCopy = (VMMDevHGCMConnect *)(pCmd+1);
2354 PDMDevHlpPhysWrite(pThis->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize);
2367 if (pCmd->paLinPtrs)
2369 RTMemFree (pCmd->paLinPtrs);
2372 RTMemFree (pCmd);
2374 VBOXDD_HGCMCALL_COMPLETED_DONE(pCmd, idFunction, idClient, result);
2378 DECLCALLBACK(void) hgcmCompleted (PPDMIHGCMPORT pInterface, int32_t result, PVBOXHGCMCMD pCmd)
2382 VBOXDD_HGCMCALL_COMPLETED_REQ(pCmd, result);
2388 (PFNRT)hgcmCompletedWorker, 3, pInterface, result, pCmd);
2536 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (sizeof (struct VBOXHGCMCMD));
2537 AssertReturn(pCmd, VERR_NO_MEMORY);
2539 pCmd->enmCmdType = VBOXHGCMCMDTYPE_LOADSTATE; /* This marks the "old" saved command. */
2541 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE);
2579 PVBOXHGCMCMD pCmd = (PVBOXHGCMCMD)RTMemAllocZ (sizeof (VBOXHGCMCMD));
2580 AssertReturn(pCmd, VERR_NO_MEMORY);
2585 pCmd->enmCmdType = (VBOXHGCMCMDTYPE)u32;
2590 pCmd->fCancelled = f;
2595 pCmd->cLinPtrs = u32;
2597 if (pCmd->cLinPtrs > 0)
2602 pCmd->cLinPtrPages = u32;
2604 pCmd->paLinPtrs = (VBOXHGCMLINPTR *)RTMemAllocZ ( sizeof (VBOXHGCMLINPTR) * pCmd->cLinPtrs
2605 + sizeof (RTGCPHYS) * pCmd->cLinPtrPages);
2606 AssertReturn(pCmd->paLinPtrs, VERR_NO_MEMORY);
2608 RTGCPHYS *pPages = (RTGCPHYS *)((uint8_t *)pCmd->paLinPtrs + sizeof (VBOXHGCMLINPTR) * pCmd->cLinPtrs);
2612 for (i = 0; i < pCmd->cLinPtrs; i++)
2615 VBOXHGCMLINPTR *pLinPtr = &pCmd->paLinPtrs[i];
2647 if (cPages > pCmd->cLinPtrPages)
2650 cPages, pCmd->cLinPtrPages, i, pCmd->cLinPtrs));
2663 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE);
2709 PVBOXHGCMCMD pCmd = NULL; /* Resubmitted command. */
2757 requestHeader->header.rc = vmmdevHGCMConnectSaved (pThis, pHGCMConnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd);
2779 requestHeader->header.rc = vmmdevHGCMDisconnectSaved (pThis, pHGCMDisconnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd);
2809 requestHeader->header.rc = vmmdevHGCMCallSaved (pThis, pHGCMCall, pIter->GCPhys, requestHeader->header.size, f64Bits, &fHGCMCalled, pIter, &pCmd);
2936 if (pCmd)
2938 vmmdevHGCMRemoveCommand (pThis, pCmd);
2940 if (pCmd->paLinPtrs != NULL)
2942 RTMemFree(pCmd->paLinPtrs);
2945 RTMemFree(pCmd);
2946 pCmd = NULL;