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