xref: /OK3568_Linux_fs/kernel/drivers/video/fbdev/via/accel.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
4*4882a593Smuzhiyun  * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __ACCEL_H__
9*4882a593Smuzhiyun #define __ACCEL_H__
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #define FB_ACCEL_VIA_UNICHROME  50
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* MMIO Base Address Definition */
14*4882a593Smuzhiyun #define MMIO_VGABASE                0x8000
15*4882a593Smuzhiyun #define MMIO_CR_READ                (MMIO_VGABASE + 0x3D4)
16*4882a593Smuzhiyun #define MMIO_CR_WRITE               (MMIO_VGABASE + 0x3D5)
17*4882a593Smuzhiyun #define MMIO_SR_READ                (MMIO_VGABASE + 0x3C4)
18*4882a593Smuzhiyun #define MMIO_SR_WRITE               (MMIO_VGABASE + 0x3C5)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* HW Cursor Status Define */
21*4882a593Smuzhiyun #define HW_Cursor_ON    0
22*4882a593Smuzhiyun #define HW_Cursor_OFF   1
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define CURSOR_SIZE     (8 * 1024)
25*4882a593Smuzhiyun #define VQ_SIZE         (256 * 1024)
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #define VIA_MMIO_BLTBASE        0x200000
28*4882a593Smuzhiyun #define VIA_MMIO_BLTSIZE        0x200000
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* Defines for 2D registers */
31*4882a593Smuzhiyun #define VIA_REG_GECMD           0x000
32*4882a593Smuzhiyun #define VIA_REG_GEMODE          0x004
33*4882a593Smuzhiyun #define VIA_REG_SRCPOS          0x008
34*4882a593Smuzhiyun #define VIA_REG_DSTPOS          0x00C
35*4882a593Smuzhiyun /* width and height */
36*4882a593Smuzhiyun #define VIA_REG_DIMENSION       0x010
37*4882a593Smuzhiyun #define VIA_REG_PATADDR         0x014
38*4882a593Smuzhiyun #define VIA_REG_FGCOLOR         0x018
39*4882a593Smuzhiyun #define VIA_REG_BGCOLOR         0x01C
40*4882a593Smuzhiyun /* top and left of clipping */
41*4882a593Smuzhiyun #define VIA_REG_CLIPTL          0x020
42*4882a593Smuzhiyun /* bottom and right of clipping */
43*4882a593Smuzhiyun #define VIA_REG_CLIPBR          0x024
44*4882a593Smuzhiyun #define VIA_REG_OFFSET          0x028
45*4882a593Smuzhiyun /* color key control */
46*4882a593Smuzhiyun #define VIA_REG_KEYCONTROL      0x02C
47*4882a593Smuzhiyun #define VIA_REG_SRCBASE         0x030
48*4882a593Smuzhiyun #define VIA_REG_DSTBASE         0x034
49*4882a593Smuzhiyun /* pitch of src and dst */
50*4882a593Smuzhiyun #define VIA_REG_PITCH           0x038
51*4882a593Smuzhiyun #define VIA_REG_MONOPAT0        0x03C
52*4882a593Smuzhiyun #define VIA_REG_MONOPAT1        0x040
53*4882a593Smuzhiyun /* from 0x100 to 0x1ff */
54*4882a593Smuzhiyun #define VIA_REG_COLORPAT        0x100
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /* defines for VIA 2D registers for vt3353/3409 (M1 engine)*/
57*4882a593Smuzhiyun #define VIA_REG_GECMD_M1        0x000
58*4882a593Smuzhiyun #define VIA_REG_GEMODE_M1       0x004
59*4882a593Smuzhiyun #define VIA_REG_GESTATUS_M1     0x004       /* as same as VIA_REG_GEMODE */
60*4882a593Smuzhiyun #define VIA_REG_PITCH_M1        0x008       /* pitch of src and dst */
61*4882a593Smuzhiyun #define VIA_REG_DIMENSION_M1    0x00C       /* width and height */
62*4882a593Smuzhiyun #define VIA_REG_DSTPOS_M1       0x010
63*4882a593Smuzhiyun #define VIA_REG_LINE_XY_M1      0x010
64*4882a593Smuzhiyun #define VIA_REG_DSTBASE_M1      0x014
65*4882a593Smuzhiyun #define VIA_REG_SRCPOS_M1       0x018
66*4882a593Smuzhiyun #define VIA_REG_LINE_K1K2_M1    0x018
67*4882a593Smuzhiyun #define VIA_REG_SRCBASE_M1      0x01C
68*4882a593Smuzhiyun #define VIA_REG_PATADDR_M1      0x020
69*4882a593Smuzhiyun #define VIA_REG_MONOPAT0_M1     0x024
70*4882a593Smuzhiyun #define VIA_REG_MONOPAT1_M1     0x028
71*4882a593Smuzhiyun #define VIA_REG_OFFSET_M1       0x02C
72*4882a593Smuzhiyun #define VIA_REG_LINE_ERROR_M1   0x02C
73*4882a593Smuzhiyun #define VIA_REG_CLIPTL_M1       0x040       /* top and left of clipping */
74*4882a593Smuzhiyun #define VIA_REG_CLIPBR_M1       0x044       /* bottom and right of clipping */
75*4882a593Smuzhiyun #define VIA_REG_KEYCONTROL_M1   0x048       /* color key control */
76*4882a593Smuzhiyun #define VIA_REG_FGCOLOR_M1      0x04C
77*4882a593Smuzhiyun #define VIA_REG_DSTCOLORKEY_M1  0x04C       /* as same as VIA_REG_FG */
78*4882a593Smuzhiyun #define VIA_REG_BGCOLOR_M1      0x050
79*4882a593Smuzhiyun #define VIA_REG_SRCCOLORKEY_M1  0x050       /* as same as VIA_REG_BG */
80*4882a593Smuzhiyun #define VIA_REG_MONOPATFGC_M1   0x058       /* Add BG color of Pattern. */
81*4882a593Smuzhiyun #define VIA_REG_MONOPATBGC_M1   0x05C       /* Add FG color of Pattern. */
82*4882a593Smuzhiyun #define VIA_REG_COLORPAT_M1     0x100       /* from 0x100 to 0x1ff */
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /* VIA_REG_PITCH(0x38): Pitch Setting */
85*4882a593Smuzhiyun #define VIA_PITCH_ENABLE        0x80000000
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* defines for VIA HW cursor registers */
88*4882a593Smuzhiyun #define VIA_REG_CURSOR_MODE     0x2D0
89*4882a593Smuzhiyun #define VIA_REG_CURSOR_POS      0x2D4
90*4882a593Smuzhiyun #define VIA_REG_CURSOR_ORG      0x2D8
91*4882a593Smuzhiyun #define VIA_REG_CURSOR_BG       0x2DC
92*4882a593Smuzhiyun #define VIA_REG_CURSOR_FG       0x2E0
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /* VIA_REG_GEMODE(0x04): GE mode */
95*4882a593Smuzhiyun #define VIA_GEM_8bpp            0x00000000
96*4882a593Smuzhiyun #define VIA_GEM_16bpp           0x00000100
97*4882a593Smuzhiyun #define VIA_GEM_32bpp           0x00000300
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun /* VIA_REG_GECMD(0x00): 2D Engine Command  */
100*4882a593Smuzhiyun #define VIA_GEC_NOOP            0x00000000
101*4882a593Smuzhiyun #define VIA_GEC_BLT             0x00000001
102*4882a593Smuzhiyun #define VIA_GEC_LINE            0x00000005
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun /* Rotate Command */
105*4882a593Smuzhiyun #define VIA_GEC_ROT             0x00000008
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define VIA_GEC_SRC_XY          0x00000000
108*4882a593Smuzhiyun #define VIA_GEC_SRC_LINEAR      0x00000010
109*4882a593Smuzhiyun #define VIA_GEC_DST_XY          0x00000000
110*4882a593Smuzhiyun #define VIA_GEC_DST_LINRAT      0x00000020
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define VIA_GEC_SRC_FB          0x00000000
113*4882a593Smuzhiyun #define VIA_GEC_SRC_SYS         0x00000040
114*4882a593Smuzhiyun #define VIA_GEC_DST_FB          0x00000000
115*4882a593Smuzhiyun #define VIA_GEC_DST_SYS         0x00000080
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /* source is mono */
118*4882a593Smuzhiyun #define VIA_GEC_SRC_MONO        0x00000100
119*4882a593Smuzhiyun /* pattern is mono */
120*4882a593Smuzhiyun #define VIA_GEC_PAT_MONO        0x00000200
121*4882a593Smuzhiyun /* mono src is opaque */
122*4882a593Smuzhiyun #define VIA_GEC_MSRC_OPAQUE     0x00000000
123*4882a593Smuzhiyun /* mono src is transparent */
124*4882a593Smuzhiyun #define VIA_GEC_MSRC_TRANS      0x00000400
125*4882a593Smuzhiyun /* pattern is in frame buffer */
126*4882a593Smuzhiyun #define VIA_GEC_PAT_FB          0x00000000
127*4882a593Smuzhiyun /* pattern is from reg setting */
128*4882a593Smuzhiyun #define VIA_GEC_PAT_REG         0x00000800
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define VIA_GEC_CLIP_DISABLE    0x00000000
131*4882a593Smuzhiyun #define VIA_GEC_CLIP_ENABLE     0x00001000
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #define VIA_GEC_FIXCOLOR_PAT    0x00002000
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun #define VIA_GEC_INCX            0x00000000
136*4882a593Smuzhiyun #define VIA_GEC_DECY            0x00004000
137*4882a593Smuzhiyun #define VIA_GEC_INCY            0x00000000
138*4882a593Smuzhiyun #define VIA_GEC_DECX            0x00008000
139*4882a593Smuzhiyun /* mono pattern is opaque */
140*4882a593Smuzhiyun #define VIA_GEC_MPAT_OPAQUE     0x00000000
141*4882a593Smuzhiyun /* mono pattern is transparent */
142*4882a593Smuzhiyun #define VIA_GEC_MPAT_TRANS      0x00010000
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define VIA_GEC_MONO_UNPACK     0x00000000
145*4882a593Smuzhiyun #define VIA_GEC_MONO_PACK       0x00020000
146*4882a593Smuzhiyun #define VIA_GEC_MONO_DWORD      0x00000000
147*4882a593Smuzhiyun #define VIA_GEC_MONO_WORD       0x00040000
148*4882a593Smuzhiyun #define VIA_GEC_MONO_BYTE       0x00080000
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #define VIA_GEC_LASTPIXEL_ON    0x00000000
151*4882a593Smuzhiyun #define VIA_GEC_LASTPIXEL_OFF   0x00100000
152*4882a593Smuzhiyun #define VIA_GEC_X_MAJOR         0x00000000
153*4882a593Smuzhiyun #define VIA_GEC_Y_MAJOR         0x00200000
154*4882a593Smuzhiyun #define VIA_GEC_QUICK_START     0x00800000
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun /* defines for VIA 3D registers */
157*4882a593Smuzhiyun #define VIA_REG_STATUS          0x400
158*4882a593Smuzhiyun #define VIA_REG_CR_TRANSET      0x41C
159*4882a593Smuzhiyun #define VIA_REG_CR_TRANSPACE	0x420
160*4882a593Smuzhiyun #define VIA_REG_TRANSET         0x43C
161*4882a593Smuzhiyun #define VIA_REG_TRANSPACE       0x440
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun /* VIA_REG_STATUS(0x400): Engine Status */
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* Command Regulator is busy */
166*4882a593Smuzhiyun #define VIA_CMD_RGTR_BUSY       0x00000080
167*4882a593Smuzhiyun /* 2D Engine is busy */
168*4882a593Smuzhiyun #define VIA_2D_ENG_BUSY         0x00000002
169*4882a593Smuzhiyun /* 3D Engine is busy */
170*4882a593Smuzhiyun #define VIA_3D_ENG_BUSY         0x00000001
171*4882a593Smuzhiyun /* Virtual Queue is busy */
172*4882a593Smuzhiyun #define VIA_VR_QUEUE_BUSY       0x00020000
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun /* VIA_REG_STATUS(0x400): Engine Status for H5 */
175*4882a593Smuzhiyun #define VIA_CMD_RGTR_BUSY_H5   0x00000010  /* Command Regulator is busy */
176*4882a593Smuzhiyun #define VIA_2D_ENG_BUSY_H5     0x00000002  /* 2D Engine is busy */
177*4882a593Smuzhiyun #define VIA_3D_ENG_BUSY_H5     0x00001FE1  /* 3D Engine is busy */
178*4882a593Smuzhiyun #define VIA_VR_QUEUE_BUSY_H5   0x00000004  /* Virtual Queue is busy */
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* VIA_REG_STATUS(0x400): Engine Status for VT3353/3409 */
181*4882a593Smuzhiyun #define VIA_CMD_RGTR_BUSY_M1   0x00000010  /* Command Regulator is busy */
182*4882a593Smuzhiyun #define VIA_2D_ENG_BUSY_M1     0x00000002  /* 2D Engine is busy */
183*4882a593Smuzhiyun #define VIA_3D_ENG_BUSY_M1     0x00001FE1  /* 3D Engine is busy */
184*4882a593Smuzhiyun #define VIA_VR_QUEUE_BUSY_M1   0x00000004  /* Virtual Queue is busy */
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define MAXLOOP                 0xFFFFFF
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun #define VIA_BITBLT_COLOR	1
189*4882a593Smuzhiyun #define VIA_BITBLT_MONO		2
190*4882a593Smuzhiyun #define VIA_BITBLT_FILL		3
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun int viafb_setup_engine(struct fb_info *info);
193*4882a593Smuzhiyun void viafb_reset_engine(struct viafb_par *viapar);
194*4882a593Smuzhiyun void viafb_show_hw_cursor(struct fb_info *info, int Status);
195*4882a593Smuzhiyun void viafb_wait_engine_idle(struct fb_info *info);
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun #endif /* __ACCEL_H__ */
198