]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.h
drm/nouveau/disp/nv50-: implement a common supervisor 2.1
[mirror_ubuntu-artful-kernel.git] / drivers / gpu / drm / nouveau / nvkm / engine / disp / nv50.h
CommitLineData
70cabe4a
BS
1#ifndef __NV50_DISP_H__
2#define __NV50_DISP_H__
0ce41e3c 3#define nv50_disp(p) container_of((p), struct nv50_disp, base)
a8f8b489 4#include "priv.h"
af85389c 5#include "dp.h"
327c5581 6struct nvkm_head;
a8f8b489 7
fd166a18 8struct nv50_disp {
70aa8670 9 const struct nv50_disp_func *func;
878da15a 10 struct nvkm_disp base;
5cc027f6 11
3607bfd3 12 struct workqueue_struct *wq;
5cc027f6
BS
13 struct work_struct supervisor;
14 u32 super;
15
b38a2322
BS
16 struct nvkm_event uevent;
17
70cabe4a 18 struct {
4a230fa6 19 u32 lvdsconf;
70cabe4a 20 } sor;
70aa8670 21
a2bc283f 22 struct {
a2bc283f 23 u8 type[3];
a2bc283f 24 } pior;
0ce41e3c
BS
25
26 struct nv50_disp_chan *chan[17];
70cabe4a
BS
27};
28
29c0ca73 29void nv50_disp_super_1(struct nv50_disp *);
327c5581 30void nv50_disp_super_1_0(struct nv50_disp *, struct nvkm_head *);
d52e948c 31void nv50_disp_super_2_0(struct nv50_disp *, struct nvkm_head *);
1f0c9eaf 32void nv50_disp_super_2_1(struct nv50_disp *, struct nvkm_head *);
29c0ca73 33
70aa8670
BS
34int nv50_disp_new_(const struct nv50_disp_func *, struct nvkm_device *,
35 int index, int heads, struct nvkm_disp **);
36int gf119_disp_new_(const struct nv50_disp_func *, struct nvkm_device *,
37 int index, struct nvkm_disp **);
38
70aa8670
BS
39struct nv50_disp_func {
40 void (*intr)(struct nv50_disp *);
fd47877f 41 void (*intr_error)(struct nv50_disp *, int chid);
70aa8670
BS
42
43 const struct nvkm_event_func *uevent;
44 void (*super)(struct work_struct *);
45
46 const struct nvkm_disp_oclass *root;
47
48 struct {
a1c93078 49 int (*new)(struct nvkm_disp *, int id);
70aa8670
BS
50 } head;
51
70aa8670
BS
52 struct {
53 int nr;
78f1ad6f 54 int (*new)(struct nvkm_disp *, int id);
70aa8670
BS
55 } dac;
56
57 struct {
58 int nr;
78f1ad6f 59 int (*new)(struct nvkm_disp *, int id);
70aa8670
BS
60 } sor;
61
62 struct {
63 int nr;
78f1ad6f 64 int (*new)(struct nvkm_disp *, int id);
70aa8670
BS
65 } pior;
66};
67
70aa8670 68void nv50_disp_intr(struct nv50_disp *);
af85389c 69void nv50_disp_super(struct work_struct *);
70cabe4a 70
70aa8670 71void gf119_disp_intr(struct nv50_disp *);
af85389c 72void gf119_disp_super(struct work_struct *);
fd47877f 73void gf119_disp_intr_error(struct nv50_disp *, int);
af85389c
BS
74
75void nv50_disp_dptmds_war_2(struct nv50_disp *, struct dcb_output *);
76void nv50_disp_dptmds_war_3(struct nv50_disp *, struct dcb_output *);
77void nv50_disp_update_sppll1(struct nv50_disp *);
70cabe4a 78#endif