Commit c10018d6 authored by Søren Sandmann Pedersen's avatar Søren Sandmann Pedersen Committed by Gerd Hoffmann
Browse files

qxl: Add set_client_capabilities() interface to QXLInterface



This new interface lets spice server inform the guest whether

(a) a client is connected
(b) what capabilities the client has

There is a fixed number (464) of bits reserved for capabilities, and
when the capabilities bits change, the QXL_INTERRUPT_CLIENT interrupt
is generated.

Signed-off-by: default avatarSoren Sandmann <ssp@redhat.com>
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent ddd8fdc7
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -944,6 +944,26 @@ static void interface_async_complete(QXLInstance *sin, uint64_t cookie_token)
    }
}

#if SPICE_SERVER_VERSION >= 0x000b04

/* called from spice server thread context only */
static void interface_set_client_capabilities(QXLInstance *sin,
                                              uint8_t client_present,
                                              uint8_t caps[58])
{
    PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl);

    qxl->shadow_rom.client_present = client_present;
    memcpy(qxl->shadow_rom.client_capabilities, caps, sizeof(caps));
    qxl->rom->client_present = client_present;
    memcpy(qxl->rom->client_capabilities, caps, sizeof(caps));
    qxl_rom_set_dirty(qxl);

    qxl_send_events(qxl, QXL_INTERRUPT_CLIENT);
}

#endif

static const QXLInterface qxl_interface = {
    .base.type               = SPICE_INTERFACE_QXL,
    .base.description        = "qxl gpu",
@@ -965,6 +985,9 @@ static const QXLInterface qxl_interface = {
    .flush_resources         = interface_flush_resources,
    .async_complete          = interface_async_complete,
    .update_area_complete    = interface_update_area_complete,
#if SPICE_SERVER_VERSION >= 0x000b04
    .set_client_capabilities = interface_set_client_capabilities,
#endif
};

static void qxl_enter_vga_mode(PCIQXLDevice *d)