]> err.no Git - linux-2.6/blobdiff - drivers/video/fb_draw.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
[linux-2.6] / drivers / video / fb_draw.h
index 816843f06bb7b19c46b81d38d5c2da2575054d2a..a2a0618d86a54aa34ed7a45364e559bcc040636e 100644 (file)
@@ -72,6 +72,27 @@ pixel_to_pat( u32 bpp, u32 pixel)
 #endif
 
 #ifdef CONFIG_FB_CFB_REV_PIXELS_IN_BYTE
+#if BITS_PER_LONG == 64
+#define REV_PIXELS_MASK1 0x5555555555555555ul
+#define REV_PIXELS_MASK2 0x3333333333333333ul
+#define REV_PIXELS_MASK4 0x0f0f0f0f0f0f0f0ful
+#else
+#define REV_PIXELS_MASK1 0x55555555ul
+#define REV_PIXELS_MASK2 0x33333333ul
+#define REV_PIXELS_MASK4 0x0f0f0f0ful
+#endif
+
+static inline unsigned long fb_rev_pixels_in_long(unsigned long val,
+                                                 u32 bswapmask)
+{
+       if (bswapmask & 1)
+               val = comp(val >> 1, val << 1, REV_PIXELS_MASK1);
+       if (bswapmask & 2)
+               val = comp(val >> 2, val << 2, REV_PIXELS_MASK2);
+       if (bswapmask & 3)
+               val = comp(val >> 4, val << 4, REV_PIXELS_MASK4);
+       return val;
+}
 
 static inline u32 fb_shifted_pixels_mask_u32(u32 index, u32 bswapmask)
 {
@@ -131,6 +152,12 @@ static inline u32 fb_compute_bswapmask(struct fb_info *info)
 
 #else /* CONFIG_FB_CFB_REV_PIXELS_IN_BYTE */
 
+static inline unsigned long fb_rev_pixels_in_long(unsigned long val,
+                                                 u32 bswapmask)
+{
+       return val;
+}
+
 #define fb_shifted_pixels_mask_u32(i, b) FB_SHIFT_HIGH(~(u32)0, (i))
 #define fb_shifted_pixels_mask_long(i, b) FB_SHIFT_HIGH(~0UL, (i))
 #define fb_compute_bswapmask(...) 0