- Timestamp:
- May 21, 2010 3:58:56 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 61925
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/HGSMI/HGSMI.h
r28800 r29742 241 241 } 242 242 243 DECLINLINE(uint8_t *) HGSMIBufferDataAndChInfoFromOffset (const HGSMIAREA *pArea, HGSMIOFFSET offBuffer, uint16_t * pChInfo) 244 { 245 HGSMIBUFFERHEADER *pHeader = HGSMIOffsetToPointer (pArea, offBuffer); 246 Assert(pHeader); 247 if(pHeader) 248 { 249 *pChInfo = pHeader->u16ChannelInfo; 250 return HGSMIBufferData(pHeader); 251 } 252 return NULL; 253 } 254 243 255 HGSMICHANNEL *HGSMIChannelFindById (HGSMICHANNELINFO * pChannelInfo, uint8_t u8Channel); 244 256 -
trunk/include/VBox/VBoxVideo.h
r29488 r29742 812 812 # define VBVA_VDMA_CMD 11 /* G->H DMA command */ 813 813 #endif 814 #define VBVA_INFO_CAPS 12 /* informs host about HGSMI caps. see _VBVACAPS below */ 814 815 815 816 /* host->guest commands */ … … 1013 1014 1014 1015 } VBVAMOUSEPOINTERSHAPE; 1016 1017 /* the guest driver can handle asynch guest cmd completion by reading the command offset from io port */ 1018 #define VBVACAPS_COMPLETEGCMD_BY_IOREAD 0x00000001 1019 /* the guest driver can handle video adapter IRQs */ 1020 #define VBVACAPS_IRQ 0x00000002 1021 typedef struct _VBVACAPS 1022 { 1023 int32_t rc; 1024 uint32_t fCaps; 1025 } VBVACAPS; 1015 1026 1016 1027 #pragma pack() -
trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp
r29731 r29742 1568 1568 vboxVDbgPrintR((__FUNCTION__": pfnDirect3DCreate9Ex failed, hr (%d)\n", hr)); 1569 1569 1570 hr =VBoxDispD3DClose(&pAdapter->D3D);1570 VBoxDispD3DClose(&pAdapter->D3D); 1571 1571 } 1572 1572 else -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h
r29710 r29742 288 288 VBOXSHGSMILIST CtlList; 289 289 VBOXSHGSMILIST DmaCmdList; 290 #ifdef VBOX_WITH_VIDEOHWACCEL 291 VBOXSHGSMILIST VhwaCmdList; 292 #endif 290 293 BOOL bSetNotifyDxDpc; 291 294 BOOL bNotifyDxDpc; -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp
r28800 r29742 380 380 AssertFailed (); 381 381 return VERR_INTERNAL_ERROR; 382 } 383 #else 384 int vbvaInitInfoCaps (PDEVICE_EXTENSION PrimaryExtension, void *pvContext, void *pvData) 385 { 386 VBVACAPS *pCaps = (VBVACAPS*)pvData; 387 pCaps->rc = VERR_NOT_IMPLEMENTED; 388 pCaps->fCaps = VBVACAPS_COMPLETEGCMD_BY_IOREAD | VBVACAPS_IRQ; 389 return VINF_SUCCESS; 390 } 391 392 393 int vbvaFinalizeInfoCaps (PDEVICE_EXTENSION PrimaryExtension, void *pvContext, void *pvData) 394 { 395 VBVACAPS *pCaps = (VBVACAPS*)pvData; 396 AssertRC(pCaps->rc); 397 return pCaps->rc; 382 398 } 383 399 #endif … … 436 452 * i.e. it is assigned by Video Memory Manager, 437 453 * The FB information should be passed to guest from our DxgkDdiSetVidPnSourceAddress callback */ 454 455 /* Inform about caps */ 456 rc = vboxCallVBVA (PrimaryExtension, 457 VBVA_INFO_CAPS, 458 sizeof (VBVACAPS), 459 vbvaInitInfoCaps, 460 vbvaFinalizeInfoCaps, 461 NULL); 462 AssertRC(rc); 463 if (RT_SUCCESS (rc)) 438 464 #endif 439 465 { -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoShgsmi.cpp
r28800 r29742 188 188 #define VBOXSHGSMI_LISTENTRY2CMD(_pEntry) ( (PVBOXSHGSMIHEADER)((uint8_t *)(_pEntry) - RT_OFFSETOF(VBOXSHGSMIHEADER, pvNext)) ) 189 189 190 int VBoxSHGSMICommandProcessCompletion (struct _HGSMIHEAP * pHeap, HGSMIOFFSET offCmd, bool bIrq, PVBOXSHGSMILIST pPostProcessList)190 int VBoxSHGSMICommandProcessCompletion (struct _HGSMIHEAP * pHeap, VBOXSHGSMIHEADER* pCur, bool bIrq, PVBOXSHGSMILIST pPostProcessList) 191 191 { 192 192 int rc = VINF_SUCCESS; 193 193 194 PVBOXSHGSMIHEADER pCur = (PVBOXSHGSMIHEADER)HGSMIBufferDataFromOffset (&pHeap->area, offCmd); 195 Assert(pCur); 196 if (pCur) 197 { 198 do 194 do 195 { 196 if (pCur->fFlags & VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ) 199 197 { 200 if (pCur->fFlags & VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ) 198 Assert(bIrq); 199 200 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion = NULL; 201 void *pvCompletion; 202 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCallback = (PFNVBOXSHGSMICMDCOMPLETION_IRQ)pCur->u64Info1; 203 void *pvCallback = (void*)pCur->u64Info2; 204 205 pfnCallback(pHeap, VBoxSHGSMIBufferData(pCur), pvCallback, &pfnCompletion, &pvCompletion); 206 if (pfnCompletion) 201 207 { 202 Assert(bIrq); 203 204 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion = NULL; 205 void *pvCompletion; 206 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCallback = (PFNVBOXSHGSMICMDCOMPLETION_IRQ)pCur->u64Info1; 207 void *pvCallback = (void*)pCur->u64Info2; 208 209 pfnCallback(pHeap, VBoxSHGSMIBufferData(pCur), pvCallback, &pfnCompletion, &pvCompletion); 210 if (pfnCompletion) 211 { 212 pCur->u64Info1 = (uint64_t)pfnCompletion; 213 pCur->u64Info2 = (uint64_t)pvCompletion; 214 pCur->fFlags &= ~VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ; 215 } 216 else 217 { 218 /* nothing to do with this command */ 219 break; 220 } 221 } 222 223 if (!bIrq) 224 { 225 PFNVBOXSHGSMICMDCOMPLETION pfnCallback = (PFNVBOXSHGSMICMDCOMPLETION)pCur->u64Info1; 226 void *pvCallback = (void*)pCur->u64Info2; 227 pfnCallback(pHeap, VBoxSHGSMIBufferData(pCur), pvCallback); 208 pCur->u64Info1 = (uint64_t)pfnCompletion; 209 pCur->u64Info2 = (uint64_t)pvCompletion; 210 pCur->fFlags &= ~VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ; 228 211 } 229 212 else 230 vboxSHGSMIListPut(pPostProcessList, VBOXSHGSMI_CMD2LISTENTRY(pCur), VBOXSHGSMI_CMD2LISTENTRY(pCur)); 231 } while (0); 232 } 233 else 234 { 235 rc = VERR_INVALID_PARAMETER; 236 } 213 { 214 /* nothing to do with this command */ 215 break; 216 } 217 } 218 219 if (!bIrq) 220 { 221 PFNVBOXSHGSMICMDCOMPLETION pfnCallback = (PFNVBOXSHGSMICMDCOMPLETION)pCur->u64Info1; 222 void *pvCallback = (void*)pCur->u64Info2; 223 pfnCallback(pHeap, VBoxSHGSMIBufferData(pCur), pvCallback); 224 } 225 else 226 vboxSHGSMIListPut(pPostProcessList, VBOXSHGSMI_CMD2LISTENTRY(pCur), VBOXSHGSMI_CMD2LISTENTRY(pCur)); 227 } while (0); 228 237 229 238 230 return rc; -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoShgsmi.h
r28800 r29742 102 102 void* VBoxSHGSMICommandAlloc(struct _HGSMIHEAP * pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo); 103 103 void VBoxSHGSMICommandFree(struct _HGSMIHEAP * pHeap, void *pvBuffer); 104 int VBoxSHGSMICommandProcessCompletion(struct _HGSMIHEAP * pHeap, HGSMIOFFSET offCmd, bool bIrq, PVBOXSHGSMILIST pPostProcessList);104 int VBoxSHGSMICommandProcessCompletion(struct _HGSMIHEAP * pHeap, VBOXSHGSMIHEADER* pCmd, bool bIrq, PVBOXSHGSMILIST pPostProcessList); 105 105 int VBoxSHGSMICommandPostprocessCompletion(struct _HGSMIHEAP * pHeap, PVBOXSHGSMILIST pPostProcessList); 106 106 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVhwa.cpp
r29710 r29742 173 173 vboxVhwaCommandFree(pDevExt, pCmd); 174 174 } 175 176 void vboxVhwaCompletionListProcess(PDEVICE_EXTENSION pDevExt, VBOXSHGSMILIST *pList) 177 { 178 PVBOXSHGSMILIST_ENTRY pNext, pCur; 179 for (pCur = pList->pFirst; pCur; pCur = pNext) 180 { 181 /* need to save next since the command may be released in a pfnCallback and thus its data might be invalid */ 182 pNext = pCur->pNext; 183 VBOXVHWACMD *pCmd = VBOXVHWA_LISTENTRY2CMD(pCur); 184 PFNVBOXVHWACMDCOMPLETION pfnCallback = (PFNVBOXVHWACMDCOMPLETION)pCmd->GuestVBVAReserved1; 185 void *pvCallback = (void*)pCmd->GuestVBVAReserved2; 186 pfnCallback(pDevExt, pCmd, pvCallback); 187 } 188 } 189 175 190 #endif 176 191 … … 216 231 pInfo1->u.in.guestVersion.reserved = VBOXVHWA_VERSION_RSV; 217 232 218 if(vboxVhwaCommandSubmit(pDevExt, pCmd)) 233 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 234 AssertRC(rc); 235 if(RT_SUCCESS(rc)) 219 236 { 220 237 if(RT_SUCCESS(pCmd->rc)) … … 242 259 pInfo2->numFourCC = numFourCC; 243 260 244 if(vboxVhwaCommandSubmit(pDevExt, pCmd)) 245 { 261 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 262 AssertRC(rc); 263 if(RT_SUCCESS(rc)) 264 { 265 AssertRC(pCmd->rc); 246 266 if(RT_SUCCESS(pCmd->rc)) 247 267 { … … 270 290 } 271 291 272 if(vboxVhwaCommandSubmit(pDevExt, pCmd)) 273 { 292 rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 293 AssertRC(rc); 294 if(RT_SUCCESS(rc)) 295 { 296 AssertRC(pCmd->rc); 274 297 if(RT_SUCCESS(pCmd->rc)) 275 {276 298 rc = VINF_SUCCESS; 277 } 299 else 300 rc = pCmd->rc; 278 301 } 279 302 … … 295 318 } 296 319 297 if(vboxVhwaCommandSubmit(pDevExt, pCmd)) 298 { 320 rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 321 AssertRC(rc); 322 if(RT_SUCCESS(rc)) 323 { 324 AssertRC(pCmd->rc); 299 325 if(RT_SUCCESS(pCmd->rc)) 300 {301 326 rc = VINF_SUCCESS; 302 } 327 else 328 rc = pCmd->rc; 303 329 } 304 330 … … 345 371 346 372 pSettings->aFormats[pSettings->cFormats] = D3DDDIFMT_X8R8G8B8; 347 ++pSettings->cFormats;348 pSettings->aFormats[pSettings->cFormats] = D3DDDIFMT_A8R8G8B8;349 373 ++pSettings->cFormats; 350 374 -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoVhwa.h
r29710 r29742 14 14 15 15 #include <iprt/cdefs.h> 16 17 #include "VBoxVideoShgsmi.h" 16 18 17 19 VBOXVHWACMD* vboxVhwaCommandCreate(PDEVICE_EXTENSION pDevExt, … … 31 33 void vboxVhwaCommandSubmitAsynch(PDEVICE_EXTENSION pDevExt, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext); 32 34 void vboxVhwaCommandSubmitAsynchByEvent(PDEVICE_EXTENSION pDevExt, VBOXVHWACMD* pCmd, RTSEMEVENT hEvent); 35 36 #define VBOXVHWA_CMD2LISTENTRY(_pCmd) ((PVBOXSHGSMILIST_ENTRY)&(_pCmd)->u.pNext) 37 #define VBOXVHWA_LISTENTRY2CMD(_pEntry) ( (VBOXVHWACMD*)((uint8_t *)(_pEntry) - RT_OFFSETOF(VBOXVHWACMD, u.pNext)) ) 38 39 DECLINLINE(void) vboxVhwaPutList(VBOXSHGSMILIST *pList, VBOXVHWACMD* pCmd) 40 { 41 vboxSHGSMIListPut(pList, VBOXVHWA_CMD2LISTENTRY(pCmd), VBOXVHWA_CMD2LISTENTRY(pCmd)); 42 } 43 44 void vboxVhwaCompletionListProcess(PDEVICE_EXTENSION pDevExt, VBOXSHGSMILIST *pList); 33 45 #endif 34 46 … … 41 53 void vboxVHWAInit(PDEVICE_EXTENSION pDevExt); 42 54 43 44 55 #endif /* #ifndef ___VBoxVideoVhwa_h___ */ -
trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
r29710 r29742 848 848 vboxSHGSMIListInit(&DmaCmdList); 849 849 850 #ifdef VBOX_WITH_VIDEOHWACCEL 851 VBOXSHGSMILIST VhwaCmdList; 852 vboxSHGSMIListInit(&VhwaCmdList); 853 #endif 854 850 855 uint32_t flags = pDevExt->u.primary.pHostFlags->u32HostFlags; 851 856 bOur = (flags & HGSMIHOSTFLAGS_IRQ); … … 878 883 if (pHeap) 879 884 { 880 int rc = VBoxSHGSMICommandProcessCompletion (pHeap, offCmd, TRUE /*bool bIrq*/ , pList); 881 AssertRC(rc); 885 uint16_t chInfo; 886 uint8_t *pvCmd = HGSMIBufferDataAndChInfoFromOffset (&pHeap->area, offCmd, &chInfo); 887 Assert(pvCmd); 888 if (pvCmd) 889 { 890 switch (chInfo) 891 { 892 case VBVA_VDMA_CMD: 893 case VBVA_VDMA_CTL: 894 { 895 int rc = VBoxSHGSMICommandProcessCompletion (pHeap, (VBOXSHGSMIHEADER*)pvCmd, TRUE /*bool bIrq*/ , pList); 896 AssertRC(rc); 897 break; 898 } 899 #ifdef VBOX_WITH_VIDEOHWACCEL 900 case VBVA_VHWA_CMD: 901 { 902 vboxVhwaPutList(&VhwaCmdList, (VBOXVHWACMD*)pvCmd); 903 break; 904 } 905 #endif /* # ifdef VBOX_WITH_VIDEOHWACCEL */ 906 default: 907 AssertBreakpoint(); 908 } 909 } 882 910 } 883 911 } … … 904 932 vboxSHGSMIListCat(&pDevExt->DmaCmdList, &DmaCmdList); 905 933 bNeedDpc = TRUE; 934 } 935 936 if (!vboxSHGSMIListIsEmpty(&VhwaCmdList)) 937 { 938 vboxSHGSMIListCat(&pDevExt->VhwaCmdList, &VhwaCmdList); 906 939 } 907 940 … … 939 972 VBOXSHGSMILIST CtlList; 940 973 VBOXSHGSMILIST DmaCmdList; 974 #ifdef VBOX_WITH_VIDEOHWACCEL 975 VBOXSHGSMILIST VhwaCmdList; 976 #endif 941 977 BOOL bNotifyDpc; 942 978 } VBOXWDDM_DPCDATA, *PVBOXWDDM_DPCDATA; … … 954 990 vboxSHGSMICmdListDetach2List(&pdc->pDevExt->CtlList, &pdc->data.CtlList); 955 991 vboxSHGSMICmdListDetach2List(&pdc->pDevExt->DmaCmdList, &pdc->data.DmaCmdList); 992 #ifdef VBOX_WITH_VIDEOHWACCEL 993 vboxSHGSMICmdListDetach2List(&pdc->pDevExt->VhwaCmdList, &pdc->data.VhwaCmdList); 994 #endif 956 995 pdc->data.bNotifyDpc = pdc->pDevExt->bNotifyDxDpc; 957 996 pdc->pDevExt->bNotifyDxDpc = FALSE; … … 994 1033 AssertRC(rc); 995 1034 } 1035 1036 #ifdef VBOX_WITH_VIDEOHWACCEL 1037 if (!vboxSHGSMIListIsEmpty(&context.data.VhwaCmdList)) 1038 { 1039 vboxVhwaCompletionListProcess(pDevExt, &context.data.VhwaCmdList); 1040 } 1041 #endif 996 1042 997 1043 if (context.data.bNotifyDpc) -
trunk/src/VBox/Devices/Graphics/DevVGA.h
r28800 r29742 408 408 /** Base port in the assigned PCI I/O space. */ 409 409 RTIOPORT IOPortBase; 410 #ifdef VBOXVDMA 411 /* specifies guest driver caps, i.e. whether it can handle IRQs from the adapter, 412 * the way it can handle assync HGSMI command completion, etc. */ 413 uint32_t fGuestCaps; 414 #endif 415 410 416 uint8_t Padding7[6]; 411 417 #endif /* VBOX_WITH_HGSMI */ -
trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
r28800 r29742 1244 1244 PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface); 1245 1245 PHGSMIINSTANCE pIns = pVGAState->pHGSMI; 1246 VBVAHOSTCMD *pHostCmd; 1247 // Assert(0); 1248 1249 int32_t iDisplay = pCmd->iDisplay; 1246 1250 1247 Assert(pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH); 1251 if(pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT) 1252 { 1253 rc = HGSMIHostCommandAlloc (pIns, 1254 (void**)&pHostCmd, 1255 VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT)), 1256 HGSMI_CH_VBVA, 1257 VBVAHG_EVENT); 1248 #ifdef VBOXVDMA 1249 if (pVGAState->fGuestCaps & VBVACAPS_COMPLETEGCMD_BY_IOREAD) 1250 { 1251 rc = HGSMICompleteGuestCommand(pIns, pCmd, !!(pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ)); 1258 1252 AssertRC(rc); 1259 if(RT_SUCCESS(rc))1260 {1261 memset(pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT)));1262 pHostCmd->iDstID = pCmd->iDisplay;1263 pHostCmd->customOpCode = 0;1264 VBVAHOSTCMDEVENT *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDEVENT);1265 pBody->pEvent = pCmd->GuestVBVAReserved1;1266 }1267 1253 } 1268 1254 else 1269 { 1270 HGSMIOFFSET offCmd = HGSMIPointerToOffsetHost (pIns, pCmd); 1271 Assert(offCmd != HGSMIOFFSET_VOID); 1272 if(offCmd != HGSMIOFFSET_VOID) 1255 #endif 1256 { 1257 VBVAHOSTCMD *pHostCmd; 1258 int32_t iDisplay = pCmd->iDisplay; 1259 1260 if(pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT) 1273 1261 { 1274 1262 rc = HGSMIHostCommandAlloc (pIns, 1275 (void**)&pHostCmd,1276 VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDVHWACMDCOMPLETE)),1277 HGSMI_CH_VBVA,1278 VBVAHG_DISPLAY_CUSTOM);1263 (void**)&pHostCmd, 1264 VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT)), 1265 HGSMI_CH_VBVA, 1266 VBVAHG_EVENT); 1279 1267 AssertRC(rc); 1280 1268 if(RT_SUCCESS(rc)) 1281 1269 { 1282 memset(pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMD VHWACMDCOMPLETE)));1270 memset(pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT))); 1283 1271 pHostCmd->iDstID = pCmd->iDisplay; 1284 pHostCmd->customOpCode = VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE;1285 VBVAHOSTCMD VHWACMDCOMPLETE *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE);1286 pBody-> offCmd = offCmd;1272 pHostCmd->customOpCode = 0; 1273 VBVAHOSTCMDEVENT *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDEVENT); 1274 pBody->pEvent = pCmd->GuestVBVAReserved1; 1287 1275 } 1288 1276 } 1289 1277 else 1290 1278 { 1291 rc = VERR_INVALID_PARAMETER; 1292 } 1293 } 1294 1295 if(RT_SUCCESS(rc)) 1296 { 1297 rc = HGSMIHostCommandProcessAndFreeAsynch(pIns, pHostCmd, (pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ) != 0); 1298 AssertRC(rc); 1279 HGSMIOFFSET offCmd = HGSMIPointerToOffsetHost (pIns, pCmd); 1280 Assert(offCmd != HGSMIOFFSET_VOID); 1281 if(offCmd != HGSMIOFFSET_VOID) 1282 { 1283 rc = HGSMIHostCommandAlloc (pIns, 1284 (void**)&pHostCmd, 1285 VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDVHWACMDCOMPLETE)), 1286 HGSMI_CH_VBVA, 1287 VBVAHG_DISPLAY_CUSTOM); 1288 AssertRC(rc); 1289 if(RT_SUCCESS(rc)) 1290 { 1291 memset(pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDVHWACMDCOMPLETE))); 1292 pHostCmd->iDstID = pCmd->iDisplay; 1293 pHostCmd->customOpCode = VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE; 1294 VBVAHOSTCMDVHWACMDCOMPLETE *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE); 1295 pBody->offCmd = offCmd; 1296 } 1297 } 1298 else 1299 { 1300 rc = VERR_INVALID_PARAMETER; 1301 } 1302 } 1303 1299 1304 if(RT_SUCCESS(rc)) 1300 1305 { 1301 return rc; 1302 } 1303 HGSMIHostCommandFree (pIns, pHostCmd); 1306 rc = HGSMIHostCommandProcessAndFreeAsynch(pIns, pHostCmd, (pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ) != 0); 1307 AssertRC(rc); 1308 if(RT_SUCCESS(rc)) 1309 { 1310 return rc; 1311 } 1312 HGSMIHostCommandFree (pIns, pHostCmd); 1313 } 1304 1314 } 1305 1315 } … … 1621 1631 #endif 1622 1632 1633 #ifdef VBOXVDMA 1634 case VBVA_INFO_CAPS: 1635 { 1636 if (cbBuffer < sizeof (VBVACAPS)) 1637 { 1638 rc = VERR_INVALID_PARAMETER; 1639 break; 1640 } 1641 1642 VBVACAPS *pCaps = (VBVACAPS*)pvBuffer; 1643 pVGAState->fGuestCaps = pCaps->fCaps; 1644 pCaps->rc = VINF_SUCCESS; 1645 } break; 1646 #endif 1623 1647 default: 1624 1648 Log(("Unsupported VBVA guest command %d!!!\n",
Note:
See TracChangeset
for help on using the changeset viewer.