1f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* 2f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie Copyright (C) 2009 Red Hat, Inc. 3f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 4f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie Redistribution and use in source and binary forms, with or without 5f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie modification, are permitted provided that the following conditions are 6f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie met: 7f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 8f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Redistributions of source code must retain the above copyright 9f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie notice, this list of conditions and the following disclaimer. 10f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Redistributions in binary form must reproduce the above copyright 11f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie notice, this list of conditions and the following disclaimer in 12f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie the documentation and/or other materials provided with the 13f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie distribution. 14f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Neither the name of the copyright holder nor the names of its 15f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie contributors may be used to endorse or promote products derived 16f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie from this software without specific prior written permission. 17f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 18f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS 19f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 21f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie*/ 30f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 31f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 32f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#ifndef H_QXL_DEV 33f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define H_QXL_DEV 34f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 35f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#include <linux/types.h> 36f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 37f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* 38f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * from spice-protocol 39f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Release 0.10.0 40f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie */ 41f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 42f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* enums.h */ 43f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 44f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceImageType { 45f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_BITMAP, 46f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_QUIC, 47f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_RESERVED, 48f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_LZ_PLT = 100, 49f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_LZ_RGB, 50f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_GLZ_RGB, 51f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_FROM_CACHE, 52f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_SURFACE, 53f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_JPEG, 54f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS, 55f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB, 56f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_JPEG_ALPHA, 57f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 58f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_IMAGE_TYPE_ENUM_END 59f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 60f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 61f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceBitmapFmt { 62f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_INVALID, 63f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_1BIT_LE, 64f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_1BIT_BE, 65f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_4BIT_LE, 66f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_4BIT_BE, 67f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_8BIT, 68f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_16BIT, 69f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_24BIT, 70f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_32BIT, 71f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_RGBA, 72f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 73f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BITMAP_FMT_ENUM_END 74f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 75f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 76f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceSurfaceFmt { 77f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_INVALID, 78f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_1_A, 79f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_8_A = 8, 80f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_16_555 = 16, 81f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_32_xRGB = 32, 82f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_16_565 = 80, 83f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_32_ARGB = 96, 84f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 85f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_SURFACE_FMT_ENUM_END 86f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 87f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 88f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceClipType { 89f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CLIP_TYPE_NONE, 90f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CLIP_TYPE_RECTS, 91f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 92f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CLIP_TYPE_ENUM_END 93f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 94f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 95f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceRopd { 96f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_INVERS_SRC = (1 << 0), 97f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_INVERS_BRUSH = (1 << 1), 98f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_INVERS_DEST = (1 << 2), 99f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_PUT = (1 << 3), 100f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_OR = (1 << 4), 101f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_AND = (1 << 5), 102f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_XOR = (1 << 6), 103f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_BLACKNESS = (1 << 7), 104f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_WHITENESS = (1 << 8), 105f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_OP_INVERS = (1 << 9), 106f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_INVERS_RES = (1 << 10), 107f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 108f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_ROPD_MASK = 0x7ff 109f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 110f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 111f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceBrushType { 112f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BRUSH_TYPE_NONE, 113f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BRUSH_TYPE_SOLID, 114f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BRUSH_TYPE_PATTERN, 115f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 116f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_BRUSH_TYPE_ENUM_END 117f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 118f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 119f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum SpiceCursorType { 120f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_ALPHA, 121f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_MONO, 122f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_COLOR4, 123f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_COLOR8, 124f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_COLOR16, 125f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_COLOR24, 126f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_COLOR32, 127f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 128f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie SPICE_CURSOR_TYPE_ENUM_END 129f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 130f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 131f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl_dev.h */ 132f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 133f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#pragma pack(push, 1) 134f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 135f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define REDHAT_PCI_VENDOR_ID 0x1b36 136f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 137f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* 0x100-0x11f reserved for spice, 0x1ff used for unstable work */ 138f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_DEVICE_ID_STABLE 0x0100 139f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 140f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 141f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_REVISION_STABLE_V04 = 0x01, 142f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_REVISION_STABLE_V06 = 0x02, 143f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_REVISION_STABLE_V10 = 0x03, 144f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_REVISION_STABLE_V12 = 0x04, 145f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 146f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 147f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_DEVICE_ID_DEVEL 0x01ff 148f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_REVISION_DEVEL 0x01 149f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 150f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_ROM_MAGIC (*(uint32_t *)"QXRO") 151f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_RAM_MAGIC (*(uint32_t *)"QXRA") 152f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 153f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 154f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_RAM_RANGE_INDEX, 155f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_VRAM_RANGE_INDEX, 156f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_ROM_RANGE_INDEX, 157f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_RANGE_INDEX, 158f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 159f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_PCI_RANGES 160f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 161f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 162f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: append only */ 163f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 164f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_NOTIFY_CMD, 165f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_NOTIFY_CURSOR, 166f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_UPDATE_AREA, 167f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_UPDATE_IRQ, 168f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_NOTIFY_OOM, 169f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_RESET, 170f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_SET_MODE, /* qxl-1 */ 171f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_LOG, 172f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-2 */ 173f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_MEMSLOT_ADD, 174f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_MEMSLOT_DEL, 175f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DETACH_PRIMARY, 176f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_ATTACH_PRIMARY, 177f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_CREATE_PRIMARY, 178f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_PRIMARY, 179f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_SURFACE_WAIT, 180f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_ALL_SURFACES, 181f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-3 */ 182f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_UPDATE_AREA_ASYNC, 183f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_MEMSLOT_ADD_ASYNC, 184f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_CREATE_PRIMARY_ASYNC, 185f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_PRIMARY_ASYNC, 186f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_SURFACE_ASYNC, 187f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_DESTROY_ALL_SURFACES_ASYNC, 188f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_FLUSH_SURFACES_ASYNC, 189f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_FLUSH_RELEASE, 190f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-4 */ 191f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_MONITORS_CONFIG_ASYNC, 192f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 193f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IO_RANGE_SIZE 194f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 195f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 196f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlietypedef uint64_t QXLPHYSICAL; 197f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlietypedef int32_t QXLFIXED; /* fixed 28.4 */ 198f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 199f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_point_fix { 200f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLFIXED x; 201f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLFIXED y; 202f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 203f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 204f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_point { 205f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t x; 206f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t y; 207f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 208f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 209f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_point_1_6 { 210f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int16_t x; 211f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int16_t y; 212f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 213f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 214f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_rect { 215f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t top; 216f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t left; 217f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t bottom; 218f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t right; 219f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 220f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 221f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_urect { 222f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t top; 223f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t left; 224f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t bottom; 225f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t right; 226f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 227f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 228f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: append only */ 229f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_rom { 230f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t magic; 231f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t id; 232f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t update_id; 233f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t compression_level; 234f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t log_level; 235f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t mode; /* qxl-1 */ 236f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t modes_offset; 237f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t num_io_pages; 238f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pages_offset; /* qxl-1 */ 239f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t draw_area_offset; /* qxl-1 */ 240f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface0_area_size; /* qxl-1 name: draw_area_size */ 241f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t ram_header_offset; 242f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t mm_clock; 243f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-2 */ 244f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t n_surfaces; 245f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t flags; 246f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t slots_start; 247f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t slots_end; 248f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t slot_gen_bits; 249f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t slot_id_bits; 250f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t slot_generation; 251f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-4 */ 252f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t client_present; 253f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t client_capabilities[58]; 254f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t client_monitors_config_crc; 255f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct { 256f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t count; 257f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t padding; 258f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_urect heads[64]; 259f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } client_monitors_config; 260f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 261f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 262f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: fixed */ 263f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_mode { 264f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t id; 265f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t x_res; 266f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t y_res; 267f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t bits; 268f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t stride; 269f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t x_mili; 270f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t y_mili; 271f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t orientation; 272f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 273f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 274f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: fixed */ 275f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_modes { 276f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t n_modes; 277f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mode modes[0]; 278f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 279f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 280f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: append only */ 281f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_cmd_type { 282f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_NOP, 283f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_DRAW, 284f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_UPDATE, 285f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_CURSOR, 286f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_MESSAGE, 287f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CMD_SURFACE, 288f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 289f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 290f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: fixed */ 291f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_command { 292f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL data; 293f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t type; 294f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t padding; 295f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 296f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 297f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_COMMAND_FLAG_COMPAT (1<<0) 298f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_COMMAND_FLAG_COMPAT_16BPP (2<<0) 299f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 300f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_command_ext { 301f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_command cmd; 302f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t group_id; 303f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 304f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 305f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 306f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_mem_slot { 307f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t mem_start; 308f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t mem_end; 309f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 310f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 311f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_SURF_TYPE_PRIMARY 0 312f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 313f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_SURF_FLAG_KEEP_DATA (1 << 0) 314f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 315f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_surface_create { 316f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t width; 317f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t height; 318f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t stride; 319f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t format; 320f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t position; 321f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t mouse_mode; 322f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 323f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t type; 324f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL mem; 325f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 326f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 327f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_COMMAND_RING_SIZE 32 328f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_CURSOR_RING_SIZE 32 329f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_RELEASE_RING_SIZE 8 330f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 331f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_LOG_BUF_SIZE 4096 332f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 333f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_DISPLAY (1 << 0) 334f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_CURSOR (1 << 1) 335f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_IO_CMD (1 << 2) 336f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_ERROR (1 << 3) 337f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_CLIENT (1 << 4) 338f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_INTERRUPT_CLIENT_MONITORS_CONFIG (1 << 5) 339f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 340f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_ring_header { 341f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t num_items; 342f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t prod; 343f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t notify_on_prod; 344f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t cons; 345f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t notify_on_cons; 346f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 347f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 348f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* qxl-1 compat: append only */ 349f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_ram_header { 350f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t magic; 351f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t int_pending; 352f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t int_mask; 353f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t log_buf[QXL_LOG_BUF_SIZE]; 354f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_ring_header cmd_ring_hdr; 355f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_command cmd_ring[QXL_COMMAND_RING_SIZE]; 356f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_ring_header cursor_ring_hdr; 357f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_command cursor_ring[QXL_CURSOR_RING_SIZE]; 358f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_ring_header release_ring_hdr; 359f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t release_ring[QXL_RELEASE_RING_SIZE]; 360f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect update_area; 361f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-2 */ 362f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t update_surface; 363f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mem_slot mem_slot; 364f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_surface_create create_surface; 365f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t flags; 366f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 367f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* appended for qxl-4 */ 368f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 369f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* used by QXL_IO_MONITORS_CONFIG_ASYNC */ 370f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL monitors_config; 371f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t guest_capabilities[64]; 372f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 373f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 374f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieunion qxl_release_info { 375f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t id; /* in */ 376f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t next; /* out */ 377f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 378f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 379f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_release_info_ext { 380f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info *info; 381f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t group_id; 382f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 383f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 384f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_data_chunk { 385f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t data_size; 386f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL prev_chunk; 387f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL next_chunk; 388f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t data[0]; 389f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 390f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 391f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_message { 392f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 393f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t data[0]; 394f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 395f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 396f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_compat_update_cmd { 397f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 398f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect area; 399f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t update_id; 400f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 401f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 402f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_update_cmd { 403f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 404f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect area; 405f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t update_id; 406f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface_id; 407f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 408f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 409f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_cursor_header { 410f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t unique; 411f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t type; 412f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t width; 413f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t height; 414f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t hot_spot_x; 415f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t hot_spot_y; 416f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 417f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 418f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_cursor { 419f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_cursor_header header; 420f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t data_size; 421f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_data_chunk chunk; 422f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 423f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 424f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 425f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CURSOR_SET, 426f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CURSOR_MOVE, 427f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CURSOR_HIDE, 428f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_CURSOR_TRAIL, 429f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 430f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 431f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_CURSOR_DEVICE_DATA_SIZE 128 432f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 433f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_cursor_cmd { 434f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 435f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t type; 436f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { 437f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct { 438f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point_1_6 position; 439f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t visible; 440f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL shape; 441f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } set; 442f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct { 443f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t length; 444f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t frequency; 445f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } trail; 446f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point_1_6 position; 447f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 448f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* todo: dynamic size from rom */ 449f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t device_data[QXL_CURSOR_DEVICE_DATA_SIZE]; 450f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 451f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 452f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 453f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_NOP, 454f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_FILL, 455f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_OPAQUE, 456f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_COPY, 457f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_COPY_BITS, 458f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_BLEND, 459f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_BLACKNESS, 460f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_WHITENESS, 461f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_INVERS, 462f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_ROP3, 463f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_STROKE, 464f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_TEXT, 465f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_TRANSPARENT, 466f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_ALPHA_BLEND, 467f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_DRAW_COMPOSITE 468f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 469f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 470f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_raster_glyph { 471f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point render_pos; 472f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point glyph_origin; 473f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t width; 474f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t height; 475f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t data[0]; 476f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 477f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 478f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_string { 479f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t data_size; 480f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t length; 481f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t flags; 482f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_data_chunk chunk; 483f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 484f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 485f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_copy_bits { 486f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point src_pos; 487f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 488f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 489f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_effect_type { 490f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_BLEND = 0, 491f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_OPAQUE = 1, 492f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_REVERT_ON_DUP = 2, 493f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_BLACKNESS_ON_DUP = 3, 494f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_WHITENESS_ON_DUP = 4, 495f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_NOP_ON_DUP = 5, 496f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_NOP = 6, 497f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_EFFECT_OPAQUE_BRUSH = 7 498f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 499f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 500f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_pattern { 501f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL pat; 502f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point pos; 503f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 504f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 505f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_brush { 506f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t type; 507f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { 508f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t color; 509f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_pattern pattern; 510f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 511f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 512f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 513f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_q_mask { 514f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t flags; 515f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point pos; 516f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL bitmap; 517f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 518f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 519f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_fill { 520f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush brush; 521f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t rop_descriptor; 522f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_q_mask mask; 523f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 524f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 525f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_opaque { 526f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 527f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 528f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush brush; 529f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t rop_descriptor; 530f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t scale_mode; 531f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_q_mask mask; 532f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 533f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 534f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_copy { 535f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 536f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 537f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t rop_descriptor; 538f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t scale_mode; 539f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_q_mask mask; 540f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 541f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 542f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_transparent { 543f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 544f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 545f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t src_color; 546f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t true_color; 547f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 548f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 549f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_alpha_blend { 550f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t alpha_flags; 551f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t alpha; 552f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 553f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 554f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 555f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 556f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_compat_alpha_blend { 557f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t alpha; 558f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 559f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 560f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 561f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 562f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_rop_3 { 563f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_bitmap; 564f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect src_area; 565f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush brush; 566f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t rop3; 567f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t scale_mode; 568f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_q_mask mask; 569f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 570f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 571f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_line_attr { 572f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t flags; 573f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t join_style; 574f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t end_style; 575f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t style_nseg; 576f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLFIXED width; 577f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLFIXED miter_limit; 578f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL style; 579f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 580f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 581f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_stroke { 582f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL path; 583f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_line_attr attr; 584f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush brush; 585f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t fore_mode; 586f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t back_mode; 587f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 588f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 589f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_text { 590f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL str; 591f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect back_area; 592f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush fore_brush; 593f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_brush back_brush; 594f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t fore_mode; 595f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t back_mode; 596f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 597f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 598f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_mask { 599f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_q_mask mask; 600f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 601f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 602f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_clip { 603f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t type; 604f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL data; 605f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 606f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 607f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_operator { 608f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_CLEAR = 0x00, 609f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_SOURCE = 0x01, 610f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_DST = 0x02, 611f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_OVER = 0x03, 612f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_OVER_REVERSE = 0x04, 613f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_IN = 0x05, 614f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_IN_REVERSE = 0x06, 615f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_OUT = 0x07, 616f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_OUT_REVERSE = 0x08, 617f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_ATOP = 0x09, 618f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_ATOP_REVERSE = 0x0a, 619f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_XOR = 0x0b, 620f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_ADD = 0x0c, 621f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_SATURATE = 0x0d, 622f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie /* Note the jump here from 0x0d to 0x30 */ 623f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_MULTIPLY = 0x30, 624f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_SCREEN = 0x31, 625f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_OVERLAY = 0x32, 626f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_DARKEN = 0x33, 627f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_LIGHTEN = 0x34, 628f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_COLOR_DODGE = 0x35, 629f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_COLOR_BURN = 0x36, 630f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_HARD_LIGHT = 0x37, 631f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_SOFT_LIGHT = 0x38, 632f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_DIFFERENCE = 0x39, 633f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_EXCLUSION = 0x3a, 634f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_HSL_HUE = 0x3b, 635f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_HSL_SATURATION = 0x3c, 636f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_HSL_COLOR = 0x3d, 637f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_OP_HSL_LUMINOSITY = 0x3e 638f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 639f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 640f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_transform { 641f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t00; 642f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t01; 643f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t02; 644f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t10; 645f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t11; 646f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t t12; 647f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 648f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 649f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* The flags field has the following bit fields: 650f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 651f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * operator: [ 0 - 7 ] 652f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * src_filter: [ 8 - 10 ] 653f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * mask_filter: [ 11 - 13 ] 654f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * src_repeat: [ 14 - 15 ] 655f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * mask_repeat: [ 16 - 17 ] 656f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * component_alpha: [ 18 - 18 ] 657f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * reserved: [ 19 - 31 ] 658f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 659f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * The repeat and filter values are those of pixman: 660f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * REPEAT_NONE = 0 661f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * REPEAT_NORMAL = 1 662f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * REPEAT_PAD = 2 663f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * REPEAT_REFLECT = 3 664f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 665f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * The filter values are: 666f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * FILTER_NEAREST = 0 667f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * FILTER_BILINEAR = 1 668f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie */ 669f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_composite { 670f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 671f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 672f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src; 673f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL src_transform; /* May be NULL */ 674f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL mask; /* May be NULL */ 675f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL mask_transform; /* May be NULL */ 676f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point_1_6 src_origin; 677f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point_1_6 mask_origin; 678f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 679f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 680f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_compat_drawable { 681f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 682f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t effect; 683f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t type; 684f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t bitmap_offset; 685f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect bitmap_area; 686f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect bbox; 687f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_clip clip; 688f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t mm_time; 689f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { 690f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_fill fill; 691f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_opaque opaque; 692f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy copy; 693f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_transparent transparent; 694f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_compat_alpha_blend alpha_blend; 695f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy_bits copy_bits; 696f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy blend; 697f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rop_3 rop3; 698f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_stroke stroke; 699f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_text text; 700f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask blackness; 701f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask invers; 702f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask whiteness; 703f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 704f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 705f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 706f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_drawable { 707f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 708f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface_id; 709f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t effect; 710f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t type; 711f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t self_bitmap; 712f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect self_bitmap_area; 713f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect bbox; 714f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_clip clip; 715f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t mm_time; 716f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t surfaces_dest[3]; 717f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rect surfaces_rects[3]; 718f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { 719f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_fill fill; 720f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_opaque opaque; 721f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy copy; 722f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_transparent transparent; 723f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_alpha_blend alpha_blend; 724f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy_bits copy_bits; 725f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_copy blend; 726f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_rop_3 rop3; 727f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_stroke stroke; 728f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_text text; 729f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask blackness; 730f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask invers; 731f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_mask whiteness; 732f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_composite composite; 733f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 734f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 735f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 736f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_surface_cmd_type { 737f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_SURFACE_CMD_CREATE, 738f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_SURFACE_CMD_DESTROY, 739f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 740f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 741f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_surface { 742f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t format; 743f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t width; 744f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t height; 745f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t stride; 746f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL data; 747f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 748f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 749f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_surface_cmd { 750f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union qxl_release_info release_info; 751f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface_id; 752f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t type; 753f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 754f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { 755f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_surface surface_create; 756f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 757f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 758f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 759f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_clip_rects { 760f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t num_rects; 761f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_data_chunk chunk; 762f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 763f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 764f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 765f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_PATH_BEGIN = (1 << 0), 766f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_PATH_END = (1 << 1), 767f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_PATH_CLOSE = (1 << 3), 768f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_PATH_BEZIER = (1 << 4), 769f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 770f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 771f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_path_seg { 772f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 773f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t count; 774f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_point_fix points[0]; 775f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 776f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 777f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_path { 778f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t data_size; 779f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_data_chunk chunk; 780f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 781f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 782f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum { 783f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_GROUP_DRIVER, 784f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_GROUP_DEVICE, 785f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_GROUP_RED, 786f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_GROUP_DRIVER_DONT_CACHE, 787f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 788f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 789f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_image_id { 790f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t group; 791f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t unique; 792f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 793f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 794f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieunion qxl_image_id_union { 795f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_image_id id; 796f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t value; 797f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 798f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 799f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_image_flags { 800f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_CACHE = (1 << 0), 801f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_IMAGE_HIGH_BITS_SET = (1 << 1), 802f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 803f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 804f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlieenum qxl_bitmap_flags { 805f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_BITMAP_DIRECT = (1 << 0), 806f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_BITMAP_UNSTABLE = (1 << 1), 807f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXL_BITMAP_TOP_DOWN = (1 << 2), /* == SPICE_BITMAP_FLAGS_TOP_DOWN */ 808f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 809f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 810f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_SET_IMAGE_ID(image, _group, _unique) { \ 811f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie (image)->descriptor.id = (((uint64_t)_unique) << 32) | _group; \ 812f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie} 813f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 814f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_image_descriptor { 815f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t id; 816f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t type; 817f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t flags; 818f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t width; 819f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t height; 820f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 821f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 822f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_palette { 823f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t unique; 824f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t num_ents; 825f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t ents[0]; 826f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 827f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 828f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_bitmap { 829f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t format; 830f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t flags; 831f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t x; 832f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t y; 833f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t stride; 834f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL palette; 835f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie QXLPHYSICAL data; /* data[0] ? */ 836f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 837f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 838f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_surface_id { 839f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface_id; 840f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 841f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 842f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_encoder_data { 843f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t data_size; 844f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint8_t data[0]; 845f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 846f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 847f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_image { 848f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_image_descriptor descriptor; 849f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie union { /* variable length */ 850f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_bitmap bitmap; 851f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_encoder_data quic; 852f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_surface_id surface_image; 853f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie } u; 854f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 855f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 856f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* A QXLHead is a single monitor output backed by a QXLSurface. 857f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * x and y offsets are unsigned since they are used in relation to 858f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * the given surface, not the same as the x, y coordinates in the guest 859f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * screen reference frame. */ 860f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_head { 861f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t id; 862f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t surface_id; 863f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t width; 864f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t height; 865f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t x; 866f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t y; 867f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; 868f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 869f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 870f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct qxl_monitors_config { 871f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t count; 872f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint16_t max_allowed; /* If it is 0 no fixed limit is given by the 873f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie driver */ 874f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct qxl_head heads[0]; 875f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 876f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 877f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#pragma pack(pop) 878f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 879f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#endif /* _H_QXL_DEV */ 880