parent
8d33c3072e
commit
fa8291cf37
@ -219,7 +219,7 @@ NTSTATUS QxlDod::DispatchIoRequest(_In_ ULONG VidPnSourceId,
|
|||||||
UNREFERENCED_PARAMETER(VidPnSourceId);
|
UNREFERENCED_PARAMETER(VidPnSourceId);
|
||||||
UNREFERENCED_PARAMETER(pVideoRequestPacket);
|
UNREFERENCED_PARAMETER(pVideoRequestPacket);
|
||||||
|
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s\n", __FUNCTION__));
|
DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,11 +460,27 @@ NTSTATUS QxlDod::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointer
|
|||||||
NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
|
NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
QXL_ASSERT(pEscape != NULL);
|
QXL_ASSERT(pEscape != NULL);
|
||||||
|
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("<---> %s Flags = %d\n", __FUNCTION__, pEscape->Flags));
|
DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s Flags = %d\n", __FUNCTION__, pEscape->Flags));
|
||||||
|
|
||||||
return m_pHWDevice->Escape(pEscape);
|
Status = m_pHWDevice->Escape(pEscape);
|
||||||
|
if (Status == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
DXGK_CHILD_STATUS ChildStatus;
|
||||||
|
ChildStatus.Type = StatusConnection;
|
||||||
|
ChildStatus.ChildUid = 0;
|
||||||
|
ChildStatus.HotPlug.Connected = FALSE;
|
||||||
|
Status = m_DxgkInterface.DxgkCbIndicateChildStatus(m_DxgkInterface.DeviceHandle, &ChildStatus);
|
||||||
|
if (Status == STATUS_SUCCESS)
|
||||||
|
{
|
||||||
|
ChildStatus.HotPlug.Connected = TRUE;
|
||||||
|
Status = m_DxgkInterface.DxgkCbIndicateChildStatus(m_DxgkInterface.DeviceHandle, &ChildStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s Status = %x\n", __FUNCTION__, Status));
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2526,7 +2542,7 @@ NTSTATUS VgaDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
|||||||
DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount));
|
||||||
for (ULONG idx = 0; idx < m_ModeCount; idx++)
|
for (ULONG idx = 0; idx < m_ModeCount; idx++)
|
||||||
{
|
{
|
||||||
DbgPrint(TRACE_LEVEL_ERROR, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
|
||||||
m_ModeNumbers[idx],
|
m_ModeNumbers[idx],
|
||||||
m_ModeInfo[idx].VisScreenWidth,
|
m_ModeInfo[idx].VisScreenWidth,
|
||||||
m_ModeInfo[idx].VisScreenHeight,
|
m_ModeInfo[idx].VisScreenHeight,
|
||||||
@ -2979,15 +2995,13 @@ BOOL QxlDevice::SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
|
void QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
|
||||||
{
|
{
|
||||||
PVIDEO_MODE_INFORMATION pMode = NULL;
|
PVIDEO_MODE_INFORMATION pMode = NULL;
|
||||||
UINT bytes_pp = (bpp + 7) / 8;
|
UINT bytes_pp = (bpp + 7) / 8;
|
||||||
ULONG color_bits;
|
ULONG color_bits;
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if (xres < MIN_WIDTH_SIZE || yres < MIN_HEIGHT_SIZE || bpp != 32)
|
|
||||||
return FALSE;
|
|
||||||
pMode = &m_ModeInfo[Idx];
|
pMode = &m_ModeInfo[Idx];
|
||||||
pMode->VisScreenWidth = xres;
|
pMode->VisScreenWidth = xres;
|
||||||
pMode->VisScreenHeight = yres;
|
pMode->VisScreenHeight = yres;
|
||||||
@ -3001,7 +3015,6 @@ BOOL QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
|
|||||||
pMode->BlueMask = (1 << color_bits) - 1;
|
pMode->BlueMask = (1 << color_bits) - 1;
|
||||||
pMode->GreenMask = pMode->BlueMask << color_bits;
|
pMode->GreenMask = pMode->BlueMask << color_bits;
|
||||||
pMode->RedMask = pMode->GreenMask << color_bits;
|
pMode->RedMask = pMode->GreenMask << color_bits;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
||||||
@ -3022,7 +3035,7 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
|||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DbgPrint(TRACE_LEVEL_ERROR, ("%s: ModeCount = %d\n", __FUNCTION__, ModeCount));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: ModeCount = %d\n", __FUNCTION__, ModeCount));
|
||||||
|
|
||||||
ModeCount += 2;
|
ModeCount += 2;
|
||||||
m_ModeInfo = reinterpret_cast<PVIDEO_MODE_INFORMATION> (new (PagedPool) BYTE[sizeof (VIDEO_MODE_INFORMATION) * ModeCount]);
|
m_ModeInfo = reinterpret_cast<PVIDEO_MODE_INFORMATION> (new (PagedPool) BYTE[sizeof (VIDEO_MODE_INFORMATION) * ModeCount]);
|
||||||
@ -3039,11 +3052,11 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
|||||||
|
|
||||||
QXLMode* tmpModeInfo = &modes->modes[CurrentMode];
|
QXLMode* tmpModeInfo = &modes->modes[CurrentMode];
|
||||||
|
|
||||||
DbgPrint(TRACE_LEVEL_ERROR, ("%s: modes[%d] x_res = %d, y_res = %d, bits = %d BitsPerPixel = %d\n", __FUNCTION__, CurrentMode, tmpModeInfo->x_res, tmpModeInfo->y_res, tmpModeInfo->bits, BitsPerPixel));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: modes[%d] x_res = %d, y_res = %d, bits = %d BitsPerPixel = %d\n", __FUNCTION__, CurrentMode, tmpModeInfo->x_res, tmpModeInfo->y_res, tmpModeInfo->bits, BitsPerPixel));
|
||||||
|
|
||||||
if (tmpModeInfo->x_res >= Width &&
|
if (tmpModeInfo->x_res >= Width &&
|
||||||
tmpModeInfo->y_res >= Height &&
|
tmpModeInfo->y_res >= Height &&
|
||||||
tmpModeInfo->bits == 32)
|
tmpModeInfo->bits == QXL_BPP)
|
||||||
{
|
{
|
||||||
m_ModeNumbers[SuitableModeCount] = SuitableModeCount;//CurrentMode;
|
m_ModeNumbers[SuitableModeCount] = SuitableModeCount;//CurrentMode;
|
||||||
SetVideoModeInfo(SuitableModeCount, tmpModeInfo);
|
SetVideoModeInfo(SuitableModeCount, tmpModeInfo);
|
||||||
@ -3072,10 +3085,10 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
|
|||||||
memcpy(&m_ModeInfo[CurrentMode], &m_ModeInfo[m_CurrentMode], sizeof(VIDEO_MODE_INFORMATION));
|
memcpy(&m_ModeInfo[CurrentMode], &m_ModeInfo[m_CurrentMode], sizeof(VIDEO_MODE_INFORMATION));
|
||||||
}
|
}
|
||||||
m_ModeCount = SuitableModeCount + 2;
|
m_ModeCount = SuitableModeCount + 2;
|
||||||
DbgPrint(TRACE_LEVEL_ERROR, ("ModeCount filtered %d\n", m_ModeCount));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount));
|
||||||
for (ULONG idx = 0; idx < GetModeCount(); idx++)
|
for (ULONG idx = 0; idx < GetModeCount(); idx++)
|
||||||
{
|
{
|
||||||
DbgPrint(TRACE_LEVEL_ERROR, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
|
||||||
m_ModeNumbers[idx],
|
m_ModeNumbers[idx],
|
||||||
m_ModeInfo[idx].VisScreenWidth,
|
m_ModeInfo[idx].VisScreenWidth,
|
||||||
m_ModeInfo[idx].VisScreenHeight,
|
m_ModeInfo[idx].VisScreenHeight,
|
||||||
@ -4447,8 +4460,16 @@ NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscap)
|
|||||||
xres = custom_display->xres;
|
xres = custom_display->xres;
|
||||||
yres = custom_display->yres;
|
yres = custom_display->yres;
|
||||||
bpp = custom_display->bpp;
|
bpp = custom_display->bpp;
|
||||||
|
if (bpp != QXL_BPP)
|
||||||
|
{
|
||||||
|
bpp = QXL_BPP;
|
||||||
|
}
|
||||||
|
if (xres < MIN_WIDTH_SIZE || yres < MIN_HEIGHT_SIZE)
|
||||||
|
{
|
||||||
|
DbgPrint(TRACE_LEVEL_FATAL, ("%s: xres = %d, yres = %d\n", __FUNCTION__, xres, yres));
|
||||||
|
return ERROR_INVALID_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
/* alternate custom mode index */
|
|
||||||
if (m_CustomMode == (m_ModeCount - 1))
|
if (m_CustomMode == (m_ModeCount - 1))
|
||||||
m_CustomMode = (USHORT)(m_ModeCount - 2);
|
m_CustomMode = (USHORT)(m_ModeCount - 2);
|
||||||
else
|
else
|
||||||
@ -4459,12 +4480,9 @@ NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscap)
|
|||||||
__FUNCTION__, xres, yres, bpp, m_RomHdr->surface0_area_size));
|
__FUNCTION__, xres, yres, bpp, m_RomHdr->surface0_area_size));
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
return ERROR_NOT_ENOUGH_MEMORY;
|
||||||
}
|
}
|
||||||
if (!UpdateVideoModeInfo(m_CustomMode, xres, yres, bpp)) {
|
UpdateVideoModeInfo(m_CustomMode, xres, yres, bpp);
|
||||||
return ERROR_INVALID_DATA;
|
|
||||||
}
|
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("<--> %s xres %d yres %d bpp %d\n", __FUNCTION__, xres, yres, bpp));
|
|
||||||
DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
|
DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
|
||||||
return STATUS_SUCCESS;// SetCurrentMode(m_CustomMode);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID QxlDevice::WaitForCmdRing()
|
VOID QxlDevice::WaitForCmdRing()
|
||||||
@ -4569,15 +4587,15 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)
|
|||||||
ASSERT(Status == STATUS_SUCCESS);
|
ASSERT(Status == STATUS_SUCCESS);
|
||||||
|
|
||||||
if (ctx.data & QXL_INTERRUPT_DISPLAY) {
|
if (ctx.data & QXL_INTERRUPT_DISPLAY) {
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s m_DisplayEvent\n", __FUNCTION__));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_DisplayEvent\n", __FUNCTION__));
|
||||||
KeSetEvent (&m_DisplayEvent, IO_NO_INCREMENT, FALSE);
|
KeSetEvent (&m_DisplayEvent, IO_NO_INCREMENT, FALSE);
|
||||||
}
|
}
|
||||||
if (ctx.data & QXL_INTERRUPT_CURSOR) {
|
if (ctx.data & QXL_INTERRUPT_CURSOR) {
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s m_CursorEvent\n", __FUNCTION__));
|
DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_CursorEvent\n", __FUNCTION__));
|
||||||
KeSetEvent (&m_CursorEvent, IO_NO_INCREMENT, FALSE);
|
KeSetEvent (&m_CursorEvent, IO_NO_INCREMENT, FALSE);
|
||||||
}
|
}
|
||||||
if (ctx.data & QXL_INTERRUPT_IO_CMD) {
|
if (ctx.data & QXL_INTERRUPT_IO_CMD) {
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("---> %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 = QXL_INTERRUPT_MASK;
|
m_RamHdr->int_mask = QXL_INTERRUPT_MASK;
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define POINTER_SIZE 64
|
#define POINTER_SIZE 64
|
||||||
#define MIN_WIDTH_SIZE 1024
|
#define MIN_WIDTH_SIZE 1024
|
||||||
#define MIN_HEIGHT_SIZE 768
|
#define MIN_HEIGHT_SIZE 768
|
||||||
|
#define QXL_BPP 32
|
||||||
|
|
||||||
typedef struct _QXL_FLAGS
|
typedef struct _QXL_FLAGS
|
||||||
{
|
{
|
||||||
@ -471,7 +472,7 @@ private:
|
|||||||
void QxlClose(void);
|
void QxlClose(void);
|
||||||
void UnmapMemory(void);
|
void UnmapMemory(void);
|
||||||
BOOL SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo);
|
BOOL SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo);
|
||||||
BOOL UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp);
|
void UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp);
|
||||||
BOOL InitMemSlots(void);
|
BOOL InitMemSlots(void);
|
||||||
BOOL CreateMemSlots(void);
|
BOOL CreateMemSlots(void);
|
||||||
void DestroyMemSlots(void);
|
void DestroyMemSlots(void);
|
||||||
|
@ -465,7 +465,7 @@ DodEnumVidPnCofuncModality(
|
|||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
QXL_ASSERT_CHK(hAdapter != NULL);
|
QXL_ASSERT_CHK(hAdapter != NULL);
|
||||||
DbgPrint(TRACE_LEVEL_FATAL, ("<---> %s\n", __FUNCTION__));
|
DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s\n", __FUNCTION__));
|
||||||
|
|
||||||
QxlDod* pQxl = reinterpret_cast<QxlDod*>(hAdapter);
|
QxlDod* pQxl = reinterpret_cast<QxlDod*>(hAdapter);
|
||||||
if (!pQxl->IsDriverActive())
|
if (!pQxl->IsDriverActive())
|
||||||
|
Loading…
Reference in New Issue
Block a user