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