xref: /openbmc/linux/drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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