Used to implement guest monitor configuration change similarly to real hardware in conjunction with the new qemu interrupt QXL_INTERRUPT_CLIENT_MONITORS_CONFIG. Together with the added guest capabilities allows to select the right mode during runtime. This makes a linux qxl driver similar to existing kms drivers. The logic is: For every received VDAgentMonitorsConfig: if guest supports QXL_CAP_MONITORS_CONFIG_ISR: (only kms driver) 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 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/server/spice.h b/server/spice.h index 9ae76c2..65fa6ba 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 1 +#define SPICE_INTERFACE_QXL_MINOR 2 typedef struct QXLInterface QXLInterface; typedef struct QXLInstance QXLInstance; typedef struct QXLState QXLState; @@ -242,8 +243,10 @@ 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]); + void (*client_monitors_config)(QXLInstance *qin, + VDAgentMonitorsConfig *monitors_config); }; struct QXLInstance { -- 1.7.12 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel