xref: /openbmc/linux/drivers/gpu/drm/nouveau/dispnv50/head.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
11590700dSBen Skeggs #ifndef __NV50_KMS_HEAD_H__
21590700dSBen Skeggs #define __NV50_KMS_HEAD_H__
31590700dSBen Skeggs #define nv50_head(c) container_of((c), struct nv50_head, base.base)
412885ecbSLyude Paul #include <linux/workqueue.h>
512885ecbSLyude Paul 
61590700dSBen Skeggs #include "disp.h"
71590700dSBen Skeggs #include "atom.h"
812885ecbSLyude Paul #include "crc.h"
9119608a7SBen Skeggs #include "lut.h"
101590700dSBen Skeggs 
111590700dSBen Skeggs #include "nouveau_crtc.h"
1212885ecbSLyude Paul #include "nouveau_encoder.h"
131590700dSBen Skeggs 
141590700dSBen Skeggs struct nv50_head {
151590700dSBen Skeggs 	const struct nv50_head_func *func;
161590700dSBen Skeggs 	struct nouveau_crtc base;
1712885ecbSLyude Paul 	struct nv50_crc crc;
18119608a7SBen Skeggs 	struct nv50_lut olut;
195ff0cb1cSLyude Paul 	struct nv50_msto *msto;
201590700dSBen Skeggs };
211590700dSBen Skeggs 
225ff0cb1cSLyude Paul struct nv50_head *nv50_head_create(struct drm_device *, int index);
2312885ecbSLyude Paul void nv50_head_flush_set(struct nv50_head *head, struct nv50_head_atom *asyh);
24e78b1b54SBen Skeggs void nv50_head_flush_set_wndw(struct nv50_head *head, struct nv50_head_atom *asyh);
2512885ecbSLyude Paul void nv50_head_flush_clr(struct nv50_head *head,
2612885ecbSLyude Paul 			 struct nv50_head_atom *asyh, bool flush);
271590700dSBen Skeggs 
281590700dSBen Skeggs struct nv50_head_func {
291f772f5aSBen Skeggs 	int (*view)(struct nv50_head *, struct nv50_head_atom *);
30caa966a7SBen Skeggs 	int (*mode)(struct nv50_head *, struct nv50_head_atom *);
3113199270SIlia Mirkin 	bool (*olut)(struct nv50_head *, struct nv50_head_atom *, int);
32*79af598aSLyude Paul 	bool (*ilut_check)(int size);
33cb55cd0cSBen Skeggs 	bool olut_identity;
3413199270SIlia Mirkin 	int  olut_size;
35a5df7630SBen Skeggs 	int (*olut_set)(struct nv50_head *, struct nv50_head_atom *);
364fbf03a3SBen Skeggs 	int (*olut_clr)(struct nv50_head *);
3709e1b78aSBen Skeggs 	void (*core_calc)(struct nv50_head *, struct nv50_head_atom *);
38a38870a2SBen Skeggs 	int (*core_set)(struct nv50_head *, struct nv50_head_atom *);
39aabe253eSBen Skeggs 	int (*core_clr)(struct nv50_head *);
4001d380abSBen Skeggs 	int (*curs_layout)(struct nv50_head *, struct nv50_wndw_atom *,
4101d380abSBen Skeggs 			   struct nv50_head_atom *);
4201d380abSBen Skeggs 	int (*curs_format)(struct nv50_head *, struct nv50_wndw_atom *,
4301d380abSBen Skeggs 			   struct nv50_head_atom *);
449549c14bSBen Skeggs 	int (*curs_set)(struct nv50_head *, struct nv50_head_atom *);
45bc5af56aSBen Skeggs 	int (*curs_clr)(struct nv50_head *);
4693f7f054SBen Skeggs 	int (*base)(struct nv50_head *, struct nv50_head_atom *);
47db2a2069SBen Skeggs 	int (*ovly)(struct nv50_head *, struct nv50_head_atom *);
482f819f2bSBen Skeggs 	int (*dither)(struct nv50_head *, struct nv50_head_atom *);
49246db5fdSBen Skeggs 	int (*procamp)(struct nv50_head *, struct nv50_head_atom *);
50ff37116eSBen Skeggs 	int (*or)(struct nv50_head *, struct nv50_head_atom *);
51dbdaf719SLyude Paul 	void (*static_wndw_map)(struct nv50_head *, struct nv50_head_atom *);
521590700dSBen Skeggs };
531590700dSBen Skeggs 
541590700dSBen Skeggs extern const struct nv50_head_func head507d;
551f772f5aSBen Skeggs int head507d_view(struct nv50_head *, struct nv50_head_atom *);
56caa966a7SBen Skeggs int head507d_mode(struct nv50_head *, struct nv50_head_atom *);
5713199270SIlia Mirkin bool head507d_olut(struct nv50_head *, struct nv50_head_atom *, int);
5809e1b78aSBen Skeggs void head507d_core_calc(struct nv50_head *, struct nv50_head_atom *);
59aabe253eSBen Skeggs int head507d_core_clr(struct nv50_head *);
6001d380abSBen Skeggs int head507d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *,
6101d380abSBen Skeggs 			 struct nv50_head_atom *);
6201d380abSBen Skeggs int head507d_curs_format(struct nv50_head *, struct nv50_wndw_atom *,
6301d380abSBen Skeggs 			 struct nv50_head_atom *);
6493f7f054SBen Skeggs int head507d_base(struct nv50_head *, struct nv50_head_atom *);
65db2a2069SBen Skeggs int head507d_ovly(struct nv50_head *, struct nv50_head_atom *);
662f819f2bSBen Skeggs int head507d_dither(struct nv50_head *, struct nv50_head_atom *);
67246db5fdSBen Skeggs int head507d_procamp(struct nv50_head *, struct nv50_head_atom *);
6809e1b78aSBen Skeggs 
6909e1b78aSBen Skeggs extern const struct nv50_head_func head827d;
7009e1b78aSBen Skeggs 
7109e1b78aSBen Skeggs extern const struct nv50_head_func head907d;
721f772f5aSBen Skeggs int head907d_view(struct nv50_head *, struct nv50_head_atom *);
73caa966a7SBen Skeggs int head907d_mode(struct nv50_head *, struct nv50_head_atom *);
7413199270SIlia Mirkin bool head907d_olut(struct nv50_head *, struct nv50_head_atom *, int);
75*79af598aSLyude Paul bool head907d_ilut_check(int size);
76a5df7630SBen Skeggs int head907d_olut_set(struct nv50_head *, struct nv50_head_atom *);
774fbf03a3SBen Skeggs int head907d_olut_clr(struct nv50_head *);
78a38870a2SBen Skeggs int head907d_core_set(struct nv50_head *, struct nv50_head_atom *);
79aabe253eSBen Skeggs int head907d_core_clr(struct nv50_head *);
809549c14bSBen Skeggs int head907d_curs_set(struct nv50_head *, struct nv50_head_atom *);
81bc5af56aSBen Skeggs int head907d_curs_clr(struct nv50_head *);
82db2a2069SBen Skeggs int head907d_ovly(struct nv50_head *, struct nv50_head_atom *);
83246db5fdSBen Skeggs int head907d_procamp(struct nv50_head *, struct nv50_head_atom *);
84ff37116eSBen Skeggs int head907d_or(struct nv50_head *, struct nv50_head_atom *);
8509e1b78aSBen Skeggs 
8609e1b78aSBen Skeggs extern const struct nv50_head_func head917d;
87facaed62SBen Skeggs int head917d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *,
88facaed62SBen Skeggs 			 struct nv50_head_atom *);
89facaed62SBen Skeggs 
90facaed62SBen Skeggs extern const struct nv50_head_func headc37d;
911f772f5aSBen Skeggs int headc37d_view(struct nv50_head *, struct nv50_head_atom *);
92563737c5SBen Skeggs int headc37d_curs_format(struct nv50_head *, struct nv50_wndw_atom *,
93563737c5SBen Skeggs 			 struct nv50_head_atom *);
949549c14bSBen Skeggs int headc37d_curs_set(struct nv50_head *, struct nv50_head_atom *);
95bc5af56aSBen Skeggs int headc37d_curs_clr(struct nv50_head *);
962f819f2bSBen Skeggs int headc37d_dither(struct nv50_head *, struct nv50_head_atom *);
97dbdaf719SLyude Paul void headc37d_static_wndw_map(struct nv50_head *, struct nv50_head_atom *);
98563737c5SBen Skeggs 
99563737c5SBen Skeggs extern const struct nv50_head_func headc57d;
1001590700dSBen Skeggs #endif
101