.. | .. |
---|
2 | 2 | #define __NV50_KMS_ATOM_H__ |
---|
3 | 3 | #define nv50_atom(p) container_of((p), struct nv50_atom, state) |
---|
4 | 4 | #include <drm/drm_atomic.h> |
---|
| 5 | +#include "crc.h" |
---|
| 6 | + |
---|
| 7 | +struct nouveau_encoder; |
---|
5 | 8 | |
---|
6 | 9 | struct nv50_atom { |
---|
7 | 10 | struct drm_atomic_state state; |
---|
.. | .. |
---|
18 | 21 | |
---|
19 | 22 | struct { |
---|
20 | 23 | u32 mask; |
---|
| 24 | + u32 owned; |
---|
21 | 25 | u32 olut; |
---|
22 | 26 | } wndw; |
---|
23 | 27 | |
---|
.. | .. |
---|
54 | 58 | u64 offset:40; |
---|
55 | 59 | u8 buffer:1; |
---|
56 | 60 | u8 mode:4; |
---|
57 | | - u8 size:2; |
---|
| 61 | + u16 size:11; |
---|
58 | 62 | u8 range:2; |
---|
59 | 63 | u8 output_mode:2; |
---|
| 64 | + void (*load)(struct drm_color_lut *, int size, void __iomem *); |
---|
60 | 65 | } olut; |
---|
61 | 66 | |
---|
62 | 67 | struct { |
---|
.. | .. |
---|
113 | 118 | u8 nhsync:1; |
---|
114 | 119 | u8 nvsync:1; |
---|
115 | 120 | u8 depth:4; |
---|
| 121 | + u8 crc_raster:2; |
---|
| 122 | + u8 bpc; |
---|
116 | 123 | } or; |
---|
| 124 | + |
---|
| 125 | + struct nv50_crc_atom crc; |
---|
| 126 | + |
---|
| 127 | + /* Currently only used for MST */ |
---|
| 128 | + struct { |
---|
| 129 | + int pbn; |
---|
| 130 | + u8 tu:6; |
---|
| 131 | + } dp; |
---|
117 | 132 | |
---|
118 | 133 | union nv50_head_atom_mask { |
---|
119 | 134 | struct { |
---|
.. | .. |
---|
126 | 141 | bool ovly:1; |
---|
127 | 142 | bool dither:1; |
---|
128 | 143 | bool procamp:1; |
---|
| 144 | + bool crc:1; |
---|
129 | 145 | bool or:1; |
---|
130 | 146 | }; |
---|
131 | 147 | u16 mask; |
---|
.. | .. |
---|
139 | 155 | if (IS_ERR(statec)) |
---|
140 | 156 | return (void *)statec; |
---|
141 | 157 | return nv50_head_atom(statec); |
---|
| 158 | +} |
---|
| 159 | + |
---|
| 160 | +static inline struct drm_encoder * |
---|
| 161 | +nv50_head_atom_get_encoder(struct nv50_head_atom *atom) |
---|
| 162 | +{ |
---|
| 163 | + struct drm_encoder *encoder; |
---|
| 164 | + |
---|
| 165 | + /* We only ever have a single encoder */ |
---|
| 166 | + drm_for_each_encoder_mask(encoder, atom->state.crtc->dev, |
---|
| 167 | + atom->state.encoder_mask) |
---|
| 168 | + return encoder; |
---|
| 169 | + |
---|
| 170 | + return NULL; |
---|
142 | 171 | } |
---|
143 | 172 | |
---|
144 | 173 | #define nv50_wndw_atom(p) container_of((p), struct nv50_wndw_atom, state) |
---|
.. | .. |
---|
169 | 198 | u8 buffer:1; |
---|
170 | 199 | u8 enable:2; |
---|
171 | 200 | u8 mode:4; |
---|
172 | | - u8 size:2; |
---|
| 201 | + u16 size:11; |
---|
173 | 202 | u8 range:2; |
---|
174 | 203 | u8 output_mode:2; |
---|
| 204 | + void (*load)(struct drm_color_lut *, int size, |
---|
| 205 | + void __iomem *); |
---|
175 | 206 | } i; |
---|
176 | 207 | } xlut; |
---|
| 208 | + |
---|
| 209 | + struct { |
---|
| 210 | + u32 matrix[12]; |
---|
| 211 | + bool valid; |
---|
| 212 | + } csc; |
---|
177 | 213 | |
---|
178 | 214 | struct { |
---|
179 | 215 | u8 mode:2; |
---|
.. | .. |
---|
207 | 243 | u16 y; |
---|
208 | 244 | } point; |
---|
209 | 245 | |
---|
| 246 | + struct { |
---|
| 247 | + u8 depth; |
---|
| 248 | + u8 k1; |
---|
| 249 | + u8 src_color:4; |
---|
| 250 | + u8 dst_color:4; |
---|
| 251 | + } blend; |
---|
| 252 | + |
---|
210 | 253 | union nv50_wndw_atom_mask { |
---|
211 | 254 | struct { |
---|
212 | 255 | bool ntfy:1; |
---|
213 | 256 | bool sema:1; |
---|
214 | 257 | bool xlut:1; |
---|
| 258 | + bool csc:1; |
---|
215 | 259 | bool image:1; |
---|
216 | 260 | bool scale:1; |
---|
217 | 261 | bool point:1; |
---|
| 262 | + bool blend:1; |
---|
218 | 263 | }; |
---|
219 | 264 | u8 mask; |
---|
220 | 265 | } set, clr; |
---|