1f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* 2f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Copyright 2013 Red Hat 3f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * All Rights Reserved. 4f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 5f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Permission is hereby granted, free of charge, to any person obtaining a 6f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * copy of this software and associated documentation files (the "Software"), 7f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * to deal in the Software without restriction, including without limitation 8f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * and/or sell copies of the Software, and to permit persons to whom the 10f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Software is furnished to do so, subject to the following conditions: 11f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 12f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * The above copyright notice and this permission notice (including the next 13f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * paragraph) shall be included in all copies or substantial portions of the 14f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Software. 15f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 16f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * OTHER DEALINGS IN THE SOFTWARE. 23f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie */ 24f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#ifndef QXL_DRM_H 25f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_DRM_H 26f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 27f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#include <stddef.h> 28f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#include "drm/drm.h" 29f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 30f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* Please note that modifications to all structs defined here are 31f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * subject to backwards-compatibility constraints. 32f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * 33f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * Do not use pointers, use uint64_t instead for 32 bit / 64 bit user/kernel 34f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * compatibility Keep fields aligned to their size 35f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie */ 36f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 37f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_GEM_DOMAIN_CPU 0 38f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_GEM_DOMAIN_VRAM 1 39f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_GEM_DOMAIN_SURFACE 2 40f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 41f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_ALLOC 0x00 42f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_MAP 0x01 43f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_EXECBUFFER 0x02 44f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_UPDATE_AREA 0x03 45f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_GETPARAM 0x04 46f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_CLIENTCAP 0x05 47f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 48f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_QXL_ALLOC_SURF 0x06 49f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 50f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_alloc { 51f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t size; 52f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t handle; /* 0 is an invalid handle */ 53f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 54f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 55f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_map { 56f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t offset; /* use for mmap system call */ 57f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t handle; 58f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 59f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 60f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 61f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* 62f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * dest is the bo we are writing the relocation into 63f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * src is bo we are relocating. 64f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr + 65f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie * src_offset) 66f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie */ 67f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_RELOC_TYPE_BO 1 68f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_RELOC_TYPE_SURF 2 69f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 70f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_reloc { 71f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t src_offset; /* offset into src_handle or src buffer */ 72f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t dst_offset; /* offset in dest handle */ 73f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t src_handle; /* dest handle to compute address from */ 74f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t dst_handle; /* 0 if to command buffer */ 75f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t reloc_type; 76f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 77f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 78f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 79f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_command { 80f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t __user command; /* void* */ 81f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t __user relocs; /* struct drm_qxl_reloc* */ 82f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t type; 83f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t command_size; 84f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t relocs_num; 85f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 86f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 87f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 88f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* XXX: call it drm_qxl_commands? */ 89f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_execbuffer { 90f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t flags; /* for future use */ 91f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t commands_num; 92f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t __user commands; /* struct drm_qxl_command* */ 93f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 94f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 95f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_update_area { 96f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t handle; 97f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t top; 98f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t left; 99f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t bottom; 100f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t right; 101f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 102f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 103f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 104f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */ 105f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define QXL_PARAM_MAX_RELOCS 2 106f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_getparam { 107f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t param; 108f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint64_t value; 109f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 110f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 111f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie/* these are one bit values */ 112f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_clientcap { 113f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t index; 114f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 115f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 116f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 117f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airliestruct drm_qxl_alloc_surf { 118f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t format; 119f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t width; 120f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t height; 121f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie int32_t stride; 122f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t handle; 123f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie uint32_t pad; 124f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie}; 125f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 126f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_ALLOC \ 127f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc) 128f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 129f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_MAP \ 130f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map) 131f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 132f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_EXECBUFFER \ 133f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\ 134f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct drm_qxl_execbuffer) 135f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 136f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_UPDATE_AREA \ 137f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\ 138f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct drm_qxl_update_area) 139f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 140f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_GETPARAM \ 141f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\ 142f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct drm_qxl_getparam) 143f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 144f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_CLIENTCAP \ 145f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\ 146f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct drm_qxl_clientcap) 147f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 148f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#define DRM_IOCTL_QXL_ALLOC_SURF \ 149f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\ 150f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie struct drm_qxl_alloc_surf) 151f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie 152f64122c1f6ade301585569863b4b3b18f6e4e332Dave Airlie#endif 153