1 #ifndef __NVKM_GR_H__
2 #define __NVKM_GR_H__
3 #include <core/engine.h>
4 
5 struct nvkm_gr {
6 	struct nvkm_engine engine;
7 	const struct nvkm_gr_func *func;
8 
9 	/* Returns chipset-specific counts of units packed into an u64.
10 	 */
11 	u64 (*units)(struct nvkm_gr *);
12 };
13 
14 #define nvkm_gr_create(p,e,c,y,d)                                        \
15 	nvkm_gr_create_((p), (e), (c), (y), sizeof(**d), (void **)(d))
16 int
17 nvkm_gr_create_(struct nvkm_object *parent, struct nvkm_object *engine,
18 		struct nvkm_oclass *oclass, bool enable,
19 		int length, void **pobject);
20 #define nvkm_gr_destroy(d)                                               \
21 	nvkm_engine_destroy(&(d)->engine)
22 #define nvkm_gr_init(d)                                                  \
23 	nvkm_engine_init_old(&(d)->engine)
24 #define nvkm_gr_fini(d,s)                                                \
25 	nvkm_engine_fini_old(&(d)->engine, (s))
26 
27 #define _nvkm_gr_dtor _nvkm_engine_dtor
28 #define _nvkm_gr_init _nvkm_engine_init
29 #define _nvkm_gr_fini _nvkm_engine_fini
30 
31 extern struct nvkm_oclass nv04_gr_oclass;
32 extern struct nvkm_oclass nv10_gr_oclass;
33 extern struct nvkm_oclass nv20_gr_oclass;
34 extern struct nvkm_oclass nv25_gr_oclass;
35 extern struct nvkm_oclass nv2a_gr_oclass;
36 extern struct nvkm_oclass nv30_gr_oclass;
37 extern struct nvkm_oclass nv34_gr_oclass;
38 extern struct nvkm_oclass nv35_gr_oclass;
39 extern struct nvkm_oclass nv40_gr_oclass;
40 extern struct nvkm_oclass nv50_gr_oclass;
41 extern struct nvkm_oclass *gf100_gr_oclass;
42 extern struct nvkm_oclass *gf108_gr_oclass;
43 extern struct nvkm_oclass *gf104_gr_oclass;
44 extern struct nvkm_oclass *gf110_gr_oclass;
45 extern struct nvkm_oclass *gf117_gr_oclass;
46 extern struct nvkm_oclass *gf119_gr_oclass;
47 extern struct nvkm_oclass *gk104_gr_oclass;
48 extern struct nvkm_oclass *gk20a_gr_oclass;
49 extern struct nvkm_oclass *gk110_gr_oclass;
50 extern struct nvkm_oclass *gk110b_gr_oclass;
51 extern struct nvkm_oclass *gk208_gr_oclass;
52 extern struct nvkm_oclass *gm107_gr_oclass;
53 extern struct nvkm_oclass *gm204_gr_oclass;
54 extern struct nvkm_oclass *gm206_gr_oclass;
55 extern struct nvkm_oclass *gm20b_gr_oclass;
56 
57 #include <core/enum.h>
58 
59 extern const struct nvkm_bitfield nv04_gr_nsource[];
60 bool nv04_gr_idle(struct nvkm_gr *);
61 
62 extern const struct nvkm_bitfield nv10_gr_intr_name[];
63 extern const struct nvkm_bitfield nv10_gr_nstatus[];
64 
65 extern const struct nvkm_enum nv50_data_error_names[];
66 #endif
67