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