channv50.h (7610B)
1/* SPDX-License-Identifier: MIT */ 2#ifndef __NV50_DISP_CHAN_H__ 3#define __NV50_DISP_CHAN_H__ 4#define nv50_disp_chan(p) container_of((p), struct nv50_disp_chan, object) 5#include <core/object.h> 6#include "nv50.h" 7struct nv50_disp_root; 8 9struct nv50_disp_chan { 10 const struct nv50_disp_chan_func *func; 11 const struct nv50_disp_chan_mthd *mthd; 12 struct nv50_disp *disp; 13 14 struct { 15 int ctrl; 16 int user; 17 } chid; 18 int head; 19 20 struct nvkm_object object; 21 22 struct nvkm_memory *memory; 23 u64 push; 24 25 u32 suspend_put; 26}; 27 28struct nv50_disp_chan_func { 29 int (*init)(struct nv50_disp_chan *); 30 void (*fini)(struct nv50_disp_chan *); 31 void (*intr)(struct nv50_disp_chan *, bool en); 32 u64 (*user)(struct nv50_disp_chan *, u64 *size); 33 int (*bind)(struct nv50_disp_chan *, struct nvkm_object *, u32 handle); 34}; 35 36int nv50_disp_chan_new_(const struct nv50_disp_chan_func *, 37 const struct nv50_disp_chan_mthd *, 38 struct nv50_disp *, int ctrl, int user, int head, 39 const struct nvkm_oclass *, struct nvkm_object **); 40int nv50_disp_dmac_new_(const struct nv50_disp_chan_func *, 41 const struct nv50_disp_chan_mthd *, 42 struct nv50_disp *, int chid, int head, u64 push, 43 const struct nvkm_oclass *, struct nvkm_object **); 44 45void nv50_disp_chan_intr(struct nv50_disp_chan *, bool); 46u64 nv50_disp_chan_user(struct nv50_disp_chan *, u64 *); 47extern const struct nv50_disp_chan_func nv50_disp_pioc_func; 48extern const struct nv50_disp_chan_func nv50_disp_dmac_func; 49int nv50_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); 50extern const struct nv50_disp_chan_func nv50_disp_core_func; 51 52void gf119_disp_chan_intr(struct nv50_disp_chan *, bool); 53extern const struct nv50_disp_chan_func gf119_disp_pioc_func; 54extern const struct nv50_disp_chan_func gf119_disp_dmac_func; 55void gf119_disp_dmac_fini(struct nv50_disp_chan *); 56int gf119_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); 57extern const struct nv50_disp_chan_func gf119_disp_core_func; 58void gf119_disp_core_fini(struct nv50_disp_chan *); 59 60extern const struct nv50_disp_chan_func gp102_disp_dmac_func; 61 62u64 gv100_disp_chan_user(struct nv50_disp_chan *, u64 *); 63int gv100_disp_dmac_init(struct nv50_disp_chan *); 64void gv100_disp_dmac_fini(struct nv50_disp_chan *); 65int gv100_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32); 66 67int nv50_disp_curs_new_(const struct nv50_disp_chan_func *, 68 struct nv50_disp *, int ctrl, int user, 69 const struct nvkm_oclass *, void *argv, u32 argc, 70 struct nvkm_object **); 71int nv50_disp_oimm_new_(const struct nv50_disp_chan_func *, 72 struct nv50_disp *, int ctrl, int user, 73 const struct nvkm_oclass *, void *argv, u32 argc, 74 struct nvkm_object **); 75int nv50_disp_base_new_(const struct nv50_disp_chan_func *, 76 const struct nv50_disp_chan_mthd *, 77 struct nv50_disp *, int chid, 78 const struct nvkm_oclass *, void *argv, u32 argc, 79 struct nvkm_object **); 80int nv50_disp_core_new_(const struct nv50_disp_chan_func *, 81 const struct nv50_disp_chan_mthd *, 82 struct nv50_disp *, int chid, 83 const struct nvkm_oclass *oclass, void *argv, u32 argc, 84 struct nvkm_object **); 85int nv50_disp_ovly_new_(const struct nv50_disp_chan_func *, 86 const struct nv50_disp_chan_mthd *, 87 struct nv50_disp *, int chid, 88 const struct nvkm_oclass *, void *argv, u32 argc, 89 struct nvkm_object **); 90 91int nv50_disp_curs_new(const struct nvkm_oclass *, void *, u32, 92 struct nv50_disp *, struct nvkm_object **); 93int nv50_disp_oimm_new(const struct nvkm_oclass *, void *, u32, 94 struct nv50_disp *, struct nvkm_object **); 95int nv50_disp_base_new(const struct nvkm_oclass *, void *, u32, 96 struct nv50_disp *, struct nvkm_object **); 97int nv50_disp_core_new(const struct nvkm_oclass *, void *, u32, 98 struct nv50_disp *, struct nvkm_object **); 99int nv50_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 100 struct nv50_disp *, struct nvkm_object **); 101 102int g84_disp_base_new(const struct nvkm_oclass *, void *, u32, 103 struct nv50_disp *, struct nvkm_object **); 104int g84_disp_core_new(const struct nvkm_oclass *, void *, u32, 105 struct nv50_disp *, struct nvkm_object **); 106int g84_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 107 struct nv50_disp *, struct nvkm_object **); 108 109int g94_disp_core_new(const struct nvkm_oclass *, void *, u32, 110 struct nv50_disp *, struct nvkm_object **); 111 112int gt200_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 113 struct nv50_disp *, struct nvkm_object **); 114 115int gf119_disp_curs_new(const struct nvkm_oclass *, void *, u32, 116 struct nv50_disp *, struct nvkm_object **); 117int gf119_disp_oimm_new(const struct nvkm_oclass *, void *, u32, 118 struct nv50_disp *, struct nvkm_object **); 119int gf119_disp_base_new(const struct nvkm_oclass *, void *, u32, 120 struct nv50_disp *, struct nvkm_object **); 121int gf119_disp_core_new(const struct nvkm_oclass *, void *, u32, 122 struct nv50_disp *, struct nvkm_object **); 123int gf119_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 124 struct nv50_disp *, struct nvkm_object **); 125 126int gk104_disp_core_new(const struct nvkm_oclass *, void *, u32, 127 struct nv50_disp *, struct nvkm_object **); 128int gk104_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 129 struct nv50_disp *, struct nvkm_object **); 130 131int gp102_disp_curs_new(const struct nvkm_oclass *, void *, u32, 132 struct nv50_disp *, struct nvkm_object **); 133int gp102_disp_oimm_new(const struct nvkm_oclass *, void *, u32, 134 struct nv50_disp *, struct nvkm_object **); 135int gp102_disp_base_new(const struct nvkm_oclass *, void *, u32, 136 struct nv50_disp *, struct nvkm_object **); 137int gp102_disp_core_new(const struct nvkm_oclass *, void *, u32, 138 struct nv50_disp *, struct nvkm_object **); 139int gp102_disp_ovly_new(const struct nvkm_oclass *, void *, u32, 140 struct nv50_disp *, struct nvkm_object **); 141 142int gv100_disp_curs_new(const struct nvkm_oclass *, void *, u32, 143 struct nv50_disp *, struct nvkm_object **); 144int gv100_disp_wimm_new(const struct nvkm_oclass *, void *, u32, 145 struct nv50_disp *, struct nvkm_object **); 146int gv100_disp_core_new(const struct nvkm_oclass *, void *, u32, 147 struct nv50_disp *, struct nvkm_object **); 148int gv100_disp_wndw_new(const struct nvkm_oclass *, void *, u32, 149 struct nv50_disp *, struct nvkm_object **); 150 151struct nv50_disp_mthd_list { 152 u32 mthd; 153 u32 addr; 154 struct { 155 u32 mthd; 156 u32 addr; 157 const char *name; 158 } data[]; 159}; 160 161struct nv50_disp_chan_mthd { 162 const char *name; 163 u32 addr; 164 s32 prev; 165 struct { 166 const char *name; 167 int nr; 168 const struct nv50_disp_mthd_list *mthd; 169 } data[]; 170}; 171 172void nv50_disp_chan_mthd(struct nv50_disp_chan *, int debug); 173 174extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_base; 175extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_sor; 176extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_pior; 177extern const struct nv50_disp_mthd_list nv50_disp_base_mthd_image; 178 179extern const struct nv50_disp_chan_mthd g84_disp_core_mthd; 180extern const struct nv50_disp_mthd_list g84_disp_core_mthd_dac; 181extern const struct nv50_disp_mthd_list g84_disp_core_mthd_head; 182 183extern const struct nv50_disp_chan_mthd g94_disp_core_mthd; 184 185extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_base; 186extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_dac; 187extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_sor; 188extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_pior; 189extern const struct nv50_disp_chan_mthd gf119_disp_base_mthd; 190 191extern const struct nv50_disp_chan_mthd gk104_disp_core_mthd; 192extern const struct nv50_disp_chan_mthd gk104_disp_ovly_mthd; 193#endif