summaryrefslogtreecommitdiff
path: root/miniport
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-08-15 13:06:10 +0300
committerAlon Levy <alevy@redhat.com>2012-09-05 19:22:48 +0300
commitacb958c93fb0c0c7712b4e868700af01f12ca412 (patch)
treefe7601b87a03bec6c5681d5c3e82c2b3cd63840f /miniport
parent95c72c159db6d7a7ee202447c87feb8420e28408 (diff)
add registry key "DisableSurfaces"
Presence of the key disables off screen surfaces creation; The callback is still registered, but it always fails. Registry key is checked on device initialization only, not during runtime, so you must reset the vm to see any affects.
Diffstat (limited to 'miniport')
-rw-r--r--miniport/qxl.c47
-rw-r--r--miniport/qxl.inf2
-rw-r--r--miniport/qxl.rc6
3 files changed, 50 insertions, 5 deletions
diff --git a/miniport/qxl.c b/miniport/qxl.c
index 003669b..bd449c3 100644
--- a/miniport/qxl.c
+++ b/miniport/qxl.c
@@ -95,6 +95,8 @@ typedef struct QXLExtension {
char *log_buf;
PUCHAR log_port;
+
+ UINT8 create_non_primary_surfaces;
} QXLExtension;
#define QXL_ALLOC_TAG '_lxq'
@@ -1002,6 +1004,47 @@ static VP_STATUS SetCustomDisplay(QXLExtension *dev_ext, QXLEscapeSetCustomDispl
dev_ext->custom_mode);
}
+VP_STATUS QXLRegistryCallback(
+ PVOID HwDeviceExtension,
+ PVOID Context,
+ PWSTR ValueName,
+ PVOID ValueData,
+ ULONG ValueLength
+)
+{
+ QXLExtension *dev_ext = HwDeviceExtension;
+ ULONG *key_ret = (ULONG *)Context;
+
+ DEBUG_PRINT((dev_ext, 60, "%s: length %d, first byte %d\n", __FUNCTION__,
+ ValueLength, (UINT8)ValueData));
+
+ if (key_ret) {
+ *key_ret = *(PULONG)ValueData;
+ }
+ return NO_ERROR;
+}
+
+static UINT8 check_non_primary_surfaces_registry_key(QXLExtension *dev_ext)
+{
+ VP_STATUS ret;
+ ULONG key_ret;
+
+ ret = VideoPortGetRegistryParameters(
+ dev_ext,
+ L"DisableSurfaces",
+ FALSE,
+ QXLRegistryCallback,
+ &key_ret);
+ if (ret == ERROR_INVALID_PARAMETER) {
+ dev_ext->create_non_primary_surfaces = 1;
+ DEBUG_PRINT((dev_ext, 0, "%s: CreateNonPrimarySurfaces key doesn't exist, default to 1\n",
+ __FUNCTION__));
+ } else {
+ dev_ext->create_non_primary_surfaces = 0;
+ }
+ return dev_ext->create_non_primary_surfaces;
+}
+
BOOLEAN StartIO(PVOID dev_extension, PVIDEO_REQUEST_PACKET packet)
{
QXLExtension *dev_ext = dev_extension;
@@ -1187,9 +1230,11 @@ BOOLEAN StartIO(PVOID dev_extension, PVIDEO_REQUEST_PACKET packet)
driver_info->n_surfaces = dev_ext->rom->n_surfaces;
- driver_info->fb_phys = dev_ext->vram_physical.QuadPart;
+ driver_info->fb_phys = dev_ext->vram_physical.QuadPart;
driver_info->dev_id = dev_ext->rom->id;
+
+ driver_info->create_non_primary_surfaces = check_non_primary_surfaces_registry_key(dev_ext);
}
break;
diff --git a/miniport/qxl.inf b/miniport/qxl.inf
index d20778b..9b17575 100644
--- a/miniport/qxl.inf
+++ b/miniport/qxl.inf
@@ -3,7 +3,7 @@
[Version]
Signature = "$CHICAGO$"
-DriverVer = 03/20/2011,1.4.1.1
+DriverVer = 08/15/2012,1.4.2.3
Provider = %RHAT%
CatalogFile = qxl.cat
Class = Display
diff --git a/miniport/qxl.rc b/miniport/qxl.rc
index 86f04b9..50abefe 100644
--- a/miniport/qxl.rc
+++ b/miniport/qxl.rc
@@ -16,12 +16,12 @@
#define VER_FILEDESCRIPTION_STR "Red Hat QXL Display Driver"
#define VER_INTERNALNAME_STR "qxl.sys"
#define VER_ORIGINALFILENAME_STR VER_INTERNALNAME_STR
-#define VER_FILEVERSION_STR "1.4.1.1"
+#define VER_FILEVERSION_STR "1.4.2.3"
#define VER_PRODUCTNAME_STR "Spice"
-#define VER_PRODUCTVERSION_STR "1.4.1.1"
+#define VER_PRODUCTVERSION_STR "1.4.2.3"
#undef VER_PRODUCTVERSION
-#define VER_PRODUCTVERSION 1,4,1,1
+#define VER_PRODUCTVERSION 1,4,2,3
#define VER_COMPANYNAME_STR "Red Hat Inc."
#define VER_LEGALCOPYRIGHT_STR "© Red Hat Inc. All rights reserved."