]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/services/gfx/mw/v2_0/src/drivers/fb.h
Initial revision
[karo-tx-redboot.git] / packages / services / gfx / mw / v2_0 / src / drivers / fb.h
1 /*
2  * Copyright (c) 1999, 2000, 2001 Greg Haerr <greg@censoft.com>
3  *
4  * Framebuffer drivers header file for Microwindows Screen Drivers
5  */
6
7 /* Linux framebuffer critical sections*/
8 #if VTSWITCH
9 extern volatile int mwdrawing;
10 #define DRAWON          ++mwdrawing
11 #define DRAWOFF         --mwdrawing
12 #else
13 #define DRAWON
14 #define DRAWOFF
15 #endif
16
17 typedef unsigned char *         ADDR8;
18 typedef unsigned short *        ADDR16;
19 typedef unsigned long *         ADDR32;
20
21 /* ROP macro for 16 drawing modes*/
22 #define CHECK(f,d)      
23
24 /* applyOp w/stored dst*/
25 #define applyOp(op, src, pdst, type)            \
26 {                                               \
27         type d = (pdst);                        \
28         switch (op) {                           \
29         case MWMODE_XOR:                        \
30                 *d ^= (src);                    \
31                 CHECK("XOR", *d);               \
32                 break;                          \
33         case MWMODE_AND:                        \
34                 *d &= (src);                    \
35                 CHECK("AND", *d);               \
36                 break;                          \
37         case MWMODE_OR:                         \
38                 *d |= (src);                    \
39                 CHECK("OR", *d);                \
40                 break;                          \
41         case MWMODE_CLEAR:                      \
42                 *d = 0;                         \
43                 CHECK("CLEAR", *d);             \
44                 break;                          \
45         case MWMODE_SETTO1:                     \
46                 *d = -1;                        \
47                 CHECK("SETTO1", *d);            \
48                 break;                          \
49         case MWMODE_EQUIV:                      \
50                 *d = ~(*d ^ (src));             \
51                 CHECK("EQUIV", *d);             \
52                 break;                          \
53         case MWMODE_NOR:                        \
54                 *d = ~(*d | (src));             \
55                 CHECK("NOR", *d);               \
56                 break;                          \
57         case MWMODE_NAND:                       \
58                 *d = ~(*d & (src));             \
59                 CHECK("NAND", *d);              \
60                 break;                          \
61         case MWMODE_INVERT:                     \
62                 *d = ~*d;                       \
63                 CHECK("INVERT", *d);            \
64                 break;                          \
65         case MWMODE_COPYINVERTED:               \
66                 *d = ~(src);                    \
67                 CHECK("COPYINVERTED", *d);      \
68                 break;                          \
69         case MWMODE_ORINVERTED:                 \
70                 *d |= ~(src);                   \
71                 CHECK("ORINVERTED", *d);        \
72                 break;                          \
73         case MWMODE_ANDINVERTED:                \
74                 *d &= ~(src);                   \
75                 CHECK("ANDINVERTED", *d);       \
76                 break;                          \
77         case MWMODE_ORREVERSE:                  \
78                 *d = ~*d | (src);               \
79                 CHECK("ORREVERSE", *d);         \
80                 break;                          \
81         case MWMODE_ANDREVERSE:                 \
82                 *d = ~*d & (src);               \
83                 CHECK("ANDREVERSE", *d);        \
84                 break;                          \
85         case MWMODE_COPY:                       \
86                 *d = (src);                     \
87                 CHECK("COPY", *d);              \
88                 break;                          \
89         case MWMODE_NOOP:                       \
90                 CHECK("NOOP", *d);              \
91                 break;                          \
92         }                                       \
93 }
94
95 /* applyOp w/return value*/
96 #define DEFINE_applyOpR                         \
97 static inline int applyOpR(op, src, dst)        \
98 {                                               \
99         switch (op) {                           \
100         case MWMODE_XOR:                        \
101                 return (src) ^ (dst);           \
102         case MWMODE_AND:                        \
103                 return (src) & (dst);           \
104         case MWMODE_OR:                         \
105                 return (src) | (dst);           \
106         case MWMODE_CLEAR:                      \
107                 return 0;                       \
108         case MWMODE_SETTO1:                     \
109                 return -1;                      \
110         case MWMODE_EQUIV:                      \
111                 return ~((src) ^ (dst));        \
112         case MWMODE_NOR:                        \
113                 return ~((src) | (dst));        \
114         case MWMODE_NAND:                       \
115                 return ~((src) & (dst));        \
116         case MWMODE_INVERT:                     \
117                 return ~(dst);                  \
118         case MWMODE_COPYINVERTED:               \
119                 return ~(src);                  \
120         case MWMODE_ORINVERTED:                 \
121                 return ~(src) | (dst);          \
122         case MWMODE_ANDINVERTED:                \
123                 return ~(src) & (dst);          \
124         case MWMODE_ORREVERSE:                  \
125                 return (src) | ~(dst);          \
126         case MWMODE_ANDREVERSE:                 \
127                 return (src) & ~(dst);          \
128         case MWMODE_COPY:                       \
129                 return (src);                   \
130         case MWMODE_NOOP:                       \
131         default:                                \
132                 return (dst);                   \
133         }                                       \
134 }
135
136 /* global vars*/
137 extern int      gr_mode;        /* temp kluge*/
138
139 /* entry points*/
140 /* scr_fb.c*/
141 void ioctl_getpalette(int start, int len, short *red, short *green,short *blue);
142 void ioctl_setpalette(int start, int len, short *red, short *green,short *blue);
143
144 /* genmem.c*/
145 void    gen_fillrect(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2,
146                 MWPIXELVAL c);
147 MWBOOL  set_subdriver(PSD psd, PSUBDRIVER subdriver, MWBOOL init);
148 void    get_subdriver(PSD psd, PSUBDRIVER subdriver);
149
150 /* fb.c*/
151 PSUBDRIVER select_fb_subdriver(PSD psd);