[Spice-devel] [PATCH spice-protocol v2 1/2] qxl_dev.h: add client monitors configuration notification to guest

Hans de Goede hdegoede at redhat.com
Wed Sep 12 06:15:52 PDT 2012


Hi,

On 09/12/2012 03:13 PM, Alon Levy wrote:
> So far we have used the agent to notify the guest of a request to change
> the monitors configurations (heads) on the qxl device. This patch introduces
> a new interrupt and new fields in the qxl rom to notify the guest about
> a new request, similarly to how physical hardware notifies the driver.
>
> To avoid overwriting the rom while the guest is reading it there is a
> client_monitors_config_updating field in ROM. The update protocol is:

Sorry to be a pita, but that part of the commit message no longer applies.

>
> qemu:
>    (2) fill QXLRom::client_monitors_config
>    (3) raise QXL_INTERRUPT_CLIENT_MONITORS_CONFIG
>
> guest:
>    (1) clear QXL_INTERRUPT_CLIENT_MONITORS_CONFIG bit in irq status
>    (2) read QXLRom::client_monitors_config
>    (3) (verify-crc)? done : goto 2
>
> If the interrupt mask is ~0 or 0, or does not have
> QXL_INTERRUPT_CLIENT_MONITORS_CONFIG set, we also assume it doesn't support
> this interrupt.
> ---
>   spice/qxl_dev.h | 18 ++++++++++++++++++
>   1 file changed, 18 insertions(+)
>
> diff --git a/spice/qxl_dev.h b/spice/qxl_dev.h
> index 50784dc..48ad403 100644
> --- a/spice/qxl_dev.h
> +++ b/spice/qxl_dev.h
> @@ -125,6 +125,13 @@ typedef struct SPICE_ATTR_PACKED QXLRect {
>       int32_t right;
>   } QXLRect;
>
> +typedef struct SPICE_ATTR_PACKED QXLURect {
> +    uint32_t top;
> +    uint32_t left;
> +    uint32_t bottom;
> +    uint32_t right;
> +} QXLURect;
> +
>   /* qxl-1 compat: append only */
>   typedef struct SPICE_ATTR_PACKED QXLRom {
>       uint32_t magic;
> @@ -151,8 +158,16 @@ typedef struct SPICE_ATTR_PACKED QXLRom {
>       /* appended for qxl-4 */
>       uint8_t client_present;
>       uint8_t client_capabilities[58];
> +    uint32_t client_monitors_config_crc;
> +    struct {
> +        uint16_t count;
> +        uint16_t padding;
> +        QXLURect heads[64];
> +    } client_monitors_config;
>   } QXLRom;
>
> +#define CLIENT_MONITORS_CONFIG_CRC32_POLY 0xedb88320
> +
>   /* qxl-1 compat: fixed */
>   typedef struct SPICE_ATTR_PACKED QXLMode {
>       uint32_t id;
> @@ -234,6 +249,9 @@ SPICE_RING_DECLARE(QXLReleaseRing, uint64_t, QXL_RELEASE_RING_SIZE);
>   #define QXL_INTERRUPT_IO_CMD (1 << 2)
>   #define QXL_INTERRUPT_ERROR  (1 << 3)
>   #define QXL_INTERRUPT_CLIENT (1 << 4)
> +#define QXL_INTERRUPT_CLIENT_MONITORS_CONFIG  (1 << 5)
> +
> +#define QXL_GUEST_CAP_CLIENT_MONITORS_CONFIG_ISR 0
>
>   /* qxl-1 compat: append only */
>   typedef struct SPICE_ATTR_PACKED QXLRam {
>


More information about the Spice-devel mailing list