[Spice-devel] [PATCH qxl-win] add registry key "DisableSurfaces"

Arnon Gilboa agilboa at redhat.com
Tue Oct 2 09:05:51 PDT 2012


ack

Alon Levy wrote:
> 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.
> ---
>  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(-)
>
> 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-devel mailing list