| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright 2005 Stephane Marchesin. | 
 | 3 |  * All Rights Reserved. | 
 | 4 |  * | 
 | 5 |  * Permission is hereby granted, free of charge, to any person obtaining a | 
 | 6 |  * copy of this software and associated documentation files (the "Software"), | 
 | 7 |  * to deal in the Software without restriction, including without limitation | 
 | 8 |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
 | 9 |  * and/or sell copies of the Software, and to permit persons to whom the | 
 | 10 |  * Software is furnished to do so, subject to the following conditions: | 
 | 11 |  * | 
 | 12 |  * The above copyright notice and this permission notice (including the next | 
 | 13 |  * paragraph) shall be included in all copies or substantial portions of the | 
 | 14 |  * Software. | 
 | 15 |  * | 
 | 16 |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
 | 17 |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
 | 18 |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | 
 | 19 |  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | 
 | 20 |  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | 
 | 21 |  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | 
 | 22 |  * OTHER DEALINGS IN THE SOFTWARE. | 
 | 23 |  */ | 
 | 24 |  | 
 | 25 | #ifndef __NOUVEAU_DRM_H__ | 
 | 26 | #define __NOUVEAU_DRM_H__ | 
 | 27 |  | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 28 | #define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 29 |  | 
 | 30 | struct drm_nouveau_channel_alloc { | 
 | 31 | 	uint32_t     fb_ctxdma_handle; | 
 | 32 | 	uint32_t     tt_ctxdma_handle; | 
 | 33 |  | 
 | 34 | 	int          channel; | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 35 | 	uint32_t     pushbuf_domains; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 36 |  | 
 | 37 | 	/* Notifier memory */ | 
 | 38 | 	uint32_t     notifier_handle; | 
 | 39 |  | 
 | 40 | 	/* DRM-enforced subchannel assignments */ | 
 | 41 | 	struct { | 
 | 42 | 		uint32_t handle; | 
 | 43 | 		uint32_t grclass; | 
 | 44 | 	} subchan[8]; | 
 | 45 | 	uint32_t nr_subchan; | 
 | 46 | }; | 
 | 47 |  | 
 | 48 | struct drm_nouveau_channel_free { | 
 | 49 | 	int channel; | 
 | 50 | }; | 
 | 51 |  | 
 | 52 | struct drm_nouveau_grobj_alloc { | 
 | 53 | 	int      channel; | 
 | 54 | 	uint32_t handle; | 
 | 55 | 	int      class; | 
 | 56 | }; | 
 | 57 |  | 
 | 58 | struct drm_nouveau_notifierobj_alloc { | 
 | 59 | 	uint32_t channel; | 
 | 60 | 	uint32_t handle; | 
 | 61 | 	uint32_t size; | 
 | 62 | 	uint32_t offset; | 
 | 63 | }; | 
 | 64 |  | 
 | 65 | struct drm_nouveau_gpuobj_free { | 
 | 66 | 	int      channel; | 
 | 67 | 	uint32_t handle; | 
 | 68 | }; | 
 | 69 |  | 
 | 70 | /* FIXME : maybe unify {GET,SET}PARAMs */ | 
 | 71 | #define NOUVEAU_GETPARAM_PCI_VENDOR      3 | 
 | 72 | #define NOUVEAU_GETPARAM_PCI_DEVICE      4 | 
 | 73 | #define NOUVEAU_GETPARAM_BUS_TYPE        5 | 
 | 74 | #define NOUVEAU_GETPARAM_FB_PHYSICAL     6 | 
 | 75 | #define NOUVEAU_GETPARAM_AGP_PHYSICAL    7 | 
 | 76 | #define NOUVEAU_GETPARAM_FB_SIZE         8 | 
 | 77 | #define NOUVEAU_GETPARAM_AGP_SIZE        9 | 
 | 78 | #define NOUVEAU_GETPARAM_PCI_PHYSICAL    10 | 
 | 79 | #define NOUVEAU_GETPARAM_CHIPSET_ID      11 | 
 | 80 | #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12 | 
