> 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. I'll fix before pushing, thanks. > > > > > 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 { > > > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel