object.h revision 1.3
1/*	$NetBSD: object.h,v 1.3 2018/08/27 07:35:56 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};
25
26struct nvkm_object_func {
27	void *(*dtor)(struct nvkm_object *);
28	int (*init)(struct nvkm_object *);
29	int (*fini)(struct nvkm_object *, bool suspend);
30	int (*mthd)(struct nvkm_object *, u32 mthd, void *data, u32 size);
31	int (*ntfy)(struct nvkm_object *, u32 mthd, struct nvkm_event **);
32#ifdef __NetBSD__
33	int (*map)(struct nvkm_object *, bus_space_tag_t *tagp, u64 *addr,
34	    u32 *size);
35#else
36	int (*map)(struct nvkm_object *, u64 *addr, u32 *size);
37#endif
38	int (*rd08)(struct nvkm_object *, u64 addr, u8 *data);
39	int (*rd16)(struct nvkm_object *, u64 addr, u16 *data);
40	int (*rd32)(struct nvkm_object *, u64 addr, u32 *data);
41	int (*wr08)(struct nvkm_object *, u64 addr, u8 data);
42	int (*wr16)(struct nvkm_object *, u64 addr, u16 data);
43	int (*wr32)(struct nvkm_object *, u64 addr, u32 data);
44	int (*bind)(struct nvkm_object *, struct nvkm_gpuobj *, int align,
45		    struct nvkm_gpuobj **);
46	int (*sclass)(struct nvkm_object *, int index, struct nvkm_oclass *);
47};
48
49void nvkm_object_ctor(const struct nvkm_object_func *,
50		      const struct nvkm_oclass *, struct nvkm_object *);
51int nvkm_object_new_(const struct nvkm_object_func *,
52		     const struct nvkm_oclass *, void *data, u32 size,
53		     struct nvkm_object **);
54int nvkm_object_new(const struct nvkm_oclass *, void *data, u32 size,
55		    struct nvkm_object **);
56void nvkm_object_del(struct nvkm_object **);
57void *nvkm_object_dtor(struct nvkm_object *);
58int nvkm_object_init(struct nvkm_object *);
59int nvkm_object_fini(struct nvkm_object *, bool suspend);
60int nvkm_object_mthd(struct nvkm_object *, u32 mthd, void *data, u32 size);
61int nvkm_object_ntfy(struct nvkm_object *, u32 mthd, struct nvkm_event **);
62int nvkm_object_map(struct nvkm_object *, bus_space_tag_t *, u64 *addr,
63    u32 *size);
64int nvkm_object_rd08(struct nvkm_object *, u64 addr, u8  *data);
65int nvkm_object_rd16(struct nvkm_object *, u64 addr, u16 *data);
66int nvkm_object_rd32(struct nvkm_object *, u64 addr, u32 *data);
67int nvkm_object_wr08(struct nvkm_object *, u64 addr, u8   data);
68int nvkm_object_wr16(struct nvkm_object *, u64 addr, u16  data);
69int nvkm_object_wr32(struct nvkm_object *, u64 addr, u32  data);
70int nvkm_object_bind(struct nvkm_object *, struct nvkm_gpuobj *, int align,
71		     struct nvkm_gpuobj **);
72
73struct nvkm_sclass {
74	int minver;
75	int maxver;
76	s32 oclass;
77	const struct nvkm_object_func *func;
78	int (*ctor)(const struct nvkm_oclass *, void *data, u32 size,
79		    struct nvkm_object **);
80};
81
82struct nvkm_oclass {
83	int (*ctor)(const struct nvkm_oclass *, void *data, u32 size,
84		    struct nvkm_object **);
85	struct nvkm_sclass base;
86	const void *priv;
87	const void *engn;
88	u32 handle;
89	u8  route;
90	u64 token;
91	u64 object;
92	struct nvkm_client *client;
93	struct nvkm_object *parent;
94	struct nvkm_engine *engine;
95};
96#endif
97