[Spice-devel] [PATCH spice v3 3/7] server: add QXLInterface::client_monitors_config

Hans de Goede hdegoede at redhat.com
Wed Sep 12 06:51:37 PDT 2012


ACK.

On 09/12/2012 03:13 PM, Alon Levy wrote:
> Used to implement guest monitor configuration change similarly to real
> hardware in conjunction with the new qemu interrupt
> QXL_INTERRUPT_CLIENT_MONITORS_CONFIG. client_monitors_config is also
> used to probe the support by the interface. If it is not supported we
> send the message to the guest agent.
> This makes a linux qxl driver similar to existing kms drivers.
>
> The logic is:
>
> For every received VDAgentMonitorsConfig:
>   if client_monitors_config(NULL):
>    write client configuration to pci rom BAR.
>    send interrupt to guest
>    guest kernel reads configuration from rom BAR.
>    guest kernel issues event to user space
>    user space reads (libdrm) and reconfigures (libXRandr)
>   else: (current implementation)
>    write message to guest agent
>    guest agent issues reconfiguration via XRandr / windows Escape ioctl to kernel
> ---
>   server/spice.h | 12 +++++++++---
>   1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/server/spice.h b/server/spice.h
> index 2b2ed36..2b94906 100644
> --- a/server/spice.h
> +++ b/server/spice.h
> @@ -21,6 +21,7 @@
>   #include <stdint.h>
>   #include <sys/socket.h>
>   #include <spice/qxl_dev.h>
> +#include <spice/vd_agent.h>
>
>   #define SPICE_SERVER_VERSION 0x000b04 /* release 0.11.4 */
>
> @@ -96,7 +97,7 @@ struct SpiceCoreInterface {
>
>   #define SPICE_INTERFACE_QXL "qxl"
>   #define SPICE_INTERFACE_QXL_MAJOR 3
> -#define SPICE_INTERFACE_QXL_MINOR 2
> +#define SPICE_INTERFACE_QXL_MINOR 3
>   typedef struct QXLInterface QXLInterface;
>   typedef struct QXLInstance QXLInstance;
>   typedef struct QXLState QXLState;
> @@ -240,8 +241,13 @@ struct QXLInterface {
>                                    struct QXLRect *updated_rects,
>                                    uint32_t num_updated_rects);
>       void (*set_client_capabilities)(QXLInstance *qin,
> -				    uint8_t client_present,
> -				    uint8_t caps[58]);
> +                                    uint8_t client_present,
> +                                    uint8_t caps[58]);
> +    /* returns 1 if the interface is supported, 0 otherwise.
> +     * if monitors_config is NULL nothing is done except reporting the
> +     * return code. */
> +    int (*client_monitors_config)(QXLInstance *qin,
> +                                  VDAgentMonitorsConfig *monitors_config);
>   };
>
>   struct QXLInstance {
>


More information about the Spice-devel mailing list