xref: /aosp_15_r20/external/igt-gpu-tools/include/drm-uapi/i915_drm.h (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker /*
2*d83cc019SAndroid Build Coastguard Worker  * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
3*d83cc019SAndroid Build Coastguard Worker  * All Rights Reserved.
4*d83cc019SAndroid Build Coastguard Worker  *
5*d83cc019SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*d83cc019SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the
7*d83cc019SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
8*d83cc019SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
9*d83cc019SAndroid Build Coastguard Worker  * distribute, sub license, and/or sell copies of the Software, and to
10*d83cc019SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
11*d83cc019SAndroid Build Coastguard Worker  * the following conditions:
12*d83cc019SAndroid Build Coastguard Worker  *
13*d83cc019SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
14*d83cc019SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial portions
15*d83cc019SAndroid Build Coastguard Worker  * of the Software.
16*d83cc019SAndroid Build Coastguard Worker  *
17*d83cc019SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*d83cc019SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19*d83cc019SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20*d83cc019SAndroid Build Coastguard Worker  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
21*d83cc019SAndroid Build Coastguard Worker  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22*d83cc019SAndroid Build Coastguard Worker  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23*d83cc019SAndroid Build Coastguard Worker  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24*d83cc019SAndroid Build Coastguard Worker  *
25*d83cc019SAndroid Build Coastguard Worker  */
26*d83cc019SAndroid Build Coastguard Worker 
27*d83cc019SAndroid Build Coastguard Worker #ifndef _I915_DRM_H_
28*d83cc019SAndroid Build Coastguard Worker #define _I915_DRM_H_
29*d83cc019SAndroid Build Coastguard Worker 
30*d83cc019SAndroid Build Coastguard Worker #include "drm.h"
31*d83cc019SAndroid Build Coastguard Worker 
32*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus)
33*d83cc019SAndroid Build Coastguard Worker extern "C" {
34*d83cc019SAndroid Build Coastguard Worker #endif
35*d83cc019SAndroid Build Coastguard Worker 
36*d83cc019SAndroid Build Coastguard Worker /* Please note that modifications to all structs defined here are
37*d83cc019SAndroid Build Coastguard Worker  * subject to backwards-compatibility constraints.
38*d83cc019SAndroid Build Coastguard Worker  */
39*d83cc019SAndroid Build Coastguard Worker 
40*d83cc019SAndroid Build Coastguard Worker /**
41*d83cc019SAndroid Build Coastguard Worker  * DOC: uevents generated by i915 on it's device node
42*d83cc019SAndroid Build Coastguard Worker  *
43*d83cc019SAndroid Build Coastguard Worker  * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch
44*d83cc019SAndroid Build Coastguard Worker  *	event from the gpu l3 cache. Additional information supplied is ROW,
45*d83cc019SAndroid Build Coastguard Worker  *	BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep
46*d83cc019SAndroid Build Coastguard Worker  *	track of these events and if a specific cache-line seems to have a
47*d83cc019SAndroid Build Coastguard Worker  *	persistent error remap it with the l3 remapping tool supplied in
48*d83cc019SAndroid Build Coastguard Worker  *	intel-gpu-tools.  The value supplied with the event is always 1.
49*d83cc019SAndroid Build Coastguard Worker  *
50*d83cc019SAndroid Build Coastguard Worker  * I915_ERROR_UEVENT - Generated upon error detection, currently only via
51*d83cc019SAndroid Build Coastguard Worker  *	hangcheck. The error detection event is a good indicator of when things
52*d83cc019SAndroid Build Coastguard Worker  *	began to go badly. The value supplied with the event is a 1 upon error
53*d83cc019SAndroid Build Coastguard Worker  *	detection, and a 0 upon reset completion, signifying no more error
54*d83cc019SAndroid Build Coastguard Worker  *	exists. NOTE: Disabling hangcheck or reset via module parameter will
55*d83cc019SAndroid Build Coastguard Worker  *	cause the related events to not be seen.
56*d83cc019SAndroid Build Coastguard Worker  *
57*d83cc019SAndroid Build Coastguard Worker  * I915_RESET_UEVENT - Event is generated just before an attempt to reset the
58*d83cc019SAndroid Build Coastguard Worker  *	the GPU. The value supplied with the event is always 1. NOTE: Disable
59*d83cc019SAndroid Build Coastguard Worker  *	reset via module parameter will cause this event to not be seen.
60*d83cc019SAndroid Build Coastguard Worker  */
61*d83cc019SAndroid Build Coastguard Worker #define I915_L3_PARITY_UEVENT		"L3_PARITY_ERROR"
62*d83cc019SAndroid Build Coastguard Worker #define I915_ERROR_UEVENT		"ERROR"
63*d83cc019SAndroid Build Coastguard Worker #define I915_RESET_UEVENT		"RESET"
64*d83cc019SAndroid Build Coastguard Worker 
65*d83cc019SAndroid Build Coastguard Worker /*
66*d83cc019SAndroid Build Coastguard Worker  * i915_user_extension: Base class for defining a chain of extensions
67*d83cc019SAndroid Build Coastguard Worker  *
68*d83cc019SAndroid Build Coastguard Worker  * Many interfaces need to grow over time. In most cases we can simply
69*d83cc019SAndroid Build Coastguard Worker  * extend the struct and have userspace pass in more data. Another option,
70*d83cc019SAndroid Build Coastguard Worker  * as demonstrated by Vulkan's approach to providing extensions for forward
71*d83cc019SAndroid Build Coastguard Worker  * and backward compatibility, is to use a list of optional structs to
72*d83cc019SAndroid Build Coastguard Worker  * provide those extra details.
73*d83cc019SAndroid Build Coastguard Worker  *
74*d83cc019SAndroid Build Coastguard Worker  * The key advantage to using an extension chain is that it allows us to
75*d83cc019SAndroid Build Coastguard Worker  * redefine the interface more easily than an ever growing struct of
76*d83cc019SAndroid Build Coastguard Worker  * increasing complexity, and for large parts of that interface to be
77*d83cc019SAndroid Build Coastguard Worker  * entirely optional. The downside is more pointer chasing; chasing across
78*d83cc019SAndroid Build Coastguard Worker  * the boundary with pointers encapsulated inside u64.
79*d83cc019SAndroid Build Coastguard Worker  */
80*d83cc019SAndroid Build Coastguard Worker struct i915_user_extension {
81*d83cc019SAndroid Build Coastguard Worker 	__u64 next_extension;
82*d83cc019SAndroid Build Coastguard Worker 	__u32 name;
83*d83cc019SAndroid Build Coastguard Worker 	__u32 flags; /* All undefined bits must be zero. */
84*d83cc019SAndroid Build Coastguard Worker 	__u32 rsvd[4]; /* Reserved for future use; must be zero. */
85*d83cc019SAndroid Build Coastguard Worker };
86*d83cc019SAndroid Build Coastguard Worker 
87*d83cc019SAndroid Build Coastguard Worker /*
88*d83cc019SAndroid Build Coastguard Worker  * MOCS indexes used for GPU surfaces, defining the cacheability of the
89*d83cc019SAndroid Build Coastguard Worker  * surface data and the coherency for this data wrt. CPU vs. GPU accesses.
90*d83cc019SAndroid Build Coastguard Worker  */
91*d83cc019SAndroid Build Coastguard Worker enum i915_mocs_table_index {
92*d83cc019SAndroid Build Coastguard Worker 	/*
93*d83cc019SAndroid Build Coastguard Worker 	 * Not cached anywhere, coherency between CPU and GPU accesses is
94*d83cc019SAndroid Build Coastguard Worker 	 * guaranteed.
95*d83cc019SAndroid Build Coastguard Worker 	 */
96*d83cc019SAndroid Build Coastguard Worker 	I915_MOCS_UNCACHED,
97*d83cc019SAndroid Build Coastguard Worker 	/*
98*d83cc019SAndroid Build Coastguard Worker 	 * Cacheability and coherency controlled by the kernel automatically
99*d83cc019SAndroid Build Coastguard Worker 	 * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current
100*d83cc019SAndroid Build Coastguard Worker 	 * usage of the surface (used for display scanout or not).
101*d83cc019SAndroid Build Coastguard Worker 	 */
102*d83cc019SAndroid Build Coastguard Worker 	I915_MOCS_PTE,
103*d83cc019SAndroid Build Coastguard Worker 	/*
104*d83cc019SAndroid Build Coastguard Worker 	 * Cached in all GPU caches available on the platform.
105*d83cc019SAndroid Build Coastguard Worker 	 * Coherency between CPU and GPU accesses to the surface is not
106*d83cc019SAndroid Build Coastguard Worker 	 * guaranteed without extra synchronization.
107*d83cc019SAndroid Build Coastguard Worker 	 */
108*d83cc019SAndroid Build Coastguard Worker 	I915_MOCS_CACHED,
109*d83cc019SAndroid Build Coastguard Worker };
110*d83cc019SAndroid Build Coastguard Worker 
111*d83cc019SAndroid Build Coastguard Worker /*
112*d83cc019SAndroid Build Coastguard Worker  * Different engines serve different roles, and there may be more than one
113*d83cc019SAndroid Build Coastguard Worker  * engine serving each role. enum drm_i915_gem_engine_class provides a
114*d83cc019SAndroid Build Coastguard Worker  * classification of the role of the engine, which may be used when requesting
115*d83cc019SAndroid Build Coastguard Worker  * operations to be performed on a certain subset of engines, or for providing
116*d83cc019SAndroid Build Coastguard Worker  * information about that group.
117*d83cc019SAndroid Build Coastguard Worker  */
118*d83cc019SAndroid Build Coastguard Worker enum drm_i915_gem_engine_class {
119*d83cc019SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_RENDER	= 0,
120*d83cc019SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_COPY		= 1,
121*d83cc019SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_VIDEO		= 2,
122*d83cc019SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_VIDEO_ENHANCE	= 3,
123*d83cc019SAndroid Build Coastguard Worker 
124*d83cc019SAndroid Build Coastguard Worker 	/* should be kept compact */
125*d83cc019SAndroid Build Coastguard Worker 
126*d83cc019SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_INVALID	= -1
127*d83cc019SAndroid Build Coastguard Worker };
128*d83cc019SAndroid Build Coastguard Worker 
129*d83cc019SAndroid Build Coastguard Worker /*
130*d83cc019SAndroid Build Coastguard Worker  * There may be more than one engine fulfilling any role within the system.
131*d83cc019SAndroid Build Coastguard Worker  * Each engine of a class is given a unique instance number and therefore
132*d83cc019SAndroid Build Coastguard Worker  * any engine can be specified by its class:instance tuplet. APIs that allow
133*d83cc019SAndroid Build Coastguard Worker  * access to any engine in the system will use struct i915_engine_class_instance
134*d83cc019SAndroid Build Coastguard Worker  * for this identification.
135*d83cc019SAndroid Build Coastguard Worker  */
136*d83cc019SAndroid Build Coastguard Worker struct i915_engine_class_instance {
137*d83cc019SAndroid Build Coastguard Worker 	__u16 engine_class; /* see enum drm_i915_gem_engine_class */
138*d83cc019SAndroid Build Coastguard Worker 	__u16 engine_instance;
139*d83cc019SAndroid Build Coastguard Worker #define I915_ENGINE_CLASS_INVALID_NONE -1
140*d83cc019SAndroid Build Coastguard Worker #define I915_ENGINE_CLASS_INVALID_VIRTUAL -2
141*d83cc019SAndroid Build Coastguard Worker };
142*d83cc019SAndroid Build Coastguard Worker 
143*d83cc019SAndroid Build Coastguard Worker /**
144*d83cc019SAndroid Build Coastguard Worker  * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915
145*d83cc019SAndroid Build Coastguard Worker  *
146*d83cc019SAndroid Build Coastguard Worker  */
147*d83cc019SAndroid Build Coastguard Worker 
148*d83cc019SAndroid Build Coastguard Worker enum drm_i915_pmu_engine_sample {
149*d83cc019SAndroid Build Coastguard Worker 	I915_SAMPLE_BUSY = 0,
150*d83cc019SAndroid Build Coastguard Worker 	I915_SAMPLE_WAIT = 1,
151*d83cc019SAndroid Build Coastguard Worker 	I915_SAMPLE_SEMA = 2
152*d83cc019SAndroid Build Coastguard Worker };
153*d83cc019SAndroid Build Coastguard Worker 
154*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_BITS (4)
155*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_MASK (0xf)
156*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_INSTANCE_BITS (8)
157*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_CLASS_SHIFT \
158*d83cc019SAndroid Build Coastguard Worker 	(I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS)
159*d83cc019SAndroid Build Coastguard Worker 
160*d83cc019SAndroid Build Coastguard Worker #define __I915_PMU_ENGINE(class, instance, sample) \
161*d83cc019SAndroid Build Coastguard Worker 	((class) << I915_PMU_CLASS_SHIFT | \
162*d83cc019SAndroid Build Coastguard Worker 	(instance) << I915_PMU_SAMPLE_BITS | \
163*d83cc019SAndroid Build Coastguard Worker 	(sample))
164*d83cc019SAndroid Build Coastguard Worker 
165*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_BUSY(class, instance) \
166*d83cc019SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY)
167*d83cc019SAndroid Build Coastguard Worker 
168*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_WAIT(class, instance) \
169*d83cc019SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT)
170*d83cc019SAndroid Build Coastguard Worker 
171*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_SEMA(class, instance) \
172*d83cc019SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA)
173*d83cc019SAndroid Build Coastguard Worker 
174*d83cc019SAndroid Build Coastguard Worker #define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x))
175*d83cc019SAndroid Build Coastguard Worker 
176*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_ACTUAL_FREQUENCY	__I915_PMU_OTHER(0)
177*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_REQUESTED_FREQUENCY	__I915_PMU_OTHER(1)
178*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_INTERRUPTS		__I915_PMU_OTHER(2)
179*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_RC6_RESIDENCY		__I915_PMU_OTHER(3)
180*d83cc019SAndroid Build Coastguard Worker 
181*d83cc019SAndroid Build Coastguard Worker #define I915_PMU_LAST I915_PMU_RC6_RESIDENCY
182*d83cc019SAndroid Build Coastguard Worker 
183*d83cc019SAndroid Build Coastguard Worker /* Each region is a minimum of 16k, and there are at most 255 of them.
184*d83cc019SAndroid Build Coastguard Worker  */
185*d83cc019SAndroid Build Coastguard Worker #define I915_NR_TEX_REGIONS 255	/* table size 2k - maximum due to use
186*d83cc019SAndroid Build Coastguard Worker 				 * of chars for next/prev indices */
187*d83cc019SAndroid Build Coastguard Worker #define I915_LOG_MIN_TEX_REGION_SIZE 14
188*d83cc019SAndroid Build Coastguard Worker 
189*d83cc019SAndroid Build Coastguard Worker typedef struct _drm_i915_init {
190*d83cc019SAndroid Build Coastguard Worker 	enum {
191*d83cc019SAndroid Build Coastguard Worker 		I915_INIT_DMA = 0x01,
192*d83cc019SAndroid Build Coastguard Worker 		I915_CLEANUP_DMA = 0x02,
193*d83cc019SAndroid Build Coastguard Worker 		I915_RESUME_DMA = 0x03
194*d83cc019SAndroid Build Coastguard Worker 	} func;
195*d83cc019SAndroid Build Coastguard Worker 	unsigned int mmio_offset;
196*d83cc019SAndroid Build Coastguard Worker 	int sarea_priv_offset;
197*d83cc019SAndroid Build Coastguard Worker 	unsigned int ring_start;
198*d83cc019SAndroid Build Coastguard Worker 	unsigned int ring_end;
199*d83cc019SAndroid Build Coastguard Worker 	unsigned int ring_size;
200*d83cc019SAndroid Build Coastguard Worker 	unsigned int front_offset;
201*d83cc019SAndroid Build Coastguard Worker 	unsigned int back_offset;
202*d83cc019SAndroid Build Coastguard Worker 	unsigned int depth_offset;
203*d83cc019SAndroid Build Coastguard Worker 	unsigned int w;
204*d83cc019SAndroid Build Coastguard Worker 	unsigned int h;
205*d83cc019SAndroid Build Coastguard Worker 	unsigned int pitch;
206*d83cc019SAndroid Build Coastguard Worker 	unsigned int pitch_bits;
207*d83cc019SAndroid Build Coastguard Worker 	unsigned int back_pitch;
208*d83cc019SAndroid Build Coastguard Worker 	unsigned int depth_pitch;
209*d83cc019SAndroid Build Coastguard Worker 	unsigned int cpp;
210*d83cc019SAndroid Build Coastguard Worker 	unsigned int chipset;
211*d83cc019SAndroid Build Coastguard Worker } drm_i915_init_t;
212*d83cc019SAndroid Build Coastguard Worker 
213*d83cc019SAndroid Build Coastguard Worker typedef struct _drm_i915_sarea {
214*d83cc019SAndroid Build Coastguard Worker 	struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
215*d83cc019SAndroid Build Coastguard Worker 	int last_upload;	/* last time texture was uploaded */
216*d83cc019SAndroid Build Coastguard Worker 	int last_enqueue;	/* last time a buffer was enqueued */
217*d83cc019SAndroid Build Coastguard Worker 	int last_dispatch;	/* age of the most recently dispatched buffer */
218*d83cc019SAndroid Build Coastguard Worker 	int ctxOwner;		/* last context to upload state */
219*d83cc019SAndroid Build Coastguard Worker 	int texAge;
220*d83cc019SAndroid Build Coastguard Worker 	int pf_enabled;		/* is pageflipping allowed? */
221*d83cc019SAndroid Build Coastguard Worker 	int pf_active;
222*d83cc019SAndroid Build Coastguard Worker 	int pf_current_page;	/* which buffer is being displayed? */
223*d83cc019SAndroid Build Coastguard Worker 	int perf_boxes;		/* performance boxes to be displayed */
224*d83cc019SAndroid Build Coastguard Worker 	int width, height;      /* screen size in pixels */
225*d83cc019SAndroid Build Coastguard Worker 
226*d83cc019SAndroid Build Coastguard Worker 	drm_handle_t front_handle;
227*d83cc019SAndroid Build Coastguard Worker 	int front_offset;
228*d83cc019SAndroid Build Coastguard Worker 	int front_size;
229*d83cc019SAndroid Build Coastguard Worker 
230*d83cc019SAndroid Build Coastguard Worker 	drm_handle_t back_handle;
231*d83cc019SAndroid Build Coastguard Worker 	int back_offset;
232*d83cc019SAndroid Build Coastguard Worker 	int back_size;
233*d83cc019SAndroid Build Coastguard Worker 
234*d83cc019SAndroid Build Coastguard Worker 	drm_handle_t depth_handle;
235*d83cc019SAndroid Build Coastguard Worker 	int depth_offset;
236*d83cc019SAndroid Build Coastguard Worker 	int depth_size;
237*d83cc019SAndroid Build Coastguard Worker 
238*d83cc019SAndroid Build Coastguard Worker 	drm_handle_t tex_handle;
239*d83cc019SAndroid Build Coastguard Worker 	int tex_offset;
240*d83cc019SAndroid Build Coastguard Worker 	int tex_size;
241*d83cc019SAndroid Build Coastguard Worker 	int log_tex_granularity;
242*d83cc019SAndroid Build Coastguard Worker 	int pitch;
243*d83cc019SAndroid Build Coastguard Worker 	int rotation;           /* 0, 90, 180 or 270 */
244*d83cc019SAndroid Build Coastguard Worker 	int rotated_offset;
245*d83cc019SAndroid Build Coastguard Worker 	int rotated_size;
246*d83cc019SAndroid Build Coastguard Worker 	int rotated_pitch;
247*d83cc019SAndroid Build Coastguard Worker 	int virtualX, virtualY;
248*d83cc019SAndroid Build Coastguard Worker 
249*d83cc019SAndroid Build Coastguard Worker 	unsigned int front_tiled;
250*d83cc019SAndroid Build Coastguard Worker 	unsigned int back_tiled;
251*d83cc019SAndroid Build Coastguard Worker 	unsigned int depth_tiled;
252*d83cc019SAndroid Build Coastguard Worker 	unsigned int rotated_tiled;
253*d83cc019SAndroid Build Coastguard Worker 	unsigned int rotated2_tiled;
254*d83cc019SAndroid Build Coastguard Worker 
255*d83cc019SAndroid Build Coastguard Worker 	int pipeA_x;
256*d83cc019SAndroid Build Coastguard Worker 	int pipeA_y;
257*d83cc019SAndroid Build Coastguard Worker 	int pipeA_w;
258*d83cc019SAndroid Build Coastguard Worker 	int pipeA_h;
259*d83cc019SAndroid Build Coastguard Worker 	int pipeB_x;
260*d83cc019SAndroid Build Coastguard Worker 	int pipeB_y;
261*d83cc019SAndroid Build Coastguard Worker 	int pipeB_w;
262*d83cc019SAndroid Build Coastguard Worker 	int pipeB_h;
263*d83cc019SAndroid Build Coastguard Worker 
264*d83cc019SAndroid Build Coastguard Worker 	/* fill out some space for old userspace triple buffer */
265*d83cc019SAndroid Build Coastguard Worker 	drm_handle_t unused_handle;
266*d83cc019SAndroid Build Coastguard Worker 	__u32 unused1, unused2, unused3;
267*d83cc019SAndroid Build Coastguard Worker 
268*d83cc019SAndroid Build Coastguard Worker 	/* buffer object handles for static buffers. May change
269*d83cc019SAndroid Build Coastguard Worker 	 * over the lifetime of the client.
270*d83cc019SAndroid Build Coastguard Worker 	 */
271*d83cc019SAndroid Build Coastguard Worker 	__u32 front_bo_handle;
272*d83cc019SAndroid Build Coastguard Worker 	__u32 back_bo_handle;
273*d83cc019SAndroid Build Coastguard Worker 	__u32 unused_bo_handle;
274*d83cc019SAndroid Build Coastguard Worker 	__u32 depth_bo_handle;
275*d83cc019SAndroid Build Coastguard Worker 
276*d83cc019SAndroid Build Coastguard Worker } drm_i915_sarea_t;
277*d83cc019SAndroid Build Coastguard Worker 
278*d83cc019SAndroid Build Coastguard Worker /* due to userspace building against these headers we need some compat here */
279*d83cc019SAndroid Build Coastguard Worker #define planeA_x pipeA_x
280*d83cc019SAndroid Build Coastguard Worker #define planeA_y pipeA_y
281*d83cc019SAndroid Build Coastguard Worker #define planeA_w pipeA_w
282*d83cc019SAndroid Build Coastguard Worker #define planeA_h pipeA_h
283*d83cc019SAndroid Build Coastguard Worker #define planeB_x pipeB_x
284*d83cc019SAndroid Build Coastguard Worker #define planeB_y pipeB_y
285*d83cc019SAndroid Build Coastguard Worker #define planeB_w pipeB_w
286*d83cc019SAndroid Build Coastguard Worker #define planeB_h pipeB_h
287*d83cc019SAndroid Build Coastguard Worker 
288*d83cc019SAndroid Build Coastguard Worker /* Flags for perf_boxes
289*d83cc019SAndroid Build Coastguard Worker  */
290*d83cc019SAndroid Build Coastguard Worker #define I915_BOX_RING_EMPTY    0x1
291*d83cc019SAndroid Build Coastguard Worker #define I915_BOX_FLIP          0x2
292*d83cc019SAndroid Build Coastguard Worker #define I915_BOX_WAIT          0x4
293*d83cc019SAndroid Build Coastguard Worker #define I915_BOX_TEXTURE_LOAD  0x8
294*d83cc019SAndroid Build Coastguard Worker #define I915_BOX_LOST_CONTEXT  0x10
295*d83cc019SAndroid Build Coastguard Worker 
296*d83cc019SAndroid Build Coastguard Worker /*
297*d83cc019SAndroid Build Coastguard Worker  * i915 specific ioctls.
298*d83cc019SAndroid Build Coastguard Worker  *
299*d83cc019SAndroid Build Coastguard Worker  * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie
300*d83cc019SAndroid Build Coastguard Worker  * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset
301*d83cc019SAndroid Build Coastguard Worker  * against DRM_COMMAND_BASE and should be between [0x0, 0x60).
302*d83cc019SAndroid Build Coastguard Worker  */
303*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_INIT		0x00
304*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_FLUSH		0x01
305*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_FLIP		0x02
306*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_BATCHBUFFER	0x03
307*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_IRQ_EMIT	0x04
308*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_IRQ_WAIT	0x05
309*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GETPARAM	0x06
310*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_SETPARAM	0x07
311*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_ALLOC		0x08
312*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_FREE		0x09
313*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_INIT_HEAP	0x0a
314*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_CMDBUFFER	0x0b
315*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_DESTROY_HEAP	0x0c
316*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_SET_VBLANK_PIPE	0x0d
317*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GET_VBLANK_PIPE	0x0e
318*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_VBLANK_SWAP	0x0f
319*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_HWS_ADDR	0x11
320*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_INIT	0x13
321*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER	0x14
322*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_PIN	0x15
323*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_UNPIN	0x16
324*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_BUSY	0x17
325*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_THROTTLE	0x18
326*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_ENTERVT	0x19
327*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_LEAVEVT	0x1a
328*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_CREATE	0x1b
329*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_PREAD	0x1c
330*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_PWRITE	0x1d
331*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_MMAP	0x1e
332*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_DOMAIN	0x1f
333*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_SW_FINISH	0x20
334*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_TILING	0x21
335*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_TILING	0x22
336*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_APERTURE 0x23
337*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_MMAP_GTT	0x24
338*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GET_PIPE_FROM_CRTC_ID	0x25
339*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_MADVISE	0x26
340*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_OVERLAY_PUT_IMAGE	0x27
341*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_OVERLAY_ATTRS	0x28
342*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER2	0x29
343*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER2_WR	DRM_I915_GEM_EXECBUFFER2
344*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GET_SPRITE_COLORKEY	0x2a
345*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_SET_SPRITE_COLORKEY	0x2b
346*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_WAIT	0x2c
347*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_CREATE	0x2d
348*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_DESTROY	0x2e
349*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_CACHING	0x2f
350*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_CACHING	0x30
351*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_REG_READ		0x31
352*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GET_RESET_STATS	0x32
353*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_USERPTR		0x33
354*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_GETPARAM	0x34
355*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_SETPARAM	0x35
356*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_PERF_OPEN		0x36
357*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_PERF_ADD_CONFIG	0x37
358*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_PERF_REMOVE_CONFIG	0x38
359*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_QUERY			0x39
360*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_VM_CREATE		0x3a
361*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_GEM_VM_DESTROY		0x3b
362*d83cc019SAndroid Build Coastguard Worker /* Must be kept compact -- no holes */
363*d83cc019SAndroid Build Coastguard Worker 
364*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
365*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
366*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FLIP		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
367*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_BATCHBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
368*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_IRQ_EMIT         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
369*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_IRQ_WAIT         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
370*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GETPARAM         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
371*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_SETPARAM         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
372*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_ALLOC            DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
373*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FREE             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
374*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_INIT_HEAP        DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
375*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_CMDBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
376*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_DESTROY_HEAP	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
377*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_SET_VBLANK_PIPE	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
378*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GET_VBLANK_PIPE	DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
379*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_VBLANK_SWAP	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
380*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_HWS_ADDR		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init)
381*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_INIT		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
382*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_EXECBUFFER	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
383*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_EXECBUFFER2	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
384*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_EXECBUFFER2_WR	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2_WR, struct drm_i915_gem_execbuffer2)
385*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PIN		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
386*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_UNPIN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
387*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_BUSY		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
388*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_SET_CACHING		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_SET_CACHING, struct drm_i915_gem_caching)
389*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_GET_CACHING		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_CACHING, struct drm_i915_gem_caching)
390*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_THROTTLE	DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
391*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_ENTERVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
392*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_LEAVEVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
393*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CREATE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
394*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PREAD	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
395*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PWRITE	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
396*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MMAP		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
397*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MMAP_GTT	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt)
398*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_SET_DOMAIN	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain)
399*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_SW_FINISH	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish)
400*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_SET_TILING	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
401*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_GET_TILING	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
402*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_GET_APERTURE	DRM_IOR  (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
403*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id)
404*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MADVISE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise)
405*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image)
406*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_OVERLAY_ATTRS	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs)
407*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
408*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
409*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_WAIT		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait)
410*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CONTEXT_CREATE	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)
411*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create_ext)
412*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)
413*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_REG_READ			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
414*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GET_RESET_STATS		DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats)
415*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_USERPTR			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr)
416*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param)
417*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param)
418*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_PERF_OPEN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)
419*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_PERF_ADD_CONFIG	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
420*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
421*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_QUERY			DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
422*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_VM_CREATE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_VM_CREATE, struct drm_i915_gem_vm_control)
423*d83cc019SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_VM_DESTROY	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_VM_DESTROY, struct drm_i915_gem_vm_control)
424*d83cc019SAndroid Build Coastguard Worker 
425*d83cc019SAndroid Build Coastguard Worker /* Allow drivers to submit batchbuffers directly to hardware, relying
426*d83cc019SAndroid Build Coastguard Worker  * on the security mechanisms provided by hardware.
427*d83cc019SAndroid Build Coastguard Worker  */
428*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_batchbuffer {
429*d83cc019SAndroid Build Coastguard Worker 	int start;		/* agp offset */
430*d83cc019SAndroid Build Coastguard Worker 	int used;		/* nr bytes in use */
431*d83cc019SAndroid Build Coastguard Worker 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
432*d83cc019SAndroid Build Coastguard Worker 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
433*d83cc019SAndroid Build Coastguard Worker 	int num_cliprects;	/* mulitpass with multiple cliprects? */
434*d83cc019SAndroid Build Coastguard Worker 	struct drm_clip_rect *cliprects;	/* pointer to userspace cliprects */
435*d83cc019SAndroid Build Coastguard Worker } drm_i915_batchbuffer_t;
436*d83cc019SAndroid Build Coastguard Worker 
437*d83cc019SAndroid Build Coastguard Worker /* As above, but pass a pointer to userspace buffer which can be
438*d83cc019SAndroid Build Coastguard Worker  * validated by the kernel prior to sending to hardware.
439*d83cc019SAndroid Build Coastguard Worker  */
440*d83cc019SAndroid Build Coastguard Worker typedef struct _drm_i915_cmdbuffer {
441*d83cc019SAndroid Build Coastguard Worker 	char *buf;	/* pointer to userspace command buffer */
442*d83cc019SAndroid Build Coastguard Worker 	int sz;			/* nr bytes in buf */
443*d83cc019SAndroid Build Coastguard Worker 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
444*d83cc019SAndroid Build Coastguard Worker 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
445*d83cc019SAndroid Build Coastguard Worker 	int num_cliprects;	/* mulitpass with multiple cliprects? */
446*d83cc019SAndroid Build Coastguard Worker 	struct drm_clip_rect *cliprects;	/* pointer to userspace cliprects */
447*d83cc019SAndroid Build Coastguard Worker } drm_i915_cmdbuffer_t;
448*d83cc019SAndroid Build Coastguard Worker 
449*d83cc019SAndroid Build Coastguard Worker /* Userspace can request & wait on irq's:
450*d83cc019SAndroid Build Coastguard Worker  */
451*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_irq_emit {
452*d83cc019SAndroid Build Coastguard Worker 	int *irq_seq;
453*d83cc019SAndroid Build Coastguard Worker } drm_i915_irq_emit_t;
454*d83cc019SAndroid Build Coastguard Worker 
455*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_irq_wait {
456*d83cc019SAndroid Build Coastguard Worker 	int irq_seq;
457*d83cc019SAndroid Build Coastguard Worker } drm_i915_irq_wait_t;
458*d83cc019SAndroid Build Coastguard Worker 
459*d83cc019SAndroid Build Coastguard Worker /*
460*d83cc019SAndroid Build Coastguard Worker  * Different modes of per-process Graphics Translation Table,
461*d83cc019SAndroid Build Coastguard Worker  * see I915_PARAM_HAS_ALIASING_PPGTT
462*d83cc019SAndroid Build Coastguard Worker  */
463*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_NONE	0
464*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_ALIASING	1
465*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_FULL	2
466*d83cc019SAndroid Build Coastguard Worker 
467*d83cc019SAndroid Build Coastguard Worker /* Ioctl to query kernel params:
468*d83cc019SAndroid Build Coastguard Worker  */
469*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_IRQ_ACTIVE            1
470*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_ALLOW_BATCHBUFFER     2
471*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_LAST_DISPATCH         3
472*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_CHIPSET_ID            4
473*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GEM               5
474*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_NUM_FENCES_AVAIL      6
475*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_OVERLAY           7
476*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PAGEFLIPPING	 8
477*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXECBUF2          9
478*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BSD		 10
479*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BLT		 11
480*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RELAXED_FENCING	 12
481*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_COHERENT_RINGS	 13
482*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_CONSTANTS	 14
483*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RELAXED_DELTA	 15
484*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GEN7_SOL_RESET	 16
485*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_LLC     	 	 17
486*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_ALIASING_PPGTT	 18
487*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_WAIT_TIMEOUT	 19
488*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SEMAPHORES	 20
489*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PRIME_VMAP_FLUSH	 21
490*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_VEBOX		 22
491*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SECURE_BATCHES	 23
492*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PINNED_BATCHES	 24
493*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_NO_RELOC	 25
494*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_HANDLE_LUT   26
495*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_WT     	 	 27
496*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_CMD_PARSER_VERSION	 28
497*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_COHERENT_PHYS_GTT 29
498*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_VERSION          30
499*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BSD2		 31
500*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_REVISION              32
501*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_SUBSLICE_TOTAL	 33
502*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_EU_TOTAL		 34
503*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GPU_RESET	 35
504*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RESOURCE_STREAMER 36
505*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_SOFTPIN	 37
506*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_POOLED_EU	 38
507*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_MIN_EU_IN_POOL	 39
508*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_GTT_VERSION	 40
509*d83cc019SAndroid Build Coastguard Worker 
510*d83cc019SAndroid Build Coastguard Worker /*
511*d83cc019SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution
512*d83cc019SAndroid Build Coastguard Worker  * priorities and the driver will attempt to execute batches in priority order.
513*d83cc019SAndroid Build Coastguard Worker  * The param returns a capability bitmask, nonzero implies that the scheduler
514*d83cc019SAndroid Build Coastguard Worker  * is enabled, with different features present according to the mask.
515*d83cc019SAndroid Build Coastguard Worker  *
516*d83cc019SAndroid Build Coastguard Worker  * The initial priority for each batch is supplied by the context and is
517*d83cc019SAndroid Build Coastguard Worker  * controlled via I915_CONTEXT_PARAM_PRIORITY.
518*d83cc019SAndroid Build Coastguard Worker  */
519*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SCHEDULER	 41
520*d83cc019SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_ENABLED	(1ul << 0)
521*d83cc019SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_PRIORITY	(1ul << 1)
522*d83cc019SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_PREEMPTION	(1ul << 2)
523*d83cc019SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_SEMAPHORES	(1ul << 3)
524*d83cc019SAndroid Build Coastguard Worker 
525*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HUC_STATUS		 42
526*d83cc019SAndroid Build Coastguard Worker 
527*d83cc019SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of
528*d83cc019SAndroid Build Coastguard Worker  * synchronisation with implicit fencing on individual objects.
529*d83cc019SAndroid Build Coastguard Worker  * See EXEC_OBJECT_ASYNC.
530*d83cc019SAndroid Build Coastguard Worker  */
531*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_ASYNC	 43
532*d83cc019SAndroid Build Coastguard Worker 
533*d83cc019SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support -
534*d83cc019SAndroid Build Coastguard Worker  * both being able to pass in a sync_file fd to wait upon before executing,
535*d83cc019SAndroid Build Coastguard Worker  * and being able to return a new sync_file fd that is signaled when the
536*d83cc019SAndroid Build Coastguard Worker  * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT.
537*d83cc019SAndroid Build Coastguard Worker  */
538*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_FENCE	 44
539*d83cc019SAndroid Build Coastguard Worker 
540*d83cc019SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture
541*d83cc019SAndroid Build Coastguard Worker  * user specified bufffers for post-mortem debugging of GPU hangs. See
542*d83cc019SAndroid Build Coastguard Worker  * EXEC_OBJECT_CAPTURE.
543*d83cc019SAndroid Build Coastguard Worker  */
544*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_CAPTURE	 45
545*d83cc019SAndroid Build Coastguard Worker 
546*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_SLICE_MASK		 46
547*d83cc019SAndroid Build Coastguard Worker 
548*d83cc019SAndroid Build Coastguard Worker /* Assuming it's uniform for each slice, this queries the mask of subslices
549*d83cc019SAndroid Build Coastguard Worker  * per-slice for this system.
550*d83cc019SAndroid Build Coastguard Worker  */
551*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_SUBSLICE_MASK	 47
552*d83cc019SAndroid Build Coastguard Worker 
553*d83cc019SAndroid Build Coastguard Worker /*
554*d83cc019SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer
555*d83cc019SAndroid Build Coastguard Worker  * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST.
556*d83cc019SAndroid Build Coastguard Worker  */
557*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_BATCH_FIRST	 48
558*d83cc019SAndroid Build Coastguard Worker 
559*d83cc019SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of
560*d83cc019SAndroid Build Coastguard Worker  * drm_i915_gem_exec_fence structures.  See I915_EXEC_FENCE_ARRAY.
561*d83cc019SAndroid Build Coastguard Worker  */
562*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_FENCE_ARRAY  49
563*d83cc019SAndroid Build Coastguard Worker 
564*d83cc019SAndroid Build Coastguard Worker /*
565*d83cc019SAndroid Build Coastguard Worker  * Query whether every context (both per-file default and user created) is
566*d83cc019SAndroid Build Coastguard Worker  * isolated (insofar as HW supports). If this parameter is not true, then
567*d83cc019SAndroid Build Coastguard Worker  * freshly created contexts may inherit values from an existing context,
568*d83cc019SAndroid Build Coastguard Worker  * rather than default HW values. If true, it also ensures (insofar as HW
569*d83cc019SAndroid Build Coastguard Worker  * supports) that all state set by this context will not leak to any other
570*d83cc019SAndroid Build Coastguard Worker  * context.
571*d83cc019SAndroid Build Coastguard Worker  *
572*d83cc019SAndroid Build Coastguard Worker  * As not every engine across every gen support contexts, the returned
573*d83cc019SAndroid Build Coastguard Worker  * value reports the support of context isolation for individual engines by
574*d83cc019SAndroid Build Coastguard Worker  * returning a bitmask of each engine class set to true if that class supports
575*d83cc019SAndroid Build Coastguard Worker  * isolation.
576*d83cc019SAndroid Build Coastguard Worker  */
577*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_CONTEXT_ISOLATION 50
578*d83cc019SAndroid Build Coastguard Worker 
579*d83cc019SAndroid Build Coastguard Worker /* Frequency of the command streamer timestamps given by the *_TIMESTAMP
580*d83cc019SAndroid Build Coastguard Worker  * registers. This used to be fixed per platform but from CNL onwards, this
581*d83cc019SAndroid Build Coastguard Worker  * might vary depending on the parts.
582*d83cc019SAndroid Build Coastguard Worker  */
583*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
584*d83cc019SAndroid Build Coastguard Worker 
585*d83cc019SAndroid Build Coastguard Worker /*
586*d83cc019SAndroid Build Coastguard Worker  * Once upon a time we supposed that writes through the GGTT would be
587*d83cc019SAndroid Build Coastguard Worker  * immediately in physical memory (once flushed out of the CPU path). However,
588*d83cc019SAndroid Build Coastguard Worker  * on a few different processors and chipsets, this is not necessarily the case
589*d83cc019SAndroid Build Coastguard Worker  * as the writes appear to be buffered internally. Thus a read of the backing
590*d83cc019SAndroid Build Coastguard Worker  * storage (physical memory) via a different path (with different physical tags
591*d83cc019SAndroid Build Coastguard Worker  * to the indirect write via the GGTT) will see stale values from before
592*d83cc019SAndroid Build Coastguard Worker  * the GGTT write. Inside the kernel, we can for the most part keep track of
593*d83cc019SAndroid Build Coastguard Worker  * the different read/write domains in use (e.g. set-domain), but the assumption
594*d83cc019SAndroid Build Coastguard Worker  * of coherency is baked into the ABI, hence reporting its true state in this
595*d83cc019SAndroid Build Coastguard Worker  * parameter.
596*d83cc019SAndroid Build Coastguard Worker  *
597*d83cc019SAndroid Build Coastguard Worker  * Reports true when writes via mmap_gtt are immediately visible following an
598*d83cc019SAndroid Build Coastguard Worker  * lfence to flush the WCB.
599*d83cc019SAndroid Build Coastguard Worker  *
600*d83cc019SAndroid Build Coastguard Worker  * Reports false when writes via mmap_gtt are indeterminately delayed in an in
601*d83cc019SAndroid Build Coastguard Worker  * internal buffer and are _not_ immediately visible to third parties accessing
602*d83cc019SAndroid Build Coastguard Worker  * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC
603*d83cc019SAndroid Build Coastguard Worker  * communications channel when reporting false is strongly disadvised.
604*d83cc019SAndroid Build Coastguard Worker  */
605*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_GTT_COHERENT	52
606*d83cc019SAndroid Build Coastguard Worker 
607*d83cc019SAndroid Build Coastguard Worker /*
608*d83cc019SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports coordination of parallel
609*d83cc019SAndroid Build Coastguard Worker  * execution through use of explicit fence support.
610*d83cc019SAndroid Build Coastguard Worker  * See I915_EXEC_FENCE_OUT and I915_EXEC_FENCE_SUBMIT.
611*d83cc019SAndroid Build Coastguard Worker  */
612*d83cc019SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53
613*d83cc019SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
614*d83cc019SAndroid Build Coastguard Worker 
615*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_getparam {
616*d83cc019SAndroid Build Coastguard Worker 	__s32 param;
617*d83cc019SAndroid Build Coastguard Worker 	/*
618*d83cc019SAndroid Build Coastguard Worker 	 * WARNING: Using pointers instead of fixed-size u64 means we need to write
619*d83cc019SAndroid Build Coastguard Worker 	 * compat32 code. Don't repeat this mistake.
620*d83cc019SAndroid Build Coastguard Worker 	 */
621*d83cc019SAndroid Build Coastguard Worker 	int *value;
622*d83cc019SAndroid Build Coastguard Worker } drm_i915_getparam_t;
623*d83cc019SAndroid Build Coastguard Worker 
624*d83cc019SAndroid Build Coastguard Worker /* Ioctl to set kernel params:
625*d83cc019SAndroid Build Coastguard Worker  */
626*d83cc019SAndroid Build Coastguard Worker #define I915_SETPARAM_USE_MI_BATCHBUFFER_START            1
627*d83cc019SAndroid Build Coastguard Worker #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY             2
628*d83cc019SAndroid Build Coastguard Worker #define I915_SETPARAM_ALLOW_BATCHBUFFER                   3
629*d83cc019SAndroid Build Coastguard Worker #define I915_SETPARAM_NUM_USED_FENCES                     4
630*d83cc019SAndroid Build Coastguard Worker /* Must be kept compact -- no holes */
631*d83cc019SAndroid Build Coastguard Worker 
632*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_setparam {
633*d83cc019SAndroid Build Coastguard Worker 	int param;
634*d83cc019SAndroid Build Coastguard Worker 	int value;
635*d83cc019SAndroid Build Coastguard Worker } drm_i915_setparam_t;
636*d83cc019SAndroid Build Coastguard Worker 
637*d83cc019SAndroid Build Coastguard Worker /* A memory manager for regions of shared memory:
638*d83cc019SAndroid Build Coastguard Worker  */
639*d83cc019SAndroid Build Coastguard Worker #define I915_MEM_REGION_AGP 1
640*d83cc019SAndroid Build Coastguard Worker 
641*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_mem_alloc {
642*d83cc019SAndroid Build Coastguard Worker 	int region;
643*d83cc019SAndroid Build Coastguard Worker 	int alignment;
644*d83cc019SAndroid Build Coastguard Worker 	int size;
645*d83cc019SAndroid Build Coastguard Worker 	int *region_offset;	/* offset from start of fb or agp */
646*d83cc019SAndroid Build Coastguard Worker } drm_i915_mem_alloc_t;
647*d83cc019SAndroid Build Coastguard Worker 
648*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_mem_free {
649*d83cc019SAndroid Build Coastguard Worker 	int region;
650*d83cc019SAndroid Build Coastguard Worker 	int region_offset;
651*d83cc019SAndroid Build Coastguard Worker } drm_i915_mem_free_t;
652*d83cc019SAndroid Build Coastguard Worker 
653*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_mem_init_heap {
654*d83cc019SAndroid Build Coastguard Worker 	int region;
655*d83cc019SAndroid Build Coastguard Worker 	int size;
656*d83cc019SAndroid Build Coastguard Worker 	int start;
657*d83cc019SAndroid Build Coastguard Worker } drm_i915_mem_init_heap_t;
658*d83cc019SAndroid Build Coastguard Worker 
659*d83cc019SAndroid Build Coastguard Worker /* Allow memory manager to be torn down and re-initialized (eg on
660*d83cc019SAndroid Build Coastguard Worker  * rotate):
661*d83cc019SAndroid Build Coastguard Worker  */
662*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_mem_destroy_heap {
663*d83cc019SAndroid Build Coastguard Worker 	int region;
664*d83cc019SAndroid Build Coastguard Worker } drm_i915_mem_destroy_heap_t;
665*d83cc019SAndroid Build Coastguard Worker 
666*d83cc019SAndroid Build Coastguard Worker /* Allow X server to configure which pipes to monitor for vblank signals
667*d83cc019SAndroid Build Coastguard Worker  */
668*d83cc019SAndroid Build Coastguard Worker #define	DRM_I915_VBLANK_PIPE_A	1
669*d83cc019SAndroid Build Coastguard Worker #define	DRM_I915_VBLANK_PIPE_B	2
670*d83cc019SAndroid Build Coastguard Worker 
671*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_vblank_pipe {
672*d83cc019SAndroid Build Coastguard Worker 	int pipe;
673*d83cc019SAndroid Build Coastguard Worker } drm_i915_vblank_pipe_t;
674*d83cc019SAndroid Build Coastguard Worker 
675*d83cc019SAndroid Build Coastguard Worker /* Schedule buffer swap at given vertical blank:
676*d83cc019SAndroid Build Coastguard Worker  */
677*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_vblank_swap {
678*d83cc019SAndroid Build Coastguard Worker 	drm_drawable_t drawable;
679*d83cc019SAndroid Build Coastguard Worker 	enum drm_vblank_seq_type seqtype;
680*d83cc019SAndroid Build Coastguard Worker 	unsigned int sequence;
681*d83cc019SAndroid Build Coastguard Worker } drm_i915_vblank_swap_t;
682*d83cc019SAndroid Build Coastguard Worker 
683*d83cc019SAndroid Build Coastguard Worker typedef struct drm_i915_hws_addr {
684*d83cc019SAndroid Build Coastguard Worker 	__u64 addr;
685*d83cc019SAndroid Build Coastguard Worker } drm_i915_hws_addr_t;
686*d83cc019SAndroid Build Coastguard Worker 
687*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_init {
688*d83cc019SAndroid Build Coastguard Worker 	/**
689*d83cc019SAndroid Build Coastguard Worker 	 * Beginning offset in the GTT to be managed by the DRM memory
690*d83cc019SAndroid Build Coastguard Worker 	 * manager.
691*d83cc019SAndroid Build Coastguard Worker 	 */
692*d83cc019SAndroid Build Coastguard Worker 	__u64 gtt_start;
693*d83cc019SAndroid Build Coastguard Worker 	/**
694*d83cc019SAndroid Build Coastguard Worker 	 * Ending offset in the GTT to be managed by the DRM memory
695*d83cc019SAndroid Build Coastguard Worker 	 * manager.
696*d83cc019SAndroid Build Coastguard Worker 	 */
697*d83cc019SAndroid Build Coastguard Worker 	__u64 gtt_end;
698*d83cc019SAndroid Build Coastguard Worker };
699*d83cc019SAndroid Build Coastguard Worker 
700*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_create {
701*d83cc019SAndroid Build Coastguard Worker 	/**
702*d83cc019SAndroid Build Coastguard Worker 	 * Requested size for the object.
703*d83cc019SAndroid Build Coastguard Worker 	 *
704*d83cc019SAndroid Build Coastguard Worker 	 * The (page-aligned) allocated size for the object will be returned.
705*d83cc019SAndroid Build Coastguard Worker 	 */
706*d83cc019SAndroid Build Coastguard Worker 	__u64 size;
707*d83cc019SAndroid Build Coastguard Worker 	/**
708*d83cc019SAndroid Build Coastguard Worker 	 * Returned handle for the object.
709*d83cc019SAndroid Build Coastguard Worker 	 *
710*d83cc019SAndroid Build Coastguard Worker 	 * Object handles are nonzero.
711*d83cc019SAndroid Build Coastguard Worker 	 */
712*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
713*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
714*d83cc019SAndroid Build Coastguard Worker };
715*d83cc019SAndroid Build Coastguard Worker 
716*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_pread {
717*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object being read. */
718*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
719*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
720*d83cc019SAndroid Build Coastguard Worker 	/** Offset into the object to read from */
721*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
722*d83cc019SAndroid Build Coastguard Worker 	/** Length of data to read */
723*d83cc019SAndroid Build Coastguard Worker 	__u64 size;
724*d83cc019SAndroid Build Coastguard Worker 	/**
725*d83cc019SAndroid Build Coastguard Worker 	 * Pointer to write the data into.
726*d83cc019SAndroid Build Coastguard Worker 	 *
727*d83cc019SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
728*d83cc019SAndroid Build Coastguard Worker 	 */
729*d83cc019SAndroid Build Coastguard Worker 	__u64 data_ptr;
730*d83cc019SAndroid Build Coastguard Worker };
731*d83cc019SAndroid Build Coastguard Worker 
732*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_pwrite {
733*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object being written to. */
734*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
735*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
736*d83cc019SAndroid Build Coastguard Worker 	/** Offset into the object to write to */
737*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
738*d83cc019SAndroid Build Coastguard Worker 	/** Length of data to write */
739*d83cc019SAndroid Build Coastguard Worker 	__u64 size;
740*d83cc019SAndroid Build Coastguard Worker 	/**
741*d83cc019SAndroid Build Coastguard Worker 	 * Pointer to read the data from.
742*d83cc019SAndroid Build Coastguard Worker 	 *
743*d83cc019SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
744*d83cc019SAndroid Build Coastguard Worker 	 */
745*d83cc019SAndroid Build Coastguard Worker 	__u64 data_ptr;
746*d83cc019SAndroid Build Coastguard Worker };
747*d83cc019SAndroid Build Coastguard Worker 
748*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_mmap {
749*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object being mapped. */
750*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
751*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
752*d83cc019SAndroid Build Coastguard Worker 	/** Offset in the object to map. */
753*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
754*d83cc019SAndroid Build Coastguard Worker 	/**
755*d83cc019SAndroid Build Coastguard Worker 	 * Length of data to map.
756*d83cc019SAndroid Build Coastguard Worker 	 *
757*d83cc019SAndroid Build Coastguard Worker 	 * The value will be page-aligned.
758*d83cc019SAndroid Build Coastguard Worker 	 */
759*d83cc019SAndroid Build Coastguard Worker 	__u64 size;
760*d83cc019SAndroid Build Coastguard Worker 	/**
761*d83cc019SAndroid Build Coastguard Worker 	 * Returned pointer the data was mapped at.
762*d83cc019SAndroid Build Coastguard Worker 	 *
763*d83cc019SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
764*d83cc019SAndroid Build Coastguard Worker 	 */
765*d83cc019SAndroid Build Coastguard Worker 	__u64 addr_ptr;
766*d83cc019SAndroid Build Coastguard Worker 
767*d83cc019SAndroid Build Coastguard Worker 	/**
768*d83cc019SAndroid Build Coastguard Worker 	 * Flags for extended behaviour.
769*d83cc019SAndroid Build Coastguard Worker 	 *
770*d83cc019SAndroid Build Coastguard Worker 	 * Added in version 2.
771*d83cc019SAndroid Build Coastguard Worker 	 */
772*d83cc019SAndroid Build Coastguard Worker 	__u64 flags;
773*d83cc019SAndroid Build Coastguard Worker #define I915_MMAP_WC 0x1
774*d83cc019SAndroid Build Coastguard Worker };
775*d83cc019SAndroid Build Coastguard Worker 
776*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_mmap_gtt {
777*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object being mapped. */
778*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
779*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
780*d83cc019SAndroid Build Coastguard Worker 	/**
781*d83cc019SAndroid Build Coastguard Worker 	 * Fake offset to use for subsequent mmap call
782*d83cc019SAndroid Build Coastguard Worker 	 *
783*d83cc019SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
784*d83cc019SAndroid Build Coastguard Worker 	 */
785*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
786*d83cc019SAndroid Build Coastguard Worker };
787*d83cc019SAndroid Build Coastguard Worker 
788*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_set_domain {
789*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object */
790*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
791*d83cc019SAndroid Build Coastguard Worker 
792*d83cc019SAndroid Build Coastguard Worker 	/** New read domains */
793*d83cc019SAndroid Build Coastguard Worker 	__u32 read_domains;
794*d83cc019SAndroid Build Coastguard Worker 
795*d83cc019SAndroid Build Coastguard Worker 	/** New write domain */
796*d83cc019SAndroid Build Coastguard Worker 	__u32 write_domain;
797*d83cc019SAndroid Build Coastguard Worker };
798*d83cc019SAndroid Build Coastguard Worker 
799*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_sw_finish {
800*d83cc019SAndroid Build Coastguard Worker 	/** Handle for the object */
801*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
802*d83cc019SAndroid Build Coastguard Worker };
803*d83cc019SAndroid Build Coastguard Worker 
804*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_relocation_entry {
805*d83cc019SAndroid Build Coastguard Worker 	/**
806*d83cc019SAndroid Build Coastguard Worker 	 * Handle of the buffer being pointed to by this relocation entry.
807*d83cc019SAndroid Build Coastguard Worker 	 *
808*d83cc019SAndroid Build Coastguard Worker 	 * It's appealing to make this be an index into the mm_validate_entry
809*d83cc019SAndroid Build Coastguard Worker 	 * list to refer to the buffer, but this allows the driver to create
810*d83cc019SAndroid Build Coastguard Worker 	 * a relocation list for state buffers and not re-write it per
811*d83cc019SAndroid Build Coastguard Worker 	 * exec using the buffer.
812*d83cc019SAndroid Build Coastguard Worker 	 */
813*d83cc019SAndroid Build Coastguard Worker 	__u32 target_handle;
814*d83cc019SAndroid Build Coastguard Worker 
815*d83cc019SAndroid Build Coastguard Worker 	/**
816*d83cc019SAndroid Build Coastguard Worker 	 * Value to be added to the offset of the target buffer to make up
817*d83cc019SAndroid Build Coastguard Worker 	 * the relocation entry.
818*d83cc019SAndroid Build Coastguard Worker 	 */
819*d83cc019SAndroid Build Coastguard Worker 	__u32 delta;
820*d83cc019SAndroid Build Coastguard Worker 
821*d83cc019SAndroid Build Coastguard Worker 	/** Offset in the buffer the relocation entry will be written into */
822*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
823*d83cc019SAndroid Build Coastguard Worker 
824*d83cc019SAndroid Build Coastguard Worker 	/**
825*d83cc019SAndroid Build Coastguard Worker 	 * Offset value of the target buffer that the relocation entry was last
826*d83cc019SAndroid Build Coastguard Worker 	 * written as.
827*d83cc019SAndroid Build Coastguard Worker 	 *
828*d83cc019SAndroid Build Coastguard Worker 	 * If the buffer has the same offset as last time, we can skip syncing
829*d83cc019SAndroid Build Coastguard Worker 	 * and writing the relocation.  This value is written back out by
830*d83cc019SAndroid Build Coastguard Worker 	 * the execbuffer ioctl when the relocation is written.
831*d83cc019SAndroid Build Coastguard Worker 	 */
832*d83cc019SAndroid Build Coastguard Worker 	__u64 presumed_offset;
833*d83cc019SAndroid Build Coastguard Worker 
834*d83cc019SAndroid Build Coastguard Worker 	/**
835*d83cc019SAndroid Build Coastguard Worker 	 * Target memory domains read by this operation.
836*d83cc019SAndroid Build Coastguard Worker 	 */
837*d83cc019SAndroid Build Coastguard Worker 	__u32 read_domains;
838*d83cc019SAndroid Build Coastguard Worker 
839*d83cc019SAndroid Build Coastguard Worker 	/**
840*d83cc019SAndroid Build Coastguard Worker 	 * Target memory domains written by this operation.
841*d83cc019SAndroid Build Coastguard Worker 	 *
842*d83cc019SAndroid Build Coastguard Worker 	 * Note that only one domain may be written by the whole
843*d83cc019SAndroid Build Coastguard Worker 	 * execbuffer operation, so that where there are conflicts,
844*d83cc019SAndroid Build Coastguard Worker 	 * the application will get -EINVAL back.
845*d83cc019SAndroid Build Coastguard Worker 	 */
846*d83cc019SAndroid Build Coastguard Worker 	__u32 write_domain;
847*d83cc019SAndroid Build Coastguard Worker };
848*d83cc019SAndroid Build Coastguard Worker 
849*d83cc019SAndroid Build Coastguard Worker /** @{
850*d83cc019SAndroid Build Coastguard Worker  * Intel memory domains
851*d83cc019SAndroid Build Coastguard Worker  *
852*d83cc019SAndroid Build Coastguard Worker  * Most of these just align with the various caches in
853*d83cc019SAndroid Build Coastguard Worker  * the system and are used to flush and invalidate as
854*d83cc019SAndroid Build Coastguard Worker  * objects end up cached in different domains.
855*d83cc019SAndroid Build Coastguard Worker  */
856*d83cc019SAndroid Build Coastguard Worker /** CPU cache */
857*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_CPU		0x00000001
858*d83cc019SAndroid Build Coastguard Worker /** Render cache, used by 2D and 3D drawing */
859*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_RENDER		0x00000002
860*d83cc019SAndroid Build Coastguard Worker /** Sampler cache, used by texture engine */
861*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_SAMPLER		0x00000004
862*d83cc019SAndroid Build Coastguard Worker /** Command queue, used to load batch buffers */
863*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_COMMAND		0x00000008
864*d83cc019SAndroid Build Coastguard Worker /** Instruction cache, used by shader programs */
865*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_INSTRUCTION	0x00000010
866*d83cc019SAndroid Build Coastguard Worker /** Vertex address cache */
867*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_VERTEX		0x00000020
868*d83cc019SAndroid Build Coastguard Worker /** GTT domain - aperture and scanout */
869*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_GTT		0x00000040
870*d83cc019SAndroid Build Coastguard Worker /** WC domain - uncached access */
871*d83cc019SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_WC		0x00000080
872*d83cc019SAndroid Build Coastguard Worker /** @} */
873*d83cc019SAndroid Build Coastguard Worker 
874*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_exec_object {
875*d83cc019SAndroid Build Coastguard Worker 	/**
876*d83cc019SAndroid Build Coastguard Worker 	 * User's handle for a buffer to be bound into the GTT for this
877*d83cc019SAndroid Build Coastguard Worker 	 * operation.
878*d83cc019SAndroid Build Coastguard Worker 	 */
879*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
880*d83cc019SAndroid Build Coastguard Worker 
881*d83cc019SAndroid Build Coastguard Worker 	/** Number of relocations to be performed on this buffer */
882*d83cc019SAndroid Build Coastguard Worker 	__u32 relocation_count;
883*d83cc019SAndroid Build Coastguard Worker 	/**
884*d83cc019SAndroid Build Coastguard Worker 	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
885*d83cc019SAndroid Build Coastguard Worker 	 * the relocations to be performed in this buffer.
886*d83cc019SAndroid Build Coastguard Worker 	 */
887*d83cc019SAndroid Build Coastguard Worker 	__u64 relocs_ptr;
888*d83cc019SAndroid Build Coastguard Worker 
889*d83cc019SAndroid Build Coastguard Worker 	/** Required alignment in graphics aperture */
890*d83cc019SAndroid Build Coastguard Worker 	__u64 alignment;
891*d83cc019SAndroid Build Coastguard Worker 
892*d83cc019SAndroid Build Coastguard Worker 	/**
893*d83cc019SAndroid Build Coastguard Worker 	 * Returned value of the updated offset of the object, for future
894*d83cc019SAndroid Build Coastguard Worker 	 * presumed_offset writes.
895*d83cc019SAndroid Build Coastguard Worker 	 */
896*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
897*d83cc019SAndroid Build Coastguard Worker };
898*d83cc019SAndroid Build Coastguard Worker 
899*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_execbuffer {
900*d83cc019SAndroid Build Coastguard Worker 	/**
901*d83cc019SAndroid Build Coastguard Worker 	 * List of buffers to be validated with their relocations to be
902*d83cc019SAndroid Build Coastguard Worker 	 * performend on them.
903*d83cc019SAndroid Build Coastguard Worker 	 *
904*d83cc019SAndroid Build Coastguard Worker 	 * This is a pointer to an array of struct drm_i915_gem_validate_entry.
905*d83cc019SAndroid Build Coastguard Worker 	 *
906*d83cc019SAndroid Build Coastguard Worker 	 * These buffers must be listed in an order such that all relocations
907*d83cc019SAndroid Build Coastguard Worker 	 * a buffer is performing refer to buffers that have already appeared
908*d83cc019SAndroid Build Coastguard Worker 	 * in the validate list.
909*d83cc019SAndroid Build Coastguard Worker 	 */
910*d83cc019SAndroid Build Coastguard Worker 	__u64 buffers_ptr;
911*d83cc019SAndroid Build Coastguard Worker 	__u32 buffer_count;
912*d83cc019SAndroid Build Coastguard Worker 
913*d83cc019SAndroid Build Coastguard Worker 	/** Offset in the batchbuffer to start execution from. */
914*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_start_offset;
915*d83cc019SAndroid Build Coastguard Worker 	/** Bytes used in batchbuffer from batch_start_offset */
916*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_len;
917*d83cc019SAndroid Build Coastguard Worker 	__u32 DR1;
918*d83cc019SAndroid Build Coastguard Worker 	__u32 DR4;
919*d83cc019SAndroid Build Coastguard Worker 	__u32 num_cliprects;
920*d83cc019SAndroid Build Coastguard Worker 	/** This is a struct drm_clip_rect *cliprects */
921*d83cc019SAndroid Build Coastguard Worker 	__u64 cliprects_ptr;
922*d83cc019SAndroid Build Coastguard Worker };
923*d83cc019SAndroid Build Coastguard Worker 
924*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_exec_object2 {
925*d83cc019SAndroid Build Coastguard Worker 	/**
926*d83cc019SAndroid Build Coastguard Worker 	 * User's handle for a buffer to be bound into the GTT for this
927*d83cc019SAndroid Build Coastguard Worker 	 * operation.
928*d83cc019SAndroid Build Coastguard Worker 	 */
929*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
930*d83cc019SAndroid Build Coastguard Worker 
931*d83cc019SAndroid Build Coastguard Worker 	/** Number of relocations to be performed on this buffer */
932*d83cc019SAndroid Build Coastguard Worker 	__u32 relocation_count;
933*d83cc019SAndroid Build Coastguard Worker 	/**
934*d83cc019SAndroid Build Coastguard Worker 	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
935*d83cc019SAndroid Build Coastguard Worker 	 * the relocations to be performed in this buffer.
936*d83cc019SAndroid Build Coastguard Worker 	 */
937*d83cc019SAndroid Build Coastguard Worker 	__u64 relocs_ptr;
938*d83cc019SAndroid Build Coastguard Worker 
939*d83cc019SAndroid Build Coastguard Worker 	/** Required alignment in graphics aperture */
940*d83cc019SAndroid Build Coastguard Worker 	__u64 alignment;
941*d83cc019SAndroid Build Coastguard Worker 
942*d83cc019SAndroid Build Coastguard Worker 	/**
943*d83cc019SAndroid Build Coastguard Worker 	 * When the EXEC_OBJECT_PINNED flag is specified this is populated by
944*d83cc019SAndroid Build Coastguard Worker 	 * the user with the GTT offset at which this object will be pinned.
945*d83cc019SAndroid Build Coastguard Worker 	 * When the I915_EXEC_NO_RELOC flag is specified this must contain the
946*d83cc019SAndroid Build Coastguard Worker 	 * presumed_offset of the object.
947*d83cc019SAndroid Build Coastguard Worker 	 * During execbuffer2 the kernel populates it with the value of the
948*d83cc019SAndroid Build Coastguard Worker 	 * current GTT offset of the object, for future presumed_offset writes.
949*d83cc019SAndroid Build Coastguard Worker 	 */
950*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
951*d83cc019SAndroid Build Coastguard Worker 
952*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_NEEDS_FENCE		 (1<<0)
953*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_NEEDS_GTT		 (1<<1)
954*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_WRITE		 (1<<2)
955*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3)
956*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_PINNED		 (1<<4)
957*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_PAD_TO_SIZE		 (1<<5)
958*d83cc019SAndroid Build Coastguard Worker /* The kernel implicitly tracks GPU activity on all GEM objects, and
959*d83cc019SAndroid Build Coastguard Worker  * synchronises operations with outstanding rendering. This includes
960*d83cc019SAndroid Build Coastguard Worker  * rendering on other devices if exported via dma-buf. However, sometimes
961*d83cc019SAndroid Build Coastguard Worker  * this tracking is too coarse and the user knows better. For example,
962*d83cc019SAndroid Build Coastguard Worker  * if the object is split into non-overlapping ranges shared between different
963*d83cc019SAndroid Build Coastguard Worker  * clients or engines (i.e. suballocating objects), the implicit tracking
964*d83cc019SAndroid Build Coastguard Worker  * by kernel assumes that each operation affects the whole object rather
965*d83cc019SAndroid Build Coastguard Worker  * than an individual range, causing needless synchronisation between clients.
966*d83cc019SAndroid Build Coastguard Worker  * The kernel will also forgo any CPU cache flushes prior to rendering from
967*d83cc019SAndroid Build Coastguard Worker  * the object as the client is expected to be also handling such domain
968*d83cc019SAndroid Build Coastguard Worker  * tracking.
969*d83cc019SAndroid Build Coastguard Worker  *
970*d83cc019SAndroid Build Coastguard Worker  * The kernel maintains the implicit tracking in order to manage resources
971*d83cc019SAndroid Build Coastguard Worker  * used by the GPU - this flag only disables the synchronisation prior to
972*d83cc019SAndroid Build Coastguard Worker  * rendering with this object in this execbuf.
973*d83cc019SAndroid Build Coastguard Worker  *
974*d83cc019SAndroid Build Coastguard Worker  * Opting out of implicit synhronisation requires the user to do its own
975*d83cc019SAndroid Build Coastguard Worker  * explicit tracking to avoid rendering corruption. See, for example,
976*d83cc019SAndroid Build Coastguard Worker  * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously.
977*d83cc019SAndroid Build Coastguard Worker  */
978*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_ASYNC		(1<<6)
979*d83cc019SAndroid Build Coastguard Worker /* Request that the contents of this execobject be copied into the error
980*d83cc019SAndroid Build Coastguard Worker  * state upon a GPU hang involving this batch for post-mortem debugging.
981*d83cc019SAndroid Build Coastguard Worker  * These buffers are recorded in no particular order as "user" in
982*d83cc019SAndroid Build Coastguard Worker  * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see
983*d83cc019SAndroid Build Coastguard Worker  * if the kernel supports this flag.
984*d83cc019SAndroid Build Coastguard Worker  */
985*d83cc019SAndroid Build Coastguard Worker #define EXEC_OBJECT_CAPTURE		(1<<7)
986*d83cc019SAndroid Build Coastguard Worker /* All remaining bits are MBZ and RESERVED FOR FUTURE USE */
987*d83cc019SAndroid Build Coastguard Worker #define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1)
988*d83cc019SAndroid Build Coastguard Worker 	__u64 flags;
989*d83cc019SAndroid Build Coastguard Worker 
990*d83cc019SAndroid Build Coastguard Worker 	union {
991*d83cc019SAndroid Build Coastguard Worker 		__u64 rsvd1;
992*d83cc019SAndroid Build Coastguard Worker 		__u64 pad_to_size;
993*d83cc019SAndroid Build Coastguard Worker 	};
994*d83cc019SAndroid Build Coastguard Worker 	__u64 rsvd2;
995*d83cc019SAndroid Build Coastguard Worker };
996*d83cc019SAndroid Build Coastguard Worker 
997*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_exec_fence {
998*d83cc019SAndroid Build Coastguard Worker 	/**
999*d83cc019SAndroid Build Coastguard Worker 	 * User's handle for a drm_syncobj to wait on or signal.
1000*d83cc019SAndroid Build Coastguard Worker 	 */
1001*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1002*d83cc019SAndroid Build Coastguard Worker 
1003*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_WAIT            (1<<0)
1004*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_SIGNAL          (1<<1)
1005*d83cc019SAndroid Build Coastguard Worker #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1))
1006*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1007*d83cc019SAndroid Build Coastguard Worker };
1008*d83cc019SAndroid Build Coastguard Worker 
1009*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_execbuffer2 {
1010*d83cc019SAndroid Build Coastguard Worker 	/**
1011*d83cc019SAndroid Build Coastguard Worker 	 * List of gem_exec_object2 structs
1012*d83cc019SAndroid Build Coastguard Worker 	 */
1013*d83cc019SAndroid Build Coastguard Worker 	__u64 buffers_ptr;
1014*d83cc019SAndroid Build Coastguard Worker 	__u32 buffer_count;
1015*d83cc019SAndroid Build Coastguard Worker 
1016*d83cc019SAndroid Build Coastguard Worker 	/** Offset in the batchbuffer to start execution from. */
1017*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_start_offset;
1018*d83cc019SAndroid Build Coastguard Worker 	/** Bytes used in batchbuffer from batch_start_offset */
1019*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_len;
1020*d83cc019SAndroid Build Coastguard Worker 	__u32 DR1;
1021*d83cc019SAndroid Build Coastguard Worker 	__u32 DR4;
1022*d83cc019SAndroid Build Coastguard Worker 	__u32 num_cliprects;
1023*d83cc019SAndroid Build Coastguard Worker 	/**
1024*d83cc019SAndroid Build Coastguard Worker 	 * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY
1025*d83cc019SAndroid Build Coastguard Worker 	 * is not set.  If I915_EXEC_FENCE_ARRAY is set, then this is a
1026*d83cc019SAndroid Build Coastguard Worker 	 * struct drm_i915_gem_exec_fence *fences.
1027*d83cc019SAndroid Build Coastguard Worker 	 */
1028*d83cc019SAndroid Build Coastguard Worker 	__u64 cliprects_ptr;
1029*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_RING_MASK              (0x3f)
1030*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_DEFAULT                (0<<0)
1031*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_RENDER                 (1<<0)
1032*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD                    (2<<0)
1033*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BLT                    (3<<0)
1034*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_VEBOX                  (4<<0)
1035*d83cc019SAndroid Build Coastguard Worker 
1036*d83cc019SAndroid Build Coastguard Worker /* Used for switching the constants addressing mode on gen4+ RENDER ring.
1037*d83cc019SAndroid Build Coastguard Worker  * Gen6+ only supports relative addressing to dynamic state (default) and
1038*d83cc019SAndroid Build Coastguard Worker  * absolute addressing.
1039*d83cc019SAndroid Build Coastguard Worker  *
1040*d83cc019SAndroid Build Coastguard Worker  * These flags are ignored for the BSD and BLT rings.
1041*d83cc019SAndroid Build Coastguard Worker  */
1042*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_MASK 	(3<<6)
1043*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
1044*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_ABSOLUTE 	(1<<6)
1045*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
1046*d83cc019SAndroid Build Coastguard Worker 	__u64 flags;
1047*d83cc019SAndroid Build Coastguard Worker 	__u64 rsvd1; /* now used for context info */
1048*d83cc019SAndroid Build Coastguard Worker 	__u64 rsvd2;
1049*d83cc019SAndroid Build Coastguard Worker };
1050*d83cc019SAndroid Build Coastguard Worker 
1051*d83cc019SAndroid Build Coastguard Worker /** Resets the SO write offset registers for transform feedback on gen7. */
1052*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_GEN7_SOL_RESET	(1<<8)
1053*d83cc019SAndroid Build Coastguard Worker 
1054*d83cc019SAndroid Build Coastguard Worker /** Request a privileged ("secure") batch buffer. Note only available for
1055*d83cc019SAndroid Build Coastguard Worker  * DRM_ROOT_ONLY | DRM_MASTER processes.
1056*d83cc019SAndroid Build Coastguard Worker  */
1057*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_SECURE		(1<<9)
1058*d83cc019SAndroid Build Coastguard Worker 
1059*d83cc019SAndroid Build Coastguard Worker /** Inform the kernel that the batch is and will always be pinned. This
1060*d83cc019SAndroid Build Coastguard Worker  * negates the requirement for a workaround to be performed to avoid
1061*d83cc019SAndroid Build Coastguard Worker  * an incoherent CS (such as can be found on 830/845). If this flag is
1062*d83cc019SAndroid Build Coastguard Worker  * not passed, the kernel will endeavour to make sure the batch is
1063*d83cc019SAndroid Build Coastguard Worker  * coherent with the CS before execution. If this flag is passed,
1064*d83cc019SAndroid Build Coastguard Worker  * userspace assumes the responsibility for ensuring the same.
1065*d83cc019SAndroid Build Coastguard Worker  */
1066*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_IS_PINNED		(1<<10)
1067*d83cc019SAndroid Build Coastguard Worker 
1068*d83cc019SAndroid Build Coastguard Worker /** Provide a hint to the kernel that the command stream and auxiliary
1069*d83cc019SAndroid Build Coastguard Worker  * state buffers already holds the correct presumed addresses and so the
1070*d83cc019SAndroid Build Coastguard Worker  * relocation process may be skipped if no buffers need to be moved in
1071*d83cc019SAndroid Build Coastguard Worker  * preparation for the execbuffer.
1072*d83cc019SAndroid Build Coastguard Worker  */
1073*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_NO_RELOC		(1<<11)
1074*d83cc019SAndroid Build Coastguard Worker 
1075*d83cc019SAndroid Build Coastguard Worker /** Use the reloc.handle as an index into the exec object array rather
1076*d83cc019SAndroid Build Coastguard Worker  * than as the per-file handle.
1077*d83cc019SAndroid Build Coastguard Worker  */
1078*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_HANDLE_LUT		(1<<12)
1079*d83cc019SAndroid Build Coastguard Worker 
1080*d83cc019SAndroid Build Coastguard Worker /** Used for switching BSD rings on the platforms with two BSD rings */
1081*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD_SHIFT	 (13)
1082*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD_MASK	 (3 << I915_EXEC_BSD_SHIFT)
1083*d83cc019SAndroid Build Coastguard Worker /* default ping-pong mode */
1084*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD_DEFAULT	 (0 << I915_EXEC_BSD_SHIFT)
1085*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD_RING1	 (1 << I915_EXEC_BSD_SHIFT)
1086*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BSD_RING2	 (2 << I915_EXEC_BSD_SHIFT)
1087*d83cc019SAndroid Build Coastguard Worker 
1088*d83cc019SAndroid Build Coastguard Worker /** Tell the kernel that the batchbuffer is processed by
1089*d83cc019SAndroid Build Coastguard Worker  *  the resource streamer.
1090*d83cc019SAndroid Build Coastguard Worker  */
1091*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_RESOURCE_STREAMER     (1<<15)
1092*d83cc019SAndroid Build Coastguard Worker 
1093*d83cc019SAndroid Build Coastguard Worker /* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent
1094*d83cc019SAndroid Build Coastguard Worker  * a sync_file fd to wait upon (in a nonblocking manner) prior to executing
1095*d83cc019SAndroid Build Coastguard Worker  * the batch.
1096*d83cc019SAndroid Build Coastguard Worker  *
1097*d83cc019SAndroid Build Coastguard Worker  * Returns -EINVAL if the sync_file fd cannot be found.
1098*d83cc019SAndroid Build Coastguard Worker  */
1099*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_IN		(1<<16)
1100*d83cc019SAndroid Build Coastguard Worker 
1101*d83cc019SAndroid Build Coastguard Worker /* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd
1102*d83cc019SAndroid Build Coastguard Worker  * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given
1103*d83cc019SAndroid Build Coastguard Worker  * to the caller, and it should be close() after use. (The fd is a regular
1104*d83cc019SAndroid Build Coastguard Worker  * file descriptor and will be cleaned up on process termination. It holds
1105*d83cc019SAndroid Build Coastguard Worker  * a reference to the request, but nothing else.)
1106*d83cc019SAndroid Build Coastguard Worker  *
1107*d83cc019SAndroid Build Coastguard Worker  * The sync_file fd can be combined with other sync_file and passed either
1108*d83cc019SAndroid Build Coastguard Worker  * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip
1109*d83cc019SAndroid Build Coastguard Worker  * will only occur after this request completes), or to other devices.
1110*d83cc019SAndroid Build Coastguard Worker  *
1111*d83cc019SAndroid Build Coastguard Worker  * Using I915_EXEC_FENCE_OUT requires use of
1112*d83cc019SAndroid Build Coastguard Worker  * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written
1113*d83cc019SAndroid Build Coastguard Worker  * back to userspace. Failure to do so will cause the out-fence to always
1114*d83cc019SAndroid Build Coastguard Worker  * be reported as zero, and the real fence fd to be leaked.
1115*d83cc019SAndroid Build Coastguard Worker  */
1116*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_OUT		(1<<17)
1117*d83cc019SAndroid Build Coastguard Worker 
1118*d83cc019SAndroid Build Coastguard Worker /*
1119*d83cc019SAndroid Build Coastguard Worker  * Traditionally the execbuf ioctl has only considered the final element in
1120*d83cc019SAndroid Build Coastguard Worker  * the execobject[] to be the executable batch. Often though, the client
1121*d83cc019SAndroid Build Coastguard Worker  * will known the batch object prior to construction and being able to place
1122*d83cc019SAndroid Build Coastguard Worker  * it into the execobject[] array first can simplify the relocation tracking.
1123*d83cc019SAndroid Build Coastguard Worker  * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the
1124*d83cc019SAndroid Build Coastguard Worker  * execobject[] as the * batch instead (the default is to use the last
1125*d83cc019SAndroid Build Coastguard Worker  * element).
1126*d83cc019SAndroid Build Coastguard Worker  */
1127*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_BATCH_FIRST		(1<<18)
1128*d83cc019SAndroid Build Coastguard Worker 
1129*d83cc019SAndroid Build Coastguard Worker /* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr
1130*d83cc019SAndroid Build Coastguard Worker  * define an array of i915_gem_exec_fence structures which specify a set of
1131*d83cc019SAndroid Build Coastguard Worker  * dma fences to wait upon or signal.
1132*d83cc019SAndroid Build Coastguard Worker  */
1133*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_ARRAY   (1<<19)
1134*d83cc019SAndroid Build Coastguard Worker 
1135*d83cc019SAndroid Build Coastguard Worker /*
1136*d83cc019SAndroid Build Coastguard Worker  * Setting I915_EXEC_FENCE_SUBMIT implies that lower_32_bits(rsvd2) represent
1137*d83cc019SAndroid Build Coastguard Worker  * a sync_file fd to wait upon (in a nonblocking manner) prior to executing
1138*d83cc019SAndroid Build Coastguard Worker  * the batch.
1139*d83cc019SAndroid Build Coastguard Worker  *
1140*d83cc019SAndroid Build Coastguard Worker  * Returns -EINVAL if the sync_file fd cannot be found.
1141*d83cc019SAndroid Build Coastguard Worker  */
1142*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_SUBMIT		(1 << 20)
1143*d83cc019SAndroid Build Coastguard Worker 
1144*d83cc019SAndroid Build Coastguard Worker #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SUBMIT << 1))
1145*d83cc019SAndroid Build Coastguard Worker 
1146*d83cc019SAndroid Build Coastguard Worker #define I915_EXEC_CONTEXT_ID_MASK	(0xffffffff)
1147*d83cc019SAndroid Build Coastguard Worker #define i915_execbuffer2_set_context_id(eb2, context) \
1148*d83cc019SAndroid Build Coastguard Worker 	(eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
1149*d83cc019SAndroid Build Coastguard Worker #define i915_execbuffer2_get_context_id(eb2) \
1150*d83cc019SAndroid Build Coastguard Worker 	((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK)
1151*d83cc019SAndroid Build Coastguard Worker 
1152*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_pin {
1153*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to be pinned. */
1154*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1155*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
1156*d83cc019SAndroid Build Coastguard Worker 
1157*d83cc019SAndroid Build Coastguard Worker 	/** alignment required within the aperture */
1158*d83cc019SAndroid Build Coastguard Worker 	__u64 alignment;
1159*d83cc019SAndroid Build Coastguard Worker 
1160*d83cc019SAndroid Build Coastguard Worker 	/** Returned GTT offset of the buffer. */
1161*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
1162*d83cc019SAndroid Build Coastguard Worker };
1163*d83cc019SAndroid Build Coastguard Worker 
1164*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_unpin {
1165*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to be unpinned. */
1166*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1167*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
1168*d83cc019SAndroid Build Coastguard Worker };
1169*d83cc019SAndroid Build Coastguard Worker 
1170*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_busy {
1171*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to check for busy */
1172*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1173*d83cc019SAndroid Build Coastguard Worker 
1174*d83cc019SAndroid Build Coastguard Worker 	/** Return busy status
1175*d83cc019SAndroid Build Coastguard Worker 	 *
1176*d83cc019SAndroid Build Coastguard Worker 	 * A return of 0 implies that the object is idle (after
1177*d83cc019SAndroid Build Coastguard Worker 	 * having flushed any pending activity), and a non-zero return that
1178*d83cc019SAndroid Build Coastguard Worker 	 * the object is still in-flight on the GPU. (The GPU has not yet
1179*d83cc019SAndroid Build Coastguard Worker 	 * signaled completion for all pending requests that reference the
1180*d83cc019SAndroid Build Coastguard Worker 	 * object.) An object is guaranteed to become idle eventually (so
1181*d83cc019SAndroid Build Coastguard Worker 	 * long as no new GPU commands are executed upon it). Due to the
1182*d83cc019SAndroid Build Coastguard Worker 	 * asynchronous nature of the hardware, an object reported
1183*d83cc019SAndroid Build Coastguard Worker 	 * as busy may become idle before the ioctl is completed.
1184*d83cc019SAndroid Build Coastguard Worker 	 *
1185*d83cc019SAndroid Build Coastguard Worker 	 * Furthermore, if the object is busy, which engine is busy is only
1186*d83cc019SAndroid Build Coastguard Worker 	 * provided as a guide and only indirectly by reporting its class
1187*d83cc019SAndroid Build Coastguard Worker 	 * (there may be more than one engine in each class). There are race
1188*d83cc019SAndroid Build Coastguard Worker 	 * conditions which prevent the report of which engines are busy from
1189*d83cc019SAndroid Build Coastguard Worker 	 * being always accurate.  However, the converse is not true. If the
1190*d83cc019SAndroid Build Coastguard Worker 	 * object is idle, the result of the ioctl, that all engines are idle,
1191*d83cc019SAndroid Build Coastguard Worker 	 * is accurate.
1192*d83cc019SAndroid Build Coastguard Worker 	 *
1193*d83cc019SAndroid Build Coastguard Worker 	 * The returned dword is split into two fields to indicate both
1194*d83cc019SAndroid Build Coastguard Worker 	 * the engine classess on which the object is being read, and the
1195*d83cc019SAndroid Build Coastguard Worker 	 * engine class on which it is currently being written (if any).
1196*d83cc019SAndroid Build Coastguard Worker 	 *
1197*d83cc019SAndroid Build Coastguard Worker 	 * The low word (bits 0:15) indicate if the object is being written
1198*d83cc019SAndroid Build Coastguard Worker 	 * to by any engine (there can only be one, as the GEM implicit
1199*d83cc019SAndroid Build Coastguard Worker 	 * synchronisation rules force writes to be serialised). Only the
1200*d83cc019SAndroid Build Coastguard Worker 	 * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as
1201*d83cc019SAndroid Build Coastguard Worker 	 * 1 not 0 etc) for the last write is reported.
1202*d83cc019SAndroid Build Coastguard Worker 	 *
1203*d83cc019SAndroid Build Coastguard Worker 	 * The high word (bits 16:31) are a bitmask of which engines classes
1204*d83cc019SAndroid Build Coastguard Worker 	 * are currently reading from the object. Multiple engines may be
1205*d83cc019SAndroid Build Coastguard Worker 	 * reading from the object simultaneously.
1206*d83cc019SAndroid Build Coastguard Worker 	 *
1207*d83cc019SAndroid Build Coastguard Worker 	 * The value of each engine class is the same as specified in the
1208*d83cc019SAndroid Build Coastguard Worker 	 * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e.
1209*d83cc019SAndroid Build Coastguard Worker 	 * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc.
1210*d83cc019SAndroid Build Coastguard Worker 	 * reported as active itself. Some hardware may have parallel
1211*d83cc019SAndroid Build Coastguard Worker 	 * execution engines, e.g. multiple media engines, which are
1212*d83cc019SAndroid Build Coastguard Worker 	 * mapped to the same class identifier and so are not separately
1213*d83cc019SAndroid Build Coastguard Worker 	 * reported for busyness.
1214*d83cc019SAndroid Build Coastguard Worker 	 *
1215*d83cc019SAndroid Build Coastguard Worker 	 * Caveat emptor:
1216*d83cc019SAndroid Build Coastguard Worker 	 * Only the boolean result of this query is reliable; that is whether
1217*d83cc019SAndroid Build Coastguard Worker 	 * the object is idle or busy. The report of which engines are busy
1218*d83cc019SAndroid Build Coastguard Worker 	 * should be only used as a heuristic.
1219*d83cc019SAndroid Build Coastguard Worker 	 */
1220*d83cc019SAndroid Build Coastguard Worker 	__u32 busy;
1221*d83cc019SAndroid Build Coastguard Worker };
1222*d83cc019SAndroid Build Coastguard Worker 
1223*d83cc019SAndroid Build Coastguard Worker /**
1224*d83cc019SAndroid Build Coastguard Worker  * I915_CACHING_NONE
1225*d83cc019SAndroid Build Coastguard Worker  *
1226*d83cc019SAndroid Build Coastguard Worker  * GPU access is not coherent with cpu caches. Default for machines without an
1227*d83cc019SAndroid Build Coastguard Worker  * LLC.
1228*d83cc019SAndroid Build Coastguard Worker  */
1229*d83cc019SAndroid Build Coastguard Worker #define I915_CACHING_NONE		0
1230*d83cc019SAndroid Build Coastguard Worker /**
1231*d83cc019SAndroid Build Coastguard Worker  * I915_CACHING_CACHED
1232*d83cc019SAndroid Build Coastguard Worker  *
1233*d83cc019SAndroid Build Coastguard Worker  * GPU access is coherent with cpu caches and furthermore the data is cached in
1234*d83cc019SAndroid Build Coastguard Worker  * last-level caches shared between cpu cores and the gpu GT. Default on
1235*d83cc019SAndroid Build Coastguard Worker  * machines with HAS_LLC.
1236*d83cc019SAndroid Build Coastguard Worker  */
1237*d83cc019SAndroid Build Coastguard Worker #define I915_CACHING_CACHED		1
1238*d83cc019SAndroid Build Coastguard Worker /**
1239*d83cc019SAndroid Build Coastguard Worker  * I915_CACHING_DISPLAY
1240*d83cc019SAndroid Build Coastguard Worker  *
1241*d83cc019SAndroid Build Coastguard Worker  * Special GPU caching mode which is coherent with the scanout engines.
1242*d83cc019SAndroid Build Coastguard Worker  * Transparently falls back to I915_CACHING_NONE on platforms where no special
1243*d83cc019SAndroid Build Coastguard Worker  * cache mode (like write-through or gfdt flushing) is available. The kernel
1244*d83cc019SAndroid Build Coastguard Worker  * automatically sets this mode when using a buffer as a scanout target.
1245*d83cc019SAndroid Build Coastguard Worker  * Userspace can manually set this mode to avoid a costly stall and clflush in
1246*d83cc019SAndroid Build Coastguard Worker  * the hotpath of drawing the first frame.
1247*d83cc019SAndroid Build Coastguard Worker  */
1248*d83cc019SAndroid Build Coastguard Worker #define I915_CACHING_DISPLAY		2
1249*d83cc019SAndroid Build Coastguard Worker 
1250*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_caching {
1251*d83cc019SAndroid Build Coastguard Worker 	/**
1252*d83cc019SAndroid Build Coastguard Worker 	 * Handle of the buffer to set/get the caching level of. */
1253*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1254*d83cc019SAndroid Build Coastguard Worker 
1255*d83cc019SAndroid Build Coastguard Worker 	/**
1256*d83cc019SAndroid Build Coastguard Worker 	 * Cacheing level to apply or return value
1257*d83cc019SAndroid Build Coastguard Worker 	 *
1258*d83cc019SAndroid Build Coastguard Worker 	 * bits0-15 are for generic caching control (i.e. the above defined
1259*d83cc019SAndroid Build Coastguard Worker 	 * values). bits16-31 are reserved for platform-specific variations
1260*d83cc019SAndroid Build Coastguard Worker 	 * (e.g. l3$ caching on gen7). */
1261*d83cc019SAndroid Build Coastguard Worker 	__u32 caching;
1262*d83cc019SAndroid Build Coastguard Worker };
1263*d83cc019SAndroid Build Coastguard Worker 
1264*d83cc019SAndroid Build Coastguard Worker #define I915_TILING_NONE	0
1265*d83cc019SAndroid Build Coastguard Worker #define I915_TILING_X		1
1266*d83cc019SAndroid Build Coastguard Worker #define I915_TILING_Y		2
1267*d83cc019SAndroid Build Coastguard Worker #define I915_TILING_LAST	I915_TILING_Y
1268*d83cc019SAndroid Build Coastguard Worker 
1269*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_NONE		0
1270*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9		1
1271*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10		2
1272*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_11		3
1273*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10_11	4
1274*d83cc019SAndroid Build Coastguard Worker /* Not seen by userland */
1275*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_UNKNOWN	5
1276*d83cc019SAndroid Build Coastguard Worker /* Seen by userland. */
1277*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_17		6
1278*d83cc019SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10_17	7
1279*d83cc019SAndroid Build Coastguard Worker 
1280*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_set_tiling {
1281*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to have its tiling state updated */
1282*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1283*d83cc019SAndroid Build Coastguard Worker 
1284*d83cc019SAndroid Build Coastguard Worker 	/**
1285*d83cc019SAndroid Build Coastguard Worker 	 * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
1286*d83cc019SAndroid Build Coastguard Worker 	 * I915_TILING_Y).
1287*d83cc019SAndroid Build Coastguard Worker 	 *
1288*d83cc019SAndroid Build Coastguard Worker 	 * This value is to be set on request, and will be updated by the
1289*d83cc019SAndroid Build Coastguard Worker 	 * kernel on successful return with the actual chosen tiling layout.
1290*d83cc019SAndroid Build Coastguard Worker 	 *
1291*d83cc019SAndroid Build Coastguard Worker 	 * The tiling mode may be demoted to I915_TILING_NONE when the system
1292*d83cc019SAndroid Build Coastguard Worker 	 * has bit 6 swizzling that can't be managed correctly by GEM.
1293*d83cc019SAndroid Build Coastguard Worker 	 *
1294*d83cc019SAndroid Build Coastguard Worker 	 * Buffer contents become undefined when changing tiling_mode.
1295*d83cc019SAndroid Build Coastguard Worker 	 */
1296*d83cc019SAndroid Build Coastguard Worker 	__u32 tiling_mode;
1297*d83cc019SAndroid Build Coastguard Worker 
1298*d83cc019SAndroid Build Coastguard Worker 	/**
1299*d83cc019SAndroid Build Coastguard Worker 	 * Stride in bytes for the object when in I915_TILING_X or
1300*d83cc019SAndroid Build Coastguard Worker 	 * I915_TILING_Y.
1301*d83cc019SAndroid Build Coastguard Worker 	 */
1302*d83cc019SAndroid Build Coastguard Worker 	__u32 stride;
1303*d83cc019SAndroid Build Coastguard Worker 
1304*d83cc019SAndroid Build Coastguard Worker 	/**
1305*d83cc019SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1306*d83cc019SAndroid Build Coastguard Worker 	 * mmap mapping.
1307*d83cc019SAndroid Build Coastguard Worker 	 */
1308*d83cc019SAndroid Build Coastguard Worker 	__u32 swizzle_mode;
1309*d83cc019SAndroid Build Coastguard Worker };
1310*d83cc019SAndroid Build Coastguard Worker 
1311*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_get_tiling {
1312*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to get tiling state for. */
1313*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1314*d83cc019SAndroid Build Coastguard Worker 
1315*d83cc019SAndroid Build Coastguard Worker 	/**
1316*d83cc019SAndroid Build Coastguard Worker 	 * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
1317*d83cc019SAndroid Build Coastguard Worker 	 * I915_TILING_Y).
1318*d83cc019SAndroid Build Coastguard Worker 	 */
1319*d83cc019SAndroid Build Coastguard Worker 	__u32 tiling_mode;
1320*d83cc019SAndroid Build Coastguard Worker 
1321*d83cc019SAndroid Build Coastguard Worker 	/**
1322*d83cc019SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1323*d83cc019SAndroid Build Coastguard Worker 	 * mmap mapping.
1324*d83cc019SAndroid Build Coastguard Worker 	 */
1325*d83cc019SAndroid Build Coastguard Worker 	__u32 swizzle_mode;
1326*d83cc019SAndroid Build Coastguard Worker 
1327*d83cc019SAndroid Build Coastguard Worker 	/**
1328*d83cc019SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1329*d83cc019SAndroid Build Coastguard Worker 	 * mmap mapping whilst bound.
1330*d83cc019SAndroid Build Coastguard Worker 	 */
1331*d83cc019SAndroid Build Coastguard Worker 	__u32 phys_swizzle_mode;
1332*d83cc019SAndroid Build Coastguard Worker };
1333*d83cc019SAndroid Build Coastguard Worker 
1334*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_get_aperture {
1335*d83cc019SAndroid Build Coastguard Worker 	/** Total size of the aperture used by i915_gem_execbuffer, in bytes */
1336*d83cc019SAndroid Build Coastguard Worker 	__u64 aper_size;
1337*d83cc019SAndroid Build Coastguard Worker 
1338*d83cc019SAndroid Build Coastguard Worker 	/**
1339*d83cc019SAndroid Build Coastguard Worker 	 * Available space in the aperture used by i915_gem_execbuffer, in
1340*d83cc019SAndroid Build Coastguard Worker 	 * bytes
1341*d83cc019SAndroid Build Coastguard Worker 	 */
1342*d83cc019SAndroid Build Coastguard Worker 	__u64 aper_available_size;
1343*d83cc019SAndroid Build Coastguard Worker };
1344*d83cc019SAndroid Build Coastguard Worker 
1345*d83cc019SAndroid Build Coastguard Worker struct drm_i915_get_pipe_from_crtc_id {
1346*d83cc019SAndroid Build Coastguard Worker 	/** ID of CRTC being requested **/
1347*d83cc019SAndroid Build Coastguard Worker 	__u32 crtc_id;
1348*d83cc019SAndroid Build Coastguard Worker 
1349*d83cc019SAndroid Build Coastguard Worker 	/** pipe of requested CRTC **/
1350*d83cc019SAndroid Build Coastguard Worker 	__u32 pipe;
1351*d83cc019SAndroid Build Coastguard Worker };
1352*d83cc019SAndroid Build Coastguard Worker 
1353*d83cc019SAndroid Build Coastguard Worker #define I915_MADV_WILLNEED 0
1354*d83cc019SAndroid Build Coastguard Worker #define I915_MADV_DONTNEED 1
1355*d83cc019SAndroid Build Coastguard Worker #define __I915_MADV_PURGED 2 /* internal state */
1356*d83cc019SAndroid Build Coastguard Worker 
1357*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_madvise {
1358*d83cc019SAndroid Build Coastguard Worker 	/** Handle of the buffer to change the backing store advice */
1359*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1360*d83cc019SAndroid Build Coastguard Worker 
1361*d83cc019SAndroid Build Coastguard Worker 	/* Advice: either the buffer will be needed again in the near future,
1362*d83cc019SAndroid Build Coastguard Worker 	 *         or wont be and could be discarded under memory pressure.
1363*d83cc019SAndroid Build Coastguard Worker 	 */
1364*d83cc019SAndroid Build Coastguard Worker 	__u32 madv;
1365*d83cc019SAndroid Build Coastguard Worker 
1366*d83cc019SAndroid Build Coastguard Worker 	/** Whether the backing store still exists. */
1367*d83cc019SAndroid Build Coastguard Worker 	__u32 retained;
1368*d83cc019SAndroid Build Coastguard Worker };
1369*d83cc019SAndroid Build Coastguard Worker 
1370*d83cc019SAndroid Build Coastguard Worker /* flags */
1371*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_TYPE_MASK 		0xff
1372*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV_PLANAR 	0x01
1373*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV_PACKED 	0x02
1374*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB		0x03
1375*d83cc019SAndroid Build Coastguard Worker 
1376*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_DEPTH_MASK		0xff00
1377*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB24		0x1000
1378*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB16		0x2000
1379*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB15		0x3000
1380*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV422		0x0100
1381*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV411		0x0200
1382*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV420		0x0300
1383*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV410		0x0400
1384*d83cc019SAndroid Build Coastguard Worker 
1385*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_SWAP_MASK		0xff0000
1386*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_NO_SWAP		0x000000
1387*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_UV_SWAP		0x010000
1388*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_Y_SWAP		0x020000
1389*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_Y_AND_UV_SWAP	0x030000
1390*d83cc019SAndroid Build Coastguard Worker 
1391*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_FLAGS_MASK		0xff000000
1392*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_ENABLE		0x01000000
1393*d83cc019SAndroid Build Coastguard Worker 
1394*d83cc019SAndroid Build Coastguard Worker struct drm_intel_overlay_put_image {
1395*d83cc019SAndroid Build Coastguard Worker 	/* various flags and src format description */
1396*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1397*d83cc019SAndroid Build Coastguard Worker 	/* source picture description */
1398*d83cc019SAndroid Build Coastguard Worker 	__u32 bo_handle;
1399*d83cc019SAndroid Build Coastguard Worker 	/* stride values and offsets are in bytes, buffer relative */
1400*d83cc019SAndroid Build Coastguard Worker 	__u16 stride_Y; /* stride for packed formats */
1401*d83cc019SAndroid Build Coastguard Worker 	__u16 stride_UV;
1402*d83cc019SAndroid Build Coastguard Worker 	__u32 offset_Y; /* offset for packet formats */
1403*d83cc019SAndroid Build Coastguard Worker 	__u32 offset_U;
1404*d83cc019SAndroid Build Coastguard Worker 	__u32 offset_V;
1405*d83cc019SAndroid Build Coastguard Worker 	/* in pixels */
1406*d83cc019SAndroid Build Coastguard Worker 	__u16 src_width;
1407*d83cc019SAndroid Build Coastguard Worker 	__u16 src_height;
1408*d83cc019SAndroid Build Coastguard Worker 	/* to compensate the scaling factors for partially covered surfaces */
1409*d83cc019SAndroid Build Coastguard Worker 	__u16 src_scan_width;
1410*d83cc019SAndroid Build Coastguard Worker 	__u16 src_scan_height;
1411*d83cc019SAndroid Build Coastguard Worker 	/* output crtc description */
1412*d83cc019SAndroid Build Coastguard Worker 	__u32 crtc_id;
1413*d83cc019SAndroid Build Coastguard Worker 	__u16 dst_x;
1414*d83cc019SAndroid Build Coastguard Worker 	__u16 dst_y;
1415*d83cc019SAndroid Build Coastguard Worker 	__u16 dst_width;
1416*d83cc019SAndroid Build Coastguard Worker 	__u16 dst_height;
1417*d83cc019SAndroid Build Coastguard Worker };
1418*d83cc019SAndroid Build Coastguard Worker 
1419*d83cc019SAndroid Build Coastguard Worker /* flags */
1420*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_UPDATE_ATTRS	(1<<0)
1421*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_UPDATE_GAMMA	(1<<1)
1422*d83cc019SAndroid Build Coastguard Worker #define I915_OVERLAY_DISABLE_DEST_COLORKEY	(1<<2)
1423*d83cc019SAndroid Build Coastguard Worker struct drm_intel_overlay_attrs {
1424*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1425*d83cc019SAndroid Build Coastguard Worker 	__u32 color_key;
1426*d83cc019SAndroid Build Coastguard Worker 	__s32 brightness;
1427*d83cc019SAndroid Build Coastguard Worker 	__u32 contrast;
1428*d83cc019SAndroid Build Coastguard Worker 	__u32 saturation;
1429*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma0;
1430*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma1;
1431*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma2;
1432*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma3;
1433*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma4;
1434*d83cc019SAndroid Build Coastguard Worker 	__u32 gamma5;
1435*d83cc019SAndroid Build Coastguard Worker };
1436*d83cc019SAndroid Build Coastguard Worker 
1437*d83cc019SAndroid Build Coastguard Worker /*
1438*d83cc019SAndroid Build Coastguard Worker  * Intel sprite handling
1439*d83cc019SAndroid Build Coastguard Worker  *
1440*d83cc019SAndroid Build Coastguard Worker  * Color keying works with a min/mask/max tuple.  Both source and destination
1441*d83cc019SAndroid Build Coastguard Worker  * color keying is allowed.
1442*d83cc019SAndroid Build Coastguard Worker  *
1443*d83cc019SAndroid Build Coastguard Worker  * Source keying:
1444*d83cc019SAndroid Build Coastguard Worker  * Sprite pixels within the min & max values, masked against the color channels
1445*d83cc019SAndroid Build Coastguard Worker  * specified in the mask field, will be transparent.  All other pixels will
1446*d83cc019SAndroid Build Coastguard Worker  * be displayed on top of the primary plane.  For RGB surfaces, only the min
1447*d83cc019SAndroid Build Coastguard Worker  * and mask fields will be used; ranged compares are not allowed.
1448*d83cc019SAndroid Build Coastguard Worker  *
1449*d83cc019SAndroid Build Coastguard Worker  * Destination keying:
1450*d83cc019SAndroid Build Coastguard Worker  * Primary plane pixels that match the min value, masked against the color
1451*d83cc019SAndroid Build Coastguard Worker  * channels specified in the mask field, will be replaced by corresponding
1452*d83cc019SAndroid Build Coastguard Worker  * pixels from the sprite plane.
1453*d83cc019SAndroid Build Coastguard Worker  *
1454*d83cc019SAndroid Build Coastguard Worker  * Note that source & destination keying are exclusive; only one can be
1455*d83cc019SAndroid Build Coastguard Worker  * active on a given plane.
1456*d83cc019SAndroid Build Coastguard Worker  */
1457*d83cc019SAndroid Build Coastguard Worker 
1458*d83cc019SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_NONE		(1<<0) /* Deprecated. Instead set
1459*d83cc019SAndroid Build Coastguard Worker 						* flags==0 to disable colorkeying.
1460*d83cc019SAndroid Build Coastguard Worker 						*/
1461*d83cc019SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_DESTINATION	(1<<1)
1462*d83cc019SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_SOURCE	(1<<2)
1463*d83cc019SAndroid Build Coastguard Worker struct drm_intel_sprite_colorkey {
1464*d83cc019SAndroid Build Coastguard Worker 	__u32 plane_id;
1465*d83cc019SAndroid Build Coastguard Worker 	__u32 min_value;
1466*d83cc019SAndroid Build Coastguard Worker 	__u32 channel_mask;
1467*d83cc019SAndroid Build Coastguard Worker 	__u32 max_value;
1468*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1469*d83cc019SAndroid Build Coastguard Worker };
1470*d83cc019SAndroid Build Coastguard Worker 
1471*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_wait {
1472*d83cc019SAndroid Build Coastguard Worker 	/** Handle of BO we shall wait on */
1473*d83cc019SAndroid Build Coastguard Worker 	__u32 bo_handle;
1474*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1475*d83cc019SAndroid Build Coastguard Worker 	/** Number of nanoseconds to wait, Returns time remaining. */
1476*d83cc019SAndroid Build Coastguard Worker 	__s64 timeout_ns;
1477*d83cc019SAndroid Build Coastguard Worker };
1478*d83cc019SAndroid Build Coastguard Worker 
1479*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_create {
1480*d83cc019SAndroid Build Coastguard Worker 	__u32 ctx_id; /* output: id of new context*/
1481*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
1482*d83cc019SAndroid Build Coastguard Worker };
1483*d83cc019SAndroid Build Coastguard Worker 
1484*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_create_ext {
1485*d83cc019SAndroid Build Coastguard Worker 	__u32 ctx_id; /* output: id of new context*/
1486*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1487*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS	(1u << 0)
1488*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE	(1u << 1)
1489*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \
1490*d83cc019SAndroid Build Coastguard Worker 	(-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1))
1491*d83cc019SAndroid Build Coastguard Worker 	__u64 extensions;
1492*d83cc019SAndroid Build Coastguard Worker };
1493*d83cc019SAndroid Build Coastguard Worker 
1494*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_param {
1495*d83cc019SAndroid Build Coastguard Worker 	__u32 ctx_id;
1496*d83cc019SAndroid Build Coastguard Worker 	__u32 size;
1497*d83cc019SAndroid Build Coastguard Worker 	__u64 param;
1498*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_BAN_PERIOD	0x1
1499*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_NO_ZEROMAP	0x2
1500*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_GTT_SIZE	0x3
1501*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE	0x4
1502*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_BANNABLE	0x5
1503*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_PRIORITY	0x6
1504*d83cc019SAndroid Build Coastguard Worker #define   I915_CONTEXT_MAX_USER_PRIORITY	1023 /* inclusive */
1505*d83cc019SAndroid Build Coastguard Worker #define   I915_CONTEXT_DEFAULT_PRIORITY		0
1506*d83cc019SAndroid Build Coastguard Worker #define   I915_CONTEXT_MIN_USER_PRIORITY	-1023 /* inclusive */
1507*d83cc019SAndroid Build Coastguard Worker 	/*
1508*d83cc019SAndroid Build Coastguard Worker 	 * When using the following param, value should be a pointer to
1509*d83cc019SAndroid Build Coastguard Worker 	 * drm_i915_gem_context_param_sseu.
1510*d83cc019SAndroid Build Coastguard Worker 	 */
1511*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_SSEU		0x7
1512*d83cc019SAndroid Build Coastguard Worker 
1513*d83cc019SAndroid Build Coastguard Worker /*
1514*d83cc019SAndroid Build Coastguard Worker  * Not all clients may want to attempt automatic recover of a context after
1515*d83cc019SAndroid Build Coastguard Worker  * a hang (for example, some clients may only submit very small incremental
1516*d83cc019SAndroid Build Coastguard Worker  * batches relying on known logical state of previous batches which will never
1517*d83cc019SAndroid Build Coastguard Worker  * recover correctly and each attempt will hang), and so would prefer that
1518*d83cc019SAndroid Build Coastguard Worker  * the context is forever banned instead.
1519*d83cc019SAndroid Build Coastguard Worker  *
1520*d83cc019SAndroid Build Coastguard Worker  * If set to false (0), after a reset, subsequent (and in flight) rendering
1521*d83cc019SAndroid Build Coastguard Worker  * from this context is discarded, and the client will need to create a new
1522*d83cc019SAndroid Build Coastguard Worker  * context to use instead.
1523*d83cc019SAndroid Build Coastguard Worker  *
1524*d83cc019SAndroid Build Coastguard Worker  * If set to true (1), the kernel will automatically attempt to recover the
1525*d83cc019SAndroid Build Coastguard Worker  * context by skipping the hanging batch and executing the next batch starting
1526*d83cc019SAndroid Build Coastguard Worker  * from the default context state (discarding the incomplete logical context
1527*d83cc019SAndroid Build Coastguard Worker  * state lost due to the reset).
1528*d83cc019SAndroid Build Coastguard Worker  *
1529*d83cc019SAndroid Build Coastguard Worker  * On creation, all new contexts are marked as recoverable.
1530*d83cc019SAndroid Build Coastguard Worker  */
1531*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_RECOVERABLE	0x8
1532*d83cc019SAndroid Build Coastguard Worker 
1533*d83cc019SAndroid Build Coastguard Worker 	/*
1534*d83cc019SAndroid Build Coastguard Worker 	 * The id of the associated virtual memory address space (ppGTT) of
1535*d83cc019SAndroid Build Coastguard Worker 	 * this context. Can be retrieved and passed to another context
1536*d83cc019SAndroid Build Coastguard Worker 	 * (on the same fd) for both to use the same ppGTT and so share
1537*d83cc019SAndroid Build Coastguard Worker 	 * address layouts, and avoid reloading the page tables on context
1538*d83cc019SAndroid Build Coastguard Worker 	 * switches between themselves.
1539*d83cc019SAndroid Build Coastguard Worker 	 *
1540*d83cc019SAndroid Build Coastguard Worker 	 * See DRM_I915_GEM_VM_CREATE and DRM_I915_GEM_VM_DESTROY.
1541*d83cc019SAndroid Build Coastguard Worker 	 */
1542*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_VM		0x9
1543*d83cc019SAndroid Build Coastguard Worker 
1544*d83cc019SAndroid Build Coastguard Worker /*
1545*d83cc019SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_ENGINES:
1546*d83cc019SAndroid Build Coastguard Worker  *
1547*d83cc019SAndroid Build Coastguard Worker  * Bind this context to operate on this subset of available engines. Henceforth,
1548*d83cc019SAndroid Build Coastguard Worker  * the I915_EXEC_RING selector for DRM_IOCTL_I915_GEM_EXECBUFFER2 operates as
1549*d83cc019SAndroid Build Coastguard Worker  * an index into this array of engines; I915_EXEC_DEFAULT selecting engine[0]
1550*d83cc019SAndroid Build Coastguard Worker  * and upwards. Slots 0...N are filled in using the specified (class, instance).
1551*d83cc019SAndroid Build Coastguard Worker  * Use
1552*d83cc019SAndroid Build Coastguard Worker  *	engine_class: I915_ENGINE_CLASS_INVALID,
1553*d83cc019SAndroid Build Coastguard Worker  *	engine_instance: I915_ENGINE_CLASS_INVALID_NONE
1554*d83cc019SAndroid Build Coastguard Worker  * to specify a gap in the array that can be filled in later, e.g. by a
1555*d83cc019SAndroid Build Coastguard Worker  * virtual engine used for load balancing.
1556*d83cc019SAndroid Build Coastguard Worker  *
1557*d83cc019SAndroid Build Coastguard Worker  * Setting the number of engines bound to the context to 0, by passing a zero
1558*d83cc019SAndroid Build Coastguard Worker  * sized argument, will revert back to default settings.
1559*d83cc019SAndroid Build Coastguard Worker  *
1560*d83cc019SAndroid Build Coastguard Worker  * See struct i915_context_param_engines.
1561*d83cc019SAndroid Build Coastguard Worker  *
1562*d83cc019SAndroid Build Coastguard Worker  * Extensions:
1563*d83cc019SAndroid Build Coastguard Worker  *   i915_context_engines_load_balance (I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE)
1564*d83cc019SAndroid Build Coastguard Worker  *   i915_context_engines_bond (I915_CONTEXT_ENGINES_EXT_BOND)
1565*d83cc019SAndroid Build Coastguard Worker  */
1566*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_ENGINES	0xa
1567*d83cc019SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
1568*d83cc019SAndroid Build Coastguard Worker 
1569*d83cc019SAndroid Build Coastguard Worker 	__u64 value;
1570*d83cc019SAndroid Build Coastguard Worker };
1571*d83cc019SAndroid Build Coastguard Worker 
1572*d83cc019SAndroid Build Coastguard Worker /**
1573*d83cc019SAndroid Build Coastguard Worker  * Context SSEU programming
1574*d83cc019SAndroid Build Coastguard Worker  *
1575*d83cc019SAndroid Build Coastguard Worker  * It may be necessary for either functional or performance reason to configure
1576*d83cc019SAndroid Build Coastguard Worker  * a context to run with a reduced number of SSEU (where SSEU stands for Slice/
1577*d83cc019SAndroid Build Coastguard Worker  * Sub-slice/EU).
1578*d83cc019SAndroid Build Coastguard Worker  *
1579*d83cc019SAndroid Build Coastguard Worker  * This is done by configuring SSEU configuration using the below
1580*d83cc019SAndroid Build Coastguard Worker  * @struct drm_i915_gem_context_param_sseu for every supported engine which
1581*d83cc019SAndroid Build Coastguard Worker  * userspace intends to use.
1582*d83cc019SAndroid Build Coastguard Worker  *
1583*d83cc019SAndroid Build Coastguard Worker  * Not all GPUs or engines support this functionality in which case an error
1584*d83cc019SAndroid Build Coastguard Worker  * code -ENODEV will be returned.
1585*d83cc019SAndroid Build Coastguard Worker  *
1586*d83cc019SAndroid Build Coastguard Worker  * Also, flexibility of possible SSEU configuration permutations varies between
1587*d83cc019SAndroid Build Coastguard Worker  * GPU generations and software imposed limitations. Requesting such a
1588*d83cc019SAndroid Build Coastguard Worker  * combination will return an error code of -EINVAL.
1589*d83cc019SAndroid Build Coastguard Worker  *
1590*d83cc019SAndroid Build Coastguard Worker  * NOTE: When perf/OA is active the context's SSEU configuration is ignored in
1591*d83cc019SAndroid Build Coastguard Worker  * favour of a single global setting.
1592*d83cc019SAndroid Build Coastguard Worker  */
1593*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_param_sseu {
1594*d83cc019SAndroid Build Coastguard Worker 	/*
1595*d83cc019SAndroid Build Coastguard Worker 	 * Engine class & instance to be configured or queried.
1596*d83cc019SAndroid Build Coastguard Worker 	 */
1597*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engine;
1598*d83cc019SAndroid Build Coastguard Worker 
1599*d83cc019SAndroid Build Coastguard Worker 	/*
1600*d83cc019SAndroid Build Coastguard Worker 	 * Unknown flags must be cleared to zero.
1601*d83cc019SAndroid Build Coastguard Worker 	 */
1602*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1603*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_SSEU_FLAG_ENGINE_INDEX (1u << 0)
1604*d83cc019SAndroid Build Coastguard Worker 
1605*d83cc019SAndroid Build Coastguard Worker 	/*
1606*d83cc019SAndroid Build Coastguard Worker 	 * Mask of slices to enable for the context. Valid values are a subset
1607*d83cc019SAndroid Build Coastguard Worker 	 * of the bitmask value returned for I915_PARAM_SLICE_MASK.
1608*d83cc019SAndroid Build Coastguard Worker 	 */
1609*d83cc019SAndroid Build Coastguard Worker 	__u64 slice_mask;
1610*d83cc019SAndroid Build Coastguard Worker 
1611*d83cc019SAndroid Build Coastguard Worker 	/*
1612*d83cc019SAndroid Build Coastguard Worker 	 * Mask of subslices to enable for the context. Valid values are a
1613*d83cc019SAndroid Build Coastguard Worker 	 * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK.
1614*d83cc019SAndroid Build Coastguard Worker 	 */
1615*d83cc019SAndroid Build Coastguard Worker 	__u64 subslice_mask;
1616*d83cc019SAndroid Build Coastguard Worker 
1617*d83cc019SAndroid Build Coastguard Worker 	/*
1618*d83cc019SAndroid Build Coastguard Worker 	 * Minimum/Maximum number of EUs to enable per subslice for the
1619*d83cc019SAndroid Build Coastguard Worker 	 * context. min_eus_per_subslice must be inferior or equal to
1620*d83cc019SAndroid Build Coastguard Worker 	 * max_eus_per_subslice.
1621*d83cc019SAndroid Build Coastguard Worker 	 */
1622*d83cc019SAndroid Build Coastguard Worker 	__u16 min_eus_per_subslice;
1623*d83cc019SAndroid Build Coastguard Worker 	__u16 max_eus_per_subslice;
1624*d83cc019SAndroid Build Coastguard Worker 
1625*d83cc019SAndroid Build Coastguard Worker 	/*
1626*d83cc019SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
1627*d83cc019SAndroid Build Coastguard Worker 	 */
1628*d83cc019SAndroid Build Coastguard Worker 	__u32 rsvd;
1629*d83cc019SAndroid Build Coastguard Worker };
1630*d83cc019SAndroid Build Coastguard Worker 
1631*d83cc019SAndroid Build Coastguard Worker /*
1632*d83cc019SAndroid Build Coastguard Worker  * i915_context_engines_load_balance:
1633*d83cc019SAndroid Build Coastguard Worker  *
1634*d83cc019SAndroid Build Coastguard Worker  * Enable load balancing across this set of engines.
1635*d83cc019SAndroid Build Coastguard Worker  *
1636*d83cc019SAndroid Build Coastguard Worker  * Into the I915_EXEC_DEFAULT slot [0], a virtual engine is created that when
1637*d83cc019SAndroid Build Coastguard Worker  * used will proxy the execbuffer request onto one of the set of engines
1638*d83cc019SAndroid Build Coastguard Worker  * in such a way as to distribute the load evenly across the set.
1639*d83cc019SAndroid Build Coastguard Worker  *
1640*d83cc019SAndroid Build Coastguard Worker  * The set of engines must be compatible (e.g. the same HW class) as they
1641*d83cc019SAndroid Build Coastguard Worker  * will share the same logical GPU context and ring.
1642*d83cc019SAndroid Build Coastguard Worker  *
1643*d83cc019SAndroid Build Coastguard Worker  * To intermix rendering with the virtual engine and direct rendering onto
1644*d83cc019SAndroid Build Coastguard Worker  * the backing engines (bypassing the load balancing proxy), the context must
1645*d83cc019SAndroid Build Coastguard Worker  * be defined to use a single timeline for all engines.
1646*d83cc019SAndroid Build Coastguard Worker  */
1647*d83cc019SAndroid Build Coastguard Worker struct i915_context_engines_load_balance {
1648*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base;
1649*d83cc019SAndroid Build Coastguard Worker 
1650*d83cc019SAndroid Build Coastguard Worker 	__u16 engine_index;
1651*d83cc019SAndroid Build Coastguard Worker 	__u16 num_siblings;
1652*d83cc019SAndroid Build Coastguard Worker 	__u32 flags; /* all undefined flags must be zero */
1653*d83cc019SAndroid Build Coastguard Worker 
1654*d83cc019SAndroid Build Coastguard Worker 	__u64 mbz64; /* reserved for future use; must be zero */
1655*d83cc019SAndroid Build Coastguard Worker 
1656*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[0];
1657*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed));
1658*d83cc019SAndroid Build Coastguard Worker 
1659*d83cc019SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(name__, N__) struct { \
1660*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base; \
1661*d83cc019SAndroid Build Coastguard Worker 	__u16 engine_index; \
1662*d83cc019SAndroid Build Coastguard Worker 	__u16 num_siblings; \
1663*d83cc019SAndroid Build Coastguard Worker 	__u32 flags; \
1664*d83cc019SAndroid Build Coastguard Worker 	__u64 mbz64; \
1665*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
1666*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed)) name__
1667*d83cc019SAndroid Build Coastguard Worker 
1668*d83cc019SAndroid Build Coastguard Worker /*
1669*d83cc019SAndroid Build Coastguard Worker  * i915_context_engines_bond:
1670*d83cc019SAndroid Build Coastguard Worker  *
1671*d83cc019SAndroid Build Coastguard Worker  * Constructed bonded pairs for execution within a virtual engine.
1672*d83cc019SAndroid Build Coastguard Worker  *
1673*d83cc019SAndroid Build Coastguard Worker  * All engines are equal, but some are more equal than others. Given
1674*d83cc019SAndroid Build Coastguard Worker  * the distribution of resources in the HW, it may be preferable to run
1675*d83cc019SAndroid Build Coastguard Worker  * a request on a given subset of engines in parallel to a request on a
1676*d83cc019SAndroid Build Coastguard Worker  * specific engine. We enable this selection of engines within a virtual
1677*d83cc019SAndroid Build Coastguard Worker  * engine by specifying bonding pairs, for any given master engine we will
1678*d83cc019SAndroid Build Coastguard Worker  * only execute on one of the corresponding siblings within the virtual engine.
1679*d83cc019SAndroid Build Coastguard Worker  *
1680*d83cc019SAndroid Build Coastguard Worker  * To execute a request in parallel on the master engine and a sibling requires
1681*d83cc019SAndroid Build Coastguard Worker  * coordination with a I915_EXEC_FENCE_SUBMIT.
1682*d83cc019SAndroid Build Coastguard Worker  */
1683*d83cc019SAndroid Build Coastguard Worker struct i915_context_engines_bond {
1684*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base;
1685*d83cc019SAndroid Build Coastguard Worker 
1686*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance master;
1687*d83cc019SAndroid Build Coastguard Worker 
1688*d83cc019SAndroid Build Coastguard Worker 	__u16 virtual_index; /* index of virtual engine in ctx->engines[] */
1689*d83cc019SAndroid Build Coastguard Worker 	__u16 num_bonds;
1690*d83cc019SAndroid Build Coastguard Worker 
1691*d83cc019SAndroid Build Coastguard Worker 	__u64 flags; /* all undefined flags must be zero */
1692*d83cc019SAndroid Build Coastguard Worker 	__u64 mbz64[4]; /* reserved for future use; must be zero */
1693*d83cc019SAndroid Build Coastguard Worker 
1694*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[0];
1695*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed));
1696*d83cc019SAndroid Build Coastguard Worker 
1697*d83cc019SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_ENGINES_BOND(name__, N__) struct { \
1698*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base; \
1699*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance master; \
1700*d83cc019SAndroid Build Coastguard Worker 	__u16 virtual_index; \
1701*d83cc019SAndroid Build Coastguard Worker 	__u16 num_bonds; \
1702*d83cc019SAndroid Build Coastguard Worker 	__u64 flags; \
1703*d83cc019SAndroid Build Coastguard Worker 	__u64 mbz64[4]; \
1704*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
1705*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed)) name__
1706*d83cc019SAndroid Build Coastguard Worker 
1707*d83cc019SAndroid Build Coastguard Worker struct i915_context_param_engines {
1708*d83cc019SAndroid Build Coastguard Worker 	__u64 extensions; /* linked chain of extension blocks, 0 terminates */
1709*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE 0 /* see i915_context_engines_load_balance */
1710*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_ENGINES_EXT_BOND 1 /* see i915_context_engines_bond */
1711*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[0];
1712*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed));
1713*d83cc019SAndroid Build Coastguard Worker 
1714*d83cc019SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_PARAM_ENGINES(name__, N__) struct { \
1715*d83cc019SAndroid Build Coastguard Worker 	__u64 extensions; \
1716*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
1717*d83cc019SAndroid Build Coastguard Worker } __attribute__((packed)) name__
1718*d83cc019SAndroid Build Coastguard Worker 
1719*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_create_ext_setparam {
1720*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_EXT_SETPARAM 0
1721*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base;
1722*d83cc019SAndroid Build Coastguard Worker 	struct drm_i915_gem_context_param param;
1723*d83cc019SAndroid Build Coastguard Worker };
1724*d83cc019SAndroid Build Coastguard Worker 
1725*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_create_ext_clone {
1726*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_EXT_CLONE 1
1727*d83cc019SAndroid Build Coastguard Worker 	struct i915_user_extension base;
1728*d83cc019SAndroid Build Coastguard Worker 	__u32 clone_id;
1729*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1730*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_ENGINES	(1u << 0)
1731*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_FLAGS	(1u << 1)
1732*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_SCHEDATTR	(1u << 2)
1733*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_SSEU		(1u << 3)
1734*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_TIMELINE	(1u << 4)
1735*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_VM		(1u << 5)
1736*d83cc019SAndroid Build Coastguard Worker #define I915_CONTEXT_CLONE_UNKNOWN -(I915_CONTEXT_CLONE_VM << 1)
1737*d83cc019SAndroid Build Coastguard Worker 	__u64 rsvd;
1738*d83cc019SAndroid Build Coastguard Worker };
1739*d83cc019SAndroid Build Coastguard Worker 
1740*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_context_destroy {
1741*d83cc019SAndroid Build Coastguard Worker 	__u32 ctx_id;
1742*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
1743*d83cc019SAndroid Build Coastguard Worker };
1744*d83cc019SAndroid Build Coastguard Worker 
1745*d83cc019SAndroid Build Coastguard Worker /*
1746*d83cc019SAndroid Build Coastguard Worker  * DRM_I915_GEM_VM_CREATE -
1747*d83cc019SAndroid Build Coastguard Worker  *
1748*d83cc019SAndroid Build Coastguard Worker  * Create a new virtual memory address space (ppGTT) for use within a context
1749*d83cc019SAndroid Build Coastguard Worker  * on the same file. Extensions can be provided to configure exactly how the
1750*d83cc019SAndroid Build Coastguard Worker  * address space is setup upon creation.
1751*d83cc019SAndroid Build Coastguard Worker  *
1752*d83cc019SAndroid Build Coastguard Worker  * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is
1753*d83cc019SAndroid Build Coastguard Worker  * returned in the outparam @id.
1754*d83cc019SAndroid Build Coastguard Worker  *
1755*d83cc019SAndroid Build Coastguard Worker  * No flags are defined, with all bits reserved and must be zero.
1756*d83cc019SAndroid Build Coastguard Worker  *
1757*d83cc019SAndroid Build Coastguard Worker  * An extension chain maybe provided, starting with @extensions, and terminated
1758*d83cc019SAndroid Build Coastguard Worker  * by the @next_extension being 0. Currently, no extensions are defined.
1759*d83cc019SAndroid Build Coastguard Worker  *
1760*d83cc019SAndroid Build Coastguard Worker  * DRM_I915_GEM_VM_DESTROY -
1761*d83cc019SAndroid Build Coastguard Worker  *
1762*d83cc019SAndroid Build Coastguard Worker  * Destroys a previously created VM id, specified in @id.
1763*d83cc019SAndroid Build Coastguard Worker  *
1764*d83cc019SAndroid Build Coastguard Worker  * No extensions or flags are allowed currently, and so must be zero.
1765*d83cc019SAndroid Build Coastguard Worker  */
1766*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_vm_control {
1767*d83cc019SAndroid Build Coastguard Worker 	__u64 extensions;
1768*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1769*d83cc019SAndroid Build Coastguard Worker 	__u32 vm_id;
1770*d83cc019SAndroid Build Coastguard Worker };
1771*d83cc019SAndroid Build Coastguard Worker 
1772*d83cc019SAndroid Build Coastguard Worker struct drm_i915_reg_read {
1773*d83cc019SAndroid Build Coastguard Worker 	/*
1774*d83cc019SAndroid Build Coastguard Worker 	 * Register offset.
1775*d83cc019SAndroid Build Coastguard Worker 	 * For 64bit wide registers where the upper 32bits don't immediately
1776*d83cc019SAndroid Build Coastguard Worker 	 * follow the lower 32bits, the offset of the lower 32bits must
1777*d83cc019SAndroid Build Coastguard Worker 	 * be specified
1778*d83cc019SAndroid Build Coastguard Worker 	 */
1779*d83cc019SAndroid Build Coastguard Worker 	__u64 offset;
1780*d83cc019SAndroid Build Coastguard Worker #define I915_REG_READ_8B_WA (1ul << 0)
1781*d83cc019SAndroid Build Coastguard Worker 
1782*d83cc019SAndroid Build Coastguard Worker 	__u64 val; /* Return value */
1783*d83cc019SAndroid Build Coastguard Worker };
1784*d83cc019SAndroid Build Coastguard Worker 
1785*d83cc019SAndroid Build Coastguard Worker /* Known registers:
1786*d83cc019SAndroid Build Coastguard Worker  *
1787*d83cc019SAndroid Build Coastguard Worker  * Render engine timestamp - 0x2358 + 64bit - gen7+
1788*d83cc019SAndroid Build Coastguard Worker  * - Note this register returns an invalid value if using the default
1789*d83cc019SAndroid Build Coastguard Worker  *   single instruction 8byte read, in order to workaround that pass
1790*d83cc019SAndroid Build Coastguard Worker  *   flag I915_REG_READ_8B_WA in offset field.
1791*d83cc019SAndroid Build Coastguard Worker  *
1792*d83cc019SAndroid Build Coastguard Worker  */
1793*d83cc019SAndroid Build Coastguard Worker 
1794*d83cc019SAndroid Build Coastguard Worker struct drm_i915_reset_stats {
1795*d83cc019SAndroid Build Coastguard Worker 	__u32 ctx_id;
1796*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1797*d83cc019SAndroid Build Coastguard Worker 
1798*d83cc019SAndroid Build Coastguard Worker 	/* All resets since boot/module reload, for all contexts */
1799*d83cc019SAndroid Build Coastguard Worker 	__u32 reset_count;
1800*d83cc019SAndroid Build Coastguard Worker 
1801*d83cc019SAndroid Build Coastguard Worker 	/* Number of batches lost when active in GPU, for this context */
1802*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_active;
1803*d83cc019SAndroid Build Coastguard Worker 
1804*d83cc019SAndroid Build Coastguard Worker 	/* Number of batches lost pending for execution, for this context */
1805*d83cc019SAndroid Build Coastguard Worker 	__u32 batch_pending;
1806*d83cc019SAndroid Build Coastguard Worker 
1807*d83cc019SAndroid Build Coastguard Worker 	__u32 pad;
1808*d83cc019SAndroid Build Coastguard Worker };
1809*d83cc019SAndroid Build Coastguard Worker 
1810*d83cc019SAndroid Build Coastguard Worker struct drm_i915_gem_userptr {
1811*d83cc019SAndroid Build Coastguard Worker 	__u64 user_ptr;
1812*d83cc019SAndroid Build Coastguard Worker 	__u64 user_size;
1813*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1814*d83cc019SAndroid Build Coastguard Worker #define I915_USERPTR_READ_ONLY 0x1
1815*d83cc019SAndroid Build Coastguard Worker #define I915_USERPTR_UNSYNCHRONIZED 0x80000000
1816*d83cc019SAndroid Build Coastguard Worker 	/**
1817*d83cc019SAndroid Build Coastguard Worker 	 * Returned handle for the object.
1818*d83cc019SAndroid Build Coastguard Worker 	 *
1819*d83cc019SAndroid Build Coastguard Worker 	 * Object handles are nonzero.
1820*d83cc019SAndroid Build Coastguard Worker 	 */
1821*d83cc019SAndroid Build Coastguard Worker 	__u32 handle;
1822*d83cc019SAndroid Build Coastguard Worker };
1823*d83cc019SAndroid Build Coastguard Worker 
1824*d83cc019SAndroid Build Coastguard Worker enum drm_i915_oa_format {
1825*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A13 = 1,	    /* HSW only */
1826*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A29,	    /* HSW only */
1827*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A13_B8_C8,   /* HSW only */
1828*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_B4_C8,	    /* HSW only */
1829*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A45_B8_C8,   /* HSW only */
1830*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_B4_C8_A16,   /* HSW only */
1831*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_C4_B8,	    /* HSW+ */
1832*d83cc019SAndroid Build Coastguard Worker 
1833*d83cc019SAndroid Build Coastguard Worker 	/* Gen8+ */
1834*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A12,
1835*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A12_B8_C8,
1836*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A32u40_A4u32_B8_C8,
1837*d83cc019SAndroid Build Coastguard Worker 
1838*d83cc019SAndroid Build Coastguard Worker 	I915_OA_FORMAT_MAX	    /* non-ABI */
1839*d83cc019SAndroid Build Coastguard Worker };
1840*d83cc019SAndroid Build Coastguard Worker 
1841*d83cc019SAndroid Build Coastguard Worker enum drm_i915_perf_property_id {
1842*d83cc019SAndroid Build Coastguard Worker 	/**
1843*d83cc019SAndroid Build Coastguard Worker 	 * Open the stream for a specific context handle (as used with
1844*d83cc019SAndroid Build Coastguard Worker 	 * execbuffer2). A stream opened for a specific context this way
1845*d83cc019SAndroid Build Coastguard Worker 	 * won't typically require root privileges.
1846*d83cc019SAndroid Build Coastguard Worker 	 */
1847*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_CTX_HANDLE = 1,
1848*d83cc019SAndroid Build Coastguard Worker 
1849*d83cc019SAndroid Build Coastguard Worker 	/**
1850*d83cc019SAndroid Build Coastguard Worker 	 * A value of 1 requests the inclusion of raw OA unit reports as
1851*d83cc019SAndroid Build Coastguard Worker 	 * part of stream samples.
1852*d83cc019SAndroid Build Coastguard Worker 	 */
1853*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_SAMPLE_OA,
1854*d83cc019SAndroid Build Coastguard Worker 
1855*d83cc019SAndroid Build Coastguard Worker 	/**
1856*d83cc019SAndroid Build Coastguard Worker 	 * The value specifies which set of OA unit metrics should be
1857*d83cc019SAndroid Build Coastguard Worker 	 * be configured, defining the contents of any OA unit reports.
1858*d83cc019SAndroid Build Coastguard Worker 	 */
1859*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_METRICS_SET,
1860*d83cc019SAndroid Build Coastguard Worker 
1861*d83cc019SAndroid Build Coastguard Worker 	/**
1862*d83cc019SAndroid Build Coastguard Worker 	 * The value specifies the size and layout of OA unit reports.
1863*d83cc019SAndroid Build Coastguard Worker 	 */
1864*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_FORMAT,
1865*d83cc019SAndroid Build Coastguard Worker 
1866*d83cc019SAndroid Build Coastguard Worker 	/**
1867*d83cc019SAndroid Build Coastguard Worker 	 * Specifying this property implicitly requests periodic OA unit
1868*d83cc019SAndroid Build Coastguard Worker 	 * sampling and (at least on Haswell) the sampling frequency is derived
1869*d83cc019SAndroid Build Coastguard Worker 	 * from this exponent as follows:
1870*d83cc019SAndroid Build Coastguard Worker 	 *
1871*d83cc019SAndroid Build Coastguard Worker 	 *   80ns * 2^(period_exponent + 1)
1872*d83cc019SAndroid Build Coastguard Worker 	 */
1873*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_EXPONENT,
1874*d83cc019SAndroid Build Coastguard Worker 
1875*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_MAX /* non-ABI */
1876*d83cc019SAndroid Build Coastguard Worker };
1877*d83cc019SAndroid Build Coastguard Worker 
1878*d83cc019SAndroid Build Coastguard Worker struct drm_i915_perf_open_param {
1879*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
1880*d83cc019SAndroid Build Coastguard Worker #define I915_PERF_FLAG_FD_CLOEXEC	(1<<0)
1881*d83cc019SAndroid Build Coastguard Worker #define I915_PERF_FLAG_FD_NONBLOCK	(1<<1)
1882*d83cc019SAndroid Build Coastguard Worker #define I915_PERF_FLAG_DISABLED		(1<<2)
1883*d83cc019SAndroid Build Coastguard Worker 
1884*d83cc019SAndroid Build Coastguard Worker 	/** The number of u64 (id, value) pairs */
1885*d83cc019SAndroid Build Coastguard Worker 	__u32 num_properties;
1886*d83cc019SAndroid Build Coastguard Worker 
1887*d83cc019SAndroid Build Coastguard Worker 	/**
1888*d83cc019SAndroid Build Coastguard Worker 	 * Pointer to array of u64 (id, value) pairs configuring the stream
1889*d83cc019SAndroid Build Coastguard Worker 	 * to open.
1890*d83cc019SAndroid Build Coastguard Worker 	 */
1891*d83cc019SAndroid Build Coastguard Worker 	__u64 properties_ptr;
1892*d83cc019SAndroid Build Coastguard Worker };
1893*d83cc019SAndroid Build Coastguard Worker 
1894*d83cc019SAndroid Build Coastguard Worker /**
1895*d83cc019SAndroid Build Coastguard Worker  * Enable data capture for a stream that was either opened in a disabled state
1896*d83cc019SAndroid Build Coastguard Worker  * via I915_PERF_FLAG_DISABLED or was later disabled via
1897*d83cc019SAndroid Build Coastguard Worker  * I915_PERF_IOCTL_DISABLE.
1898*d83cc019SAndroid Build Coastguard Worker  *
1899*d83cc019SAndroid Build Coastguard Worker  * It is intended to be cheaper to disable and enable a stream than it may be
1900*d83cc019SAndroid Build Coastguard Worker  * to close and re-open a stream with the same configuration.
1901*d83cc019SAndroid Build Coastguard Worker  *
1902*d83cc019SAndroid Build Coastguard Worker  * It's undefined whether any pending data for the stream will be lost.
1903*d83cc019SAndroid Build Coastguard Worker  */
1904*d83cc019SAndroid Build Coastguard Worker #define I915_PERF_IOCTL_ENABLE	_IO('i', 0x0)
1905*d83cc019SAndroid Build Coastguard Worker 
1906*d83cc019SAndroid Build Coastguard Worker /**
1907*d83cc019SAndroid Build Coastguard Worker  * Disable data capture for a stream.
1908*d83cc019SAndroid Build Coastguard Worker  *
1909*d83cc019SAndroid Build Coastguard Worker  * It is an error to try and read a stream that is disabled.
1910*d83cc019SAndroid Build Coastguard Worker  */
1911*d83cc019SAndroid Build Coastguard Worker #define I915_PERF_IOCTL_DISABLE	_IO('i', 0x1)
1912*d83cc019SAndroid Build Coastguard Worker 
1913*d83cc019SAndroid Build Coastguard Worker /**
1914*d83cc019SAndroid Build Coastguard Worker  * Common to all i915 perf records
1915*d83cc019SAndroid Build Coastguard Worker  */
1916*d83cc019SAndroid Build Coastguard Worker struct drm_i915_perf_record_header {
1917*d83cc019SAndroid Build Coastguard Worker 	__u32 type;
1918*d83cc019SAndroid Build Coastguard Worker 	__u16 pad;
1919*d83cc019SAndroid Build Coastguard Worker 	__u16 size;
1920*d83cc019SAndroid Build Coastguard Worker };
1921*d83cc019SAndroid Build Coastguard Worker 
1922*d83cc019SAndroid Build Coastguard Worker enum drm_i915_perf_record_type {
1923*d83cc019SAndroid Build Coastguard Worker 
1924*d83cc019SAndroid Build Coastguard Worker 	/**
1925*d83cc019SAndroid Build Coastguard Worker 	 * Samples are the work horse record type whose contents are extensible
1926*d83cc019SAndroid Build Coastguard Worker 	 * and defined when opening an i915 perf stream based on the given
1927*d83cc019SAndroid Build Coastguard Worker 	 * properties.
1928*d83cc019SAndroid Build Coastguard Worker 	 *
1929*d83cc019SAndroid Build Coastguard Worker 	 * Boolean properties following the naming convention
1930*d83cc019SAndroid Build Coastguard Worker 	 * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in
1931*d83cc019SAndroid Build Coastguard Worker 	 * every sample.
1932*d83cc019SAndroid Build Coastguard Worker 	 *
1933*d83cc019SAndroid Build Coastguard Worker 	 * The order of these sample properties given by userspace has no
1934*d83cc019SAndroid Build Coastguard Worker 	 * affect on the ordering of data within a sample. The order is
1935*d83cc019SAndroid Build Coastguard Worker 	 * documented here.
1936*d83cc019SAndroid Build Coastguard Worker 	 *
1937*d83cc019SAndroid Build Coastguard Worker 	 * struct {
1938*d83cc019SAndroid Build Coastguard Worker 	 *     struct drm_i915_perf_record_header header;
1939*d83cc019SAndroid Build Coastguard Worker 	 *
1940*d83cc019SAndroid Build Coastguard Worker 	 *     { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA
1941*d83cc019SAndroid Build Coastguard Worker 	 * };
1942*d83cc019SAndroid Build Coastguard Worker 	 */
1943*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_SAMPLE = 1,
1944*d83cc019SAndroid Build Coastguard Worker 
1945*d83cc019SAndroid Build Coastguard Worker 	/*
1946*d83cc019SAndroid Build Coastguard Worker 	 * Indicates that one or more OA reports were not written by the
1947*d83cc019SAndroid Build Coastguard Worker 	 * hardware. This can happen for example if an MI_REPORT_PERF_COUNT
1948*d83cc019SAndroid Build Coastguard Worker 	 * command collides with periodic sampling - which would be more likely
1949*d83cc019SAndroid Build Coastguard Worker 	 * at higher sampling frequencies.
1950*d83cc019SAndroid Build Coastguard Worker 	 */
1951*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2,
1952*d83cc019SAndroid Build Coastguard Worker 
1953*d83cc019SAndroid Build Coastguard Worker 	/**
1954*d83cc019SAndroid Build Coastguard Worker 	 * An error occurred that resulted in all pending OA reports being lost.
1955*d83cc019SAndroid Build Coastguard Worker 	 */
1956*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3,
1957*d83cc019SAndroid Build Coastguard Worker 
1958*d83cc019SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_MAX /* non-ABI */
1959*d83cc019SAndroid Build Coastguard Worker };
1960*d83cc019SAndroid Build Coastguard Worker 
1961*d83cc019SAndroid Build Coastguard Worker /**
1962*d83cc019SAndroid Build Coastguard Worker  * Structure to upload perf dynamic configuration into the kernel.
1963*d83cc019SAndroid Build Coastguard Worker  */
1964*d83cc019SAndroid Build Coastguard Worker struct drm_i915_perf_oa_config {
1965*d83cc019SAndroid Build Coastguard Worker 	/** String formatted like "%08x-%04x-%04x-%04x-%012x" */
1966*d83cc019SAndroid Build Coastguard Worker 	char uuid[36];
1967*d83cc019SAndroid Build Coastguard Worker 
1968*d83cc019SAndroid Build Coastguard Worker 	__u32 n_mux_regs;
1969*d83cc019SAndroid Build Coastguard Worker 	__u32 n_boolean_regs;
1970*d83cc019SAndroid Build Coastguard Worker 	__u32 n_flex_regs;
1971*d83cc019SAndroid Build Coastguard Worker 
1972*d83cc019SAndroid Build Coastguard Worker 	/*
1973*d83cc019SAndroid Build Coastguard Worker 	 * These fields are pointers to tuples of u32 values (register address,
1974*d83cc019SAndroid Build Coastguard Worker 	 * value). For example the expected length of the buffer pointed by
1975*d83cc019SAndroid Build Coastguard Worker 	 * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs).
1976*d83cc019SAndroid Build Coastguard Worker 	 */
1977*d83cc019SAndroid Build Coastguard Worker 	__u64 mux_regs_ptr;
1978*d83cc019SAndroid Build Coastguard Worker 	__u64 boolean_regs_ptr;
1979*d83cc019SAndroid Build Coastguard Worker 	__u64 flex_regs_ptr;
1980*d83cc019SAndroid Build Coastguard Worker };
1981*d83cc019SAndroid Build Coastguard Worker 
1982*d83cc019SAndroid Build Coastguard Worker struct drm_i915_query_item {
1983*d83cc019SAndroid Build Coastguard Worker 	__u64 query_id;
1984*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_QUERY_TOPOLOGY_INFO    1
1985*d83cc019SAndroid Build Coastguard Worker #define DRM_I915_QUERY_ENGINE_INFO	2
1986*d83cc019SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
1987*d83cc019SAndroid Build Coastguard Worker 
1988*d83cc019SAndroid Build Coastguard Worker 	/*
1989*d83cc019SAndroid Build Coastguard Worker 	 * When set to zero by userspace, this is filled with the size of the
1990*d83cc019SAndroid Build Coastguard Worker 	 * data to be written at the data_ptr pointer. The kernel sets this
1991*d83cc019SAndroid Build Coastguard Worker 	 * value to a negative value to signal an error on a particular query
1992*d83cc019SAndroid Build Coastguard Worker 	 * item.
1993*d83cc019SAndroid Build Coastguard Worker 	 */
1994*d83cc019SAndroid Build Coastguard Worker 	__s32 length;
1995*d83cc019SAndroid Build Coastguard Worker 
1996*d83cc019SAndroid Build Coastguard Worker 	/*
1997*d83cc019SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
1998*d83cc019SAndroid Build Coastguard Worker 	 */
1999*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
2000*d83cc019SAndroid Build Coastguard Worker 
2001*d83cc019SAndroid Build Coastguard Worker 	/*
2002*d83cc019SAndroid Build Coastguard Worker 	 * Data will be written at the location pointed by data_ptr when the
2003*d83cc019SAndroid Build Coastguard Worker 	 * value of length matches the length of the data to be written by the
2004*d83cc019SAndroid Build Coastguard Worker 	 * kernel.
2005*d83cc019SAndroid Build Coastguard Worker 	 */
2006*d83cc019SAndroid Build Coastguard Worker 	__u64 data_ptr;
2007*d83cc019SAndroid Build Coastguard Worker };
2008*d83cc019SAndroid Build Coastguard Worker 
2009*d83cc019SAndroid Build Coastguard Worker struct drm_i915_query {
2010*d83cc019SAndroid Build Coastguard Worker 	__u32 num_items;
2011*d83cc019SAndroid Build Coastguard Worker 
2012*d83cc019SAndroid Build Coastguard Worker 	/*
2013*d83cc019SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
2014*d83cc019SAndroid Build Coastguard Worker 	 */
2015*d83cc019SAndroid Build Coastguard Worker 	__u32 flags;
2016*d83cc019SAndroid Build Coastguard Worker 
2017*d83cc019SAndroid Build Coastguard Worker 	/*
2018*d83cc019SAndroid Build Coastguard Worker 	 * This points to an array of num_items drm_i915_query_item structures.
2019*d83cc019SAndroid Build Coastguard Worker 	 */
2020*d83cc019SAndroid Build Coastguard Worker 	__u64 items_ptr;
2021*d83cc019SAndroid Build Coastguard Worker };
2022*d83cc019SAndroid Build Coastguard Worker 
2023*d83cc019SAndroid Build Coastguard Worker /*
2024*d83cc019SAndroid Build Coastguard Worker  * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO :
2025*d83cc019SAndroid Build Coastguard Worker  *
2026*d83cc019SAndroid Build Coastguard Worker  * data: contains the 3 pieces of information :
2027*d83cc019SAndroid Build Coastguard Worker  *
2028*d83cc019SAndroid Build Coastguard Worker  * - the slice mask with one bit per slice telling whether a slice is
2029*d83cc019SAndroid Build Coastguard Worker  *   available. The availability of slice X can be queried with the following
2030*d83cc019SAndroid Build Coastguard Worker  *   formula :
2031*d83cc019SAndroid Build Coastguard Worker  *
2032*d83cc019SAndroid Build Coastguard Worker  *           (data[X / 8] >> (X % 8)) & 1
2033*d83cc019SAndroid Build Coastguard Worker  *
2034*d83cc019SAndroid Build Coastguard Worker  * - the subslice mask for each slice with one bit per subslice telling
2035*d83cc019SAndroid Build Coastguard Worker  *   whether a subslice is available. The availability of subslice Y in slice
2036*d83cc019SAndroid Build Coastguard Worker  *   X can be queried with the following formula :
2037*d83cc019SAndroid Build Coastguard Worker  *
2038*d83cc019SAndroid Build Coastguard Worker  *           (data[subslice_offset +
2039*d83cc019SAndroid Build Coastguard Worker  *                 X * subslice_stride +
2040*d83cc019SAndroid Build Coastguard Worker  *                 Y / 8] >> (Y % 8)) & 1
2041*d83cc019SAndroid Build Coastguard Worker  *
2042*d83cc019SAndroid Build Coastguard Worker  * - the EU mask for each subslice in each slice with one bit per EU telling
2043*d83cc019SAndroid Build Coastguard Worker  *   whether an EU is available. The availability of EU Z in subslice Y in
2044*d83cc019SAndroid Build Coastguard Worker  *   slice X can be queried with the following formula :
2045*d83cc019SAndroid Build Coastguard Worker  *
2046*d83cc019SAndroid Build Coastguard Worker  *           (data[eu_offset +
2047*d83cc019SAndroid Build Coastguard Worker  *                 (X * max_subslices + Y) * eu_stride +
2048*d83cc019SAndroid Build Coastguard Worker  *                 Z / 8] >> (Z % 8)) & 1
2049*d83cc019SAndroid Build Coastguard Worker  */
2050*d83cc019SAndroid Build Coastguard Worker struct drm_i915_query_topology_info {
2051*d83cc019SAndroid Build Coastguard Worker 	/*
2052*d83cc019SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
2053*d83cc019SAndroid Build Coastguard Worker 	 */
2054*d83cc019SAndroid Build Coastguard Worker 	__u16 flags;
2055*d83cc019SAndroid Build Coastguard Worker 
2056*d83cc019SAndroid Build Coastguard Worker 	__u16 max_slices;
2057*d83cc019SAndroid Build Coastguard Worker 	__u16 max_subslices;
2058*d83cc019SAndroid Build Coastguard Worker 	__u16 max_eus_per_subslice;
2059*d83cc019SAndroid Build Coastguard Worker 
2060*d83cc019SAndroid Build Coastguard Worker 	/*
2061*d83cc019SAndroid Build Coastguard Worker 	 * Offset in data[] at which the subslice masks are stored.
2062*d83cc019SAndroid Build Coastguard Worker 	 */
2063*d83cc019SAndroid Build Coastguard Worker 	__u16 subslice_offset;
2064*d83cc019SAndroid Build Coastguard Worker 
2065*d83cc019SAndroid Build Coastguard Worker 	/*
2066*d83cc019SAndroid Build Coastguard Worker 	 * Stride at which each of the subslice masks for each slice are
2067*d83cc019SAndroid Build Coastguard Worker 	 * stored.
2068*d83cc019SAndroid Build Coastguard Worker 	 */
2069*d83cc019SAndroid Build Coastguard Worker 	__u16 subslice_stride;
2070*d83cc019SAndroid Build Coastguard Worker 
2071*d83cc019SAndroid Build Coastguard Worker 	/*
2072*d83cc019SAndroid Build Coastguard Worker 	 * Offset in data[] at which the EU masks are stored.
2073*d83cc019SAndroid Build Coastguard Worker 	 */
2074*d83cc019SAndroid Build Coastguard Worker 	__u16 eu_offset;
2075*d83cc019SAndroid Build Coastguard Worker 
2076*d83cc019SAndroid Build Coastguard Worker 	/*
2077*d83cc019SAndroid Build Coastguard Worker 	 * Stride at which each of the EU masks for each subslice are stored.
2078*d83cc019SAndroid Build Coastguard Worker 	 */
2079*d83cc019SAndroid Build Coastguard Worker 	__u16 eu_stride;
2080*d83cc019SAndroid Build Coastguard Worker 
2081*d83cc019SAndroid Build Coastguard Worker 	__u8 data[];
2082*d83cc019SAndroid Build Coastguard Worker };
2083*d83cc019SAndroid Build Coastguard Worker 
2084*d83cc019SAndroid Build Coastguard Worker /**
2085*d83cc019SAndroid Build Coastguard Worker  * struct drm_i915_engine_info
2086*d83cc019SAndroid Build Coastguard Worker  *
2087*d83cc019SAndroid Build Coastguard Worker  * Describes one engine and it's capabilities as known to the driver.
2088*d83cc019SAndroid Build Coastguard Worker  */
2089*d83cc019SAndroid Build Coastguard Worker struct drm_i915_engine_info {
2090*d83cc019SAndroid Build Coastguard Worker 	/** Engine class and instance. */
2091*d83cc019SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engine;
2092*d83cc019SAndroid Build Coastguard Worker 
2093*d83cc019SAndroid Build Coastguard Worker 	/** Reserved field. */
2094*d83cc019SAndroid Build Coastguard Worker 	__u32 rsvd0;
2095*d83cc019SAndroid Build Coastguard Worker 
2096*d83cc019SAndroid Build Coastguard Worker 	/** Engine flags. */
2097*d83cc019SAndroid Build Coastguard Worker 	__u64 flags;
2098*d83cc019SAndroid Build Coastguard Worker 
2099*d83cc019SAndroid Build Coastguard Worker 	/** Capabilities of this engine. */
2100*d83cc019SAndroid Build Coastguard Worker 	__u64 capabilities;
2101*d83cc019SAndroid Build Coastguard Worker #define I915_VIDEO_CLASS_CAPABILITY_HEVC		(1 << 0)
2102*d83cc019SAndroid Build Coastguard Worker #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC	(1 << 1)
2103*d83cc019SAndroid Build Coastguard Worker 
2104*d83cc019SAndroid Build Coastguard Worker 	/** Reserved fields. */
2105*d83cc019SAndroid Build Coastguard Worker 	__u64 rsvd1[4];
2106*d83cc019SAndroid Build Coastguard Worker };
2107*d83cc019SAndroid Build Coastguard Worker 
2108*d83cc019SAndroid Build Coastguard Worker /**
2109*d83cc019SAndroid Build Coastguard Worker  * struct drm_i915_query_engine_info
2110*d83cc019SAndroid Build Coastguard Worker  *
2111*d83cc019SAndroid Build Coastguard Worker  * Engine info query enumerates all engines known to the driver by filling in
2112*d83cc019SAndroid Build Coastguard Worker  * an array of struct drm_i915_engine_info structures.
2113*d83cc019SAndroid Build Coastguard Worker  */
2114*d83cc019SAndroid Build Coastguard Worker struct drm_i915_query_engine_info {
2115*d83cc019SAndroid Build Coastguard Worker 	/** Number of struct drm_i915_engine_info structs following. */
2116*d83cc019SAndroid Build Coastguard Worker 	__u32 num_engines;
2117*d83cc019SAndroid Build Coastguard Worker 
2118*d83cc019SAndroid Build Coastguard Worker 	/** MBZ */
2119*d83cc019SAndroid Build Coastguard Worker 	__u32 rsvd[3];
2120*d83cc019SAndroid Build Coastguard Worker 
2121*d83cc019SAndroid Build Coastguard Worker 	/** Marker for drm_i915_engine_info structures. */
2122*d83cc019SAndroid Build Coastguard Worker 	struct drm_i915_engine_info engines[];
2123*d83cc019SAndroid Build Coastguard Worker };
2124*d83cc019SAndroid Build Coastguard Worker 
2125*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus)
2126*d83cc019SAndroid Build Coastguard Worker }
2127*d83cc019SAndroid Build Coastguard Worker #endif
2128*d83cc019SAndroid Build Coastguard Worker 
2129*d83cc019SAndroid Build Coastguard Worker #endif /* _I915_DRM_H_ */
2130