linux/drivers/gpu/drm/nouveau/include/nvkm/core/object.h
<<
>>
Prefs
   1#ifndef __NVKM_OBJECT_H__
   2#define __NVKM_OBJECT_H__
   3#include <core/os.h>
   4#include <core/debug.h>
   5struct nvkm_event;
   6struct nvkm_gpuobj;
   7struct nvkm_oclass;
   8
   9struct nvkm_object {
  10        const struct nvkm_object_func *func;
  11        struct nvkm_client *client;
  12        struct nvkm_engine *engine;
  13        s32 oclass;
  14        u32 handle;
  15
  16        struct list_head head;
  17        struct list_head tree;
  18        u8  route;
  19        u64 token;
  20        u64 object;
  21        struct rb_node node;
  22};
  23
  24struct nvkm_object_func {
  25        void *(*dtor)(struct nvkm_object *);
  26        int (*init)(struct nvkm_object *);
  27        int (*fini)(struct nvkm_object *, bool suspend);
  28        int (*mthd)(struct nvkm_object *, u32 mthd, void *data, u32 size);
  29        int (*ntfy)(struct nvkm_object *, u32 mthd, struct nvkm_event **);
  30        int (*map)(struct nvkm_object *, u64 *addr, u32 *size);
  31        int (*rd08)(struct nvkm_object *, u64 addr, u8 *data);
  32        int (*rd16)(struct nvkm_object *, u64 addr, u16 *data);
  33        int (*rd32)(struct nvkm_object *, u64 addr, u32 *data);
  34        int (*wr08)(struct nvkm_object *, u64 addr, u8 data);
  35        int (*wr16)(struct nvkm_object *, u64 addr, u16 data);
  36        int (*wr32)(struct nvkm_object *, u64 addr, u32 data);
  37        int (*bind)(struct nvkm_object *, struct nvkm_gpuobj *, int align,
  38                    struct nvkm_gpuobj **);
  39        int (*sclass)(struct nvkm_object *, int index, struct nvkm_oclass *);
  40};
  41
  42void nvkm_object_ctor(const struct nvkm_object_func *,
  43                      const struct nvkm_oclass *, struct nvkm_object *);
  44int nvkm_object_new_(const struct nvkm_object_func *,
  45                     const struct nvkm_oclass *, void *data, u32 size,
  46                     struct nvkm_object **);
  47int nvkm_object_new(const struct nvkm_oclass *, void *data, u32 size,
  48                    struct nvkm_object **);
  49void nvkm_object_del(struct nvkm_object **);
  50void *nvkm_object_dtor(struct nvkm_object *);
  51int nvkm_object_init(struct nvkm_object *);
  52int nvkm_object_fini(struct nvkm_object *, bool suspend);
  53int nvkm_object_mthd(struct nvkm_object *, u32 mthd, void *data, u32 size);
  54int nvkm_object_ntfy(struct nvkm_object *, u32 mthd, struct nvkm_event **);
  55int nvkm_object_map(struct nvkm_object *, u64 *addr, u32 *size);
  56int nvkm_object_rd08(struct nvkm_object *, u64 addr, u8  *data);
  57int nvkm_object_rd16(struct nvkm_object *, u64 addr, u16 *data);
  58int nvkm_object_rd32(struct nvkm_object *, u64 addr, u32 *data);
  59int nvkm_object_wr08(struct nvkm_object *, u64 addr, u8   data);
  60int nvkm_object_wr16(struct nvkm_object *, u64 addr, u16  data);
  61int nvkm_object_wr32(struct nvkm_object *, u64 addr, u32  data);
  62int nvkm_object_bind(struct nvkm_object *, struct nvkm_gpuobj *, int align,
  63                     struct nvkm_gpuobj **);
  64
  65struct nvkm_sclass {
  66        int minver;
  67        int maxver;
  68        s32 oclass;
  69        const struct nvkm_object_func *func;
  70        int (*ctor)(const struct nvkm_oclass *, void *data, u32 size,
  71                    struct nvkm_object **);
  72};
  73
  74struct nvkm_oclass {
  75        int (*ctor)(const struct nvkm_oclass *, void *data, u32 size,
  76                    struct nvkm_object **);
  77        struct nvkm_sclass base;
  78        const void *priv;
  79        const void *engn;
  80        u32 handle;
  81        u8  route;
  82        u64 token;
  83        u64 object;
  84        struct nvkm_client *client;
  85        struct nvkm_object *parent;
  86        struct nvkm_engine *engine;
  87};
  88#endif
  89