1 /*
2  * linux/drivers/video/retz3fb.h -- Defines and macros for the RetinaZ3 frame
3  *				    buffer device
4  *
5  *    Copyright (C) 1997 Jes Sorensen
6  *
7  * History:
8  *   - 22 Jan 97: Initial work
9  *
10  *
11  * This file is subject to the terms and conditions of the GNU General Public
12  * License.  See the file COPYING in the main directory of this archive
13  * for more details.
14  */
15 
16 /*
17  * Macros to read and write to registers.
18  */
19 #define reg_w(regs, reg,dat) (*(regs + reg) = dat)
20 #define reg_r(regs, reg) (*(regs + reg))
21 
22 /*
23  * Macro to access the sequencer.
24  */
25 #define seq_w(regs, sreg, sdat) \
26 	do{ reg_w(regs, SEQ_IDX, sreg); reg_w(regs, SEQ_DATA, sdat); } while(0)
27 
28 /*
29  * Macro to access the CRT controller.
30  */
31 #define crt_w(regs, creg, cdat) \
32 	do{ reg_w(regs, CRT_IDX, creg); reg_w(regs, CRT_DATA, cdat); } while(0)
33 
34 /*
35  * Macro to access the graphics controller.
36  */
37 #define gfx_w(regs, greg, gdat) \
38 	do{ reg_w(regs, GFX_IDX, greg); reg_w(regs, GFX_DATA, gdat); } while(0)
39 
40 /*
41  * Macro to access the attribute controller.
42  */
43 #define attr_w(regs, areg, adat) \
44 	do{ reg_w(regs, ACT_IDX, areg); reg_w(regs, ACT_DATA, adat); } while(0)
45 
46 /*
47  * Macro to access the pll.
48  */
49 #define pll_w(regs, preg, pdat) \
50 	do{ reg_w(regs, PLL_IDX, preg); \
51 	    reg_w(regs, PLL_DATA, (pdat & 0xff)); \
52 	    reg_w(regs, PLL_DATA, (pdat >> 8));\
53 	} while(0)
54 
55 /*
56  * Offsets
57  */
58 #define VIDEO_MEM_OFFSET	0x00c00000
59 #define ACM_OFFSET		0x00b00000
60 
61 /*
62  * Accelerator Control Menu
63  */
64 #define ACM_PRIMARY_OFFSET	0x00
65 #define ACM_SECONDARY_OFFSET	0x04
66 #define ACM_MODE_CONTROL	0x08
67 #define ACM_CURSOR_POSITION	0x0c
68 #define ACM_START_STATUS	0x30
69 #define ACM_CONTROL		0x34
70 #define ACM_RASTEROP_ROTATION	0x38
71 #define ACM_BITMAP_DIMENSION	0x3c
72 #define ACM_DESTINATION		0x40
73 #define ACM_SOURCE		0x44
74 #define ACM_PATTERN		0x48
75 #define ACM_FOREGROUND		0x4c
76 #define ACM_BACKGROUND		0x50
77 
78 /*
79  * Video DAC addresses
80  */
81 #define VDAC_ADDRESS		0x03c8
82 #define VDAC_ADDRESS_W		0x03c8
83 #define VDAC_ADDRESS_R		0x03c7
84 #define VDAC_STATE		0x03c7
85 #define VDAC_DATA		0x03c9
86 #define VDAC_MASK		0x03c6
87 
88 /*
89  * Sequencer
90  */
91 #define SEQ_IDX			0x03c4	/* Sequencer Index */
92 #define SEQ_DATA		0x03c5
93 #define SEQ_RESET		0x00
94 #define SEQ_CLOCKING_MODE	0x01
95 #define SEQ_MAP_MASK		0x02
96 #define SEQ_CHAR_MAP_SELECT	0x03
97 #define SEQ_MEMORY_MODE		0x04
98 #define SEQ_EXTENDED_ENABLE	0x05	/* NCR extensions */
99 #define SEQ_UNKNOWN1         	0x06
100 #define SEQ_UNKNOWN2         	0x07
101 #define SEQ_CHIP_ID		0x08
102 #define SEQ_UNKNOWN3         	0x09
103 #define SEQ_CURSOR_COLOR1	0x0a
104 #define SEQ_CURSOR_COLOR0	0x0b
105 #define SEQ_CURSOR_CONTROL	0x0c
106 #define SEQ_CURSOR_X_LOC_HI	0x0d
107 #define SEQ_CURSOR_X_LOC_LO	0x0e
108 #define SEQ_CURSOR_Y_LOC_HI	0x0f
109 #define SEQ_CURSOR_Y_LOC_LO	0x10
110 #define SEQ_CURSOR_X_INDEX	0x11
111 #define SEQ_CURSOR_Y_INDEX	0x12
112 #define SEQ_CURSOR_STORE_HI	0x13
113 #define SEQ_CURSOR_STORE_LO	0x14
114 #define SEQ_CURSOR_ST_OFF_HI	0x15
115 #define SEQ_CURSOR_ST_OFF_LO	0x16
116 #define SEQ_CURSOR_PIXELMASK	0x17
117 #define SEQ_PRIM_HOST_OFF_HI	0x18
118 #define SEQ_PRIM_HOST_OFF_LO	0x19
119 #define SEQ_LINEAR_0		0x1a
120 #define SEQ_LINEAR_1		0x1b
121 #define SEQ_SEC_HOST_OFF_HI	0x1c
122 #define SEQ_SEC_HOST_OFF_LO	0x1d
123 #define SEQ_EXTENDED_MEM_ENA	0x1e
124 #define SEQ_EXT_CLOCK_MODE	0x1f
125 #define SEQ_EXT_VIDEO_ADDR	0x20
126 #define SEQ_EXT_PIXEL_CNTL	0x21
127 #define SEQ_BUS_WIDTH_FEEDB	0x22
128 #define SEQ_PERF_SELECT		0x23
129 #define SEQ_COLOR_EXP_WFG	0x24
130 #define SEQ_COLOR_EXP_WBG	0x25
131 #define SEQ_EXT_RW_CONTROL	0x26
132 #define SEQ_MISC_FEATURE_SEL	0x27
133 #define SEQ_COLOR_KEY_CNTL	0x28
134 #define SEQ_COLOR_KEY_MATCH0	0x29
135 #define SEQ_COLOR_KEY_MATCH1 	0x2a
136 #define SEQ_COLOR_KEY_MATCH2 	0x2b
137 #define SEQ_UNKNOWN6         	0x2c
138 #define SEQ_CRC_CONTROL		0x2d
139 #define SEQ_CRC_DATA_LOW	0x2e
140 #define SEQ_CRC_DATA_HIGH	0x2f
141 #define SEQ_MEMORY_MAP_CNTL	0x30
142 #define SEQ_ACM_APERTURE_1	0x31
143 #define SEQ_ACM_APERTURE_2	0x32
144 #define SEQ_ACM_APERTURE_3	0x33
145 #define SEQ_BIOS_UTILITY_0	0x3e
146 #define SEQ_BIOS_UTILITY_1	0x3f
147 
148 /*
149  * Graphics Controller
150  */
151 #define GFX_IDX			0x03ce
152 #define GFX_DATA		0x03cf
153 #define GFX_SET_RESET		0x00
154 #define GFX_ENABLE_SET_RESET	0x01
155 #define GFX_COLOR_COMPARE	0x02
156 #define GFX_DATA_ROTATE		0x03
157 #define GFX_READ_MAP_SELECT	0x04
158 #define GFX_GRAPHICS_MODE	0x05
159 #define GFX_MISC		0x06
160 #define GFX_COLOR_XCARE		0x07
161 #define GFX_BITMASK		0x08
162 
163 /*
164  * CRT Controller
165  */
166 #define CRT_IDX			0x03d4
167 #define CRT_DATA		0x03d5
168 #define CRT_HOR_TOTAL		0x00
169 #define CRT_HOR_DISP_ENA_END	0x01
170 #define CRT_START_HOR_BLANK	0x02
171 #define CRT_END_HOR_BLANK	0x03
172 #define CRT_START_HOR_RETR	0x04
173 #define CRT_END_HOR_RETR	0x05
174 #define CRT_VER_TOTAL		0x06
175 #define CRT_OVERFLOW		0x07
176 #define CRT_PRESET_ROW_SCAN	0x08
177 #define CRT_MAX_SCAN_LINE	0x09
178 #define CRT_CURSOR_START	0x0a
179 #define CRT_CURSOR_END		0x0b
180 #define CRT_START_ADDR_HIGH	0x0c
181 #define CRT_START_ADDR_LOW	0x0d
182 #define CRT_CURSOR_LOC_HIGH	0x0e
183 #define CRT_CURSOR_LOC_LOW	0x0f
184 #define CRT_START_VER_RETR	0x10
185 #define CRT_END_VER_RETR	0x11
186 #define CRT_VER_DISP_ENA_END	0x12
187 #define CRT_OFFSET		0x13
188 #define CRT_UNDERLINE_LOC	0x14
189 #define CRT_START_VER_BLANK	0x15
190 #define CRT_END_VER_BLANK	0x16
191 #define CRT_MODE_CONTROL	0x17
192 #define CRT_LINE_COMPARE	0x18
193 #define CRT_UNKNOWN1         	0x19
194 #define CRT_UNKNOWN2         	0x1a
195 #define CRT_UNKNOWN3         	0x1b
196 #define CRT_UNKNOWN4         	0x1c
197 #define CRT_UNKNOWN5         	0x1d
198 #define CRT_UNKNOWN6         	0x1e
199 #define CRT_UNKNOWN7         	0x1f
200 #define CRT_UNKNOWN8         	0x20
201 #define CRT_UNKNOWN9		0x21
202 #define CRT_UNKNOWN10		0x22
203 #define CRT_UNKNOWN11      	0x23
204 #define CRT_UNKNOWN12      	0x24
205 #define CRT_UNKNOWN13      	0x25
206 #define CRT_UNKNOWN14      	0x26
207 #define CRT_UNKNOWN15      	0x27
208 #define CRT_UNKNOWN16      	0x28
209 #define CRT_UNKNOWN17      	0x29
210 #define CRT_UNKNOWN18      	0x2a
211 #define CRT_UNKNOWN19      	0x2b
212 #define CRT_UNKNOWN20      	0x2c
213 #define CRT_UNKNOWN21      	0x2d
214 #define CRT_UNKNOWN22      	0x2e
215 #define CRT_UNKNOWN23      	0x2f
216 #define CRT_EXT_HOR_TIMING1	0x30	/* NCR crt extensions */
217 #define CRT_EXT_START_ADDR	0x31
218 #define CRT_EXT_HOR_TIMING2	0x32
219 #define CRT_EXT_VER_TIMING	0x33
220 #define CRT_MONITOR_POWER	0x34
221 
222 /*
223  * General Registers
224  */
225 #define GREG_STATUS0_R		0x03c2
226 #define GREG_STATUS1_R		0x03da
227 #define GREG_MISC_OUTPUT_R	0x03cc
228 #define GREG_MISC_OUTPUT_W	0x03c2
229 #define GREG_FEATURE_CONTROL_R	0x03ca
230 #define GREG_FEATURE_CONTROL_W	0x03da
231 #define GREG_POS		0x0102
232 
233 /*
234  * Attribute Controller
235  */
236 #define ACT_IDX			0x03C0
237 #define ACT_ADDRESS_R		0x03C0
238 #define ACT_DATA		0x03C0
239 #define ACT_ADDRESS_RESET	0x03DA
240 #define ACT_PALETTE0		0x00
241 #define ACT_PALETTE1		0x01
242 #define ACT_PALETTE2		0x02
243 #define ACT_PALETTE3		0x03
244 #define ACT_PALETTE4		0x04
245 #define ACT_PALETTE5		0x05
246 #define ACT_PALETTE6		0x06
247 #define ACT_PALETTE7		0x07
248 #define ACT_PALETTE8		0x08
249 #define ACT_PALETTE9		0x09
250 #define ACT_PALETTE10		0x0A
251 #define ACT_PALETTE11		0x0B
252 #define ACT_PALETTE12		0x0C
253 #define ACT_PALETTE13		0x0D
254 #define ACT_PALETTE14		0x0E
255 #define ACT_PALETTE15		0x0F
256 #define ACT_ATTR_MODE_CNTL	0x10
257 #define ACT_OVERSCAN_COLOR	0x11
258 #define ACT_COLOR_PLANE_ENA	0x12
259 #define ACT_HOR_PEL_PANNING	0x13
260 #define ACT_COLOR_SELECT	0x14
261 
262 /*
263  * PLL
264  */
265 #define PLL_IDX			0x83c8
266 #define PLL_DATA		0x83c9
267 
268 /*
269  * Blitter operations
270  */
271 #define	Z3BLTclear		0x00	/* 0 */
272 #define Z3BLTand		0x80	/* src AND dst */
273 #define Z3BLTandReverse		0x40	/* src AND NOT dst */
274 #define Z3BLTcopy		0xc0	/* src */
275 #define Z3BLTandInverted	0x20	/* NOT src AND dst */
276 #define	Z3BLTnoop		0xa0	/* dst */
277 #define Z3BLTxor		0x60	/* src XOR dst */
278 #define Z3BLTor			0xe0	/* src OR dst */
279 #define Z3BLTnor		0x10	/* NOT src AND NOT dst */
280 #define Z3BLTequiv		0x90	/* NOT src XOR dst */
281 #define Z3BLTinvert		0x50	/* NOT dst */
282 #define Z3BLTorReverse		0xd0	/* src OR NOT dst */
283 #define Z3BLTcopyInverted	0x30	/* NOT src */
284 #define Z3BLTorInverted		0xb0	/* NOT src OR dst */
285 #define Z3BLTnand		0x70	/* NOT src OR NOT dst */
286 #define Z3BLTset		0xf0	/* 1 */
287