|
|
1.1 root 1: /*
2: * Copyright (C) 2010 Red Hat, Inc.
3: *
4: * This program is free software; you can redistribute it and/or
5: * modify it under the terms of the GNU General Public License as
6: * published by the Free Software Foundation; either version 2 or
7: * (at your option) version 3 of the License.
8: *
9: * This program is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: * GNU General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with this program; if not, see <http://www.gnu.org/licenses/>.
16: */
17:
18: #include <spice/ipc_ring.h>
19: #include <spice/enums.h>
20: #include <spice/qxl_dev.h>
21:
1.1.1.2 root 22: #include "qemu-thread.h"
23: #include "console.h"
1.1 root 24: #include "pflib.h"
1.1.1.3 ! root 25: #include "sysemu.h"
1.1 root 26:
27: #define NUM_MEMSLOTS 8
28: #define MEMSLOT_GENERATION_BITS 8
29: #define MEMSLOT_SLOT_BITS 8
30:
31: #define MEMSLOT_GROUP_HOST 0
32: #define MEMSLOT_GROUP_GUEST 1
33: #define NUM_MEMSLOTS_GROUPS 2
34:
35: #define NUM_SURFACES 1024
36:
1.1.1.3 ! root 37: /*
! 38: * Internal enum to differenciate between options for
! 39: * io calls that have a sync (old) version and an _async (new)
! 40: * version:
! 41: * QXL_SYNC: use the old version
! 42: * QXL_ASYNC: use the new version and make sure there are no two
! 43: * happening at the same time. This is used for guest initiated
! 44: * calls
! 45: */
! 46: typedef enum qxl_async_io {
! 47: QXL_SYNC,
! 48: QXL_ASYNC,
! 49: } qxl_async_io;
! 50:
1.1.1.2 root 51: typedef struct SimpleSpiceDisplay SimpleSpiceDisplay;
52: typedef struct SimpleSpiceUpdate SimpleSpiceUpdate;
53:
54: struct SimpleSpiceDisplay {
1.1 root 55: DisplayState *ds;
56: void *buf;
57: int bufsize;
58: QXLWorker *worker;
59: QXLInstance qxl;
60: uint32_t unique;
61: QemuPfConv *conv;
62:
63: QXLRect dirty;
64: int notify;
65: int running;
66:
1.1.1.2 root 67: /*
68: * All struct members below this comment can be accessed from
69: * both spice server and qemu (iothread) context and any access
70: * to them must be protected by the lock.
71: */
72: QemuMutex lock;
73: SimpleSpiceUpdate *update;
74: QEMUCursor *cursor;
75: int mouse_x, mouse_y;
76: };
77:
78: struct SimpleSpiceUpdate {
1.1 root 79: QXLDrawable drawable;
80: QXLImage image;
81: QXLCommandExt ext;
82: uint8_t *bitmap;
1.1.1.2 root 83: };
1.1 root 84:
85: int qemu_spice_rect_is_empty(const QXLRect* r);
86: void qemu_spice_rect_union(QXLRect *dest, const QXLRect *r);
87:
88: void qemu_spice_destroy_update(SimpleSpiceDisplay *sdpy, SimpleSpiceUpdate *update);
89: void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd);
90: void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd);
91: void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd);
1.1.1.3 ! root 92: void qemu_spice_vm_change_state_handler(void *opaque, int running,
! 93: RunState state);
! 94: void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds);
1.1 root 95:
96: void qemu_spice_display_update(SimpleSpiceDisplay *ssd,
97: int x, int y, int w, int h);
98: void qemu_spice_display_resize(SimpleSpiceDisplay *ssd);
99: void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd);
1.1.1.3 ! root 100:
! 101: void qemu_spice_add_memslot(SimpleSpiceDisplay *ssd, QXLDevMemSlot *memslot,
! 102: qxl_async_io async);
! 103: void qemu_spice_del_memslot(SimpleSpiceDisplay *ssd, uint32_t gid,
! 104: uint32_t sid);
! 105: void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id,
! 106: QXLDevSurfaceCreate *surface,
! 107: qxl_async_io async);
! 108: void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd,
! 109: uint32_t id, qxl_async_io async);
! 110: void qemu_spice_wakeup(SimpleSpiceDisplay *ssd);
! 111: void qemu_spice_start(SimpleSpiceDisplay *ssd);
! 112: void qemu_spice_stop(SimpleSpiceDisplay *ssd);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.