xref: /aosp_15_r20/external/libdrm/include/drm/i915_drm.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
3*7688df22SAndroid Build Coastguard Worker  * All Rights Reserved.
4*7688df22SAndroid Build Coastguard Worker  *
5*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the
7*7688df22SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
8*7688df22SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
9*7688df22SAndroid Build Coastguard Worker  * distribute, sub license, and/or sell copies of the Software, and to
10*7688df22SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
11*7688df22SAndroid Build Coastguard Worker  * the following conditions:
12*7688df22SAndroid Build Coastguard Worker  *
13*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
14*7688df22SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial portions
15*7688df22SAndroid Build Coastguard Worker  * of the Software.
16*7688df22SAndroid Build Coastguard Worker  *
17*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*7688df22SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19*7688df22SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20*7688df22SAndroid Build Coastguard Worker  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
21*7688df22SAndroid Build Coastguard Worker  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22*7688df22SAndroid Build Coastguard Worker  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23*7688df22SAndroid Build Coastguard Worker  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24*7688df22SAndroid Build Coastguard Worker  *
25*7688df22SAndroid Build Coastguard Worker  */
26*7688df22SAndroid Build Coastguard Worker 
27*7688df22SAndroid Build Coastguard Worker #ifndef _I915_DRM_H_
28*7688df22SAndroid Build Coastguard Worker #define _I915_DRM_H_
29*7688df22SAndroid Build Coastguard Worker 
30*7688df22SAndroid Build Coastguard Worker #include "drm.h"
31*7688df22SAndroid Build Coastguard Worker 
32*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
33*7688df22SAndroid Build Coastguard Worker extern "C" {
34*7688df22SAndroid Build Coastguard Worker #endif
35*7688df22SAndroid Build Coastguard Worker 
36*7688df22SAndroid Build Coastguard Worker /* Please note that modifications to all structs defined here are
37*7688df22SAndroid Build Coastguard Worker  * subject to backwards-compatibility constraints.
38*7688df22SAndroid Build Coastguard Worker  */
39*7688df22SAndroid Build Coastguard Worker 
40*7688df22SAndroid Build Coastguard Worker /**
41*7688df22SAndroid Build Coastguard Worker  * DOC: uevents generated by i915 on it's device node
42*7688df22SAndroid Build Coastguard Worker  *
43*7688df22SAndroid Build Coastguard Worker  * I915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch
44*7688df22SAndroid Build Coastguard Worker  *	event from the gpu l3 cache. Additional information supplied is ROW,
45*7688df22SAndroid Build Coastguard Worker  *	BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep
46*7688df22SAndroid Build Coastguard Worker  *	track of these events and if a specific cache-line seems to have a
47*7688df22SAndroid Build Coastguard Worker  *	persistent error remap it with the l3 remapping tool supplied in
48*7688df22SAndroid Build Coastguard Worker  *	intel-gpu-tools.  The value supplied with the event is always 1.
49*7688df22SAndroid Build Coastguard Worker  *
50*7688df22SAndroid Build Coastguard Worker  * I915_ERROR_UEVENT - Generated upon error detection, currently only via
51*7688df22SAndroid Build Coastguard Worker  *	hangcheck. The error detection event is a good indicator of when things
52*7688df22SAndroid Build Coastguard Worker  *	began to go badly. The value supplied with the event is a 1 upon error
53*7688df22SAndroid Build Coastguard Worker  *	detection, and a 0 upon reset completion, signifying no more error
54*7688df22SAndroid Build Coastguard Worker  *	exists. NOTE: Disabling hangcheck or reset via module parameter will
55*7688df22SAndroid Build Coastguard Worker  *	cause the related events to not be seen.
56*7688df22SAndroid Build Coastguard Worker  *
57*7688df22SAndroid Build Coastguard Worker  * I915_RESET_UEVENT - Event is generated just before an attempt to reset the
58*7688df22SAndroid Build Coastguard Worker  *	GPU. The value supplied with the event is always 1. NOTE: Disable
59*7688df22SAndroid Build Coastguard Worker  *	reset via module parameter will cause this event to not be seen.
60*7688df22SAndroid Build Coastguard Worker  */
61*7688df22SAndroid Build Coastguard Worker #define I915_L3_PARITY_UEVENT		"L3_PARITY_ERROR"
62*7688df22SAndroid Build Coastguard Worker #define I915_ERROR_UEVENT		"ERROR"
63*7688df22SAndroid Build Coastguard Worker #define I915_RESET_UEVENT		"RESET"
64*7688df22SAndroid Build Coastguard Worker 
65*7688df22SAndroid Build Coastguard Worker /**
66*7688df22SAndroid Build Coastguard Worker  * struct i915_user_extension - Base class for defining a chain of extensions
67*7688df22SAndroid Build Coastguard Worker  *
68*7688df22SAndroid Build Coastguard Worker  * Many interfaces need to grow over time. In most cases we can simply
69*7688df22SAndroid Build Coastguard Worker  * extend the struct and have userspace pass in more data. Another option,
70*7688df22SAndroid Build Coastguard Worker  * as demonstrated by Vulkan's approach to providing extensions for forward
71*7688df22SAndroid Build Coastguard Worker  * and backward compatibility, is to use a list of optional structs to
72*7688df22SAndroid Build Coastguard Worker  * provide those extra details.
73*7688df22SAndroid Build Coastguard Worker  *
74*7688df22SAndroid Build Coastguard Worker  * The key advantage to using an extension chain is that it allows us to
75*7688df22SAndroid Build Coastguard Worker  * redefine the interface more easily than an ever growing struct of
76*7688df22SAndroid Build Coastguard Worker  * increasing complexity, and for large parts of that interface to be
77*7688df22SAndroid Build Coastguard Worker  * entirely optional. The downside is more pointer chasing; chasing across
78*7688df22SAndroid Build Coastguard Worker  * the boundary with pointers encapsulated inside u64.
79*7688df22SAndroid Build Coastguard Worker  *
80*7688df22SAndroid Build Coastguard Worker  * Example chaining:
81*7688df22SAndroid Build Coastguard Worker  *
82*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
83*7688df22SAndroid Build Coastguard Worker  *
84*7688df22SAndroid Build Coastguard Worker  *	struct i915_user_extension ext3 {
85*7688df22SAndroid Build Coastguard Worker  *		.next_extension = 0, // end
86*7688df22SAndroid Build Coastguard Worker  *		.name = ...,
87*7688df22SAndroid Build Coastguard Worker  *	};
88*7688df22SAndroid Build Coastguard Worker  *	struct i915_user_extension ext2 {
89*7688df22SAndroid Build Coastguard Worker  *		.next_extension = (uintptr_t)&ext3,
90*7688df22SAndroid Build Coastguard Worker  *		.name = ...,
91*7688df22SAndroid Build Coastguard Worker  *	};
92*7688df22SAndroid Build Coastguard Worker  *	struct i915_user_extension ext1 {
93*7688df22SAndroid Build Coastguard Worker  *		.next_extension = (uintptr_t)&ext2,
94*7688df22SAndroid Build Coastguard Worker  *		.name = ...,
95*7688df22SAndroid Build Coastguard Worker  *	};
96*7688df22SAndroid Build Coastguard Worker  *
97*7688df22SAndroid Build Coastguard Worker  * Typically the struct i915_user_extension would be embedded in some uAPI
98*7688df22SAndroid Build Coastguard Worker  * struct, and in this case we would feed it the head of the chain(i.e ext1),
99*7688df22SAndroid Build Coastguard Worker  * which would then apply all of the above extensions.
100*7688df22SAndroid Build Coastguard Worker  *
101*7688df22SAndroid Build Coastguard Worker  */
102*7688df22SAndroid Build Coastguard Worker struct i915_user_extension {
103*7688df22SAndroid Build Coastguard Worker 	/**
104*7688df22SAndroid Build Coastguard Worker 	 * @next_extension:
105*7688df22SAndroid Build Coastguard Worker 	 *
106*7688df22SAndroid Build Coastguard Worker 	 * Pointer to the next struct i915_user_extension, or zero if the end.
107*7688df22SAndroid Build Coastguard Worker 	 */
108*7688df22SAndroid Build Coastguard Worker 	__u64 next_extension;
109*7688df22SAndroid Build Coastguard Worker 	/**
110*7688df22SAndroid Build Coastguard Worker 	 * @name: Name of the extension.
111*7688df22SAndroid Build Coastguard Worker 	 *
112*7688df22SAndroid Build Coastguard Worker 	 * Note that the name here is just some integer.
113*7688df22SAndroid Build Coastguard Worker 	 *
114*7688df22SAndroid Build Coastguard Worker 	 * Also note that the name space for this is not global for the whole
115*7688df22SAndroid Build Coastguard Worker 	 * driver, but rather its scope/meaning is limited to the specific piece
116*7688df22SAndroid Build Coastguard Worker 	 * of uAPI which has embedded the struct i915_user_extension.
117*7688df22SAndroid Build Coastguard Worker 	 */
118*7688df22SAndroid Build Coastguard Worker 	__u32 name;
119*7688df22SAndroid Build Coastguard Worker 	/**
120*7688df22SAndroid Build Coastguard Worker 	 * @flags: MBZ
121*7688df22SAndroid Build Coastguard Worker 	 *
122*7688df22SAndroid Build Coastguard Worker 	 * All undefined bits must be zero.
123*7688df22SAndroid Build Coastguard Worker 	 */
124*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
125*7688df22SAndroid Build Coastguard Worker 	/**
126*7688df22SAndroid Build Coastguard Worker 	 * @rsvd: MBZ
127*7688df22SAndroid Build Coastguard Worker 	 *
128*7688df22SAndroid Build Coastguard Worker 	 * Reserved for future use; must be zero.
129*7688df22SAndroid Build Coastguard Worker 	 */
130*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd[4];
131*7688df22SAndroid Build Coastguard Worker };
132*7688df22SAndroid Build Coastguard Worker 
133*7688df22SAndroid Build Coastguard Worker /*
134*7688df22SAndroid Build Coastguard Worker  * MOCS indexes used for GPU surfaces, defining the cacheability of the
135*7688df22SAndroid Build Coastguard Worker  * surface data and the coherency for this data wrt. CPU vs. GPU accesses.
136*7688df22SAndroid Build Coastguard Worker  */
137*7688df22SAndroid Build Coastguard Worker enum i915_mocs_table_index {
138*7688df22SAndroid Build Coastguard Worker 	/*
139*7688df22SAndroid Build Coastguard Worker 	 * Not cached anywhere, coherency between CPU and GPU accesses is
140*7688df22SAndroid Build Coastguard Worker 	 * guaranteed.
141*7688df22SAndroid Build Coastguard Worker 	 */
142*7688df22SAndroid Build Coastguard Worker 	I915_MOCS_UNCACHED,
143*7688df22SAndroid Build Coastguard Worker 	/*
144*7688df22SAndroid Build Coastguard Worker 	 * Cacheability and coherency controlled by the kernel automatically
145*7688df22SAndroid Build Coastguard Worker 	 * based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current
146*7688df22SAndroid Build Coastguard Worker 	 * usage of the surface (used for display scanout or not).
147*7688df22SAndroid Build Coastguard Worker 	 */
148*7688df22SAndroid Build Coastguard Worker 	I915_MOCS_PTE,
149*7688df22SAndroid Build Coastguard Worker 	/*
150*7688df22SAndroid Build Coastguard Worker 	 * Cached in all GPU caches available on the platform.
151*7688df22SAndroid Build Coastguard Worker 	 * Coherency between CPU and GPU accesses to the surface is not
152*7688df22SAndroid Build Coastguard Worker 	 * guaranteed without extra synchronization.
153*7688df22SAndroid Build Coastguard Worker 	 */
154*7688df22SAndroid Build Coastguard Worker 	I915_MOCS_CACHED,
155*7688df22SAndroid Build Coastguard Worker };
156*7688df22SAndroid Build Coastguard Worker 
157*7688df22SAndroid Build Coastguard Worker /**
158*7688df22SAndroid Build Coastguard Worker  * enum drm_i915_gem_engine_class - uapi engine type enumeration
159*7688df22SAndroid Build Coastguard Worker  *
160*7688df22SAndroid Build Coastguard Worker  * Different engines serve different roles, and there may be more than one
161*7688df22SAndroid Build Coastguard Worker  * engine serving each role.  This enum provides a classification of the role
162*7688df22SAndroid Build Coastguard Worker  * of the engine, which may be used when requesting operations to be performed
163*7688df22SAndroid Build Coastguard Worker  * on a certain subset of engines, or for providing information about that
164*7688df22SAndroid Build Coastguard Worker  * group.
165*7688df22SAndroid Build Coastguard Worker  */
166*7688df22SAndroid Build Coastguard Worker enum drm_i915_gem_engine_class {
167*7688df22SAndroid Build Coastguard Worker 	/**
168*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_RENDER:
169*7688df22SAndroid Build Coastguard Worker 	 *
170*7688df22SAndroid Build Coastguard Worker 	 * Render engines support instructions used for 3D, Compute (GPGPU),
171*7688df22SAndroid Build Coastguard Worker 	 * and programmable media workloads.  These instructions fetch data and
172*7688df22SAndroid Build Coastguard Worker 	 * dispatch individual work items to threads that operate in parallel.
173*7688df22SAndroid Build Coastguard Worker 	 * The threads run small programs (called "kernels" or "shaders") on
174*7688df22SAndroid Build Coastguard Worker 	 * the GPU's execution units (EUs).
175*7688df22SAndroid Build Coastguard Worker 	 */
176*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_RENDER	= 0,
177*7688df22SAndroid Build Coastguard Worker 
178*7688df22SAndroid Build Coastguard Worker 	/**
179*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_COPY:
180*7688df22SAndroid Build Coastguard Worker 	 *
181*7688df22SAndroid Build Coastguard Worker 	 * Copy engines (also referred to as "blitters") support instructions
182*7688df22SAndroid Build Coastguard Worker 	 * that move blocks of data from one location in memory to another,
183*7688df22SAndroid Build Coastguard Worker 	 * or that fill a specified location of memory with fixed data.
184*7688df22SAndroid Build Coastguard Worker 	 * Copy engines can perform pre-defined logical or bitwise operations
185*7688df22SAndroid Build Coastguard Worker 	 * on the source, destination, or pattern data.
186*7688df22SAndroid Build Coastguard Worker 	 */
187*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_COPY		= 1,
188*7688df22SAndroid Build Coastguard Worker 
189*7688df22SAndroid Build Coastguard Worker 	/**
190*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_VIDEO:
191*7688df22SAndroid Build Coastguard Worker 	 *
192*7688df22SAndroid Build Coastguard Worker 	 * Video engines (also referred to as "bit stream decode" (BSD) or
193*7688df22SAndroid Build Coastguard Worker 	 * "vdbox") support instructions that perform fixed-function media
194*7688df22SAndroid Build Coastguard Worker 	 * decode and encode.
195*7688df22SAndroid Build Coastguard Worker 	 */
196*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_VIDEO		= 2,
197*7688df22SAndroid Build Coastguard Worker 
198*7688df22SAndroid Build Coastguard Worker 	/**
199*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_VIDEO_ENHANCE:
200*7688df22SAndroid Build Coastguard Worker 	 *
201*7688df22SAndroid Build Coastguard Worker 	 * Video enhancement engines (also referred to as "vebox") support
202*7688df22SAndroid Build Coastguard Worker 	 * instructions related to image enhancement.
203*7688df22SAndroid Build Coastguard Worker 	 */
204*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_VIDEO_ENHANCE	= 3,
205*7688df22SAndroid Build Coastguard Worker 
206*7688df22SAndroid Build Coastguard Worker 	/**
207*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_COMPUTE:
208*7688df22SAndroid Build Coastguard Worker 	 *
209*7688df22SAndroid Build Coastguard Worker 	 * Compute engines support a subset of the instructions available
210*7688df22SAndroid Build Coastguard Worker 	 * on render engines:  compute engines support Compute (GPGPU) and
211*7688df22SAndroid Build Coastguard Worker 	 * programmable media workloads, but do not support the 3D pipeline.
212*7688df22SAndroid Build Coastguard Worker 	 */
213*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_COMPUTE	= 4,
214*7688df22SAndroid Build Coastguard Worker 
215*7688df22SAndroid Build Coastguard Worker 	/* Values in this enum should be kept compact. */
216*7688df22SAndroid Build Coastguard Worker 
217*7688df22SAndroid Build Coastguard Worker 	/**
218*7688df22SAndroid Build Coastguard Worker 	 * @I915_ENGINE_CLASS_INVALID:
219*7688df22SAndroid Build Coastguard Worker 	 *
220*7688df22SAndroid Build Coastguard Worker 	 * Placeholder value to represent an invalid engine class assignment.
221*7688df22SAndroid Build Coastguard Worker 	 */
222*7688df22SAndroid Build Coastguard Worker 	I915_ENGINE_CLASS_INVALID	= -1
223*7688df22SAndroid Build Coastguard Worker };
224*7688df22SAndroid Build Coastguard Worker 
225*7688df22SAndroid Build Coastguard Worker /**
226*7688df22SAndroid Build Coastguard Worker  * struct i915_engine_class_instance - Engine class/instance identifier
227*7688df22SAndroid Build Coastguard Worker  *
228*7688df22SAndroid Build Coastguard Worker  * There may be more than one engine fulfilling any role within the system.
229*7688df22SAndroid Build Coastguard Worker  * Each engine of a class is given a unique instance number and therefore
230*7688df22SAndroid Build Coastguard Worker  * any engine can be specified by its class:instance tuplet. APIs that allow
231*7688df22SAndroid Build Coastguard Worker  * access to any engine in the system will use struct i915_engine_class_instance
232*7688df22SAndroid Build Coastguard Worker  * for this identification.
233*7688df22SAndroid Build Coastguard Worker  */
234*7688df22SAndroid Build Coastguard Worker struct i915_engine_class_instance {
235*7688df22SAndroid Build Coastguard Worker 	/**
236*7688df22SAndroid Build Coastguard Worker 	 * @engine_class:
237*7688df22SAndroid Build Coastguard Worker 	 *
238*7688df22SAndroid Build Coastguard Worker 	 * Engine class from enum drm_i915_gem_engine_class
239*7688df22SAndroid Build Coastguard Worker 	 */
240*7688df22SAndroid Build Coastguard Worker 	__u16 engine_class;
241*7688df22SAndroid Build Coastguard Worker #define I915_ENGINE_CLASS_INVALID_NONE -1
242*7688df22SAndroid Build Coastguard Worker #define I915_ENGINE_CLASS_INVALID_VIRTUAL -2
243*7688df22SAndroid Build Coastguard Worker 
244*7688df22SAndroid Build Coastguard Worker 	/**
245*7688df22SAndroid Build Coastguard Worker 	 * @engine_instance:
246*7688df22SAndroid Build Coastguard Worker 	 *
247*7688df22SAndroid Build Coastguard Worker 	 * Engine instance.
248*7688df22SAndroid Build Coastguard Worker 	 */
249*7688df22SAndroid Build Coastguard Worker 	__u16 engine_instance;
250*7688df22SAndroid Build Coastguard Worker };
251*7688df22SAndroid Build Coastguard Worker 
252*7688df22SAndroid Build Coastguard Worker /**
253*7688df22SAndroid Build Coastguard Worker  * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915
254*7688df22SAndroid Build Coastguard Worker  *
255*7688df22SAndroid Build Coastguard Worker  */
256*7688df22SAndroid Build Coastguard Worker 
257*7688df22SAndroid Build Coastguard Worker enum drm_i915_pmu_engine_sample {
258*7688df22SAndroid Build Coastguard Worker 	I915_SAMPLE_BUSY = 0,
259*7688df22SAndroid Build Coastguard Worker 	I915_SAMPLE_WAIT = 1,
260*7688df22SAndroid Build Coastguard Worker 	I915_SAMPLE_SEMA = 2
261*7688df22SAndroid Build Coastguard Worker };
262*7688df22SAndroid Build Coastguard Worker 
263*7688df22SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_BITS (4)
264*7688df22SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_MASK (0xf)
265*7688df22SAndroid Build Coastguard Worker #define I915_PMU_SAMPLE_INSTANCE_BITS (8)
266*7688df22SAndroid Build Coastguard Worker #define I915_PMU_CLASS_SHIFT \
267*7688df22SAndroid Build Coastguard Worker 	(I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS)
268*7688df22SAndroid Build Coastguard Worker 
269*7688df22SAndroid Build Coastguard Worker #define __I915_PMU_ENGINE(class, instance, sample) \
270*7688df22SAndroid Build Coastguard Worker 	((class) << I915_PMU_CLASS_SHIFT | \
271*7688df22SAndroid Build Coastguard Worker 	(instance) << I915_PMU_SAMPLE_BITS | \
272*7688df22SAndroid Build Coastguard Worker 	(sample))
273*7688df22SAndroid Build Coastguard Worker 
274*7688df22SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_BUSY(class, instance) \
275*7688df22SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY)
276*7688df22SAndroid Build Coastguard Worker 
277*7688df22SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_WAIT(class, instance) \
278*7688df22SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT)
279*7688df22SAndroid Build Coastguard Worker 
280*7688df22SAndroid Build Coastguard Worker #define I915_PMU_ENGINE_SEMA(class, instance) \
281*7688df22SAndroid Build Coastguard Worker 	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA)
282*7688df22SAndroid Build Coastguard Worker 
283*7688df22SAndroid Build Coastguard Worker #define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x))
284*7688df22SAndroid Build Coastguard Worker 
285*7688df22SAndroid Build Coastguard Worker #define I915_PMU_ACTUAL_FREQUENCY	__I915_PMU_OTHER(0)
286*7688df22SAndroid Build Coastguard Worker #define I915_PMU_REQUESTED_FREQUENCY	__I915_PMU_OTHER(1)
287*7688df22SAndroid Build Coastguard Worker #define I915_PMU_INTERRUPTS		__I915_PMU_OTHER(2)
288*7688df22SAndroid Build Coastguard Worker #define I915_PMU_RC6_RESIDENCY		__I915_PMU_OTHER(3)
289*7688df22SAndroid Build Coastguard Worker #define I915_PMU_SOFTWARE_GT_AWAKE_TIME	__I915_PMU_OTHER(4)
290*7688df22SAndroid Build Coastguard Worker 
291*7688df22SAndroid Build Coastguard Worker #define I915_PMU_LAST /* Deprecated - do not use */ I915_PMU_RC6_RESIDENCY
292*7688df22SAndroid Build Coastguard Worker 
293*7688df22SAndroid Build Coastguard Worker /* Each region is a minimum of 16k, and there are at most 255 of them.
294*7688df22SAndroid Build Coastguard Worker  */
295*7688df22SAndroid Build Coastguard Worker #define I915_NR_TEX_REGIONS 255	/* table size 2k - maximum due to use
296*7688df22SAndroid Build Coastguard Worker 				 * of chars for next/prev indices */
297*7688df22SAndroid Build Coastguard Worker #define I915_LOG_MIN_TEX_REGION_SIZE 14
298*7688df22SAndroid Build Coastguard Worker 
299*7688df22SAndroid Build Coastguard Worker typedef struct _drm_i915_init {
300*7688df22SAndroid Build Coastguard Worker 	enum {
301*7688df22SAndroid Build Coastguard Worker 		I915_INIT_DMA = 0x01,
302*7688df22SAndroid Build Coastguard Worker 		I915_CLEANUP_DMA = 0x02,
303*7688df22SAndroid Build Coastguard Worker 		I915_RESUME_DMA = 0x03
304*7688df22SAndroid Build Coastguard Worker 	} func;
305*7688df22SAndroid Build Coastguard Worker 	unsigned int mmio_offset;
306*7688df22SAndroid Build Coastguard Worker 	int sarea_priv_offset;
307*7688df22SAndroid Build Coastguard Worker 	unsigned int ring_start;
308*7688df22SAndroid Build Coastguard Worker 	unsigned int ring_end;
309*7688df22SAndroid Build Coastguard Worker 	unsigned int ring_size;
310*7688df22SAndroid Build Coastguard Worker 	unsigned int front_offset;
311*7688df22SAndroid Build Coastguard Worker 	unsigned int back_offset;
312*7688df22SAndroid Build Coastguard Worker 	unsigned int depth_offset;
313*7688df22SAndroid Build Coastguard Worker 	unsigned int w;
314*7688df22SAndroid Build Coastguard Worker 	unsigned int h;
315*7688df22SAndroid Build Coastguard Worker 	unsigned int pitch;
316*7688df22SAndroid Build Coastguard Worker 	unsigned int pitch_bits;
317*7688df22SAndroid Build Coastguard Worker 	unsigned int back_pitch;
318*7688df22SAndroid Build Coastguard Worker 	unsigned int depth_pitch;
319*7688df22SAndroid Build Coastguard Worker 	unsigned int cpp;
320*7688df22SAndroid Build Coastguard Worker 	unsigned int chipset;
321*7688df22SAndroid Build Coastguard Worker } drm_i915_init_t;
322*7688df22SAndroid Build Coastguard Worker 
323*7688df22SAndroid Build Coastguard Worker typedef struct _drm_i915_sarea {
324*7688df22SAndroid Build Coastguard Worker 	struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
325*7688df22SAndroid Build Coastguard Worker 	int last_upload;	/* last time texture was uploaded */
326*7688df22SAndroid Build Coastguard Worker 	int last_enqueue;	/* last time a buffer was enqueued */
327*7688df22SAndroid Build Coastguard Worker 	int last_dispatch;	/* age of the most recently dispatched buffer */
328*7688df22SAndroid Build Coastguard Worker 	int ctxOwner;		/* last context to upload state */
329*7688df22SAndroid Build Coastguard Worker 	int texAge;
330*7688df22SAndroid Build Coastguard Worker 	int pf_enabled;		/* is pageflipping allowed? */
331*7688df22SAndroid Build Coastguard Worker 	int pf_active;
332*7688df22SAndroid Build Coastguard Worker 	int pf_current_page;	/* which buffer is being displayed? */
333*7688df22SAndroid Build Coastguard Worker 	int perf_boxes;		/* performance boxes to be displayed */
334*7688df22SAndroid Build Coastguard Worker 	int width, height;      /* screen size in pixels */
335*7688df22SAndroid Build Coastguard Worker 
336*7688df22SAndroid Build Coastguard Worker 	drm_handle_t front_handle;
337*7688df22SAndroid Build Coastguard Worker 	int front_offset;
338*7688df22SAndroid Build Coastguard Worker 	int front_size;
339*7688df22SAndroid Build Coastguard Worker 
340*7688df22SAndroid Build Coastguard Worker 	drm_handle_t back_handle;
341*7688df22SAndroid Build Coastguard Worker 	int back_offset;
342*7688df22SAndroid Build Coastguard Worker 	int back_size;
343*7688df22SAndroid Build Coastguard Worker 
344*7688df22SAndroid Build Coastguard Worker 	drm_handle_t depth_handle;
345*7688df22SAndroid Build Coastguard Worker 	int depth_offset;
346*7688df22SAndroid Build Coastguard Worker 	int depth_size;
347*7688df22SAndroid Build Coastguard Worker 
348*7688df22SAndroid Build Coastguard Worker 	drm_handle_t tex_handle;
349*7688df22SAndroid Build Coastguard Worker 	int tex_offset;
350*7688df22SAndroid Build Coastguard Worker 	int tex_size;
351*7688df22SAndroid Build Coastguard Worker 	int log_tex_granularity;
352*7688df22SAndroid Build Coastguard Worker 	int pitch;
353*7688df22SAndroid Build Coastguard Worker 	int rotation;           /* 0, 90, 180 or 270 */
354*7688df22SAndroid Build Coastguard Worker 	int rotated_offset;
355*7688df22SAndroid Build Coastguard Worker 	int rotated_size;
356*7688df22SAndroid Build Coastguard Worker 	int rotated_pitch;
357*7688df22SAndroid Build Coastguard Worker 	int virtualX, virtualY;
358*7688df22SAndroid Build Coastguard Worker 
359*7688df22SAndroid Build Coastguard Worker 	unsigned int front_tiled;
360*7688df22SAndroid Build Coastguard Worker 	unsigned int back_tiled;
361*7688df22SAndroid Build Coastguard Worker 	unsigned int depth_tiled;
362*7688df22SAndroid Build Coastguard Worker 	unsigned int rotated_tiled;
363*7688df22SAndroid Build Coastguard Worker 	unsigned int rotated2_tiled;
364*7688df22SAndroid Build Coastguard Worker 
365*7688df22SAndroid Build Coastguard Worker 	int pipeA_x;
366*7688df22SAndroid Build Coastguard Worker 	int pipeA_y;
367*7688df22SAndroid Build Coastguard Worker 	int pipeA_w;
368*7688df22SAndroid Build Coastguard Worker 	int pipeA_h;
369*7688df22SAndroid Build Coastguard Worker 	int pipeB_x;
370*7688df22SAndroid Build Coastguard Worker 	int pipeB_y;
371*7688df22SAndroid Build Coastguard Worker 	int pipeB_w;
372*7688df22SAndroid Build Coastguard Worker 	int pipeB_h;
373*7688df22SAndroid Build Coastguard Worker 
374*7688df22SAndroid Build Coastguard Worker 	/* fill out some space for old userspace triple buffer */
375*7688df22SAndroid Build Coastguard Worker 	drm_handle_t unused_handle;
376*7688df22SAndroid Build Coastguard Worker 	__u32 unused1, unused2, unused3;
377*7688df22SAndroid Build Coastguard Worker 
378*7688df22SAndroid Build Coastguard Worker 	/* buffer object handles for static buffers. May change
379*7688df22SAndroid Build Coastguard Worker 	 * over the lifetime of the client.
380*7688df22SAndroid Build Coastguard Worker 	 */
381*7688df22SAndroid Build Coastguard Worker 	__u32 front_bo_handle;
382*7688df22SAndroid Build Coastguard Worker 	__u32 back_bo_handle;
383*7688df22SAndroid Build Coastguard Worker 	__u32 unused_bo_handle;
384*7688df22SAndroid Build Coastguard Worker 	__u32 depth_bo_handle;
385*7688df22SAndroid Build Coastguard Worker 
386*7688df22SAndroid Build Coastguard Worker } drm_i915_sarea_t;
387*7688df22SAndroid Build Coastguard Worker 
388*7688df22SAndroid Build Coastguard Worker /* due to userspace building against these headers we need some compat here */
389*7688df22SAndroid Build Coastguard Worker #define planeA_x pipeA_x
390*7688df22SAndroid Build Coastguard Worker #define planeA_y pipeA_y
391*7688df22SAndroid Build Coastguard Worker #define planeA_w pipeA_w
392*7688df22SAndroid Build Coastguard Worker #define planeA_h pipeA_h
393*7688df22SAndroid Build Coastguard Worker #define planeB_x pipeB_x
394*7688df22SAndroid Build Coastguard Worker #define planeB_y pipeB_y
395*7688df22SAndroid Build Coastguard Worker #define planeB_w pipeB_w
396*7688df22SAndroid Build Coastguard Worker #define planeB_h pipeB_h
397*7688df22SAndroid Build Coastguard Worker 
398*7688df22SAndroid Build Coastguard Worker /* Flags for perf_boxes
399*7688df22SAndroid Build Coastguard Worker  */
400*7688df22SAndroid Build Coastguard Worker #define I915_BOX_RING_EMPTY    0x1
401*7688df22SAndroid Build Coastguard Worker #define I915_BOX_FLIP          0x2
402*7688df22SAndroid Build Coastguard Worker #define I915_BOX_WAIT          0x4
403*7688df22SAndroid Build Coastguard Worker #define I915_BOX_TEXTURE_LOAD  0x8
404*7688df22SAndroid Build Coastguard Worker #define I915_BOX_LOST_CONTEXT  0x10
405*7688df22SAndroid Build Coastguard Worker 
406*7688df22SAndroid Build Coastguard Worker /*
407*7688df22SAndroid Build Coastguard Worker  * i915 specific ioctls.
408*7688df22SAndroid Build Coastguard Worker  *
409*7688df22SAndroid Build Coastguard Worker  * The device specific ioctl range is [DRM_COMMAND_BASE, DRM_COMMAND_END) ie
410*7688df22SAndroid Build Coastguard Worker  * [0x40, 0xa0) (a0 is excluded). The numbers below are defined as offset
411*7688df22SAndroid Build Coastguard Worker  * against DRM_COMMAND_BASE and should be between [0x0, 0x60).
412*7688df22SAndroid Build Coastguard Worker  */
413*7688df22SAndroid Build Coastguard Worker #define DRM_I915_INIT		0x00
414*7688df22SAndroid Build Coastguard Worker #define DRM_I915_FLUSH		0x01
415*7688df22SAndroid Build Coastguard Worker #define DRM_I915_FLIP		0x02
416*7688df22SAndroid Build Coastguard Worker #define DRM_I915_BATCHBUFFER	0x03
417*7688df22SAndroid Build Coastguard Worker #define DRM_I915_IRQ_EMIT	0x04
418*7688df22SAndroid Build Coastguard Worker #define DRM_I915_IRQ_WAIT	0x05
419*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GETPARAM	0x06
420*7688df22SAndroid Build Coastguard Worker #define DRM_I915_SETPARAM	0x07
421*7688df22SAndroid Build Coastguard Worker #define DRM_I915_ALLOC		0x08
422*7688df22SAndroid Build Coastguard Worker #define DRM_I915_FREE		0x09
423*7688df22SAndroid Build Coastguard Worker #define DRM_I915_INIT_HEAP	0x0a
424*7688df22SAndroid Build Coastguard Worker #define DRM_I915_CMDBUFFER	0x0b
425*7688df22SAndroid Build Coastguard Worker #define DRM_I915_DESTROY_HEAP	0x0c
426*7688df22SAndroid Build Coastguard Worker #define DRM_I915_SET_VBLANK_PIPE	0x0d
427*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GET_VBLANK_PIPE	0x0e
428*7688df22SAndroid Build Coastguard Worker #define DRM_I915_VBLANK_SWAP	0x0f
429*7688df22SAndroid Build Coastguard Worker #define DRM_I915_HWS_ADDR	0x11
430*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_INIT	0x13
431*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER	0x14
432*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_PIN	0x15
433*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_UNPIN	0x16
434*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_BUSY	0x17
435*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_THROTTLE	0x18
436*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_ENTERVT	0x19
437*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_LEAVEVT	0x1a
438*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CREATE	0x1b
439*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_PREAD	0x1c
440*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_PWRITE	0x1d
441*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_MMAP	0x1e
442*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_DOMAIN	0x1f
443*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_SW_FINISH	0x20
444*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_TILING	0x21
445*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_TILING	0x22
446*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_APERTURE 0x23
447*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_MMAP_GTT	0x24
448*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GET_PIPE_FROM_CRTC_ID	0x25
449*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_MADVISE	0x26
450*7688df22SAndroid Build Coastguard Worker #define DRM_I915_OVERLAY_PUT_IMAGE	0x27
451*7688df22SAndroid Build Coastguard Worker #define DRM_I915_OVERLAY_ATTRS	0x28
452*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER2	0x29
453*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER2_WR	DRM_I915_GEM_EXECBUFFER2
454*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GET_SPRITE_COLORKEY	0x2a
455*7688df22SAndroid Build Coastguard Worker #define DRM_I915_SET_SPRITE_COLORKEY	0x2b
456*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_WAIT	0x2c
457*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_CREATE	0x2d
458*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_DESTROY	0x2e
459*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_SET_CACHING	0x2f
460*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_GET_CACHING	0x30
461*7688df22SAndroid Build Coastguard Worker #define DRM_I915_REG_READ		0x31
462*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GET_RESET_STATS	0x32
463*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_USERPTR		0x33
464*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_GETPARAM	0x34
465*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CONTEXT_SETPARAM	0x35
466*7688df22SAndroid Build Coastguard Worker #define DRM_I915_PERF_OPEN		0x36
467*7688df22SAndroid Build Coastguard Worker #define DRM_I915_PERF_ADD_CONFIG	0x37
468*7688df22SAndroid Build Coastguard Worker #define DRM_I915_PERF_REMOVE_CONFIG	0x38
469*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY			0x39
470*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_VM_CREATE		0x3a
471*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_VM_DESTROY		0x3b
472*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_CREATE_EXT		0x3c
473*7688df22SAndroid Build Coastguard Worker /* Must be kept compact -- no holes */
474*7688df22SAndroid Build Coastguard Worker 
475*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
476*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
477*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FLIP		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
478*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_BATCHBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
479*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_IRQ_EMIT         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
480*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_IRQ_WAIT         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
481*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GETPARAM         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
482*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_SETPARAM         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
483*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_ALLOC            DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
484*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_FREE             DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
485*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_INIT_HEAP        DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
486*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_CMDBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
487*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_DESTROY_HEAP	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
488*7688df22SAndroid 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)
489*7688df22SAndroid 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)
490*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_VBLANK_SWAP	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
491*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_HWS_ADDR		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_HWS_ADDR, struct drm_i915_gem_init)
492*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_INIT		DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
493*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_EXECBUFFER	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
494*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_EXECBUFFER2	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
495*7688df22SAndroid 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)
496*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PIN		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
497*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_UNPIN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
498*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_BUSY		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
499*7688df22SAndroid 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)
500*7688df22SAndroid 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)
501*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_THROTTLE	DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
502*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_ENTERVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
503*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_LEAVEVT	DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
504*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CREATE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
505*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_CREATE_EXT	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE_EXT, struct drm_i915_gem_create_ext)
506*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PREAD	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
507*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_PWRITE	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
508*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MMAP		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
509*7688df22SAndroid 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)
510*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MMAP_OFFSET	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_offset)
511*7688df22SAndroid 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)
512*7688df22SAndroid 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)
513*7688df22SAndroid 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)
514*7688df22SAndroid 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)
515*7688df22SAndroid 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)
516*7688df22SAndroid 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)
517*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_MADVISE	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise)
518*7688df22SAndroid 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)
519*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_OVERLAY_ATTRS	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs)
520*7688df22SAndroid 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)
521*7688df22SAndroid 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)
522*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_WAIT		DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_WAIT, struct drm_i915_gem_wait)
523*7688df22SAndroid 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)
524*7688df22SAndroid 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)
525*7688df22SAndroid 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)
526*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_REG_READ			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
527*7688df22SAndroid 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)
528*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_GEM_USERPTR			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr)
529*7688df22SAndroid 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)
530*7688df22SAndroid 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)
531*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_PERF_OPEN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)
532*7688df22SAndroid 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)
533*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
534*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_I915_QUERY			DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
535*7688df22SAndroid 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)
536*7688df22SAndroid 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)
537*7688df22SAndroid Build Coastguard Worker 
538*7688df22SAndroid Build Coastguard Worker /* Allow drivers to submit batchbuffers directly to hardware, relying
539*7688df22SAndroid Build Coastguard Worker  * on the security mechanisms provided by hardware.
540*7688df22SAndroid Build Coastguard Worker  */
541*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_batchbuffer {
542*7688df22SAndroid Build Coastguard Worker 	int start;		/* agp offset */
543*7688df22SAndroid Build Coastguard Worker 	int used;		/* nr bytes in use */
544*7688df22SAndroid Build Coastguard Worker 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
545*7688df22SAndroid Build Coastguard Worker 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
546*7688df22SAndroid Build Coastguard Worker 	int num_cliprects;	/* mulitpass with multiple cliprects? */
547*7688df22SAndroid Build Coastguard Worker 	struct drm_clip_rect *cliprects;	/* pointer to userspace cliprects */
548*7688df22SAndroid Build Coastguard Worker } drm_i915_batchbuffer_t;
549*7688df22SAndroid Build Coastguard Worker 
550*7688df22SAndroid Build Coastguard Worker /* As above, but pass a pointer to userspace buffer which can be
551*7688df22SAndroid Build Coastguard Worker  * validated by the kernel prior to sending to hardware.
552*7688df22SAndroid Build Coastguard Worker  */
553*7688df22SAndroid Build Coastguard Worker typedef struct _drm_i915_cmdbuffer {
554*7688df22SAndroid Build Coastguard Worker 	char *buf;	/* pointer to userspace command buffer */
555*7688df22SAndroid Build Coastguard Worker 	int sz;			/* nr bytes in buf */
556*7688df22SAndroid Build Coastguard Worker 	int DR1;		/* hw flags for GFX_OP_DRAWRECT_INFO */
557*7688df22SAndroid Build Coastguard Worker 	int DR4;		/* window origin for GFX_OP_DRAWRECT_INFO */
558*7688df22SAndroid Build Coastguard Worker 	int num_cliprects;	/* mulitpass with multiple cliprects? */
559*7688df22SAndroid Build Coastguard Worker 	struct drm_clip_rect *cliprects;	/* pointer to userspace cliprects */
560*7688df22SAndroid Build Coastguard Worker } drm_i915_cmdbuffer_t;
561*7688df22SAndroid Build Coastguard Worker 
562*7688df22SAndroid Build Coastguard Worker /* Userspace can request & wait on irq's:
563*7688df22SAndroid Build Coastguard Worker  */
564*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_irq_emit {
565*7688df22SAndroid Build Coastguard Worker 	int *irq_seq;
566*7688df22SAndroid Build Coastguard Worker } drm_i915_irq_emit_t;
567*7688df22SAndroid Build Coastguard Worker 
568*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_irq_wait {
569*7688df22SAndroid Build Coastguard Worker 	int irq_seq;
570*7688df22SAndroid Build Coastguard Worker } drm_i915_irq_wait_t;
571*7688df22SAndroid Build Coastguard Worker 
572*7688df22SAndroid Build Coastguard Worker /*
573*7688df22SAndroid Build Coastguard Worker  * Different modes of per-process Graphics Translation Table,
574*7688df22SAndroid Build Coastguard Worker  * see I915_PARAM_HAS_ALIASING_PPGTT
575*7688df22SAndroid Build Coastguard Worker  */
576*7688df22SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_NONE	0
577*7688df22SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_ALIASING	1
578*7688df22SAndroid Build Coastguard Worker #define I915_GEM_PPGTT_FULL	2
579*7688df22SAndroid Build Coastguard Worker 
580*7688df22SAndroid Build Coastguard Worker /* Ioctl to query kernel params:
581*7688df22SAndroid Build Coastguard Worker  */
582*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_IRQ_ACTIVE            1
583*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_ALLOW_BATCHBUFFER     2
584*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_LAST_DISPATCH         3
585*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_CHIPSET_ID            4
586*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GEM               5
587*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_NUM_FENCES_AVAIL      6
588*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_OVERLAY           7
589*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PAGEFLIPPING	 8
590*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXECBUF2          9
591*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BSD		 10
592*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BLT		 11
593*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RELAXED_FENCING	 12
594*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_COHERENT_RINGS	 13
595*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_CONSTANTS	 14
596*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RELAXED_DELTA	 15
597*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GEN7_SOL_RESET	 16
598*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_LLC     	 	 17
599*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_ALIASING_PPGTT	 18
600*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_WAIT_TIMEOUT	 19
601*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SEMAPHORES	 20
602*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PRIME_VMAP_FLUSH	 21
603*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_VEBOX		 22
604*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SECURE_BATCHES	 23
605*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_PINNED_BATCHES	 24
606*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_NO_RELOC	 25
607*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_HANDLE_LUT   26
608*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_WT     	 	 27
609*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_CMD_PARSER_VERSION	 28
610*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_COHERENT_PHYS_GTT 29
611*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_VERSION          30
612*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_BSD2		 31
613*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_REVISION              32
614*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_SUBSLICE_TOTAL	 33
615*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_EU_TOTAL		 34
616*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_GPU_RESET	 35
617*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_RESOURCE_STREAMER 36
618*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_SOFTPIN	 37
619*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_POOLED_EU	 38
620*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_MIN_EU_IN_POOL	 39
621*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_GTT_VERSION	 40
622*7688df22SAndroid Build Coastguard Worker 
623*7688df22SAndroid Build Coastguard Worker /*
624*7688df22SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports user defined execution
625*7688df22SAndroid Build Coastguard Worker  * priorities and the driver will attempt to execute batches in priority order.
626*7688df22SAndroid Build Coastguard Worker  * The param returns a capability bitmask, nonzero implies that the scheduler
627*7688df22SAndroid Build Coastguard Worker  * is enabled, with different features present according to the mask.
628*7688df22SAndroid Build Coastguard Worker  *
629*7688df22SAndroid Build Coastguard Worker  * The initial priority for each batch is supplied by the context and is
630*7688df22SAndroid Build Coastguard Worker  * controlled via I915_CONTEXT_PARAM_PRIORITY.
631*7688df22SAndroid Build Coastguard Worker  */
632*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_SCHEDULER	 41
633*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_ENABLED	(1ul << 0)
634*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_PRIORITY	(1ul << 1)
635*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_PREEMPTION	(1ul << 2)
636*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_SEMAPHORES	(1ul << 3)
637*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_ENGINE_BUSY_STATS	(1ul << 4)
638*7688df22SAndroid Build Coastguard Worker /*
639*7688df22SAndroid Build Coastguard Worker  * Indicates the 2k user priority levels are statically mapped into 3 buckets as
640*7688df22SAndroid Build Coastguard Worker  * follows:
641*7688df22SAndroid Build Coastguard Worker  *
642*7688df22SAndroid Build Coastguard Worker  * -1k to -1	Low priority
643*7688df22SAndroid Build Coastguard Worker  * 0		Normal priority
644*7688df22SAndroid Build Coastguard Worker  * 1 to 1k	Highest priority
645*7688df22SAndroid Build Coastguard Worker  */
646*7688df22SAndroid Build Coastguard Worker #define   I915_SCHEDULER_CAP_STATIC_PRIORITY_MAP	(1ul << 5)
647*7688df22SAndroid Build Coastguard Worker 
648*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HUC_STATUS		 42
649*7688df22SAndroid Build Coastguard Worker 
650*7688df22SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to opt-out of
651*7688df22SAndroid Build Coastguard Worker  * synchronisation with implicit fencing on individual objects.
652*7688df22SAndroid Build Coastguard Worker  * See EXEC_OBJECT_ASYNC.
653*7688df22SAndroid Build Coastguard Worker  */
654*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_ASYNC	 43
655*7688df22SAndroid Build Coastguard Worker 
656*7688df22SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports explicit fence support -
657*7688df22SAndroid Build Coastguard Worker  * both being able to pass in a sync_file fd to wait upon before executing,
658*7688df22SAndroid Build Coastguard Worker  * and being able to return a new sync_file fd that is signaled when the
659*7688df22SAndroid Build Coastguard Worker  * current request is complete. See I915_EXEC_FENCE_IN and I915_EXEC_FENCE_OUT.
660*7688df22SAndroid Build Coastguard Worker  */
661*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_FENCE	 44
662*7688df22SAndroid Build Coastguard Worker 
663*7688df22SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture
664*7688df22SAndroid Build Coastguard Worker  * user specified bufffers for post-mortem debugging of GPU hangs. See
665*7688df22SAndroid Build Coastguard Worker  * EXEC_OBJECT_CAPTURE.
666*7688df22SAndroid Build Coastguard Worker  */
667*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_CAPTURE	 45
668*7688df22SAndroid Build Coastguard Worker 
669*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_SLICE_MASK		 46
670*7688df22SAndroid Build Coastguard Worker 
671*7688df22SAndroid Build Coastguard Worker /* Assuming it's uniform for each slice, this queries the mask of subslices
672*7688df22SAndroid Build Coastguard Worker  * per-slice for this system.
673*7688df22SAndroid Build Coastguard Worker  */
674*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_SUBSLICE_MASK	 47
675*7688df22SAndroid Build Coastguard Worker 
676*7688df22SAndroid Build Coastguard Worker /*
677*7688df22SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying the batch buffer
678*7688df22SAndroid Build Coastguard Worker  * as the first execobject as opposed to the last. See I915_EXEC_BATCH_FIRST.
679*7688df22SAndroid Build Coastguard Worker  */
680*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_BATCH_FIRST	 48
681*7688df22SAndroid Build Coastguard Worker 
682*7688df22SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of
683*7688df22SAndroid Build Coastguard Worker  * drm_i915_gem_exec_fence structures.  See I915_EXEC_FENCE_ARRAY.
684*7688df22SAndroid Build Coastguard Worker  */
685*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_FENCE_ARRAY  49
686*7688df22SAndroid Build Coastguard Worker 
687*7688df22SAndroid Build Coastguard Worker /*
688*7688df22SAndroid Build Coastguard Worker  * Query whether every context (both per-file default and user created) is
689*7688df22SAndroid Build Coastguard Worker  * isolated (insofar as HW supports). If this parameter is not true, then
690*7688df22SAndroid Build Coastguard Worker  * freshly created contexts may inherit values from an existing context,
691*7688df22SAndroid Build Coastguard Worker  * rather than default HW values. If true, it also ensures (insofar as HW
692*7688df22SAndroid Build Coastguard Worker  * supports) that all state set by this context will not leak to any other
693*7688df22SAndroid Build Coastguard Worker  * context.
694*7688df22SAndroid Build Coastguard Worker  *
695*7688df22SAndroid Build Coastguard Worker  * As not every engine across every gen support contexts, the returned
696*7688df22SAndroid Build Coastguard Worker  * value reports the support of context isolation for individual engines by
697*7688df22SAndroid Build Coastguard Worker  * returning a bitmask of each engine class set to true if that class supports
698*7688df22SAndroid Build Coastguard Worker  * isolation.
699*7688df22SAndroid Build Coastguard Worker  */
700*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_CONTEXT_ISOLATION 50
701*7688df22SAndroid Build Coastguard Worker 
702*7688df22SAndroid Build Coastguard Worker /* Frequency of the command streamer timestamps given by the *_TIMESTAMP
703*7688df22SAndroid Build Coastguard Worker  * registers. This used to be fixed per platform but from CNL onwards, this
704*7688df22SAndroid Build Coastguard Worker  * might vary depending on the parts.
705*7688df22SAndroid Build Coastguard Worker  */
706*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
707*7688df22SAndroid Build Coastguard Worker 
708*7688df22SAndroid Build Coastguard Worker /*
709*7688df22SAndroid Build Coastguard Worker  * Once upon a time we supposed that writes through the GGTT would be
710*7688df22SAndroid Build Coastguard Worker  * immediately in physical memory (once flushed out of the CPU path). However,
711*7688df22SAndroid Build Coastguard Worker  * on a few different processors and chipsets, this is not necessarily the case
712*7688df22SAndroid Build Coastguard Worker  * as the writes appear to be buffered internally. Thus a read of the backing
713*7688df22SAndroid Build Coastguard Worker  * storage (physical memory) via a different path (with different physical tags
714*7688df22SAndroid Build Coastguard Worker  * to the indirect write via the GGTT) will see stale values from before
715*7688df22SAndroid Build Coastguard Worker  * the GGTT write. Inside the kernel, we can for the most part keep track of
716*7688df22SAndroid Build Coastguard Worker  * the different read/write domains in use (e.g. set-domain), but the assumption
717*7688df22SAndroid Build Coastguard Worker  * of coherency is baked into the ABI, hence reporting its true state in this
718*7688df22SAndroid Build Coastguard Worker  * parameter.
719*7688df22SAndroid Build Coastguard Worker  *
720*7688df22SAndroid Build Coastguard Worker  * Reports true when writes via mmap_gtt are immediately visible following an
721*7688df22SAndroid Build Coastguard Worker  * lfence to flush the WCB.
722*7688df22SAndroid Build Coastguard Worker  *
723*7688df22SAndroid Build Coastguard Worker  * Reports false when writes via mmap_gtt are indeterminately delayed in an in
724*7688df22SAndroid Build Coastguard Worker  * internal buffer and are _not_ immediately visible to third parties accessing
725*7688df22SAndroid Build Coastguard Worker  * directly via mmap_cpu/mmap_wc. Use of mmap_gtt as part of an IPC
726*7688df22SAndroid Build Coastguard Worker  * communications channel when reporting false is strongly disadvised.
727*7688df22SAndroid Build Coastguard Worker  */
728*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_MMAP_GTT_COHERENT	52
729*7688df22SAndroid Build Coastguard Worker 
730*7688df22SAndroid Build Coastguard Worker /*
731*7688df22SAndroid Build Coastguard Worker  * Query whether DRM_I915_GEM_EXECBUFFER2 supports coordination of parallel
732*7688df22SAndroid Build Coastguard Worker  * execution through use of explicit fence support.
733*7688df22SAndroid Build Coastguard Worker  * See I915_EXEC_FENCE_OUT and I915_EXEC_FENCE_SUBMIT.
734*7688df22SAndroid Build Coastguard Worker  */
735*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53
736*7688df22SAndroid Build Coastguard Worker 
737*7688df22SAndroid Build Coastguard Worker /*
738*7688df22SAndroid Build Coastguard Worker  * Revision of the i915-perf uAPI. The value returned helps determine what
739*7688df22SAndroid Build Coastguard Worker  * i915-perf features are available. See drm_i915_perf_property_id.
740*7688df22SAndroid Build Coastguard Worker  */
741*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_PERF_REVISION	54
742*7688df22SAndroid Build Coastguard Worker 
743*7688df22SAndroid Build Coastguard Worker /* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of
744*7688df22SAndroid Build Coastguard Worker  * timeline syncobj through drm_i915_gem_execbuffer_ext_timeline_fences. See
745*7688df22SAndroid Build Coastguard Worker  * I915_EXEC_USE_EXTENSIONS.
746*7688df22SAndroid Build Coastguard Worker  */
747*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_EXEC_TIMELINE_FENCES 55
748*7688df22SAndroid Build Coastguard Worker 
749*7688df22SAndroid Build Coastguard Worker /* Query if the kernel supports the I915_USERPTR_PROBE flag. */
750*7688df22SAndroid Build Coastguard Worker #define I915_PARAM_HAS_USERPTR_PROBE 56
751*7688df22SAndroid Build Coastguard Worker 
752*7688df22SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
753*7688df22SAndroid Build Coastguard Worker 
754*7688df22SAndroid Build Coastguard Worker /**
755*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_getparam - Driver parameter query structure.
756*7688df22SAndroid Build Coastguard Worker  */
757*7688df22SAndroid Build Coastguard Worker struct drm_i915_getparam {
758*7688df22SAndroid Build Coastguard Worker 	/** @param: Driver parameter to query. */
759*7688df22SAndroid Build Coastguard Worker 	__s32 param;
760*7688df22SAndroid Build Coastguard Worker 
761*7688df22SAndroid Build Coastguard Worker 	/**
762*7688df22SAndroid Build Coastguard Worker 	 * @value: Address of memory where queried value should be put.
763*7688df22SAndroid Build Coastguard Worker 	 *
764*7688df22SAndroid Build Coastguard Worker 	 * WARNING: Using pointers instead of fixed-size u64 means we need to write
765*7688df22SAndroid Build Coastguard Worker 	 * compat32 code. Don't repeat this mistake.
766*7688df22SAndroid Build Coastguard Worker 	 */
767*7688df22SAndroid Build Coastguard Worker 	int *value;
768*7688df22SAndroid Build Coastguard Worker };
769*7688df22SAndroid Build Coastguard Worker 
770*7688df22SAndroid Build Coastguard Worker /**
771*7688df22SAndroid Build Coastguard Worker  * typedef drm_i915_getparam_t - Driver parameter query structure.
772*7688df22SAndroid Build Coastguard Worker  * See struct drm_i915_getparam.
773*7688df22SAndroid Build Coastguard Worker  */
774*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_getparam drm_i915_getparam_t;
775*7688df22SAndroid Build Coastguard Worker 
776*7688df22SAndroid Build Coastguard Worker /* Ioctl to set kernel params:
777*7688df22SAndroid Build Coastguard Worker  */
778*7688df22SAndroid Build Coastguard Worker #define I915_SETPARAM_USE_MI_BATCHBUFFER_START            1
779*7688df22SAndroid Build Coastguard Worker #define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY             2
780*7688df22SAndroid Build Coastguard Worker #define I915_SETPARAM_ALLOW_BATCHBUFFER                   3
781*7688df22SAndroid Build Coastguard Worker #define I915_SETPARAM_NUM_USED_FENCES                     4
782*7688df22SAndroid Build Coastguard Worker /* Must be kept compact -- no holes */
783*7688df22SAndroid Build Coastguard Worker 
784*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_setparam {
785*7688df22SAndroid Build Coastguard Worker 	int param;
786*7688df22SAndroid Build Coastguard Worker 	int value;
787*7688df22SAndroid Build Coastguard Worker } drm_i915_setparam_t;
788*7688df22SAndroid Build Coastguard Worker 
789*7688df22SAndroid Build Coastguard Worker /* A memory manager for regions of shared memory:
790*7688df22SAndroid Build Coastguard Worker  */
791*7688df22SAndroid Build Coastguard Worker #define I915_MEM_REGION_AGP 1
792*7688df22SAndroid Build Coastguard Worker 
793*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_mem_alloc {
794*7688df22SAndroid Build Coastguard Worker 	int region;
795*7688df22SAndroid Build Coastguard Worker 	int alignment;
796*7688df22SAndroid Build Coastguard Worker 	int size;
797*7688df22SAndroid Build Coastguard Worker 	int *region_offset;	/* offset from start of fb or agp */
798*7688df22SAndroid Build Coastguard Worker } drm_i915_mem_alloc_t;
799*7688df22SAndroid Build Coastguard Worker 
800*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_mem_free {
801*7688df22SAndroid Build Coastguard Worker 	int region;
802*7688df22SAndroid Build Coastguard Worker 	int region_offset;
803*7688df22SAndroid Build Coastguard Worker } drm_i915_mem_free_t;
804*7688df22SAndroid Build Coastguard Worker 
805*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_mem_init_heap {
806*7688df22SAndroid Build Coastguard Worker 	int region;
807*7688df22SAndroid Build Coastguard Worker 	int size;
808*7688df22SAndroid Build Coastguard Worker 	int start;
809*7688df22SAndroid Build Coastguard Worker } drm_i915_mem_init_heap_t;
810*7688df22SAndroid Build Coastguard Worker 
811*7688df22SAndroid Build Coastguard Worker /* Allow memory manager to be torn down and re-initialized (eg on
812*7688df22SAndroid Build Coastguard Worker  * rotate):
813*7688df22SAndroid Build Coastguard Worker  */
814*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_mem_destroy_heap {
815*7688df22SAndroid Build Coastguard Worker 	int region;
816*7688df22SAndroid Build Coastguard Worker } drm_i915_mem_destroy_heap_t;
817*7688df22SAndroid Build Coastguard Worker 
818*7688df22SAndroid Build Coastguard Worker /* Allow X server to configure which pipes to monitor for vblank signals
819*7688df22SAndroid Build Coastguard Worker  */
820*7688df22SAndroid Build Coastguard Worker #define	DRM_I915_VBLANK_PIPE_A	1
821*7688df22SAndroid Build Coastguard Worker #define	DRM_I915_VBLANK_PIPE_B	2
822*7688df22SAndroid Build Coastguard Worker 
823*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_vblank_pipe {
824*7688df22SAndroid Build Coastguard Worker 	int pipe;
825*7688df22SAndroid Build Coastguard Worker } drm_i915_vblank_pipe_t;
826*7688df22SAndroid Build Coastguard Worker 
827*7688df22SAndroid Build Coastguard Worker /* Schedule buffer swap at given vertical blank:
828*7688df22SAndroid Build Coastguard Worker  */
829*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_vblank_swap {
830*7688df22SAndroid Build Coastguard Worker 	drm_drawable_t drawable;
831*7688df22SAndroid Build Coastguard Worker 	enum drm_vblank_seq_type seqtype;
832*7688df22SAndroid Build Coastguard Worker 	unsigned int sequence;
833*7688df22SAndroid Build Coastguard Worker } drm_i915_vblank_swap_t;
834*7688df22SAndroid Build Coastguard Worker 
835*7688df22SAndroid Build Coastguard Worker typedef struct drm_i915_hws_addr {
836*7688df22SAndroid Build Coastguard Worker 	__u64 addr;
837*7688df22SAndroid Build Coastguard Worker } drm_i915_hws_addr_t;
838*7688df22SAndroid Build Coastguard Worker 
839*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_init {
840*7688df22SAndroid Build Coastguard Worker 	/**
841*7688df22SAndroid Build Coastguard Worker 	 * Beginning offset in the GTT to be managed by the DRM memory
842*7688df22SAndroid Build Coastguard Worker 	 * manager.
843*7688df22SAndroid Build Coastguard Worker 	 */
844*7688df22SAndroid Build Coastguard Worker 	__u64 gtt_start;
845*7688df22SAndroid Build Coastguard Worker 	/**
846*7688df22SAndroid Build Coastguard Worker 	 * Ending offset in the GTT to be managed by the DRM memory
847*7688df22SAndroid Build Coastguard Worker 	 * manager.
848*7688df22SAndroid Build Coastguard Worker 	 */
849*7688df22SAndroid Build Coastguard Worker 	__u64 gtt_end;
850*7688df22SAndroid Build Coastguard Worker };
851*7688df22SAndroid Build Coastguard Worker 
852*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_create {
853*7688df22SAndroid Build Coastguard Worker 	/**
854*7688df22SAndroid Build Coastguard Worker 	 * Requested size for the object.
855*7688df22SAndroid Build Coastguard Worker 	 *
856*7688df22SAndroid Build Coastguard Worker 	 * The (page-aligned) allocated size for the object will be returned.
857*7688df22SAndroid Build Coastguard Worker 	 */
858*7688df22SAndroid Build Coastguard Worker 	__u64 size;
859*7688df22SAndroid Build Coastguard Worker 	/**
860*7688df22SAndroid Build Coastguard Worker 	 * Returned handle for the object.
861*7688df22SAndroid Build Coastguard Worker 	 *
862*7688df22SAndroid Build Coastguard Worker 	 * Object handles are nonzero.
863*7688df22SAndroid Build Coastguard Worker 	 */
864*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
865*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
866*7688df22SAndroid Build Coastguard Worker };
867*7688df22SAndroid Build Coastguard Worker 
868*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_pread {
869*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object being read. */
870*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
871*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
872*7688df22SAndroid Build Coastguard Worker 	/** Offset into the object to read from */
873*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
874*7688df22SAndroid Build Coastguard Worker 	/** Length of data to read */
875*7688df22SAndroid Build Coastguard Worker 	__u64 size;
876*7688df22SAndroid Build Coastguard Worker 	/**
877*7688df22SAndroid Build Coastguard Worker 	 * Pointer to write the data into.
878*7688df22SAndroid Build Coastguard Worker 	 *
879*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
880*7688df22SAndroid Build Coastguard Worker 	 */
881*7688df22SAndroid Build Coastguard Worker 	__u64 data_ptr;
882*7688df22SAndroid Build Coastguard Worker };
883*7688df22SAndroid Build Coastguard Worker 
884*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_pwrite {
885*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object being written to. */
886*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
887*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
888*7688df22SAndroid Build Coastguard Worker 	/** Offset into the object to write to */
889*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
890*7688df22SAndroid Build Coastguard Worker 	/** Length of data to write */
891*7688df22SAndroid Build Coastguard Worker 	__u64 size;
892*7688df22SAndroid Build Coastguard Worker 	/**
893*7688df22SAndroid Build Coastguard Worker 	 * Pointer to read the data from.
894*7688df22SAndroid Build Coastguard Worker 	 *
895*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
896*7688df22SAndroid Build Coastguard Worker 	 */
897*7688df22SAndroid Build Coastguard Worker 	__u64 data_ptr;
898*7688df22SAndroid Build Coastguard Worker };
899*7688df22SAndroid Build Coastguard Worker 
900*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_mmap {
901*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object being mapped. */
902*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
903*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
904*7688df22SAndroid Build Coastguard Worker 	/** Offset in the object to map. */
905*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
906*7688df22SAndroid Build Coastguard Worker 	/**
907*7688df22SAndroid Build Coastguard Worker 	 * Length of data to map.
908*7688df22SAndroid Build Coastguard Worker 	 *
909*7688df22SAndroid Build Coastguard Worker 	 * The value will be page-aligned.
910*7688df22SAndroid Build Coastguard Worker 	 */
911*7688df22SAndroid Build Coastguard Worker 	__u64 size;
912*7688df22SAndroid Build Coastguard Worker 	/**
913*7688df22SAndroid Build Coastguard Worker 	 * Returned pointer the data was mapped at.
914*7688df22SAndroid Build Coastguard Worker 	 *
915*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
916*7688df22SAndroid Build Coastguard Worker 	 */
917*7688df22SAndroid Build Coastguard Worker 	__u64 addr_ptr;
918*7688df22SAndroid Build Coastguard Worker 
919*7688df22SAndroid Build Coastguard Worker 	/**
920*7688df22SAndroid Build Coastguard Worker 	 * Flags for extended behaviour.
921*7688df22SAndroid Build Coastguard Worker 	 *
922*7688df22SAndroid Build Coastguard Worker 	 * Added in version 2.
923*7688df22SAndroid Build Coastguard Worker 	 */
924*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
925*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_WC 0x1
926*7688df22SAndroid Build Coastguard Worker };
927*7688df22SAndroid Build Coastguard Worker 
928*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_mmap_gtt {
929*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object being mapped. */
930*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
931*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
932*7688df22SAndroid Build Coastguard Worker 	/**
933*7688df22SAndroid Build Coastguard Worker 	 * Fake offset to use for subsequent mmap call
934*7688df22SAndroid Build Coastguard Worker 	 *
935*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
936*7688df22SAndroid Build Coastguard Worker 	 */
937*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
938*7688df22SAndroid Build Coastguard Worker };
939*7688df22SAndroid Build Coastguard Worker 
940*7688df22SAndroid Build Coastguard Worker /**
941*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_mmap_offset - Retrieve an offset so we can mmap this buffer object.
942*7688df22SAndroid Build Coastguard Worker  *
943*7688df22SAndroid Build Coastguard Worker  * This struct is passed as argument to the `DRM_IOCTL_I915_GEM_MMAP_OFFSET` ioctl,
944*7688df22SAndroid Build Coastguard Worker  * and is used to retrieve the fake offset to mmap an object specified by &handle.
945*7688df22SAndroid Build Coastguard Worker  *
946*7688df22SAndroid Build Coastguard Worker  * The legacy way of using `DRM_IOCTL_I915_GEM_MMAP` is removed on gen12+.
947*7688df22SAndroid Build Coastguard Worker  * `DRM_IOCTL_I915_GEM_MMAP_GTT` is an older supported alias to this struct, but will behave
948*7688df22SAndroid Build Coastguard Worker  * as setting the &extensions to 0, and &flags to `I915_MMAP_OFFSET_GTT`.
949*7688df22SAndroid Build Coastguard Worker  */
950*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_mmap_offset {
951*7688df22SAndroid Build Coastguard Worker 	/** @handle: Handle for the object being mapped. */
952*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
953*7688df22SAndroid Build Coastguard Worker 	/** @pad: Must be zero */
954*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
955*7688df22SAndroid Build Coastguard Worker 	/**
956*7688df22SAndroid Build Coastguard Worker 	 * @offset: The fake offset to use for subsequent mmap call
957*7688df22SAndroid Build Coastguard Worker 	 *
958*7688df22SAndroid Build Coastguard Worker 	 * This is a fixed-size type for 32/64 compatibility.
959*7688df22SAndroid Build Coastguard Worker 	 */
960*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
961*7688df22SAndroid Build Coastguard Worker 
962*7688df22SAndroid Build Coastguard Worker 	/**
963*7688df22SAndroid Build Coastguard Worker 	 * @flags: Flags for extended behaviour.
964*7688df22SAndroid Build Coastguard Worker 	 *
965*7688df22SAndroid Build Coastguard Worker 	 * It is mandatory that one of the `MMAP_OFFSET` types
966*7688df22SAndroid Build Coastguard Worker 	 * should be included:
967*7688df22SAndroid Build Coastguard Worker 	 *
968*7688df22SAndroid Build Coastguard Worker 	 * - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined)
969*7688df22SAndroid Build Coastguard Worker 	 * - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching.
970*7688df22SAndroid Build Coastguard Worker 	 * - `I915_MMAP_OFFSET_WB`: Use Write-Back caching.
971*7688df22SAndroid Build Coastguard Worker 	 * - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching.
972*7688df22SAndroid Build Coastguard Worker 	 *
973*7688df22SAndroid Build Coastguard Worker 	 * On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid
974*7688df22SAndroid Build Coastguard Worker 	 * type. On devices without local memory, this caching mode is invalid.
975*7688df22SAndroid Build Coastguard Worker 	 *
976*7688df22SAndroid Build Coastguard Worker 	 * As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will
977*7688df22SAndroid Build Coastguard Worker 	 * be used, depending on the object placement on creation. WB will be used
978*7688df22SAndroid Build Coastguard Worker 	 * when the object can only exist in system memory, WC otherwise.
979*7688df22SAndroid Build Coastguard Worker 	 */
980*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
981*7688df22SAndroid Build Coastguard Worker 
982*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_OFFSET_GTT	0
983*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_OFFSET_WC	1
984*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_OFFSET_WB	2
985*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_OFFSET_UC	3
986*7688df22SAndroid Build Coastguard Worker #define I915_MMAP_OFFSET_FIXED	4
987*7688df22SAndroid Build Coastguard Worker 
988*7688df22SAndroid Build Coastguard Worker 	/**
989*7688df22SAndroid Build Coastguard Worker 	 * @extensions: Zero-terminated chain of extensions.
990*7688df22SAndroid Build Coastguard Worker 	 *
991*7688df22SAndroid Build Coastguard Worker 	 * No current extensions defined; mbz.
992*7688df22SAndroid Build Coastguard Worker 	 */
993*7688df22SAndroid Build Coastguard Worker 	__u64 extensions;
994*7688df22SAndroid Build Coastguard Worker };
995*7688df22SAndroid Build Coastguard Worker 
996*7688df22SAndroid Build Coastguard Worker /**
997*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_set_domain - Adjust the objects write or read domain, in
998*7688df22SAndroid Build Coastguard Worker  * preparation for accessing the pages via some CPU domain.
999*7688df22SAndroid Build Coastguard Worker  *
1000*7688df22SAndroid Build Coastguard Worker  * Specifying a new write or read domain will flush the object out of the
1001*7688df22SAndroid Build Coastguard Worker  * previous domain(if required), before then updating the objects domain
1002*7688df22SAndroid Build Coastguard Worker  * tracking with the new domain.
1003*7688df22SAndroid Build Coastguard Worker  *
1004*7688df22SAndroid Build Coastguard Worker  * Note this might involve waiting for the object first if it is still active on
1005*7688df22SAndroid Build Coastguard Worker  * the GPU.
1006*7688df22SAndroid Build Coastguard Worker  *
1007*7688df22SAndroid Build Coastguard Worker  * Supported values for @read_domains and @write_domain:
1008*7688df22SAndroid Build Coastguard Worker  *
1009*7688df22SAndroid Build Coastguard Worker  *	- I915_GEM_DOMAIN_WC: Uncached write-combined domain
1010*7688df22SAndroid Build Coastguard Worker  *	- I915_GEM_DOMAIN_CPU: CPU cache domain
1011*7688df22SAndroid Build Coastguard Worker  *	- I915_GEM_DOMAIN_GTT: Mappable aperture domain
1012*7688df22SAndroid Build Coastguard Worker  *
1013*7688df22SAndroid Build Coastguard Worker  * All other domains are rejected.
1014*7688df22SAndroid Build Coastguard Worker  *
1015*7688df22SAndroid Build Coastguard Worker  * Note that for discrete, starting from DG1, this is no longer supported, and
1016*7688df22SAndroid Build Coastguard Worker  * is instead rejected. On such platforms the CPU domain is effectively static,
1017*7688df22SAndroid Build Coastguard Worker  * where we also only support a single &drm_i915_gem_mmap_offset cache mode,
1018*7688df22SAndroid Build Coastguard Worker  * which can't be set explicitly and instead depends on the object placements,
1019*7688df22SAndroid Build Coastguard Worker  * as per the below.
1020*7688df22SAndroid Build Coastguard Worker  *
1021*7688df22SAndroid Build Coastguard Worker  * Implicit caching rules, starting from DG1:
1022*7688df22SAndroid Build Coastguard Worker  *
1023*7688df22SAndroid Build Coastguard Worker  *	- If any of the object placements (see &drm_i915_gem_create_ext_memory_regions)
1024*7688df22SAndroid Build Coastguard Worker  *	  contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and
1025*7688df22SAndroid Build Coastguard Worker  *	  mapped as write-combined only.
1026*7688df22SAndroid Build Coastguard Worker  *
1027*7688df22SAndroid Build Coastguard Worker  *	- Everything else is always allocated and mapped as write-back, with the
1028*7688df22SAndroid Build Coastguard Worker  *	  guarantee that everything is also coherent with the GPU.
1029*7688df22SAndroid Build Coastguard Worker  *
1030*7688df22SAndroid Build Coastguard Worker  * Note that this is likely to change in the future again, where we might need
1031*7688df22SAndroid Build Coastguard Worker  * more flexibility on future devices, so making this all explicit as part of a
1032*7688df22SAndroid Build Coastguard Worker  * new &drm_i915_gem_create_ext extension is probable.
1033*7688df22SAndroid Build Coastguard Worker  */
1034*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_set_domain {
1035*7688df22SAndroid Build Coastguard Worker 	/** @handle: Handle for the object. */
1036*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1037*7688df22SAndroid Build Coastguard Worker 
1038*7688df22SAndroid Build Coastguard Worker 	/** @read_domains: New read domains. */
1039*7688df22SAndroid Build Coastguard Worker 	__u32 read_domains;
1040*7688df22SAndroid Build Coastguard Worker 
1041*7688df22SAndroid Build Coastguard Worker 	/**
1042*7688df22SAndroid Build Coastguard Worker 	 * @write_domain: New write domain.
1043*7688df22SAndroid Build Coastguard Worker 	 *
1044*7688df22SAndroid Build Coastguard Worker 	 * Note that having something in the write domain implies it's in the
1045*7688df22SAndroid Build Coastguard Worker 	 * read domain, and only that read domain.
1046*7688df22SAndroid Build Coastguard Worker 	 */
1047*7688df22SAndroid Build Coastguard Worker 	__u32 write_domain;
1048*7688df22SAndroid Build Coastguard Worker };
1049*7688df22SAndroid Build Coastguard Worker 
1050*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_sw_finish {
1051*7688df22SAndroid Build Coastguard Worker 	/** Handle for the object */
1052*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1053*7688df22SAndroid Build Coastguard Worker };
1054*7688df22SAndroid Build Coastguard Worker 
1055*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_relocation_entry {
1056*7688df22SAndroid Build Coastguard Worker 	/**
1057*7688df22SAndroid Build Coastguard Worker 	 * Handle of the buffer being pointed to by this relocation entry.
1058*7688df22SAndroid Build Coastguard Worker 	 *
1059*7688df22SAndroid Build Coastguard Worker 	 * It's appealing to make this be an index into the mm_validate_entry
1060*7688df22SAndroid Build Coastguard Worker 	 * list to refer to the buffer, but this allows the driver to create
1061*7688df22SAndroid Build Coastguard Worker 	 * a relocation list for state buffers and not re-write it per
1062*7688df22SAndroid Build Coastguard Worker 	 * exec using the buffer.
1063*7688df22SAndroid Build Coastguard Worker 	 */
1064*7688df22SAndroid Build Coastguard Worker 	__u32 target_handle;
1065*7688df22SAndroid Build Coastguard Worker 
1066*7688df22SAndroid Build Coastguard Worker 	/**
1067*7688df22SAndroid Build Coastguard Worker 	 * Value to be added to the offset of the target buffer to make up
1068*7688df22SAndroid Build Coastguard Worker 	 * the relocation entry.
1069*7688df22SAndroid Build Coastguard Worker 	 */
1070*7688df22SAndroid Build Coastguard Worker 	__u32 delta;
1071*7688df22SAndroid Build Coastguard Worker 
1072*7688df22SAndroid Build Coastguard Worker 	/** Offset in the buffer the relocation entry will be written into */
1073*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
1074*7688df22SAndroid Build Coastguard Worker 
1075*7688df22SAndroid Build Coastguard Worker 	/**
1076*7688df22SAndroid Build Coastguard Worker 	 * Offset value of the target buffer that the relocation entry was last
1077*7688df22SAndroid Build Coastguard Worker 	 * written as.
1078*7688df22SAndroid Build Coastguard Worker 	 *
1079*7688df22SAndroid Build Coastguard Worker 	 * If the buffer has the same offset as last time, we can skip syncing
1080*7688df22SAndroid Build Coastguard Worker 	 * and writing the relocation.  This value is written back out by
1081*7688df22SAndroid Build Coastguard Worker 	 * the execbuffer ioctl when the relocation is written.
1082*7688df22SAndroid Build Coastguard Worker 	 */
1083*7688df22SAndroid Build Coastguard Worker 	__u64 presumed_offset;
1084*7688df22SAndroid Build Coastguard Worker 
1085*7688df22SAndroid Build Coastguard Worker 	/**
1086*7688df22SAndroid Build Coastguard Worker 	 * Target memory domains read by this operation.
1087*7688df22SAndroid Build Coastguard Worker 	 */
1088*7688df22SAndroid Build Coastguard Worker 	__u32 read_domains;
1089*7688df22SAndroid Build Coastguard Worker 
1090*7688df22SAndroid Build Coastguard Worker 	/**
1091*7688df22SAndroid Build Coastguard Worker 	 * Target memory domains written by this operation.
1092*7688df22SAndroid Build Coastguard Worker 	 *
1093*7688df22SAndroid Build Coastguard Worker 	 * Note that only one domain may be written by the whole
1094*7688df22SAndroid Build Coastguard Worker 	 * execbuffer operation, so that where there are conflicts,
1095*7688df22SAndroid Build Coastguard Worker 	 * the application will get -EINVAL back.
1096*7688df22SAndroid Build Coastguard Worker 	 */
1097*7688df22SAndroid Build Coastguard Worker 	__u32 write_domain;
1098*7688df22SAndroid Build Coastguard Worker };
1099*7688df22SAndroid Build Coastguard Worker 
1100*7688df22SAndroid Build Coastguard Worker /** @{
1101*7688df22SAndroid Build Coastguard Worker  * Intel memory domains
1102*7688df22SAndroid Build Coastguard Worker  *
1103*7688df22SAndroid Build Coastguard Worker  * Most of these just align with the various caches in
1104*7688df22SAndroid Build Coastguard Worker  * the system and are used to flush and invalidate as
1105*7688df22SAndroid Build Coastguard Worker  * objects end up cached in different domains.
1106*7688df22SAndroid Build Coastguard Worker  */
1107*7688df22SAndroid Build Coastguard Worker /** CPU cache */
1108*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_CPU		0x00000001
1109*7688df22SAndroid Build Coastguard Worker /** Render cache, used by 2D and 3D drawing */
1110*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_RENDER		0x00000002
1111*7688df22SAndroid Build Coastguard Worker /** Sampler cache, used by texture engine */
1112*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_SAMPLER		0x00000004
1113*7688df22SAndroid Build Coastguard Worker /** Command queue, used to load batch buffers */
1114*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_COMMAND		0x00000008
1115*7688df22SAndroid Build Coastguard Worker /** Instruction cache, used by shader programs */
1116*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_INSTRUCTION	0x00000010
1117*7688df22SAndroid Build Coastguard Worker /** Vertex address cache */
1118*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_VERTEX		0x00000020
1119*7688df22SAndroid Build Coastguard Worker /** GTT domain - aperture and scanout */
1120*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_GTT		0x00000040
1121*7688df22SAndroid Build Coastguard Worker /** WC domain - uncached access */
1122*7688df22SAndroid Build Coastguard Worker #define I915_GEM_DOMAIN_WC		0x00000080
1123*7688df22SAndroid Build Coastguard Worker /** @} */
1124*7688df22SAndroid Build Coastguard Worker 
1125*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_exec_object {
1126*7688df22SAndroid Build Coastguard Worker 	/**
1127*7688df22SAndroid Build Coastguard Worker 	 * User's handle for a buffer to be bound into the GTT for this
1128*7688df22SAndroid Build Coastguard Worker 	 * operation.
1129*7688df22SAndroid Build Coastguard Worker 	 */
1130*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1131*7688df22SAndroid Build Coastguard Worker 
1132*7688df22SAndroid Build Coastguard Worker 	/** Number of relocations to be performed on this buffer */
1133*7688df22SAndroid Build Coastguard Worker 	__u32 relocation_count;
1134*7688df22SAndroid Build Coastguard Worker 	/**
1135*7688df22SAndroid Build Coastguard Worker 	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
1136*7688df22SAndroid Build Coastguard Worker 	 * the relocations to be performed in this buffer.
1137*7688df22SAndroid Build Coastguard Worker 	 */
1138*7688df22SAndroid Build Coastguard Worker 	__u64 relocs_ptr;
1139*7688df22SAndroid Build Coastguard Worker 
1140*7688df22SAndroid Build Coastguard Worker 	/** Required alignment in graphics aperture */
1141*7688df22SAndroid Build Coastguard Worker 	__u64 alignment;
1142*7688df22SAndroid Build Coastguard Worker 
1143*7688df22SAndroid Build Coastguard Worker 	/**
1144*7688df22SAndroid Build Coastguard Worker 	 * Returned value of the updated offset of the object, for future
1145*7688df22SAndroid Build Coastguard Worker 	 * presumed_offset writes.
1146*7688df22SAndroid Build Coastguard Worker 	 */
1147*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
1148*7688df22SAndroid Build Coastguard Worker };
1149*7688df22SAndroid Build Coastguard Worker 
1150*7688df22SAndroid Build Coastguard Worker /* DRM_IOCTL_I915_GEM_EXECBUFFER was removed in Linux 5.13 */
1151*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_execbuffer {
1152*7688df22SAndroid Build Coastguard Worker 	/**
1153*7688df22SAndroid Build Coastguard Worker 	 * List of buffers to be validated with their relocations to be
1154*7688df22SAndroid Build Coastguard Worker 	 * performend on them.
1155*7688df22SAndroid Build Coastguard Worker 	 *
1156*7688df22SAndroid Build Coastguard Worker 	 * This is a pointer to an array of struct drm_i915_gem_validate_entry.
1157*7688df22SAndroid Build Coastguard Worker 	 *
1158*7688df22SAndroid Build Coastguard Worker 	 * These buffers must be listed in an order such that all relocations
1159*7688df22SAndroid Build Coastguard Worker 	 * a buffer is performing refer to buffers that have already appeared
1160*7688df22SAndroid Build Coastguard Worker 	 * in the validate list.
1161*7688df22SAndroid Build Coastguard Worker 	 */
1162*7688df22SAndroid Build Coastguard Worker 	__u64 buffers_ptr;
1163*7688df22SAndroid Build Coastguard Worker 	__u32 buffer_count;
1164*7688df22SAndroid Build Coastguard Worker 
1165*7688df22SAndroid Build Coastguard Worker 	/** Offset in the batchbuffer to start execution from. */
1166*7688df22SAndroid Build Coastguard Worker 	__u32 batch_start_offset;
1167*7688df22SAndroid Build Coastguard Worker 	/** Bytes used in batchbuffer from batch_start_offset */
1168*7688df22SAndroid Build Coastguard Worker 	__u32 batch_len;
1169*7688df22SAndroid Build Coastguard Worker 	__u32 DR1;
1170*7688df22SAndroid Build Coastguard Worker 	__u32 DR4;
1171*7688df22SAndroid Build Coastguard Worker 	__u32 num_cliprects;
1172*7688df22SAndroid Build Coastguard Worker 	/** This is a struct drm_clip_rect *cliprects */
1173*7688df22SAndroid Build Coastguard Worker 	__u64 cliprects_ptr;
1174*7688df22SAndroid Build Coastguard Worker };
1175*7688df22SAndroid Build Coastguard Worker 
1176*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_exec_object2 {
1177*7688df22SAndroid Build Coastguard Worker 	/**
1178*7688df22SAndroid Build Coastguard Worker 	 * User's handle for a buffer to be bound into the GTT for this
1179*7688df22SAndroid Build Coastguard Worker 	 * operation.
1180*7688df22SAndroid Build Coastguard Worker 	 */
1181*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1182*7688df22SAndroid Build Coastguard Worker 
1183*7688df22SAndroid Build Coastguard Worker 	/** Number of relocations to be performed on this buffer */
1184*7688df22SAndroid Build Coastguard Worker 	__u32 relocation_count;
1185*7688df22SAndroid Build Coastguard Worker 	/**
1186*7688df22SAndroid Build Coastguard Worker 	 * Pointer to array of struct drm_i915_gem_relocation_entry containing
1187*7688df22SAndroid Build Coastguard Worker 	 * the relocations to be performed in this buffer.
1188*7688df22SAndroid Build Coastguard Worker 	 */
1189*7688df22SAndroid Build Coastguard Worker 	__u64 relocs_ptr;
1190*7688df22SAndroid Build Coastguard Worker 
1191*7688df22SAndroid Build Coastguard Worker 	/** Required alignment in graphics aperture */
1192*7688df22SAndroid Build Coastguard Worker 	__u64 alignment;
1193*7688df22SAndroid Build Coastguard Worker 
1194*7688df22SAndroid Build Coastguard Worker 	/**
1195*7688df22SAndroid Build Coastguard Worker 	 * When the EXEC_OBJECT_PINNED flag is specified this is populated by
1196*7688df22SAndroid Build Coastguard Worker 	 * the user with the GTT offset at which this object will be pinned.
1197*7688df22SAndroid Build Coastguard Worker 	 *
1198*7688df22SAndroid Build Coastguard Worker 	 * When the I915_EXEC_NO_RELOC flag is specified this must contain the
1199*7688df22SAndroid Build Coastguard Worker 	 * presumed_offset of the object.
1200*7688df22SAndroid Build Coastguard Worker 	 *
1201*7688df22SAndroid Build Coastguard Worker 	 * During execbuffer2 the kernel populates it with the value of the
1202*7688df22SAndroid Build Coastguard Worker 	 * current GTT offset of the object, for future presumed_offset writes.
1203*7688df22SAndroid Build Coastguard Worker 	 *
1204*7688df22SAndroid Build Coastguard Worker 	 * See struct drm_i915_gem_create_ext for the rules when dealing with
1205*7688df22SAndroid Build Coastguard Worker 	 * alignment restrictions with I915_MEMORY_CLASS_DEVICE, on devices with
1206*7688df22SAndroid Build Coastguard Worker 	 * minimum page sizes, like DG2.
1207*7688df22SAndroid Build Coastguard Worker 	 */
1208*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
1209*7688df22SAndroid Build Coastguard Worker 
1210*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_NEEDS_FENCE		 (1<<0)
1211*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_NEEDS_GTT		 (1<<1)
1212*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_WRITE		 (1<<2)
1213*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_SUPPORTS_48B_ADDRESS (1<<3)
1214*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_PINNED		 (1<<4)
1215*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_PAD_TO_SIZE		 (1<<5)
1216*7688df22SAndroid Build Coastguard Worker /* The kernel implicitly tracks GPU activity on all GEM objects, and
1217*7688df22SAndroid Build Coastguard Worker  * synchronises operations with outstanding rendering. This includes
1218*7688df22SAndroid Build Coastguard Worker  * rendering on other devices if exported via dma-buf. However, sometimes
1219*7688df22SAndroid Build Coastguard Worker  * this tracking is too coarse and the user knows better. For example,
1220*7688df22SAndroid Build Coastguard Worker  * if the object is split into non-overlapping ranges shared between different
1221*7688df22SAndroid Build Coastguard Worker  * clients or engines (i.e. suballocating objects), the implicit tracking
1222*7688df22SAndroid Build Coastguard Worker  * by kernel assumes that each operation affects the whole object rather
1223*7688df22SAndroid Build Coastguard Worker  * than an individual range, causing needless synchronisation between clients.
1224*7688df22SAndroid Build Coastguard Worker  * The kernel will also forgo any CPU cache flushes prior to rendering from
1225*7688df22SAndroid Build Coastguard Worker  * the object as the client is expected to be also handling such domain
1226*7688df22SAndroid Build Coastguard Worker  * tracking.
1227*7688df22SAndroid Build Coastguard Worker  *
1228*7688df22SAndroid Build Coastguard Worker  * The kernel maintains the implicit tracking in order to manage resources
1229*7688df22SAndroid Build Coastguard Worker  * used by the GPU - this flag only disables the synchronisation prior to
1230*7688df22SAndroid Build Coastguard Worker  * rendering with this object in this execbuf.
1231*7688df22SAndroid Build Coastguard Worker  *
1232*7688df22SAndroid Build Coastguard Worker  * Opting out of implicit synhronisation requires the user to do its own
1233*7688df22SAndroid Build Coastguard Worker  * explicit tracking to avoid rendering corruption. See, for example,
1234*7688df22SAndroid Build Coastguard Worker  * I915_PARAM_HAS_EXEC_FENCE to order execbufs and execute them asynchronously.
1235*7688df22SAndroid Build Coastguard Worker  */
1236*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_ASYNC		(1<<6)
1237*7688df22SAndroid Build Coastguard Worker /* Request that the contents of this execobject be copied into the error
1238*7688df22SAndroid Build Coastguard Worker  * state upon a GPU hang involving this batch for post-mortem debugging.
1239*7688df22SAndroid Build Coastguard Worker  * These buffers are recorded in no particular order as "user" in
1240*7688df22SAndroid Build Coastguard Worker  * /sys/class/drm/cardN/error. Query I915_PARAM_HAS_EXEC_CAPTURE to see
1241*7688df22SAndroid Build Coastguard Worker  * if the kernel supports this flag.
1242*7688df22SAndroid Build Coastguard Worker  */
1243*7688df22SAndroid Build Coastguard Worker #define EXEC_OBJECT_CAPTURE		(1<<7)
1244*7688df22SAndroid Build Coastguard Worker /* All remaining bits are MBZ and RESERVED FOR FUTURE USE */
1245*7688df22SAndroid Build Coastguard Worker #define __EXEC_OBJECT_UNKNOWN_FLAGS -(EXEC_OBJECT_CAPTURE<<1)
1246*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
1247*7688df22SAndroid Build Coastguard Worker 
1248*7688df22SAndroid Build Coastguard Worker 	union {
1249*7688df22SAndroid Build Coastguard Worker 		__u64 rsvd1;
1250*7688df22SAndroid Build Coastguard Worker 		__u64 pad_to_size;
1251*7688df22SAndroid Build Coastguard Worker 	};
1252*7688df22SAndroid Build Coastguard Worker 	__u64 rsvd2;
1253*7688df22SAndroid Build Coastguard Worker };
1254*7688df22SAndroid Build Coastguard Worker 
1255*7688df22SAndroid Build Coastguard Worker /**
1256*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_exec_fence - An input or output fence for the execbuf
1257*7688df22SAndroid Build Coastguard Worker  * ioctl.
1258*7688df22SAndroid Build Coastguard Worker  *
1259*7688df22SAndroid Build Coastguard Worker  * The request will wait for input fence to signal before submission.
1260*7688df22SAndroid Build Coastguard Worker  *
1261*7688df22SAndroid Build Coastguard Worker  * The returned output fence will be signaled after the completion of the
1262*7688df22SAndroid Build Coastguard Worker  * request.
1263*7688df22SAndroid Build Coastguard Worker  */
1264*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_exec_fence {
1265*7688df22SAndroid Build Coastguard Worker 	/** @handle: User's handle for a drm_syncobj to wait on or signal. */
1266*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1267*7688df22SAndroid Build Coastguard Worker 
1268*7688df22SAndroid Build Coastguard Worker 	/**
1269*7688df22SAndroid Build Coastguard Worker 	 * @flags: Supported flags are:
1270*7688df22SAndroid Build Coastguard Worker 	 *
1271*7688df22SAndroid Build Coastguard Worker 	 * I915_EXEC_FENCE_WAIT:
1272*7688df22SAndroid Build Coastguard Worker 	 * Wait for the input fence before request submission.
1273*7688df22SAndroid Build Coastguard Worker 	 *
1274*7688df22SAndroid Build Coastguard Worker 	 * I915_EXEC_FENCE_SIGNAL:
1275*7688df22SAndroid Build Coastguard Worker 	 * Return request completion fence as output
1276*7688df22SAndroid Build Coastguard Worker 	 */
1277*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1278*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_WAIT            (1<<0)
1279*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_SIGNAL          (1<<1)
1280*7688df22SAndroid Build Coastguard Worker #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1))
1281*7688df22SAndroid Build Coastguard Worker };
1282*7688df22SAndroid Build Coastguard Worker 
1283*7688df22SAndroid Build Coastguard Worker /**
1284*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_execbuffer_ext_timeline_fences - Timeline fences
1285*7688df22SAndroid Build Coastguard Worker  * for execbuf ioctl.
1286*7688df22SAndroid Build Coastguard Worker  *
1287*7688df22SAndroid Build Coastguard Worker  * This structure describes an array of drm_syncobj and associated points for
1288*7688df22SAndroid Build Coastguard Worker  * timeline variants of drm_syncobj. It is invalid to append this structure to
1289*7688df22SAndroid Build Coastguard Worker  * the execbuf if I915_EXEC_FENCE_ARRAY is set.
1290*7688df22SAndroid Build Coastguard Worker  */
1291*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_execbuffer_ext_timeline_fences {
1292*7688df22SAndroid Build Coastguard Worker #define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0
1293*7688df22SAndroid Build Coastguard Worker 	/** @base: Extension link. See struct i915_user_extension. */
1294*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
1295*7688df22SAndroid Build Coastguard Worker 
1296*7688df22SAndroid Build Coastguard Worker 	/**
1297*7688df22SAndroid Build Coastguard Worker 	 * @fence_count: Number of elements in the @handles_ptr & @value_ptr
1298*7688df22SAndroid Build Coastguard Worker 	 * arrays.
1299*7688df22SAndroid Build Coastguard Worker 	 */
1300*7688df22SAndroid Build Coastguard Worker 	__u64 fence_count;
1301*7688df22SAndroid Build Coastguard Worker 
1302*7688df22SAndroid Build Coastguard Worker 	/**
1303*7688df22SAndroid Build Coastguard Worker 	 * @handles_ptr: Pointer to an array of struct drm_i915_gem_exec_fence
1304*7688df22SAndroid Build Coastguard Worker 	 * of length @fence_count.
1305*7688df22SAndroid Build Coastguard Worker 	 */
1306*7688df22SAndroid Build Coastguard Worker 	__u64 handles_ptr;
1307*7688df22SAndroid Build Coastguard Worker 
1308*7688df22SAndroid Build Coastguard Worker 	/**
1309*7688df22SAndroid Build Coastguard Worker 	 * @values_ptr: Pointer to an array of u64 values of length
1310*7688df22SAndroid Build Coastguard Worker 	 * @fence_count.
1311*7688df22SAndroid Build Coastguard Worker 	 * Values must be 0 for a binary drm_syncobj. A Value of 0 for a
1312*7688df22SAndroid Build Coastguard Worker 	 * timeline drm_syncobj is invalid as it turns a drm_syncobj into a
1313*7688df22SAndroid Build Coastguard Worker 	 * binary one.
1314*7688df22SAndroid Build Coastguard Worker 	 */
1315*7688df22SAndroid Build Coastguard Worker 	__u64 values_ptr;
1316*7688df22SAndroid Build Coastguard Worker };
1317*7688df22SAndroid Build Coastguard Worker 
1318*7688df22SAndroid Build Coastguard Worker /**
1319*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_execbuffer2 - Structure for DRM_I915_GEM_EXECBUFFER2
1320*7688df22SAndroid Build Coastguard Worker  * ioctl.
1321*7688df22SAndroid Build Coastguard Worker  */
1322*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_execbuffer2 {
1323*7688df22SAndroid Build Coastguard Worker 	/** @buffers_ptr: Pointer to a list of gem_exec_object2 structs */
1324*7688df22SAndroid Build Coastguard Worker 	__u64 buffers_ptr;
1325*7688df22SAndroid Build Coastguard Worker 
1326*7688df22SAndroid Build Coastguard Worker 	/** @buffer_count: Number of elements in @buffers_ptr array */
1327*7688df22SAndroid Build Coastguard Worker 	__u32 buffer_count;
1328*7688df22SAndroid Build Coastguard Worker 
1329*7688df22SAndroid Build Coastguard Worker 	/**
1330*7688df22SAndroid Build Coastguard Worker 	 * @batch_start_offset: Offset in the batchbuffer to start execution
1331*7688df22SAndroid Build Coastguard Worker 	 * from.
1332*7688df22SAndroid Build Coastguard Worker 	 */
1333*7688df22SAndroid Build Coastguard Worker 	__u32 batch_start_offset;
1334*7688df22SAndroid Build Coastguard Worker 
1335*7688df22SAndroid Build Coastguard Worker 	/**
1336*7688df22SAndroid Build Coastguard Worker 	 * @batch_len: Length in bytes of the batch buffer, starting from the
1337*7688df22SAndroid Build Coastguard Worker 	 * @batch_start_offset. If 0, length is assumed to be the batch buffer
1338*7688df22SAndroid Build Coastguard Worker 	 * object size.
1339*7688df22SAndroid Build Coastguard Worker 	 */
1340*7688df22SAndroid Build Coastguard Worker 	__u32 batch_len;
1341*7688df22SAndroid Build Coastguard Worker 
1342*7688df22SAndroid Build Coastguard Worker 	/** @DR1: deprecated */
1343*7688df22SAndroid Build Coastguard Worker 	__u32 DR1;
1344*7688df22SAndroid Build Coastguard Worker 
1345*7688df22SAndroid Build Coastguard Worker 	/** @DR4: deprecated */
1346*7688df22SAndroid Build Coastguard Worker 	__u32 DR4;
1347*7688df22SAndroid Build Coastguard Worker 
1348*7688df22SAndroid Build Coastguard Worker 	/** @num_cliprects: See @cliprects_ptr */
1349*7688df22SAndroid Build Coastguard Worker 	__u32 num_cliprects;
1350*7688df22SAndroid Build Coastguard Worker 
1351*7688df22SAndroid Build Coastguard Worker 	/**
1352*7688df22SAndroid Build Coastguard Worker 	 * @cliprects_ptr: Kernel clipping was a DRI1 misfeature.
1353*7688df22SAndroid Build Coastguard Worker 	 *
1354*7688df22SAndroid Build Coastguard Worker 	 * It is invalid to use this field if I915_EXEC_FENCE_ARRAY or
1355*7688df22SAndroid Build Coastguard Worker 	 * I915_EXEC_USE_EXTENSIONS flags are not set.
1356*7688df22SAndroid Build Coastguard Worker 	 *
1357*7688df22SAndroid Build Coastguard Worker 	 * If I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array
1358*7688df22SAndroid Build Coastguard Worker 	 * of &drm_i915_gem_exec_fence and @num_cliprects is the length of the
1359*7688df22SAndroid Build Coastguard Worker 	 * array.
1360*7688df22SAndroid Build Coastguard Worker 	 *
1361*7688df22SAndroid Build Coastguard Worker 	 * If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a
1362*7688df22SAndroid Build Coastguard Worker 	 * single &i915_user_extension and num_cliprects is 0.
1363*7688df22SAndroid Build Coastguard Worker 	 */
1364*7688df22SAndroid Build Coastguard Worker 	__u64 cliprects_ptr;
1365*7688df22SAndroid Build Coastguard Worker 
1366*7688df22SAndroid Build Coastguard Worker 	/** @flags: Execbuf flags */
1367*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
1368*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_RING_MASK              (0x3f)
1369*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_DEFAULT                (0<<0)
1370*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_RENDER                 (1<<0)
1371*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD                    (2<<0)
1372*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BLT                    (3<<0)
1373*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_VEBOX                  (4<<0)
1374*7688df22SAndroid Build Coastguard Worker 
1375*7688df22SAndroid Build Coastguard Worker /* Used for switching the constants addressing mode on gen4+ RENDER ring.
1376*7688df22SAndroid Build Coastguard Worker  * Gen6+ only supports relative addressing to dynamic state (default) and
1377*7688df22SAndroid Build Coastguard Worker  * absolute addressing.
1378*7688df22SAndroid Build Coastguard Worker  *
1379*7688df22SAndroid Build Coastguard Worker  * These flags are ignored for the BSD and BLT rings.
1380*7688df22SAndroid Build Coastguard Worker  */
1381*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_MASK 	(3<<6)
1382*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
1383*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_ABSOLUTE 	(1<<6)
1384*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
1385*7688df22SAndroid Build Coastguard Worker 
1386*7688df22SAndroid Build Coastguard Worker /** Resets the SO write offset registers for transform feedback on gen7. */
1387*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_GEN7_SOL_RESET	(1<<8)
1388*7688df22SAndroid Build Coastguard Worker 
1389*7688df22SAndroid Build Coastguard Worker /** Request a privileged ("secure") batch buffer. Note only available for
1390*7688df22SAndroid Build Coastguard Worker  * DRM_ROOT_ONLY | DRM_MASTER processes.
1391*7688df22SAndroid Build Coastguard Worker  */
1392*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_SECURE		(1<<9)
1393*7688df22SAndroid Build Coastguard Worker 
1394*7688df22SAndroid Build Coastguard Worker /** Inform the kernel that the batch is and will always be pinned. This
1395*7688df22SAndroid Build Coastguard Worker  * negates the requirement for a workaround to be performed to avoid
1396*7688df22SAndroid Build Coastguard Worker  * an incoherent CS (such as can be found on 830/845). If this flag is
1397*7688df22SAndroid Build Coastguard Worker  * not passed, the kernel will endeavour to make sure the batch is
1398*7688df22SAndroid Build Coastguard Worker  * coherent with the CS before execution. If this flag is passed,
1399*7688df22SAndroid Build Coastguard Worker  * userspace assumes the responsibility for ensuring the same.
1400*7688df22SAndroid Build Coastguard Worker  */
1401*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_IS_PINNED		(1<<10)
1402*7688df22SAndroid Build Coastguard Worker 
1403*7688df22SAndroid Build Coastguard Worker /** Provide a hint to the kernel that the command stream and auxiliary
1404*7688df22SAndroid Build Coastguard Worker  * state buffers already holds the correct presumed addresses and so the
1405*7688df22SAndroid Build Coastguard Worker  * relocation process may be skipped if no buffers need to be moved in
1406*7688df22SAndroid Build Coastguard Worker  * preparation for the execbuffer.
1407*7688df22SAndroid Build Coastguard Worker  */
1408*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_NO_RELOC		(1<<11)
1409*7688df22SAndroid Build Coastguard Worker 
1410*7688df22SAndroid Build Coastguard Worker /** Use the reloc.handle as an index into the exec object array rather
1411*7688df22SAndroid Build Coastguard Worker  * than as the per-file handle.
1412*7688df22SAndroid Build Coastguard Worker  */
1413*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_HANDLE_LUT		(1<<12)
1414*7688df22SAndroid Build Coastguard Worker 
1415*7688df22SAndroid Build Coastguard Worker /** Used for switching BSD rings on the platforms with two BSD rings */
1416*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD_SHIFT	 (13)
1417*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD_MASK	 (3 << I915_EXEC_BSD_SHIFT)
1418*7688df22SAndroid Build Coastguard Worker /* default ping-pong mode */
1419*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD_DEFAULT	 (0 << I915_EXEC_BSD_SHIFT)
1420*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD_RING1	 (1 << I915_EXEC_BSD_SHIFT)
1421*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BSD_RING2	 (2 << I915_EXEC_BSD_SHIFT)
1422*7688df22SAndroid Build Coastguard Worker 
1423*7688df22SAndroid Build Coastguard Worker /** Tell the kernel that the batchbuffer is processed by
1424*7688df22SAndroid Build Coastguard Worker  *  the resource streamer.
1425*7688df22SAndroid Build Coastguard Worker  */
1426*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_RESOURCE_STREAMER     (1<<15)
1427*7688df22SAndroid Build Coastguard Worker 
1428*7688df22SAndroid Build Coastguard Worker /* Setting I915_EXEC_FENCE_IN implies that lower_32_bits(rsvd2) represent
1429*7688df22SAndroid Build Coastguard Worker  * a sync_file fd to wait upon (in a nonblocking manner) prior to executing
1430*7688df22SAndroid Build Coastguard Worker  * the batch.
1431*7688df22SAndroid Build Coastguard Worker  *
1432*7688df22SAndroid Build Coastguard Worker  * Returns -EINVAL if the sync_file fd cannot be found.
1433*7688df22SAndroid Build Coastguard Worker  */
1434*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_IN		(1<<16)
1435*7688df22SAndroid Build Coastguard Worker 
1436*7688df22SAndroid Build Coastguard Worker /* Setting I915_EXEC_FENCE_OUT causes the ioctl to return a sync_file fd
1437*7688df22SAndroid Build Coastguard Worker  * in the upper_32_bits(rsvd2) upon success. Ownership of the fd is given
1438*7688df22SAndroid Build Coastguard Worker  * to the caller, and it should be close() after use. (The fd is a regular
1439*7688df22SAndroid Build Coastguard Worker  * file descriptor and will be cleaned up on process termination. It holds
1440*7688df22SAndroid Build Coastguard Worker  * a reference to the request, but nothing else.)
1441*7688df22SAndroid Build Coastguard Worker  *
1442*7688df22SAndroid Build Coastguard Worker  * The sync_file fd can be combined with other sync_file and passed either
1443*7688df22SAndroid Build Coastguard Worker  * to execbuf using I915_EXEC_FENCE_IN, to atomic KMS ioctls (so that a flip
1444*7688df22SAndroid Build Coastguard Worker  * will only occur after this request completes), or to other devices.
1445*7688df22SAndroid Build Coastguard Worker  *
1446*7688df22SAndroid Build Coastguard Worker  * Using I915_EXEC_FENCE_OUT requires use of
1447*7688df22SAndroid Build Coastguard Worker  * DRM_IOCTL_I915_GEM_EXECBUFFER2_WR ioctl so that the result is written
1448*7688df22SAndroid Build Coastguard Worker  * back to userspace. Failure to do so will cause the out-fence to always
1449*7688df22SAndroid Build Coastguard Worker  * be reported as zero, and the real fence fd to be leaked.
1450*7688df22SAndroid Build Coastguard Worker  */
1451*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_OUT		(1<<17)
1452*7688df22SAndroid Build Coastguard Worker 
1453*7688df22SAndroid Build Coastguard Worker /*
1454*7688df22SAndroid Build Coastguard Worker  * Traditionally the execbuf ioctl has only considered the final element in
1455*7688df22SAndroid Build Coastguard Worker  * the execobject[] to be the executable batch. Often though, the client
1456*7688df22SAndroid Build Coastguard Worker  * will known the batch object prior to construction and being able to place
1457*7688df22SAndroid Build Coastguard Worker  * it into the execobject[] array first can simplify the relocation tracking.
1458*7688df22SAndroid Build Coastguard Worker  * Setting I915_EXEC_BATCH_FIRST tells execbuf to use element 0 of the
1459*7688df22SAndroid Build Coastguard Worker  * execobject[] as the * batch instead (the default is to use the last
1460*7688df22SAndroid Build Coastguard Worker  * element).
1461*7688df22SAndroid Build Coastguard Worker  */
1462*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_BATCH_FIRST		(1<<18)
1463*7688df22SAndroid Build Coastguard Worker 
1464*7688df22SAndroid Build Coastguard Worker /* Setting I915_FENCE_ARRAY implies that num_cliprects and cliprects_ptr
1465*7688df22SAndroid Build Coastguard Worker  * define an array of i915_gem_exec_fence structures which specify a set of
1466*7688df22SAndroid Build Coastguard Worker  * dma fences to wait upon or signal.
1467*7688df22SAndroid Build Coastguard Worker  */
1468*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_ARRAY   (1<<19)
1469*7688df22SAndroid Build Coastguard Worker 
1470*7688df22SAndroid Build Coastguard Worker /*
1471*7688df22SAndroid Build Coastguard Worker  * Setting I915_EXEC_FENCE_SUBMIT implies that lower_32_bits(rsvd2) represent
1472*7688df22SAndroid Build Coastguard Worker  * a sync_file fd to wait upon (in a nonblocking manner) prior to executing
1473*7688df22SAndroid Build Coastguard Worker  * the batch.
1474*7688df22SAndroid Build Coastguard Worker  *
1475*7688df22SAndroid Build Coastguard Worker  * Returns -EINVAL if the sync_file fd cannot be found.
1476*7688df22SAndroid Build Coastguard Worker  */
1477*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_FENCE_SUBMIT		(1 << 20)
1478*7688df22SAndroid Build Coastguard Worker 
1479*7688df22SAndroid Build Coastguard Worker /*
1480*7688df22SAndroid Build Coastguard Worker  * Setting I915_EXEC_USE_EXTENSIONS implies that
1481*7688df22SAndroid Build Coastguard Worker  * drm_i915_gem_execbuffer2.cliprects_ptr is treated as a pointer to an linked
1482*7688df22SAndroid Build Coastguard Worker  * list of i915_user_extension. Each i915_user_extension node is the base of a
1483*7688df22SAndroid Build Coastguard Worker  * larger structure. The list of supported structures are listed in the
1484*7688df22SAndroid Build Coastguard Worker  * drm_i915_gem_execbuffer_ext enum.
1485*7688df22SAndroid Build Coastguard Worker  */
1486*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_USE_EXTENSIONS	(1 << 21)
1487*7688df22SAndroid Build Coastguard Worker #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1))
1488*7688df22SAndroid Build Coastguard Worker 
1489*7688df22SAndroid Build Coastguard Worker 	/** @rsvd1: Context id */
1490*7688df22SAndroid Build Coastguard Worker 	__u64 rsvd1;
1491*7688df22SAndroid Build Coastguard Worker 
1492*7688df22SAndroid Build Coastguard Worker 	/**
1493*7688df22SAndroid Build Coastguard Worker 	 * @rsvd2: in and out sync_file file descriptors.
1494*7688df22SAndroid Build Coastguard Worker 	 *
1495*7688df22SAndroid Build Coastguard Worker 	 * When I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the
1496*7688df22SAndroid Build Coastguard Worker 	 * lower 32 bits of this field will have the in sync_file fd (input).
1497*7688df22SAndroid Build Coastguard Worker 	 *
1498*7688df22SAndroid Build Coastguard Worker 	 * When I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this
1499*7688df22SAndroid Build Coastguard Worker 	 * field will have the out sync_file fd (output).
1500*7688df22SAndroid Build Coastguard Worker 	 */
1501*7688df22SAndroid Build Coastguard Worker 	__u64 rsvd2;
1502*7688df22SAndroid Build Coastguard Worker };
1503*7688df22SAndroid Build Coastguard Worker 
1504*7688df22SAndroid Build Coastguard Worker #define I915_EXEC_CONTEXT_ID_MASK	(0xffffffff)
1505*7688df22SAndroid Build Coastguard Worker #define i915_execbuffer2_set_context_id(eb2, context) \
1506*7688df22SAndroid Build Coastguard Worker 	(eb2).rsvd1 = context & I915_EXEC_CONTEXT_ID_MASK
1507*7688df22SAndroid Build Coastguard Worker #define i915_execbuffer2_get_context_id(eb2) \
1508*7688df22SAndroid Build Coastguard Worker 	((eb2).rsvd1 & I915_EXEC_CONTEXT_ID_MASK)
1509*7688df22SAndroid Build Coastguard Worker 
1510*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_pin {
1511*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to be pinned. */
1512*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1513*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1514*7688df22SAndroid Build Coastguard Worker 
1515*7688df22SAndroid Build Coastguard Worker 	/** alignment required within the aperture */
1516*7688df22SAndroid Build Coastguard Worker 	__u64 alignment;
1517*7688df22SAndroid Build Coastguard Worker 
1518*7688df22SAndroid Build Coastguard Worker 	/** Returned GTT offset of the buffer. */
1519*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
1520*7688df22SAndroid Build Coastguard Worker };
1521*7688df22SAndroid Build Coastguard Worker 
1522*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_unpin {
1523*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to be unpinned. */
1524*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1525*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1526*7688df22SAndroid Build Coastguard Worker };
1527*7688df22SAndroid Build Coastguard Worker 
1528*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_busy {
1529*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to check for busy */
1530*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1531*7688df22SAndroid Build Coastguard Worker 
1532*7688df22SAndroid Build Coastguard Worker 	/** Return busy status
1533*7688df22SAndroid Build Coastguard Worker 	 *
1534*7688df22SAndroid Build Coastguard Worker 	 * A return of 0 implies that the object is idle (after
1535*7688df22SAndroid Build Coastguard Worker 	 * having flushed any pending activity), and a non-zero return that
1536*7688df22SAndroid Build Coastguard Worker 	 * the object is still in-flight on the GPU. (The GPU has not yet
1537*7688df22SAndroid Build Coastguard Worker 	 * signaled completion for all pending requests that reference the
1538*7688df22SAndroid Build Coastguard Worker 	 * object.) An object is guaranteed to become idle eventually (so
1539*7688df22SAndroid Build Coastguard Worker 	 * long as no new GPU commands are executed upon it). Due to the
1540*7688df22SAndroid Build Coastguard Worker 	 * asynchronous nature of the hardware, an object reported
1541*7688df22SAndroid Build Coastguard Worker 	 * as busy may become idle before the ioctl is completed.
1542*7688df22SAndroid Build Coastguard Worker 	 *
1543*7688df22SAndroid Build Coastguard Worker 	 * Furthermore, if the object is busy, which engine is busy is only
1544*7688df22SAndroid Build Coastguard Worker 	 * provided as a guide and only indirectly by reporting its class
1545*7688df22SAndroid Build Coastguard Worker 	 * (there may be more than one engine in each class). There are race
1546*7688df22SAndroid Build Coastguard Worker 	 * conditions which prevent the report of which engines are busy from
1547*7688df22SAndroid Build Coastguard Worker 	 * being always accurate.  However, the converse is not true. If the
1548*7688df22SAndroid Build Coastguard Worker 	 * object is idle, the result of the ioctl, that all engines are idle,
1549*7688df22SAndroid Build Coastguard Worker 	 * is accurate.
1550*7688df22SAndroid Build Coastguard Worker 	 *
1551*7688df22SAndroid Build Coastguard Worker 	 * The returned dword is split into two fields to indicate both
1552*7688df22SAndroid Build Coastguard Worker 	 * the engine classess on which the object is being read, and the
1553*7688df22SAndroid Build Coastguard Worker 	 * engine class on which it is currently being written (if any).
1554*7688df22SAndroid Build Coastguard Worker 	 *
1555*7688df22SAndroid Build Coastguard Worker 	 * The low word (bits 0:15) indicate if the object is being written
1556*7688df22SAndroid Build Coastguard Worker 	 * to by any engine (there can only be one, as the GEM implicit
1557*7688df22SAndroid Build Coastguard Worker 	 * synchronisation rules force writes to be serialised). Only the
1558*7688df22SAndroid Build Coastguard Worker 	 * engine class (offset by 1, I915_ENGINE_CLASS_RENDER is reported as
1559*7688df22SAndroid Build Coastguard Worker 	 * 1 not 0 etc) for the last write is reported.
1560*7688df22SAndroid Build Coastguard Worker 	 *
1561*7688df22SAndroid Build Coastguard Worker 	 * The high word (bits 16:31) are a bitmask of which engines classes
1562*7688df22SAndroid Build Coastguard Worker 	 * are currently reading from the object. Multiple engines may be
1563*7688df22SAndroid Build Coastguard Worker 	 * reading from the object simultaneously.
1564*7688df22SAndroid Build Coastguard Worker 	 *
1565*7688df22SAndroid Build Coastguard Worker 	 * The value of each engine class is the same as specified in the
1566*7688df22SAndroid Build Coastguard Worker 	 * I915_CONTEXT_PARAM_ENGINES context parameter and via perf, i.e.
1567*7688df22SAndroid Build Coastguard Worker 	 * I915_ENGINE_CLASS_RENDER, I915_ENGINE_CLASS_COPY, etc.
1568*7688df22SAndroid Build Coastguard Worker 	 * Some hardware may have parallel execution engines, e.g. multiple
1569*7688df22SAndroid Build Coastguard Worker 	 * media engines, which are mapped to the same class identifier and so
1570*7688df22SAndroid Build Coastguard Worker 	 * are not separately reported for busyness.
1571*7688df22SAndroid Build Coastguard Worker 	 *
1572*7688df22SAndroid Build Coastguard Worker 	 * Caveat emptor:
1573*7688df22SAndroid Build Coastguard Worker 	 * Only the boolean result of this query is reliable; that is whether
1574*7688df22SAndroid Build Coastguard Worker 	 * the object is idle or busy. The report of which engines are busy
1575*7688df22SAndroid Build Coastguard Worker 	 * should be only used as a heuristic.
1576*7688df22SAndroid Build Coastguard Worker 	 */
1577*7688df22SAndroid Build Coastguard Worker 	__u32 busy;
1578*7688df22SAndroid Build Coastguard Worker };
1579*7688df22SAndroid Build Coastguard Worker 
1580*7688df22SAndroid Build Coastguard Worker /**
1581*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_caching - Set or get the caching for given object
1582*7688df22SAndroid Build Coastguard Worker  * handle.
1583*7688df22SAndroid Build Coastguard Worker  *
1584*7688df22SAndroid Build Coastguard Worker  * Allow userspace to control the GTT caching bits for a given object when the
1585*7688df22SAndroid Build Coastguard Worker  * object is later mapped through the ppGTT(or GGTT on older platforms lacking
1586*7688df22SAndroid Build Coastguard Worker  * ppGTT support, or if the object is used for scanout). Note that this might
1587*7688df22SAndroid Build Coastguard Worker  * require unbinding the object from the GTT first, if its current caching value
1588*7688df22SAndroid Build Coastguard Worker  * doesn't match.
1589*7688df22SAndroid Build Coastguard Worker  *
1590*7688df22SAndroid Build Coastguard Worker  * Note that this all changes on discrete platforms, starting from DG1, the
1591*7688df22SAndroid Build Coastguard Worker  * set/get caching is no longer supported, and is now rejected.  Instead the CPU
1592*7688df22SAndroid Build Coastguard Worker  * caching attributes(WB vs WC) will become an immutable creation time property
1593*7688df22SAndroid Build Coastguard Worker  * for the object, along with the GTT caching level. For now we don't expose any
1594*7688df22SAndroid Build Coastguard Worker  * new uAPI for this, instead on DG1 this is all implicit, although this largely
1595*7688df22SAndroid Build Coastguard Worker  * shouldn't matter since DG1 is coherent by default(without any way of
1596*7688df22SAndroid Build Coastguard Worker  * controlling it).
1597*7688df22SAndroid Build Coastguard Worker  *
1598*7688df22SAndroid Build Coastguard Worker  * Implicit caching rules, starting from DG1:
1599*7688df22SAndroid Build Coastguard Worker  *
1600*7688df22SAndroid Build Coastguard Worker  *     - If any of the object placements (see &drm_i915_gem_create_ext_memory_regions)
1601*7688df22SAndroid Build Coastguard Worker  *       contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and
1602*7688df22SAndroid Build Coastguard Worker  *       mapped as write-combined only.
1603*7688df22SAndroid Build Coastguard Worker  *
1604*7688df22SAndroid Build Coastguard Worker  *     - Everything else is always allocated and mapped as write-back, with the
1605*7688df22SAndroid Build Coastguard Worker  *       guarantee that everything is also coherent with the GPU.
1606*7688df22SAndroid Build Coastguard Worker  *
1607*7688df22SAndroid Build Coastguard Worker  * Note that this is likely to change in the future again, where we might need
1608*7688df22SAndroid Build Coastguard Worker  * more flexibility on future devices, so making this all explicit as part of a
1609*7688df22SAndroid Build Coastguard Worker  * new &drm_i915_gem_create_ext extension is probable.
1610*7688df22SAndroid Build Coastguard Worker  *
1611*7688df22SAndroid Build Coastguard Worker  * Side note: Part of the reason for this is that changing the at-allocation-time CPU
1612*7688df22SAndroid Build Coastguard Worker  * caching attributes for the pages might be required(and is expensive) if we
1613*7688df22SAndroid Build Coastguard Worker  * need to then CPU map the pages later with different caching attributes. This
1614*7688df22SAndroid Build Coastguard Worker  * inconsistent caching behaviour, while supported on x86, is not universally
1615*7688df22SAndroid Build Coastguard Worker  * supported on other architectures. So for simplicity we opt for setting
1616*7688df22SAndroid Build Coastguard Worker  * everything at creation time, whilst also making it immutable, on discrete
1617*7688df22SAndroid Build Coastguard Worker  * platforms.
1618*7688df22SAndroid Build Coastguard Worker  */
1619*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_caching {
1620*7688df22SAndroid Build Coastguard Worker 	/**
1621*7688df22SAndroid Build Coastguard Worker 	 * @handle: Handle of the buffer to set/get the caching level.
1622*7688df22SAndroid Build Coastguard Worker 	 */
1623*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1624*7688df22SAndroid Build Coastguard Worker 
1625*7688df22SAndroid Build Coastguard Worker 	/**
1626*7688df22SAndroid Build Coastguard Worker 	 * @caching: The GTT caching level to apply or possible return value.
1627*7688df22SAndroid Build Coastguard Worker 	 *
1628*7688df22SAndroid Build Coastguard Worker 	 * The supported @caching values:
1629*7688df22SAndroid Build Coastguard Worker 	 *
1630*7688df22SAndroid Build Coastguard Worker 	 * I915_CACHING_NONE:
1631*7688df22SAndroid Build Coastguard Worker 	 *
1632*7688df22SAndroid Build Coastguard Worker 	 * GPU access is not coherent with CPU caches.  Default for machines
1633*7688df22SAndroid Build Coastguard Worker 	 * without an LLC. This means manual flushing might be needed, if we
1634*7688df22SAndroid Build Coastguard Worker 	 * want GPU access to be coherent.
1635*7688df22SAndroid Build Coastguard Worker 	 *
1636*7688df22SAndroid Build Coastguard Worker 	 * I915_CACHING_CACHED:
1637*7688df22SAndroid Build Coastguard Worker 	 *
1638*7688df22SAndroid Build Coastguard Worker 	 * GPU access is coherent with CPU caches and furthermore the data is
1639*7688df22SAndroid Build Coastguard Worker 	 * cached in last-level caches shared between CPU cores and the GPU GT.
1640*7688df22SAndroid Build Coastguard Worker 	 *
1641*7688df22SAndroid Build Coastguard Worker 	 * I915_CACHING_DISPLAY:
1642*7688df22SAndroid Build Coastguard Worker 	 *
1643*7688df22SAndroid Build Coastguard Worker 	 * Special GPU caching mode which is coherent with the scanout engines.
1644*7688df22SAndroid Build Coastguard Worker 	 * Transparently falls back to I915_CACHING_NONE on platforms where no
1645*7688df22SAndroid Build Coastguard Worker 	 * special cache mode (like write-through or gfdt flushing) is
1646*7688df22SAndroid Build Coastguard Worker 	 * available. The kernel automatically sets this mode when using a
1647*7688df22SAndroid Build Coastguard Worker 	 * buffer as a scanout target.  Userspace can manually set this mode to
1648*7688df22SAndroid Build Coastguard Worker 	 * avoid a costly stall and clflush in the hotpath of drawing the first
1649*7688df22SAndroid Build Coastguard Worker 	 * frame.
1650*7688df22SAndroid Build Coastguard Worker 	 */
1651*7688df22SAndroid Build Coastguard Worker #define I915_CACHING_NONE		0
1652*7688df22SAndroid Build Coastguard Worker #define I915_CACHING_CACHED		1
1653*7688df22SAndroid Build Coastguard Worker #define I915_CACHING_DISPLAY		2
1654*7688df22SAndroid Build Coastguard Worker 	__u32 caching;
1655*7688df22SAndroid Build Coastguard Worker };
1656*7688df22SAndroid Build Coastguard Worker 
1657*7688df22SAndroid Build Coastguard Worker #define I915_TILING_NONE	0
1658*7688df22SAndroid Build Coastguard Worker #define I915_TILING_X		1
1659*7688df22SAndroid Build Coastguard Worker #define I915_TILING_Y		2
1660*7688df22SAndroid Build Coastguard Worker /*
1661*7688df22SAndroid Build Coastguard Worker  * Do not add new tiling types here.  The I915_TILING_* values are for
1662*7688df22SAndroid Build Coastguard Worker  * de-tiling fence registers that no longer exist on modern platforms.  Although
1663*7688df22SAndroid Build Coastguard Worker  * the hardware may support new types of tiling in general (e.g., Tile4), we
1664*7688df22SAndroid Build Coastguard Worker  * do not need to add them to the uapi that is specific to now-defunct ioctls.
1665*7688df22SAndroid Build Coastguard Worker  */
1666*7688df22SAndroid Build Coastguard Worker #define I915_TILING_LAST	I915_TILING_Y
1667*7688df22SAndroid Build Coastguard Worker 
1668*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_NONE		0
1669*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9		1
1670*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10		2
1671*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_11		3
1672*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10_11	4
1673*7688df22SAndroid Build Coastguard Worker /* Not seen by userland */
1674*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_UNKNOWN	5
1675*7688df22SAndroid Build Coastguard Worker /* Seen by userland. */
1676*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_17		6
1677*7688df22SAndroid Build Coastguard Worker #define I915_BIT_6_SWIZZLE_9_10_17	7
1678*7688df22SAndroid Build Coastguard Worker 
1679*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_set_tiling {
1680*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to have its tiling state updated */
1681*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1682*7688df22SAndroid Build Coastguard Worker 
1683*7688df22SAndroid Build Coastguard Worker 	/**
1684*7688df22SAndroid Build Coastguard Worker 	 * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
1685*7688df22SAndroid Build Coastguard Worker 	 * I915_TILING_Y).
1686*7688df22SAndroid Build Coastguard Worker 	 *
1687*7688df22SAndroid Build Coastguard Worker 	 * This value is to be set on request, and will be updated by the
1688*7688df22SAndroid Build Coastguard Worker 	 * kernel on successful return with the actual chosen tiling layout.
1689*7688df22SAndroid Build Coastguard Worker 	 *
1690*7688df22SAndroid Build Coastguard Worker 	 * The tiling mode may be demoted to I915_TILING_NONE when the system
1691*7688df22SAndroid Build Coastguard Worker 	 * has bit 6 swizzling that can't be managed correctly by GEM.
1692*7688df22SAndroid Build Coastguard Worker 	 *
1693*7688df22SAndroid Build Coastguard Worker 	 * Buffer contents become undefined when changing tiling_mode.
1694*7688df22SAndroid Build Coastguard Worker 	 */
1695*7688df22SAndroid Build Coastguard Worker 	__u32 tiling_mode;
1696*7688df22SAndroid Build Coastguard Worker 
1697*7688df22SAndroid Build Coastguard Worker 	/**
1698*7688df22SAndroid Build Coastguard Worker 	 * Stride in bytes for the object when in I915_TILING_X or
1699*7688df22SAndroid Build Coastguard Worker 	 * I915_TILING_Y.
1700*7688df22SAndroid Build Coastguard Worker 	 */
1701*7688df22SAndroid Build Coastguard Worker 	__u32 stride;
1702*7688df22SAndroid Build Coastguard Worker 
1703*7688df22SAndroid Build Coastguard Worker 	/**
1704*7688df22SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1705*7688df22SAndroid Build Coastguard Worker 	 * mmap mapping.
1706*7688df22SAndroid Build Coastguard Worker 	 */
1707*7688df22SAndroid Build Coastguard Worker 	__u32 swizzle_mode;
1708*7688df22SAndroid Build Coastguard Worker };
1709*7688df22SAndroid Build Coastguard Worker 
1710*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_get_tiling {
1711*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to get tiling state for. */
1712*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1713*7688df22SAndroid Build Coastguard Worker 
1714*7688df22SAndroid Build Coastguard Worker 	/**
1715*7688df22SAndroid Build Coastguard Worker 	 * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
1716*7688df22SAndroid Build Coastguard Worker 	 * I915_TILING_Y).
1717*7688df22SAndroid Build Coastguard Worker 	 */
1718*7688df22SAndroid Build Coastguard Worker 	__u32 tiling_mode;
1719*7688df22SAndroid Build Coastguard Worker 
1720*7688df22SAndroid Build Coastguard Worker 	/**
1721*7688df22SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1722*7688df22SAndroid Build Coastguard Worker 	 * mmap mapping.
1723*7688df22SAndroid Build Coastguard Worker 	 */
1724*7688df22SAndroid Build Coastguard Worker 	__u32 swizzle_mode;
1725*7688df22SAndroid Build Coastguard Worker 
1726*7688df22SAndroid Build Coastguard Worker 	/**
1727*7688df22SAndroid Build Coastguard Worker 	 * Returned address bit 6 swizzling required for CPU access through
1728*7688df22SAndroid Build Coastguard Worker 	 * mmap mapping whilst bound.
1729*7688df22SAndroid Build Coastguard Worker 	 */
1730*7688df22SAndroid Build Coastguard Worker 	__u32 phys_swizzle_mode;
1731*7688df22SAndroid Build Coastguard Worker };
1732*7688df22SAndroid Build Coastguard Worker 
1733*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_get_aperture {
1734*7688df22SAndroid Build Coastguard Worker 	/** Total size of the aperture used by i915_gem_execbuffer, in bytes */
1735*7688df22SAndroid Build Coastguard Worker 	__u64 aper_size;
1736*7688df22SAndroid Build Coastguard Worker 
1737*7688df22SAndroid Build Coastguard Worker 	/**
1738*7688df22SAndroid Build Coastguard Worker 	 * Available space in the aperture used by i915_gem_execbuffer, in
1739*7688df22SAndroid Build Coastguard Worker 	 * bytes
1740*7688df22SAndroid Build Coastguard Worker 	 */
1741*7688df22SAndroid Build Coastguard Worker 	__u64 aper_available_size;
1742*7688df22SAndroid Build Coastguard Worker };
1743*7688df22SAndroid Build Coastguard Worker 
1744*7688df22SAndroid Build Coastguard Worker struct drm_i915_get_pipe_from_crtc_id {
1745*7688df22SAndroid Build Coastguard Worker 	/** ID of CRTC being requested **/
1746*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
1747*7688df22SAndroid Build Coastguard Worker 
1748*7688df22SAndroid Build Coastguard Worker 	/** pipe of requested CRTC **/
1749*7688df22SAndroid Build Coastguard Worker 	__u32 pipe;
1750*7688df22SAndroid Build Coastguard Worker };
1751*7688df22SAndroid Build Coastguard Worker 
1752*7688df22SAndroid Build Coastguard Worker #define I915_MADV_WILLNEED 0
1753*7688df22SAndroid Build Coastguard Worker #define I915_MADV_DONTNEED 1
1754*7688df22SAndroid Build Coastguard Worker #define __I915_MADV_PURGED 2 /* internal state */
1755*7688df22SAndroid Build Coastguard Worker 
1756*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_madvise {
1757*7688df22SAndroid Build Coastguard Worker 	/** Handle of the buffer to change the backing store advice */
1758*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
1759*7688df22SAndroid Build Coastguard Worker 
1760*7688df22SAndroid Build Coastguard Worker 	/* Advice: either the buffer will be needed again in the near future,
1761*7688df22SAndroid Build Coastguard Worker 	 *         or wont be and could be discarded under memory pressure.
1762*7688df22SAndroid Build Coastguard Worker 	 */
1763*7688df22SAndroid Build Coastguard Worker 	__u32 madv;
1764*7688df22SAndroid Build Coastguard Worker 
1765*7688df22SAndroid Build Coastguard Worker 	/** Whether the backing store still exists. */
1766*7688df22SAndroid Build Coastguard Worker 	__u32 retained;
1767*7688df22SAndroid Build Coastguard Worker };
1768*7688df22SAndroid Build Coastguard Worker 
1769*7688df22SAndroid Build Coastguard Worker /* flags */
1770*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_TYPE_MASK 		0xff
1771*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV_PLANAR 	0x01
1772*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV_PACKED 	0x02
1773*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB		0x03
1774*7688df22SAndroid Build Coastguard Worker 
1775*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_DEPTH_MASK		0xff00
1776*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB24		0x1000
1777*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB16		0x2000
1778*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_RGB15		0x3000
1779*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV422		0x0100
1780*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV411		0x0200
1781*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV420		0x0300
1782*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_YUV410		0x0400
1783*7688df22SAndroid Build Coastguard Worker 
1784*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_SWAP_MASK		0xff0000
1785*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_NO_SWAP		0x000000
1786*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_UV_SWAP		0x010000
1787*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_Y_SWAP		0x020000
1788*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_Y_AND_UV_SWAP	0x030000
1789*7688df22SAndroid Build Coastguard Worker 
1790*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_FLAGS_MASK		0xff000000
1791*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_ENABLE		0x01000000
1792*7688df22SAndroid Build Coastguard Worker 
1793*7688df22SAndroid Build Coastguard Worker struct drm_intel_overlay_put_image {
1794*7688df22SAndroid Build Coastguard Worker 	/* various flags and src format description */
1795*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1796*7688df22SAndroid Build Coastguard Worker 	/* source picture description */
1797*7688df22SAndroid Build Coastguard Worker 	__u32 bo_handle;
1798*7688df22SAndroid Build Coastguard Worker 	/* stride values and offsets are in bytes, buffer relative */
1799*7688df22SAndroid Build Coastguard Worker 	__u16 stride_Y; /* stride for packed formats */
1800*7688df22SAndroid Build Coastguard Worker 	__u16 stride_UV;
1801*7688df22SAndroid Build Coastguard Worker 	__u32 offset_Y; /* offset for packet formats */
1802*7688df22SAndroid Build Coastguard Worker 	__u32 offset_U;
1803*7688df22SAndroid Build Coastguard Worker 	__u32 offset_V;
1804*7688df22SAndroid Build Coastguard Worker 	/* in pixels */
1805*7688df22SAndroid Build Coastguard Worker 	__u16 src_width;
1806*7688df22SAndroid Build Coastguard Worker 	__u16 src_height;
1807*7688df22SAndroid Build Coastguard Worker 	/* to compensate the scaling factors for partially covered surfaces */
1808*7688df22SAndroid Build Coastguard Worker 	__u16 src_scan_width;
1809*7688df22SAndroid Build Coastguard Worker 	__u16 src_scan_height;
1810*7688df22SAndroid Build Coastguard Worker 	/* output crtc description */
1811*7688df22SAndroid Build Coastguard Worker 	__u32 crtc_id;
1812*7688df22SAndroid Build Coastguard Worker 	__u16 dst_x;
1813*7688df22SAndroid Build Coastguard Worker 	__u16 dst_y;
1814*7688df22SAndroid Build Coastguard Worker 	__u16 dst_width;
1815*7688df22SAndroid Build Coastguard Worker 	__u16 dst_height;
1816*7688df22SAndroid Build Coastguard Worker };
1817*7688df22SAndroid Build Coastguard Worker 
1818*7688df22SAndroid Build Coastguard Worker /* flags */
1819*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_UPDATE_ATTRS	(1<<0)
1820*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_UPDATE_GAMMA	(1<<1)
1821*7688df22SAndroid Build Coastguard Worker #define I915_OVERLAY_DISABLE_DEST_COLORKEY	(1<<2)
1822*7688df22SAndroid Build Coastguard Worker struct drm_intel_overlay_attrs {
1823*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1824*7688df22SAndroid Build Coastguard Worker 	__u32 color_key;
1825*7688df22SAndroid Build Coastguard Worker 	__s32 brightness;
1826*7688df22SAndroid Build Coastguard Worker 	__u32 contrast;
1827*7688df22SAndroid Build Coastguard Worker 	__u32 saturation;
1828*7688df22SAndroid Build Coastguard Worker 	__u32 gamma0;
1829*7688df22SAndroid Build Coastguard Worker 	__u32 gamma1;
1830*7688df22SAndroid Build Coastguard Worker 	__u32 gamma2;
1831*7688df22SAndroid Build Coastguard Worker 	__u32 gamma3;
1832*7688df22SAndroid Build Coastguard Worker 	__u32 gamma4;
1833*7688df22SAndroid Build Coastguard Worker 	__u32 gamma5;
1834*7688df22SAndroid Build Coastguard Worker };
1835*7688df22SAndroid Build Coastguard Worker 
1836*7688df22SAndroid Build Coastguard Worker /*
1837*7688df22SAndroid Build Coastguard Worker  * Intel sprite handling
1838*7688df22SAndroid Build Coastguard Worker  *
1839*7688df22SAndroid Build Coastguard Worker  * Color keying works with a min/mask/max tuple.  Both source and destination
1840*7688df22SAndroid Build Coastguard Worker  * color keying is allowed.
1841*7688df22SAndroid Build Coastguard Worker  *
1842*7688df22SAndroid Build Coastguard Worker  * Source keying:
1843*7688df22SAndroid Build Coastguard Worker  * Sprite pixels within the min & max values, masked against the color channels
1844*7688df22SAndroid Build Coastguard Worker  * specified in the mask field, will be transparent.  All other pixels will
1845*7688df22SAndroid Build Coastguard Worker  * be displayed on top of the primary plane.  For RGB surfaces, only the min
1846*7688df22SAndroid Build Coastguard Worker  * and mask fields will be used; ranged compares are not allowed.
1847*7688df22SAndroid Build Coastguard Worker  *
1848*7688df22SAndroid Build Coastguard Worker  * Destination keying:
1849*7688df22SAndroid Build Coastguard Worker  * Primary plane pixels that match the min value, masked against the color
1850*7688df22SAndroid Build Coastguard Worker  * channels specified in the mask field, will be replaced by corresponding
1851*7688df22SAndroid Build Coastguard Worker  * pixels from the sprite plane.
1852*7688df22SAndroid Build Coastguard Worker  *
1853*7688df22SAndroid Build Coastguard Worker  * Note that source & destination keying are exclusive; only one can be
1854*7688df22SAndroid Build Coastguard Worker  * active on a given plane.
1855*7688df22SAndroid Build Coastguard Worker  */
1856*7688df22SAndroid Build Coastguard Worker 
1857*7688df22SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_NONE		(1<<0) /* Deprecated. Instead set
1858*7688df22SAndroid Build Coastguard Worker 						* flags==0 to disable colorkeying.
1859*7688df22SAndroid Build Coastguard Worker 						*/
1860*7688df22SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_DESTINATION	(1<<1)
1861*7688df22SAndroid Build Coastguard Worker #define I915_SET_COLORKEY_SOURCE	(1<<2)
1862*7688df22SAndroid Build Coastguard Worker struct drm_intel_sprite_colorkey {
1863*7688df22SAndroid Build Coastguard Worker 	__u32 plane_id;
1864*7688df22SAndroid Build Coastguard Worker 	__u32 min_value;
1865*7688df22SAndroid Build Coastguard Worker 	__u32 channel_mask;
1866*7688df22SAndroid Build Coastguard Worker 	__u32 max_value;
1867*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1868*7688df22SAndroid Build Coastguard Worker };
1869*7688df22SAndroid Build Coastguard Worker 
1870*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_wait {
1871*7688df22SAndroid Build Coastguard Worker 	/** Handle of BO we shall wait on */
1872*7688df22SAndroid Build Coastguard Worker 	__u32 bo_handle;
1873*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1874*7688df22SAndroid Build Coastguard Worker 	/** Number of nanoseconds to wait, Returns time remaining. */
1875*7688df22SAndroid Build Coastguard Worker 	__s64 timeout_ns;
1876*7688df22SAndroid Build Coastguard Worker };
1877*7688df22SAndroid Build Coastguard Worker 
1878*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_create {
1879*7688df22SAndroid Build Coastguard Worker 	__u32 ctx_id; /* output: id of new context*/
1880*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
1881*7688df22SAndroid Build Coastguard Worker };
1882*7688df22SAndroid Build Coastguard Worker 
1883*7688df22SAndroid Build Coastguard Worker /**
1884*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_context_create_ext - Structure for creating contexts.
1885*7688df22SAndroid Build Coastguard Worker  */
1886*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_create_ext {
1887*7688df22SAndroid Build Coastguard Worker 	/** @ctx_id: Id of the created context (output) */
1888*7688df22SAndroid Build Coastguard Worker 	__u32 ctx_id;
1889*7688df22SAndroid Build Coastguard Worker 
1890*7688df22SAndroid Build Coastguard Worker 	/**
1891*7688df22SAndroid Build Coastguard Worker 	 * @flags: Supported flags are:
1892*7688df22SAndroid Build Coastguard Worker 	 *
1893*7688df22SAndroid Build Coastguard Worker 	 * I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS:
1894*7688df22SAndroid Build Coastguard Worker 	 *
1895*7688df22SAndroid Build Coastguard Worker 	 * Extensions may be appended to this structure and driver must check
1896*7688df22SAndroid Build Coastguard Worker 	 * for those. See @extensions.
1897*7688df22SAndroid Build Coastguard Worker 	 *
1898*7688df22SAndroid Build Coastguard Worker 	 * I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE
1899*7688df22SAndroid Build Coastguard Worker 	 *
1900*7688df22SAndroid Build Coastguard Worker 	 * Created context will have single timeline.
1901*7688df22SAndroid Build Coastguard Worker 	 */
1902*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
1903*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS	(1u << 0)
1904*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE	(1u << 1)
1905*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN \
1906*7688df22SAndroid Build Coastguard Worker 	(-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1))
1907*7688df22SAndroid Build Coastguard Worker 
1908*7688df22SAndroid Build Coastguard Worker 	/**
1909*7688df22SAndroid Build Coastguard Worker 	 * @extensions: Zero-terminated chain of extensions.
1910*7688df22SAndroid Build Coastguard Worker 	 *
1911*7688df22SAndroid Build Coastguard Worker 	 * I915_CONTEXT_CREATE_EXT_SETPARAM:
1912*7688df22SAndroid Build Coastguard Worker 	 * Context parameter to set or query during context creation.
1913*7688df22SAndroid Build Coastguard Worker 	 * See struct drm_i915_gem_context_create_ext_setparam.
1914*7688df22SAndroid Build Coastguard Worker 	 *
1915*7688df22SAndroid Build Coastguard Worker 	 * I915_CONTEXT_CREATE_EXT_CLONE:
1916*7688df22SAndroid Build Coastguard Worker 	 * This extension has been removed. On the off chance someone somewhere
1917*7688df22SAndroid Build Coastguard Worker 	 * has attempted to use it, never re-use this extension number.
1918*7688df22SAndroid Build Coastguard Worker 	 */
1919*7688df22SAndroid Build Coastguard Worker 	__u64 extensions;
1920*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_EXT_SETPARAM 0
1921*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_CREATE_EXT_CLONE 1
1922*7688df22SAndroid Build Coastguard Worker };
1923*7688df22SAndroid Build Coastguard Worker 
1924*7688df22SAndroid Build Coastguard Worker /**
1925*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_context_param - Context parameter to set or query.
1926*7688df22SAndroid Build Coastguard Worker  */
1927*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_param {
1928*7688df22SAndroid Build Coastguard Worker 	/** @ctx_id: Context id */
1929*7688df22SAndroid Build Coastguard Worker 	__u32 ctx_id;
1930*7688df22SAndroid Build Coastguard Worker 
1931*7688df22SAndroid Build Coastguard Worker 	/** @size: Size of the parameter @value */
1932*7688df22SAndroid Build Coastguard Worker 	__u32 size;
1933*7688df22SAndroid Build Coastguard Worker 
1934*7688df22SAndroid Build Coastguard Worker 	/** @param: Parameter to set or query */
1935*7688df22SAndroid Build Coastguard Worker 	__u64 param;
1936*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_BAN_PERIOD	0x1
1937*7688df22SAndroid Build Coastguard Worker /* I915_CONTEXT_PARAM_NO_ZEROMAP has been removed.  On the off chance
1938*7688df22SAndroid Build Coastguard Worker  * someone somewhere has attempted to use it, never re-use this context
1939*7688df22SAndroid Build Coastguard Worker  * param number.
1940*7688df22SAndroid Build Coastguard Worker  */
1941*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_NO_ZEROMAP	0x2
1942*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_GTT_SIZE	0x3
1943*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE	0x4
1944*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_BANNABLE	0x5
1945*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_PRIORITY	0x6
1946*7688df22SAndroid Build Coastguard Worker #define   I915_CONTEXT_MAX_USER_PRIORITY	1023 /* inclusive */
1947*7688df22SAndroid Build Coastguard Worker #define   I915_CONTEXT_DEFAULT_PRIORITY		0
1948*7688df22SAndroid Build Coastguard Worker #define   I915_CONTEXT_MIN_USER_PRIORITY	-1023 /* inclusive */
1949*7688df22SAndroid Build Coastguard Worker 	/*
1950*7688df22SAndroid Build Coastguard Worker 	 * When using the following param, value should be a pointer to
1951*7688df22SAndroid Build Coastguard Worker 	 * drm_i915_gem_context_param_sseu.
1952*7688df22SAndroid Build Coastguard Worker 	 */
1953*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_SSEU		0x7
1954*7688df22SAndroid Build Coastguard Worker 
1955*7688df22SAndroid Build Coastguard Worker /*
1956*7688df22SAndroid Build Coastguard Worker  * Not all clients may want to attempt automatic recover of a context after
1957*7688df22SAndroid Build Coastguard Worker  * a hang (for example, some clients may only submit very small incremental
1958*7688df22SAndroid Build Coastguard Worker  * batches relying on known logical state of previous batches which will never
1959*7688df22SAndroid Build Coastguard Worker  * recover correctly and each attempt will hang), and so would prefer that
1960*7688df22SAndroid Build Coastguard Worker  * the context is forever banned instead.
1961*7688df22SAndroid Build Coastguard Worker  *
1962*7688df22SAndroid Build Coastguard Worker  * If set to false (0), after a reset, subsequent (and in flight) rendering
1963*7688df22SAndroid Build Coastguard Worker  * from this context is discarded, and the client will need to create a new
1964*7688df22SAndroid Build Coastguard Worker  * context to use instead.
1965*7688df22SAndroid Build Coastguard Worker  *
1966*7688df22SAndroid Build Coastguard Worker  * If set to true (1), the kernel will automatically attempt to recover the
1967*7688df22SAndroid Build Coastguard Worker  * context by skipping the hanging batch and executing the next batch starting
1968*7688df22SAndroid Build Coastguard Worker  * from the default context state (discarding the incomplete logical context
1969*7688df22SAndroid Build Coastguard Worker  * state lost due to the reset).
1970*7688df22SAndroid Build Coastguard Worker  *
1971*7688df22SAndroid Build Coastguard Worker  * On creation, all new contexts are marked as recoverable.
1972*7688df22SAndroid Build Coastguard Worker  */
1973*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_RECOVERABLE	0x8
1974*7688df22SAndroid Build Coastguard Worker 
1975*7688df22SAndroid Build Coastguard Worker 	/*
1976*7688df22SAndroid Build Coastguard Worker 	 * The id of the associated virtual memory address space (ppGTT) of
1977*7688df22SAndroid Build Coastguard Worker 	 * this context. Can be retrieved and passed to another context
1978*7688df22SAndroid Build Coastguard Worker 	 * (on the same fd) for both to use the same ppGTT and so share
1979*7688df22SAndroid Build Coastguard Worker 	 * address layouts, and avoid reloading the page tables on context
1980*7688df22SAndroid Build Coastguard Worker 	 * switches between themselves.
1981*7688df22SAndroid Build Coastguard Worker 	 *
1982*7688df22SAndroid Build Coastguard Worker 	 * See DRM_I915_GEM_VM_CREATE and DRM_I915_GEM_VM_DESTROY.
1983*7688df22SAndroid Build Coastguard Worker 	 */
1984*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_VM		0x9
1985*7688df22SAndroid Build Coastguard Worker 
1986*7688df22SAndroid Build Coastguard Worker /*
1987*7688df22SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_ENGINES:
1988*7688df22SAndroid Build Coastguard Worker  *
1989*7688df22SAndroid Build Coastguard Worker  * Bind this context to operate on this subset of available engines. Henceforth,
1990*7688df22SAndroid Build Coastguard Worker  * the I915_EXEC_RING selector for DRM_IOCTL_I915_GEM_EXECBUFFER2 operates as
1991*7688df22SAndroid Build Coastguard Worker  * an index into this array of engines; I915_EXEC_DEFAULT selecting engine[0]
1992*7688df22SAndroid Build Coastguard Worker  * and upwards. Slots 0...N are filled in using the specified (class, instance).
1993*7688df22SAndroid Build Coastguard Worker  * Use
1994*7688df22SAndroid Build Coastguard Worker  *	engine_class: I915_ENGINE_CLASS_INVALID,
1995*7688df22SAndroid Build Coastguard Worker  *	engine_instance: I915_ENGINE_CLASS_INVALID_NONE
1996*7688df22SAndroid Build Coastguard Worker  * to specify a gap in the array that can be filled in later, e.g. by a
1997*7688df22SAndroid Build Coastguard Worker  * virtual engine used for load balancing.
1998*7688df22SAndroid Build Coastguard Worker  *
1999*7688df22SAndroid Build Coastguard Worker  * Setting the number of engines bound to the context to 0, by passing a zero
2000*7688df22SAndroid Build Coastguard Worker  * sized argument, will revert back to default settings.
2001*7688df22SAndroid Build Coastguard Worker  *
2002*7688df22SAndroid Build Coastguard Worker  * See struct i915_context_param_engines.
2003*7688df22SAndroid Build Coastguard Worker  *
2004*7688df22SAndroid Build Coastguard Worker  * Extensions:
2005*7688df22SAndroid Build Coastguard Worker  *   i915_context_engines_load_balance (I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE)
2006*7688df22SAndroid Build Coastguard Worker  *   i915_context_engines_bond (I915_CONTEXT_ENGINES_EXT_BOND)
2007*7688df22SAndroid Build Coastguard Worker  *   i915_context_engines_parallel_submit (I915_CONTEXT_ENGINES_EXT_PARALLEL_SUBMIT)
2008*7688df22SAndroid Build Coastguard Worker  */
2009*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_ENGINES	0xa
2010*7688df22SAndroid Build Coastguard Worker 
2011*7688df22SAndroid Build Coastguard Worker /*
2012*7688df22SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_PERSISTENCE:
2013*7688df22SAndroid Build Coastguard Worker  *
2014*7688df22SAndroid Build Coastguard Worker  * Allow the context and active rendering to survive the process until
2015*7688df22SAndroid Build Coastguard Worker  * completion. Persistence allows fire-and-forget clients to queue up a
2016*7688df22SAndroid Build Coastguard Worker  * bunch of work, hand the output over to a display server and then quit.
2017*7688df22SAndroid Build Coastguard Worker  * If the context is marked as not persistent, upon closing (either via
2018*7688df22SAndroid Build Coastguard Worker  * an explicit DRM_I915_GEM_CONTEXT_DESTROY or implicitly from file closure
2019*7688df22SAndroid Build Coastguard Worker  * or process termination), the context and any outstanding requests will be
2020*7688df22SAndroid Build Coastguard Worker  * cancelled (and exported fences for cancelled requests marked as -EIO).
2021*7688df22SAndroid Build Coastguard Worker  *
2022*7688df22SAndroid Build Coastguard Worker  * By default, new contexts allow persistence.
2023*7688df22SAndroid Build Coastguard Worker  */
2024*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_PERSISTENCE	0xb
2025*7688df22SAndroid Build Coastguard Worker 
2026*7688df22SAndroid Build Coastguard Worker /* This API has been removed.  On the off chance someone somewhere has
2027*7688df22SAndroid Build Coastguard Worker  * attempted to use it, never re-use this context param number.
2028*7688df22SAndroid Build Coastguard Worker  */
2029*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_RINGSIZE	0xc
2030*7688df22SAndroid Build Coastguard Worker 
2031*7688df22SAndroid Build Coastguard Worker /*
2032*7688df22SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_PROTECTED_CONTENT:
2033*7688df22SAndroid Build Coastguard Worker  *
2034*7688df22SAndroid Build Coastguard Worker  * Mark that the context makes use of protected content, which will result
2035*7688df22SAndroid Build Coastguard Worker  * in the context being invalidated when the protected content session is.
2036*7688df22SAndroid Build Coastguard Worker  * Given that the protected content session is killed on suspend, the device
2037*7688df22SAndroid Build Coastguard Worker  * is kept awake for the lifetime of a protected context, so the user should
2038*7688df22SAndroid Build Coastguard Worker  * make sure to dispose of them once done.
2039*7688df22SAndroid Build Coastguard Worker  * This flag can only be set at context creation time and, when set to true,
2040*7688df22SAndroid Build Coastguard Worker  * must be preceded by an explicit setting of I915_CONTEXT_PARAM_RECOVERABLE
2041*7688df22SAndroid Build Coastguard Worker  * to false. This flag can't be set to true in conjunction with setting the
2042*7688df22SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_BANNABLE flag to false. Creation example:
2043*7688df22SAndroid Build Coastguard Worker  *
2044*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
2045*7688df22SAndroid Build Coastguard Worker  *
2046*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_gem_context_create_ext_setparam p_protected = {
2047*7688df22SAndroid Build Coastguard Worker  *		.base = {
2048*7688df22SAndroid Build Coastguard Worker  *			.name = I915_CONTEXT_CREATE_EXT_SETPARAM,
2049*7688df22SAndroid Build Coastguard Worker  *		},
2050*7688df22SAndroid Build Coastguard Worker  *		.param = {
2051*7688df22SAndroid Build Coastguard Worker  *			.param = I915_CONTEXT_PARAM_PROTECTED_CONTENT,
2052*7688df22SAndroid Build Coastguard Worker  *			.value = 1,
2053*7688df22SAndroid Build Coastguard Worker  *		}
2054*7688df22SAndroid Build Coastguard Worker  *	};
2055*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_gem_context_create_ext_setparam p_norecover = {
2056*7688df22SAndroid Build Coastguard Worker  *		.base = {
2057*7688df22SAndroid Build Coastguard Worker  *			.name = I915_CONTEXT_CREATE_EXT_SETPARAM,
2058*7688df22SAndroid Build Coastguard Worker  *			.next_extension = to_user_pointer(&p_protected),
2059*7688df22SAndroid Build Coastguard Worker  *		},
2060*7688df22SAndroid Build Coastguard Worker  *		.param = {
2061*7688df22SAndroid Build Coastguard Worker  *			.param = I915_CONTEXT_PARAM_RECOVERABLE,
2062*7688df22SAndroid Build Coastguard Worker  *			.value = 0,
2063*7688df22SAndroid Build Coastguard Worker  *		}
2064*7688df22SAndroid Build Coastguard Worker  *	};
2065*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_gem_context_create_ext create = {
2066*7688df22SAndroid Build Coastguard Worker  *		.flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS,
2067*7688df22SAndroid Build Coastguard Worker  *		.extensions = to_user_pointer(&p_norecover);
2068*7688df22SAndroid Build Coastguard Worker  *	};
2069*7688df22SAndroid Build Coastguard Worker  *
2070*7688df22SAndroid Build Coastguard Worker  *	ctx_id = gem_context_create_ext(drm_fd, &create);
2071*7688df22SAndroid Build Coastguard Worker  *
2072*7688df22SAndroid Build Coastguard Worker  * In addition to the normal failure cases, setting this flag during context
2073*7688df22SAndroid Build Coastguard Worker  * creation can result in the following errors:
2074*7688df22SAndroid Build Coastguard Worker  *
2075*7688df22SAndroid Build Coastguard Worker  * -ENODEV: feature not available
2076*7688df22SAndroid Build Coastguard Worker  * -EPERM: trying to mark a recoverable or not bannable context as protected
2077*7688df22SAndroid Build Coastguard Worker  */
2078*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_PARAM_PROTECTED_CONTENT    0xd
2079*7688df22SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
2080*7688df22SAndroid Build Coastguard Worker 
2081*7688df22SAndroid Build Coastguard Worker 	/** @value: Context parameter value to be set or queried */
2082*7688df22SAndroid Build Coastguard Worker 	__u64 value;
2083*7688df22SAndroid Build Coastguard Worker };
2084*7688df22SAndroid Build Coastguard Worker 
2085*7688df22SAndroid Build Coastguard Worker /*
2086*7688df22SAndroid Build Coastguard Worker  * Context SSEU programming
2087*7688df22SAndroid Build Coastguard Worker  *
2088*7688df22SAndroid Build Coastguard Worker  * It may be necessary for either functional or performance reason to configure
2089*7688df22SAndroid Build Coastguard Worker  * a context to run with a reduced number of SSEU (where SSEU stands for Slice/
2090*7688df22SAndroid Build Coastguard Worker  * Sub-slice/EU).
2091*7688df22SAndroid Build Coastguard Worker  *
2092*7688df22SAndroid Build Coastguard Worker  * This is done by configuring SSEU configuration using the below
2093*7688df22SAndroid Build Coastguard Worker  * @struct drm_i915_gem_context_param_sseu for every supported engine which
2094*7688df22SAndroid Build Coastguard Worker  * userspace intends to use.
2095*7688df22SAndroid Build Coastguard Worker  *
2096*7688df22SAndroid Build Coastguard Worker  * Not all GPUs or engines support this functionality in which case an error
2097*7688df22SAndroid Build Coastguard Worker  * code -ENODEV will be returned.
2098*7688df22SAndroid Build Coastguard Worker  *
2099*7688df22SAndroid Build Coastguard Worker  * Also, flexibility of possible SSEU configuration permutations varies between
2100*7688df22SAndroid Build Coastguard Worker  * GPU generations and software imposed limitations. Requesting such a
2101*7688df22SAndroid Build Coastguard Worker  * combination will return an error code of -EINVAL.
2102*7688df22SAndroid Build Coastguard Worker  *
2103*7688df22SAndroid Build Coastguard Worker  * NOTE: When perf/OA is active the context's SSEU configuration is ignored in
2104*7688df22SAndroid Build Coastguard Worker  * favour of a single global setting.
2105*7688df22SAndroid Build Coastguard Worker  */
2106*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_param_sseu {
2107*7688df22SAndroid Build Coastguard Worker 	/*
2108*7688df22SAndroid Build Coastguard Worker 	 * Engine class & instance to be configured or queried.
2109*7688df22SAndroid Build Coastguard Worker 	 */
2110*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engine;
2111*7688df22SAndroid Build Coastguard Worker 
2112*7688df22SAndroid Build Coastguard Worker 	/*
2113*7688df22SAndroid Build Coastguard Worker 	 * Unknown flags must be cleared to zero.
2114*7688df22SAndroid Build Coastguard Worker 	 */
2115*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2116*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_SSEU_FLAG_ENGINE_INDEX (1u << 0)
2117*7688df22SAndroid Build Coastguard Worker 
2118*7688df22SAndroid Build Coastguard Worker 	/*
2119*7688df22SAndroid Build Coastguard Worker 	 * Mask of slices to enable for the context. Valid values are a subset
2120*7688df22SAndroid Build Coastguard Worker 	 * of the bitmask value returned for I915_PARAM_SLICE_MASK.
2121*7688df22SAndroid Build Coastguard Worker 	 */
2122*7688df22SAndroid Build Coastguard Worker 	__u64 slice_mask;
2123*7688df22SAndroid Build Coastguard Worker 
2124*7688df22SAndroid Build Coastguard Worker 	/*
2125*7688df22SAndroid Build Coastguard Worker 	 * Mask of subslices to enable for the context. Valid values are a
2126*7688df22SAndroid Build Coastguard Worker 	 * subset of the bitmask value return by I915_PARAM_SUBSLICE_MASK.
2127*7688df22SAndroid Build Coastguard Worker 	 */
2128*7688df22SAndroid Build Coastguard Worker 	__u64 subslice_mask;
2129*7688df22SAndroid Build Coastguard Worker 
2130*7688df22SAndroid Build Coastguard Worker 	/*
2131*7688df22SAndroid Build Coastguard Worker 	 * Minimum/Maximum number of EUs to enable per subslice for the
2132*7688df22SAndroid Build Coastguard Worker 	 * context. min_eus_per_subslice must be inferior or equal to
2133*7688df22SAndroid Build Coastguard Worker 	 * max_eus_per_subslice.
2134*7688df22SAndroid Build Coastguard Worker 	 */
2135*7688df22SAndroid Build Coastguard Worker 	__u16 min_eus_per_subslice;
2136*7688df22SAndroid Build Coastguard Worker 	__u16 max_eus_per_subslice;
2137*7688df22SAndroid Build Coastguard Worker 
2138*7688df22SAndroid Build Coastguard Worker 	/*
2139*7688df22SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
2140*7688df22SAndroid Build Coastguard Worker 	 */
2141*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd;
2142*7688df22SAndroid Build Coastguard Worker };
2143*7688df22SAndroid Build Coastguard Worker 
2144*7688df22SAndroid Build Coastguard Worker /**
2145*7688df22SAndroid Build Coastguard Worker  * DOC: Virtual Engine uAPI
2146*7688df22SAndroid Build Coastguard Worker  *
2147*7688df22SAndroid Build Coastguard Worker  * Virtual engine is a concept where userspace is able to configure a set of
2148*7688df22SAndroid Build Coastguard Worker  * physical engines, submit a batch buffer, and let the driver execute it on any
2149*7688df22SAndroid Build Coastguard Worker  * engine from the set as it sees fit.
2150*7688df22SAndroid Build Coastguard Worker  *
2151*7688df22SAndroid Build Coastguard Worker  * This is primarily useful on parts which have multiple instances of a same
2152*7688df22SAndroid Build Coastguard Worker  * class engine, like for example GT3+ Skylake parts with their two VCS engines.
2153*7688df22SAndroid Build Coastguard Worker  *
2154*7688df22SAndroid Build Coastguard Worker  * For instance userspace can enumerate all engines of a certain class using the
2155*7688df22SAndroid Build Coastguard Worker  * previously described `Engine Discovery uAPI`_. After that userspace can
2156*7688df22SAndroid Build Coastguard Worker  * create a GEM context with a placeholder slot for the virtual engine (using
2157*7688df22SAndroid Build Coastguard Worker  * `I915_ENGINE_CLASS_INVALID` and `I915_ENGINE_CLASS_INVALID_NONE` for class
2158*7688df22SAndroid Build Coastguard Worker  * and instance respectively) and finally using the
2159*7688df22SAndroid Build Coastguard Worker  * `I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE` extension place a virtual engine in
2160*7688df22SAndroid Build Coastguard Worker  * the same reserved slot.
2161*7688df22SAndroid Build Coastguard Worker  *
2162*7688df22SAndroid Build Coastguard Worker  * Example of creating a virtual engine and submitting a batch buffer to it:
2163*7688df22SAndroid Build Coastguard Worker  *
2164*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
2165*7688df22SAndroid Build Coastguard Worker  *
2166*7688df22SAndroid Build Coastguard Worker  * 	I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(virtual, 2) = {
2167*7688df22SAndroid Build Coastguard Worker  * 		.base.name = I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE,
2168*7688df22SAndroid Build Coastguard Worker  * 		.engine_index = 0, // Place this virtual engine into engine map slot 0
2169*7688df22SAndroid Build Coastguard Worker  * 		.num_siblings = 2,
2170*7688df22SAndroid Build Coastguard Worker  * 		.engines = { { I915_ENGINE_CLASS_VIDEO, 0 },
2171*7688df22SAndroid Build Coastguard Worker  * 			     { I915_ENGINE_CLASS_VIDEO, 1 }, },
2172*7688df22SAndroid Build Coastguard Worker  * 	};
2173*7688df22SAndroid Build Coastguard Worker  * 	I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1) = {
2174*7688df22SAndroid Build Coastguard Worker  * 		.engines = { { I915_ENGINE_CLASS_INVALID,
2175*7688df22SAndroid Build Coastguard Worker  * 			       I915_ENGINE_CLASS_INVALID_NONE } },
2176*7688df22SAndroid Build Coastguard Worker  * 		.extensions = to_user_pointer(&virtual), // Chains after load_balance extension
2177*7688df22SAndroid Build Coastguard Worker  * 	};
2178*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_gem_context_create_ext_setparam p_engines = {
2179*7688df22SAndroid Build Coastguard Worker  * 		.base = {
2180*7688df22SAndroid Build Coastguard Worker  * 			.name = I915_CONTEXT_CREATE_EXT_SETPARAM,
2181*7688df22SAndroid Build Coastguard Worker  * 		},
2182*7688df22SAndroid Build Coastguard Worker  * 		.param = {
2183*7688df22SAndroid Build Coastguard Worker  * 			.param = I915_CONTEXT_PARAM_ENGINES,
2184*7688df22SAndroid Build Coastguard Worker  * 			.value = to_user_pointer(&engines),
2185*7688df22SAndroid Build Coastguard Worker  * 			.size = sizeof(engines),
2186*7688df22SAndroid Build Coastguard Worker  * 		},
2187*7688df22SAndroid Build Coastguard Worker  * 	};
2188*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_gem_context_create_ext create = {
2189*7688df22SAndroid Build Coastguard Worker  * 		.flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS,
2190*7688df22SAndroid Build Coastguard Worker  * 		.extensions = to_user_pointer(&p_engines);
2191*7688df22SAndroid Build Coastguard Worker  * 	};
2192*7688df22SAndroid Build Coastguard Worker  *
2193*7688df22SAndroid Build Coastguard Worker  * 	ctx_id = gem_context_create_ext(drm_fd, &create);
2194*7688df22SAndroid Build Coastguard Worker  *
2195*7688df22SAndroid Build Coastguard Worker  * 	// Now we have created a GEM context with its engine map containing a
2196*7688df22SAndroid Build Coastguard Worker  * 	// single virtual engine. Submissions to this slot can go either to
2197*7688df22SAndroid Build Coastguard Worker  * 	// vcs0 or vcs1, depending on the load balancing algorithm used inside
2198*7688df22SAndroid Build Coastguard Worker  * 	// the driver. The load balancing is dynamic from one batch buffer to
2199*7688df22SAndroid Build Coastguard Worker  * 	// another and transparent to userspace.
2200*7688df22SAndroid Build Coastguard Worker  *
2201*7688df22SAndroid Build Coastguard Worker  * 	...
2202*7688df22SAndroid Build Coastguard Worker  * 	execbuf.rsvd1 = ctx_id;
2203*7688df22SAndroid Build Coastguard Worker  * 	execbuf.flags = 0; // Submits to index 0 which is the virtual engine
2204*7688df22SAndroid Build Coastguard Worker  * 	gem_execbuf(drm_fd, &execbuf);
2205*7688df22SAndroid Build Coastguard Worker  */
2206*7688df22SAndroid Build Coastguard Worker 
2207*7688df22SAndroid Build Coastguard Worker /*
2208*7688df22SAndroid Build Coastguard Worker  * i915_context_engines_load_balance:
2209*7688df22SAndroid Build Coastguard Worker  *
2210*7688df22SAndroid Build Coastguard Worker  * Enable load balancing across this set of engines.
2211*7688df22SAndroid Build Coastguard Worker  *
2212*7688df22SAndroid Build Coastguard Worker  * Into the I915_EXEC_DEFAULT slot [0], a virtual engine is created that when
2213*7688df22SAndroid Build Coastguard Worker  * used will proxy the execbuffer request onto one of the set of engines
2214*7688df22SAndroid Build Coastguard Worker  * in such a way as to distribute the load evenly across the set.
2215*7688df22SAndroid Build Coastguard Worker  *
2216*7688df22SAndroid Build Coastguard Worker  * The set of engines must be compatible (e.g. the same HW class) as they
2217*7688df22SAndroid Build Coastguard Worker  * will share the same logical GPU context and ring.
2218*7688df22SAndroid Build Coastguard Worker  *
2219*7688df22SAndroid Build Coastguard Worker  * To intermix rendering with the virtual engine and direct rendering onto
2220*7688df22SAndroid Build Coastguard Worker  * the backing engines (bypassing the load balancing proxy), the context must
2221*7688df22SAndroid Build Coastguard Worker  * be defined to use a single timeline for all engines.
2222*7688df22SAndroid Build Coastguard Worker  */
2223*7688df22SAndroid Build Coastguard Worker struct i915_context_engines_load_balance {
2224*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
2225*7688df22SAndroid Build Coastguard Worker 
2226*7688df22SAndroid Build Coastguard Worker 	__u16 engine_index;
2227*7688df22SAndroid Build Coastguard Worker 	__u16 num_siblings;
2228*7688df22SAndroid Build Coastguard Worker 	__u32 flags; /* all undefined flags must be zero */
2229*7688df22SAndroid Build Coastguard Worker 
2230*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64; /* reserved for future use; must be zero */
2231*7688df22SAndroid Build Coastguard Worker 
2232*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[];
2233*7688df22SAndroid Build Coastguard Worker } __attribute__((packed));
2234*7688df22SAndroid Build Coastguard Worker 
2235*7688df22SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(name__, N__) struct { \
2236*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base; \
2237*7688df22SAndroid Build Coastguard Worker 	__u16 engine_index; \
2238*7688df22SAndroid Build Coastguard Worker 	__u16 num_siblings; \
2239*7688df22SAndroid Build Coastguard Worker 	__u32 flags; \
2240*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64; \
2241*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
2242*7688df22SAndroid Build Coastguard Worker } __attribute__((packed)) name__
2243*7688df22SAndroid Build Coastguard Worker 
2244*7688df22SAndroid Build Coastguard Worker /*
2245*7688df22SAndroid Build Coastguard Worker  * i915_context_engines_bond:
2246*7688df22SAndroid Build Coastguard Worker  *
2247*7688df22SAndroid Build Coastguard Worker  * Constructed bonded pairs for execution within a virtual engine.
2248*7688df22SAndroid Build Coastguard Worker  *
2249*7688df22SAndroid Build Coastguard Worker  * All engines are equal, but some are more equal than others. Given
2250*7688df22SAndroid Build Coastguard Worker  * the distribution of resources in the HW, it may be preferable to run
2251*7688df22SAndroid Build Coastguard Worker  * a request on a given subset of engines in parallel to a request on a
2252*7688df22SAndroid Build Coastguard Worker  * specific engine. We enable this selection of engines within a virtual
2253*7688df22SAndroid Build Coastguard Worker  * engine by specifying bonding pairs, for any given master engine we will
2254*7688df22SAndroid Build Coastguard Worker  * only execute on one of the corresponding siblings within the virtual engine.
2255*7688df22SAndroid Build Coastguard Worker  *
2256*7688df22SAndroid Build Coastguard Worker  * To execute a request in parallel on the master engine and a sibling requires
2257*7688df22SAndroid Build Coastguard Worker  * coordination with a I915_EXEC_FENCE_SUBMIT.
2258*7688df22SAndroid Build Coastguard Worker  */
2259*7688df22SAndroid Build Coastguard Worker struct i915_context_engines_bond {
2260*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
2261*7688df22SAndroid Build Coastguard Worker 
2262*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance master;
2263*7688df22SAndroid Build Coastguard Worker 
2264*7688df22SAndroid Build Coastguard Worker 	__u16 virtual_index; /* index of virtual engine in ctx->engines[] */
2265*7688df22SAndroid Build Coastguard Worker 	__u16 num_bonds;
2266*7688df22SAndroid Build Coastguard Worker 
2267*7688df22SAndroid Build Coastguard Worker 	__u64 flags; /* all undefined flags must be zero */
2268*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64[4]; /* reserved for future use; must be zero */
2269*7688df22SAndroid Build Coastguard Worker 
2270*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[];
2271*7688df22SAndroid Build Coastguard Worker } __attribute__((packed));
2272*7688df22SAndroid Build Coastguard Worker 
2273*7688df22SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_ENGINES_BOND(name__, N__) struct { \
2274*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base; \
2275*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance master; \
2276*7688df22SAndroid Build Coastguard Worker 	__u16 virtual_index; \
2277*7688df22SAndroid Build Coastguard Worker 	__u16 num_bonds; \
2278*7688df22SAndroid Build Coastguard Worker 	__u64 flags; \
2279*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64[4]; \
2280*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
2281*7688df22SAndroid Build Coastguard Worker } __attribute__((packed)) name__
2282*7688df22SAndroid Build Coastguard Worker 
2283*7688df22SAndroid Build Coastguard Worker /**
2284*7688df22SAndroid Build Coastguard Worker  * struct i915_context_engines_parallel_submit - Configure engine for
2285*7688df22SAndroid Build Coastguard Worker  * parallel submission.
2286*7688df22SAndroid Build Coastguard Worker  *
2287*7688df22SAndroid Build Coastguard Worker  * Setup a slot in the context engine map to allow multiple BBs to be submitted
2288*7688df22SAndroid Build Coastguard Worker  * in a single execbuf IOCTL. Those BBs will then be scheduled to run on the GPU
2289*7688df22SAndroid Build Coastguard Worker  * in parallel. Multiple hardware contexts are created internally in the i915 to
2290*7688df22SAndroid Build Coastguard Worker  * run these BBs. Once a slot is configured for N BBs only N BBs can be
2291*7688df22SAndroid Build Coastguard Worker  * submitted in each execbuf IOCTL and this is implicit behavior e.g. The user
2292*7688df22SAndroid Build Coastguard Worker  * doesn't tell the execbuf IOCTL there are N BBs, the execbuf IOCTL knows how
2293*7688df22SAndroid Build Coastguard Worker  * many BBs there are based on the slot's configuration. The N BBs are the last
2294*7688df22SAndroid Build Coastguard Worker  * N buffer objects or first N if I915_EXEC_BATCH_FIRST is set.
2295*7688df22SAndroid Build Coastguard Worker  *
2296*7688df22SAndroid Build Coastguard Worker  * The default placement behavior is to create implicit bonds between each
2297*7688df22SAndroid Build Coastguard Worker  * context if each context maps to more than 1 physical engine (e.g. context is
2298*7688df22SAndroid Build Coastguard Worker  * a virtual engine). Also we only allow contexts of same engine class and these
2299*7688df22SAndroid Build Coastguard Worker  * contexts must be in logically contiguous order. Examples of the placement
2300*7688df22SAndroid Build Coastguard Worker  * behavior are described below. Lastly, the default is to not allow BBs to be
2301*7688df22SAndroid Build Coastguard Worker  * preempted mid-batch. Rather insert coordinated preemption points on all
2302*7688df22SAndroid Build Coastguard Worker  * hardware contexts between each set of BBs. Flags could be added in the future
2303*7688df22SAndroid Build Coastguard Worker  * to change both of these default behaviors.
2304*7688df22SAndroid Build Coastguard Worker  *
2305*7688df22SAndroid Build Coastguard Worker  * Returns -EINVAL if hardware context placement configuration is invalid or if
2306*7688df22SAndroid Build Coastguard Worker  * the placement configuration isn't supported on the platform / submission
2307*7688df22SAndroid Build Coastguard Worker  * interface.
2308*7688df22SAndroid Build Coastguard Worker  * Returns -ENODEV if extension isn't supported on the platform / submission
2309*7688df22SAndroid Build Coastguard Worker  * interface.
2310*7688df22SAndroid Build Coastguard Worker  *
2311*7688df22SAndroid Build Coastguard Worker  * .. code-block:: none
2312*7688df22SAndroid Build Coastguard Worker  *
2313*7688df22SAndroid Build Coastguard Worker  *	Examples syntax:
2314*7688df22SAndroid Build Coastguard Worker  *	CS[X] = generic engine of same class, logical instance X
2315*7688df22SAndroid Build Coastguard Worker  *	INVALID = I915_ENGINE_CLASS_INVALID, I915_ENGINE_CLASS_INVALID_NONE
2316*7688df22SAndroid Build Coastguard Worker  *
2317*7688df22SAndroid Build Coastguard Worker  *	Example 1 pseudo code:
2318*7688df22SAndroid Build Coastguard Worker  *	set_engines(INVALID)
2319*7688df22SAndroid Build Coastguard Worker  *	set_parallel(engine_index=0, width=2, num_siblings=1,
2320*7688df22SAndroid Build Coastguard Worker  *		     engines=CS[0],CS[1])
2321*7688df22SAndroid Build Coastguard Worker  *
2322*7688df22SAndroid Build Coastguard Worker  *	Results in the following valid placement:
2323*7688df22SAndroid Build Coastguard Worker  *	CS[0], CS[1]
2324*7688df22SAndroid Build Coastguard Worker  *
2325*7688df22SAndroid Build Coastguard Worker  *	Example 2 pseudo code:
2326*7688df22SAndroid Build Coastguard Worker  *	set_engines(INVALID)
2327*7688df22SAndroid Build Coastguard Worker  *	set_parallel(engine_index=0, width=2, num_siblings=2,
2328*7688df22SAndroid Build Coastguard Worker  *		     engines=CS[0],CS[2],CS[1],CS[3])
2329*7688df22SAndroid Build Coastguard Worker  *
2330*7688df22SAndroid Build Coastguard Worker  *	Results in the following valid placements:
2331*7688df22SAndroid Build Coastguard Worker  *	CS[0], CS[1]
2332*7688df22SAndroid Build Coastguard Worker  *	CS[2], CS[3]
2333*7688df22SAndroid Build Coastguard Worker  *
2334*7688df22SAndroid Build Coastguard Worker  *	This can be thought of as two virtual engines, each containing two
2335*7688df22SAndroid Build Coastguard Worker  *	engines thereby making a 2D array. However, there are bonds tying the
2336*7688df22SAndroid Build Coastguard Worker  *	entries together and placing restrictions on how they can be scheduled.
2337*7688df22SAndroid Build Coastguard Worker  *	Specifically, the scheduler can choose only vertical columns from the 2D
2338*7688df22SAndroid Build Coastguard Worker  *	array. That is, CS[0] is bonded to CS[1] and CS[2] to CS[3]. So if the
2339*7688df22SAndroid Build Coastguard Worker  *	scheduler wants to submit to CS[0], it must also choose CS[1] and vice
2340*7688df22SAndroid Build Coastguard Worker  *	versa. Same for CS[2] requires also using CS[3].
2341*7688df22SAndroid Build Coastguard Worker  *	VE[0] = CS[0], CS[2]
2342*7688df22SAndroid Build Coastguard Worker  *	VE[1] = CS[1], CS[3]
2343*7688df22SAndroid Build Coastguard Worker  *
2344*7688df22SAndroid Build Coastguard Worker  *	Example 3 pseudo code:
2345*7688df22SAndroid Build Coastguard Worker  *	set_engines(INVALID)
2346*7688df22SAndroid Build Coastguard Worker  *	set_parallel(engine_index=0, width=2, num_siblings=2,
2347*7688df22SAndroid Build Coastguard Worker  *		     engines=CS[0],CS[1],CS[1],CS[3])
2348*7688df22SAndroid Build Coastguard Worker  *
2349*7688df22SAndroid Build Coastguard Worker  *	Results in the following valid and invalid placements:
2350*7688df22SAndroid Build Coastguard Worker  *	CS[0], CS[1]
2351*7688df22SAndroid Build Coastguard Worker  *	CS[1], CS[3] - Not logically contiguous, return -EINVAL
2352*7688df22SAndroid Build Coastguard Worker  */
2353*7688df22SAndroid Build Coastguard Worker struct i915_context_engines_parallel_submit {
2354*7688df22SAndroid Build Coastguard Worker 	/**
2355*7688df22SAndroid Build Coastguard Worker 	 * @base: base user extension.
2356*7688df22SAndroid Build Coastguard Worker 	 */
2357*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
2358*7688df22SAndroid Build Coastguard Worker 
2359*7688df22SAndroid Build Coastguard Worker 	/**
2360*7688df22SAndroid Build Coastguard Worker 	 * @engine_index: slot for parallel engine
2361*7688df22SAndroid Build Coastguard Worker 	 */
2362*7688df22SAndroid Build Coastguard Worker 	__u16 engine_index;
2363*7688df22SAndroid Build Coastguard Worker 
2364*7688df22SAndroid Build Coastguard Worker 	/**
2365*7688df22SAndroid Build Coastguard Worker 	 * @width: number of contexts per parallel engine or in other words the
2366*7688df22SAndroid Build Coastguard Worker 	 * number of batches in each submission
2367*7688df22SAndroid Build Coastguard Worker 	 */
2368*7688df22SAndroid Build Coastguard Worker 	__u16 width;
2369*7688df22SAndroid Build Coastguard Worker 
2370*7688df22SAndroid Build Coastguard Worker 	/**
2371*7688df22SAndroid Build Coastguard Worker 	 * @num_siblings: number of siblings per context or in other words the
2372*7688df22SAndroid Build Coastguard Worker 	 * number of possible placements for each submission
2373*7688df22SAndroid Build Coastguard Worker 	 */
2374*7688df22SAndroid Build Coastguard Worker 	__u16 num_siblings;
2375*7688df22SAndroid Build Coastguard Worker 
2376*7688df22SAndroid Build Coastguard Worker 	/**
2377*7688df22SAndroid Build Coastguard Worker 	 * @mbz16: reserved for future use; must be zero
2378*7688df22SAndroid Build Coastguard Worker 	 */
2379*7688df22SAndroid Build Coastguard Worker 	__u16 mbz16;
2380*7688df22SAndroid Build Coastguard Worker 
2381*7688df22SAndroid Build Coastguard Worker 	/**
2382*7688df22SAndroid Build Coastguard Worker 	 * @flags: all undefined flags must be zero, currently not defined flags
2383*7688df22SAndroid Build Coastguard Worker 	 */
2384*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
2385*7688df22SAndroid Build Coastguard Worker 
2386*7688df22SAndroid Build Coastguard Worker 	/**
2387*7688df22SAndroid Build Coastguard Worker 	 * @mbz64: reserved for future use; must be zero
2388*7688df22SAndroid Build Coastguard Worker 	 */
2389*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64[3];
2390*7688df22SAndroid Build Coastguard Worker 
2391*7688df22SAndroid Build Coastguard Worker 	/**
2392*7688df22SAndroid Build Coastguard Worker 	 * @engines: 2-d array of engine instances to configure parallel engine
2393*7688df22SAndroid Build Coastguard Worker 	 *
2394*7688df22SAndroid Build Coastguard Worker 	 * length = width (i) * num_siblings (j)
2395*7688df22SAndroid Build Coastguard Worker 	 * index = j + i * num_siblings
2396*7688df22SAndroid Build Coastguard Worker 	 */
2397*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[];
2398*7688df22SAndroid Build Coastguard Worker 
2399*7688df22SAndroid Build Coastguard Worker } __attribute__((packed));
2400*7688df22SAndroid Build Coastguard Worker 
2401*7688df22SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_ENGINES_PARALLEL_SUBMIT(name__, N__) struct { \
2402*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base; \
2403*7688df22SAndroid Build Coastguard Worker 	__u16 engine_index; \
2404*7688df22SAndroid Build Coastguard Worker 	__u16 width; \
2405*7688df22SAndroid Build Coastguard Worker 	__u16 num_siblings; \
2406*7688df22SAndroid Build Coastguard Worker 	__u16 mbz16; \
2407*7688df22SAndroid Build Coastguard Worker 	__u64 flags; \
2408*7688df22SAndroid Build Coastguard Worker 	__u64 mbz64[3]; \
2409*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
2410*7688df22SAndroid Build Coastguard Worker } __attribute__((packed)) name__
2411*7688df22SAndroid Build Coastguard Worker 
2412*7688df22SAndroid Build Coastguard Worker /**
2413*7688df22SAndroid Build Coastguard Worker  * DOC: Context Engine Map uAPI
2414*7688df22SAndroid Build Coastguard Worker  *
2415*7688df22SAndroid Build Coastguard Worker  * Context engine map is a new way of addressing engines when submitting batch-
2416*7688df22SAndroid Build Coastguard Worker  * buffers, replacing the existing way of using identifiers like `I915_EXEC_BLT`
2417*7688df22SAndroid Build Coastguard Worker  * inside the flags field of `struct drm_i915_gem_execbuffer2`.
2418*7688df22SAndroid Build Coastguard Worker  *
2419*7688df22SAndroid Build Coastguard Worker  * To use it created GEM contexts need to be configured with a list of engines
2420*7688df22SAndroid Build Coastguard Worker  * the user is intending to submit to. This is accomplished using the
2421*7688df22SAndroid Build Coastguard Worker  * `I915_CONTEXT_PARAM_ENGINES` parameter and `struct
2422*7688df22SAndroid Build Coastguard Worker  * i915_context_param_engines`.
2423*7688df22SAndroid Build Coastguard Worker  *
2424*7688df22SAndroid Build Coastguard Worker  * For such contexts the `I915_EXEC_RING_MASK` field becomes an index into the
2425*7688df22SAndroid Build Coastguard Worker  * configured map.
2426*7688df22SAndroid Build Coastguard Worker  *
2427*7688df22SAndroid Build Coastguard Worker  * Example of creating such context and submitting against it:
2428*7688df22SAndroid Build Coastguard Worker  *
2429*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
2430*7688df22SAndroid Build Coastguard Worker  *
2431*7688df22SAndroid Build Coastguard Worker  * 	I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 2) = {
2432*7688df22SAndroid Build Coastguard Worker  * 		.engines = { { I915_ENGINE_CLASS_RENDER, 0 },
2433*7688df22SAndroid Build Coastguard Worker  * 			     { I915_ENGINE_CLASS_COPY, 0 } }
2434*7688df22SAndroid Build Coastguard Worker  * 	};
2435*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_gem_context_create_ext_setparam p_engines = {
2436*7688df22SAndroid Build Coastguard Worker  * 		.base = {
2437*7688df22SAndroid Build Coastguard Worker  * 			.name = I915_CONTEXT_CREATE_EXT_SETPARAM,
2438*7688df22SAndroid Build Coastguard Worker  * 		},
2439*7688df22SAndroid Build Coastguard Worker  * 		.param = {
2440*7688df22SAndroid Build Coastguard Worker  * 			.param = I915_CONTEXT_PARAM_ENGINES,
2441*7688df22SAndroid Build Coastguard Worker  * 			.value = to_user_pointer(&engines),
2442*7688df22SAndroid Build Coastguard Worker  * 			.size = sizeof(engines),
2443*7688df22SAndroid Build Coastguard Worker  * 		},
2444*7688df22SAndroid Build Coastguard Worker  * 	};
2445*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_gem_context_create_ext create = {
2446*7688df22SAndroid Build Coastguard Worker  * 		.flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS,
2447*7688df22SAndroid Build Coastguard Worker  * 		.extensions = to_user_pointer(&p_engines);
2448*7688df22SAndroid Build Coastguard Worker  * 	};
2449*7688df22SAndroid Build Coastguard Worker  *
2450*7688df22SAndroid Build Coastguard Worker  * 	ctx_id = gem_context_create_ext(drm_fd, &create);
2451*7688df22SAndroid Build Coastguard Worker  *
2452*7688df22SAndroid Build Coastguard Worker  * 	// We have now created a GEM context with two engines in the map:
2453*7688df22SAndroid Build Coastguard Worker  * 	// Index 0 points to rcs0 while index 1 points to bcs0. Other engines
2454*7688df22SAndroid Build Coastguard Worker  * 	// will not be accessible from this context.
2455*7688df22SAndroid Build Coastguard Worker  *
2456*7688df22SAndroid Build Coastguard Worker  * 	...
2457*7688df22SAndroid Build Coastguard Worker  * 	execbuf.rsvd1 = ctx_id;
2458*7688df22SAndroid Build Coastguard Worker  * 	execbuf.flags = 0; // Submits to index 0, which is rcs0 for this context
2459*7688df22SAndroid Build Coastguard Worker  * 	gem_execbuf(drm_fd, &execbuf);
2460*7688df22SAndroid Build Coastguard Worker  *
2461*7688df22SAndroid Build Coastguard Worker  * 	...
2462*7688df22SAndroid Build Coastguard Worker  * 	execbuf.rsvd1 = ctx_id;
2463*7688df22SAndroid Build Coastguard Worker  * 	execbuf.flags = 1; // Submits to index 0, which is bcs0 for this context
2464*7688df22SAndroid Build Coastguard Worker  * 	gem_execbuf(drm_fd, &execbuf);
2465*7688df22SAndroid Build Coastguard Worker  */
2466*7688df22SAndroid Build Coastguard Worker 
2467*7688df22SAndroid Build Coastguard Worker struct i915_context_param_engines {
2468*7688df22SAndroid Build Coastguard Worker 	__u64 extensions; /* linked chain of extension blocks, 0 terminates */
2469*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE 0 /* see i915_context_engines_load_balance */
2470*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_ENGINES_EXT_BOND 1 /* see i915_context_engines_bond */
2471*7688df22SAndroid Build Coastguard Worker #define I915_CONTEXT_ENGINES_EXT_PARALLEL_SUBMIT 2 /* see i915_context_engines_parallel_submit */
2472*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[0];
2473*7688df22SAndroid Build Coastguard Worker } __attribute__((packed));
2474*7688df22SAndroid Build Coastguard Worker 
2475*7688df22SAndroid Build Coastguard Worker #define I915_DEFINE_CONTEXT_PARAM_ENGINES(name__, N__) struct { \
2476*7688df22SAndroid Build Coastguard Worker 	__u64 extensions; \
2477*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engines[N__]; \
2478*7688df22SAndroid Build Coastguard Worker } __attribute__((packed)) name__
2479*7688df22SAndroid Build Coastguard Worker 
2480*7688df22SAndroid Build Coastguard Worker /**
2481*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_context_create_ext_setparam - Context parameter
2482*7688df22SAndroid Build Coastguard Worker  * to set or query during context creation.
2483*7688df22SAndroid Build Coastguard Worker  */
2484*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_create_ext_setparam {
2485*7688df22SAndroid Build Coastguard Worker 	/** @base: Extension link. See struct i915_user_extension. */
2486*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
2487*7688df22SAndroid Build Coastguard Worker 
2488*7688df22SAndroid Build Coastguard Worker 	/**
2489*7688df22SAndroid Build Coastguard Worker 	 * @param: Context parameter to set or query.
2490*7688df22SAndroid Build Coastguard Worker 	 * See struct drm_i915_gem_context_param.
2491*7688df22SAndroid Build Coastguard Worker 	 */
2492*7688df22SAndroid Build Coastguard Worker 	struct drm_i915_gem_context_param param;
2493*7688df22SAndroid Build Coastguard Worker };
2494*7688df22SAndroid Build Coastguard Worker 
2495*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_context_destroy {
2496*7688df22SAndroid Build Coastguard Worker 	__u32 ctx_id;
2497*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
2498*7688df22SAndroid Build Coastguard Worker };
2499*7688df22SAndroid Build Coastguard Worker 
2500*7688df22SAndroid Build Coastguard Worker /**
2501*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_vm_control - Structure to create or destroy VM.
2502*7688df22SAndroid Build Coastguard Worker  *
2503*7688df22SAndroid Build Coastguard Worker  * DRM_I915_GEM_VM_CREATE -
2504*7688df22SAndroid Build Coastguard Worker  *
2505*7688df22SAndroid Build Coastguard Worker  * Create a new virtual memory address space (ppGTT) for use within a context
2506*7688df22SAndroid Build Coastguard Worker  * on the same file. Extensions can be provided to configure exactly how the
2507*7688df22SAndroid Build Coastguard Worker  * address space is setup upon creation.
2508*7688df22SAndroid Build Coastguard Worker  *
2509*7688df22SAndroid Build Coastguard Worker  * The id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is
2510*7688df22SAndroid Build Coastguard Worker  * returned in the outparam @id.
2511*7688df22SAndroid Build Coastguard Worker  *
2512*7688df22SAndroid Build Coastguard Worker  * An extension chain maybe provided, starting with @extensions, and terminated
2513*7688df22SAndroid Build Coastguard Worker  * by the @next_extension being 0. Currently, no extensions are defined.
2514*7688df22SAndroid Build Coastguard Worker  *
2515*7688df22SAndroid Build Coastguard Worker  * DRM_I915_GEM_VM_DESTROY -
2516*7688df22SAndroid Build Coastguard Worker  *
2517*7688df22SAndroid Build Coastguard Worker  * Destroys a previously created VM id, specified in @vm_id.
2518*7688df22SAndroid Build Coastguard Worker  *
2519*7688df22SAndroid Build Coastguard Worker  * No extensions or flags are allowed currently, and so must be zero.
2520*7688df22SAndroid Build Coastguard Worker  */
2521*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_vm_control {
2522*7688df22SAndroid Build Coastguard Worker 	/** @extensions: Zero-terminated chain of extensions. */
2523*7688df22SAndroid Build Coastguard Worker 	__u64 extensions;
2524*7688df22SAndroid Build Coastguard Worker 
2525*7688df22SAndroid Build Coastguard Worker 	/** @flags: reserved for future usage, currently MBZ */
2526*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2527*7688df22SAndroid Build Coastguard Worker 
2528*7688df22SAndroid Build Coastguard Worker 	/** @vm_id: Id of the VM created or to be destroyed */
2529*7688df22SAndroid Build Coastguard Worker 	__u32 vm_id;
2530*7688df22SAndroid Build Coastguard Worker };
2531*7688df22SAndroid Build Coastguard Worker 
2532*7688df22SAndroid Build Coastguard Worker struct drm_i915_reg_read {
2533*7688df22SAndroid Build Coastguard Worker 	/*
2534*7688df22SAndroid Build Coastguard Worker 	 * Register offset.
2535*7688df22SAndroid Build Coastguard Worker 	 * For 64bit wide registers where the upper 32bits don't immediately
2536*7688df22SAndroid Build Coastguard Worker 	 * follow the lower 32bits, the offset of the lower 32bits must
2537*7688df22SAndroid Build Coastguard Worker 	 * be specified
2538*7688df22SAndroid Build Coastguard Worker 	 */
2539*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
2540*7688df22SAndroid Build Coastguard Worker #define I915_REG_READ_8B_WA (1ul << 0)
2541*7688df22SAndroid Build Coastguard Worker 
2542*7688df22SAndroid Build Coastguard Worker 	__u64 val; /* Return value */
2543*7688df22SAndroid Build Coastguard Worker };
2544*7688df22SAndroid Build Coastguard Worker 
2545*7688df22SAndroid Build Coastguard Worker /* Known registers:
2546*7688df22SAndroid Build Coastguard Worker  *
2547*7688df22SAndroid Build Coastguard Worker  * Render engine timestamp - 0x2358 + 64bit - gen7+
2548*7688df22SAndroid Build Coastguard Worker  * - Note this register returns an invalid value if using the default
2549*7688df22SAndroid Build Coastguard Worker  *   single instruction 8byte read, in order to workaround that pass
2550*7688df22SAndroid Build Coastguard Worker  *   flag I915_REG_READ_8B_WA in offset field.
2551*7688df22SAndroid Build Coastguard Worker  *
2552*7688df22SAndroid Build Coastguard Worker  */
2553*7688df22SAndroid Build Coastguard Worker 
2554*7688df22SAndroid Build Coastguard Worker struct drm_i915_reset_stats {
2555*7688df22SAndroid Build Coastguard Worker 	__u32 ctx_id;
2556*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2557*7688df22SAndroid Build Coastguard Worker 
2558*7688df22SAndroid Build Coastguard Worker 	/* All resets since boot/module reload, for all contexts */
2559*7688df22SAndroid Build Coastguard Worker 	__u32 reset_count;
2560*7688df22SAndroid Build Coastguard Worker 
2561*7688df22SAndroid Build Coastguard Worker 	/* Number of batches lost when active in GPU, for this context */
2562*7688df22SAndroid Build Coastguard Worker 	__u32 batch_active;
2563*7688df22SAndroid Build Coastguard Worker 
2564*7688df22SAndroid Build Coastguard Worker 	/* Number of batches lost pending for execution, for this context */
2565*7688df22SAndroid Build Coastguard Worker 	__u32 batch_pending;
2566*7688df22SAndroid Build Coastguard Worker 
2567*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
2568*7688df22SAndroid Build Coastguard Worker };
2569*7688df22SAndroid Build Coastguard Worker 
2570*7688df22SAndroid Build Coastguard Worker /**
2571*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_userptr - Create GEM object from user allocated memory.
2572*7688df22SAndroid Build Coastguard Worker  *
2573*7688df22SAndroid Build Coastguard Worker  * Userptr objects have several restrictions on what ioctls can be used with the
2574*7688df22SAndroid Build Coastguard Worker  * object handle.
2575*7688df22SAndroid Build Coastguard Worker  */
2576*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_userptr {
2577*7688df22SAndroid Build Coastguard Worker 	/**
2578*7688df22SAndroid Build Coastguard Worker 	 * @user_ptr: The pointer to the allocated memory.
2579*7688df22SAndroid Build Coastguard Worker 	 *
2580*7688df22SAndroid Build Coastguard Worker 	 * Needs to be aligned to PAGE_SIZE.
2581*7688df22SAndroid Build Coastguard Worker 	 */
2582*7688df22SAndroid Build Coastguard Worker 	__u64 user_ptr;
2583*7688df22SAndroid Build Coastguard Worker 
2584*7688df22SAndroid Build Coastguard Worker 	/**
2585*7688df22SAndroid Build Coastguard Worker 	 * @user_size:
2586*7688df22SAndroid Build Coastguard Worker 	 *
2587*7688df22SAndroid Build Coastguard Worker 	 * The size in bytes for the allocated memory. This will also become the
2588*7688df22SAndroid Build Coastguard Worker 	 * object size.
2589*7688df22SAndroid Build Coastguard Worker 	 *
2590*7688df22SAndroid Build Coastguard Worker 	 * Needs to be aligned to PAGE_SIZE, and should be at least PAGE_SIZE,
2591*7688df22SAndroid Build Coastguard Worker 	 * or larger.
2592*7688df22SAndroid Build Coastguard Worker 	 */
2593*7688df22SAndroid Build Coastguard Worker 	__u64 user_size;
2594*7688df22SAndroid Build Coastguard Worker 
2595*7688df22SAndroid Build Coastguard Worker 	/**
2596*7688df22SAndroid Build Coastguard Worker 	 * @flags:
2597*7688df22SAndroid Build Coastguard Worker 	 *
2598*7688df22SAndroid Build Coastguard Worker 	 * Supported flags:
2599*7688df22SAndroid Build Coastguard Worker 	 *
2600*7688df22SAndroid Build Coastguard Worker 	 * I915_USERPTR_READ_ONLY:
2601*7688df22SAndroid Build Coastguard Worker 	 *
2602*7688df22SAndroid Build Coastguard Worker 	 * Mark the object as readonly, this also means GPU access can only be
2603*7688df22SAndroid Build Coastguard Worker 	 * readonly. This is only supported on HW which supports readonly access
2604*7688df22SAndroid Build Coastguard Worker 	 * through the GTT. If the HW can't support readonly access, an error is
2605*7688df22SAndroid Build Coastguard Worker 	 * returned.
2606*7688df22SAndroid Build Coastguard Worker 	 *
2607*7688df22SAndroid Build Coastguard Worker 	 * I915_USERPTR_PROBE:
2608*7688df22SAndroid Build Coastguard Worker 	 *
2609*7688df22SAndroid Build Coastguard Worker 	 * Probe the provided @user_ptr range and validate that the @user_ptr is
2610*7688df22SAndroid Build Coastguard Worker 	 * indeed pointing to normal memory and that the range is also valid.
2611*7688df22SAndroid Build Coastguard Worker 	 * For example if some garbage address is given to the kernel, then this
2612*7688df22SAndroid Build Coastguard Worker 	 * should complain.
2613*7688df22SAndroid Build Coastguard Worker 	 *
2614*7688df22SAndroid Build Coastguard Worker 	 * Returns -EFAULT if the probe failed.
2615*7688df22SAndroid Build Coastguard Worker 	 *
2616*7688df22SAndroid Build Coastguard Worker 	 * Note that this doesn't populate the backing pages, and also doesn't
2617*7688df22SAndroid Build Coastguard Worker 	 * guarantee that the object will remain valid when the object is
2618*7688df22SAndroid Build Coastguard Worker 	 * eventually used.
2619*7688df22SAndroid Build Coastguard Worker 	 *
2620*7688df22SAndroid Build Coastguard Worker 	 * The kernel supports this feature if I915_PARAM_HAS_USERPTR_PROBE
2621*7688df22SAndroid Build Coastguard Worker 	 * returns a non-zero value.
2622*7688df22SAndroid Build Coastguard Worker 	 *
2623*7688df22SAndroid Build Coastguard Worker 	 * I915_USERPTR_UNSYNCHRONIZED:
2624*7688df22SAndroid Build Coastguard Worker 	 *
2625*7688df22SAndroid Build Coastguard Worker 	 * NOT USED. Setting this flag will result in an error.
2626*7688df22SAndroid Build Coastguard Worker 	 */
2627*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2628*7688df22SAndroid Build Coastguard Worker #define I915_USERPTR_READ_ONLY 0x1
2629*7688df22SAndroid Build Coastguard Worker #define I915_USERPTR_PROBE 0x2
2630*7688df22SAndroid Build Coastguard Worker #define I915_USERPTR_UNSYNCHRONIZED 0x80000000
2631*7688df22SAndroid Build Coastguard Worker 	/**
2632*7688df22SAndroid Build Coastguard Worker 	 * @handle: Returned handle for the object.
2633*7688df22SAndroid Build Coastguard Worker 	 *
2634*7688df22SAndroid Build Coastguard Worker 	 * Object handles are nonzero.
2635*7688df22SAndroid Build Coastguard Worker 	 */
2636*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
2637*7688df22SAndroid Build Coastguard Worker };
2638*7688df22SAndroid Build Coastguard Worker 
2639*7688df22SAndroid Build Coastguard Worker enum drm_i915_oa_format {
2640*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A13 = 1,	    /* HSW only */
2641*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A29,	    /* HSW only */
2642*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A13_B8_C8,   /* HSW only */
2643*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_B4_C8,	    /* HSW only */
2644*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A45_B8_C8,   /* HSW only */
2645*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_B4_C8_A16,   /* HSW only */
2646*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_C4_B8,	    /* HSW+ */
2647*7688df22SAndroid Build Coastguard Worker 
2648*7688df22SAndroid Build Coastguard Worker 	/* Gen8+ */
2649*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A12,
2650*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A12_B8_C8,
2651*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_A32u40_A4u32_B8_C8,
2652*7688df22SAndroid Build Coastguard Worker 
2653*7688df22SAndroid Build Coastguard Worker 	I915_OA_FORMAT_MAX	    /* non-ABI */
2654*7688df22SAndroid Build Coastguard Worker };
2655*7688df22SAndroid Build Coastguard Worker 
2656*7688df22SAndroid Build Coastguard Worker enum drm_i915_perf_property_id {
2657*7688df22SAndroid Build Coastguard Worker 	/**
2658*7688df22SAndroid Build Coastguard Worker 	 * Open the stream for a specific context handle (as used with
2659*7688df22SAndroid Build Coastguard Worker 	 * execbuffer2). A stream opened for a specific context this way
2660*7688df22SAndroid Build Coastguard Worker 	 * won't typically require root privileges.
2661*7688df22SAndroid Build Coastguard Worker 	 *
2662*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 1.
2663*7688df22SAndroid Build Coastguard Worker 	 */
2664*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_CTX_HANDLE = 1,
2665*7688df22SAndroid Build Coastguard Worker 
2666*7688df22SAndroid Build Coastguard Worker 	/**
2667*7688df22SAndroid Build Coastguard Worker 	 * A value of 1 requests the inclusion of raw OA unit reports as
2668*7688df22SAndroid Build Coastguard Worker 	 * part of stream samples.
2669*7688df22SAndroid Build Coastguard Worker 	 *
2670*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 1.
2671*7688df22SAndroid Build Coastguard Worker 	 */
2672*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_SAMPLE_OA,
2673*7688df22SAndroid Build Coastguard Worker 
2674*7688df22SAndroid Build Coastguard Worker 	/**
2675*7688df22SAndroid Build Coastguard Worker 	 * The value specifies which set of OA unit metrics should be
2676*7688df22SAndroid Build Coastguard Worker 	 * configured, defining the contents of any OA unit reports.
2677*7688df22SAndroid Build Coastguard Worker 	 *
2678*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 1.
2679*7688df22SAndroid Build Coastguard Worker 	 */
2680*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_METRICS_SET,
2681*7688df22SAndroid Build Coastguard Worker 
2682*7688df22SAndroid Build Coastguard Worker 	/**
2683*7688df22SAndroid Build Coastguard Worker 	 * The value specifies the size and layout of OA unit reports.
2684*7688df22SAndroid Build Coastguard Worker 	 *
2685*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 1.
2686*7688df22SAndroid Build Coastguard Worker 	 */
2687*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_FORMAT,
2688*7688df22SAndroid Build Coastguard Worker 
2689*7688df22SAndroid Build Coastguard Worker 	/**
2690*7688df22SAndroid Build Coastguard Worker 	 * Specifying this property implicitly requests periodic OA unit
2691*7688df22SAndroid Build Coastguard Worker 	 * sampling and (at least on Haswell) the sampling frequency is derived
2692*7688df22SAndroid Build Coastguard Worker 	 * from this exponent as follows:
2693*7688df22SAndroid Build Coastguard Worker 	 *
2694*7688df22SAndroid Build Coastguard Worker 	 *   80ns * 2^(period_exponent + 1)
2695*7688df22SAndroid Build Coastguard Worker 	 *
2696*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 1.
2697*7688df22SAndroid Build Coastguard Worker 	 */
2698*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_OA_EXPONENT,
2699*7688df22SAndroid Build Coastguard Worker 
2700*7688df22SAndroid Build Coastguard Worker 	/**
2701*7688df22SAndroid Build Coastguard Worker 	 * Specifying this property is only valid when specify a context to
2702*7688df22SAndroid Build Coastguard Worker 	 * filter with DRM_I915_PERF_PROP_CTX_HANDLE. Specifying this property
2703*7688df22SAndroid Build Coastguard Worker 	 * will hold preemption of the particular context we want to gather
2704*7688df22SAndroid Build Coastguard Worker 	 * performance data about. The execbuf2 submissions must include a
2705*7688df22SAndroid Build Coastguard Worker 	 * drm_i915_gem_execbuffer_ext_perf parameter for this to apply.
2706*7688df22SAndroid Build Coastguard Worker 	 *
2707*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 3.
2708*7688df22SAndroid Build Coastguard Worker 	 */
2709*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_HOLD_PREEMPTION,
2710*7688df22SAndroid Build Coastguard Worker 
2711*7688df22SAndroid Build Coastguard Worker 	/**
2712*7688df22SAndroid Build Coastguard Worker 	 * Specifying this pins all contexts to the specified SSEU power
2713*7688df22SAndroid Build Coastguard Worker 	 * configuration for the duration of the recording.
2714*7688df22SAndroid Build Coastguard Worker 	 *
2715*7688df22SAndroid Build Coastguard Worker 	 * This parameter's value is a pointer to a struct
2716*7688df22SAndroid Build Coastguard Worker 	 * drm_i915_gem_context_param_sseu.
2717*7688df22SAndroid Build Coastguard Worker 	 *
2718*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 4.
2719*7688df22SAndroid Build Coastguard Worker 	 */
2720*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_GLOBAL_SSEU,
2721*7688df22SAndroid Build Coastguard Worker 
2722*7688df22SAndroid Build Coastguard Worker 	/**
2723*7688df22SAndroid Build Coastguard Worker 	 * This optional parameter specifies the timer interval in nanoseconds
2724*7688df22SAndroid Build Coastguard Worker 	 * at which the i915 driver will check the OA buffer for available data.
2725*7688df22SAndroid Build Coastguard Worker 	 * Minimum allowed value is 100 microseconds. A default value is used by
2726*7688df22SAndroid Build Coastguard Worker 	 * the driver if this parameter is not specified. Note that larger timer
2727*7688df22SAndroid Build Coastguard Worker 	 * values will reduce cpu consumption during OA perf captures. However,
2728*7688df22SAndroid Build Coastguard Worker 	 * excessively large values would potentially result in OA buffer
2729*7688df22SAndroid Build Coastguard Worker 	 * overwrites as captures reach end of the OA buffer.
2730*7688df22SAndroid Build Coastguard Worker 	 *
2731*7688df22SAndroid Build Coastguard Worker 	 * This property is available in perf revision 5.
2732*7688df22SAndroid Build Coastguard Worker 	 */
2733*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_POLL_OA_PERIOD,
2734*7688df22SAndroid Build Coastguard Worker 
2735*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_PROP_MAX /* non-ABI */
2736*7688df22SAndroid Build Coastguard Worker };
2737*7688df22SAndroid Build Coastguard Worker 
2738*7688df22SAndroid Build Coastguard Worker struct drm_i915_perf_open_param {
2739*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2740*7688df22SAndroid Build Coastguard Worker #define I915_PERF_FLAG_FD_CLOEXEC	(1<<0)
2741*7688df22SAndroid Build Coastguard Worker #define I915_PERF_FLAG_FD_NONBLOCK	(1<<1)
2742*7688df22SAndroid Build Coastguard Worker #define I915_PERF_FLAG_DISABLED		(1<<2)
2743*7688df22SAndroid Build Coastguard Worker 
2744*7688df22SAndroid Build Coastguard Worker 	/** The number of u64 (id, value) pairs */
2745*7688df22SAndroid Build Coastguard Worker 	__u32 num_properties;
2746*7688df22SAndroid Build Coastguard Worker 
2747*7688df22SAndroid Build Coastguard Worker 	/**
2748*7688df22SAndroid Build Coastguard Worker 	 * Pointer to array of u64 (id, value) pairs configuring the stream
2749*7688df22SAndroid Build Coastguard Worker 	 * to open.
2750*7688df22SAndroid Build Coastguard Worker 	 */
2751*7688df22SAndroid Build Coastguard Worker 	__u64 properties_ptr;
2752*7688df22SAndroid Build Coastguard Worker };
2753*7688df22SAndroid Build Coastguard Worker 
2754*7688df22SAndroid Build Coastguard Worker /*
2755*7688df22SAndroid Build Coastguard Worker  * Enable data capture for a stream that was either opened in a disabled state
2756*7688df22SAndroid Build Coastguard Worker  * via I915_PERF_FLAG_DISABLED or was later disabled via
2757*7688df22SAndroid Build Coastguard Worker  * I915_PERF_IOCTL_DISABLE.
2758*7688df22SAndroid Build Coastguard Worker  *
2759*7688df22SAndroid Build Coastguard Worker  * It is intended to be cheaper to disable and enable a stream than it may be
2760*7688df22SAndroid Build Coastguard Worker  * to close and re-open a stream with the same configuration.
2761*7688df22SAndroid Build Coastguard Worker  *
2762*7688df22SAndroid Build Coastguard Worker  * It's undefined whether any pending data for the stream will be lost.
2763*7688df22SAndroid Build Coastguard Worker  *
2764*7688df22SAndroid Build Coastguard Worker  * This ioctl is available in perf revision 1.
2765*7688df22SAndroid Build Coastguard Worker  */
2766*7688df22SAndroid Build Coastguard Worker #define I915_PERF_IOCTL_ENABLE	_IO('i', 0x0)
2767*7688df22SAndroid Build Coastguard Worker 
2768*7688df22SAndroid Build Coastguard Worker /*
2769*7688df22SAndroid Build Coastguard Worker  * Disable data capture for a stream.
2770*7688df22SAndroid Build Coastguard Worker  *
2771*7688df22SAndroid Build Coastguard Worker  * It is an error to try and read a stream that is disabled.
2772*7688df22SAndroid Build Coastguard Worker  *
2773*7688df22SAndroid Build Coastguard Worker  * This ioctl is available in perf revision 1.
2774*7688df22SAndroid Build Coastguard Worker  */
2775*7688df22SAndroid Build Coastguard Worker #define I915_PERF_IOCTL_DISABLE	_IO('i', 0x1)
2776*7688df22SAndroid Build Coastguard Worker 
2777*7688df22SAndroid Build Coastguard Worker /*
2778*7688df22SAndroid Build Coastguard Worker  * Change metrics_set captured by a stream.
2779*7688df22SAndroid Build Coastguard Worker  *
2780*7688df22SAndroid Build Coastguard Worker  * If the stream is bound to a specific context, the configuration change
2781*7688df22SAndroid Build Coastguard Worker  * will performed __inline__ with that context such that it takes effect before
2782*7688df22SAndroid Build Coastguard Worker  * the next execbuf submission.
2783*7688df22SAndroid Build Coastguard Worker  *
2784*7688df22SAndroid Build Coastguard Worker  * Returns the previously bound metrics set id, or a negative error code.
2785*7688df22SAndroid Build Coastguard Worker  *
2786*7688df22SAndroid Build Coastguard Worker  * This ioctl is available in perf revision 2.
2787*7688df22SAndroid Build Coastguard Worker  */
2788*7688df22SAndroid Build Coastguard Worker #define I915_PERF_IOCTL_CONFIG	_IO('i', 0x2)
2789*7688df22SAndroid Build Coastguard Worker 
2790*7688df22SAndroid Build Coastguard Worker /*
2791*7688df22SAndroid Build Coastguard Worker  * Common to all i915 perf records
2792*7688df22SAndroid Build Coastguard Worker  */
2793*7688df22SAndroid Build Coastguard Worker struct drm_i915_perf_record_header {
2794*7688df22SAndroid Build Coastguard Worker 	__u32 type;
2795*7688df22SAndroid Build Coastguard Worker 	__u16 pad;
2796*7688df22SAndroid Build Coastguard Worker 	__u16 size;
2797*7688df22SAndroid Build Coastguard Worker };
2798*7688df22SAndroid Build Coastguard Worker 
2799*7688df22SAndroid Build Coastguard Worker enum drm_i915_perf_record_type {
2800*7688df22SAndroid Build Coastguard Worker 
2801*7688df22SAndroid Build Coastguard Worker 	/**
2802*7688df22SAndroid Build Coastguard Worker 	 * Samples are the work horse record type whose contents are extensible
2803*7688df22SAndroid Build Coastguard Worker 	 * and defined when opening an i915 perf stream based on the given
2804*7688df22SAndroid Build Coastguard Worker 	 * properties.
2805*7688df22SAndroid Build Coastguard Worker 	 *
2806*7688df22SAndroid Build Coastguard Worker 	 * Boolean properties following the naming convention
2807*7688df22SAndroid Build Coastguard Worker 	 * DRM_I915_PERF_SAMPLE_xyz_PROP request the inclusion of 'xyz' data in
2808*7688df22SAndroid Build Coastguard Worker 	 * every sample.
2809*7688df22SAndroid Build Coastguard Worker 	 *
2810*7688df22SAndroid Build Coastguard Worker 	 * The order of these sample properties given by userspace has no
2811*7688df22SAndroid Build Coastguard Worker 	 * affect on the ordering of data within a sample. The order is
2812*7688df22SAndroid Build Coastguard Worker 	 * documented here.
2813*7688df22SAndroid Build Coastguard Worker 	 *
2814*7688df22SAndroid Build Coastguard Worker 	 * struct {
2815*7688df22SAndroid Build Coastguard Worker 	 *     struct drm_i915_perf_record_header header;
2816*7688df22SAndroid Build Coastguard Worker 	 *
2817*7688df22SAndroid Build Coastguard Worker 	 *     { u32 oa_report[]; } && DRM_I915_PERF_PROP_SAMPLE_OA
2818*7688df22SAndroid Build Coastguard Worker 	 * };
2819*7688df22SAndroid Build Coastguard Worker 	 */
2820*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_SAMPLE = 1,
2821*7688df22SAndroid Build Coastguard Worker 
2822*7688df22SAndroid Build Coastguard Worker 	/*
2823*7688df22SAndroid Build Coastguard Worker 	 * Indicates that one or more OA reports were not written by the
2824*7688df22SAndroid Build Coastguard Worker 	 * hardware. This can happen for example if an MI_REPORT_PERF_COUNT
2825*7688df22SAndroid Build Coastguard Worker 	 * command collides with periodic sampling - which would be more likely
2826*7688df22SAndroid Build Coastguard Worker 	 * at higher sampling frequencies.
2827*7688df22SAndroid Build Coastguard Worker 	 */
2828*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_OA_REPORT_LOST = 2,
2829*7688df22SAndroid Build Coastguard Worker 
2830*7688df22SAndroid Build Coastguard Worker 	/**
2831*7688df22SAndroid Build Coastguard Worker 	 * An error occurred that resulted in all pending OA reports being lost.
2832*7688df22SAndroid Build Coastguard Worker 	 */
2833*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_OA_BUFFER_LOST = 3,
2834*7688df22SAndroid Build Coastguard Worker 
2835*7688df22SAndroid Build Coastguard Worker 	DRM_I915_PERF_RECORD_MAX /* non-ABI */
2836*7688df22SAndroid Build Coastguard Worker };
2837*7688df22SAndroid Build Coastguard Worker 
2838*7688df22SAndroid Build Coastguard Worker /**
2839*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_perf_oa_config
2840*7688df22SAndroid Build Coastguard Worker  *
2841*7688df22SAndroid Build Coastguard Worker  * Structure to upload perf dynamic configuration into the kernel.
2842*7688df22SAndroid Build Coastguard Worker  */
2843*7688df22SAndroid Build Coastguard Worker struct drm_i915_perf_oa_config {
2844*7688df22SAndroid Build Coastguard Worker 	/**
2845*7688df22SAndroid Build Coastguard Worker 	 * @uuid:
2846*7688df22SAndroid Build Coastguard Worker 	 *
2847*7688df22SAndroid Build Coastguard Worker 	 * String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x"
2848*7688df22SAndroid Build Coastguard Worker 	 */
2849*7688df22SAndroid Build Coastguard Worker 	char uuid[36];
2850*7688df22SAndroid Build Coastguard Worker 
2851*7688df22SAndroid Build Coastguard Worker 	/**
2852*7688df22SAndroid Build Coastguard Worker 	 * @n_mux_regs:
2853*7688df22SAndroid Build Coastguard Worker 	 *
2854*7688df22SAndroid Build Coastguard Worker 	 * Number of mux regs in &mux_regs_ptr.
2855*7688df22SAndroid Build Coastguard Worker 	 */
2856*7688df22SAndroid Build Coastguard Worker 	__u32 n_mux_regs;
2857*7688df22SAndroid Build Coastguard Worker 
2858*7688df22SAndroid Build Coastguard Worker 	/**
2859*7688df22SAndroid Build Coastguard Worker 	 * @n_boolean_regs:
2860*7688df22SAndroid Build Coastguard Worker 	 *
2861*7688df22SAndroid Build Coastguard Worker 	 * Number of boolean regs in &boolean_regs_ptr.
2862*7688df22SAndroid Build Coastguard Worker 	 */
2863*7688df22SAndroid Build Coastguard Worker 	__u32 n_boolean_regs;
2864*7688df22SAndroid Build Coastguard Worker 
2865*7688df22SAndroid Build Coastguard Worker 	/**
2866*7688df22SAndroid Build Coastguard Worker 	 * @n_flex_regs:
2867*7688df22SAndroid Build Coastguard Worker 	 *
2868*7688df22SAndroid Build Coastguard Worker 	 * Number of flex regs in &flex_regs_ptr.
2869*7688df22SAndroid Build Coastguard Worker 	 */
2870*7688df22SAndroid Build Coastguard Worker 	__u32 n_flex_regs;
2871*7688df22SAndroid Build Coastguard Worker 
2872*7688df22SAndroid Build Coastguard Worker 	/**
2873*7688df22SAndroid Build Coastguard Worker 	 * @mux_regs_ptr:
2874*7688df22SAndroid Build Coastguard Worker 	 *
2875*7688df22SAndroid Build Coastguard Worker 	 * Pointer to tuples of u32 values (register address, value) for mux
2876*7688df22SAndroid Build Coastguard Worker 	 * registers.  Expected length of buffer is (2 * sizeof(u32) *
2877*7688df22SAndroid Build Coastguard Worker 	 * &n_mux_regs).
2878*7688df22SAndroid Build Coastguard Worker 	 */
2879*7688df22SAndroid Build Coastguard Worker 	__u64 mux_regs_ptr;
2880*7688df22SAndroid Build Coastguard Worker 
2881*7688df22SAndroid Build Coastguard Worker 	/**
2882*7688df22SAndroid Build Coastguard Worker 	 * @boolean_regs_ptr:
2883*7688df22SAndroid Build Coastguard Worker 	 *
2884*7688df22SAndroid Build Coastguard Worker 	 * Pointer to tuples of u32 values (register address, value) for mux
2885*7688df22SAndroid Build Coastguard Worker 	 * registers.  Expected length of buffer is (2 * sizeof(u32) *
2886*7688df22SAndroid Build Coastguard Worker 	 * &n_boolean_regs).
2887*7688df22SAndroid Build Coastguard Worker 	 */
2888*7688df22SAndroid Build Coastguard Worker 	__u64 boolean_regs_ptr;
2889*7688df22SAndroid Build Coastguard Worker 
2890*7688df22SAndroid Build Coastguard Worker 	/**
2891*7688df22SAndroid Build Coastguard Worker 	 * @flex_regs_ptr:
2892*7688df22SAndroid Build Coastguard Worker 	 *
2893*7688df22SAndroid Build Coastguard Worker 	 * Pointer to tuples of u32 values (register address, value) for mux
2894*7688df22SAndroid Build Coastguard Worker 	 * registers.  Expected length of buffer is (2 * sizeof(u32) *
2895*7688df22SAndroid Build Coastguard Worker 	 * &n_flex_regs).
2896*7688df22SAndroid Build Coastguard Worker 	 */
2897*7688df22SAndroid Build Coastguard Worker 	__u64 flex_regs_ptr;
2898*7688df22SAndroid Build Coastguard Worker };
2899*7688df22SAndroid Build Coastguard Worker 
2900*7688df22SAndroid Build Coastguard Worker /**
2901*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query_item - An individual query for the kernel to process.
2902*7688df22SAndroid Build Coastguard Worker  *
2903*7688df22SAndroid Build Coastguard Worker  * The behaviour is determined by the @query_id. Note that exactly what
2904*7688df22SAndroid Build Coastguard Worker  * @data_ptr is also depends on the specific @query_id.
2905*7688df22SAndroid Build Coastguard Worker  */
2906*7688df22SAndroid Build Coastguard Worker struct drm_i915_query_item {
2907*7688df22SAndroid Build Coastguard Worker 	/**
2908*7688df22SAndroid Build Coastguard Worker 	 * @query_id:
2909*7688df22SAndroid Build Coastguard Worker 	 *
2910*7688df22SAndroid Build Coastguard Worker 	 * The id for this query.  Currently accepted query IDs are:
2911*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_TOPOLOGY_INFO (see struct drm_i915_query_topology_info)
2912*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_ENGINE_INFO (see struct drm_i915_engine_info)
2913*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_PERF_CONFIG (see struct drm_i915_query_perf_config)
2914*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_MEMORY_REGIONS (see struct drm_i915_query_memory_regions)
2915*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_HWCONFIG_BLOB (see `GuC HWCONFIG blob uAPI`)
2916*7688df22SAndroid Build Coastguard Worker 	 *  - %DRM_I915_QUERY_GEOMETRY_SUBSLICES (see struct drm_i915_query_topology_info)
2917*7688df22SAndroid Build Coastguard Worker 	 */
2918*7688df22SAndroid Build Coastguard Worker 	__u64 query_id;
2919*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_TOPOLOGY_INFO		1
2920*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_ENGINE_INFO		2
2921*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_PERF_CONFIG		3
2922*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_MEMORY_REGIONS		4
2923*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_HWCONFIG_BLOB		5
2924*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_GEOMETRY_SUBSLICES	6
2925*7688df22SAndroid Build Coastguard Worker /* Must be kept compact -- no holes and well documented */
2926*7688df22SAndroid Build Coastguard Worker 
2927*7688df22SAndroid Build Coastguard Worker 	/**
2928*7688df22SAndroid Build Coastguard Worker 	 * @length:
2929*7688df22SAndroid Build Coastguard Worker 	 *
2930*7688df22SAndroid Build Coastguard Worker 	 * When set to zero by userspace, this is filled with the size of the
2931*7688df22SAndroid Build Coastguard Worker 	 * data to be written at the @data_ptr pointer. The kernel sets this
2932*7688df22SAndroid Build Coastguard Worker 	 * value to a negative value to signal an error on a particular query
2933*7688df22SAndroid Build Coastguard Worker 	 * item.
2934*7688df22SAndroid Build Coastguard Worker 	 */
2935*7688df22SAndroid Build Coastguard Worker 	__s32 length;
2936*7688df22SAndroid Build Coastguard Worker 
2937*7688df22SAndroid Build Coastguard Worker 	/**
2938*7688df22SAndroid Build Coastguard Worker 	 * @flags:
2939*7688df22SAndroid Build Coastguard Worker 	 *
2940*7688df22SAndroid Build Coastguard Worker 	 * When &query_id == %DRM_I915_QUERY_TOPOLOGY_INFO, must be 0.
2941*7688df22SAndroid Build Coastguard Worker 	 *
2942*7688df22SAndroid Build Coastguard Worker 	 * When &query_id == %DRM_I915_QUERY_PERF_CONFIG, must be one of the
2943*7688df22SAndroid Build Coastguard Worker 	 * following:
2944*7688df22SAndroid Build Coastguard Worker 	 *
2945*7688df22SAndroid Build Coastguard Worker 	 *	- %DRM_I915_QUERY_PERF_CONFIG_LIST
2946*7688df22SAndroid Build Coastguard Worker 	 *      - %DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID
2947*7688df22SAndroid Build Coastguard Worker 	 *      - %DRM_I915_QUERY_PERF_CONFIG_FOR_UUID
2948*7688df22SAndroid Build Coastguard Worker 	 *
2949*7688df22SAndroid Build Coastguard Worker 	 * When &query_id == %DRM_I915_QUERY_GEOMETRY_SUBSLICES must contain
2950*7688df22SAndroid Build Coastguard Worker 	 * a struct i915_engine_class_instance that references a render engine.
2951*7688df22SAndroid Build Coastguard Worker 	 */
2952*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2953*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_PERF_CONFIG_LIST          1
2954*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID 2
2955*7688df22SAndroid Build Coastguard Worker #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID   3
2956*7688df22SAndroid Build Coastguard Worker 
2957*7688df22SAndroid Build Coastguard Worker 	/**
2958*7688df22SAndroid Build Coastguard Worker 	 * @data_ptr:
2959*7688df22SAndroid Build Coastguard Worker 	 *
2960*7688df22SAndroid Build Coastguard Worker 	 * Data will be written at the location pointed by @data_ptr when the
2961*7688df22SAndroid Build Coastguard Worker 	 * value of @length matches the length of the data to be written by the
2962*7688df22SAndroid Build Coastguard Worker 	 * kernel.
2963*7688df22SAndroid Build Coastguard Worker 	 */
2964*7688df22SAndroid Build Coastguard Worker 	__u64 data_ptr;
2965*7688df22SAndroid Build Coastguard Worker };
2966*7688df22SAndroid Build Coastguard Worker 
2967*7688df22SAndroid Build Coastguard Worker /**
2968*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query - Supply an array of struct drm_i915_query_item for the
2969*7688df22SAndroid Build Coastguard Worker  * kernel to fill out.
2970*7688df22SAndroid Build Coastguard Worker  *
2971*7688df22SAndroid Build Coastguard Worker  * Note that this is generally a two step process for each struct
2972*7688df22SAndroid Build Coastguard Worker  * drm_i915_query_item in the array:
2973*7688df22SAndroid Build Coastguard Worker  *
2974*7688df22SAndroid Build Coastguard Worker  * 1. Call the DRM_IOCTL_I915_QUERY, giving it our array of struct
2975*7688df22SAndroid Build Coastguard Worker  *    drm_i915_query_item, with &drm_i915_query_item.length set to zero. The
2976*7688df22SAndroid Build Coastguard Worker  *    kernel will then fill in the size, in bytes, which tells userspace how
2977*7688df22SAndroid Build Coastguard Worker  *    memory it needs to allocate for the blob(say for an array of properties).
2978*7688df22SAndroid Build Coastguard Worker  *
2979*7688df22SAndroid Build Coastguard Worker  * 2. Next we call DRM_IOCTL_I915_QUERY again, this time with the
2980*7688df22SAndroid Build Coastguard Worker  *    &drm_i915_query_item.data_ptr equal to our newly allocated blob. Note that
2981*7688df22SAndroid Build Coastguard Worker  *    the &drm_i915_query_item.length should still be the same as what the
2982*7688df22SAndroid Build Coastguard Worker  *    kernel previously set. At this point the kernel can fill in the blob.
2983*7688df22SAndroid Build Coastguard Worker  *
2984*7688df22SAndroid Build Coastguard Worker  * Note that for some query items it can make sense for userspace to just pass
2985*7688df22SAndroid Build Coastguard Worker  * in a buffer/blob equal to or larger than the required size. In this case only
2986*7688df22SAndroid Build Coastguard Worker  * a single ioctl call is needed. For some smaller query items this can work
2987*7688df22SAndroid Build Coastguard Worker  * quite well.
2988*7688df22SAndroid Build Coastguard Worker  *
2989*7688df22SAndroid Build Coastguard Worker  */
2990*7688df22SAndroid Build Coastguard Worker struct drm_i915_query {
2991*7688df22SAndroid Build Coastguard Worker 	/** @num_items: The number of elements in the @items_ptr array */
2992*7688df22SAndroid Build Coastguard Worker 	__u32 num_items;
2993*7688df22SAndroid Build Coastguard Worker 
2994*7688df22SAndroid Build Coastguard Worker 	/**
2995*7688df22SAndroid Build Coastguard Worker 	 * @flags: Unused for now. Must be cleared to zero.
2996*7688df22SAndroid Build Coastguard Worker 	 */
2997*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
2998*7688df22SAndroid Build Coastguard Worker 
2999*7688df22SAndroid Build Coastguard Worker 	/**
3000*7688df22SAndroid Build Coastguard Worker 	 * @items_ptr:
3001*7688df22SAndroid Build Coastguard Worker 	 *
3002*7688df22SAndroid Build Coastguard Worker 	 * Pointer to an array of struct drm_i915_query_item. The number of
3003*7688df22SAndroid Build Coastguard Worker 	 * array elements is @num_items.
3004*7688df22SAndroid Build Coastguard Worker 	 */
3005*7688df22SAndroid Build Coastguard Worker 	__u64 items_ptr;
3006*7688df22SAndroid Build Coastguard Worker };
3007*7688df22SAndroid Build Coastguard Worker 
3008*7688df22SAndroid Build Coastguard Worker /**
3009*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query_topology_info
3010*7688df22SAndroid Build Coastguard Worker  *
3011*7688df22SAndroid Build Coastguard Worker  * Describes slice/subslice/EU information queried by
3012*7688df22SAndroid Build Coastguard Worker  * %DRM_I915_QUERY_TOPOLOGY_INFO
3013*7688df22SAndroid Build Coastguard Worker  */
3014*7688df22SAndroid Build Coastguard Worker struct drm_i915_query_topology_info {
3015*7688df22SAndroid Build Coastguard Worker 	/**
3016*7688df22SAndroid Build Coastguard Worker 	 * @flags:
3017*7688df22SAndroid Build Coastguard Worker 	 *
3018*7688df22SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
3019*7688df22SAndroid Build Coastguard Worker 	 */
3020*7688df22SAndroid Build Coastguard Worker 	__u16 flags;
3021*7688df22SAndroid Build Coastguard Worker 
3022*7688df22SAndroid Build Coastguard Worker 	/**
3023*7688df22SAndroid Build Coastguard Worker 	 * @max_slices:
3024*7688df22SAndroid Build Coastguard Worker 	 *
3025*7688df22SAndroid Build Coastguard Worker 	 * The number of bits used to express the slice mask.
3026*7688df22SAndroid Build Coastguard Worker 	 */
3027*7688df22SAndroid Build Coastguard Worker 	__u16 max_slices;
3028*7688df22SAndroid Build Coastguard Worker 
3029*7688df22SAndroid Build Coastguard Worker 	/**
3030*7688df22SAndroid Build Coastguard Worker 	 * @max_subslices:
3031*7688df22SAndroid Build Coastguard Worker 	 *
3032*7688df22SAndroid Build Coastguard Worker 	 * The number of bits used to express the subslice mask.
3033*7688df22SAndroid Build Coastguard Worker 	 */
3034*7688df22SAndroid Build Coastguard Worker 	__u16 max_subslices;
3035*7688df22SAndroid Build Coastguard Worker 
3036*7688df22SAndroid Build Coastguard Worker 	/**
3037*7688df22SAndroid Build Coastguard Worker 	 * @max_eus_per_subslice:
3038*7688df22SAndroid Build Coastguard Worker 	 *
3039*7688df22SAndroid Build Coastguard Worker 	 * The number of bits in the EU mask that correspond to a single
3040*7688df22SAndroid Build Coastguard Worker 	 * subslice's EUs.
3041*7688df22SAndroid Build Coastguard Worker 	 */
3042*7688df22SAndroid Build Coastguard Worker 	__u16 max_eus_per_subslice;
3043*7688df22SAndroid Build Coastguard Worker 
3044*7688df22SAndroid Build Coastguard Worker 	/**
3045*7688df22SAndroid Build Coastguard Worker 	 * @subslice_offset:
3046*7688df22SAndroid Build Coastguard Worker 	 *
3047*7688df22SAndroid Build Coastguard Worker 	 * Offset in data[] at which the subslice masks are stored.
3048*7688df22SAndroid Build Coastguard Worker 	 */
3049*7688df22SAndroid Build Coastguard Worker 	__u16 subslice_offset;
3050*7688df22SAndroid Build Coastguard Worker 
3051*7688df22SAndroid Build Coastguard Worker 	/**
3052*7688df22SAndroid Build Coastguard Worker 	 * @subslice_stride:
3053*7688df22SAndroid Build Coastguard Worker 	 *
3054*7688df22SAndroid Build Coastguard Worker 	 * Stride at which each of the subslice masks for each slice are
3055*7688df22SAndroid Build Coastguard Worker 	 * stored.
3056*7688df22SAndroid Build Coastguard Worker 	 */
3057*7688df22SAndroid Build Coastguard Worker 	__u16 subslice_stride;
3058*7688df22SAndroid Build Coastguard Worker 
3059*7688df22SAndroid Build Coastguard Worker 	/**
3060*7688df22SAndroid Build Coastguard Worker 	 * @eu_offset:
3061*7688df22SAndroid Build Coastguard Worker 	 *
3062*7688df22SAndroid Build Coastguard Worker 	 * Offset in data[] at which the EU masks are stored.
3063*7688df22SAndroid Build Coastguard Worker 	 */
3064*7688df22SAndroid Build Coastguard Worker 	__u16 eu_offset;
3065*7688df22SAndroid Build Coastguard Worker 
3066*7688df22SAndroid Build Coastguard Worker 	/**
3067*7688df22SAndroid Build Coastguard Worker 	 * @eu_stride:
3068*7688df22SAndroid Build Coastguard Worker 	 *
3069*7688df22SAndroid Build Coastguard Worker 	 * Stride at which each of the EU masks for each subslice are stored.
3070*7688df22SAndroid Build Coastguard Worker 	 */
3071*7688df22SAndroid Build Coastguard Worker 	__u16 eu_stride;
3072*7688df22SAndroid Build Coastguard Worker 
3073*7688df22SAndroid Build Coastguard Worker 	/**
3074*7688df22SAndroid Build Coastguard Worker 	 * @data:
3075*7688df22SAndroid Build Coastguard Worker 	 *
3076*7688df22SAndroid Build Coastguard Worker 	 * Contains 3 pieces of information :
3077*7688df22SAndroid Build Coastguard Worker 	 *
3078*7688df22SAndroid Build Coastguard Worker 	 * - The slice mask with one bit per slice telling whether a slice is
3079*7688df22SAndroid Build Coastguard Worker 	 *   available. The availability of slice X can be queried with the
3080*7688df22SAndroid Build Coastguard Worker 	 *   following formula :
3081*7688df22SAndroid Build Coastguard Worker 	 *
3082*7688df22SAndroid Build Coastguard Worker 	 *   .. code:: c
3083*7688df22SAndroid Build Coastguard Worker 	 *
3084*7688df22SAndroid Build Coastguard Worker 	 *      (data[X / 8] >> (X % 8)) & 1
3085*7688df22SAndroid Build Coastguard Worker 	 *
3086*7688df22SAndroid Build Coastguard Worker 	 *   Starting with Xe_HP platforms, Intel hardware no longer has
3087*7688df22SAndroid Build Coastguard Worker 	 *   traditional slices so i915 will always report a single slice
3088*7688df22SAndroid Build Coastguard Worker 	 *   (hardcoded slicemask = 0x1) which contains all of the platform's
3089*7688df22SAndroid Build Coastguard Worker 	 *   subslices.  I.e., the mask here does not reflect any of the newer
3090*7688df22SAndroid Build Coastguard Worker 	 *   hardware concepts such as "gslices" or "cslices" since userspace
3091*7688df22SAndroid Build Coastguard Worker 	 *   is capable of inferring those from the subslice mask.
3092*7688df22SAndroid Build Coastguard Worker 	 *
3093*7688df22SAndroid Build Coastguard Worker 	 * - The subslice mask for each slice with one bit per subslice telling
3094*7688df22SAndroid Build Coastguard Worker 	 *   whether a subslice is available.  Starting with Gen12 we use the
3095*7688df22SAndroid Build Coastguard Worker 	 *   term "subslice" to refer to what the hardware documentation
3096*7688df22SAndroid Build Coastguard Worker 	 *   describes as a "dual-subslices."  The availability of subslice Y
3097*7688df22SAndroid Build Coastguard Worker 	 *   in slice X can be queried with the following formula :
3098*7688df22SAndroid Build Coastguard Worker 	 *
3099*7688df22SAndroid Build Coastguard Worker 	 *   .. code:: c
3100*7688df22SAndroid Build Coastguard Worker 	 *
3101*7688df22SAndroid Build Coastguard Worker 	 *      (data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1
3102*7688df22SAndroid Build Coastguard Worker 	 *
3103*7688df22SAndroid Build Coastguard Worker 	 * - The EU mask for each subslice in each slice, with one bit per EU
3104*7688df22SAndroid Build Coastguard Worker 	 *   telling whether an EU is available. The availability of EU Z in
3105*7688df22SAndroid Build Coastguard Worker 	 *   subslice Y in slice X can be queried with the following formula :
3106*7688df22SAndroid Build Coastguard Worker 	 *
3107*7688df22SAndroid Build Coastguard Worker 	 *   .. code:: c
3108*7688df22SAndroid Build Coastguard Worker 	 *
3109*7688df22SAndroid Build Coastguard Worker 	 *      (data[eu_offset +
3110*7688df22SAndroid Build Coastguard Worker 	 *            (X * max_subslices + Y) * eu_stride +
3111*7688df22SAndroid Build Coastguard Worker 	 *            Z / 8
3112*7688df22SAndroid Build Coastguard Worker 	 *       ] >> (Z % 8)) & 1
3113*7688df22SAndroid Build Coastguard Worker 	 */
3114*7688df22SAndroid Build Coastguard Worker 	__u8 data[];
3115*7688df22SAndroid Build Coastguard Worker };
3116*7688df22SAndroid Build Coastguard Worker 
3117*7688df22SAndroid Build Coastguard Worker /**
3118*7688df22SAndroid Build Coastguard Worker  * DOC: Engine Discovery uAPI
3119*7688df22SAndroid Build Coastguard Worker  *
3120*7688df22SAndroid Build Coastguard Worker  * Engine discovery uAPI is a way of enumerating physical engines present in a
3121*7688df22SAndroid Build Coastguard Worker  * GPU associated with an open i915 DRM file descriptor. This supersedes the old
3122*7688df22SAndroid Build Coastguard Worker  * way of using `DRM_IOCTL_I915_GETPARAM` and engine identifiers like
3123*7688df22SAndroid Build Coastguard Worker  * `I915_PARAM_HAS_BLT`.
3124*7688df22SAndroid Build Coastguard Worker  *
3125*7688df22SAndroid Build Coastguard Worker  * The need for this interface came starting with Icelake and newer GPUs, which
3126*7688df22SAndroid Build Coastguard Worker  * started to establish a pattern of having multiple engines of a same class,
3127*7688df22SAndroid Build Coastguard Worker  * where not all instances were always completely functionally equivalent.
3128*7688df22SAndroid Build Coastguard Worker  *
3129*7688df22SAndroid Build Coastguard Worker  * Entry point for this uapi is `DRM_IOCTL_I915_QUERY` with the
3130*7688df22SAndroid Build Coastguard Worker  * `DRM_I915_QUERY_ENGINE_INFO` as the queried item id.
3131*7688df22SAndroid Build Coastguard Worker  *
3132*7688df22SAndroid Build Coastguard Worker  * Example for getting the list of engines:
3133*7688df22SAndroid Build Coastguard Worker  *
3134*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
3135*7688df22SAndroid Build Coastguard Worker  *
3136*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_query_engine_info *info;
3137*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_query_item item = {
3138*7688df22SAndroid Build Coastguard Worker  * 		.query_id = DRM_I915_QUERY_ENGINE_INFO;
3139*7688df22SAndroid Build Coastguard Worker  * 	};
3140*7688df22SAndroid Build Coastguard Worker  * 	struct drm_i915_query query = {
3141*7688df22SAndroid Build Coastguard Worker  * 		.num_items = 1,
3142*7688df22SAndroid Build Coastguard Worker  * 		.items_ptr = (uintptr_t)&item,
3143*7688df22SAndroid Build Coastguard Worker  * 	};
3144*7688df22SAndroid Build Coastguard Worker  * 	int err, i;
3145*7688df22SAndroid Build Coastguard Worker  *
3146*7688df22SAndroid Build Coastguard Worker  * 	// First query the size of the blob we need, this needs to be large
3147*7688df22SAndroid Build Coastguard Worker  * 	// enough to hold our array of engines. The kernel will fill out the
3148*7688df22SAndroid Build Coastguard Worker  * 	// item.length for us, which is the number of bytes we need.
3149*7688df22SAndroid Build Coastguard Worker  * 	//
3150*7688df22SAndroid Build Coastguard Worker  * 	// Alternatively a large buffer can be allocated straight away enabling
3151*7688df22SAndroid Build Coastguard Worker  * 	// querying in one pass, in which case item.length should contain the
3152*7688df22SAndroid Build Coastguard Worker  * 	// length of the provided buffer.
3153*7688df22SAndroid Build Coastguard Worker  * 	err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
3154*7688df22SAndroid Build Coastguard Worker  * 	if (err) ...
3155*7688df22SAndroid Build Coastguard Worker  *
3156*7688df22SAndroid Build Coastguard Worker  * 	info = calloc(1, item.length);
3157*7688df22SAndroid Build Coastguard Worker  * 	// Now that we allocated the required number of bytes, we call the ioctl
3158*7688df22SAndroid Build Coastguard Worker  * 	// again, this time with the data_ptr pointing to our newly allocated
3159*7688df22SAndroid Build Coastguard Worker  * 	// blob, which the kernel can then populate with info on all engines.
3160*7688df22SAndroid Build Coastguard Worker  * 	item.data_ptr = (uintptr_t)&info,
3161*7688df22SAndroid Build Coastguard Worker  *
3162*7688df22SAndroid Build Coastguard Worker  * 	err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
3163*7688df22SAndroid Build Coastguard Worker  * 	if (err) ...
3164*7688df22SAndroid Build Coastguard Worker  *
3165*7688df22SAndroid Build Coastguard Worker  * 	// We can now access each engine in the array
3166*7688df22SAndroid Build Coastguard Worker  * 	for (i = 0; i < info->num_engines; i++) {
3167*7688df22SAndroid Build Coastguard Worker  * 		struct drm_i915_engine_info einfo = info->engines[i];
3168*7688df22SAndroid Build Coastguard Worker  * 		u16 class = einfo.engine.class;
3169*7688df22SAndroid Build Coastguard Worker  * 		u16 instance = einfo.engine.instance;
3170*7688df22SAndroid Build Coastguard Worker  * 		....
3171*7688df22SAndroid Build Coastguard Worker  * 	}
3172*7688df22SAndroid Build Coastguard Worker  *
3173*7688df22SAndroid Build Coastguard Worker  * 	free(info);
3174*7688df22SAndroid Build Coastguard Worker  *
3175*7688df22SAndroid Build Coastguard Worker  * Each of the enumerated engines, apart from being defined by its class and
3176*7688df22SAndroid Build Coastguard Worker  * instance (see `struct i915_engine_class_instance`), also can have flags and
3177*7688df22SAndroid Build Coastguard Worker  * capabilities defined as documented in i915_drm.h.
3178*7688df22SAndroid Build Coastguard Worker  *
3179*7688df22SAndroid Build Coastguard Worker  * For instance video engines which support HEVC encoding will have the
3180*7688df22SAndroid Build Coastguard Worker  * `I915_VIDEO_CLASS_CAPABILITY_HEVC` capability bit set.
3181*7688df22SAndroid Build Coastguard Worker  *
3182*7688df22SAndroid Build Coastguard Worker  * Engine discovery only fully comes to its own when combined with the new way
3183*7688df22SAndroid Build Coastguard Worker  * of addressing engines when submitting batch buffers using contexts with
3184*7688df22SAndroid Build Coastguard Worker  * engine maps configured.
3185*7688df22SAndroid Build Coastguard Worker  */
3186*7688df22SAndroid Build Coastguard Worker 
3187*7688df22SAndroid Build Coastguard Worker /**
3188*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_engine_info
3189*7688df22SAndroid Build Coastguard Worker  *
3190*7688df22SAndroid Build Coastguard Worker  * Describes one engine and it's capabilities as known to the driver.
3191*7688df22SAndroid Build Coastguard Worker  */
3192*7688df22SAndroid Build Coastguard Worker struct drm_i915_engine_info {
3193*7688df22SAndroid Build Coastguard Worker 	/** @engine: Engine class and instance. */
3194*7688df22SAndroid Build Coastguard Worker 	struct i915_engine_class_instance engine;
3195*7688df22SAndroid Build Coastguard Worker 
3196*7688df22SAndroid Build Coastguard Worker 	/** @rsvd0: Reserved field. */
3197*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd0;
3198*7688df22SAndroid Build Coastguard Worker 
3199*7688df22SAndroid Build Coastguard Worker 	/** @flags: Engine flags. */
3200*7688df22SAndroid Build Coastguard Worker 	__u64 flags;
3201*7688df22SAndroid Build Coastguard Worker #define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE		(1 << 0)
3202*7688df22SAndroid Build Coastguard Worker 
3203*7688df22SAndroid Build Coastguard Worker 	/** @capabilities: Capabilities of this engine. */
3204*7688df22SAndroid Build Coastguard Worker 	__u64 capabilities;
3205*7688df22SAndroid Build Coastguard Worker #define I915_VIDEO_CLASS_CAPABILITY_HEVC		(1 << 0)
3206*7688df22SAndroid Build Coastguard Worker #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC	(1 << 1)
3207*7688df22SAndroid Build Coastguard Worker 
3208*7688df22SAndroid Build Coastguard Worker 	/** @logical_instance: Logical instance of engine */
3209*7688df22SAndroid Build Coastguard Worker 	__u16 logical_instance;
3210*7688df22SAndroid Build Coastguard Worker 
3211*7688df22SAndroid Build Coastguard Worker 	/** @rsvd1: Reserved fields. */
3212*7688df22SAndroid Build Coastguard Worker 	__u16 rsvd1[3];
3213*7688df22SAndroid Build Coastguard Worker 	/** @rsvd2: Reserved fields. */
3214*7688df22SAndroid Build Coastguard Worker 	__u64 rsvd2[3];
3215*7688df22SAndroid Build Coastguard Worker };
3216*7688df22SAndroid Build Coastguard Worker 
3217*7688df22SAndroid Build Coastguard Worker /**
3218*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query_engine_info
3219*7688df22SAndroid Build Coastguard Worker  *
3220*7688df22SAndroid Build Coastguard Worker  * Engine info query enumerates all engines known to the driver by filling in
3221*7688df22SAndroid Build Coastguard Worker  * an array of struct drm_i915_engine_info structures.
3222*7688df22SAndroid Build Coastguard Worker  */
3223*7688df22SAndroid Build Coastguard Worker struct drm_i915_query_engine_info {
3224*7688df22SAndroid Build Coastguard Worker 	/** @num_engines: Number of struct drm_i915_engine_info structs following. */
3225*7688df22SAndroid Build Coastguard Worker 	__u32 num_engines;
3226*7688df22SAndroid Build Coastguard Worker 
3227*7688df22SAndroid Build Coastguard Worker 	/** @rsvd: MBZ */
3228*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd[3];
3229*7688df22SAndroid Build Coastguard Worker 
3230*7688df22SAndroid Build Coastguard Worker 	/** @engines: Marker for drm_i915_engine_info structures. */
3231*7688df22SAndroid Build Coastguard Worker 	struct drm_i915_engine_info engines[];
3232*7688df22SAndroid Build Coastguard Worker };
3233*7688df22SAndroid Build Coastguard Worker 
3234*7688df22SAndroid Build Coastguard Worker /**
3235*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query_perf_config
3236*7688df22SAndroid Build Coastguard Worker  *
3237*7688df22SAndroid Build Coastguard Worker  * Data written by the kernel with query %DRM_I915_QUERY_PERF_CONFIG and
3238*7688df22SAndroid Build Coastguard Worker  * %DRM_I915_QUERY_GEOMETRY_SUBSLICES.
3239*7688df22SAndroid Build Coastguard Worker  */
3240*7688df22SAndroid Build Coastguard Worker struct drm_i915_query_perf_config {
3241*7688df22SAndroid Build Coastguard Worker 	union {
3242*7688df22SAndroid Build Coastguard Worker 		/**
3243*7688df22SAndroid Build Coastguard Worker 		 * @n_configs:
3244*7688df22SAndroid Build Coastguard Worker 		 *
3245*7688df22SAndroid Build Coastguard Worker 		 * When &drm_i915_query_item.flags ==
3246*7688df22SAndroid Build Coastguard Worker 		 * %DRM_I915_QUERY_PERF_CONFIG_LIST, i915 sets this fields to
3247*7688df22SAndroid Build Coastguard Worker 		 * the number of configurations available.
3248*7688df22SAndroid Build Coastguard Worker 		 */
3249*7688df22SAndroid Build Coastguard Worker 		__u64 n_configs;
3250*7688df22SAndroid Build Coastguard Worker 
3251*7688df22SAndroid Build Coastguard Worker 		/**
3252*7688df22SAndroid Build Coastguard Worker 		 * @config:
3253*7688df22SAndroid Build Coastguard Worker 		 *
3254*7688df22SAndroid Build Coastguard Worker 		 * When &drm_i915_query_item.flags ==
3255*7688df22SAndroid Build Coastguard Worker 		 * %DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID, i915 will use the
3256*7688df22SAndroid Build Coastguard Worker 		 * value in this field as configuration identifier to decide
3257*7688df22SAndroid Build Coastguard Worker 		 * what data to write into config_ptr.
3258*7688df22SAndroid Build Coastguard Worker 		 */
3259*7688df22SAndroid Build Coastguard Worker 		__u64 config;
3260*7688df22SAndroid Build Coastguard Worker 
3261*7688df22SAndroid Build Coastguard Worker 		/**
3262*7688df22SAndroid Build Coastguard Worker 		 * @uuid:
3263*7688df22SAndroid Build Coastguard Worker 		 *
3264*7688df22SAndroid Build Coastguard Worker 		 * When &drm_i915_query_item.flags ==
3265*7688df22SAndroid Build Coastguard Worker 		 * %DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID, i915 will use the
3266*7688df22SAndroid Build Coastguard Worker 		 * value in this field as configuration identifier to decide
3267*7688df22SAndroid Build Coastguard Worker 		 * what data to write into config_ptr.
3268*7688df22SAndroid Build Coastguard Worker 		 *
3269*7688df22SAndroid Build Coastguard Worker 		 * String formatted like "%08x-%04x-%04x-%04x-%012x"
3270*7688df22SAndroid Build Coastguard Worker 		 */
3271*7688df22SAndroid Build Coastguard Worker 		char uuid[36];
3272*7688df22SAndroid Build Coastguard Worker 	};
3273*7688df22SAndroid Build Coastguard Worker 
3274*7688df22SAndroid Build Coastguard Worker 	/**
3275*7688df22SAndroid Build Coastguard Worker 	 * @flags:
3276*7688df22SAndroid Build Coastguard Worker 	 *
3277*7688df22SAndroid Build Coastguard Worker 	 * Unused for now. Must be cleared to zero.
3278*7688df22SAndroid Build Coastguard Worker 	 */
3279*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
3280*7688df22SAndroid Build Coastguard Worker 
3281*7688df22SAndroid Build Coastguard Worker 	/**
3282*7688df22SAndroid Build Coastguard Worker 	 * @data:
3283*7688df22SAndroid Build Coastguard Worker 	 *
3284*7688df22SAndroid Build Coastguard Worker 	 * When &drm_i915_query_item.flags == %DRM_I915_QUERY_PERF_CONFIG_LIST,
3285*7688df22SAndroid Build Coastguard Worker 	 * i915 will write an array of __u64 of configuration identifiers.
3286*7688df22SAndroid Build Coastguard Worker 	 *
3287*7688df22SAndroid Build Coastguard Worker 	 * When &drm_i915_query_item.flags == %DRM_I915_QUERY_PERF_CONFIG_DATA,
3288*7688df22SAndroid Build Coastguard Worker 	 * i915 will write a struct drm_i915_perf_oa_config. If the following
3289*7688df22SAndroid Build Coastguard Worker 	 * fields of struct drm_i915_perf_oa_config are not set to 0, i915 will
3290*7688df22SAndroid Build Coastguard Worker 	 * write into the associated pointers the values of submitted when the
3291*7688df22SAndroid Build Coastguard Worker 	 * configuration was created :
3292*7688df22SAndroid Build Coastguard Worker 	 *
3293*7688df22SAndroid Build Coastguard Worker 	 *  - &drm_i915_perf_oa_config.n_mux_regs
3294*7688df22SAndroid Build Coastguard Worker 	 *  - &drm_i915_perf_oa_config.n_boolean_regs
3295*7688df22SAndroid Build Coastguard Worker 	 *  - &drm_i915_perf_oa_config.n_flex_regs
3296*7688df22SAndroid Build Coastguard Worker 	 */
3297*7688df22SAndroid Build Coastguard Worker 	__u8 data[];
3298*7688df22SAndroid Build Coastguard Worker };
3299*7688df22SAndroid Build Coastguard Worker 
3300*7688df22SAndroid Build Coastguard Worker /**
3301*7688df22SAndroid Build Coastguard Worker  * enum drm_i915_gem_memory_class - Supported memory classes
3302*7688df22SAndroid Build Coastguard Worker  */
3303*7688df22SAndroid Build Coastguard Worker enum drm_i915_gem_memory_class {
3304*7688df22SAndroid Build Coastguard Worker 	/** @I915_MEMORY_CLASS_SYSTEM: System memory */
3305*7688df22SAndroid Build Coastguard Worker 	I915_MEMORY_CLASS_SYSTEM = 0,
3306*7688df22SAndroid Build Coastguard Worker 	/** @I915_MEMORY_CLASS_DEVICE: Device local-memory */
3307*7688df22SAndroid Build Coastguard Worker 	I915_MEMORY_CLASS_DEVICE,
3308*7688df22SAndroid Build Coastguard Worker };
3309*7688df22SAndroid Build Coastguard Worker 
3310*7688df22SAndroid Build Coastguard Worker /**
3311*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_memory_class_instance - Identify particular memory region
3312*7688df22SAndroid Build Coastguard Worker  */
3313*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_memory_class_instance {
3314*7688df22SAndroid Build Coastguard Worker 	/** @memory_class: See enum drm_i915_gem_memory_class */
3315*7688df22SAndroid Build Coastguard Worker 	__u16 memory_class;
3316*7688df22SAndroid Build Coastguard Worker 
3317*7688df22SAndroid Build Coastguard Worker 	/** @memory_instance: Which instance */
3318*7688df22SAndroid Build Coastguard Worker 	__u16 memory_instance;
3319*7688df22SAndroid Build Coastguard Worker };
3320*7688df22SAndroid Build Coastguard Worker 
3321*7688df22SAndroid Build Coastguard Worker /**
3322*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_memory_region_info - Describes one region as known to the
3323*7688df22SAndroid Build Coastguard Worker  * driver.
3324*7688df22SAndroid Build Coastguard Worker  *
3325*7688df22SAndroid Build Coastguard Worker  * Note this is using both struct drm_i915_query_item and struct drm_i915_query.
3326*7688df22SAndroid Build Coastguard Worker  * For this new query we are adding the new query id DRM_I915_QUERY_MEMORY_REGIONS
3327*7688df22SAndroid Build Coastguard Worker  * at &drm_i915_query_item.query_id.
3328*7688df22SAndroid Build Coastguard Worker  */
3329*7688df22SAndroid Build Coastguard Worker struct drm_i915_memory_region_info {
3330*7688df22SAndroid Build Coastguard Worker 	/** @region: The class:instance pair encoding */
3331*7688df22SAndroid Build Coastguard Worker 	struct drm_i915_gem_memory_class_instance region;
3332*7688df22SAndroid Build Coastguard Worker 
3333*7688df22SAndroid Build Coastguard Worker 	/** @rsvd0: MBZ */
3334*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd0;
3335*7688df22SAndroid Build Coastguard Worker 
3336*7688df22SAndroid Build Coastguard Worker 	/**
3337*7688df22SAndroid Build Coastguard Worker 	 * @probed_size: Memory probed by the driver
3338*7688df22SAndroid Build Coastguard Worker 	 *
3339*7688df22SAndroid Build Coastguard Worker 	 * Note that it should not be possible to ever encounter a zero value
3340*7688df22SAndroid Build Coastguard Worker 	 * here, also note that no current region type will ever return -1 here.
3341*7688df22SAndroid Build Coastguard Worker 	 * Although for future region types, this might be a possibility. The
3342*7688df22SAndroid Build Coastguard Worker 	 * same applies to the other size fields.
3343*7688df22SAndroid Build Coastguard Worker 	 */
3344*7688df22SAndroid Build Coastguard Worker 	__u64 probed_size;
3345*7688df22SAndroid Build Coastguard Worker 
3346*7688df22SAndroid Build Coastguard Worker 	/**
3347*7688df22SAndroid Build Coastguard Worker 	 * @unallocated_size: Estimate of memory remaining
3348*7688df22SAndroid Build Coastguard Worker 	 *
3349*7688df22SAndroid Build Coastguard Worker 	 * Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting.
3350*7688df22SAndroid Build Coastguard Worker 	 * Without this (or if this is an older kernel) the value here will
3351*7688df22SAndroid Build Coastguard Worker 	 * always equal the @probed_size. Note this is only currently tracked
3352*7688df22SAndroid Build Coastguard Worker 	 * for I915_MEMORY_CLASS_DEVICE regions (for other types the value here
3353*7688df22SAndroid Build Coastguard Worker 	 * will always equal the @probed_size).
3354*7688df22SAndroid Build Coastguard Worker 	 */
3355*7688df22SAndroid Build Coastguard Worker 	__u64 unallocated_size;
3356*7688df22SAndroid Build Coastguard Worker 
3357*7688df22SAndroid Build Coastguard Worker 	union {
3358*7688df22SAndroid Build Coastguard Worker 		/** @rsvd1: MBZ */
3359*7688df22SAndroid Build Coastguard Worker 		__u64 rsvd1[8];
3360*7688df22SAndroid Build Coastguard Worker 		struct {
3361*7688df22SAndroid Build Coastguard Worker 			/**
3362*7688df22SAndroid Build Coastguard Worker 			 * @probed_cpu_visible_size: Memory probed by the driver
3363*7688df22SAndroid Build Coastguard Worker 			 * that is CPU accessible.
3364*7688df22SAndroid Build Coastguard Worker 			 *
3365*7688df22SAndroid Build Coastguard Worker 			 * This will be always be <= @probed_size, and the
3366*7688df22SAndroid Build Coastguard Worker 			 * remainder (if there is any) will not be CPU
3367*7688df22SAndroid Build Coastguard Worker 			 * accessible.
3368*7688df22SAndroid Build Coastguard Worker 			 *
3369*7688df22SAndroid Build Coastguard Worker 			 * On systems without small BAR, the @probed_size will
3370*7688df22SAndroid Build Coastguard Worker 			 * always equal the @probed_cpu_visible_size, since all
3371*7688df22SAndroid Build Coastguard Worker 			 * of it will be CPU accessible.
3372*7688df22SAndroid Build Coastguard Worker 			 *
3373*7688df22SAndroid Build Coastguard Worker 			 * Note this is only tracked for
3374*7688df22SAndroid Build Coastguard Worker 			 * I915_MEMORY_CLASS_DEVICE regions (for other types the
3375*7688df22SAndroid Build Coastguard Worker 			 * value here will always equal the @probed_size).
3376*7688df22SAndroid Build Coastguard Worker 			 *
3377*7688df22SAndroid Build Coastguard Worker 			 * Note that if the value returned here is zero, then
3378*7688df22SAndroid Build Coastguard Worker 			 * this must be an old kernel which lacks the relevant
3379*7688df22SAndroid Build Coastguard Worker 			 * small-bar uAPI support (including
3380*7688df22SAndroid Build Coastguard Worker 			 * I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS), but on
3381*7688df22SAndroid Build Coastguard Worker 			 * such systems we should never actually end up with a
3382*7688df22SAndroid Build Coastguard Worker 			 * small BAR configuration, assuming we are able to load
3383*7688df22SAndroid Build Coastguard Worker 			 * the kernel module. Hence it should be safe to treat
3384*7688df22SAndroid Build Coastguard Worker 			 * this the same as when @probed_cpu_visible_size ==
3385*7688df22SAndroid Build Coastguard Worker 			 * @probed_size.
3386*7688df22SAndroid Build Coastguard Worker 			 */
3387*7688df22SAndroid Build Coastguard Worker 			__u64 probed_cpu_visible_size;
3388*7688df22SAndroid Build Coastguard Worker 
3389*7688df22SAndroid Build Coastguard Worker 			/**
3390*7688df22SAndroid Build Coastguard Worker 			 * @unallocated_cpu_visible_size: Estimate of CPU
3391*7688df22SAndroid Build Coastguard Worker 			 * visible memory remaining.
3392*7688df22SAndroid Build Coastguard Worker 			 *
3393*7688df22SAndroid Build Coastguard Worker 			 * Note this is only tracked for
3394*7688df22SAndroid Build Coastguard Worker 			 * I915_MEMORY_CLASS_DEVICE regions (for other types the
3395*7688df22SAndroid Build Coastguard Worker 			 * value here will always equal the
3396*7688df22SAndroid Build Coastguard Worker 			 * @probed_cpu_visible_size).
3397*7688df22SAndroid Build Coastguard Worker 			 *
3398*7688df22SAndroid Build Coastguard Worker 			 * Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable
3399*7688df22SAndroid Build Coastguard Worker 			 * accounting.  Without this the value here will always
3400*7688df22SAndroid Build Coastguard Worker 			 * equal the @probed_cpu_visible_size. Note this is only
3401*7688df22SAndroid Build Coastguard Worker 			 * currently tracked for I915_MEMORY_CLASS_DEVICE
3402*7688df22SAndroid Build Coastguard Worker 			 * regions (for other types the value here will also
3403*7688df22SAndroid Build Coastguard Worker 			 * always equal the @probed_cpu_visible_size).
3404*7688df22SAndroid Build Coastguard Worker 			 *
3405*7688df22SAndroid Build Coastguard Worker 			 * If this is an older kernel the value here will be
3406*7688df22SAndroid Build Coastguard Worker 			 * zero, see also @probed_cpu_visible_size.
3407*7688df22SAndroid Build Coastguard Worker 			 */
3408*7688df22SAndroid Build Coastguard Worker 			__u64 unallocated_cpu_visible_size;
3409*7688df22SAndroid Build Coastguard Worker 		};
3410*7688df22SAndroid Build Coastguard Worker 	};
3411*7688df22SAndroid Build Coastguard Worker };
3412*7688df22SAndroid Build Coastguard Worker 
3413*7688df22SAndroid Build Coastguard Worker /**
3414*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_query_memory_regions
3415*7688df22SAndroid Build Coastguard Worker  *
3416*7688df22SAndroid Build Coastguard Worker  * The region info query enumerates all regions known to the driver by filling
3417*7688df22SAndroid Build Coastguard Worker  * in an array of struct drm_i915_memory_region_info structures.
3418*7688df22SAndroid Build Coastguard Worker  *
3419*7688df22SAndroid Build Coastguard Worker  * Example for getting the list of supported regions:
3420*7688df22SAndroid Build Coastguard Worker  *
3421*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
3422*7688df22SAndroid Build Coastguard Worker  *
3423*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_query_memory_regions *info;
3424*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_query_item item = {
3425*7688df22SAndroid Build Coastguard Worker  *		.query_id = DRM_I915_QUERY_MEMORY_REGIONS;
3426*7688df22SAndroid Build Coastguard Worker  *	};
3427*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_query query = {
3428*7688df22SAndroid Build Coastguard Worker  *		.num_items = 1,
3429*7688df22SAndroid Build Coastguard Worker  *		.items_ptr = (uintptr_t)&item,
3430*7688df22SAndroid Build Coastguard Worker  *	};
3431*7688df22SAndroid Build Coastguard Worker  *	int err, i;
3432*7688df22SAndroid Build Coastguard Worker  *
3433*7688df22SAndroid Build Coastguard Worker  *	// First query the size of the blob we need, this needs to be large
3434*7688df22SAndroid Build Coastguard Worker  *	// enough to hold our array of regions. The kernel will fill out the
3435*7688df22SAndroid Build Coastguard Worker  *	// item.length for us, which is the number of bytes we need.
3436*7688df22SAndroid Build Coastguard Worker  *	err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
3437*7688df22SAndroid Build Coastguard Worker  *	if (err) ...
3438*7688df22SAndroid Build Coastguard Worker  *
3439*7688df22SAndroid Build Coastguard Worker  *	info = calloc(1, item.length);
3440*7688df22SAndroid Build Coastguard Worker  *	// Now that we allocated the required number of bytes, we call the ioctl
3441*7688df22SAndroid Build Coastguard Worker  *	// again, this time with the data_ptr pointing to our newly allocated
3442*7688df22SAndroid Build Coastguard Worker  *	// blob, which the kernel can then populate with the all the region info.
3443*7688df22SAndroid Build Coastguard Worker  *	item.data_ptr = (uintptr_t)&info,
3444*7688df22SAndroid Build Coastguard Worker  *
3445*7688df22SAndroid Build Coastguard Worker  *	err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
3446*7688df22SAndroid Build Coastguard Worker  *	if (err) ...
3447*7688df22SAndroid Build Coastguard Worker  *
3448*7688df22SAndroid Build Coastguard Worker  *	// We can now access each region in the array
3449*7688df22SAndroid Build Coastguard Worker  *	for (i = 0; i < info->num_regions; i++) {
3450*7688df22SAndroid Build Coastguard Worker  *		struct drm_i915_memory_region_info mr = info->regions[i];
3451*7688df22SAndroid Build Coastguard Worker  *		u16 class = mr.region.class;
3452*7688df22SAndroid Build Coastguard Worker  *		u16 instance = mr.region.instance;
3453*7688df22SAndroid Build Coastguard Worker  *
3454*7688df22SAndroid Build Coastguard Worker  *		....
3455*7688df22SAndroid Build Coastguard Worker  *	}
3456*7688df22SAndroid Build Coastguard Worker  *
3457*7688df22SAndroid Build Coastguard Worker  *	free(info);
3458*7688df22SAndroid Build Coastguard Worker  */
3459*7688df22SAndroid Build Coastguard Worker struct drm_i915_query_memory_regions {
3460*7688df22SAndroid Build Coastguard Worker 	/** @num_regions: Number of supported regions */
3461*7688df22SAndroid Build Coastguard Worker 	__u32 num_regions;
3462*7688df22SAndroid Build Coastguard Worker 
3463*7688df22SAndroid Build Coastguard Worker 	/** @rsvd: MBZ */
3464*7688df22SAndroid Build Coastguard Worker 	__u32 rsvd[3];
3465*7688df22SAndroid Build Coastguard Worker 
3466*7688df22SAndroid Build Coastguard Worker 	/** @regions: Info about each supported region */
3467*7688df22SAndroid Build Coastguard Worker 	struct drm_i915_memory_region_info regions[];
3468*7688df22SAndroid Build Coastguard Worker };
3469*7688df22SAndroid Build Coastguard Worker 
3470*7688df22SAndroid Build Coastguard Worker /**
3471*7688df22SAndroid Build Coastguard Worker  * DOC: GuC HWCONFIG blob uAPI
3472*7688df22SAndroid Build Coastguard Worker  *
3473*7688df22SAndroid Build Coastguard Worker  * The GuC produces a blob with information about the current device.
3474*7688df22SAndroid Build Coastguard Worker  * i915 reads this blob from GuC and makes it available via this uAPI.
3475*7688df22SAndroid Build Coastguard Worker  *
3476*7688df22SAndroid Build Coastguard Worker  * The format and meaning of the blob content are documented in the
3477*7688df22SAndroid Build Coastguard Worker  * Programmer's Reference Manual.
3478*7688df22SAndroid Build Coastguard Worker  */
3479*7688df22SAndroid Build Coastguard Worker 
3480*7688df22SAndroid Build Coastguard Worker /**
3481*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_create_ext - Existing gem_create behaviour, with added
3482*7688df22SAndroid Build Coastguard Worker  * extension support using struct i915_user_extension.
3483*7688df22SAndroid Build Coastguard Worker  *
3484*7688df22SAndroid Build Coastguard Worker  * Note that new buffer flags should be added here, at least for the stuff that
3485*7688df22SAndroid Build Coastguard Worker  * is immutable. Previously we would have two ioctls, one to create the object
3486*7688df22SAndroid Build Coastguard Worker  * with gem_create, and another to apply various parameters, however this
3487*7688df22SAndroid Build Coastguard Worker  * creates some ambiguity for the params which are considered immutable. Also in
3488*7688df22SAndroid Build Coastguard Worker  * general we're phasing out the various SET/GET ioctls.
3489*7688df22SAndroid Build Coastguard Worker  */
3490*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_create_ext {
3491*7688df22SAndroid Build Coastguard Worker 	/**
3492*7688df22SAndroid Build Coastguard Worker 	 * @size: Requested size for the object.
3493*7688df22SAndroid Build Coastguard Worker 	 *
3494*7688df22SAndroid Build Coastguard Worker 	 * The (page-aligned) allocated size for the object will be returned.
3495*7688df22SAndroid Build Coastguard Worker 	 *
3496*7688df22SAndroid Build Coastguard Worker 	 * DG2 64K min page size implications:
3497*7688df22SAndroid Build Coastguard Worker 	 *
3498*7688df22SAndroid Build Coastguard Worker 	 * On discrete platforms, starting from DG2, we have to contend with GTT
3499*7688df22SAndroid Build Coastguard Worker 	 * page size restrictions when dealing with I915_MEMORY_CLASS_DEVICE
3500*7688df22SAndroid Build Coastguard Worker 	 * objects.  Specifically the hardware only supports 64K or larger GTT
3501*7688df22SAndroid Build Coastguard Worker 	 * page sizes for such memory. The kernel will already ensure that all
3502*7688df22SAndroid Build Coastguard Worker 	 * I915_MEMORY_CLASS_DEVICE memory is allocated using 64K or larger page
3503*7688df22SAndroid Build Coastguard Worker 	 * sizes underneath.
3504*7688df22SAndroid Build Coastguard Worker 	 *
3505*7688df22SAndroid Build Coastguard Worker 	 * Note that the returned size here will always reflect any required
3506*7688df22SAndroid Build Coastguard Worker 	 * rounding up done by the kernel, i.e 4K will now become 64K on devices
3507*7688df22SAndroid Build Coastguard Worker 	 * such as DG2. The kernel will always select the largest minimum
3508*7688df22SAndroid Build Coastguard Worker 	 * page-size for the set of possible placements as the value to use when
3509*7688df22SAndroid Build Coastguard Worker 	 * rounding up the @size.
3510*7688df22SAndroid Build Coastguard Worker 	 *
3511*7688df22SAndroid Build Coastguard Worker 	 * Special DG2 GTT address alignment requirement:
3512*7688df22SAndroid Build Coastguard Worker 	 *
3513*7688df22SAndroid Build Coastguard Worker 	 * The GTT alignment will also need to be at least 2M for such objects.
3514*7688df22SAndroid Build Coastguard Worker 	 *
3515*7688df22SAndroid Build Coastguard Worker 	 * Note that due to how the hardware implements 64K GTT page support, we
3516*7688df22SAndroid Build Coastguard Worker 	 * have some further complications:
3517*7688df22SAndroid Build Coastguard Worker 	 *
3518*7688df22SAndroid Build Coastguard Worker 	 *   1) The entire PDE (which covers a 2MB virtual address range), must
3519*7688df22SAndroid Build Coastguard Worker 	 *   contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same
3520*7688df22SAndroid Build Coastguard Worker 	 *   PDE is forbidden by the hardware.
3521*7688df22SAndroid Build Coastguard Worker 	 *
3522*7688df22SAndroid Build Coastguard Worker 	 *   2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM
3523*7688df22SAndroid Build Coastguard Worker 	 *   objects.
3524*7688df22SAndroid Build Coastguard Worker 	 *
3525*7688df22SAndroid Build Coastguard Worker 	 * To keep things simple for userland, we mandate that any GTT mappings
3526*7688df22SAndroid Build Coastguard Worker 	 * must be aligned to and rounded up to 2MB. The kernel will internally
3527*7688df22SAndroid Build Coastguard Worker 	 * pad them out to the next 2MB boundary. As this only wastes virtual
3528*7688df22SAndroid Build Coastguard Worker 	 * address space and avoids userland having to copy any needlessly
3529*7688df22SAndroid Build Coastguard Worker 	 * complicated PDE sharing scheme (coloring) and only affects DG2, this
3530*7688df22SAndroid Build Coastguard Worker 	 * is deemed to be a good compromise.
3531*7688df22SAndroid Build Coastguard Worker 	 */
3532*7688df22SAndroid Build Coastguard Worker 	__u64 size;
3533*7688df22SAndroid Build Coastguard Worker 
3534*7688df22SAndroid Build Coastguard Worker 	/**
3535*7688df22SAndroid Build Coastguard Worker 	 * @handle: Returned handle for the object.
3536*7688df22SAndroid Build Coastguard Worker 	 *
3537*7688df22SAndroid Build Coastguard Worker 	 * Object handles are nonzero.
3538*7688df22SAndroid Build Coastguard Worker 	 */
3539*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
3540*7688df22SAndroid Build Coastguard Worker 
3541*7688df22SAndroid Build Coastguard Worker 	/**
3542*7688df22SAndroid Build Coastguard Worker 	 * @flags: Optional flags.
3543*7688df22SAndroid Build Coastguard Worker 	 *
3544*7688df22SAndroid Build Coastguard Worker 	 * Supported values:
3545*7688df22SAndroid Build Coastguard Worker 	 *
3546*7688df22SAndroid Build Coastguard Worker 	 * I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that
3547*7688df22SAndroid Build Coastguard Worker 	 * the object will need to be accessed via the CPU.
3548*7688df22SAndroid Build Coastguard Worker 	 *
3549*7688df22SAndroid Build Coastguard Worker 	 * Only valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only
3550*7688df22SAndroid Build Coastguard Worker 	 * strictly required on configurations where some subset of the device
3551*7688df22SAndroid Build Coastguard Worker 	 * memory is directly visible/mappable through the CPU (which we also
3552*7688df22SAndroid Build Coastguard Worker 	 * call small BAR), like on some DG2+ systems. Note that this is quite
3553*7688df22SAndroid Build Coastguard Worker 	 * undesirable, but due to various factors like the client CPU, BIOS etc
3554*7688df22SAndroid Build Coastguard Worker 	 * it's something we can expect to see in the wild. See
3555*7688df22SAndroid Build Coastguard Worker 	 * &drm_i915_memory_region_info.probed_cpu_visible_size for how to
3556*7688df22SAndroid Build Coastguard Worker 	 * determine if this system applies.
3557*7688df22SAndroid Build Coastguard Worker 	 *
3558*7688df22SAndroid Build Coastguard Worker 	 * Note that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to
3559*7688df22SAndroid Build Coastguard Worker 	 * ensure the kernel can always spill the allocation to system memory,
3560*7688df22SAndroid Build Coastguard Worker 	 * if the object can't be allocated in the mappable part of
3561*7688df22SAndroid Build Coastguard Worker 	 * I915_MEMORY_CLASS_DEVICE.
3562*7688df22SAndroid Build Coastguard Worker 	 *
3563*7688df22SAndroid Build Coastguard Worker 	 * Also note that since the kernel only supports flat-CCS on objects
3564*7688df22SAndroid Build Coastguard Worker 	 * that can *only* be placed in I915_MEMORY_CLASS_DEVICE, we therefore
3565*7688df22SAndroid Build Coastguard Worker 	 * don't support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with
3566*7688df22SAndroid Build Coastguard Worker 	 * flat-CCS.
3567*7688df22SAndroid Build Coastguard Worker 	 *
3568*7688df22SAndroid Build Coastguard Worker 	 * Without this hint, the kernel will assume that non-mappable
3569*7688df22SAndroid Build Coastguard Worker 	 * I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the
3570*7688df22SAndroid Build Coastguard Worker 	 * kernel can still migrate the object to the mappable part, as a last
3571*7688df22SAndroid Build Coastguard Worker 	 * resort, if userspace ever CPU faults this object, but this might be
3572*7688df22SAndroid Build Coastguard Worker 	 * expensive, and so ideally should be avoided.
3573*7688df22SAndroid Build Coastguard Worker 	 *
3574*7688df22SAndroid Build Coastguard Worker 	 * On older kernels which lack the relevant small-bar uAPI support (see
3575*7688df22SAndroid Build Coastguard Worker 	 * also &drm_i915_memory_region_info.probed_cpu_visible_size),
3576*7688df22SAndroid Build Coastguard Worker 	 * usage of the flag will result in an error, but it should NEVER be
3577*7688df22SAndroid Build Coastguard Worker 	 * possible to end up with a small BAR configuration, assuming we can
3578*7688df22SAndroid Build Coastguard Worker 	 * also successfully load the i915 kernel module. In such cases the
3579*7688df22SAndroid Build Coastguard Worker 	 * entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as
3580*7688df22SAndroid Build Coastguard Worker 	 * such there are zero restrictions on where the object can be placed.
3581*7688df22SAndroid Build Coastguard Worker 	 */
3582*7688df22SAndroid Build Coastguard Worker #define I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS (1 << 0)
3583*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
3584*7688df22SAndroid Build Coastguard Worker 
3585*7688df22SAndroid Build Coastguard Worker 	/**
3586*7688df22SAndroid Build Coastguard Worker 	 * @extensions: The chain of extensions to apply to this object.
3587*7688df22SAndroid Build Coastguard Worker 	 *
3588*7688df22SAndroid Build Coastguard Worker 	 * This will be useful in the future when we need to support several
3589*7688df22SAndroid Build Coastguard Worker 	 * different extensions, and we need to apply more than one when
3590*7688df22SAndroid Build Coastguard Worker 	 * creating the object. See struct i915_user_extension.
3591*7688df22SAndroid Build Coastguard Worker 	 *
3592*7688df22SAndroid Build Coastguard Worker 	 * If we don't supply any extensions then we get the same old gem_create
3593*7688df22SAndroid Build Coastguard Worker 	 * behaviour.
3594*7688df22SAndroid Build Coastguard Worker 	 *
3595*7688df22SAndroid Build Coastguard Worker 	 * For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see
3596*7688df22SAndroid Build Coastguard Worker 	 * struct drm_i915_gem_create_ext_memory_regions.
3597*7688df22SAndroid Build Coastguard Worker 	 *
3598*7688df22SAndroid Build Coastguard Worker 	 * For I915_GEM_CREATE_EXT_PROTECTED_CONTENT usage see
3599*7688df22SAndroid Build Coastguard Worker 	 * struct drm_i915_gem_create_ext_protected_content.
3600*7688df22SAndroid Build Coastguard Worker 	 */
3601*7688df22SAndroid Build Coastguard Worker #define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0
3602*7688df22SAndroid Build Coastguard Worker #define I915_GEM_CREATE_EXT_PROTECTED_CONTENT 1
3603*7688df22SAndroid Build Coastguard Worker 	__u64 extensions;
3604*7688df22SAndroid Build Coastguard Worker };
3605*7688df22SAndroid Build Coastguard Worker 
3606*7688df22SAndroid Build Coastguard Worker /**
3607*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_create_ext_memory_regions - The
3608*7688df22SAndroid Build Coastguard Worker  * I915_GEM_CREATE_EXT_MEMORY_REGIONS extension.
3609*7688df22SAndroid Build Coastguard Worker  *
3610*7688df22SAndroid Build Coastguard Worker  * Set the object with the desired set of placements/regions in priority
3611*7688df22SAndroid Build Coastguard Worker  * order. Each entry must be unique and supported by the device.
3612*7688df22SAndroid Build Coastguard Worker  *
3613*7688df22SAndroid Build Coastguard Worker  * This is provided as an array of struct drm_i915_gem_memory_class_instance, or
3614*7688df22SAndroid Build Coastguard Worker  * an equivalent layout of class:instance pair encodings. See struct
3615*7688df22SAndroid Build Coastguard Worker  * drm_i915_query_memory_regions and DRM_I915_QUERY_MEMORY_REGIONS for how to
3616*7688df22SAndroid Build Coastguard Worker  * query the supported regions for a device.
3617*7688df22SAndroid Build Coastguard Worker  *
3618*7688df22SAndroid Build Coastguard Worker  * As an example, on discrete devices, if we wish to set the placement as
3619*7688df22SAndroid Build Coastguard Worker  * device local-memory we can do something like:
3620*7688df22SAndroid Build Coastguard Worker  *
3621*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
3622*7688df22SAndroid Build Coastguard Worker  *
3623*7688df22SAndroid Build Coastguard Worker  *	struct drm_i915_gem_memory_class_instance region_lmem = {
3624*7688df22SAndroid Build Coastguard Worker  *              .memory_class = I915_MEMORY_CLASS_DEVICE,
3625*7688df22SAndroid Build Coastguard Worker  *              .memory_instance = 0,
3626*7688df22SAndroid Build Coastguard Worker  *      };
3627*7688df22SAndroid Build Coastguard Worker  *      struct drm_i915_gem_create_ext_memory_regions regions = {
3628*7688df22SAndroid Build Coastguard Worker  *              .base = { .name = I915_GEM_CREATE_EXT_MEMORY_REGIONS },
3629*7688df22SAndroid Build Coastguard Worker  *              .regions = (uintptr_t)&region_lmem,
3630*7688df22SAndroid Build Coastguard Worker  *              .num_regions = 1,
3631*7688df22SAndroid Build Coastguard Worker  *      };
3632*7688df22SAndroid Build Coastguard Worker  *      struct drm_i915_gem_create_ext create_ext = {
3633*7688df22SAndroid Build Coastguard Worker  *              .size = 16 * PAGE_SIZE,
3634*7688df22SAndroid Build Coastguard Worker  *              .extensions = (uintptr_t)&regions,
3635*7688df22SAndroid Build Coastguard Worker  *      };
3636*7688df22SAndroid Build Coastguard Worker  *
3637*7688df22SAndroid Build Coastguard Worker  *      int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext);
3638*7688df22SAndroid Build Coastguard Worker  *      if (err) ...
3639*7688df22SAndroid Build Coastguard Worker  *
3640*7688df22SAndroid Build Coastguard Worker  * At which point we get the object handle in &drm_i915_gem_create_ext.handle,
3641*7688df22SAndroid Build Coastguard Worker  * along with the final object size in &drm_i915_gem_create_ext.size, which
3642*7688df22SAndroid Build Coastguard Worker  * should account for any rounding up, if required.
3643*7688df22SAndroid Build Coastguard Worker  *
3644*7688df22SAndroid Build Coastguard Worker  * Note that userspace has no means of knowing the current backing region
3645*7688df22SAndroid Build Coastguard Worker  * for objects where @num_regions is larger than one. The kernel will only
3646*7688df22SAndroid Build Coastguard Worker  * ensure that the priority order of the @regions array is honoured, either
3647*7688df22SAndroid Build Coastguard Worker  * when initially placing the object, or when moving memory around due to
3648*7688df22SAndroid Build Coastguard Worker  * memory pressure
3649*7688df22SAndroid Build Coastguard Worker  *
3650*7688df22SAndroid Build Coastguard Worker  * On Flat-CCS capable HW, compression is supported for the objects residing
3651*7688df22SAndroid Build Coastguard Worker  * in I915_MEMORY_CLASS_DEVICE. When such objects (compressed) have other
3652*7688df22SAndroid Build Coastguard Worker  * memory class in @regions and migrated (by i915, due to memory
3653*7688df22SAndroid Build Coastguard Worker  * constraints) to the non I915_MEMORY_CLASS_DEVICE region, then i915 needs to
3654*7688df22SAndroid Build Coastguard Worker  * decompress the content. But i915 doesn't have the required information to
3655*7688df22SAndroid Build Coastguard Worker  * decompress the userspace compressed objects.
3656*7688df22SAndroid Build Coastguard Worker  *
3657*7688df22SAndroid Build Coastguard Worker  * So i915 supports Flat-CCS, on the objects which can reside only on
3658*7688df22SAndroid Build Coastguard Worker  * I915_MEMORY_CLASS_DEVICE regions.
3659*7688df22SAndroid Build Coastguard Worker  */
3660*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_create_ext_memory_regions {
3661*7688df22SAndroid Build Coastguard Worker 	/** @base: Extension link. See struct i915_user_extension. */
3662*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
3663*7688df22SAndroid Build Coastguard Worker 
3664*7688df22SAndroid Build Coastguard Worker 	/** @pad: MBZ */
3665*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
3666*7688df22SAndroid Build Coastguard Worker 	/** @num_regions: Number of elements in the @regions array. */
3667*7688df22SAndroid Build Coastguard Worker 	__u32 num_regions;
3668*7688df22SAndroid Build Coastguard Worker 	/**
3669*7688df22SAndroid Build Coastguard Worker 	 * @regions: The regions/placements array.
3670*7688df22SAndroid Build Coastguard Worker 	 *
3671*7688df22SAndroid Build Coastguard Worker 	 * An array of struct drm_i915_gem_memory_class_instance.
3672*7688df22SAndroid Build Coastguard Worker 	 */
3673*7688df22SAndroid Build Coastguard Worker 	__u64 regions;
3674*7688df22SAndroid Build Coastguard Worker };
3675*7688df22SAndroid Build Coastguard Worker 
3676*7688df22SAndroid Build Coastguard Worker /**
3677*7688df22SAndroid Build Coastguard Worker  * struct drm_i915_gem_create_ext_protected_content - The
3678*7688df22SAndroid Build Coastguard Worker  * I915_OBJECT_PARAM_PROTECTED_CONTENT extension.
3679*7688df22SAndroid Build Coastguard Worker  *
3680*7688df22SAndroid Build Coastguard Worker  * If this extension is provided, buffer contents are expected to be protected
3681*7688df22SAndroid Build Coastguard Worker  * by PXP encryption and require decryption for scan out and processing. This
3682*7688df22SAndroid Build Coastguard Worker  * is only possible on platforms that have PXP enabled, on all other scenarios
3683*7688df22SAndroid Build Coastguard Worker  * using this extension will cause the ioctl to fail and return -ENODEV. The
3684*7688df22SAndroid Build Coastguard Worker  * flags parameter is reserved for future expansion and must currently be set
3685*7688df22SAndroid Build Coastguard Worker  * to zero.
3686*7688df22SAndroid Build Coastguard Worker  *
3687*7688df22SAndroid Build Coastguard Worker  * The buffer contents are considered invalid after a PXP session teardown.
3688*7688df22SAndroid Build Coastguard Worker  *
3689*7688df22SAndroid Build Coastguard Worker  * The encryption is guaranteed to be processed correctly only if the object
3690*7688df22SAndroid Build Coastguard Worker  * is submitted with a context created using the
3691*7688df22SAndroid Build Coastguard Worker  * I915_CONTEXT_PARAM_PROTECTED_CONTENT flag. This will also enable extra checks
3692*7688df22SAndroid Build Coastguard Worker  * at submission time on the validity of the objects involved.
3693*7688df22SAndroid Build Coastguard Worker  *
3694*7688df22SAndroid Build Coastguard Worker  * Below is an example on how to create a protected object:
3695*7688df22SAndroid Build Coastguard Worker  *
3696*7688df22SAndroid Build Coastguard Worker  * .. code-block:: C
3697*7688df22SAndroid Build Coastguard Worker  *
3698*7688df22SAndroid Build Coastguard Worker  *      struct drm_i915_gem_create_ext_protected_content protected_ext = {
3699*7688df22SAndroid Build Coastguard Worker  *              .base = { .name = I915_GEM_CREATE_EXT_PROTECTED_CONTENT },
3700*7688df22SAndroid Build Coastguard Worker  *              .flags = 0,
3701*7688df22SAndroid Build Coastguard Worker  *      };
3702*7688df22SAndroid Build Coastguard Worker  *      struct drm_i915_gem_create_ext create_ext = {
3703*7688df22SAndroid Build Coastguard Worker  *              .size = PAGE_SIZE,
3704*7688df22SAndroid Build Coastguard Worker  *              .extensions = (uintptr_t)&protected_ext,
3705*7688df22SAndroid Build Coastguard Worker  *      };
3706*7688df22SAndroid Build Coastguard Worker  *
3707*7688df22SAndroid Build Coastguard Worker  *      int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext);
3708*7688df22SAndroid Build Coastguard Worker  *      if (err) ...
3709*7688df22SAndroid Build Coastguard Worker  */
3710*7688df22SAndroid Build Coastguard Worker struct drm_i915_gem_create_ext_protected_content {
3711*7688df22SAndroid Build Coastguard Worker 	/** @base: Extension link. See struct i915_user_extension. */
3712*7688df22SAndroid Build Coastguard Worker 	struct i915_user_extension base;
3713*7688df22SAndroid Build Coastguard Worker 	/** @flags: reserved for future usage, currently MBZ */
3714*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
3715*7688df22SAndroid Build Coastguard Worker };
3716*7688df22SAndroid Build Coastguard Worker 
3717*7688df22SAndroid Build Coastguard Worker /* ID of the protected content session managed by i915 when PXP is active */
3718*7688df22SAndroid Build Coastguard Worker #define I915_PROTECTED_CONTENT_DEFAULT_SESSION 0xf
3719*7688df22SAndroid Build Coastguard Worker 
3720*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
3721*7688df22SAndroid Build Coastguard Worker }
3722*7688df22SAndroid Build Coastguard Worker #endif
3723*7688df22SAndroid Build Coastguard Worker 
3724*7688df22SAndroid Build Coastguard Worker #endif /* _I915_DRM_H_ */
3725