162306a36Sopenharmony_ci#ifndef __NV50_KMS_HEAD_H__ 262306a36Sopenharmony_ci#define __NV50_KMS_HEAD_H__ 362306a36Sopenharmony_ci#define nv50_head(c) container_of((c), struct nv50_head, base.base) 462306a36Sopenharmony_ci#include <linux/workqueue.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include "disp.h" 762306a36Sopenharmony_ci#include "atom.h" 862306a36Sopenharmony_ci#include "crc.h" 962306a36Sopenharmony_ci#include "lut.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "nouveau_crtc.h" 1262306a36Sopenharmony_ci#include "nouveau_encoder.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct nv50_head { 1562306a36Sopenharmony_ci const struct nv50_head_func *func; 1662306a36Sopenharmony_ci struct nouveau_crtc base; 1762306a36Sopenharmony_ci struct nv50_crc crc; 1862306a36Sopenharmony_ci struct nv50_lut olut; 1962306a36Sopenharmony_ci struct nv50_msto *msto; 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct nv50_head *nv50_head_create(struct drm_device *, int index); 2362306a36Sopenharmony_civoid nv50_head_flush_set(struct nv50_head *head, struct nv50_head_atom *asyh); 2462306a36Sopenharmony_civoid nv50_head_flush_set_wndw(struct nv50_head *head, struct nv50_head_atom *asyh); 2562306a36Sopenharmony_civoid nv50_head_flush_clr(struct nv50_head *head, 2662306a36Sopenharmony_ci struct nv50_head_atom *asyh, bool flush); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct nv50_head_func { 2962306a36Sopenharmony_ci int (*view)(struct nv50_head *, struct nv50_head_atom *); 3062306a36Sopenharmony_ci int (*mode)(struct nv50_head *, struct nv50_head_atom *); 3162306a36Sopenharmony_ci bool (*olut)(struct nv50_head *, struct nv50_head_atom *, int); 3262306a36Sopenharmony_ci bool (*ilut_check)(int size); 3362306a36Sopenharmony_ci bool olut_identity; 3462306a36Sopenharmony_ci int olut_size; 3562306a36Sopenharmony_ci int (*olut_set)(struct nv50_head *, struct nv50_head_atom *); 3662306a36Sopenharmony_ci int (*olut_clr)(struct nv50_head *); 3762306a36Sopenharmony_ci void (*core_calc)(struct nv50_head *, struct nv50_head_atom *); 3862306a36Sopenharmony_ci int (*core_set)(struct nv50_head *, struct nv50_head_atom *); 3962306a36Sopenharmony_ci int (*core_clr)(struct nv50_head *); 4062306a36Sopenharmony_ci int (*curs_layout)(struct nv50_head *, struct nv50_wndw_atom *, 4162306a36Sopenharmony_ci struct nv50_head_atom *); 4262306a36Sopenharmony_ci int (*curs_format)(struct nv50_head *, struct nv50_wndw_atom *, 4362306a36Sopenharmony_ci struct nv50_head_atom *); 4462306a36Sopenharmony_ci int (*curs_set)(struct nv50_head *, struct nv50_head_atom *); 4562306a36Sopenharmony_ci int (*curs_clr)(struct nv50_head *); 4662306a36Sopenharmony_ci int (*base)(struct nv50_head *, struct nv50_head_atom *); 4762306a36Sopenharmony_ci int (*ovly)(struct nv50_head *, struct nv50_head_atom *); 4862306a36Sopenharmony_ci int (*dither)(struct nv50_head *, struct nv50_head_atom *); 4962306a36Sopenharmony_ci int (*procamp)(struct nv50_head *, struct nv50_head_atom *); 5062306a36Sopenharmony_ci int (*or)(struct nv50_head *, struct nv50_head_atom *); 5162306a36Sopenharmony_ci void (*static_wndw_map)(struct nv50_head *, struct nv50_head_atom *); 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciextern const struct nv50_head_func head507d; 5562306a36Sopenharmony_ciint head507d_view(struct nv50_head *, struct nv50_head_atom *); 5662306a36Sopenharmony_ciint head507d_mode(struct nv50_head *, struct nv50_head_atom *); 5762306a36Sopenharmony_cibool head507d_olut(struct nv50_head *, struct nv50_head_atom *, int); 5862306a36Sopenharmony_civoid head507d_core_calc(struct nv50_head *, struct nv50_head_atom *); 5962306a36Sopenharmony_ciint head507d_core_clr(struct nv50_head *); 6062306a36Sopenharmony_ciint head507d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *, 6162306a36Sopenharmony_ci struct nv50_head_atom *); 6262306a36Sopenharmony_ciint head507d_curs_format(struct nv50_head *, struct nv50_wndw_atom *, 6362306a36Sopenharmony_ci struct nv50_head_atom *); 6462306a36Sopenharmony_ciint head507d_base(struct nv50_head *, struct nv50_head_atom *); 6562306a36Sopenharmony_ciint head507d_ovly(struct nv50_head *, struct nv50_head_atom *); 6662306a36Sopenharmony_ciint head507d_dither(struct nv50_head *, struct nv50_head_atom *); 6762306a36Sopenharmony_ciint head507d_procamp(struct nv50_head *, struct nv50_head_atom *); 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciextern const struct nv50_head_func head827d; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciextern const struct nv50_head_func head907d; 7262306a36Sopenharmony_ciint head907d_view(struct nv50_head *, struct nv50_head_atom *); 7362306a36Sopenharmony_ciint head907d_mode(struct nv50_head *, struct nv50_head_atom *); 7462306a36Sopenharmony_cibool head907d_olut(struct nv50_head *, struct nv50_head_atom *, int); 7562306a36Sopenharmony_cibool head907d_ilut_check(int size); 7662306a36Sopenharmony_ciint head907d_olut_set(struct nv50_head *, struct nv50_head_atom *); 7762306a36Sopenharmony_ciint head907d_olut_clr(struct nv50_head *); 7862306a36Sopenharmony_ciint head907d_core_set(struct nv50_head *, struct nv50_head_atom *); 7962306a36Sopenharmony_ciint head907d_core_clr(struct nv50_head *); 8062306a36Sopenharmony_ciint head907d_curs_set(struct nv50_head *, struct nv50_head_atom *); 8162306a36Sopenharmony_ciint head907d_curs_clr(struct nv50_head *); 8262306a36Sopenharmony_ciint head907d_ovly(struct nv50_head *, struct nv50_head_atom *); 8362306a36Sopenharmony_ciint head907d_procamp(struct nv50_head *, struct nv50_head_atom *); 8462306a36Sopenharmony_ciint head907d_or(struct nv50_head *, struct nv50_head_atom *); 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciextern const struct nv50_head_func head917d; 8762306a36Sopenharmony_ciint head917d_curs_layout(struct nv50_head *, struct nv50_wndw_atom *, 8862306a36Sopenharmony_ci struct nv50_head_atom *); 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciextern const struct nv50_head_func headc37d; 9162306a36Sopenharmony_ciint headc37d_view(struct nv50_head *, struct nv50_head_atom *); 9262306a36Sopenharmony_ciint headc37d_curs_format(struct nv50_head *, struct nv50_wndw_atom *, 9362306a36Sopenharmony_ci struct nv50_head_atom *); 9462306a36Sopenharmony_ciint headc37d_curs_set(struct nv50_head *, struct nv50_head_atom *); 9562306a36Sopenharmony_ciint headc37d_curs_clr(struct nv50_head *); 9662306a36Sopenharmony_ciint headc37d_dither(struct nv50_head *, struct nv50_head_atom *); 9762306a36Sopenharmony_civoid headc37d_static_wndw_map(struct nv50_head *, struct nv50_head_atom *); 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ciextern const struct nv50_head_func headc57d; 10062306a36Sopenharmony_ci#endif 101