1292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#ifndef __NOUVEAU_H__ 2292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define __NOUVEAU_H__ 3292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 4292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#include <stdint.h> 5292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#include <stdbool.h> 6292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 7f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs/* Supported class information, provided by the kernel */ 8f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nouveau_sclass { 9f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int32_t oclass; 10f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int minver; 11f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int maxver; 12f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 13292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 14f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs/* Client-provided array describing class versions that are desired. 15f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs * 16f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs * These are used to match against the kernel's list of supported classes. 17f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs */ 18f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nouveau_mclass { 19f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int32_t oclass; 20f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int version; 21f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs void *data; 22292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 23292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 24292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_object { 25292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_object *parent; 26292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t handle; 27292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t oclass; 28f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t length; /* deprecated */ 29f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs void *data; /* deprecated */ 30292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 31292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 32f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_object_new(struct nouveau_object *parent, uint64_t handle, 33f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t oclass, void *data, uint32_t length, 34f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_object **); 35f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsvoid nouveau_object_del(struct nouveau_object **); 36f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_object_mthd(struct nouveau_object *, uint32_t mthd, 37f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs void *data, uint32_t size); 38f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_object_sclass_get(struct nouveau_object *, 39f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_sclass **); 40f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsvoid nouveau_object_sclass_put(struct nouveau_sclass **); 41f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_object_mclass(struct nouveau_object *, 42f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs const struct nouveau_mclass *); 43f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 44b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggsstruct nouveau_drm { 45b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs struct nouveau_object client; 46b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs int fd; 47b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs uint32_t version; 48b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs bool nvif; 49b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs}; 50b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs 51b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggsstatic inline struct nouveau_drm * 52b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggsnouveau_drm(struct nouveau_object *obj) 53b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs{ 54b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs while (obj && obj->parent) 55b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs obj = obj->parent; 56b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs return (struct nouveau_drm *)obj; 57b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs} 58b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs 59b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggsint nouveau_drm_new(int fd, struct nouveau_drm **); 60b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggsvoid nouveau_drm_del(struct nouveau_drm **); 61b845d61de93c762f73463a67a634ecb1ae8c4c35Ben Skeggs 62292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_device { 63292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_object object; 64f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int fd; /* deprecated */ 65f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t lib_version; /* deprecated */ 66f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t drm_version; /* deprecated */ 67292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t chipset; 68292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t vram_size; 69292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t gart_size; 70292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t vram_limit; 71292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t gart_limit; 72292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 73292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 74f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_device_new(struct nouveau_object *parent, int32_t oclass, 75f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs void *data, uint32_t size, struct nouveau_device **); 76292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_device_del(struct nouveau_device **); 77f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 78f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value); 79f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_setparam(struct nouveau_device *, uint64_t param, uint64_t value); 80f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 81f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs/* deprecated */ 82f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_device_wrap(int fd, int close, struct nouveau_device **); 83f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_device_open(const char *busid, struct nouveau_device **); 84292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 85292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_client { 86292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_device *device; 87292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs int id; 88292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 89292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 90f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_client_new(struct nouveau_device *, struct nouveau_client **); 91292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_client_del(struct nouveau_client **); 92292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 93292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsunion nouveau_bo_config { 94292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct { 95292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NV04_BO_16BPP 0x00000001 96292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NV04_BO_32BPP 0x00000002 97292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NV04_BO_ZETA 0x00000004 98292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t surf_flags; 99292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t surf_pitch; 100292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs } nv04; 101292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct { 102292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t memtype; 103292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t tile_mode; 104292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs } nv50; 105292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct { 106292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t memtype; 107292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t tile_mode; 108292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs } nvc0; 109292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t data[8]; 110292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 111292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 112292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_VRAM 0x00000001 113292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_GART 0x00000002 114292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART) 115292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_RD 0x00000100 116292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_WR 0x00000200 117292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR) 118292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_NOBLOCK 0x00000400 119292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_LOW 0x00001000 120292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_HIGH 0x00002000 121292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_OR 0x00004000 122292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_MAP 0x80000000 123292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_CONTIG 0x40000000 124292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#define NOUVEAU_BO_NOSNOOP 0x20000000 125a1acffd4e0968ffa65b673163574188a00c9ab7eAlexandre Courbot#define NOUVEAU_BO_COHERENT 0x10000000 126292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 127292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bo { 128292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_device *device; 129292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t handle; 130292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t size; 131292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t flags; 132292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t offset; 133292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs void *map; 134292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs union nouveau_bo_config config; 135292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 136292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 137f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, 138f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint64_t size, union nouveau_bo_config *, 139f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_bo **); 140f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, 141292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bo **); 142f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name, 143f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_bo **); 144f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name); 145292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **); 146f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_map(struct nouveau_bo *, uint32_t access, 147f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_client *); 148f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_wait(struct nouveau_bo *, uint32_t access, 149292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_client *); 150f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, 151f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_bo **); 152f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd); 153f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 154f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nouveau_list { 155f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_list *prev; 156f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_list *next; 157f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 158292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 159292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bufref { 160292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_list thead; 161292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bo *bo; 162292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t packet; 163292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t flags; 164292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t data; 165292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t vor; 166292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t tor; 167292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t priv_data; 168292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs void *priv; 169292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 170292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 171292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bufctx { 172292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_client *client; 173292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_list head; 174292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_list pending; 175292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_list current; 176292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs int relocs; 177292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 178292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 179f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_bufctx_new(struct nouveau_client *, int bins, 180f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_bufctx **); 181292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_bufctx_del(struct nouveau_bufctx **); 182292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bufref * 183292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsnouveau_bufctx_refn(struct nouveau_bufctx *, int bin, 184292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bo *, uint32_t flags); 185292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bufref * 186292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsnouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, 187292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bo *, uint64_t data, uint32_t flags, 188292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t vor, uint32_t tor); 189292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_bufctx_reset(struct nouveau_bufctx *, int bin); 190292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 191292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_pushbuf_krec; 192292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_pushbuf { 193292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_client *client; 194292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_object *channel; 195292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bufctx *bufctx; 196292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs void (*kick_notify)(struct nouveau_pushbuf *); 197292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs void *user_priv; 198292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t rsvd_kick; 199292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t flags; 200292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t *cur; 201292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t *end; 202292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 203292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 204292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_pushbuf_refn { 205292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs struct nouveau_bo *bo; 206292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t flags; 207292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs}; 208292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 209f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, 210f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs int nr, uint32_t size, bool immediate, 211f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_pushbuf **); 212292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_pushbuf_del(struct nouveau_pushbuf **); 213f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, 214f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t relocs, uint32_t pushes); 215292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, 216292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint64_t offset, uint64_t length); 217f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_pushbuf_refn(struct nouveau_pushbuf *, 218f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_pushbuf_refn *, int nr); 219292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs/* Emits a reloc into the push buffer at the current position, you *must* 220292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs * have previously added the referenced buffer to a buffer context, and 221292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs * validated it against the current push buffer. 222292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs */ 223292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsvoid nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, 224292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t data, uint32_t flags, 225292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs uint32_t vor, uint32_t tor); 226f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_pushbuf_validate(struct nouveau_pushbuf *); 227292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsuint32_t nouveau_pushbuf_refd(struct nouveau_pushbuf *, struct nouveau_bo *); 228f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsint nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan); 229292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsstruct nouveau_bufctx * 230292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggsnouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *); 231292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs 232f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NOUVEAU_DEVICE_CLASS 0x80000000 233f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001 234f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NOUVEAU_NOTIFIER_CLASS 0x80000002 235f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 236f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nouveau_fifo { 237f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_object *object; 238f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t channel; 239f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t pushbuf; 240f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint64_t unused1[3]; 241f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 242f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 243f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nv04_fifo { 244f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_fifo base; 245f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t vram; 246f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t gart; 247f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t notify; 248f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 249f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 250f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nvc0_fifo { 251f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_fifo base; 252f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t notify; 253f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 254f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 255f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_GR 0x00000001 256f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_VP 0x00000002 257f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_PPP 0x00000004 258f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_BSP 0x00000008 259f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_CE0 0x00000010 260f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_CE1 0x00000020 261f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs#define NVE0_FIFO_ENGINE_ENC 0x00000040 262f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 263f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nve0_fifo { 264f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct { 265f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_fifo base; 266f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t notify; 267f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs }; 268f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t engine; 269f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 270f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs 271f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggsstruct nv04_notify { 272f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs struct nouveau_object *object; 273f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t offset; 274f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs uint32_t length; 275f208f2afdee6222ea8f6692a6ec4381cc999eb05Ben Skeggs}; 276292da616fe1f936ca78a3fa8e1b1b19883e343b6Ben Skeggs#endif 277