hw/display/pxa2xx: Apply whitespace-only coding style fixes to template header
[qemu/ar7.git] / hw / display / pxa2xx_template.h
blobd91407592d3c71a0f13dde6dd09ed06c3e9d3dcf
1 /*
2 * Intel XScale PXA255/270 LCDC emulation.
4 * Copyright (c) 2006 Openedhand Ltd.
5 * Written by Andrzej Zaborowski <balrog@zabor.org>
7 * This code is licensed under the GPLv2.
9 * Framebuffer format conversion routines.
12 # define SKIP_PIXEL(to) do { to += deststep; } while (0)
13 # define COPY_PIXEL(to, from) \
14 do { \
15 *(uint32_t *) to = from; \
16 SKIP_PIXEL(to); \
17 } while (0)
19 #ifdef HOST_WORDS_BIGENDIAN
20 # define SWAP_WORDS 1
21 #endif
23 #define FN_2(x) FN(x + 1) FN(x)
24 #define FN_4(x) FN_2(x + 2) FN_2(x)
26 static void pxa2xx_draw_line2(void *opaque, uint8_t *dest, const uint8_t *src,
27 int width, int deststep)
29 uint32_t *palette = opaque;
30 uint32_t data;
31 while (width > 0) {
32 data = *(uint32_t *) src;
33 #define FN(x) COPY_PIXEL(dest, palette[(data >> ((x) * 2)) & 3]);
34 #ifdef SWAP_WORDS
35 FN_4(12)
36 FN_4(8)
37 FN_4(4)
38 FN_4(0)
39 #else
40 FN_4(0)
41 FN_4(4)
42 FN_4(8)
43 FN_4(12)
44 #endif
45 #undef FN
46 width -= 16;
47 src += 4;
51 static void pxa2xx_draw_line4(void *opaque, uint8_t *dest, const uint8_t *src,
52 int width, int deststep)
54 uint32_t *palette = opaque;
55 uint32_t data;
56 while (width > 0) {
57 data = *(uint32_t *) src;
58 #define FN(x) COPY_PIXEL(dest, palette[(data >> ((x) * 4)) & 0xf]);
59 #ifdef SWAP_WORDS
60 FN_2(6)
61 FN_2(4)
62 FN_2(2)
63 FN_2(0)
64 #else
65 FN_2(0)
66 FN_2(2)
67 FN_2(4)
68 FN_2(6)
69 #endif
70 #undef FN
71 width -= 8;
72 src += 4;
76 static void pxa2xx_draw_line8(void *opaque, uint8_t *dest, const uint8_t *src,
77 int width, int deststep)
79 uint32_t *palette = opaque;
80 uint32_t data;
81 while (width > 0) {
82 data = *(uint32_t *) src;
83 #define FN(x) COPY_PIXEL(dest, palette[(data >> (x)) & 0xff]);
84 #ifdef SWAP_WORDS
85 FN(24)
86 FN(16)
87 FN(8)
88 FN(0)
89 #else
90 FN(0)
91 FN(8)
92 FN(16)
93 FN(24)
94 #endif
95 #undef FN
96 width -= 4;
97 src += 4;
101 static void pxa2xx_draw_line16(void *opaque, uint8_t *dest, const uint8_t *src,
102 int width, int deststep)
104 uint32_t data;
105 unsigned int r, g, b;
106 while (width > 0) {
107 data = *(uint32_t *) src;
108 #ifdef SWAP_WORDS
109 data = bswap32(data);
110 #endif
111 b = (data & 0x1f) << 3;
112 data >>= 5;
113 g = (data & 0x3f) << 2;
114 data >>= 6;
115 r = (data & 0x1f) << 3;
116 data >>= 5;
117 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
118 b = (data & 0x1f) << 3;
119 data >>= 5;
120 g = (data & 0x3f) << 2;
121 data >>= 6;
122 r = (data & 0x1f) << 3;
123 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
124 width -= 2;
125 src += 4;
129 static void pxa2xx_draw_line16t(void *opaque, uint8_t *dest, const uint8_t *src,
130 int width, int deststep)
132 uint32_t data;
133 unsigned int r, g, b;
134 while (width > 0) {
135 data = *(uint32_t *) src;
136 #ifdef SWAP_WORDS
137 data = bswap32(data);
138 #endif
139 b = (data & 0x1f) << 3;
140 data >>= 5;
141 g = (data & 0x1f) << 3;
142 data >>= 5;
143 r = (data & 0x1f) << 3;
144 data >>= 5;
145 if (data & 1) {
146 SKIP_PIXEL(dest);
147 } else {
148 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
150 data >>= 1;
151 b = (data & 0x1f) << 3;
152 data >>= 5;
153 g = (data & 0x1f) << 3;
154 data >>= 5;
155 r = (data & 0x1f) << 3;
156 data >>= 5;
157 if (data & 1) {
158 SKIP_PIXEL(dest);
159 } else {
160 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
162 width -= 2;
163 src += 4;
167 static void pxa2xx_draw_line18(void *opaque, uint8_t *dest, const uint8_t *src,
168 int width, int deststep)
170 uint32_t data;
171 unsigned int r, g, b;
172 while (width > 0) {
173 data = *(uint32_t *) src;
174 #ifdef SWAP_WORDS
175 data = bswap32(data);
176 #endif
177 b = (data & 0x3f) << 2;
178 data >>= 6;
179 g = (data & 0x3f) << 2;
180 data >>= 6;
181 r = (data & 0x3f) << 2;
182 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
183 width -= 1;
184 src += 4;
188 /* The wicked packed format */
189 static void pxa2xx_draw_line18p(void *opaque, uint8_t *dest, const uint8_t *src,
190 int width, int deststep)
192 uint32_t data[3];
193 unsigned int r, g, b;
194 while (width > 0) {
195 data[0] = *(uint32_t *) src;
196 src += 4;
197 data[1] = *(uint32_t *) src;
198 src += 4;
199 data[2] = *(uint32_t *) src;
200 src += 4;
201 #ifdef SWAP_WORDS
202 data[0] = bswap32(data[0]);
203 data[1] = bswap32(data[1]);
204 data[2] = bswap32(data[2]);
205 #endif
206 b = (data[0] & 0x3f) << 2;
207 data[0] >>= 6;
208 g = (data[0] & 0x3f) << 2;
209 data[0] >>= 6;
210 r = (data[0] & 0x3f) << 2;
211 data[0] >>= 12;
212 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
213 b = (data[0] & 0x3f) << 2;
214 data[0] >>= 6;
215 g = ((data[1] & 0xf) << 4) | (data[0] << 2);
216 data[1] >>= 4;
217 r = (data[1] & 0x3f) << 2;
218 data[1] >>= 12;
219 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
220 b = (data[1] & 0x3f) << 2;
221 data[1] >>= 6;
222 g = (data[1] & 0x3f) << 2;
223 data[1] >>= 6;
224 r = ((data[2] & 0x3) << 6) | (data[1] << 2);
225 data[2] >>= 8;
226 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
227 b = (data[2] & 0x3f) << 2;
228 data[2] >>= 6;
229 g = (data[2] & 0x3f) << 2;
230 data[2] >>= 6;
231 r = data[2] << 2;
232 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
233 width -= 4;
237 static void pxa2xx_draw_line19(void *opaque, uint8_t *dest, const uint8_t *src,
238 int width, int deststep)
240 uint32_t data;
241 unsigned int r, g, b;
242 while (width > 0) {
243 data = *(uint32_t *) src;
244 #ifdef SWAP_WORDS
245 data = bswap32(data);
246 #endif
247 b = (data & 0x3f) << 2;
248 data >>= 6;
249 g = (data & 0x3f) << 2;
250 data >>= 6;
251 r = (data & 0x3f) << 2;
252 data >>= 6;
253 if (data & 1) {
254 SKIP_PIXEL(dest);
255 } else {
256 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
258 width -= 1;
259 src += 4;
263 /* The wicked packed format */
264 static void pxa2xx_draw_line19p(void *opaque, uint8_t *dest, const uint8_t *src,
265 int width, int deststep)
267 uint32_t data[3];
268 unsigned int r, g, b;
269 while (width > 0) {
270 data[0] = *(uint32_t *) src;
271 src += 4;
272 data[1] = *(uint32_t *) src;
273 src += 4;
274 data[2] = *(uint32_t *) src;
275 src += 4;
276 # ifdef SWAP_WORDS
277 data[0] = bswap32(data[0]);
278 data[1] = bswap32(data[1]);
279 data[2] = bswap32(data[2]);
280 # endif
281 b = (data[0] & 0x3f) << 2;
282 data[0] >>= 6;
283 g = (data[0] & 0x3f) << 2;
284 data[0] >>= 6;
285 r = (data[0] & 0x3f) << 2;
286 data[0] >>= 6;
287 if (data[0] & 1) {
288 SKIP_PIXEL(dest);
289 } else {
290 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
292 data[0] >>= 6;
293 b = (data[0] & 0x3f) << 2;
294 data[0] >>= 6;
295 g = ((data[1] & 0xf) << 4) | (data[0] << 2);
296 data[1] >>= 4;
297 r = (data[1] & 0x3f) << 2;
298 data[1] >>= 6;
299 if (data[1] & 1) {
300 SKIP_PIXEL(dest);
301 } else {
302 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
304 data[1] >>= 6;
305 b = (data[1] & 0x3f) << 2;
306 data[1] >>= 6;
307 g = (data[1] & 0x3f) << 2;
308 data[1] >>= 6;
309 r = ((data[2] & 0x3) << 6) | (data[1] << 2);
310 data[2] >>= 2;
311 if (data[2] & 1) {
312 SKIP_PIXEL(dest);
313 } else {
314 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
316 data[2] >>= 6;
317 b = (data[2] & 0x3f) << 2;
318 data[2] >>= 6;
319 g = (data[2] & 0x3f) << 2;
320 data[2] >>= 6;
321 r = data[2] << 2;
322 data[2] >>= 6;
323 if (data[2] & 1) {
324 SKIP_PIXEL(dest);
325 } else {
326 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
328 width -= 4;
332 static void pxa2xx_draw_line24(void *opaque, uint8_t *dest, const uint8_t *src,
333 int width, int deststep)
335 uint32_t data;
336 unsigned int r, g, b;
337 while (width > 0) {
338 data = *(uint32_t *) src;
339 #ifdef SWAP_WORDS
340 data = bswap32(data);
341 #endif
342 b = data & 0xff;
343 data >>= 8;
344 g = data & 0xff;
345 data >>= 8;
346 r = data & 0xff;
347 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
348 width -= 1;
349 src += 4;
353 static void pxa2xx_draw_line24t(void *opaque, uint8_t *dest, const uint8_t *src,
354 int width, int deststep)
356 uint32_t data;
357 unsigned int r, g, b;
358 while (width > 0) {
359 data = *(uint32_t *) src;
360 #ifdef SWAP_WORDS
361 data = bswap32(data);
362 #endif
363 b = (data & 0x7f) << 1;
364 data >>= 7;
365 g = data & 0xff;
366 data >>= 8;
367 r = data & 0xff;
368 data >>= 8;
369 if (data & 1) {
370 SKIP_PIXEL(dest);
371 } else {
372 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
374 width -= 1;
375 src += 4;
379 static void pxa2xx_draw_line25(void *opaque, uint8_t *dest, const uint8_t *src,
380 int width, int deststep)
382 uint32_t data;
383 unsigned int r, g, b;
384 while (width > 0) {
385 data = *(uint32_t *) src;
386 #ifdef SWAP_WORDS
387 data = bswap32(data);
388 #endif
389 b = data & 0xff;
390 data >>= 8;
391 g = data & 0xff;
392 data >>= 8;
393 r = data & 0xff;
394 data >>= 8;
395 if (data & 1) {
396 SKIP_PIXEL(dest);
397 } else {
398 COPY_PIXEL(dest, rgb_to_pixel32(r, g, b));
400 width -= 1;
401 src += 4;
405 /* Overlay planes disabled, no transparency */
406 static drawfn pxa2xx_draw_fn_32[16] = {
407 [0 ... 0xf] = NULL,
408 [pxa_lcdc_2bpp] = pxa2xx_draw_line2,
409 [pxa_lcdc_4bpp] = pxa2xx_draw_line4,
410 [pxa_lcdc_8bpp] = pxa2xx_draw_line8,
411 [pxa_lcdc_16bpp] = pxa2xx_draw_line16,
412 [pxa_lcdc_18bpp] = pxa2xx_draw_line18,
413 [pxa_lcdc_18pbpp] = pxa2xx_draw_line18p,
414 [pxa_lcdc_24bpp] = pxa2xx_draw_line24,
417 /* Overlay planes enabled, transparency used */
418 static drawfn pxa2xx_draw_fn_32t[16] = {
419 [0 ... 0xf] = NULL,
420 [pxa_lcdc_4bpp] = pxa2xx_draw_line4,
421 [pxa_lcdc_8bpp] = pxa2xx_draw_line8,
422 [pxa_lcdc_16bpp] = pxa2xx_draw_line16t,
423 [pxa_lcdc_19bpp] = pxa2xx_draw_line19,
424 [pxa_lcdc_19pbpp] = pxa2xx_draw_line19p,
425 [pxa_lcdc_24bpp] = pxa2xx_draw_line24t,
426 [pxa_lcdc_25bpp] = pxa2xx_draw_line25,
429 #undef COPY_PIXEL
430 #undef SKIP_PIXEL
432 #ifdef SWAP_WORDS
433 # undef SWAP_WORDS
434 #endif