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

Alon Levy alevy at redhat.com
Wed Sep 12 06:16:47 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.

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 {
> >
> 


More information about the Spice-devel mailing list