1acbe9ecfSBen Skeggs /* SPDX-License-Identifier: MIT */ 2acbe9ecfSBen Skeggs #ifndef __NVKM_DISP_CHAN_H__ 3acbe9ecfSBen Skeggs #define __NVKM_DISP_CHAN_H__ 4acbe9ecfSBen Skeggs #define nvkm_disp_chan(p) container_of((p), struct nvkm_disp_chan, object) 5acbe9ecfSBen Skeggs #include <core/object.h> 6acbe9ecfSBen Skeggs #include "priv.h" 7acbe9ecfSBen Skeggs 8acbe9ecfSBen Skeggs struct nvkm_disp_chan { 9acbe9ecfSBen Skeggs const struct nvkm_disp_chan_func *func; 10acbe9ecfSBen Skeggs const struct nvkm_disp_chan_mthd *mthd; 11acbe9ecfSBen Skeggs struct nvkm_disp *disp; 12acbe9ecfSBen Skeggs 13acbe9ecfSBen Skeggs struct { 14acbe9ecfSBen Skeggs int ctrl; 15acbe9ecfSBen Skeggs int user; 16acbe9ecfSBen Skeggs } chid; 17acbe9ecfSBen Skeggs int head; 18acbe9ecfSBen Skeggs 19acbe9ecfSBen Skeggs struct nvkm_object object; 20acbe9ecfSBen Skeggs 21acbe9ecfSBen Skeggs struct nvkm_memory *memory; 22acbe9ecfSBen Skeggs u64 push; 23acbe9ecfSBen Skeggs 24acbe9ecfSBen Skeggs u32 suspend_put; 25acbe9ecfSBen Skeggs }; 26acbe9ecfSBen Skeggs 27*889fcbe9SBen Skeggs int nvkm_disp_core_new(const struct nvkm_oclass *, void *, u32, struct nvkm_object **); 28*889fcbe9SBen Skeggs int nvkm_disp_chan_new(const struct nvkm_oclass *, void *, u32, struct nvkm_object **); 29*889fcbe9SBen Skeggs int nvkm_disp_wndw_new(const struct nvkm_oclass *, void *, u32, struct nvkm_object **); 30*889fcbe9SBen Skeggs 31acbe9ecfSBen Skeggs struct nvkm_disp_chan_func { 32*889fcbe9SBen Skeggs int (*push)(struct nvkm_disp_chan *, u64 object); 33acbe9ecfSBen Skeggs int (*init)(struct nvkm_disp_chan *); 34acbe9ecfSBen Skeggs void (*fini)(struct nvkm_disp_chan *); 35acbe9ecfSBen Skeggs void (*intr)(struct nvkm_disp_chan *, bool en); 36acbe9ecfSBen Skeggs u64 (*user)(struct nvkm_disp_chan *, u64 *size); 37acbe9ecfSBen Skeggs int (*bind)(struct nvkm_disp_chan *, struct nvkm_object *, u32 handle); 38acbe9ecfSBen Skeggs }; 39acbe9ecfSBen Skeggs 40acbe9ecfSBen Skeggs void nv50_disp_chan_intr(struct nvkm_disp_chan *, bool); 41acbe9ecfSBen Skeggs u64 nv50_disp_chan_user(struct nvkm_disp_chan *, u64 *); 42acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func nv50_disp_pioc_func; 43acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func nv50_disp_dmac_func; 44*889fcbe9SBen Skeggs int nv50_disp_dmac_push(struct nvkm_disp_chan *, u64); 45acbe9ecfSBen Skeggs int nv50_disp_dmac_bind(struct nvkm_disp_chan *, struct nvkm_object *, u32); 46acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func nv50_disp_core_func; 47acbe9ecfSBen Skeggs 48acbe9ecfSBen Skeggs void gf119_disp_chan_intr(struct nvkm_disp_chan *, bool); 49acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func gf119_disp_pioc_func; 50acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func gf119_disp_dmac_func; 51acbe9ecfSBen Skeggs void gf119_disp_dmac_fini(struct nvkm_disp_chan *); 52acbe9ecfSBen Skeggs int gf119_disp_dmac_bind(struct nvkm_disp_chan *, struct nvkm_object *, u32); 53acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func gf119_disp_core_func; 54acbe9ecfSBen Skeggs void gf119_disp_core_fini(struct nvkm_disp_chan *); 55acbe9ecfSBen Skeggs 56acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_func gp102_disp_dmac_func; 57acbe9ecfSBen Skeggs 58acbe9ecfSBen Skeggs u64 gv100_disp_chan_user(struct nvkm_disp_chan *, u64 *); 59acbe9ecfSBen Skeggs int gv100_disp_dmac_init(struct nvkm_disp_chan *); 60acbe9ecfSBen Skeggs void gv100_disp_dmac_fini(struct nvkm_disp_chan *); 61acbe9ecfSBen Skeggs int gv100_disp_dmac_bind(struct nvkm_disp_chan *, struct nvkm_object *, u32); 62acbe9ecfSBen Skeggs 63*889fcbe9SBen Skeggs struct nvkm_disp_chan_user { 64*889fcbe9SBen Skeggs const struct nvkm_disp_chan_func *func; 65*889fcbe9SBen Skeggs int ctrl; 66*889fcbe9SBen Skeggs int user; 67*889fcbe9SBen Skeggs const struct nvkm_disp_chan_mthd *mthd; 68*889fcbe9SBen Skeggs }; 69acbe9ecfSBen Skeggs 70*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user nv50_disp_oimm; 71*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user nv50_disp_curs; 72acbe9ecfSBen Skeggs 73*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user g84_disp_core; 74*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user g84_disp_base; 75*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user g84_disp_ovly; 76acbe9ecfSBen Skeggs 77*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user g94_disp_core; 78acbe9ecfSBen Skeggs 79*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gt200_disp_ovly; 80acbe9ecfSBen Skeggs 81*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gf119_disp_base; 82*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gf119_disp_oimm; 83*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gf119_disp_curs; 84acbe9ecfSBen Skeggs 85*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gk104_disp_core; 86*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gk104_disp_ovly; 87acbe9ecfSBen Skeggs 88*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gv100_disp_core; 89*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gv100_disp_curs; 90*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gv100_disp_wndw; 91*889fcbe9SBen Skeggs extern const struct nvkm_disp_chan_user gv100_disp_wimm; 92acbe9ecfSBen Skeggs 93acbe9ecfSBen Skeggs struct nvkm_disp_mthd_list { 94acbe9ecfSBen Skeggs u32 mthd; 95acbe9ecfSBen Skeggs u32 addr; 96acbe9ecfSBen Skeggs struct { 97acbe9ecfSBen Skeggs u32 mthd; 98acbe9ecfSBen Skeggs u32 addr; 99acbe9ecfSBen Skeggs const char *name; 100acbe9ecfSBen Skeggs } data[]; 101acbe9ecfSBen Skeggs }; 102acbe9ecfSBen Skeggs 103acbe9ecfSBen Skeggs struct nvkm_disp_chan_mthd { 104acbe9ecfSBen Skeggs const char *name; 105acbe9ecfSBen Skeggs u32 addr; 106acbe9ecfSBen Skeggs s32 prev; 107acbe9ecfSBen Skeggs struct { 108acbe9ecfSBen Skeggs const char *name; 109acbe9ecfSBen Skeggs int nr; 110acbe9ecfSBen Skeggs const struct nvkm_disp_mthd_list *mthd; 111acbe9ecfSBen Skeggs } data[]; 112acbe9ecfSBen Skeggs }; 113acbe9ecfSBen Skeggs 114acbe9ecfSBen Skeggs void nv50_disp_chan_mthd(struct nvkm_disp_chan *, int debug); 115acbe9ecfSBen Skeggs 116acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list nv50_disp_core_mthd_base; 117acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list nv50_disp_core_mthd_sor; 118acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list nv50_disp_core_mthd_pior; 119acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list nv50_disp_base_mthd_image; 120acbe9ecfSBen Skeggs 121acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_mthd g84_disp_core_mthd; 122acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list g84_disp_core_mthd_dac; 123acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list g84_disp_core_mthd_head; 124acbe9ecfSBen Skeggs 125acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_mthd g94_disp_core_mthd; 126acbe9ecfSBen Skeggs 127acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list gf119_disp_core_mthd_base; 128acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list gf119_disp_core_mthd_dac; 129acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list gf119_disp_core_mthd_sor; 130acbe9ecfSBen Skeggs extern const struct nvkm_disp_mthd_list gf119_disp_core_mthd_pior; 131acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_mthd gf119_disp_base_mthd; 132acbe9ecfSBen Skeggs 133acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_mthd gk104_disp_core_mthd; 134acbe9ecfSBen Skeggs extern const struct nvkm_disp_chan_mthd gk104_disp_ovly_mthd; 135acbe9ecfSBen Skeggs #endif 136