Allow spice to know about guest driver capabilities. Implements spice api complement to qemu QXL_IO_CAPABILITIES_SET. Implementation in red_dispatcher. Stores a copy of guest capabilities. --- server/red_dispatcher.c | 20 ++++++++++++++++++++ server/spice-server.syms | 1 + server/spice.h | 2 ++ 3 files changed, 23 insertions(+) diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c index 3a4229e..8e44674 100644 --- a/server/red_dispatcher.c +++ b/server/red_dispatcher.c @@ -64,6 +64,8 @@ struct RedDispatcher { Ring async_commands; pthread_mutex_t async_lock; QXLDevSurfaceCreate surface_create; + size_t guest_capabilities_size; + uint8_t *guest_capabilities; }; typedef struct RedWorkeState { @@ -952,6 +954,24 @@ void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors red_dispatcher_monitors_config_async(instance->st->dispatcher, monitors_config, group_id, cookie); } +SPICE_GNUC_VISIBLE +void spice_qxl_guest_capabilities_set(QXLInstance *instance, size_t caps_length, + uint8_t *new_caps) +{ + RedDispatcher *dispatcher = instance->st->dispatcher; + + printf("%s: caps_length=%zd, new_caps=%p, new_caps[0]=%u\n", + __func__, caps_length, new_caps, new_caps ? new_caps[0] : -1); + + if (dispatcher->guest_capabilities) { + free(dispatcher->guest_capabilities); + } + dispatcher->guest_capabilities_size = caps_length; + dispatcher->guest_capabilities = malloc(dispatcher->guest_capabilities_size); + memcpy(dispatcher->guest_capabilities, new_caps, + dispatcher->guest_capabilities_size); +} + void red_dispatcher_async_complete(struct RedDispatcher *dispatcher, AsyncCommand *async_command) { diff --git a/server/spice-server.syms b/server/spice-server.syms index fd2a423..b6fc7e6 100644 --- a/server/spice-server.syms +++ b/server/spice-server.syms @@ -126,4 +126,5 @@ global: SPICE_SERVER_0.11.4 { spice_server_set_exit_on_disconnect; + spice_qxl_guest_capabilities_set; } SPICE_SERVER_0.11.2; diff --git a/server/spice.h b/server/spice.h index 3152f8c..9ae76c2 100644 --- a/server/spice.h +++ b/server/spice.h @@ -166,6 +166,8 @@ void spice_qxl_flush_surfaces_async(QXLInstance *instance, uint64_t cookie); /* since spice 0.12.0 */ void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors_config, int group_id, uint64_t cookie); +void spice_qxl_guest_capabilities_set(QXLInstance *instance, size_t caps_length, + uint8_t *new_caps); typedef struct QXLDrawArea { uint8_t *buf; -- 1.7.12 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel