[Spice-commits] display/driver.c display/driver.rc display/qxldd.h include/qxl_driver.h miniport/qxl.c miniport/qxl.inf miniport/qxl.rc

Alon Levy alon at kemper.freedesktop.org
Wed Oct 3 01:14:38 PDT 2012


 display/driver.c     |    8 ++++++++
 display/driver.rc    |    4 ++--
 display/qxldd.h      |    1 +
 include/qxl_driver.h |    2 ++
 miniport/qxl.c       |   47 ++++++++++++++++++++++++++++++++++++++++++++++-
 miniport/qxl.inf     |    2 +-
 miniport/qxl.rc      |    6 +++---
 7 files changed, 63 insertions(+), 7 deletions(-)

New commits:
commit acb958c93fb0c0c7712b4e868700af01f12ca412
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Aug 15 13:06:10 2012 +0300

    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.

diff --git a/display/driver.c b/display/driver.c
index ef011ad..90c52c5 100644
--- a/display/driver.c
+++ b/display/driver.c
@@ -843,6 +843,10 @@ static BOOL PrepareHardware(PDev *pdev)
 
     pdev->dev_id = dev_info.dev_id;
 
+    pdev->create_non_primary_surfaces = dev_info.create_non_primary_surfaces;
+    DEBUG_PRINT((pdev, 1, "%s: create_non_primary_surfaces = %d\n", __FUNCTION__,
+                 pdev->create_non_primary_surfaces));
+
     CreateVRamSlot(pdev);
 
     DEBUG_PRINT((NULL, 1, "%s: 0x%lx exit: 0x%lx %ul\n", __FUNCTION__, pdev,
@@ -1409,6 +1413,10 @@ HBITMAP APIENTRY DrvCreateDeviceBitmap(DHPDEV dhpdev, SIZEL size, ULONG format)
 
     pdev = (PDev *)dhpdev;
 
+    if (!pdev->create_non_primary_surfaces) {
+        return FALSE;
+    }
+
     if (!pdev->vram_slot_initialized || pdev->bitmap_format != format || pdev->fb == 0) {
         DEBUG_PRINT((pdev, 3, "%s failed: %p: slot_initialized %d, format(%d,%d), fb %p\n",
                     __FUNCTION__, pdev, pdev->vram_slot_initialized,
diff --git a/display/driver.rc b/display/driver.rc
index 4368925..f11c9db 100644
--- a/display/driver.rc
+++ b/display/driver.rc
@@ -16,12 +16,12 @@
 #define VER_FILEDESCRIPTION_STR     "Red Hat QXL Display Driver"
 #define VER_INTERNALNAME_STR        "qxldd.dll"
 #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      VER_FILEVERSION_STR
 
 #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."
diff --git a/display/qxldd.h b/display/qxldd.h
index d0166b5..1a1b5d5 100644
--- a/display/qxldd.h
+++ b/display/qxldd.h
@@ -220,6 +220,7 @@ typedef struct PDev {
     SIZEL resolution;
     UINT32 max_bitmap_size;
     ULONG bitmap_format;
+    UINT8 create_non_primary_surfaces;
 
     ULONG fb_size;
     BYTE* fb;
diff --git a/include/qxl_driver.h b/include/qxl_driver.h
index eac6f5f..677ee17 100644
--- a/include/qxl_driver.h
+++ b/include/qxl_driver.h
@@ -119,6 +119,8 @@ typedef struct QXLDriverInfo {
     UINT32 n_surfaces;
 
     UINT64 fb_phys;
+
+    UINT8 create_non_primary_surfaces;
 } QXLDriverInfo;
 
 #endif
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."


More information about the Spice-commits mailing list