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