/*
   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 */
