drm/nouveau: init vblank requests list
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / nouveau / nouveau_software.h
1 #ifndef __NOUVEAU_SOFTWARE_H__
2 #define __NOUVEAU_SOFTWARE_H__
3
4 struct nouveau_software_priv {
5         struct nouveau_exec_engine base;
6         struct list_head vblank;
7         spinlock_t peephole_lock;
8 };
9
10 struct nouveau_software_chan {
11         struct list_head flip;
12         struct {
13                 struct list_head list;
14                 u32 channel;
15                 u32 ctxdma;
16                 u32 offset;
17                 u32 value;
18                 u32 head;
19         } vblank;
20 };
21
22 static inline void
23 nouveau_software_context_new(struct nouveau_software_chan *pch)
24 {
25         INIT_LIST_HEAD(&pch->flip);
26         INIT_LIST_HEAD(&pch->vblank.list);
27 }
28
29 static inline void
30 nouveau_software_create(struct nouveau_software_priv *psw)
31 {
32         INIT_LIST_HEAD(&psw->vblank);
33         spin_lock_init(&psw->peephole_lock);
34 }
35
36 static inline u16
37 nouveau_software_class(struct drm_device *dev)
38 {
39         struct drm_nouveau_private *dev_priv = dev->dev_private;
40         if (dev_priv->card_type <= NV_04)
41                 return 0x006e;
42         if (dev_priv->card_type <= NV_40)
43                 return 0x016e;
44         if (dev_priv->card_type <= NV_50)
45                 return 0x506e;
46         if (dev_priv->card_type <= NV_E0)
47                 return 0x906e;
48         return 0x0000;
49 }
50
51 int nv04_software_create(struct drm_device *);
52 int nv50_software_create(struct drm_device *);
53 int nvc0_software_create(struct drm_device *);
54 u64 nvc0_software_crtc(struct nouveau_channel *, int crtc);
55
56 #endif