xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/nouveau/dispnv50/head.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __NV50_KMS_HEAD_H__
2*4882a593Smuzhiyun #define __NV50_KMS_HEAD_H__
3*4882a593Smuzhiyun #define nv50_head(c) container_of((c), struct nv50_head, base.base)
4*4882a593Smuzhiyun #include <linux/workqueue.h>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include "disp.h"
7*4882a593Smuzhiyun #include "atom.h"
8*4882a593Smuzhiyun #include "crc.h"
9*4882a593Smuzhiyun #include "lut.h"
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "nouveau_crtc.h"
12*4882a593Smuzhiyun #include "nouveau_encoder.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun struct nv50_head {
15*4882a593Smuzhiyun 	const struct nv50_head_func *func;
16*4882a593Smuzhiyun 	struct nouveau_crtc base;
17*4882a593Smuzhiyun 	struct nv50_crc crc;
18*4882a593Smuzhiyun 	struct nv50_lut olut;
19*4882a593Smuzhiyun 	struct nv50_msto *msto;
20*4882a593Smuzhiyun };
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun struct nv50_head *nv50_head_create(struct drm_device *, int index);
23*4882a593Smuzhiyun void nv50_head_flush_set(struct nv50_head *head, struct nv50_head_atom *asyh);
24*4882a593Smuzhiyun void nv50_head_flush_set_wndw(struct nv50_head *head, struct nv50_head_atom *asyh);
25*4882a593Smuzhiyun void nv50_head_flush_clr(struct nv50_head *head,
26*4882a593Smuzhiyun 			 struct nv50_head_atom *asyh, bool flush);
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun struct nv50_head_func {
29*4882a593Smuzhiyun 	int (*view)(struct nv50_head *, struct nv50_head_atom *);
30*4882a593Smuzhiyun 	int (*mode)(struct nv50_head *, struct nv50_head_atom *);
31*4882a593Smuzhiyun 	bool (*olut)(struct nv50_head *, struct nv50_head_atom *, int);
32*4882a593Smuzhiyun 	bool olut_identity;
33*4882a593Smuzhiyun 	int  olut_size;
34*4882a593Smuzhiyun 	int (*olut_set)(struct nv50_head *, struct nv50_head_atom *);
35*4882a593Smuzhiyun 	int (*olut_clr)(struct nv50_head *);
36*4882a593Smuzhiyun 	void (*core_calc)(struct nv50_head *, struct nv50_head_atom *);
37*4882a593Smuzhiyun 	int (*core_set)(struct nv50_head *, struct nv50_head_atom *);
38*4882a593Smuzhiyun 	int (*core_clr)(struct nv50_head *);
39*4882a593Smuzhiyun 	int (*curs_layout)(struct nv50_head *, struct nv50_wndw_atom *,
40*4882a593Smuzhiyun 			   struct nv50_head_atom *);
41*4882a593Smuzhiyun 	int (*curs_format)(struct nv50_head *, struct nv50_wndw_atom *,
42*4882a593Smuzhiyun 			   struct nv50_head_atom *);
43*4882a593Smuzhiyun 	int (*curs_set)(struct nv50_head *, struct nv50_head_atom *);
44*4882a593Smuzhiyun 	int (*curs_clr)(struct nv50_head *);
45*4882a593Smuzhiyun 	int (*base)(struct nv50_head *, struct nv50_head_atom *);
46*4882a593Smuzhiyun 	int (*ovly)(struct nv50_head *, struct nv50_head_atom *);
47*4882a593Smuzhiyun 	int (*dither)(struct nv50_head *, struct nv50_head_atom *);
48*4882a593Smuzhiyun 	int (*procamp)(struct nv50_head *, struct nv50_head_atom *);
49*4882a593Smuzhiyun 	int (*or)(struct nv50_head *, struct nv50_head_atom *);
50*4882a593Smuzhiyun 	void (*static_wndw_map)(struct nv50_head *, struct nv50_head_atom *);
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun extern const struct nv50_head_func head507d;
54*4882a593Smuzhiyun int head507d_view(struct nv50_head *, struct nv50_head_atom *);
55*4882a593Smuzhiyun int head507d_mode(struct nv50_head *, struct nv50_head_atom *);
56*4882a593Smuzhiyun bool head507d_olut(struct nv50_head *, struct nv50_head_atom *, int);
57*4882a593Smuzhiyun void head507d_core_calc(struct nv50_head *, struct nv50_head_atom *);
58*4882a593Smuzhiyun int head507d_core_clr(struct nv50_head *);
59*4882a593Smuzhiyun int head507d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *,
60*4882a593Smuzhiyun 			 struct nv50_head_atom *);
61*4882a593Smuzhiyun int head507d_curs_format(struct nv50_head *, struct nv50_wndw_atom *,
62*4882a593Smuzhiyun 			 struct nv50_head_atom *);
63*4882a593Smuzhiyun int head507d_base(struct nv50_head *, struct nv50_head_atom *);
64*4882a593Smuzhiyun int head507d_ovly(struct nv50_head *, struct nv50_head_atom *);
65*4882a593Smuzhiyun int head507d_dither(struct nv50_head *, struct nv50_head_atom *);
66*4882a593Smuzhiyun int head507d_procamp(struct nv50_head *, struct nv50_head_atom *);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun extern const struct nv50_head_func head827d;
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun extern const struct nv50_head_func head907d;
71*4882a593Smuzhiyun int head907d_view(struct nv50_head *, struct nv50_head_atom *);
72*4882a593Smuzhiyun int head907d_mode(struct nv50_head *, struct nv50_head_atom *);
73*4882a593Smuzhiyun bool head907d_olut(struct nv50_head *, struct nv50_head_atom *, int);
74*4882a593Smuzhiyun int head907d_olut_set(struct nv50_head *, struct nv50_head_atom *);
75*4882a593Smuzhiyun int head907d_olut_clr(struct nv50_head *);
76*4882a593Smuzhiyun int head907d_core_set(struct nv50_head *, struct nv50_head_atom *);
77*4882a593Smuzhiyun int head907d_core_clr(struct nv50_head *);
78*4882a593Smuzhiyun int head907d_curs_set(struct nv50_head *, struct nv50_head_atom *);
79*4882a593Smuzhiyun int head907d_curs_clr(struct nv50_head *);
80*4882a593Smuzhiyun int head907d_ovly(struct nv50_head *, struct nv50_head_atom *);
81*4882a593Smuzhiyun int head907d_procamp(struct nv50_head *, struct nv50_head_atom *);
82*4882a593Smuzhiyun int head907d_or(struct nv50_head *, struct nv50_head_atom *);
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun extern const struct nv50_head_func head917d;
85*4882a593Smuzhiyun int head917d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *,
86*4882a593Smuzhiyun 			 struct nv50_head_atom *);
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun extern const struct nv50_head_func headc37d;
89*4882a593Smuzhiyun int headc37d_view(struct nv50_head *, struct nv50_head_atom *);
90*4882a593Smuzhiyun int headc37d_curs_format(struct nv50_head *, struct nv50_wndw_atom *,
91*4882a593Smuzhiyun 			 struct nv50_head_atom *);
92*4882a593Smuzhiyun int headc37d_curs_set(struct nv50_head *, struct nv50_head_atom *);
93*4882a593Smuzhiyun int headc37d_curs_clr(struct nv50_head *);
94*4882a593Smuzhiyun int headc37d_dither(struct nv50_head *, struct nv50_head_atom *);
95*4882a593Smuzhiyun void headc37d_static_wndw_map(struct nv50_head *, struct nv50_head_atom *);
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun extern const struct nv50_head_func headc57d;
98*4882a593Smuzhiyun #endif
99