diff options
author | Alon Levy <alevy@redhat.com> | 2012-06-07 14:30:34 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2012-06-27 16:57:05 +0300 |
commit | da908f89b581fd4725da997fdaea209f8e6548f6 (patch) | |
tree | 83d68c6610689517b4cead5a2eb331b9ad4dd634 | |
parent | 86eb1a334ebef63a43df9a267cfa42e4128966ae (diff) |
support multiple monitors on a single display channel
Adds on device:
RAM
Header
monitors_config - pointer
QXLMonitorsConfig
count == n
max_allowed = N >= 0
QXLHead 1
...
QXLHead n
id, surface_id, x, y, width, height, flags
IO:
QXL_IO_MONITORS_CONFIG
server flushes command ring, then calls server callback for changing monitors config.
New revision to let the driver know about the new io:
QXL_REVISION_STABLE_V12=0x04,
Adds server/client capability:
SPICE_DISPLAY_CAP_MONITORS_CONFIG
Server message will be added in spice-server and spice-common.
Version is bumped to 0.12.0 to indicate new IO and structs
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | spice/enums.h | 1 | ||||
-rw-r--r-- | spice/protocol.h | 1 | ||||
-rw-r--r-- | spice/qxl_dev.h | 31 |
4 files changed, 34 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index bf7d949..07e9c75 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,8 @@ AC_PREREQ([2.57]) m4_define([SPICE_MAJOR], 0) -m4_define([SPICE_MINOR], 10) -m4_define([SPICE_MICRO], 3) +m4_define([SPICE_MINOR], 12) +m4_define([SPICE_MICRO], 0) AC_INIT(spice-protocol, [SPICE_MAJOR.SPICE_MINOR.SPICE_MICRO], [], spice-protocol) diff --git a/spice/enums.h b/spice/enums.h index d3a2141..c4e38aa 100644 --- a/spice/enums.h +++ b/spice/enums.h @@ -430,6 +430,7 @@ enum { SPICE_MSG_DISPLAY_SURFACE_CREATE, SPICE_MSG_DISPLAY_SURFACE_DESTROY, SPICE_MSG_DISPLAY_STREAM_DATA_SIZED, + SPICE_MSG_DISPLAY_MONITORS_CONFIG, SPICE_MSG_END_DISPLAY }; diff --git a/spice/protocol.h b/spice/protocol.h index ceba2a1..c0d33e6 100644 --- a/spice/protocol.h +++ b/spice/protocol.h @@ -124,6 +124,7 @@ enum { enum { SPICE_DISPLAY_CAP_SIZED_STREAM, + SPICE_DISPLAY_CAP_MONITORS_CONFIG, }; #include <spice/end-packed.h> diff --git a/spice/qxl_dev.h b/spice/qxl_dev.h index 741a1f6..8899403 100644 --- a/spice/qxl_dev.h +++ b/spice/qxl_dev.h @@ -47,7 +47,8 @@ enum { QXL_REVISION_STABLE_V04=0x01, QXL_REVISION_STABLE_V06=0x02, - QXL_REVISION_STABLE_V10=0x03 + QXL_REVISION_STABLE_V10=0x03, + QXL_REVISION_STABLE_V12=0x04, }; #define QXL_DEVICE_ID_DEVEL 0x01ff @@ -93,6 +94,8 @@ enum { QXL_IO_DESTROY_ALL_SURFACES_ASYNC, QXL_IO_FLUSH_SURFACES_ASYNC, QXL_IO_FLUSH_RELEASE, + /* appended for qxl-4 */ + QXL_IO_MONITORS_CONFIG_ASYNC, QXL_IO_RANGE_SIZE }; @@ -244,6 +247,12 @@ typedef struct SPICE_ATTR_PACKED QXLRam { QXLMemSlot mem_slot; QXLSurfaceCreate create_surface; uint64_t flags; + + /* appended for qxl-4 */ + + /* used by QXL_IO_MONITORS_CONFIG_ASYNC */ + QXLPHYSICAL monitors_config; + } QXLRam; typedef union QXLReleaseInfo { @@ -653,6 +662,26 @@ typedef struct SPICE_ATTR_PACKED QXLImage { }; } QXLImage; +/* A QXLHead is a single monitor output backed by a QXLSurface. + * x and y offsets are unsigned since they are used in relation to + * the given surface, not the same as the x, y coordinates in the guest + * screen reference frame. */ +typedef struct SPICE_ATTR_PACKED QXLHead { + uint32_t id; + uint32_t surface_id; + uint32_t width; + uint32_t height; + uint32_t x; + uint32_t y; + uint32_t flags; +} QXLHead; + +typedef struct SPICE_ATTR_PACKED QXLMonitorsConfig { + uint16_t count; + uint16_t max_allowed; /* If it is 0 no fixed limit is given by the driver */ + QXLHead heads[0]; +} QXLMonitorsConfig; + #include <spice/end-packed.h> #endif /* _H_QXL_DEV */ |