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: Soren Sandmann <ssp@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
ddd8fdc78e
commit
c10018d6c7
23
hw/qxl.c
23
hw/qxl.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user