Virtualbox WDDM之DxgkDdiInterruptRoutine
来源:互联网 发布:下载软件的软件哪个好 编辑:程序博客网 时间:2024/06/10 01:54
/*The DxgkDdiInterruptRoutine function handles interrupts generated by a display adapter.处理来自显卡的中断virtualbox中断来自HGSMI,*/BOOLEAN DxgkDdiInterruptRoutine( IN CONST PVOID MiniportDeviceContext, IN ULONG MessageNumber ){ PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)MiniportDeviceContext; BOOLEAN bOur = FALSE; if (pDevExt->u.primary.pHostFlags) /* If HGSMI is enabled at all. */ { VBOXSHGSMILIST CtlList; VBOXSHGSMILIST DmaCmdList; vboxSHGSMIListInit(&CtlList); vboxSHGSMIListInit(&DmaCmdList); do { uint32_t flags = pDevExt->u.primary.pHostFlags->u32HostFlags; if (flags & HGSMIHOSTFLAGS_GCOMMAND_COMPLETED) { bOur = TRUE; /* read the command offset */ HGSMIOFFSET offCmd = VBoxHGSMIGuestRead(pDevExt); Assert(offCmd != HGSMIOFFSET_VOID); if (offCmd != HGSMIOFFSET_VOID) { VBOXWDDM_HGSMICMD_TYPE enmType = vboxWddmHgsmiGetCmdTypeFromOffset(pDevExt, offCmd); PVBOXSHGSMILIST pList; HGSMIHEAP * pHeap = NULL; switch (enmType) { case VBOXWDDM_HGSMICMD_TYPE_DMACMD: pList = &DmaCmdList; pHeap = &pDevExt->u.primary.Vdma.CmdHeap; break; case VBOXWDDM_HGSMICMD_TYPE_CTL: pList = &CtlList; pHeap = &pDevExt->u.primary.hgsmiAdapterHeap; break; default: AssertBreakpoint(); } if (pHeap) { int rc = VBoxSHGSMICommandProcessCompletion (pHeap, offCmd, TRUE /*bool bIrq*/ , pList); AssertRC(rc); } } } else if (flags & HGSMIHOSTFLAGS_COMMANDS_PENDING) { bOur = TRUE; AssertBreakpoint(); /* @todo: FIXME: implement !!! */ } else if (flags & HGSMIHOSTFLAGS_IRQ) { bOur = TRUE; AssertBreakpoint(); /* unknown command */ } else break; } while (1); if (!vboxSHGSMIListIsEmpty(&CtlList)) vboxSHGSMIListCat(&pDevExt->CtlList, &CtlList); if (!vboxSHGSMIListIsEmpty(&DmaCmdList)) vboxSHGSMIListCat(&pDevExt->DmaCmdList, &DmaCmdList); if (pDevExt->bSetNotifyDxDpc) { pDevExt->bNotifyDxDpc = TRUE; pDevExt->bSetNotifyDxDpc = FALSE; } if (bOur) HGSMIClearIrq (pDevExt); } return bOur;}
0 0
- Virtualbox WDDM之DxgkDdiInterruptRoutine
- Virtualbox WDDM之DriverEntry
- Virtualbox WDDM之DxgkDdiStartDevice
- Virtualbox WDDM之DxgkDdiQueryChildRelations
- Virtualbox WDDM之DxgkDdiQueryChildStatus
- Virtualbox WDDM之DxgkDdiQueryDeviceDescriptor
- Virtualbox WDDM之DxgkDdiRecommendFunctionalVidPn
- Virtualbox WDDM之DxgkDdiIsSupportedVidPn
- Virtualbox WDDM之DxgkDdiEnumVidPnCofuncModality
- Virtualbox WDDM之DxgkDdiQueryAdapterInfo
- Virtualbox WDDM之DxgkDdiGetStandardAllocationDriverData
- Virtualbox WDDM之DxgkDdiCreateAllocation
- Virtualbox WDDM之DxgkDdiDpcRoutine
- Virtualbox WDDM之DxgkDdiCreateAllocation
- Virtualbox WDDM之DxgkDdiPresent
- Virtualbox WDDM之DxgkDdiPatch
- Virtualbox WDDM之DxgkDdiSubmitCommand
- Virtualbox WDDM之DxgkDdiSetVidPnSourceAddress
- MAC下用Ecplise 真机调试android
- 测试
- 7.2 客户区鼠标消息
- 时间格式
- 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util
- Virtualbox WDDM之DxgkDdiInterruptRoutine
- 编译和链接
- 坏的解释器: 没有那个文件或目录/bin/sh
- C语言C++语言中静态变量和静态函数
- REST Web应用,ZF框架 Rest CS服务实现
- Spring MVC前台属性数据的传递和后台属性数据的接收
- 增删改操作
- latex 论文致谢
- Java中创建线程的两种方式及线程的状态复习