1 #ifndef __NV50_DISP_DMAC_H__
2 #define __NV50_DISP_DMAC_H__
3 #define nv50_disp_dmac(p) container_of((p), struct nv50_disp_dmac, base)
4 #include "channv50.h"
5 
6 struct nv50_disp_dmac {
7 	const struct nv50_disp_dmac_func *func;
8 	struct nv50_disp_chan base;
9 	u32 push;
10 };
11 
12 struct nv50_disp_dmac_func {
13 	int  (*init)(struct nv50_disp_dmac *);
14 	void (*fini)(struct nv50_disp_dmac *);
15 	int  (*bind)(struct nv50_disp_dmac *, struct nvkm_object *, u32 handle);
16 };
17 
18 int nv50_disp_dmac_new_(const struct nv50_disp_dmac_func *,
19 			const struct nv50_disp_chan_mthd *,
20 			struct nv50_disp_root *, int chid, int head, u64 push,
21 			const struct nvkm_oclass *, struct nvkm_object **);
22 
23 extern const struct nv50_disp_dmac_func nv50_disp_dmac_func;
24 int nv50_disp_dmac_bind(struct nv50_disp_dmac *, struct nvkm_object *, u32);
25 extern const struct nv50_disp_dmac_func nv50_disp_core_func;
26 
27 extern const struct nv50_disp_dmac_func gf119_disp_dmac_func;
28 int gf119_disp_dmac_bind(struct nv50_disp_dmac *, struct nvkm_object *, u32);
29 extern const struct nv50_disp_dmac_func gf119_disp_core_func;
30 
31 struct nv50_disp_dmac_oclass {
32 	int (*ctor)(const struct nv50_disp_dmac_func *,
33 		    const struct nv50_disp_chan_mthd *,
34 		    struct nv50_disp_root *, int chid,
35 		    const struct nvkm_oclass *, void *data, u32 size,
36 		    struct nvkm_object **);
37 	struct nvkm_sclass base;
38 	const struct nv50_disp_dmac_func *func;
39 	const struct nv50_disp_chan_mthd *mthd;
40 	int chid;
41 };
42 
43 int nv50_disp_core_new(const struct nv50_disp_dmac_func *,
44 		       const struct nv50_disp_chan_mthd *,
45 		       struct nv50_disp_root *, int chid,
46 		       const struct nvkm_oclass *oclass, void *data, u32 size,
47 		       struct nvkm_object **);
48 int nv50_disp_base_new(const struct nv50_disp_dmac_func *,
49 		       const struct nv50_disp_chan_mthd *,
50 		       struct nv50_disp_root *, int chid,
51 		       const struct nvkm_oclass *oclass, void *data, u32 size,
52 		       struct nvkm_object **);
53 int nv50_disp_ovly_new(const struct nv50_disp_dmac_func *,
54 		       const struct nv50_disp_chan_mthd *,
55 		       struct nv50_disp_root *, int chid,
56 		       const struct nvkm_oclass *oclass, void *data, u32 size,
57 		       struct nvkm_object **);
58 
59 extern const struct nv50_disp_dmac_oclass nv50_disp_core_oclass;
60 extern const struct nv50_disp_dmac_oclass nv50_disp_base_oclass;
61 extern const struct nv50_disp_dmac_oclass nv50_disp_ovly_oclass;
62 
63 extern const struct nv50_disp_dmac_oclass g84_disp_core_oclass;
64 extern const struct nv50_disp_dmac_oclass g84_disp_base_oclass;
65 extern const struct nv50_disp_dmac_oclass g84_disp_ovly_oclass;
66 
67 extern const struct nv50_disp_dmac_oclass g94_disp_core_oclass;
68 
69 extern const struct nv50_disp_dmac_oclass gt200_disp_core_oclass;
70 extern const struct nv50_disp_dmac_oclass gt200_disp_base_oclass;
71 extern const struct nv50_disp_dmac_oclass gt200_disp_ovly_oclass;
72 
73 extern const struct nv50_disp_dmac_oclass gt215_disp_core_oclass;
74 extern const struct nv50_disp_dmac_oclass gt215_disp_base_oclass;
75 extern const struct nv50_disp_dmac_oclass gt215_disp_ovly_oclass;
76 
77 extern const struct nv50_disp_dmac_oclass gf119_disp_core_oclass;
78 extern const struct nv50_disp_dmac_oclass gf119_disp_base_oclass;
79 extern const struct nv50_disp_dmac_oclass gf119_disp_ovly_oclass;
80 
81 extern const struct nv50_disp_dmac_oclass gk104_disp_core_oclass;
82 extern const struct nv50_disp_dmac_oclass gk104_disp_base_oclass;
83 extern const struct nv50_disp_dmac_oclass gk104_disp_ovly_oclass;
84 
85 extern const struct nv50_disp_dmac_oclass gk110_disp_core_oclass;
86 extern const struct nv50_disp_dmac_oclass gk110_disp_base_oclass;
87 
88 extern const struct nv50_disp_dmac_oclass gm107_disp_core_oclass;
89 
90 extern const struct nv50_disp_dmac_oclass gm204_disp_core_oclass;
91 #endif
92