From 59ae6b3e15d78df2d86efa7c55fc88fa08c9636b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 9 Nov 2025 09:30:19 +0100 Subject: [PATCH] [VIDEOPRT] Handle VIDEO_MEMORY_SPACE_P6CACHE flag JIRA issue: CORE-20298 --- win32ss/drivers/videoprt/resource.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/win32ss/drivers/videoprt/resource.c b/win32ss/drivers/videoprt/resource.c index e0279a01fd3..21d36a21495 100644 --- a/win32ss/drivers/videoprt/resource.c +++ b/win32ss/drivers/videoprt/resource.c @@ -297,11 +297,6 @@ IntVideoPortMapMemory( INFO_(VIDEOPRT, "- InIoSpace: %x\n", InIoSpace); InIoSpace &= ~VIDEO_MEMORY_SPACE_DENSE; - if ((InIoSpace & VIDEO_MEMORY_SPACE_P6CACHE) != 0) - { - INFO_(VIDEOPRT, "VIDEO_MEMORY_SPACE_P6CACHE not supported, turning off\n"); - InIoSpace &= ~VIDEO_MEMORY_SPACE_P6CACHE; - } if (ProcessHandle != NULL && (InIoSpace & VIDEO_MEMORY_SPACE_USER_MODE) == 0) { @@ -345,7 +340,7 @@ IntVideoPortMapMemory( } AddressSpace = (ULONG)InIoSpace; - AddressSpace &= ~VIDEO_MEMORY_SPACE_USER_MODE; + AddressSpace &= ~(VIDEO_MEMORY_SPACE_USER_MODE | VIDEO_MEMORY_SPACE_P6CACHE); if (HalTranslateBusAddress( DeviceExtension->AdapterInterfaceType, DeviceExtension->SystemIoBusNumber, @@ -373,11 +368,16 @@ IntVideoPortMapMemory( if ((InIoSpace & VIDEO_MEMORY_SPACE_USER_MODE) != 0) { NTSTATUS NtStatus; + ULONG Protect; + if (InIoSpace & VIDEO_MEMORY_SPACE_P6CACHE) + Protect = PAGE_READWRITE | PAGE_WRITECOMBINE; + else + Protect = PAGE_READWRITE | PAGE_NOCACHE; MappedAddress = NULL; NtStatus = IntVideoPortMapPhysicalMemory(ProcessHandle, TranslatedAddress, NumberOfUchars, - PAGE_READWRITE/* | PAGE_WRITECOMBINE*/, + Protect, &MappedAddress); if (!NT_SUCCESS(NtStatus)) {