/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __NV50_DISP_CHAN_H__ #define __NV50_DISP_CHAN_H__ #define nv50_disp_chan(p) container_of((p), struct nv50_disp_chan, object) #include #include "nv50.h" struct nv50_disp_root; struct nv50_disp_chan { const struct nv50_disp_chan_func *func; const struct nv50_disp_chan_mthd *mthd; struct nv50_disp *disp; struct { int ctrl; int user; } chid; int head; struct nvkm_object object; struct nvkm_memory *memory; u64 push; }; struct nv50_disp_chan_func { int (*init)(struct nv50_disp_chan *); void (*fini)(struct nv50_disp_chan *); void (*intr)(struct nv50_disp_chan *, bool en); u64 (*user)(struct nv50_disp_chan *, u64 *size); int (*bind)(struct nv50_disp_chan *, struct nvkm_object *, u32 handle); }; int nv50_disp_chan_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp *, int ctrl, int user, int head, const struct nvkm_oclass *, struct nvkm_object **); int nv50_disp_dmac_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp *, int chid, int head, u64 push, const struct nvkm_oclass *, struct nvkm_object **); void nv50_disp_chan_intr(struct nv50_disp_chan *, bool); u64 nv50_disp_chan_user(struct nv50_disp_chan *, u64 *); extern const struct nv50_disp_chan_func nv50_disp_pioc_func; extern const struct nv50_disp_chan_func nv50_disp_dmac_func; int nv50_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); extern const struct nv50_disp_chan_func nv50_disp_core_func; void gf119_disp_chan_intr(struct nv50_disp_chan *, bool); extern const struct nv50_disp_chan_func gf119_disp_pioc_func; extern const struct nv50_disp_chan_func gf119_disp_dmac_func; void gf119_disp_dmac_fini(struct nv50_disp_chan *); int gf119_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); extern const struct nv50_disp_chan_func gf119_disp_core_func; void gf119_disp_core_fini(struct nv50_disp_chan *); extern const struct nv50_disp_chan_func gp102_disp_dmac_func; u64 gv100_disp_chan_user(struct nv50_disp_chan *, u64 *); int gv100_disp_dmac_init(struct nv50_disp_chan *); void gv100_disp_dmac_fini(struct nv50_disp_chan *); int gv100_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); int nv50_disp_curs_new_(const struct nv50_disp_chan_func *, struct nv50_disp *, int ctrl, int user, const struct nvkm_oclass *, void *argv, u32 argc, struct nvkm_object **); int nv50_disp_oimm_new_(const struct nv50_disp_chan_func *, struct nv50_disp *, int ctrl, int user, const struct nvkm_oclass *, void *argv, u32 argc, struct nvkm_object **); int nv50_disp_base_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp *, int chid, const struct nvkm_oclass *, void *argv, u32 argc, struct nvkm_object **); int nv50_disp_core_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp *, int chid, const struct nvkm_oclass *oclass, void *argv, u32 argc, struct nvkm_object **); int nv50_disp_ovly_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp *, int chid, const struct nvkm_oclass *, void *argv, u32 argc, struct nvkm_object **); int nv50_disp_curs_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int nv50_disp_oimm_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int nv50_disp_base_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int nv50_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int nv50_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int g84_disp_base_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int g84_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int g84_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int g94_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gt200_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gf119_disp_curs_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gf119_disp_oimm_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gf119_disp_base_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gf119_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gf119_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gk104_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gk104_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gp102_disp_curs_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gp102_disp_oimm_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gp102_disp_base_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gp102_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gp102_disp_ovly_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gv100_disp_curs_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gv100_disp_wimm_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gv100_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); int gv100_disp_wndw_new(const struct nvkm_oclass *, void *, u32, struct nv50_disp *, struct nvkm_object **); struct nv50_disp_mthd_list { u32 mthd; u32 addr; struct { u32 mthd; u32 addr; const char *name; } data[]; }; struct nv50_disp_chan_mthd { const char *name; u32 addr; s32 prev; struct { const char *name; int nr; const struct nv50_disp_mthd_list *mthd; } data[]; }; void nv50_disp_chan_mthd(struct nv50_disp_chan *, int debug); extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_base; extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_sor; extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_pior; extern const struct nv50_disp_mthd_list nv50_disp_base_mthd_image; extern const struct nv50_disp_chan_mthd g84_disp_core_mthd; extern const struct nv50_disp_mthd_list g84_disp_core_mthd_dac; extern const struct nv50_disp_mthd_list g84_disp_core_mthd_head; extern const struct nv50_disp_chan_mthd g94_disp_core_mthd; extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_base; extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_dac; extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_sor; extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_pior; extern const struct nv50_disp_chan_mthd gf119_disp_base_mthd; extern const struct nv50_disp_chan_mthd gk104_disp_core_mthd; extern const struct nv50_disp_chan_mthd gk104_disp_ovly_mthd; #endif