/usr/include/spice-server/spice-qxl.h is in libspice-server-dev 0.14.0-1ubuntu2.4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | /*
* Copyright (C) 2014 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef SPICE_QXL_H_
#define SPICE_QXL_H_
#if !defined(SPICE_H_INSIDE) && !defined(SPICE_SERVER_INTERNAL)
#error "Only spice.h can be included directly."
#endif
#include "spice-core.h"
#ifndef SPICE_CAPABILITIES_SIZE
#define SPICE_CAPABILITIES_SIZE (sizeof(((QXLRom*)0)->client_capabilities))
#endif
/* qxl interface */
#define SPICE_INTERFACE_QXL "qxl"
#define SPICE_INTERFACE_QXL_MAJOR 3
#define SPICE_INTERFACE_QXL_MINOR 3
typedef struct QXLInterface QXLInterface;
typedef struct QXLInstance QXLInstance;
typedef struct QXLState QXLState;
typedef struct QXLWorker QXLWorker;
typedef struct QXLDevMemSlot QXLDevMemSlot;
typedef struct QXLDevSurfaceCreate QXLDevSurfaceCreate;
struct QXLWorker {
uint32_t minor_version;
uint32_t major_version;
/* These calls are deprecated. Please use the spice_qxl_* calls instead */
void (*wakeup)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*oom)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*start)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*stop)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*update_area)(QXLWorker *qxl_worker, uint32_t surface_id,
struct QXLRect *area, struct QXLRect *dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region) SPICE_GNUC_DEPRECATED;
void (*add_memslot)(QXLWorker *worker, QXLDevMemSlot *slot) SPICE_GNUC_DEPRECATED;
void (*del_memslot)(QXLWorker *worker, uint32_t slot_group_id, uint32_t slot_id) SPICE_GNUC_DEPRECATED;
void (*reset_memslots)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*destroy_surfaces)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*destroy_primary_surface)(QXLWorker *worker, uint32_t surface_id) SPICE_GNUC_DEPRECATED;
void (*create_primary_surface)(QXLWorker *worker, uint32_t surface_id,
QXLDevSurfaceCreate *surface) SPICE_GNUC_DEPRECATED;
void (*reset_image_cache)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*reset_cursor)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
void (*destroy_surface_wait)(QXLWorker *worker, uint32_t surface_id) SPICE_GNUC_DEPRECATED;
void (*loadvm_commands)(QXLWorker *worker, struct QXLCommandExt *ext, uint32_t count) SPICE_GNUC_DEPRECATED;
};
void spice_qxl_wakeup(QXLInstance *instance);
void spice_qxl_oom(QXLInstance *instance);
/* deprecated since 0.11.2, spice_server_vm_start replaces it */
void spice_qxl_start(QXLInstance *instance) SPICE_GNUC_DEPRECATED;
/* deprecated since 0.11.2 spice_server_vm_stop replaces it */
void spice_qxl_stop(QXLInstance *instance) SPICE_GNUC_DEPRECATED;
void spice_qxl_update_area(QXLInstance *instance, uint32_t surface_id,
struct QXLRect *area, struct QXLRect *dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region);
void spice_qxl_add_memslot(QXLInstance *instance, QXLDevMemSlot *slot);
void spice_qxl_del_memslot(QXLInstance *instance, uint32_t slot_group_id, uint32_t slot_id);
void spice_qxl_reset_memslots(QXLInstance *instance);
void spice_qxl_destroy_surfaces(QXLInstance *instance);
void spice_qxl_destroy_primary_surface(QXLInstance *instance, uint32_t surface_id);
void spice_qxl_create_primary_surface(QXLInstance *instance, uint32_t surface_id,
QXLDevSurfaceCreate *surface);
void spice_qxl_reset_image_cache(QXLInstance *instance);
void spice_qxl_reset_cursor(QXLInstance *instance);
void spice_qxl_destroy_surface_wait(QXLInstance *instance, uint32_t surface_id);
void spice_qxl_loadvm_commands(QXLInstance *instance, struct QXLCommandExt *ext, uint32_t count);
/* async versions of commands. when complete spice calls async_complete */
void spice_qxl_update_area_async(QXLInstance *instance, uint32_t surface_id, QXLRect *qxl_area,
uint32_t clear_dirty_region, uint64_t cookie);
void spice_qxl_add_memslot_async(QXLInstance *instance, QXLDevMemSlot *slot, uint64_t cookie);
void spice_qxl_destroy_surfaces_async(QXLInstance *instance, uint64_t cookie);
void spice_qxl_destroy_primary_surface_async(QXLInstance *instance, uint32_t surface_id, uint64_t cookie);
void spice_qxl_create_primary_surface_async(QXLInstance *instance, uint32_t surface_id,
QXLDevSurfaceCreate *surface, uint64_t cookie);
void spice_qxl_destroy_surface_async(QXLInstance *instance, uint32_t surface_id, uint64_t cookie);
/* suspend and resolution change on windows drivers */
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);
/* since spice 0.12.3 */
void spice_qxl_driver_unload(QXLInstance *instance);
/* since spice 0.12.6 */
void spice_qxl_set_max_monitors(QXLInstance *instance,
unsigned int max_monitors);
/* since spice 0.13.1 */
void spice_qxl_gl_scanout(QXLInstance *instance,
int fd,
uint32_t width, uint32_t height,
uint32_t stride, uint32_t format,
int y_0_top);
void spice_qxl_gl_draw_async(QXLInstance *instance,
uint32_t x, uint32_t y,
uint32_t w, uint32_t h,
uint64_t cookie);
typedef struct QXLDrawArea {
uint8_t *buf;
uint32_t size;
uint8_t *line_0;
uint32_t width;
uint32_t heigth;
int stride;
} QXLDrawArea;
typedef struct QXLDevInfo {
uint32_t x_res;
uint32_t y_res;
uint32_t bits;
uint32_t use_hardware_cursor;
QXLDrawArea draw_area;
uint32_t ram_size;
} QXLDevInfo;
typedef struct QXLDevInitInfo {
uint32_t num_memslots_groups;
uint32_t num_memslots;
uint8_t memslot_gen_bits;
uint8_t memslot_id_bits;
uint32_t qxl_ram_size;
uint8_t internal_groupslot_id;
uint32_t n_surfaces;
} QXLDevInitInfo;
struct QXLDevMemSlot {
uint32_t slot_group_id;
uint32_t slot_id;
uint32_t generation;
unsigned long virt_start;
unsigned long virt_end;
uint64_t addr_delta;
uint32_t qxl_ram_size;
};
struct QXLDevSurfaceCreate {
uint32_t width;
uint32_t height;
int32_t stride;
uint32_t format;
uint32_t position;
uint32_t mouse_mode;
uint32_t flags;
uint32_t type;
uint64_t mem;
uint32_t group_id;
};
struct QXLInterface {
SpiceBaseInterface base;
void (*attache_worker)(QXLInstance *qin, QXLWorker *qxl_worker);
void (*set_compression_level)(QXLInstance *qin, int level);
void (*set_mm_time)(QXLInstance *qin, uint32_t mm_time) SPICE_GNUC_DEPRECATED;
void (*get_init_info)(QXLInstance *qin, QXLDevInitInfo *info);
/* Retrieve the next command to be processed
* This call should be non-blocking. If no commands are available, it
* should return 0, or 1 if a command was retrieved */
int (*get_command)(QXLInstance *qin, struct QXLCommandExt *cmd);
/* Request notification when new commands are available
* When a new command becomes available, the spice server should be
* notified by calling spice_qxl_wakeup(). If commands are already
* available, this function should return false and no notification
* triggered */
int (*req_cmd_notification)(QXLInstance *qin);
void (*release_resource)(QXLInstance *qin, struct QXLReleaseInfoExt release_info);
int (*get_cursor_command)(QXLInstance *qin, struct QXLCommandExt *cmd);
int (*req_cursor_notification)(QXLInstance *qin);
void (*notify_update)(QXLInstance *qin, uint32_t update_id);
int (*flush_resources)(QXLInstance *qin);
void (*async_complete)(QXLInstance *qin, uint64_t cookie);
void (*update_area_complete)(QXLInstance *qin, uint32_t surface_id,
struct QXLRect *updated_rects,
uint32_t num_updated_rects);
/* Available since version 3.2 */
void (*set_client_capabilities)(QXLInstance *qin,
uint8_t client_present,
uint8_t caps[SPICE_CAPABILITIES_SIZE]);
/* Returns 1 if the interface is supported, 0 otherwise.
* if monitors_config is NULL nothing is done except reporting the
* return code.
* Available since version 3.3 */
int (*client_monitors_config)(QXLInstance *qin,
VDAgentMonitorsConfig *monitors_config);
};
struct QXLInstance {
SpiceBaseInstance base;
int id;
QXLState *st;
};
#endif /* SPICE_QXL_H_ */
|