|  | /* SPDX-License-Identifier: MIT */ | 
|  | #ifndef __NVKM_DISP_H__ | 
|  | #define __NVKM_DISP_H__ | 
|  | #define nvkm_disp(p) container_of((p), struct nvkm_disp, engine) | 
|  | #include <core/engine.h> | 
|  | #include <core/object.h> | 
|  | #include <core/event.h> | 
|  | #include <subdev/gsp.h> | 
|  |  | 
|  | struct nvkm_disp { | 
|  | const struct nvkm_disp_func *func; | 
|  | struct nvkm_engine engine; | 
|  |  | 
|  | struct { | 
|  | struct nvkm_gsp_client client; | 
|  | struct nvkm_gsp_device device; | 
|  |  | 
|  | struct nvkm_gsp_object objcom; | 
|  | struct nvkm_gsp_object object; | 
|  |  | 
|  | #define NVKM_DPYID_PLUG   BIT(0) | 
|  | #define NVKM_DPYID_UNPLUG BIT(1) | 
|  | #define NVKM_DPYID_IRQ    BIT(2) | 
|  | struct nvkm_event event; | 
|  | struct nvkm_gsp_event hpd; | 
|  | struct nvkm_gsp_event irq; | 
|  |  | 
|  | u32 assigned_sors; | 
|  | } rm; | 
|  |  | 
|  | struct list_head heads; | 
|  | struct list_head iors; | 
|  | struct list_head outps; | 
|  | struct list_head conns; | 
|  |  | 
|  | struct nvkm_event hpd; | 
|  | #define NVKM_DISP_HEAD_EVENT_VBLANK BIT(0) | 
|  | struct nvkm_event vblank; | 
|  |  | 
|  | struct { | 
|  | struct workqueue_struct *wq; | 
|  | struct work_struct work; | 
|  | u32 pending; | 
|  | struct mutex mutex; | 
|  | } super; | 
|  |  | 
|  | #define NVKM_DISP_EVENT_CHAN_AWAKEN BIT(0) | 
|  | struct nvkm_event uevent; | 
|  |  | 
|  | struct { | 
|  | unsigned long mask; | 
|  | int nr; | 
|  | } wndw, head, dac, sor; | 
|  |  | 
|  | struct { | 
|  | unsigned long mask; | 
|  | int nr; | 
|  | u8 type[3]; | 
|  | } pior; | 
|  |  | 
|  | struct nvkm_gpuobj *inst; | 
|  | struct nvkm_ramht *ramht; | 
|  |  | 
|  | struct nvkm_disp_chan *chan[81]; | 
|  |  | 
|  | struct { | 
|  | spinlock_t lock; | 
|  | struct nvkm_object object; | 
|  | } client; | 
|  | }; | 
|  |  | 
|  | int nv04_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int nv50_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int g84_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gt200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int g94_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int mcp77_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gt215_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int mcp89_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gf119_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gk104_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gk110_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gm107_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gm200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gp100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gp102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int gv100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int tu102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int ga102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | int ad102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); | 
|  | #endif |