summaryrefslogtreecommitdiffstats
path: root/server/red_dispatcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r--server/red_dispatcher.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 3d1d6f98..2d23cbe1 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -345,40 +345,34 @@ static void qxl_worker_oom(QXLWorker *qxl_worker)
}
}
-static void qxl_worker_save(QXLWorker *qxl_worker)
+static void qxl_worker_start(QXLWorker *qxl_worker)
{
RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
- RedWorkeMessage message = RED_WORKER_MESSAGE_SAVE;
+ RedWorkeMessage message = RED_WORKER_MESSAGE_START;
write_message(dispatcher->channel, &message);
- read_message(dispatcher->channel, &message);
- ASSERT(message == RED_WORKER_MESSAGE_READY);
}
-static void qxl_worker_load(QXLWorker *qxl_worker)
+static void qxl_worker_stop(QXLWorker *qxl_worker)
{
RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
- RedWorkeMessage message = RED_WORKER_MESSAGE_LOAD;
+ RedWorkeMessage message = RED_WORKER_MESSAGE_STOP;
write_message(dispatcher->channel, &message);
read_message(dispatcher->channel, &message);
ASSERT(message == RED_WORKER_MESSAGE_READY);
}
-static void qxl_worker_start(QXLWorker *qxl_worker)
+void qxl_worker_loadvm_commands(QXLWorker *qxl_worker,
+ struct QXLCommandExt *ext, uint32_t count)
{
RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
- RedWorkeMessage message = RED_WORKER_MESSAGE_START;
-
- write_message(dispatcher->channel, &message);
-}
-
-static void qxl_worker_stop(QXLWorker *qxl_worker)
-{
- RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
- RedWorkeMessage message = RED_WORKER_MESSAGE_STOP;
+ RedWorkeMessage message = RED_WORKER_MESSAGE_LOADVM_COMMANDS;
+ red_printf("");
write_message(dispatcher->channel, &message);
+ send_data(dispatcher->channel, &count, sizeof(uint32_t));
+ send_data(dispatcher->channel, ext, sizeof(QXLCommandExt) * count);
read_message(dispatcher->channel, &message);
ASSERT(message == RED_WORKER_MESSAGE_READY);
}
@@ -506,8 +500,6 @@ RedDispatcher *red_dispatcher_init(QXLInstance *qxl)
dispatcher->base.minor_version = SPICE_INTERFACE_QXL_MINOR;
dispatcher->base.wakeup = qxl_worker_wakeup;
dispatcher->base.oom = qxl_worker_oom;
- dispatcher->base.save = qxl_worker_save;
- dispatcher->base.load = qxl_worker_load;
dispatcher->base.start = qxl_worker_start;
dispatcher->base.stop = qxl_worker_stop;
dispatcher->base.update_area = qxl_worker_update_area;
@@ -521,6 +513,7 @@ RedDispatcher *red_dispatcher_init(QXLInstance *qxl)
dispatcher->base.reset_image_cache = qxl_worker_reset_image_cache;
dispatcher->base.reset_cursor = qxl_worker_reset_cursor;
dispatcher->base.destroy_surface_wait = qxl_worker_destroy_surface_wait;
+ dispatcher->base.loadvm_commands = qxl_worker_loadvm_commands;
qxl->st->qif->get_init_info(qxl, &init_info);