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