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 22#include "qemu-thread.h" 23#include "console.h" 24#include "pflib.h" 25 26#define NUM_MEMSLOTS 8 27#define MEMSLOT_GENERATION_BITS 8 28#define MEMSLOT_SLOT_BITS 8 29 30#define MEMSLOT_GROUP_HOST 0 31#define MEMSLOT_GROUP_GUEST 1 32#define NUM_MEMSLOTS_GROUPS 2 33 34#define NUM_SURFACES 1024 35 36typedef struct SimpleSpiceDisplay SimpleSpiceDisplay; 37typedef struct SimpleSpiceUpdate SimpleSpiceUpdate; 38 39struct SimpleSpiceDisplay { 40 DisplayState *ds; 41 void *buf; 42 int bufsize; 43 QXLWorker *worker; 44 QXLInstance qxl; 45 uint32_t unique; 46 QemuPfConv *conv; 47 48 QXLRect dirty; 49 int notify; 50 int running; 51 52 /* 53 * All struct members below this comment can be accessed from 54 * both spice server and qemu (iothread) context and any access 55 * to them must be protected by the lock. 56 */ 57 QemuMutex lock; 58 SimpleSpiceUpdate *update; 59 QEMUCursor *cursor; 60 int mouse_x, mouse_y; 61}; 62 63struct SimpleSpiceUpdate { 64 QXLDrawable drawable; 65 QXLImage image; 66 QXLCommandExt ext; 67 uint8_t *bitmap; 68}; 69 70int qemu_spice_rect_is_empty(const QXLRect* r); 71void qemu_spice_rect_union(QXLRect *dest, const QXLRect *r); 72 73void qemu_spice_destroy_update(SimpleSpiceDisplay *sdpy, SimpleSpiceUpdate *update); 74void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd); 75void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd); 76void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd); 77void qemu_spice_vm_change_state_handler(void *opaque, int running, int reason); 78 79void qemu_spice_display_update(SimpleSpiceDisplay *ssd, 80 int x, int y, int w, int h); 81void qemu_spice_display_resize(SimpleSpiceDisplay *ssd); 82void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd); 83