#ifndef _FB_DRAW_H #define _FB_DRAW_H #include /* * Compose two values, using a bitmask as decision value * This is equivalent to (a & mask) | (b & ~mask) */ static inline unsigned long comp(unsigned long a, unsigned long b, unsigned long mask) { return ((a ^ b) & mask) ^ b; } /* * Create a pattern with the given pixel's color */ #if BITS_PER_LONG == 64 static inline unsigned long pixel_to_pat( u32 bpp, u32 pixel) { switch (bpp) { case 1: return 0xfffffffffffffffful*pixel; case 2: return 0x5555555555555555ul*pixel; case 4: return 0x1111111111111111ul*pixel; case 8: return 0x0101010101010101ul*pixel; case 12: return 0x0001001001001001ul*pixel; case 16: return 0x0001000100010001ul*pixel; case 24: return 0x0000000001000001ul*pixel; case 32: return 0x0000000100000001ul*pixel; default: panic("pixel_to_pat(): unsupported pixelformat\n"); } } #else static inline unsigned long pixel_to_pat( u32 bpp, u32 pixel) { switch (bpp) { case 1: return 0xfffffffful*pixel; case 2: return 0x55555555ul*pixel; case 4: return 0x11111111ul*pixel; case 8: return 0x01010101ul*pixel; case 12: return 0x00001001ul*pixel; case 16: return 0x00010001ul*pixel; case 24: return 0x00000001ul*pixel; case 32: return 0x00000001ul*pixel; default: panic("pixel_to_pat(): unsupported pixelformat\n"); } } #endif #endif /* FB_DRAW_H */