xref: /openbmc/linux/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1b7019ac5SIlia Mirkin /* SPDX-License-Identifier: MIT */
2878da15aSBen Skeggs #ifndef __NVKM_DISP_H__
3878da15aSBen Skeggs #define __NVKM_DISP_H__
40ce41e3cSBen Skeggs #define nvkm_disp(p) container_of((p), struct nvkm_disp, engine)
5c39f472eSBen Skeggs #include <core/engine.h>
6168c0299SBen Skeggs #include <core/object.h>
7c39f472eSBen Skeggs #include <core/event.h>
8c39f472eSBen Skeggs 
9878da15aSBen Skeggs struct nvkm_disp {
100ce41e3cSBen Skeggs 	const struct nvkm_disp_func *func;
1170aa8670SBen Skeggs 	struct nvkm_engine engine;
120ce41e3cSBen Skeggs 
1392fba5d3SBen Skeggs 	struct list_head heads;
1492fba5d3SBen Skeggs 	struct list_head iors;
1592fba5d3SBen Skeggs 	struct list_head outps;
1692fba5d3SBen Skeggs 	struct list_head conns;
17c39f472eSBen Skeggs 
18c39f472eSBen Skeggs 	struct nvkm_event hpd;
19*1d4dce28SBen Skeggs #define NVKM_DISP_HEAD_EVENT_VBLANK BIT(0)
20c39f472eSBen Skeggs 	struct nvkm_event vblank;
2170aa8670SBen Skeggs 
223517e6b6SBen Skeggs 	struct {
2392fba5d3SBen Skeggs 		struct workqueue_struct *wq;
243517e6b6SBen Skeggs 		struct work_struct work;
253517e6b6SBen Skeggs 		u32 pending;
26a6fd8f93SBen Skeggs 		struct mutex mutex;
273517e6b6SBen Skeggs 	} super;
2892fba5d3SBen Skeggs 
29889fcbe9SBen Skeggs #define NVKM_DISP_EVENT_CHAN_AWAKEN BIT(0)
3092fba5d3SBen Skeggs 	struct nvkm_event uevent;
3192fba5d3SBen Skeggs 
3292fba5d3SBen Skeggs 	struct {
3392fba5d3SBen Skeggs 		unsigned long mask;
3492fba5d3SBen Skeggs 		int nr;
359793083fSBen Skeggs 	} wndw, head, dac, sor;
3692fba5d3SBen Skeggs 
3792fba5d3SBen Skeggs 	struct {
3892fba5d3SBen Skeggs 		unsigned long mask;
3992fba5d3SBen Skeggs 		int nr;
4092fba5d3SBen Skeggs 		u8 type[3];
4192fba5d3SBen Skeggs 	} pior;
4292fba5d3SBen Skeggs 
4392fba5d3SBen Skeggs 	struct nvkm_gpuobj *inst;
4492fba5d3SBen Skeggs 	struct nvkm_ramht *ramht;
4592fba5d3SBen Skeggs 
46acbe9ecfSBen Skeggs 	struct nvkm_disp_chan *chan[81];
4792fba5d3SBen Skeggs 
48bfa7f6a6SBen Skeggs 	struct {
49bfa7f6a6SBen Skeggs 		spinlock_t lock;
50168c0299SBen Skeggs 		struct nvkm_object object;
51bfa7f6a6SBen Skeggs 	} client;
52c39f472eSBen Skeggs };
53c39f472eSBen Skeggs 
54a7f000ecSBen Skeggs int nv04_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
55a7f000ecSBen Skeggs int nv50_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
56a7f000ecSBen Skeggs int g84_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
57a7f000ecSBen Skeggs int gt200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
58a7f000ecSBen Skeggs int g94_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
59a7f000ecSBen Skeggs int mcp77_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
60a7f000ecSBen Skeggs int gt215_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
61a7f000ecSBen Skeggs int mcp89_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
62a7f000ecSBen Skeggs int gf119_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
63a7f000ecSBen Skeggs int gk104_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
64a7f000ecSBen Skeggs int gk110_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
65a7f000ecSBen Skeggs int gm107_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
66a7f000ecSBen Skeggs int gm200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
67a7f000ecSBen Skeggs int gp100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
68a7f000ecSBen Skeggs int gp102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
69a7f000ecSBen Skeggs int gv100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
70a7f000ecSBen Skeggs int tu102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
71a7f000ecSBen Skeggs int ga102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
72c39f472eSBen Skeggs #endif
73