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