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