aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fb.h
diff options
context:
space:
mode:
authorAntonino A. Daplas <adaplas@gmail.com>2005-12-12 22:17:21 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-12 22:31:17 -0800
commitbe0d9b6c7aeaad1683059c00131cabd4c894c17c (patch)
treef7e55af855531331113cbddb98688f3901d48425 /include/linux/fb.h
parent[PATCH] fbdev: Shift pixel value before entering loop in cfbimageblit (diff)
downloadlinux-dev-be0d9b6c7aeaad1683059c00131cabd4c894c17c.tar.xz
linux-dev-be0d9b6c7aeaad1683059c00131cabd4c894c17c.zip
[PATCH] fbdev: Fix incorrect unaligned access in little-endian machines
The drawing function cfbfillrect does not work correctly when access is not unsigned-long aligned. It manifests as extra lines of pixels that are not complete drawn. Reversing the shift operator solves the problem, so I would presume that this bug would manifest only on little endian machines. The function cfbcopyarea may also have this bug. Aligned access should present no problems. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/fb.h')
-rw-r--r--include/linux/fb.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/fb.h b/include/linux/fb.h
index dab3a4decb44..a973be2cfe61 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -835,6 +835,18 @@ struct fb_info {
#endif
+#if defined (__BIG_ENDIAN)
+#define FB_LEFT_POS(bpp) (32 - bpp)
+#define FB_SHIFT_HIGH(val, bits) ((val) >> (bits))
+#define FB_SHIFT_LOW(val, bits) ((val) << (bits))
+#define FB_BIT_NR(b) (7 - (b))
+#else
+#define FB_LEFT_POS(bpp) (0)
+#define FB_SHIFT_HIGH(val, bits) ((val) << (bits))
+#define FB_SHIFT_LOW(val, bits) ((val) >> (bits))
+#define FB_BIT_NR(b) (b)
+#endif
+
/*
* `Generic' versions of the frame buffer device operations
*/