Fix interrupt mask

Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
Acked-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Sameeh Jubran 2016-09-04 17:12:33 +03:00 committed by Frediano Ziglio
parent e828c45bf2
commit 35c93f3886

View File

@ -4,6 +4,11 @@
#pragma code_seg(push) #pragma code_seg(push)
#pragma code_seg() #pragma code_seg()
#define WIN_QXL_INT_MASK ((QXL_INTERRUPT_DISPLAY) | \
(QXL_INTERRUPT_CURSOR) | \
(QXL_INTERRUPT_IO_CMD))
// BEGIN: Non-Paged Code // BEGIN: Non-Paged Code
// Bit is 1 from Idx to end of byte, with bit count starting at high order // Bit is 1 from Idx to end of byte, with bit count starting at high order
@ -3347,7 +3352,7 @@ NTSTATUS QxlDevice::QxlInit(DXGK_DISPLAY_INFORMATION* pDispInfo)
WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_RESET), 0); WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_RESET), 0);
CreateRings(); CreateRings();
m_RamHdr->int_mask = ~0; m_RamHdr->int_mask = WIN_QXL_INT_MASK;
CreateMemSlots(); CreateMemSlots();
InitDeviceMemoryResources(); InitDeviceMemoryResources();
return Status; return Status;
@ -4551,10 +4556,11 @@ BOOLEAN QxlDevice::InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_
pDxgkInterface->DxgkCbNotifyInterrupt(pDxgkInterface->DeviceHandle,&notifyInt); pDxgkInterface->DxgkCbNotifyInterrupt(pDxgkInterface->DeviceHandle,&notifyInt);
if (!pDxgkInterface->DxgkCbQueueDpc(pDxgkInterface->DeviceHandle)) { if (!pDxgkInterface->DxgkCbQueueDpc(pDxgkInterface->DeviceHandle)) {
m_RamHdr->int_mask = ~0; m_RamHdr->int_mask = WIN_QXL_INT_MASK;
WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_UPDATE_IRQ), 0); WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_UPDATE_IRQ), 0);
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s DxgkCbQueueDpc failed\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_FATAL, ("---> %s DxgkCbQueueDpc failed\n", __FUNCTION__));
} }
DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
return TRUE; return TRUE;
} }
@ -4586,7 +4592,7 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)
DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_IoCmdEvent\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_IoCmdEvent\n", __FUNCTION__));
KeSetEvent (&m_IoCmdEvent, IO_NO_INCREMENT, FALSE); KeSetEvent (&m_IoCmdEvent, IO_NO_INCREMENT, FALSE);
} }
m_RamHdr->int_mask = ~0; m_RamHdr->int_mask = WIN_QXL_INT_MASK;
WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_UPDATE_IRQ), 0); WRITE_PORT_UCHAR((PUCHAR)(m_IoBase + QXL_IO_UPDATE_IRQ), 0);
DbgPrint(TRACE_LEVEL_INFORMATION, ("<--- %s\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_INFORMATION, ("<--- %s\n", __FUNCTION__));