16ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs/* 26ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * Copyright 2005 Stephane Marchesin. 36ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * All Rights Reserved. 46ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * 56ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 66ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * copy of this software and associated documentation files (the "Software"), 76ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * to deal in the Software without restriction, including without limitation 86ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 96ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * and/or sell copies of the Software, and to permit persons to whom the 106ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * Software is furnished to do so, subject to the following conditions: 116ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * 126ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * The above copyright notice and this permission notice (including the next 136ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * paragraph) shall be included in all copies or substantial portions of the 146ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * Software. 156ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * 166ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 176ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 186ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 196ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 206ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 216ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 226ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs * OTHER DEALINGS IN THE SOFTWARE. 236ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs */ 246ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 256ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#ifndef __NOUVEAU_DRM_H__ 266ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define __NOUVEAU_DRM_H__ 276ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 2827111a23d01c1dba3180c998629004ab4c9ac985Ben Skeggs#define DRM_NOUVEAU_EVENT_NVIF 0x80000000 2927111a23d01c1dba3180c998629004ab4c9ac985Ben Skeggs 30a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs/* reserved object handles when using deprecated object APIs - these 31a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs * are here so that libdrm can allow interoperability with the new 32a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs * object APIs 33a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs */ 34a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs#define NOUVEAU_ABI16_CLIENT 0xffffffff 35a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs#define NOUVEAU_ABI16_DEVICE 0xdddddddd 36a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs#define NOUVEAU_ABI16_CHAN(n) (0xcccc0000 | (n)) 37a4e610b5e655186f81f18f027d2b7a15e010cbefBen Skeggs 386ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) 396ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) 406ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) 416ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) 426ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 438f7286f8e4e80f7b868ba3d117ae900f0d207cbeBen Skeggs#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ 44f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 45f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez#define NOUVEAU_GEM_TILE_16BPP 0x00000001 46f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez#define NOUVEAU_GEM_TILE_32BPP 0x00000002 47f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez#define NOUVEAU_GEM_TILE_ZETA 0x00000004 48f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 49f13b32630dda7e583a84a8c535880cff7e4a9bddFrancisco Jerez 506ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_info { 516ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t handle; 526ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t domain; 536ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t size; 546ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t offset; 556ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t map_handle; 566ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t tile_mode; 576ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t tile_flags; 586ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 596ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 606ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_new { 616ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs struct drm_nouveau_gem_info info; 626ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t channel_hint; 636ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t align; 646ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 656ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 66a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define NOUVEAU_GEM_MAX_BUFFERS 1024 67a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggsstruct drm_nouveau_gem_pushbuf_bo_presumed { 68a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t valid; 69a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t domain; 70a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint64_t offset; 71a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs}; 72a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs 736ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_pushbuf_bo { 746ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t user_priv; 756ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t handle; 766ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t read_domains; 776ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t write_domains; 786ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t valid_domains; 79a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs struct drm_nouveau_gem_pushbuf_bo_presumed presumed; 806ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 816ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 826ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_RELOC_LOW (1 << 0) 836ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) 846ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_RELOC_OR (1 << 2) 85a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define NOUVEAU_GEM_MAX_RELOCS 1024 866ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_pushbuf_reloc { 87a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t reloc_bo_index; 88a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t reloc_bo_offset; 896ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t bo_index; 906ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t flags; 916ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t data; 926ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t vor; 936ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t tor; 946ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 956ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 96a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define NOUVEAU_GEM_MAX_PUSH 512 97a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggsstruct drm_nouveau_gem_pushbuf_push { 98a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t bo_index; 99a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t pad; 100a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint64_t offset; 101a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint64_t length; 102a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs}; 1036ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 1046ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_pushbuf { 1056ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t channel; 1066ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t nr_buffers; 1076ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t buffers; 1086ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t nr_relocs; 109a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint32_t nr_push; 1106ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t relocs; 111a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs uint64_t push; 1126ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t suffix0; 1136ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t suffix1; 1146ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t vram_available; 1156ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint64_t gart_available; 1166ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 1176ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 1186ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 1196ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 1206ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_cpu_prep { 1216ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t handle; 1226ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t flags; 1236ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 1246ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 1256ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggsstruct drm_nouveau_gem_cpu_fini { 1266ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs uint32_t handle; 1276ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs}; 1286ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 1292a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_GETPARAM 0x00 /* deprecated */ 1302a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */ 1312a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 /* deprecated */ 1322a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_CHANNEL_FREE 0x03 /* deprecated */ 1332a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */ 1342a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ 1352a259a3d84c4409918c5d094f0969da58283a947Ben Skeggs#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ 13627111a23d01c1dba3180c998629004ab4c9ac985Ben Skeggs#define DRM_NOUVEAU_NVIF 0x07 1376ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define DRM_NOUVEAU_GEM_NEW 0x40 1386ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 139a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 140a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 141a1606a9596e54da90ad6209071b357a4c1b0fa82Ben Skeggs#define DRM_NOUVEAU_GEM_INFO 0x44 1426ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs 1431b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie#define DRM_IOCTL_NOUVEAU_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new) 1441b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie#define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf) 1451b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie#define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep) 1461b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie#define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, struct drm_nouveau_gem_cpu_fini) 1471b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie#define DRM_IOCTL_NOUVEAU_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info) 1481b2f1489633888d4a06028315dc19d65768a1c05Dave Airlie 1496ee738610f41b59733f63718f0bdbcba7d3a3f12Ben Skeggs#endif /* __NOUVEAU_DRM_H__ */ 150