/* 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 "nv50.h" struct nv50_disp_chan { const struct nv50_disp_chan_func *func; const struct nv50_disp_chan_mthd *mthd; struct nv50_disp_root *root; struct { int ctrl; int user; } chid; int head; struct nvkm_object object; }; struct nv50_disp_chan_func { void *(*dtor)(struct nv50_disp_chan *); int (*init)(struct nv50_disp_chan *); void (*fini)(struct nv50_disp_chan *); int (*child_get)(struct nv50_disp_chan *, int index, struct nvkm_oclass *); int (*child_new)(struct nv50_disp_chan *, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); }; int nv50_disp_chan_ctor(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp_root *, int ctrl, int user, int head, const struct nvkm_oclass *, struct nv50_disp_chan *); int nv50_disp_chan_new_(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp_root *, int ctrl, int user, int head, const struct nvkm_oclass *, struct nvkm_object **); extern const struct nv50_disp_chan_func nv50_disp_pioc_func; extern const struct nv50_disp_chan_func gf119_disp_pioc_func; extern const struct nvkm_event_func nv50_disp_chan_uevent; int nv50_disp_chan_uevent_ctor(struct nvkm_object *, void *, u32, struct nvkm_notify *); void nv50_disp_chan_uevent_send(struct nv50_disp *, int); extern const struct nvkm_event_func gf119_disp_chan_uevent; 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_chan_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 g84_disp_base_chan_mthd; extern const struct nv50_disp_chan_mthd g84_disp_ovly_chan_mthd; extern const struct nv50_disp_chan_mthd g94_disp_core_chan_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_chan_mthd; extern const struct nv50_disp_chan_mthd gk104_disp_core_chan_mthd; extern const struct nv50_disp_chan_mthd gk104_disp_ovly_chan_mthd; struct nv50_disp_pioc_oclass { int (*ctor)(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp_root *, int ctrl, int user, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); struct nvkm_sclass base; const struct nv50_disp_chan_func *func; const struct nv50_disp_chan_mthd *mthd; struct { int ctrl; int user; } chid; }; extern const struct nv50_disp_pioc_oclass nv50_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass nv50_disp_curs_oclass; extern const struct nv50_disp_pioc_oclass g84_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass g84_disp_curs_oclass; extern const struct nv50_disp_pioc_oclass gt215_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass gt215_disp_curs_oclass; extern const struct nv50_disp_pioc_oclass gf119_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass gf119_disp_curs_oclass; extern const struct nv50_disp_pioc_oclass gk104_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass gk104_disp_curs_oclass; extern const struct nv50_disp_pioc_oclass gp102_disp_oimm_oclass; extern const struct nv50_disp_pioc_oclass gp102_disp_curs_oclass; int nv50_disp_curs_new(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp_root *, int ctrl, int user, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); int nv50_disp_oimm_new(const struct nv50_disp_chan_func *, const struct nv50_disp_chan_mthd *, struct nv50_disp_root *, int ctrl, int user, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); #endif