0001
0002 #ifndef __NVKM_DISP_H__
0003 #define __NVKM_DISP_H__
0004 #define nvkm_disp(p) container_of((p), struct nvkm_disp, engine)
0005 #include <core/engine.h>
0006 #include <core/object.h>
0007 #include <core/event.h>
0008
0009 struct nvkm_disp {
0010 const struct nvkm_disp_func *func;
0011 struct nvkm_engine engine;
0012
0013 struct list_head heads;
0014 struct list_head iors;
0015 struct list_head outps;
0016 struct list_head conns;
0017
0018 struct nvkm_event hpd;
0019 struct nvkm_event vblank;
0020
0021 struct {
0022 struct workqueue_struct *wq;
0023 struct work_struct work;
0024 u32 pending;
0025 struct mutex mutex;
0026 } super;
0027
0028 #define NVKM_DISP_EVENT_CHAN_AWAKEN BIT(0)
0029 struct nvkm_event uevent;
0030
0031 struct {
0032 unsigned long mask;
0033 int nr;
0034 } wndw, head, dac;
0035
0036 struct {
0037 unsigned long mask;
0038 int nr;
0039 u32 lvdsconf;
0040 } sor;
0041
0042 struct {
0043 unsigned long mask;
0044 int nr;
0045 u8 type[3];
0046 } pior;
0047
0048 struct nvkm_gpuobj *inst;
0049 struct nvkm_ramht *ramht;
0050
0051 struct nvkm_disp_chan *chan[81];
0052
0053 struct {
0054 spinlock_t lock;
0055 struct nvkm_object object;
0056 } client;
0057 };
0058
0059 int nv04_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0060 int nv50_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0061 int g84_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0062 int gt200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0063 int g94_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0064 int mcp77_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0065 int gt215_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0066 int mcp89_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0067 int gf119_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0068 int gk104_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0069 int gk110_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0070 int gm107_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0071 int gm200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0072 int gp100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0073 int gp102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0074 int gv100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0075 int tu102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0076 int ga102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **);
0077 #endif