annotate vidix/s3_regs.h @ 26096:e6a565ec1a3b

New S3 VIDIX driver. Provides support for S3 Trio and S3 Virge chipsets. This deprecates the old Savage driver that worked with latest chips only. (synchronized with vidix.sf.net r326 and r327)
author ben
date Fri, 29 Feb 2008 20:01:28 +0000
parents
children 74106358c073
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26096
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
1 #ifndef _SAVAGE_REGS_H
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
2 #define _SAVAGE_REGS_H
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
3
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
4 #define S3_SAVAGE3D_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
5 #define S3_SAVAGE4_SERIES(chip) ((chip==S3_SAVAGE4) || (chip==S3_PROSAVAGE))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
6 #define S3_SAVAGE_MOBILE_SERIES(chip) ((chip==S3_SAVAGE_MX) || (chip==S3_SUPERSAVAGE))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
7 #define S3_SAVAGE_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
9 /*
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
10 * Chip tags. These are used to group the adapters into
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
11 * related families.
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
12 */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
13 enum S3CHIPTAGS {
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
14 S3_UNKNOWN = 0,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
15 S3_TRIO64V,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
16 S3_VIRGE,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
17 S3_SAVAGE3D,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
18 S3_SAVAGE_MX,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
19 S3_SAVAGE4,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
20 S3_PROSAVAGE,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
21 S3_SUPERSAVAGE,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
22 S3_SAVAGE2000,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
23 S3_LAST
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
24 };
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
25
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
26 #define BIOS_BSIZE 1024
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
27 #define BIOS_BASE 0xc0000
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
28
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
29 #define S3_NEWMMIO_REGBASE 0x1000000 /* 16MB */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
30 #define S3_NEWMMIO_REGSIZE 0x0010000 /* 64KB */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
31 #define S3_NEWMMIO_REGSIZE_SAVAGE 0x0080000 /* 512KB */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
32
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
33 #define BASE_FREQ 14.31818
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
34
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
35 /*
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
36 * There are two different streams engines used in the S3 line.
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
37 * The old engine is in the Trio64, Virge,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
38 * Savage3D, Savage4, SavagePro, and SavageTwister.
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
39 * The new engine is in the Savage2000, SavageMX,
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
40 * SavageIX, and SuperSavage.
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
41 */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
42
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
43 /* Old engine registers */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
44 #define PSTREAM_CONTROL_REG 0x8180
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
45 #define COL_CHROMA_KEY_CONTROL_REG 0x8184
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
46 #define SSTREAM_CONTROL_REG 0x8190
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
47 #define CHROMA_KEY_UPPER_BOUND_REG 0x8194
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
48 #define SSTREAM_STRETCH_REG 0x8198
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
49 #define COLOR_ADJUSTMENT_REG 0x819C
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
50 #define BLEND_CONTROL_REG 0x81A0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
51 #define PSTREAM_FBADDR0_REG 0x81C0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
52 #define PSTREAM_FBADDR1_REG 0x81C4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
53 #define PSTREAM_STRIDE_REG 0x81C8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
54 #define DOUBLE_BUFFER_REG 0x81CC
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
55 #define SSTREAM_FBADDR0_REG 0x81D0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
56 #define SSTREAM_FBADDR1_REG 0x81D4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
57 #define SSTREAM_STRIDE_REG 0x81D8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
58 #define OPAQUE_OVERLAY_CONTROL_REG 0x81DC
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
59 #define K1_VSCALE_REG 0x81E0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
60 #define SSTREAM_VSCALE_REG 0x81E0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
61 #define K2_VSCALE_REG 0x81E4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
62 #define SSTREAM_VINITIAL_REG 0x81E4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
63 #define DDA_VERT_REG 0x81E8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
64 #define SSTREAM_LINES_REG 0x81E8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
65 #define STREAMS_FIFO_REG 0x81EC
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
66 #define PSTREAM_WINDOW_START_REG 0x81F0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
67 #define PSTREAM_WINDOW_SIZE_REG 0x81F4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
68 #define SSTREAM_WINDOW_START_REG 0x81F8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
69 #define SSTREAM_WINDOW_SIZE_REG 0x81FC
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
70 #define FIFO_CONTROL 0x8200
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
71 #define PSTREAM_FBSIZE_REG 0x8300
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
72 #define SSTREAM_FBSIZE_REG 0x8304
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
73 #define SSTREAM_FBADDR2_REG 0x8308
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
74
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
75 /* New engine registers */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
76 #define PRI_STREAM_FBUF_ADDR0 0x81c0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
77 #define PRI_STREAM_FBUF_ADDR1 0x81c4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
78 #define PRI_STREAM_STRIDE 0x81c8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
79 #define PRI_STREAM_BUFFERSIZE 0x8214
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
80 #define SEC_STREAM_CKEY_LOW 0x8184
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
81 #define SEC_STREAM_CKEY_UPPER 0x8194
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
82 #define BLEND_CONTROL 0x8190
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
83 #define SEC_STREAM_COLOR_CONVERT1 0x8198
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
84 #define SEC_STREAM_COLOR_CONVERT2 0x819c
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
85 #define SEC_STREAM_COLOR_CONVERT3 0x81e4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
86 #define SEC_STREAM_HSCALING 0x81a0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
87 #define SEC_STREAM_BUFFERSIZE 0x81a8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
88 #define SEC_STREAM_HSCALE_NORMALIZE 0x81ac
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
89 #define SEC_STREAM_VSCALING 0x81e8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
90 #define SEC_STREAM_FBUF_ADDR0 0x81d0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
91 #define SEC_STREAM_FBUF_ADDR1 0x81d4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
92 #define SEC_STREAM_FBUF_ADDR2 0x81ec
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
93 #define SEC_STREAM_STRIDE 0x81d8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
94 #define SEC_STREAM_WINDOW_START 0x81f8
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
95 #define SEC_STREAM_WINDOW_SZ 0x81fc
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
96 #define SEC_STREAM_TILE_OFF 0x821c
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
97 #define SEC_STREAM_OPAQUE_OVERLAY 0x81dc
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
98
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
99 /* Savage 2000 registers */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
100 #define SEC_STREAM_COLOR_CONVERT0_2000 0x8198
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
101 #define SEC_STREAM_COLOR_CONVERT1_2000 0x819c
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
102 #define SEC_STREAM_COLOR_CONVERT2_2000 0x81e0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
103 #define SEC_STREAM_COLOR_CONVERT3_2000 0x81e4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
104
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
105 /* Virge+ registers */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
106 #define FIFO_CONTROL_REG 0x8200
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
107 #define MIU_CONTROL_REG 0x8204
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
108 #define STREAMS_TIMEOUT_REG 0x8208
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
109 #define MISC_TIMEOUT_REG 0x820c
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
110
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
111 /* VGA stuff */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
112 #define vgaCRIndex 0x3d4
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
113 #define vgaCRReg 0x3d5
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
114
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
115 /* CRT Control registers */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
116 #define EXT_MEM_CTRL1 0x53
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
117 #define LIN_ADDR_CTRL 0x58
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
118 #define EXT_MISC_CTRL2 0x67
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
119
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
120 /* Old engine constants */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
121 #define ENABLE_NEWMMIO 0x08
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
122 #define ENABLE_LFB 0x10
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
123 #define ENABLE_STREAMS_OLD 0x0c
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
124 #define NO_STREAMS_OLD 0xf3
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
125
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
126 /* New engine constants */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
127 #define ENABLE_STREAM1 0x04
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
128 #define NO_STREAMS 0xF9
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
129
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
130 #define VerticalRetraceWait() \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
131 do { \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
132 VGAIN8(0x3d4); \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
133 VGAOUT8(0x3d4, 0x17); \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
134 if (VGAIN8(0x3d5) & 0x80) { \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
135 int i = 0x10000; \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
136 while ((VGAIN8(0x3da) & 0x08) == 0x08 && i--) ; \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
137 i = 0x10000; \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
138 while ((VGAIN8(0x3da) & 0x08) == 0x00 && i--) ; \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
139 } \
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
140 } while (0)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
141
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
142 /* Scaling operations */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
143 #define HSCALING_Shift 0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
144 #define HSCALING_Mask (((1L << 16)-1) << HSCALING_Shift)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
145 #define HSCALING(w0,w1) ((((unsigned int)(((double)w0/(double)w1) * (1 << 15))) << HSCALING_Shift) & HSCALING_Mask)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
146
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
147 #define VSCALING_Shift 0
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
148 #define VSCALING_Mask (((1L << 20)-1) << VSCALING_Shift)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
149 #define VSCALING(h0,h1) ((((unsigned int) (((double)h0/(double)h1) * (1 << 15))) << VSCALING_Shift) & VSCALING_Mask)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
150
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
151 /* Scaling factors */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
152 #define HDM_SHIFT 16
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
153 #define HDSCALE_4 (2 << HDM_SHIFT)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
154 #define HDSCALE_8 (3 << HDM_SHIFT)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
155 #define HDSCALE_16 (4 << HDM_SHIFT)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
156 #define HDSCALE_32 (5 << HDM_SHIFT)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
157 #define HDSCALE_64 (6 << HDM_SHIFT)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
158
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
159 /* Window parameters */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
160 #define OS_XY(x,y) (((x+1)<<16)|(y+1))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
161 #define OS_WH(x,y) (((x-1)<<16)|(y))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
162
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
163 /* PCI stuff */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
164
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
165 /* PCI-Memory IO access macros. */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
166 #define VID_WR08(p,i,val) (((uint8_t *)(p))[(i)]=(val))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
167 #define VID_RD08(p,i) (((uint8_t *)(p))[(i)])
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
168
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
169 #define VID_WR32(p,i,val) (((uint32_t *)(p))[(i)/4]=(val))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
170 #define VID_RD32(p,i) (((uint32_t *)(p))[(i)/4])
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
171
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
172 #ifndef USE_RMW_CYCLES
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
173
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
174 /* Can be used to inhibit READ-MODIFY-WRITE cycles. On by default. */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
175 #define MEM_BARRIER() __asm__ __volatile__ ("" : : : "memory")
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
176
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
177 #undef VID_WR08
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
178 #define VID_WR08(p,i,val) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]=(val); })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
179 #undef VID_RD08
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
180 #define VID_RD08(p,i) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]; })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
181
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
182 #undef VID_WR16
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
183 #define VID_WR16(p,i,val) ({ MEM_BARRIER(); ((uint16_t *)(p))[(i)/2]=(val); })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
184 #undef VID_RD16
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
185 #define VID_RD16(p,i) ({ MEM_BARRIER(); ((uint16_t *)(p))[(i)/2]; })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
186
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
187 #undef VID_WR32
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
188 #define VID_WR32(p,i,val) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]=(val); })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
189 #undef VID_RD32
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
190 #define VID_RD32(p,i) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]; })
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
191 #endif /* USE_RMW_CYCLES */
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
192
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
193 #define VID_AND32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)&(val))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
194 #define VID_OR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)|(val))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
195 #define VID_XOR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)^(val))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
196
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
197 #define VGAIN8(addr) VID_RD08(info->control_base+0x8000, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
198 #define VGAIN16(addr) VID_RD16(info->control_base+0x8000, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
199 #define VGAIN(addr) VID_RD32(info->control_base+0x8000, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
200
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
201 #define VGAOUT8(addr,val) VID_WR08(info->control_base+0x8000, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
202 #define VGAOUT16(addr,val) VID_WR16(info->control_base+0x8000, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
203 #define VGAOUT(addr,val) VID_WR32(info->control_base+0x8000, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
204
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
205 #define INREG(addr) VID_RD32(info->control_base, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
206 #define OUTREG(addr,val) VID_WR32(info->control_base, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
207 #define INREG8(addr) VID_RD08(info->control_base, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
208 #define OUTREG8(addr,val) VID_WR08(info->control_base, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
209 #define INREG16(addr) VID_RD16(info->control_base, addr)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
210 #define OUTREG16(addr,val) VID_WR16(info->control_base, addr, val)
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
211
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
212 #define ALIGN_TO(v, n) (((v) + (n-1)) & ~(n-1))
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
213
e6a565ec1a3b New S3 VIDIX driver.
ben
parents:
diff changeset
214 #endif /* _S3_REGS_H */