• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __NV50_DISP_CHAN_H__
3 #define __NV50_DISP_CHAN_H__
4 #define nv50_disp_chan(p) container_of((p), struct nv50_disp_chan, object)
5 #include "nv50.h"
6 
7 struct nv50_disp_chan {
8 	const struct nv50_disp_chan_func *func;
9 	const struct nv50_disp_chan_mthd *mthd;
10 	struct nv50_disp_root *root;
11 
12 	struct {
13 		int ctrl;
14 		int user;
15 	} chid;
16 	int head;
17 
18 	struct nvkm_object object;
19 };
20 
21 struct nv50_disp_chan_func {
22 	void *(*dtor)(struct nv50_disp_chan *);
23 	int (*init)(struct nv50_disp_chan *);
24 	void (*fini)(struct nv50_disp_chan *);
25 	int (*child_get)(struct nv50_disp_chan *, int index,
26 			 struct nvkm_oclass *);
27 	int (*child_new)(struct nv50_disp_chan *, const struct nvkm_oclass *,
28 			 void *data, u32 size, struct nvkm_object **);
29 };
30 
31 int nv50_disp_chan_ctor(const struct nv50_disp_chan_func *,
32 			const struct nv50_disp_chan_mthd *,
33 			struct nv50_disp_root *, int ctrl, int user, int head,
34 			const struct nvkm_oclass *, struct nv50_disp_chan *);
35 int nv50_disp_chan_new_(const struct nv50_disp_chan_func *,
36 			const struct nv50_disp_chan_mthd *,
37 			struct nv50_disp_root *, int ctrl, int user, int head,
38 			const struct nvkm_oclass *, struct nvkm_object **);
39 
40 extern const struct nv50_disp_chan_func nv50_disp_pioc_func;
41 extern const struct nv50_disp_chan_func gf119_disp_pioc_func;
42 
43 extern const struct nvkm_event_func nv50_disp_chan_uevent;
44 int  nv50_disp_chan_uevent_ctor(struct nvkm_object *, void *, u32,
45 				struct nvkm_notify *);
46 void nv50_disp_chan_uevent_send(struct nv50_disp *, int);
47 
48 extern const struct nvkm_event_func gf119_disp_chan_uevent;
49 
50 struct nv50_disp_mthd_list {
51 	u32 mthd;
52 	u32 addr;
53 	struct {
54 		u32 mthd;
55 		u32 addr;
56 		const char *name;
57 	} data[];
58 };
59 
60 struct nv50_disp_chan_mthd {
61 	const char *name;
62 	u32 addr;
63 	s32 prev;
64 	struct {
65 		const char *name;
66 		int nr;
67 		const struct nv50_disp_mthd_list *mthd;
68 	} data[];
69 };
70 
71 void nv50_disp_chan_mthd(struct nv50_disp_chan *, int debug);
72 
73 extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_base;
74 extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_sor;
75 extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_pior;
76 extern const struct nv50_disp_mthd_list nv50_disp_base_mthd_image;
77 
78 extern const struct nv50_disp_chan_mthd g84_disp_core_chan_mthd;
79 extern const struct nv50_disp_mthd_list g84_disp_core_mthd_dac;
80 extern const struct nv50_disp_mthd_list g84_disp_core_mthd_head;
81 extern const struct nv50_disp_chan_mthd g84_disp_base_chan_mthd;
82 extern const struct nv50_disp_chan_mthd g84_disp_ovly_chan_mthd;
83 
84 extern const struct nv50_disp_chan_mthd g94_disp_core_chan_mthd;
85 
86 extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_base;
87 extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_dac;
88 extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_sor;
89 extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_pior;
90 extern const struct nv50_disp_chan_mthd gf119_disp_base_chan_mthd;
91 
92 extern const struct nv50_disp_chan_mthd gk104_disp_core_chan_mthd;
93 extern const struct nv50_disp_chan_mthd gk104_disp_ovly_chan_mthd;
94 
95 struct nv50_disp_pioc_oclass {
96 	int (*ctor)(const struct nv50_disp_chan_func *,
97 		    const struct nv50_disp_chan_mthd *,
98 		    struct nv50_disp_root *, int ctrl, int user,
99 		    const struct nvkm_oclass *, void *data, u32 size,
100 		    struct nvkm_object **);
101 	struct nvkm_sclass base;
102 	const struct nv50_disp_chan_func *func;
103 	const struct nv50_disp_chan_mthd *mthd;
104 	struct {
105 		int ctrl;
106 		int user;
107 	} chid;
108 };
109 
110 extern const struct nv50_disp_pioc_oclass nv50_disp_oimm_oclass;
111 extern const struct nv50_disp_pioc_oclass nv50_disp_curs_oclass;
112 
113 extern const struct nv50_disp_pioc_oclass g84_disp_oimm_oclass;
114 extern const struct nv50_disp_pioc_oclass g84_disp_curs_oclass;
115 
116 extern const struct nv50_disp_pioc_oclass gt215_disp_oimm_oclass;
117 extern const struct nv50_disp_pioc_oclass gt215_disp_curs_oclass;
118 
119 extern const struct nv50_disp_pioc_oclass gf119_disp_oimm_oclass;
120 extern const struct nv50_disp_pioc_oclass gf119_disp_curs_oclass;
121 
122 extern const struct nv50_disp_pioc_oclass gk104_disp_oimm_oclass;
123 extern const struct nv50_disp_pioc_oclass gk104_disp_curs_oclass;
124 
125 extern const struct nv50_disp_pioc_oclass gp102_disp_oimm_oclass;
126 extern const struct nv50_disp_pioc_oclass gp102_disp_curs_oclass;
127 
128 int nv50_disp_curs_new(const struct nv50_disp_chan_func *,
129 		       const struct nv50_disp_chan_mthd *,
130 		       struct nv50_disp_root *, int ctrl, int user,
131 		       const struct nvkm_oclass *, void *data, u32 size,
132 		       struct nvkm_object **);
133 int nv50_disp_oimm_new(const struct nv50_disp_chan_func *,
134 		       const struct nv50_disp_chan_mthd *,
135 		       struct nv50_disp_root *, int ctrl, int user,
136 		       const struct nvkm_oclass *, void *data, u32 size,
137 		       struct nvkm_object **);
138 #endif
139