2 * linux/drivers/video/virgefb.h -- CyberVision64 definitions for the
5 * Copyright (c) 1998 Alan Bair
7 * This file is based on the initial port to Linux of grf_cvreg.h:
9 * Copyright (c) 1997 Antonio Santos
11 * The original work is from the NetBSD CyberVision 64 framebuffer driver
12 * and support files (grf_cv.c, grf_cvreg.h, ite_cv.c):
13 * Permission to use the source of this driver was obtained from the
14 * author Michael Teske by Alan Bair.
16 * Copyright (c) 1995 Michael Teske
22 * This file is subject to the terms and conditions of the GNU General Public
23 * License. See the file COPYING in the main directory of this archive
27 /* Enhanced register mapping (MMIO mode) */
29 #define S3_CRTC_ADR 0x03d4
30 #define S3_CRTC_DATA 0x03d5
32 #define S3_REG_LOCK2 0x39
33 #define S3_HGC_MODE 0x45
35 #define S3_HWGC_ORGX_H 0x46
36 #define S3_HWGC_ORGX_L 0x47
37 #define S3_HWGC_ORGY_H 0x48
38 #define S3_HWGC_ORGY_L 0x49
39 #define S3_HWGC_DX 0x4e
40 #define S3_HWGC_DY 0x4f
42 #define S3_LAW_CTL 0x58
44 /**************************************************/
47 * Defines for the used register addresses (mw)
49 * NOTE: There are some registers that have different addresses when
50 * in mono or color mode. We only support color mode, and thus
51 * some addresses won't work in mono-mode!
53 * General and VGA-registers taken from retina driver. Fixed a few
54 * bugs in it. (SR and GR read address is Port + 1, NOT Port)
58 /* General Registers: */
59 #define GREG_MISC_OUTPUT_R 0x03CC
60 #define GREG_MISC_OUTPUT_W 0x03C2
61 #define GREG_FEATURE_CONTROL_R 0x03CA
62 #define GREG_FEATURE_CONTROL_W 0x03DA
63 #define GREG_INPUT_STATUS0_R 0x03C2
64 #define GREG_INPUT_STATUS1_R 0x03DA
66 /* Setup Registers: */
67 #define SREG_VIDEO_SUBS_ENABLE 0x03C3 /* virge */
69 /* Attribute Controller: */
70 #define ACT_ADDRESS 0x03C0
71 #define ACT_ADDRESS_R 0x03C1
72 #define ACT_ADDRESS_W 0x03C0
73 #define ACT_ADDRESS_RESET 0x03DA
74 #define ACT_ID_PALETTE0 0x00
75 #define ACT_ID_PALETTE1 0x01
76 #define ACT_ID_PALETTE2 0x02
77 #define ACT_ID_PALETTE3 0x03
78 #define ACT_ID_PALETTE4 0x04
79 #define ACT_ID_PALETTE5 0x05
80 #define ACT_ID_PALETTE6 0x06
81 #define ACT_ID_PALETTE7 0x07
82 #define ACT_ID_PALETTE8 0x08
83 #define ACT_ID_PALETTE9 0x09
84 #define ACT_ID_PALETTE10 0x0A
85 #define ACT_ID_PALETTE11 0x0B
86 #define ACT_ID_PALETTE12 0x0C
87 #define ACT_ID_PALETTE13 0x0D
88 #define ACT_ID_PALETTE14 0x0E
89 #define ACT_ID_PALETTE15 0x0F
90 #define ACT_ID_ATTR_MODE_CNTL 0x10
91 #define ACT_ID_OVERSCAN_COLOR 0x11
92 #define ACT_ID_COLOR_PLANE_ENA 0x12
93 #define ACT_ID_HOR_PEL_PANNING 0x13
94 #define ACT_ID_COLOR_SELECT 0x14 /* virge PX_PADD pixel padding register */
96 /* Graphics Controller: */
97 #define GCT_ADDRESS 0x03CE
98 #define GCT_ADDRESS_R 0x03CF
99 #define GCT_ADDRESS_W 0x03CF
100 #define GCT_ID_SET_RESET 0x00
101 #define GCT_ID_ENABLE_SET_RESET 0x01
102 #define GCT_ID_COLOR_COMPARE 0x02
103 #define GCT_ID_DATA_ROTATE 0x03
104 #define GCT_ID_READ_MAP_SELECT 0x04
105 #define GCT_ID_GRAPHICS_MODE 0x05
106 #define GCT_ID_MISC 0x06
107 #define GCT_ID_COLOR_XCARE 0x07
108 #define GCT_ID_BITMASK 0x08
111 #define SEQ_ADDRESS 0x03C4
112 #define SEQ_ADDRESS_R 0x03C5
113 #define SEQ_ADDRESS_W 0x03C5
114 #define SEQ_ID_RESET 0x00
115 #define SEQ_ID_CLOCKING_MODE 0x01
116 #define SEQ_ID_MAP_MASK 0x02
117 #define SEQ_ID_CHAR_MAP_SELECT 0x03
118 #define SEQ_ID_MEMORY_MODE 0x04
119 #define SEQ_ID_UNKNOWN1 0x05
120 #define SEQ_ID_UNKNOWN2 0x06
121 #define SEQ_ID_UNKNOWN3 0x07
123 #define SEQ_ID_UNLOCK_EXT 0x08
124 #define SEQ_ID_EXT_SEQ_REG9 0x09 /* b7 = 1 extended reg access by MMIO only */
125 #define SEQ_ID_BUS_REQ_CNTL 0x0A
126 #define SEQ_ID_EXT_MISC_SEQ 0x0B
127 #define SEQ_ID_UNKNOWN4 0x0C
128 #define SEQ_ID_EXT_SEQ 0x0D
129 #define SEQ_ID_UNKNOWN5 0x0E
130 #define SEQ_ID_UNKNOWN6 0x0F
131 #define SEQ_ID_MCLK_LO 0x10
132 #define SEQ_ID_MCLK_HI 0x11
133 #define SEQ_ID_DCLK_LO 0x12
134 #define SEQ_ID_DCLK_HI 0x13
135 #define SEQ_ID_CLKSYN_CNTL_1 0x14
136 #define SEQ_ID_CLKSYN_CNTL_2 0x15
137 #define SEQ_ID_CLKSYN_TEST_HI 0x16 /* reserved for S3 testing of the */
138 #define SEQ_ID_CLKSYN_TEST_LO 0x17 /* internal clock synthesizer */
139 #define SEQ_ID_RAMDAC_CNTL 0x18
140 #define SEQ_ID_MORE_MAGIC 0x1A
141 #define SEQ_ID_SIGNAL_SELECT 0x1C /* new for virge */
143 /* CRT Controller: */
144 #define CRT_ADDRESS 0x03D4
145 #define CRT_ADDRESS_R 0x03D5
146 #define CRT_ADDRESS_W 0x03D5
147 #define CRT_ID_HOR_TOTAL 0x00
148 #define CRT_ID_HOR_DISP_ENA_END 0x01
149 #define CRT_ID_START_HOR_BLANK 0x02
150 #define CRT_ID_END_HOR_BLANK 0x03
151 #define CRT_ID_START_HOR_RETR 0x04
152 #define CRT_ID_END_HOR_RETR 0x05
153 #define CRT_ID_VER_TOTAL 0x06
154 #define CRT_ID_OVERFLOW 0x07
155 #define CRT_ID_PRESET_ROW_SCAN 0x08
156 #define CRT_ID_MAX_SCAN_LINE 0x09
157 #define CRT_ID_CURSOR_START 0x0A
158 #define CRT_ID_CURSOR_END 0x0B
159 #define CRT_ID_START_ADDR_HIGH 0x0C
160 #define CRT_ID_START_ADDR_LOW 0x0D
161 #define CRT_ID_CURSOR_LOC_HIGH 0x0E
162 #define CRT_ID_CURSOR_LOC_LOW 0x0F
163 #define CRT_ID_START_VER_RETR 0x10
164 #define CRT_ID_END_VER_RETR 0x11
165 #define CRT_ID_VER_DISP_ENA_END 0x12
166 #define CRT_ID_SCREEN_OFFSET 0x13
167 #define CRT_ID_UNDERLINE_LOC 0x14
168 #define CRT_ID_START_VER_BLANK 0x15
169 #define CRT_ID_END_VER_BLANK 0x16
170 #define CRT_ID_MODE_CONTROL 0x17
171 #define CRT_ID_LINE_COMPARE 0x18
172 #define CRT_ID_GD_LATCH_RBACK 0x22
173 #define CRT_ID_ACT_TOGGLE_RBACK 0x24
174 #define CRT_ID_ACT_INDEX_RBACK 0x26
175 /* S3 extensions: S3 VGA Registers */
176 #define CRT_ID_DEVICE_HIGH 0x2D
177 #define CRT_ID_DEVICE_LOW 0x2E
178 #define CRT_ID_REVISION 0x2F
179 #define CRT_ID_CHIP_ID_REV 0x30
180 #define CRT_ID_MEMORY_CONF 0x31
181 #define CRT_ID_BACKWAD_COMP_1 0x32
182 #define CRT_ID_BACKWAD_COMP_2 0x33
183 #define CRT_ID_BACKWAD_COMP_3 0x34
184 #define CRT_ID_REGISTER_LOCK 0x35
185 #define CRT_ID_CONFIG_1 0x36
186 #define CRT_ID_CONFIG_2 0x37
187 #define CRT_ID_REGISTER_LOCK_1 0x38
188 #define CRT_ID_REGISTER_LOCK_2 0x39
189 #define CRT_ID_MISC_1 0x3A
190 #define CRT_ID_DISPLAY_FIFO 0x3B
191 #define CRT_ID_LACE_RETR_START 0x3C
192 /* S3 extensions: System Control Registers */
193 #define CRT_ID_SYSTEM_CONFIG 0x40
194 #define CRT_ID_BIOS_FLAG 0x41
195 #define CRT_ID_LACE_CONTROL 0x42
196 #define CRT_ID_EXT_MODE 0x43
197 #define CRT_ID_HWGC_MODE 0x45 /* HWGC = Hardware Graphics Cursor */
198 #define CRT_ID_HWGC_ORIGIN_X_HI 0x46
199 #define CRT_ID_HWGC_ORIGIN_X_LO 0x47
200 #define CRT_ID_HWGC_ORIGIN_Y_HI 0x48
201 #define CRT_ID_HWGC_ORIGIN_Y_LO 0x49
202 #define CRT_ID_HWGC_FG_STACK 0x4A
203 #define CRT_ID_HWGC_BG_STACK 0x4B
204 #define CRT_ID_HWGC_START_AD_HI 0x4C
205 #define CRT_ID_HWGC_START_AD_LO 0x4D
206 #define CRT_ID_HWGC_DSTART_X 0x4E
207 #define CRT_ID_HWGC_DSTART_Y 0x4F
208 /* S3 extensions: System Extension Registers */
209 #define CRT_ID_EXT_SYS_CNTL_1 0x50 /* NOT a virge register */
210 #define CRT_ID_EXT_SYS_CNTL_2 0x51
211 #define CRT_ID_EXT_BIOS_FLAG_1 0x52
212 #define CRT_ID_EXT_MEM_CNTL_1 0x53
213 #define CRT_ID_EXT_MEM_CNTL_2 0x54
214 #define CRT_ID_EXT_DAC_CNTL 0x55
215 #define CRT_ID_EX_SYNC_1 0x56
216 #define CRT_ID_EX_SYNC_2 0x57
217 #define CRT_ID_LAW_CNTL 0x58 /* LAW = Linear Address Window */
218 #define CRT_ID_LAW_POS_HI 0x59
219 #define CRT_ID_LAW_POS_LO 0x5A
220 #define CRT_ID_GOUT_PORT 0x5C
221 #define CRT_ID_EXT_HOR_OVF 0x5D
222 #define CRT_ID_EXT_VER_OVF 0x5E
223 #define CRT_ID_EXT_MEM_CNTL_3 0x60 /* NOT a virge register */
224 #define CRT_ID_EXT_MEM_CNTL_4 0x61
225 #define CRT_ID_EX_SYNC_3 0x63 /* NOT a virge register */
226 #define CRT_ID_EXT_MISC_CNTL 0x65
227 #define CRT_ID_EXT_MISC_CNTL_1 0x66
228 #define CRT_ID_EXT_MISC_CNTL_2 0x67
229 #define CRT_ID_CONFIG_3 0x68
230 #define CRT_ID_EXT_SYS_CNTL_3 0x69
231 #define CRT_ID_EXT_SYS_CNTL_4 0x6A
232 #define CRT_ID_EXT_BIOS_FLAG_3 0x6B
233 #define CRT_ID_EXT_BIOS_FLAG_4 0x6C
234 /* S3 virge extensions: more System Extension Registers */
235 #define CRT_ID_EXT_BIOS_FLAG_5 0x6D
236 #define CRT_ID_EXT_DAC_TEST 0x6E
237 #define CRT_ID_CONFIG_4 0x6F
240 #define VDAC_ADDRESS 0x03c8
241 #define VDAC_ADDRESS_W 0x03c8
242 #define VDAC_ADDRESS_R 0x03c7
243 #define VDAC_STATE 0x03c7
244 #define VDAC_DATA 0x03c9
245 #define VDAC_MASK 0x03c6
247 /* Miscellaneous Registers */
248 #define MR_SUBSYSTEM_STATUS_R 0x8504 /* new for virge */
249 #define MR_SUBSYSTEM_CNTL_W 0x8504 /* new for virge */
250 #define MR_ADVANCED_FUNCTION_CONTROL 0x850C /* new for virge */
253 #define BLT_COMMAND_SET 0xA500
254 #define BLT_SIZE_X_Y 0xA504
255 #define BLT_SRC_X_Y 0xA508
256 #define BLT_DEST_X_Y 0xA50C
258 #define BLT_SRC_BASE 0xa4d4
259 #define BLT_DEST_BASE 0xa4d8
260 #define BLT_CLIP_LEFT_RIGHT 0xa4dc
261 #define BLT_CLIP_TOP_BOTTOM 0xa4e0
262 #define BLT_SRC_DEST_STRIDE 0xa4e4
263 #define BLT_MONO_PATTERN_0 0xa4e8
264 #define BLT_MONO_PATTERN_1 0xa4ec
265 #define BLT_PATTERN_COLOR 0xa4f4
267 #define L2D_COMMAND_SET 0xA900
268 #define L2D_CLIP_LEFT_RIGHT 0xA8DC
269 #define L2D_CLIP_TOP_BOTTOM 0xA8E0
271 #define P2D_COMMAND_SET 0xAD00
272 #define P2D_CLIP_LEFT_RIGHT 0xACDC
273 #define P2D_CLIP_TOP_BOTTOM 0xACE0
275 #define CMD_NOP (0xf << 27) /* %1111 << 27, was 0x07 */
276 #define S3V_BITBLT (0x0 << 27)
277 #define S3V_RECTFILL (0x2 << 27)
278 #define S3V_AUTOEXE 0x01
279 #define S3V_HWCLIP 0x02
280 #define S3V_DRAW 0x20
281 #define S3V_DST_8BPP 0x00
282 #define S3V_DST_16BPP 0x04
283 #define S3V_DST_24BPP 0x08
284 #define S3V_MONO_PAT 0x100
286 #define S3V_BLT_COPY (0xcc<<17)
287 #define S3V_BLT_CLEAR (0x00<<17)
288 #define S3V_BLT_SET (0xff<<17)