diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2015-08-20 06:54:19 +0200 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-08-28 04:40:40 +0200 |
commit | 8f0649b5c6e70ec18122255690e39f010c12a614 (patch) | |
tree | c6d001b9db9fdc0db86488d79dec2a25d0d2bf0f /drivers/gpu/drm/nouveau/include/nvkm/engine | |
parent | drm/nouveau/fifo: split user classes out from engine implementations (diff) | |
download | linux-8f0649b5c6e70ec18122255690e39f010c12a614.tar.xz linux-8f0649b5c6e70ec18122255690e39f010c12a614.zip |
drm/nouveau/fifo: convert user classes to new-style nvkm_object
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/include/nvkm/engine')
-rw-r--r-- | drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index ac97072dcfef..d9e494ba5033 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h @@ -1,25 +1,39 @@ #ifndef __NVKM_FIFO_H__ #define __NVKM_FIFO_H__ -#include <core/namedb.h> +#define nvkm_fifo_chan(p) container_of((p), struct nvkm_fifo_chan, object) +#define nvkm_fifo(p) container_of((p), struct nvkm_fifo, engine) +#include <core/engine.h> +#include <core/event.h> + +#define NVKM_FIFO_CHID_NR 4096 + +struct nvkm_fifo_engn { + struct nvkm_object *object; + int refcount; + int usecount; +}; struct nvkm_fifo_chan { - struct nvkm_namedb namedb; - struct nvkm_gpuobj *pushgpu; + const struct nvkm_fifo_chan_func *func; + struct nvkm_fifo *fifo; + u64 engines; + struct nvkm_object object; + + struct list_head head; + u16 chid; + struct nvkm_gpuobj *inst; + struct nvkm_gpuobj *push; + struct nvkm_vm *vm; void __iomem *user; u64 addr; u32 size; - u16 chid; - u64 inst; + + struct nvkm_fifo_engn engn[NVDEV_SUBDEV_NR]; }; -static inline struct nvkm_fifo_chan * -nvkm_fifo_chan(void *obj) -{ - return (void *)nv_namedb(obj); -} +extern const struct nvkm_object_func nvkm_fifo_chan_func; #include <core/gpuobj.h> - struct nvkm_fifo_base { struct nvkm_gpuobj gpuobj; }; @@ -39,25 +53,27 @@ struct nvkm_fifo_base { #define _nvkm_fifo_context_rd32 _nvkm_gpuobj_rd32 #define _nvkm_fifo_context_wr32 _nvkm_gpuobj_wr32 -#include <core/engine.h> -#include <core/event.h> - struct nvkm_fifo { struct nvkm_engine engine; + const struct nvkm_fifo_func *func; struct nvkm_event cevent; /* channel creation event */ struct nvkm_event uevent; /* async user trigger */ - struct nvkm_object **channel; + DECLARE_BITMAP(mask, NVKM_FIFO_CHID_NR); + int nr; + struct list_head chan; spinlock_t lock; - u16 min; - u16 max; - int (*chid)(struct nvkm_fifo *, struct nvkm_object *); void (*pause)(struct nvkm_fifo *, unsigned long *); void (*start)(struct nvkm_fifo *, unsigned long *); }; +struct nvkm_fifo_func { + void *(*dtor)(struct nvkm_fifo *); + const struct nvkm_fifo_chan_oclass *chan[]; +}; + void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags, struct nvkm_fifo_chan **); struct nvkm_fifo_chan * @@ -65,12 +81,6 @@ nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); -static inline struct nvkm_fifo * -nvkm_fifo(void *obj) -{ - return (void *)nvkm_engine(obj, NVDEV_ENGINE_FIFO); -} - #define nvkm_fifo_create(o,e,c,fc,lc,d) \ nvkm_fifo_create_((o), (e), (c), (fc), (lc), sizeof(**d), (void **)d) #define nvkm_fifo_init(p) \ @@ -82,8 +92,6 @@ int nvkm_fifo_create_(struct nvkm_object *, struct nvkm_object *, struct nvkm_oclass *, int min, int max, int size, void **); void nvkm_fifo_destroy(struct nvkm_fifo *); -const char * -nvkm_client_name_for_fifo_chid(struct nvkm_fifo *fifo, u32 chid); #define _nvkm_fifo_init _nvkm_engine_init #define _nvkm_fifo_fini _nvkm_engine_fini |