1 #ifndef __NOUVEAU_FENCE_H__
2 #define __NOUVEAU_FENCE_H__
13 struct nouveau_channel
*channel
;
14 unsigned long timeout
;
18 int nouveau_fence_new(struct nouveau_channel
*, bool sysmem
,
19 struct nouveau_fence
**);
20 struct nouveau_fence
*
21 nouveau_fence_ref(struct nouveau_fence
*);
22 void nouveau_fence_unref(struct nouveau_fence
**);
24 int nouveau_fence_emit(struct nouveau_fence
*, struct nouveau_channel
*);
25 bool nouveau_fence_done(struct nouveau_fence
*);
26 void nouveau_fence_work(struct nouveau_fence
*, void (*)(void *), void *);
27 int nouveau_fence_wait(struct nouveau_fence
*, bool lazy
, bool intr
);
28 int nouveau_fence_sync(struct nouveau_fence
*, struct nouveau_channel
*);
30 struct nouveau_fence_chan
{
31 struct list_head pending
;
32 struct list_head flip
;
34 int (*emit
)(struct nouveau_fence
*);
35 int (*sync
)(struct nouveau_fence
*, struct nouveau_channel
*,
36 struct nouveau_channel
*);
37 u32 (*read
)(struct nouveau_channel
*);
38 int (*emit32
)(struct nouveau_channel
*, u64
, u32
);
39 int (*sync32
)(struct nouveau_channel
*, u64
, u32
);
45 struct nouveau_fence_priv
{
46 void (*dtor
)(struct nouveau_drm
*);
47 bool (*suspend
)(struct nouveau_drm
*);
48 void (*resume
)(struct nouveau_drm
*);
49 int (*context_new
)(struct nouveau_channel
*);
50 void (*context_del
)(struct nouveau_channel
*);
52 wait_queue_head_t waiting
;
56 #define nouveau_fence(drm) ((struct nouveau_fence_priv *)(drm)->fence)
58 void nouveau_fence_context_new(struct nouveau_fence_chan
*);
59 void nouveau_fence_context_del(struct nouveau_fence_chan
*);
61 int nv04_fence_create(struct nouveau_drm
*);
62 int nv04_fence_mthd(struct nouveau_channel
*, u32
, u32
, u32
);
64 int nv10_fence_emit(struct nouveau_fence
*);
65 int nv17_fence_sync(struct nouveau_fence
*, struct nouveau_channel
*,
66 struct nouveau_channel
*);
67 u32
nv10_fence_read(struct nouveau_channel
*);
68 void nv10_fence_context_del(struct nouveau_channel
*);
69 void nv10_fence_destroy(struct nouveau_drm
*);
70 int nv10_fence_create(struct nouveau_drm
*);
72 int nv17_fence_create(struct nouveau_drm
*);
73 void nv17_fence_resume(struct nouveau_drm
*drm
);
75 int nv50_fence_create(struct nouveau_drm
*);
76 int nv84_fence_create(struct nouveau_drm
*);
77 int nvc0_fence_create(struct nouveau_drm
*);
79 int nouveau_flip_complete(void *chan
);
81 struct nv84_fence_chan
{
82 struct nouveau_fence_chan base
;
83 struct nouveau_vma vma
;
84 struct nouveau_vma vma_gart
;
85 struct nouveau_vma dispc_vma
[4];
88 struct nv84_fence_priv
{
89 struct nouveau_fence_priv base
;
90 struct nouveau_bo
*bo
;
91 struct nouveau_bo
*bo_gart
;
95 u64
nv84_fence_crtc(struct nouveau_channel
*, int);
96 int nv84_fence_context_new(struct nouveau_channel
*);