xref: /openbmc/linux/include/uapi/drm/qxl_drm.h (revision cf40a76e7d5874bb25f4404eecc58a2e033af885)
1f64122c1SDave Airlie /*
2f64122c1SDave Airlie  * Copyright 2013 Red Hat
3f64122c1SDave Airlie  * All Rights Reserved.
4f64122c1SDave Airlie  *
5f64122c1SDave Airlie  * Permission is hereby granted, free of charge, to any person obtaining a
6f64122c1SDave Airlie  * copy of this software and associated documentation files (the "Software"),
7f64122c1SDave Airlie  * to deal in the Software without restriction, including without limitation
8f64122c1SDave Airlie  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9f64122c1SDave Airlie  * and/or sell copies of the Software, and to permit persons to whom the
10f64122c1SDave Airlie  * Software is furnished to do so, subject to the following conditions:
11f64122c1SDave Airlie  *
12f64122c1SDave Airlie  * The above copyright notice and this permission notice (including the next
13f64122c1SDave Airlie  * paragraph) shall be included in all copies or substantial portions of the
14f64122c1SDave Airlie  * Software.
15f64122c1SDave Airlie  *
16f64122c1SDave Airlie  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17f64122c1SDave Airlie  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18f64122c1SDave Airlie  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19f64122c1SDave Airlie  * THE AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20f64122c1SDave Airlie  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21f64122c1SDave Airlie  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22f64122c1SDave Airlie  * OTHER DEALINGS IN THE SOFTWARE.
23f64122c1SDave Airlie  */
24f64122c1SDave Airlie #ifndef QXL_DRM_H
25f64122c1SDave Airlie #define QXL_DRM_H
26f64122c1SDave Airlie 
278ca32846SGabriel Laskar #include "drm.h"
28f64122c1SDave Airlie 
29485c40b4SEmil Velikov #if defined(__cplusplus)
30485c40b4SEmil Velikov extern "C" {
31485c40b4SEmil Velikov #endif
32485c40b4SEmil Velikov 
33f64122c1SDave Airlie /* Please note that modifications to all structs defined here are
34f64122c1SDave Airlie  * subject to backwards-compatibility constraints.
35f64122c1SDave Airlie  *
368e51012cSMikko Rapeli  * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel
37f64122c1SDave Airlie  * compatibility Keep fields aligned to their size
38f64122c1SDave Airlie  */
39f64122c1SDave Airlie 
40f64122c1SDave Airlie #define QXL_GEM_DOMAIN_CPU 0
41f64122c1SDave Airlie #define QXL_GEM_DOMAIN_VRAM 1
42f64122c1SDave Airlie #define QXL_GEM_DOMAIN_SURFACE 2
43f64122c1SDave Airlie 
44f64122c1SDave Airlie #define DRM_QXL_ALLOC       0x00
45f64122c1SDave Airlie #define DRM_QXL_MAP         0x01
46f64122c1SDave Airlie #define DRM_QXL_EXECBUFFER  0x02
47f64122c1SDave Airlie #define DRM_QXL_UPDATE_AREA 0x03
48f64122c1SDave Airlie #define DRM_QXL_GETPARAM    0x04
49f64122c1SDave Airlie #define DRM_QXL_CLIENTCAP   0x05
50f64122c1SDave Airlie 
51f64122c1SDave Airlie #define DRM_QXL_ALLOC_SURF  0x06
52f64122c1SDave Airlie 
53f64122c1SDave Airlie struct drm_qxl_alloc {
548e51012cSMikko Rapeli 	__u32 size;
558e51012cSMikko Rapeli 	__u32 handle; /* 0 is an invalid handle */
56f64122c1SDave Airlie };
57f64122c1SDave Airlie 
58f64122c1SDave Airlie struct drm_qxl_map {
598e51012cSMikko Rapeli 	__u64 offset; /* use for mmap system call */
608e51012cSMikko Rapeli 	__u32 handle;
618e51012cSMikko Rapeli 	__u32 pad;
62f64122c1SDave Airlie };
63f64122c1SDave Airlie 
64f64122c1SDave Airlie /*
65f64122c1SDave Airlie  * dest is the bo we are writing the relocation into
66f64122c1SDave Airlie  * src is bo we are relocating.
67f64122c1SDave Airlie  * *(dest_handle.base_addr + dest_offset) = physical_address(src_handle.addr +
68f64122c1SDave Airlie  * src_offset)
69f64122c1SDave Airlie  */
70f64122c1SDave Airlie #define QXL_RELOC_TYPE_BO 1
71f64122c1SDave Airlie #define QXL_RELOC_TYPE_SURF 2
72f64122c1SDave Airlie 
73f64122c1SDave Airlie struct drm_qxl_reloc {
748e51012cSMikko Rapeli 	__u64 src_offset; /* offset into src_handle or src buffer */
758e51012cSMikko Rapeli 	__u64 dst_offset; /* offset in dest handle */
768e51012cSMikko Rapeli 	__u32 src_handle; /* dest handle to compute address from */
778e51012cSMikko Rapeli 	__u32 dst_handle; /* 0 if to command buffer */
788e51012cSMikko Rapeli 	__u32 reloc_type;
798e51012cSMikko Rapeli 	__u32 pad;
80f64122c1SDave Airlie };
81f64122c1SDave Airlie 
82f64122c1SDave Airlie struct drm_qxl_command {
83*6545135aSGerd Hoffmann 	__u64		command; /* void* */
84*6545135aSGerd Hoffmann 	__u64		relocs; /* struct drm_qxl_reloc* */
858e51012cSMikko Rapeli 	__u32		type;
868e51012cSMikko Rapeli 	__u32		command_size;
878e51012cSMikko Rapeli 	__u32		relocs_num;
888e51012cSMikko Rapeli 	__u32                pad;
89f64122c1SDave Airlie };
90f64122c1SDave Airlie 
91f64122c1SDave Airlie struct drm_qxl_execbuffer {
928e51012cSMikko Rapeli 	__u32		flags;		/* for future use */
938e51012cSMikko Rapeli 	__u32		commands_num;
94*6545135aSGerd Hoffmann 	__u64		commands;	/* struct drm_qxl_command* */
95f64122c1SDave Airlie };
96f64122c1SDave Airlie 
97f64122c1SDave Airlie struct drm_qxl_update_area {
988e51012cSMikko Rapeli 	__u32 handle;
998e51012cSMikko Rapeli 	__u32 top;
1008e51012cSMikko Rapeli 	__u32 left;
1018e51012cSMikko Rapeli 	__u32 bottom;
1028e51012cSMikko Rapeli 	__u32 right;
1038e51012cSMikko Rapeli 	__u32 pad;
104f64122c1SDave Airlie };
105f64122c1SDave Airlie 
106f64122c1SDave Airlie #define QXL_PARAM_NUM_SURFACES 1 /* rom->n_surfaces */
107f64122c1SDave Airlie #define QXL_PARAM_MAX_RELOCS 2
108f64122c1SDave Airlie struct drm_qxl_getparam {
1098e51012cSMikko Rapeli 	__u64 param;
1108e51012cSMikko Rapeli 	__u64 value;
111f64122c1SDave Airlie };
112f64122c1SDave Airlie 
113f64122c1SDave Airlie /* these are one bit values */
114f64122c1SDave Airlie struct drm_qxl_clientcap {
1158e51012cSMikko Rapeli 	__u32 index;
1168e51012cSMikko Rapeli 	__u32 pad;
117f64122c1SDave Airlie };
118f64122c1SDave Airlie 
119f64122c1SDave Airlie struct drm_qxl_alloc_surf {
1208e51012cSMikko Rapeli 	__u32 format;
1218e51012cSMikko Rapeli 	__u32 width;
1228e51012cSMikko Rapeli 	__u32 height;
1238e51012cSMikko Rapeli 	__s32 stride;
1248e51012cSMikko Rapeli 	__u32 handle;
1258e51012cSMikko Rapeli 	__u32 pad;
126f64122c1SDave Airlie };
127f64122c1SDave Airlie 
128f64122c1SDave Airlie #define DRM_IOCTL_QXL_ALLOC \
129f64122c1SDave Airlie 	DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC, struct drm_qxl_alloc)
130f64122c1SDave Airlie 
131f64122c1SDave Airlie #define DRM_IOCTL_QXL_MAP \
132f64122c1SDave Airlie 	DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_MAP, struct drm_qxl_map)
133f64122c1SDave Airlie 
134f64122c1SDave Airlie #define DRM_IOCTL_QXL_EXECBUFFER \
135f64122c1SDave Airlie 	DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_EXECBUFFER,\
136f64122c1SDave Airlie 		struct drm_qxl_execbuffer)
137f64122c1SDave Airlie 
138f64122c1SDave Airlie #define DRM_IOCTL_QXL_UPDATE_AREA \
139f64122c1SDave Airlie 	DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_UPDATE_AREA,\
140f64122c1SDave Airlie 		struct drm_qxl_update_area)
141f64122c1SDave Airlie 
142f64122c1SDave Airlie #define DRM_IOCTL_QXL_GETPARAM \
143f64122c1SDave Airlie 	DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_GETPARAM,\
144f64122c1SDave Airlie 		struct drm_qxl_getparam)
145f64122c1SDave Airlie 
146f64122c1SDave Airlie #define DRM_IOCTL_QXL_CLIENTCAP \
147f64122c1SDave Airlie 	DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP,\
148f64122c1SDave Airlie 		struct drm_qxl_clientcap)
149f64122c1SDave Airlie 
150f64122c1SDave Airlie #define DRM_IOCTL_QXL_ALLOC_SURF \
151f64122c1SDave Airlie 	DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF,\
152f64122c1SDave Airlie 		struct drm_qxl_alloc_surf)
153f64122c1SDave Airlie 
154485c40b4SEmil Velikov #if defined(__cplusplus)
155485c40b4SEmil Velikov }
156485c40b4SEmil Velikov #endif
157485c40b4SEmil Velikov 
158f64122c1SDave Airlie #endif
159