aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2015-08-20 14:54:16 +1000
committerBen Skeggs <bskeggs@redhat.com>2015-08-28 12:40:34 +1000
commit168c2e213d3a9b605856d3676d9e93733c8b37d3 (patch)
tree84d3e65ab9fa389130dfbca0e1289b76162b390d /drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
parentdrm/nouveau/subdev: implement support for new-style nvkm_subdev (diff)
downloadlinux-dev-168c2e213d3a9b605856d3676d9e93733c8b37d3.tar.xz
linux-dev-168c2e213d3a9b605856d3676d9e93733c8b37d3.zip
drm/nouveau/engine: implement support for new-style nvkm_engine
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/include/nvkm/core/engine.h')
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/engine.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
index f98980e15f26..8c67d755e5c1 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h
@@ -1,12 +1,18 @@
#ifndef __NVKM_ENGINE_H__
#define __NVKM_ENGINE_H__
#include <core/subdev.h>
+struct nvkm_device_oclass; /*XXX: DEV!ENG */
+struct nvkm_fifo_chan;
#define NV_ENGINE_(eng,var) (((var) << 8) | (eng))
#define NV_ENGINE(name,var) NV_ENGINE_(NVDEV_ENGINE_##name, (var))
struct nvkm_engine {
struct nvkm_subdev subdev;
+ const struct nvkm_engine_func *func;
+
+ int usecount;
+
struct nvkm_oclass *cclass;
struct nvkm_oclass *sclass;
@@ -17,6 +23,37 @@ struct nvkm_engine {
int (*tlb_flush)(struct nvkm_engine *);
};
+struct nvkm_engine_func {
+ void *(*dtor)(struct nvkm_engine *);
+ int (*oneinit)(struct nvkm_engine *);
+ int (*init)(struct nvkm_engine *);
+ int (*fini)(struct nvkm_engine *, bool suspend);
+ void (*intr)(struct nvkm_engine *);
+
+ struct {
+ int (*sclass)(struct nvkm_oclass *, int index,
+ const struct nvkm_device_oclass **);
+ } base;
+
+ struct {
+ int (*cclass)(struct nvkm_fifo_chan *,
+ const struct nvkm_oclass *,
+ struct nvkm_object **);
+ int (*sclass)(struct nvkm_oclass *, int index);
+ } fifo;
+
+ struct nvkm_sclass sclass[];
+};
+
+int nvkm_engine_ctor(const struct nvkm_engine_func *, struct nvkm_device *,
+ int index, u32 pmc_enable, bool enable,
+ struct nvkm_engine *);
+int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *,
+ int index, u32 pmc_enable, bool enable,
+ struct nvkm_engine **);
+struct nvkm_engine *nvkm_engine_ref(struct nvkm_engine *);
+void nvkm_engine_unref(struct nvkm_engine **);
+
static inline struct nvkm_engine *
nv_engine(void *obj)
{