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