xref: /OK3568_Linux_fs/kernel/include/video/sstfb.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * linux/drivers/video/sstfb.h -- voodoo graphics frame buffer
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  *     Copyright (c) 2000,2001 Ghozlane Toumi <gtoumi@messel.emse.fr>
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *     Created 28 Aug 2001 by Ghozlane Toumi
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef _SSTFB_H_
12*4882a593Smuzhiyun #define _SSTFB_H_
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /*
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  *  Debug Stuff
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifdef SST_DEBUG
21*4882a593Smuzhiyun #  define dprintk(X...)		printk("sstfb: " X)
22*4882a593Smuzhiyun #  define SST_DEBUG_REG  1
23*4882a593Smuzhiyun #  define SST_DEBUG_FUNC 1
24*4882a593Smuzhiyun #  define SST_DEBUG_VAR  1
25*4882a593Smuzhiyun #else
26*4882a593Smuzhiyun #  define dprintk(X...)
27*4882a593Smuzhiyun #  define SST_DEBUG_REG  0
28*4882a593Smuzhiyun #  define SST_DEBUG_FUNC 0
29*4882a593Smuzhiyun #  define SST_DEBUG_VAR  0
30*4882a593Smuzhiyun #endif
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #if (SST_DEBUG_REG > 0)
33*4882a593Smuzhiyun #  define r_dprintk(X...)	dprintk(X)
34*4882a593Smuzhiyun #else
35*4882a593Smuzhiyun #  define r_dprintk(X...)
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun #if (SST_DEBUG_REG > 1)
38*4882a593Smuzhiyun #  define r_ddprintk(X...)	dprintk(" " X)
39*4882a593Smuzhiyun #else
40*4882a593Smuzhiyun #  define r_ddprintk(X...)
41*4882a593Smuzhiyun #endif
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #if (SST_DEBUG_FUNC > 0)
44*4882a593Smuzhiyun #  define f_dprintk(X...)	dprintk(X)
45*4882a593Smuzhiyun #else
46*4882a593Smuzhiyun #  define f_dprintk(X...)
47*4882a593Smuzhiyun #endif
48*4882a593Smuzhiyun #if (SST_DEBUG_FUNC > 1)
49*4882a593Smuzhiyun #  define f_ddprintk(X...)	dprintk(" " X)
50*4882a593Smuzhiyun #else
51*4882a593Smuzhiyun #  define f_ddprintk(X...)
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun #if (SST_DEBUG_FUNC > 2)
54*4882a593Smuzhiyun #  define f_dddprintk(X...)	dprintk(" " X)
55*4882a593Smuzhiyun #else
56*4882a593Smuzhiyun #  define f_dddprintk(X...)
57*4882a593Smuzhiyun #endif
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #if (SST_DEBUG_VAR > 0)
60*4882a593Smuzhiyun #  define v_dprintk(X...)	dprintk(X)
61*4882a593Smuzhiyun #  define print_var(V, X...)	\
62*4882a593Smuzhiyun    {				\
63*4882a593Smuzhiyun      dprintk(X);		\
64*4882a593Smuzhiyun      printk(" :\n");		\
65*4882a593Smuzhiyun      sst_dbg_print_var(V);	\
66*4882a593Smuzhiyun    }
67*4882a593Smuzhiyun #else
68*4882a593Smuzhiyun #  define v_dprintk(X...)
69*4882a593Smuzhiyun #  define print_var(X,Y...)
70*4882a593Smuzhiyun #endif
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #define POW2(x)		(1ul<<(x))
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /*
75*4882a593Smuzhiyun  *
76*4882a593Smuzhiyun  *  Const
77*4882a593Smuzhiyun  *
78*4882a593Smuzhiyun  */
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun /* pci stuff */
81*4882a593Smuzhiyun #define PCI_INIT_ENABLE		0x40
82*4882a593Smuzhiyun #  define PCI_EN_INIT_WR	  BIT(0)
83*4882a593Smuzhiyun #  define PCI_EN_FIFO_WR	  BIT(1)
84*4882a593Smuzhiyun #  define PCI_REMAP_DAC		  BIT(2)
85*4882a593Smuzhiyun #define PCI_VCLK_ENABLE		0xc0	/* enable video */
86*4882a593Smuzhiyun #define PCI_VCLK_DISABLE	0xe0
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /* register offsets from memBaseAddr */
89*4882a593Smuzhiyun #define STATUS			0x0000
90*4882a593Smuzhiyun #  define STATUS_FBI_BUSY	  BIT(7)
91*4882a593Smuzhiyun #define FBZMODE			0x0110
92*4882a593Smuzhiyun #  define EN_CLIPPING		  BIT(0)	/* enable clipping */
93*4882a593Smuzhiyun #  define EN_RGB_WRITE		  BIT(9)	/* enable writes to rgb area */
94*4882a593Smuzhiyun #  define EN_ALPHA_WRITE	  BIT(10)
95*4882a593Smuzhiyun #  define ENGINE_INVERT_Y	  BIT(17)	/* invert Y origin (pipe) */
96*4882a593Smuzhiyun #define LFBMODE			0x0114
97*4882a593Smuzhiyun #  define LFB_565		  0		/* bits 3:0 .16 bits RGB */
98*4882a593Smuzhiyun #  define LFB_888		  4		/* 24 bits RGB */
99*4882a593Smuzhiyun #  define LFB_8888		  5		/* 32 bits ARGB */
100*4882a593Smuzhiyun #  define WR_BUFF_FRONT		  0		/* write buf select (front) */
101*4882a593Smuzhiyun #  define WR_BUFF_BACK		  (1 << 4)	/* back */
102*4882a593Smuzhiyun #  define RD_BUFF_FRONT		  0		/* read buff select (front) */
103*4882a593Smuzhiyun #  define RD_BUFF_BACK		  (1 << 6)	/* back */
104*4882a593Smuzhiyun #  define EN_PXL_PIPELINE	  BIT(8)	/* pixel pipeline (clip..)*/
105*4882a593Smuzhiyun #  define LFB_WORD_SWIZZLE_WR	  BIT(11)	/* enable write-wordswap (big-endian) */
106*4882a593Smuzhiyun #  define LFB_BYTE_SWIZZLE_WR	  BIT(12)	/* enable write-byteswap (big-endian) */
107*4882a593Smuzhiyun #  define LFB_INVERT_Y		  BIT(13)	/* invert Y origin (LFB) */
108*4882a593Smuzhiyun #  define LFB_WORD_SWIZZLE_RD	  BIT(15)	/* enable read-wordswap (big-endian) */
109*4882a593Smuzhiyun #  define LFB_BYTE_SWIZZLE_RD	  BIT(16)	/* enable read-byteswap (big-endian) */
110*4882a593Smuzhiyun #define CLIP_LEFT_RIGHT		0x0118
111*4882a593Smuzhiyun #define CLIP_LOWY_HIGHY		0x011c
112*4882a593Smuzhiyun #define NOPCMD			0x0120
113*4882a593Smuzhiyun #define FASTFILLCMD		0x0124
114*4882a593Smuzhiyun #define SWAPBUFFCMD		0x0128
115*4882a593Smuzhiyun #define FBIINIT4		0x0200		/* misc controls */
116*4882a593Smuzhiyun #  define FAST_PCI_READS	  0		/* 1 waitstate */
117*4882a593Smuzhiyun #  define SLOW_PCI_READS	  BIT(0)	/* 2 ws */
118*4882a593Smuzhiyun #  define LFB_READ_AHEAD	  BIT(1)
119*4882a593Smuzhiyun #define BACKPORCH		0x0208
120*4882a593Smuzhiyun #define VIDEODIMENSIONS		0x020c
121*4882a593Smuzhiyun #define FBIINIT0		0x0210		/* misc+fifo  controls */
122*4882a593Smuzhiyun #  define DIS_VGA_PASSTHROUGH	  BIT(0)
123*4882a593Smuzhiyun #  define FBI_RESET		  BIT(1)
124*4882a593Smuzhiyun #  define FIFO_RESET		  BIT(2)
125*4882a593Smuzhiyun #define FBIINIT1		0x0214		/* PCI + video controls */
126*4882a593Smuzhiyun #  define VIDEO_MASK		  0x8080010f	/* masks video related bits V1+V2*/
127*4882a593Smuzhiyun #  define FAST_PCI_WRITES	  0		/* 0 ws */
128*4882a593Smuzhiyun #  define SLOW_PCI_WRITES	  BIT(1)	/* 1 ws */
129*4882a593Smuzhiyun #  define EN_LFB_READ		  BIT(3)
130*4882a593Smuzhiyun #  define TILES_IN_X_SHIFT	  4
131*4882a593Smuzhiyun #  define VIDEO_RESET		  BIT(8)
132*4882a593Smuzhiyun #  define EN_BLANKING		  BIT(12)
133*4882a593Smuzhiyun #  define EN_DATA_OE		  BIT(13)
134*4882a593Smuzhiyun #  define EN_BLANK_OE		  BIT(14)
135*4882a593Smuzhiyun #  define EN_HVSYNC_OE		  BIT(15)
136*4882a593Smuzhiyun #  define EN_DCLK_OE		  BIT(16)
137*4882a593Smuzhiyun #  define SEL_INPUT_VCLK_2X	  0		/* bit 17 */
138*4882a593Smuzhiyun #  define SEL_INPUT_VCLK_SLAVE	  BIT(17)
139*4882a593Smuzhiyun #  define SEL_SOURCE_VCLK_SLAVE	  0		/* bits 21:20 */
140*4882a593Smuzhiyun #  define SEL_SOURCE_VCLK_2X_DIV2 (0x01 << 20)
141*4882a593Smuzhiyun #  define SEL_SOURCE_VCLK_2X_SEL  (0x02 << 20)
142*4882a593Smuzhiyun #  define EN_24BPP		  BIT(22)
143*4882a593Smuzhiyun #  define TILES_IN_X_MSB_SHIFT	  24		/* v2 */
144*4882a593Smuzhiyun #  define VCLK_2X_SEL_DEL_SHIFT	  27		/* vclk out delay 0,4,6,8ns */
145*4882a593Smuzhiyun #  define VCLK_DEL_SHIFT	  29		/* vclk in delay */
146*4882a593Smuzhiyun #define FBIINIT2		0x0218		/* Dram controls */
147*4882a593Smuzhiyun #  define EN_FAST_RAS_READ	  BIT(5)
148*4882a593Smuzhiyun #  define EN_DRAM_OE		  BIT(6)
149*4882a593Smuzhiyun #  define EN_FAST_RD_AHEAD_WR	  BIT(7)
150*4882a593Smuzhiyun #  define VIDEO_OFFSET_SHIFT	  11		/* unit: #rows tile 64x16/2 */
151*4882a593Smuzhiyun #  define SWAP_DACVSYNC		  0
152*4882a593Smuzhiyun #  define SWAP_DACDATA0		  (1 << 9)
153*4882a593Smuzhiyun #  define SWAP_FIFO_STALL	  (2 << 9)
154*4882a593Smuzhiyun #  define EN_RD_AHEAD_FIFO	  BIT(21)
155*4882a593Smuzhiyun #  define EN_DRAM_REFRESH	  BIT(22)
156*4882a593Smuzhiyun #  define DRAM_REFRESH_16	  (0x30 << 23)	/* dram 16 ms */
157*4882a593Smuzhiyun #define DAC_READ		FBIINIT2	/* in remap mode */
158*4882a593Smuzhiyun #define FBIINIT3		0x021c		/* fbi controls */
159*4882a593Smuzhiyun #  define DISABLE_TEXTURE	  BIT(6)
160*4882a593Smuzhiyun #  define Y_SWAP_ORIGIN_SHIFT	  22		/* Y swap subtraction value */
161*4882a593Smuzhiyun #define HSYNC			0x0220
162*4882a593Smuzhiyun #define VSYNC			0x0224
163*4882a593Smuzhiyun #define DAC_DATA		0x022c
164*4882a593Smuzhiyun #  define DAC_READ_CMD		  BIT(11)	/* set read dacreg mode */
165*4882a593Smuzhiyun #define FBIINIT5		0x0244		/* v2 specific */
166*4882a593Smuzhiyun #  define FBIINIT5_MASK		  0xfa40ffff    /* mask video bits*/
167*4882a593Smuzhiyun #  define HDOUBLESCAN		  BIT(20)
168*4882a593Smuzhiyun #  define VDOUBLESCAN		  BIT(21)
169*4882a593Smuzhiyun #  define HSYNC_HIGH 		  BIT(23)
170*4882a593Smuzhiyun #  define VSYNC_HIGH 		  BIT(24)
171*4882a593Smuzhiyun #  define INTERLACE		  BIT(26)
172*4882a593Smuzhiyun #define FBIINIT6		0x0248		/* v2 specific */
173*4882a593Smuzhiyun #  define TILES_IN_X_LSB_SHIFT	  30		/* v2 */
174*4882a593Smuzhiyun #define FBIINIT7		0x024c		/* v2 specific */
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun #define BLTSRCBASEADDR		0x02c0	/* BitBLT Source base address */
177*4882a593Smuzhiyun #define BLTDSTBASEADDR		0x02c4	/* BitBLT Destination base address */
178*4882a593Smuzhiyun #define BLTXYSTRIDES		0x02c8	/* BitBLT Source and Destination strides */
179*4882a593Smuzhiyun #define BLTSRCCHROMARANGE	0x02cc	/* BitBLT Source Chroma key range */
180*4882a593Smuzhiyun #define BLTDSTCHROMARANGE	0x02d0	/* BitBLT Destination Chroma key range */
181*4882a593Smuzhiyun #define BLTCLIPX		0x02d4	/* BitBLT Min/Max X clip values */
182*4882a593Smuzhiyun #define BLTCLIPY		0x02d8	/* BitBLT Min/Max Y clip values */
183*4882a593Smuzhiyun #define BLTSRCXY		0x02e0	/* BitBLT Source starting XY coordinates */
184*4882a593Smuzhiyun #define BLTDSTXY		0x02e4	/* BitBLT Destination starting XY coordinates */
185*4882a593Smuzhiyun #define BLTSIZE			0x02e8	/* BitBLT width and height */
186*4882a593Smuzhiyun #define BLTROP			0x02ec	/* BitBLT Raster operations */
187*4882a593Smuzhiyun #  define BLTROP_COPY		  0x0cccc
188*4882a593Smuzhiyun #  define BLTROP_INVERT		  0x05555
189*4882a593Smuzhiyun #  define BLTROP_XOR		  0x06666
190*4882a593Smuzhiyun #define BLTCOLOR		0x02f0	/* BitBLT and foreground background colors */
191*4882a593Smuzhiyun #define BLTCOMMAND		0x02f8	/* BitBLT command mode (v2 specific) */
192*4882a593Smuzhiyun # define BLT_SCR2SCR_BITBLT	  0	  /* Screen-to-Screen BitBLT */
193*4882a593Smuzhiyun # define BLT_CPU2SCR_BITBLT	  1	  /* CPU-to-screen BitBLT */
194*4882a593Smuzhiyun # define BLT_RECFILL_BITBLT	  2	  /* BitBLT Rectangle Fill */
195*4882a593Smuzhiyun # define BLT_16BPP_FMT		  2	  /* 16 BPP (5-6-5 RGB) */
196*4882a593Smuzhiyun #define BLTDATA			0x02fc	/* BitBLT data for CPU-to-Screen BitBLTs */
197*4882a593Smuzhiyun #  define LAUNCH_BITBLT		  BIT(31) /* Launch BitBLT in BltCommand, bltDstXY or bltSize */
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /* Dac Registers */
200*4882a593Smuzhiyun #define DACREG_WMA		0x0	/* pixel write mode address */
201*4882a593Smuzhiyun #define DACREG_LUT		0x01	/* color value */
202*4882a593Smuzhiyun #define DACREG_RMR		0x02	/* pixel mask */
203*4882a593Smuzhiyun #define DACREG_RMA		0x03	/* pixel read mode address */
204*4882a593Smuzhiyun /*Dac registers in indexed mode (TI, ATT dacs) */
205*4882a593Smuzhiyun #define DACREG_ADDR_I		DACREG_WMA
206*4882a593Smuzhiyun #define DACREG_DATA_I		DACREG_RMR
207*4882a593Smuzhiyun #define DACREG_RMR_I		0x00
208*4882a593Smuzhiyun #define DACREG_CR0_I		0x01
209*4882a593Smuzhiyun #  define DACREG_CR0_EN_INDEXED	  BIT(0)	/* enable indexec mode */
210*4882a593Smuzhiyun #  define DACREG_CR0_8BIT	  BIT(1)	/* set dac to 8 bits/read */
211*4882a593Smuzhiyun #  define DACREG_CR0_PWDOWN	  BIT(3)	/* powerdown dac */
212*4882a593Smuzhiyun #  define DACREG_CR0_16BPP	  0x30		/* mode 3 */
213*4882a593Smuzhiyun #  define DACREG_CR0_24BPP	  0x50		/* mode 5 */
214*4882a593Smuzhiyun #define	DACREG_CR1_I		0x05
215*4882a593Smuzhiyun #define DACREG_CC_I		0x06
216*4882a593Smuzhiyun #  define DACREG_CC_CLKA	  BIT(7)	/* clk A controlled by regs */
217*4882a593Smuzhiyun #  define DACREG_CC_CLKA_C	  (2<<4)	/* clk A uses reg C */
218*4882a593Smuzhiyun #  define DACREG_CC_CLKB	  BIT(3)	/* clk B controlled by regs */
219*4882a593Smuzhiyun #  define DACREG_CC_CLKB_D	  3		/* clkB uses reg D */
220*4882a593Smuzhiyun #define DACREG_AC0_I		0x48		/* clock A reg C */
221*4882a593Smuzhiyun #define DACREG_AC1_I		0x49
222*4882a593Smuzhiyun #define DACREG_BD0_I		0x6c		/* clock B reg D */
223*4882a593Smuzhiyun #define DACREG_BD1_I		0x6d
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /* identification constants */
226*4882a593Smuzhiyun #define DACREG_MIR_TI		0x97
227*4882a593Smuzhiyun #define DACREG_DIR_TI		0x09
228*4882a593Smuzhiyun #define DACREG_MIR_ATT		0x84
229*4882a593Smuzhiyun #define DACREG_DIR_ATT		0x09
230*4882a593Smuzhiyun /* ics dac specific registers */
231*4882a593Smuzhiyun #define DACREG_ICS_PLLWMA	0x04	/* PLL write mode address */
232*4882a593Smuzhiyun #define DACREG_ICS_PLLDATA	0x05	/* PLL data /parameter */
233*4882a593Smuzhiyun #define DACREG_ICS_CMD		0x06	/* command */
234*4882a593Smuzhiyun #  define DACREG_ICS_CMD_16BPP	  0x50	/* ics color mode 6 (16bpp bypass)*/
235*4882a593Smuzhiyun #  define DACREG_ICS_CMD_24BPP	  0x70	/* ics color mode 7 (24bpp bypass)*/
236*4882a593Smuzhiyun #  define DACREG_ICS_CMD_PWDOWN BIT(0)	/* powerdown dac */
237*4882a593Smuzhiyun #define DACREG_ICS_PLLRMA	0x07	/* PLL read mode address */
238*4882a593Smuzhiyun /*
239*4882a593Smuzhiyun  * pll parameter register:
240*4882a593Smuzhiyun  * indexed : write addr to PLLWMA, write data in PLLDATA.
241*4882a593Smuzhiyun  * for reads use PLLRMA .
242*4882a593Smuzhiyun  * 8 freq registers (0-7) for video clock (CLK0)
243*4882a593Smuzhiyun  * 2 freq registers (a-b) for graphic clock (CLK1)
244*4882a593Smuzhiyun  */
245*4882a593Smuzhiyun #define DACREG_ICS_PLL_CLK0_1_INI 0x55	/* initial pll M value for freq f1  */
246*4882a593Smuzhiyun #define DACREG_ICS_PLL_CLK0_7_INI 0x71	/* f7 */
247*4882a593Smuzhiyun #define DACREG_ICS_PLL_CLK1_B_INI 0x79	/* fb */
248*4882a593Smuzhiyun #define DACREG_ICS_PLL_CTRL	0x0e
249*4882a593Smuzhiyun #  define DACREG_ICS_CLK0	  BIT(5)
250*4882a593Smuzhiyun #  define DACREG_ICS_CLK0_0	  0
251*4882a593Smuzhiyun #  define DACREG_ICS_CLK1_A	  0	/* bit4 */
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun /* sst default init registers */
254*4882a593Smuzhiyun #define FBIINIT0_DEFAULT DIS_VGA_PASSTHROUGH
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun #define FBIINIT1_DEFAULT 	\
257*4882a593Smuzhiyun 	(			\
258*4882a593Smuzhiyun 	  FAST_PCI_WRITES	\
259*4882a593Smuzhiyun /*	  SLOW_PCI_WRITES*/	\
260*4882a593Smuzhiyun 	| VIDEO_RESET		\
261*4882a593Smuzhiyun 	| 10 << TILES_IN_X_SHIFT\
262*4882a593Smuzhiyun 	| SEL_SOURCE_VCLK_2X_SEL\
263*4882a593Smuzhiyun 	| EN_LFB_READ		\
264*4882a593Smuzhiyun 	)
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define FBIINIT2_DEFAULT	\
267*4882a593Smuzhiyun 	(			\
268*4882a593Smuzhiyun 	 SWAP_DACVSYNC		\
269*4882a593Smuzhiyun 	| EN_DRAM_OE		\
270*4882a593Smuzhiyun 	| DRAM_REFRESH_16	\
271*4882a593Smuzhiyun 	| EN_DRAM_REFRESH	\
272*4882a593Smuzhiyun 	| EN_FAST_RAS_READ	\
273*4882a593Smuzhiyun 	| EN_RD_AHEAD_FIFO	\
274*4882a593Smuzhiyun 	| EN_FAST_RD_AHEAD_WR	\
275*4882a593Smuzhiyun 	)
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun #define FBIINIT3_DEFAULT 	\
278*4882a593Smuzhiyun 	( DISABLE_TEXTURE )
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun #define FBIINIT4_DEFAULT	\
281*4882a593Smuzhiyun 	(			\
282*4882a593Smuzhiyun 	  FAST_PCI_READS	\
283*4882a593Smuzhiyun /*	  SLOW_PCI_READS*/	\
284*4882a593Smuzhiyun 	| LFB_READ_AHEAD	\
285*4882a593Smuzhiyun 	)
286*4882a593Smuzhiyun /* Careful with this one : writing back the data just read will trash the DAC
287*4882a593Smuzhiyun    reading some fields give logic value on pins, but setting this field will
288*4882a593Smuzhiyun    set the source signal driving the pin. conclusion : just use the default
289*4882a593Smuzhiyun    as a base before writing back .
290*4882a593Smuzhiyun */
291*4882a593Smuzhiyun #define FBIINIT6_DEFAULT	(0x0)
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun /*
294*4882a593Smuzhiyun  *
295*4882a593Smuzhiyun  * Misc Const
296*4882a593Smuzhiyun  *
297*4882a593Smuzhiyun  */
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /* ioctl to enable/disable VGA passthrough */
300*4882a593Smuzhiyun #define SSTFB_SET_VGAPASS	_IOW('F', 0xdd, __u32)
301*4882a593Smuzhiyun #define SSTFB_GET_VGAPASS	_IOR('F', 0xdd, __u32)
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun /* used to know witch clock to set */
305*4882a593Smuzhiyun enum {
306*4882a593Smuzhiyun 	VID_CLOCK=0,
307*4882a593Smuzhiyun 	GFX_CLOCK=1,
308*4882a593Smuzhiyun };
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun /* freq max */
311*4882a593Smuzhiyun #define DAC_FREF	14318	/* DAC reference freq (Khz) */
312*4882a593Smuzhiyun #define VCO_MAX		260000
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun /*
315*4882a593Smuzhiyun  *  driver structs
316*4882a593Smuzhiyun  */
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun struct pll_timing {
319*4882a593Smuzhiyun 	unsigned int m;
320*4882a593Smuzhiyun 	unsigned int n;
321*4882a593Smuzhiyun 	unsigned int p;
322*4882a593Smuzhiyun };
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun struct dac_switch {
325*4882a593Smuzhiyun 	const char *name;
326*4882a593Smuzhiyun 	int (*detect) (struct fb_info *info);
327*4882a593Smuzhiyun 	int (*set_pll) (struct fb_info *info, const struct pll_timing *t, const int clock);
328*4882a593Smuzhiyun 	void (*set_vidmod) (struct fb_info *info, const int bpp);
329*4882a593Smuzhiyun };
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun struct sst_spec {
332*4882a593Smuzhiyun 	char * name;
333*4882a593Smuzhiyun 	int default_gfx_clock;	/* 50000 for voodoo1, 75000 for voodoo2 */
334*4882a593Smuzhiyun 	int max_gfxclk; 	/* ! in Mhz ie 60 for voodoo 1 */
335*4882a593Smuzhiyun };
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun struct sstfb_par {
338*4882a593Smuzhiyun 	u32 palette[16];
339*4882a593Smuzhiyun 	unsigned int yDim;
340*4882a593Smuzhiyun 	unsigned int hSyncOn;	/* hsync_len */
341*4882a593Smuzhiyun 	unsigned int hSyncOff;	/* left_margin + xres + right_margin */
342*4882a593Smuzhiyun 	unsigned int hBackPorch;/* left_margin */
343*4882a593Smuzhiyun 	unsigned int vSyncOn;
344*4882a593Smuzhiyun 	unsigned int vSyncOff;
345*4882a593Smuzhiyun 	unsigned int vBackPorch;
346*4882a593Smuzhiyun 	struct pll_timing pll;
347*4882a593Smuzhiyun 	unsigned int tiles_in_X;/* num of tiles in X res */
348*4882a593Smuzhiyun 	u8 __iomem *mmio_vbase;
349*4882a593Smuzhiyun 	struct dac_switch 	dac_sw;	/* dac specific functions */
350*4882a593Smuzhiyun 	struct pci_dev		*dev;
351*4882a593Smuzhiyun 	int	type;
352*4882a593Smuzhiyun 	u8	revision;
353*4882a593Smuzhiyun 	u8	vgapass;	/* VGA pass through: 1=enabled, 0=disabled */
354*4882a593Smuzhiyun };
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun #endif /* _SSTFB_H_ */
357