123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880 |
- /*
- Copyright (C) 2009 Red Hat, Inc.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef H_QXL_DEV
- #define H_QXL_DEV
- #include <linux/types.h>
- /*
- * from spice-protocol
- * Release 0.10.0
- */
- /* enums.h */
- enum SpiceImageType {
- SPICE_IMAGE_TYPE_BITMAP,
- SPICE_IMAGE_TYPE_QUIC,
- SPICE_IMAGE_TYPE_RESERVED,
- SPICE_IMAGE_TYPE_LZ_PLT = 100,
- SPICE_IMAGE_TYPE_LZ_RGB,
- SPICE_IMAGE_TYPE_GLZ_RGB,
- SPICE_IMAGE_TYPE_FROM_CACHE,
- SPICE_IMAGE_TYPE_SURFACE,
- SPICE_IMAGE_TYPE_JPEG,
- SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS,
- SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB,
- SPICE_IMAGE_TYPE_JPEG_ALPHA,
- SPICE_IMAGE_TYPE_ENUM_END
- };
- enum SpiceBitmapFmt {
- SPICE_BITMAP_FMT_INVALID,
- SPICE_BITMAP_FMT_1BIT_LE,
- SPICE_BITMAP_FMT_1BIT_BE,
- SPICE_BITMAP_FMT_4BIT_LE,
- SPICE_BITMAP_FMT_4BIT_BE,
- SPICE_BITMAP_FMT_8BIT,
- SPICE_BITMAP_FMT_16BIT,
- SPICE_BITMAP_FMT_24BIT,
- SPICE_BITMAP_FMT_32BIT,
- SPICE_BITMAP_FMT_RGBA,
- SPICE_BITMAP_FMT_ENUM_END
- };
- enum SpiceSurfaceFmt {
- SPICE_SURFACE_FMT_INVALID,
- SPICE_SURFACE_FMT_1_A,
- SPICE_SURFACE_FMT_8_A = 8,
- SPICE_SURFACE_FMT_16_555 = 16,
- SPICE_SURFACE_FMT_32_xRGB = 32,
- SPICE_SURFACE_FMT_16_565 = 80,
- SPICE_SURFACE_FMT_32_ARGB = 96,
- SPICE_SURFACE_FMT_ENUM_END
- };
- enum SpiceClipType {
- SPICE_CLIP_TYPE_NONE,
- SPICE_CLIP_TYPE_RECTS,
- SPICE_CLIP_TYPE_ENUM_END
- };
- enum SpiceRopd {
- SPICE_ROPD_INVERS_SRC = (1 << 0),
- SPICE_ROPD_INVERS_BRUSH = (1 << 1),
- SPICE_ROPD_INVERS_DEST = (1 << 2),
- SPICE_ROPD_OP_PUT = (1 << 3),
- SPICE_ROPD_OP_OR = (1 << 4),
- SPICE_ROPD_OP_AND = (1 << 5),
- SPICE_ROPD_OP_XOR = (1 << 6),
- SPICE_ROPD_OP_BLACKNESS = (1 << 7),
- SPICE_ROPD_OP_WHITENESS = (1 << 8),
- SPICE_ROPD_OP_INVERS = (1 << 9),
- SPICE_ROPD_INVERS_RES = (1 << 10),
- SPICE_ROPD_MASK = 0x7ff
- };
- enum SpiceBrushType {
- SPICE_BRUSH_TYPE_NONE,
- SPICE_BRUSH_TYPE_SOLID,
- SPICE_BRUSH_TYPE_PATTERN,
- SPICE_BRUSH_TYPE_ENUM_END
- };
- enum SpiceCursorType {
- SPICE_CURSOR_TYPE_ALPHA,
- SPICE_CURSOR_TYPE_MONO,
- SPICE_CURSOR_TYPE_COLOR4,
- SPICE_CURSOR_TYPE_COLOR8,
- SPICE_CURSOR_TYPE_COLOR16,
- SPICE_CURSOR_TYPE_COLOR24,
- SPICE_CURSOR_TYPE_COLOR32,
- SPICE_CURSOR_TYPE_ENUM_END
- };
- /* qxl_dev.h */
- #pragma pack(push, 1)
- #define REDHAT_PCI_VENDOR_ID 0x1b36
- /* 0x100-0x11f reserved for spice, 0x1ff used for unstable work */
- #define QXL_DEVICE_ID_STABLE 0x0100
- enum {
- QXL_REVISION_STABLE_V04 = 0x01,
- QXL_REVISION_STABLE_V06 = 0x02,
- QXL_REVISION_STABLE_V10 = 0x03,
- QXL_REVISION_STABLE_V12 = 0x04,
- };
- #define QXL_DEVICE_ID_DEVEL 0x01ff
- #define QXL_REVISION_DEVEL 0x01
- #define QXL_ROM_MAGIC (*(uint32_t *)"QXRO")
- #define QXL_RAM_MAGIC (*(uint32_t *)"QXRA")
- enum {
- QXL_RAM_RANGE_INDEX,
- QXL_VRAM_RANGE_INDEX,
- QXL_ROM_RANGE_INDEX,
- QXL_IO_RANGE_INDEX,
- QXL_PCI_RANGES
- };
- /* qxl-1 compat: append only */
- enum {
- QXL_IO_NOTIFY_CMD,
- QXL_IO_NOTIFY_CURSOR,
- QXL_IO_UPDATE_AREA,
- QXL_IO_UPDATE_IRQ,
- QXL_IO_NOTIFY_OOM,
- QXL_IO_RESET,
- QXL_IO_SET_MODE, /* qxl-1 */
- QXL_IO_LOG,
- /* appended for qxl-2 */
- QXL_IO_MEMSLOT_ADD,
- QXL_IO_MEMSLOT_DEL,
- QXL_IO_DETACH_PRIMARY,
- QXL_IO_ATTACH_PRIMARY,
- QXL_IO_CREATE_PRIMARY,
- QXL_IO_DESTROY_PRIMARY,
- QXL_IO_DESTROY_SURFACE_WAIT,
- QXL_IO_DESTROY_ALL_SURFACES,
- /* appended for qxl-3 */
- QXL_IO_UPDATE_AREA_ASYNC,
- QXL_IO_MEMSLOT_ADD_ASYNC,
- QXL_IO_CREATE_PRIMARY_ASYNC,
- QXL_IO_DESTROY_PRIMARY_ASYNC,
- QXL_IO_DESTROY_SURFACE_ASYNC,
- QXL_IO_DESTROY_ALL_SURFACES_ASYNC,
- QXL_IO_FLUSH_SURFACES_ASYNC,
- QXL_IO_FLUSH_RELEASE,
- /* appended for qxl-4 */
- QXL_IO_MONITORS_CONFIG_ASYNC,
- QXL_IO_RANGE_SIZE
- };
- typedef uint64_t QXLPHYSICAL;
- typedef int32_t QXLFIXED; /* fixed 28.4 */
- struct qxl_point_fix {
- QXLFIXED x;
- QXLFIXED y;
- };
- struct qxl_point {
- int32_t x;
- int32_t y;
- };
- struct qxl_point_1_6 {
- int16_t x;
- int16_t y;
- };
- struct qxl_rect {
- int32_t top;
- int32_t left;
- int32_t bottom;
- int32_t right;
- };
- struct qxl_urect {
- uint32_t top;
- uint32_t left;
- uint32_t bottom;
- uint32_t right;
- };
- /* qxl-1 compat: append only */
- struct qxl_rom {
- uint32_t magic;
- uint32_t id;
- uint32_t update_id;
- uint32_t compression_level;
- uint32_t log_level;
- uint32_t mode; /* qxl-1 */
- uint32_t modes_offset;
- uint32_t num_io_pages;
- uint32_t pages_offset; /* qxl-1 */
- uint32_t draw_area_offset; /* qxl-1 */
- uint32_t surface0_area_size; /* qxl-1 name: draw_area_size */
- uint32_t ram_header_offset;
- uint32_t mm_clock;
- /* appended for qxl-2 */
- uint32_t n_surfaces;
- uint64_t flags;
- uint8_t slots_start;
- uint8_t slots_end;
- uint8_t slot_gen_bits;
- uint8_t slot_id_bits;
- uint8_t slot_generation;
- /* appended for qxl-4 */
- uint8_t client_present;
- uint8_t client_capabilities[58];
- uint32_t client_monitors_config_crc;
- struct {
- uint16_t count;
- uint16_t padding;
- struct qxl_urect heads[64];
- } client_monitors_config;
- };
- /* qxl-1 compat: fixed */
- struct qxl_mode {
- uint32_t id;
- uint32_t x_res;
- uint32_t y_res;
- uint32_t bits;
- uint32_t stride;
- uint32_t x_mili;
- uint32_t y_mili;
- uint32_t orientation;
- };
- /* qxl-1 compat: fixed */
- struct qxl_modes {
- uint32_t n_modes;
- struct qxl_mode modes[0];
- };
- /* qxl-1 compat: append only */
- enum qxl_cmd_type {
- QXL_CMD_NOP,
- QXL_CMD_DRAW,
- QXL_CMD_UPDATE,
- QXL_CMD_CURSOR,
- QXL_CMD_MESSAGE,
- QXL_CMD_SURFACE,
- };
- /* qxl-1 compat: fixed */
- struct qxl_command {
- QXLPHYSICAL data;
- uint32_t type;
- uint32_t padding;
- };
- #define QXL_COMMAND_FLAG_COMPAT (1<<0)
- #define QXL_COMMAND_FLAG_COMPAT_16BPP (2<<0)
- struct qxl_command_ext {
- struct qxl_command cmd;
- uint32_t group_id;
- uint32_t flags;
- };
- struct qxl_mem_slot {
- uint64_t mem_start;
- uint64_t mem_end;
- };
- #define QXL_SURF_TYPE_PRIMARY 0
- #define QXL_SURF_FLAG_KEEP_DATA (1 << 0)
- struct qxl_surface_create {
- 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;
- QXLPHYSICAL mem;
- };
- #define QXL_COMMAND_RING_SIZE 32
- #define QXL_CURSOR_RING_SIZE 32
- #define QXL_RELEASE_RING_SIZE 8
- #define QXL_LOG_BUF_SIZE 4096
- #define QXL_INTERRUPT_DISPLAY (1 << 0)
- #define QXL_INTERRUPT_CURSOR (1 << 1)
- #define QXL_INTERRUPT_IO_CMD (1 << 2)
- #define QXL_INTERRUPT_ERROR (1 << 3)
- #define QXL_INTERRUPT_CLIENT (1 << 4)
- #define QXL_INTERRUPT_CLIENT_MONITORS_CONFIG (1 << 5)
- struct qxl_ring_header {
- uint32_t num_items;
- uint32_t prod;
- uint32_t notify_on_prod;
- uint32_t cons;
- uint32_t notify_on_cons;
- };
- /* qxl-1 compat: append only */
- struct qxl_ram_header {
- uint32_t magic;
- uint32_t int_pending;
- uint32_t int_mask;
- uint8_t log_buf[QXL_LOG_BUF_SIZE];
- struct qxl_ring_header cmd_ring_hdr;
- struct qxl_command cmd_ring[QXL_COMMAND_RING_SIZE];
- struct qxl_ring_header cursor_ring_hdr;
- struct qxl_command cursor_ring[QXL_CURSOR_RING_SIZE];
- struct qxl_ring_header release_ring_hdr;
- uint64_t release_ring[QXL_RELEASE_RING_SIZE];
- struct qxl_rect update_area;
- /* appended for qxl-2 */
- uint32_t update_surface;
- struct qxl_mem_slot mem_slot;
- struct qxl_surface_create create_surface;
- uint64_t flags;
- /* appended for qxl-4 */
- /* used by QXL_IO_MONITORS_CONFIG_ASYNC */
- QXLPHYSICAL monitors_config;
- uint8_t guest_capabilities[64];
- };
- union qxl_release_info {
- uint64_t id; /* in */
- uint64_t next; /* out */
- };
- struct qxl_release_info_ext {
- union qxl_release_info *info;
- uint32_t group_id;
- };
- struct qxl_data_chunk {
- uint32_t data_size;
- QXLPHYSICAL prev_chunk;
- QXLPHYSICAL next_chunk;
- uint8_t data[0];
- };
- struct qxl_message {
- union qxl_release_info release_info;
- uint8_t data[0];
- };
- struct qxl_compat_update_cmd {
- union qxl_release_info release_info;
- struct qxl_rect area;
- uint32_t update_id;
- };
- struct qxl_update_cmd {
- union qxl_release_info release_info;
- struct qxl_rect area;
- uint32_t update_id;
- uint32_t surface_id;
- };
- struct qxl_cursor_header {
- uint64_t unique;
- uint16_t type;
- uint16_t width;
- uint16_t height;
- uint16_t hot_spot_x;
- uint16_t hot_spot_y;
- };
- struct qxl_cursor {
- struct qxl_cursor_header header;
- uint32_t data_size;
- struct qxl_data_chunk chunk;
- };
- enum {
- QXL_CURSOR_SET,
- QXL_CURSOR_MOVE,
- QXL_CURSOR_HIDE,
- QXL_CURSOR_TRAIL,
- };
- #define QXL_CURSOR_DEVICE_DATA_SIZE 128
- struct qxl_cursor_cmd {
- union qxl_release_info release_info;
- uint8_t type;
- union {
- struct {
- struct qxl_point_1_6 position;
- uint8_t visible;
- QXLPHYSICAL shape;
- } set;
- struct {
- uint16_t length;
- uint16_t frequency;
- } trail;
- struct qxl_point_1_6 position;
- } u;
- /* todo: dynamic size from rom */
- uint8_t device_data[QXL_CURSOR_DEVICE_DATA_SIZE];
- };
- enum {
- QXL_DRAW_NOP,
- QXL_DRAW_FILL,
- QXL_DRAW_OPAQUE,
- QXL_DRAW_COPY,
- QXL_COPY_BITS,
- QXL_DRAW_BLEND,
- QXL_DRAW_BLACKNESS,
- QXL_DRAW_WHITENESS,
- QXL_DRAW_INVERS,
- QXL_DRAW_ROP3,
- QXL_DRAW_STROKE,
- QXL_DRAW_TEXT,
- QXL_DRAW_TRANSPARENT,
- QXL_DRAW_ALPHA_BLEND,
- QXL_DRAW_COMPOSITE
- };
- struct qxl_raster_glyph {
- struct qxl_point render_pos;
- struct qxl_point glyph_origin;
- uint16_t width;
- uint16_t height;
- uint8_t data[0];
- };
- struct qxl_string {
- uint32_t data_size;
- uint16_t length;
- uint16_t flags;
- struct qxl_data_chunk chunk;
- };
- struct qxl_copy_bits {
- struct qxl_point src_pos;
- };
- enum qxl_effect_type {
- QXL_EFFECT_BLEND = 0,
- QXL_EFFECT_OPAQUE = 1,
- QXL_EFFECT_REVERT_ON_DUP = 2,
- QXL_EFFECT_BLACKNESS_ON_DUP = 3,
- QXL_EFFECT_WHITENESS_ON_DUP = 4,
- QXL_EFFECT_NOP_ON_DUP = 5,
- QXL_EFFECT_NOP = 6,
- QXL_EFFECT_OPAQUE_BRUSH = 7
- };
- struct qxl_pattern {
- QXLPHYSICAL pat;
- struct qxl_point pos;
- };
- struct qxl_brush {
- uint32_t type;
- union {
- uint32_t color;
- struct qxl_pattern pattern;
- } u;
- };
- struct qxl_q_mask {
- uint8_t flags;
- struct qxl_point pos;
- QXLPHYSICAL bitmap;
- };
- struct qxl_fill {
- struct qxl_brush brush;
- uint16_t rop_descriptor;
- struct qxl_q_mask mask;
- };
- struct qxl_opaque {
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- struct qxl_brush brush;
- uint16_t rop_descriptor;
- uint8_t scale_mode;
- struct qxl_q_mask mask;
- };
- struct qxl_copy {
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- uint16_t rop_descriptor;
- uint8_t scale_mode;
- struct qxl_q_mask mask;
- };
- struct qxl_transparent {
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- uint32_t src_color;
- uint32_t true_color;
- };
- struct qxl_alpha_blend {
- uint16_t alpha_flags;
- uint8_t alpha;
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- };
- struct qxl_compat_alpha_blend {
- uint8_t alpha;
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- };
- struct qxl_rop_3 {
- QXLPHYSICAL src_bitmap;
- struct qxl_rect src_area;
- struct qxl_brush brush;
- uint8_t rop3;
- uint8_t scale_mode;
- struct qxl_q_mask mask;
- };
- struct qxl_line_attr {
- uint8_t flags;
- uint8_t join_style;
- uint8_t end_style;
- uint8_t style_nseg;
- QXLFIXED width;
- QXLFIXED miter_limit;
- QXLPHYSICAL style;
- };
- struct qxl_stroke {
- QXLPHYSICAL path;
- struct qxl_line_attr attr;
- struct qxl_brush brush;
- uint16_t fore_mode;
- uint16_t back_mode;
- };
- struct qxl_text {
- QXLPHYSICAL str;
- struct qxl_rect back_area;
- struct qxl_brush fore_brush;
- struct qxl_brush back_brush;
- uint16_t fore_mode;
- uint16_t back_mode;
- };
- struct qxl_mask {
- struct qxl_q_mask mask;
- };
- struct qxl_clip {
- uint32_t type;
- QXLPHYSICAL data;
- };
- enum qxl_operator {
- QXL_OP_CLEAR = 0x00,
- QXL_OP_SOURCE = 0x01,
- QXL_OP_DST = 0x02,
- QXL_OP_OVER = 0x03,
- QXL_OP_OVER_REVERSE = 0x04,
- QXL_OP_IN = 0x05,
- QXL_OP_IN_REVERSE = 0x06,
- QXL_OP_OUT = 0x07,
- QXL_OP_OUT_REVERSE = 0x08,
- QXL_OP_ATOP = 0x09,
- QXL_OP_ATOP_REVERSE = 0x0a,
- QXL_OP_XOR = 0x0b,
- QXL_OP_ADD = 0x0c,
- QXL_OP_SATURATE = 0x0d,
- /* Note the jump here from 0x0d to 0x30 */
- QXL_OP_MULTIPLY = 0x30,
- QXL_OP_SCREEN = 0x31,
- QXL_OP_OVERLAY = 0x32,
- QXL_OP_DARKEN = 0x33,
- QXL_OP_LIGHTEN = 0x34,
- QXL_OP_COLOR_DODGE = 0x35,
- QXL_OP_COLOR_BURN = 0x36,
- QXL_OP_HARD_LIGHT = 0x37,
- QXL_OP_SOFT_LIGHT = 0x38,
- QXL_OP_DIFFERENCE = 0x39,
- QXL_OP_EXCLUSION = 0x3a,
- QXL_OP_HSL_HUE = 0x3b,
- QXL_OP_HSL_SATURATION = 0x3c,
- QXL_OP_HSL_COLOR = 0x3d,
- QXL_OP_HSL_LUMINOSITY = 0x3e
- };
- struct qxl_transform {
- uint32_t t00;
- uint32_t t01;
- uint32_t t02;
- uint32_t t10;
- uint32_t t11;
- uint32_t t12;
- };
- /* The flags field has the following bit fields:
- *
- * operator: [ 0 - 7 ]
- * src_filter: [ 8 - 10 ]
- * mask_filter: [ 11 - 13 ]
- * src_repeat: [ 14 - 15 ]
- * mask_repeat: [ 16 - 17 ]
- * component_alpha: [ 18 - 18 ]
- * reserved: [ 19 - 31 ]
- *
- * The repeat and filter values are those of pixman:
- * REPEAT_NONE = 0
- * REPEAT_NORMAL = 1
- * REPEAT_PAD = 2
- * REPEAT_REFLECT = 3
- *
- * The filter values are:
- * FILTER_NEAREST = 0
- * FILTER_BILINEAR = 1
- */
- struct qxl_composite {
- uint32_t flags;
- QXLPHYSICAL src;
- QXLPHYSICAL src_transform; /* May be NULL */
- QXLPHYSICAL mask; /* May be NULL */
- QXLPHYSICAL mask_transform; /* May be NULL */
- struct qxl_point_1_6 src_origin;
- struct qxl_point_1_6 mask_origin;
- };
- struct qxl_compat_drawable {
- union qxl_release_info release_info;
- uint8_t effect;
- uint8_t type;
- uint16_t bitmap_offset;
- struct qxl_rect bitmap_area;
- struct qxl_rect bbox;
- struct qxl_clip clip;
- uint32_t mm_time;
- union {
- struct qxl_fill fill;
- struct qxl_opaque opaque;
- struct qxl_copy copy;
- struct qxl_transparent transparent;
- struct qxl_compat_alpha_blend alpha_blend;
- struct qxl_copy_bits copy_bits;
- struct qxl_copy blend;
- struct qxl_rop_3 rop3;
- struct qxl_stroke stroke;
- struct qxl_text text;
- struct qxl_mask blackness;
- struct qxl_mask invers;
- struct qxl_mask whiteness;
- } u;
- };
- struct qxl_drawable {
- union qxl_release_info release_info;
- uint32_t surface_id;
- uint8_t effect;
- uint8_t type;
- uint8_t self_bitmap;
- struct qxl_rect self_bitmap_area;
- struct qxl_rect bbox;
- struct qxl_clip clip;
- uint32_t mm_time;
- int32_t surfaces_dest[3];
- struct qxl_rect surfaces_rects[3];
- union {
- struct qxl_fill fill;
- struct qxl_opaque opaque;
- struct qxl_copy copy;
- struct qxl_transparent transparent;
- struct qxl_alpha_blend alpha_blend;
- struct qxl_copy_bits copy_bits;
- struct qxl_copy blend;
- struct qxl_rop_3 rop3;
- struct qxl_stroke stroke;
- struct qxl_text text;
- struct qxl_mask blackness;
- struct qxl_mask invers;
- struct qxl_mask whiteness;
- struct qxl_composite composite;
- } u;
- };
- enum qxl_surface_cmd_type {
- QXL_SURFACE_CMD_CREATE,
- QXL_SURFACE_CMD_DESTROY,
- };
- struct qxl_surface {
- uint32_t format;
- uint32_t width;
- uint32_t height;
- int32_t stride;
- QXLPHYSICAL data;
- };
- struct qxl_surface_cmd {
- union qxl_release_info release_info;
- uint32_t surface_id;
- uint8_t type;
- uint32_t flags;
- union {
- struct qxl_surface surface_create;
- } u;
- };
- struct qxl_clip_rects {
- uint32_t num_rects;
- struct qxl_data_chunk chunk;
- };
- enum {
- QXL_PATH_BEGIN = (1 << 0),
- QXL_PATH_END = (1 << 1),
- QXL_PATH_CLOSE = (1 << 3),
- QXL_PATH_BEZIER = (1 << 4),
- };
- struct qxl_path_seg {
- uint32_t flags;
- uint32_t count;
- struct qxl_point_fix points[0];
- };
- struct qxl_path {
- uint32_t data_size;
- struct qxl_data_chunk chunk;
- };
- enum {
- QXL_IMAGE_GROUP_DRIVER,
- QXL_IMAGE_GROUP_DEVICE,
- QXL_IMAGE_GROUP_RED,
- QXL_IMAGE_GROUP_DRIVER_DONT_CACHE,
- };
- struct qxl_image_id {
- uint32_t group;
- uint32_t unique;
- };
- union qxl_image_id_union {
- struct qxl_image_id id;
- uint64_t value;
- };
- enum qxl_image_flags {
- QXL_IMAGE_CACHE = (1 << 0),
- QXL_IMAGE_HIGH_BITS_SET = (1 << 1),
- };
- enum qxl_bitmap_flags {
- QXL_BITMAP_DIRECT = (1 << 0),
- QXL_BITMAP_UNSTABLE = (1 << 1),
- QXL_BITMAP_TOP_DOWN = (1 << 2), /* == SPICE_BITMAP_FLAGS_TOP_DOWN */
- };
- #define QXL_SET_IMAGE_ID(image, _group, _unique) { \
- (image)->descriptor.id = (((uint64_t)_unique) << 32) | _group; \
- }
- struct qxl_image_descriptor {
- uint64_t id;
- uint8_t type;
- uint8_t flags;
- uint32_t width;
- uint32_t height;
- };
- struct qxl_palette {
- uint64_t unique;
- uint16_t num_ents;
- uint32_t ents[0];
- };
- struct qxl_bitmap {
- uint8_t format;
- uint8_t flags;
- uint32_t x;
- uint32_t y;
- uint32_t stride;
- QXLPHYSICAL palette;
- QXLPHYSICAL data; /* data[0] ? */
- };
- struct qxl_surface_id {
- uint32_t surface_id;
- };
- struct qxl_encoder_data {
- uint32_t data_size;
- uint8_t data[0];
- };
- struct qxl_image {
- struct qxl_image_descriptor descriptor;
- union { /* variable length */
- struct qxl_bitmap bitmap;
- struct qxl_encoder_data quic;
- struct qxl_surface_id surface_image;
- } u;
- };
- /* A QXLHead is a single monitor output backed by a QXLSurface.
- * x and y offsets are unsigned since they are used in relation to
- * the given surface, not the same as the x, y coordinates in the guest
- * screen reference frame. */
- struct qxl_head {
- uint32_t id;
- uint32_t surface_id;
- uint32_t width;
- uint32_t height;
- uint32_t x;
- uint32_t y;
- uint32_t flags;
- };
- struct qxl_monitors_config {
- uint16_t count;
- uint16_t max_allowed; /* If it is 0 no fixed limit is given by the
- driver */
- struct qxl_head heads[0];
- };
- #pragma pack(pop)
- #endif /* _H_QXL_DEV */
|