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