1 #ifndef __NV50_KMS_WNDW_H__
2 #define __NV50_KMS_WNDW_H__
3 #define nv50_wndw(p) container_of((p), struct nv50_wndw, plane)
8 #include <nvif/notify.h>
10 struct nv50_wndw_ctxdma
{
11 struct list_head head
;
12 struct nvif_object object
;
16 const struct nv50_wndw_func
*func
;
17 const struct nv50_wimm_func
*immd
;
19 struct nv50_disp_interlock interlock
;
22 struct nvif_object
*parent
;
23 struct list_head list
;
26 struct drm_plane plane
;
30 struct nv50_dmac wndw
;
31 struct nv50_dmac wimm
;
33 struct nvif_notify notify
;
39 int nv50_wndw_new_(const struct nv50_wndw_func
*, struct drm_device
*,
40 enum drm_plane_type
, const char *name
, int index
,
41 const u32
*format
, enum nv50_disp_interlock_type
,
42 u32 interlock_data
, u32 heads
, struct nv50_wndw
**);
43 void nv50_wndw_init(struct nv50_wndw
*);
44 void nv50_wndw_fini(struct nv50_wndw
*);
45 void nv50_wndw_flush_set(struct nv50_wndw
*, u32
*interlock
,
46 struct nv50_wndw_atom
*);
47 void nv50_wndw_flush_clr(struct nv50_wndw
*, u32
*interlock
, bool flush
,
48 struct nv50_wndw_atom
*);
49 void nv50_wndw_ntfy_enable(struct nv50_wndw
*, struct nv50_wndw_atom
*);
50 int nv50_wndw_wait_armed(struct nv50_wndw
*, struct nv50_wndw_atom
*);
52 struct nv50_wndw_func
{
53 int (*acquire
)(struct nv50_wndw
*, struct nv50_wndw_atom
*asyw
,
54 struct nv50_head_atom
*asyh
);
55 void (*release
)(struct nv50_wndw
*, struct nv50_wndw_atom
*asyw
,
56 struct nv50_head_atom
*asyh
);
57 void (*prepare
)(struct nv50_wndw
*, struct nv50_head_atom
*asyh
,
58 struct nv50_wndw_atom
*asyw
);
60 void (*sema_set
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
61 void (*sema_clr
)(struct nv50_wndw
*);
62 void (*ntfy_reset
)(struct nouveau_bo
*, u32 offset
);
63 void (*ntfy_set
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
64 void (*ntfy_clr
)(struct nv50_wndw
*);
65 int (*ntfy_wait_begun
)(struct nouveau_bo
*, u32 offset
,
66 struct nvif_device
*);
67 void (*ilut
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
69 void (*xlut_set
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
70 void (*xlut_clr
)(struct nv50_wndw
*);
71 void (*image_set
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
72 void (*image_clr
)(struct nv50_wndw
*);
73 void (*scale_set
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
75 void (*update
)(struct nv50_wndw
*, u32
*interlock
);
78 extern const struct drm_plane_funcs nv50_wndw
;
80 void base507c_ntfy_reset(struct nouveau_bo
*, u32
);
81 int base507c_ntfy_wait_begun(struct nouveau_bo
*, u32
, struct nvif_device
*);
83 struct nv50_wimm_func
{
84 void (*point
)(struct nv50_wndw
*, struct nv50_wndw_atom
*);
86 void (*update
)(struct nv50_wndw
*, u32
*interlock
);
89 extern const struct nv50_wimm_func curs507a
;
91 int wndwc37e_new(struct nouveau_drm
*, enum drm_plane_type
, int, s32
,
94 int nv50_wndw_new(struct nouveau_drm
*, enum drm_plane_type
, int index
,