fb_draw.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef _FB_DRAW_H
  2. #define _FB_DRAW_H
  3. #include <asm/types.h>
  4. /*
  5. * Compose two values, using a bitmask as decision value
  6. * This is equivalent to (a & mask) | (b & ~mask)
  7. */
  8. static inline unsigned long
  9. comp(unsigned long a, unsigned long b, unsigned long mask)
  10. {
  11. return ((a ^ b) & mask) ^ b;
  12. }
  13. /*
  14. * Create a pattern with the given pixel's color
  15. */
  16. #if BITS_PER_LONG == 64
  17. static inline unsigned long
  18. pixel_to_pat( u32 bpp, u32 pixel)
  19. {
  20. switch (bpp) {
  21. case 1:
  22. return 0xfffffffffffffffful*pixel;
  23. case 2:
  24. return 0x5555555555555555ul*pixel;
  25. case 4:
  26. return 0x1111111111111111ul*pixel;
  27. case 8:
  28. return 0x0101010101010101ul*pixel;
  29. case 12:
  30. return 0x0001001001001001ul*pixel;
  31. case 16:
  32. return 0x0001000100010001ul*pixel;
  33. case 24:
  34. return 0x0000000001000001ul*pixel;
  35. case 32:
  36. return 0x0000000100000001ul*pixel;
  37. default:
  38. panic("pixel_to_pat(): unsupported pixelformat\n");
  39. }
  40. }
  41. #else
  42. static inline unsigned long
  43. pixel_to_pat( u32 bpp, u32 pixel)
  44. {
  45. switch (bpp) {
  46. case 1:
  47. return 0xfffffffful*pixel;
  48. case 2:
  49. return 0x55555555ul*pixel;
  50. case 4:
  51. return 0x11111111ul*pixel;
  52. case 8:
  53. return 0x01010101ul*pixel;
  54. case 12:
  55. return 0x00001001ul*pixel;
  56. case 16:
  57. return 0x00010001ul*pixel;
  58. case 24:
  59. return 0x00000001ul*pixel;
  60. case 32:
  61. return 0x00000001ul*pixel;
  62. default:
  63. panic("pixel_to_pat(): unsupported pixelformat\n");
  64. }
  65. }
  66. #endif
  67. #endif /* FB_DRAW_H */