| Marcin KoĆcielnicki | 69c9700 | 2010-01-26 18:39:20 +0000 | [diff] [blame] | 81 | #define NOUVEAU_GETPARAM_GRAPH_UNITS     13 | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 82 | struct drm_nouveau_getparam { | 
 | 83 | 	uint64_t param; | 
 | 84 | 	uint64_t value; | 
 | 85 | }; | 
 | 86 |  | 
 | 87 | struct drm_nouveau_setparam { | 
 | 88 | 	uint64_t param; | 
 | 89 | 	uint64_t value; | 
 | 90 | }; | 
 | 91 |  | 
 | 92 | #define NOUVEAU_GEM_DOMAIN_CPU       (1 << 0) | 
 | 93 | #define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1) | 
 | 94 | #define NOUVEAU_GEM_DOMAIN_GART      (1 << 2) | 
 | 95 | #define NOUVEAU_GEM_DOMAIN_MAPPABLE  (1 << 3) | 
 | 96 |  | 
 | 97 | struct drm_nouveau_gem_info { | 
 | 98 | 	uint32_t handle; | 
 | 99 | 	uint32_t domain; | 
 | 100 | 	uint64_t size; | 
 | 101 | 	uint64_t offset; | 
 | 102 | 	uint64_t map_handle; | 
 | 103 | 	uint32_t tile_mode; | 
 | 104 | 	uint32_t tile_flags; | 
 | 105 | }; | 
 | 106 |  | 
 | 107 | struct drm_nouveau_gem_new { | 
 | 108 | 	struct drm_nouveau_gem_info info; | 
 | 109 | 	uint32_t channel_hint; | 
 | 110 | 	uint32_t align; | 
 | 111 | }; | 
 | 112 |  | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 113 | #define NOUVEAU_GEM_MAX_BUFFERS 1024 | 
 | 114 | struct drm_nouveau_gem_pushbuf_bo_presumed { | 
 | 115 | 	uint32_t valid; | 
 | 116 | 	uint32_t domain; | 
 | 117 | 	uint64_t offset; | 
 | 118 | }; | 
 | 119 |  | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 120 | struct drm_nouveau_gem_pushbuf_bo { | 
 | 121 | 	uint64_t user_priv; | 
 | 122 | 	uint32_t handle; | 
 | 123 | 	uint32_t read_domains; | 
 | 124 | 	uint32_t write_domains; | 
 | 125 | 	uint32_t valid_domains; | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 126 | 	struct drm_nouveau_gem_pushbuf_bo_presumed presumed; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 127 | }; | 
 | 128 |  | 
 | 129 | #define NOUVEAU_GEM_RELOC_LOW  (1 << 0) | 
 | 130 | #define NOUVEAU_GEM_RELOC_HIGH (1 << 1) | 
 | 131 | #define NOUVEAU_GEM_RELOC_OR   (1 << 2) | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 132 | #define NOUVEAU_GEM_MAX_RELOCS 1024 | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 133 | struct drm_nouveau_gem_pushbuf_reloc { | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 134 | 	uint32_t reloc_bo_index; | 
 | 135 | 	uint32_t reloc_bo_offset; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 136 | 	uint32_t bo_index; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 137 | 	uint32_t flags; | 
 | 138 | 	uint32_t data; | 
 | 139 | 	uint32_t vor; | 
 | 140 | 	uint32_t tor; | 
 | 141 | }; | 
 | 142 |  | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 143 | #define NOUVEAU_GEM_MAX_PUSH 512 | 
 | 144 | struct drm_nouveau_gem_pushbuf_push { | 
 | 145 | 	uint32_t bo_index; | 
 | 146 | 	uint32_t pad; | 
 | 147 | 	uint64_t offset; | 
 | 148 | 	uint64_t length; | 
 | 149 | }; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 150 |  | 
 | 151 | struct drm_nouveau_gem_pushbuf { | 
 | 152 | 	uint32_t channel; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 153 | 	uint32_t nr_buffers; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 154 | 	uint64_t buffers; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 155 | 	uint32_t nr_relocs; | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 156 | 	uint32_t nr_push; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 157 | 	uint64_t relocs; | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 158 | 	uint64_t push; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 159 | 	uint32_t suffix0; | 
 | 160 | 	uint32_t suffix1; | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 161 | 	uint64_t vram_available; | 
 | 162 | 	uint64_t gart_available; | 
 | 163 | }; | 
 | 164 |  | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 165 | #define NOUVEAU_GEM_CPU_PREP_NOWAIT                                  0x00000001 | 
 | 166 | #define NOUVEAU_GEM_CPU_PREP_NOBLOCK                                 0x00000002 | 
 | 167 | #define NOUVEAU_GEM_CPU_PREP_WRITE                                   0x00000004 | 
 | 168 | struct drm_nouveau_gem_cpu_prep { | 
 | 169 | 	uint32_t handle; | 
 | 170 | 	uint32_t flags; | 
 | 171 | }; | 
 | 172 |  | 
 | 173 | struct drm_nouveau_gem_cpu_fini { | 
 | 174 | 	uint32_t handle; | 
 | 175 | }; | 
 | 176 |  | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 177 | enum nouveau_bus_type { | 
 | 178 | 	NV_AGP     = 0, | 
 | 179 | 	NV_PCI     = 1, | 
 | 180 | 	NV_PCIE    = 2, | 
 | 181 | }; | 
 | 182 |  | 
 | 183 | struct drm_nouveau_sarea { | 
 | 184 | }; | 
 | 185 |  | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 186 | #define DRM_NOUVEAU_GETPARAM           0x00 | 
 | 187 | #define DRM_NOUVEAU_SETPARAM           0x01 | 
 | 188 | #define DRM_NOUVEAU_CHANNEL_ALLOC      0x02 | 
 | 189 | #define DRM_NOUVEAU_CHANNEL_FREE       0x03 | 
 | 190 | #define DRM_NOUVEAU_GROBJ_ALLOC        0x04 | 
 | 191 | #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC  0x05 | 
 | 192 | #define DRM_NOUVEAU_GPUOBJ_FREE        0x06 | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 193 | #define DRM_NOUVEAU_GEM_NEW            0x40 | 
 | 194 | #define DRM_NOUVEAU_GEM_PUSHBUF        0x41 | 
| Ben Skeggs | a1606a9 | 2010-02-12 10:27:35 +1000 | [diff] [blame] | 195 | #define DRM_NOUVEAU_GEM_CPU_PREP       0x42 | 
 | 196 | #define DRM_NOUVEAU_GEM_CPU_FINI       0x43 | 
 | 197 | #define DRM_NOUVEAU_GEM_INFO           0x44 | 
| Ben Skeggs | 6ee7386 | 2009-12-11 19:24:15 +1000 | [diff] [blame] | 198 |  | 
 | 199 | #endif /* __NOUVEAU_DRM_H__ */ |