summaryrefslogtreecommitdiff
path: root/src/ast_vgatool.h
blob: f9b65bae7c94708f7b91cad7e0dc580fec83368f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
 * Copyright (c) 2005 ASPEED Technology Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of the authors not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  The authors makes no representations
 * about the suitability of this software for any purpose.  It is provided
 * "as is" without express or implied warranty.
 *
 * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/* VRAM Size Definition */
#define VIDEOMEM_SIZE_08M	0x00800000
#define VIDEOMEM_SIZE_16M	0x01000000
#define VIDEOMEM_SIZE_32M	0x02000000
#define VIDEOMEM_SIZE_64M	0x04000000
#define VIDEOMEM_SIZE_128M	0x08000000

#define DRAM_SIZE_016M		0x01000000
#define DRAM_SIZE_032M		0x02000000
#define DRAM_SIZE_064M		0x04000000
#define DRAM_SIZE_128M		0x08000000
#define DRAM_SIZE_256M		0x10000000

#define DRAMTYPE_512Mx16	0
#define DRAMTYPE_1Gx16		1
#define DRAMTYPE_512Mx32	2
#define DRAMTYPE_1Gx32		3
#define DRAMTYPE_2Gx16		6
#define DRAMTYPE_4Gx16		7

#define AR_PORT_WRITE		(pAST->MMIOVirtualAddr + 0x3c0)
#define MISC_PORT_WRITE		(pAST->MMIOVirtualAddr + 0x3c2)
#define VGA_ENABLE_PORT		(pAST->MMIOVirtualAddr + 0x3c3)
#define SEQ_PORT		(pAST->MMIOVirtualAddr + 0x3c4)
#define DAC_INDEX_READ		(pAST->MMIOVirtualAddr + 0x3c7)
#define DAC_INDEX_WRITE		(pAST->MMIOVirtualAddr + 0x3c8)
#define DAC_DATA		(pAST->MMIOVirtualAddr + 0x3c9)
#define GR_PORT			(pAST->MMIOVirtualAddr + 0x3cE)
#define CRTC_PORT		(pAST->MMIOVirtualAddr + 0x3d4)
#define INPUT_STATUS1_READ	(pAST->MMIOVirtualAddr + 0x3dA)
#define MISC_PORT_READ		(pAST->MMIOVirtualAddr + 0x3cc)

#define GetReg(base)				MMIO_IN8(base, 0)
#define SetReg(base,val)			MMIO_OUT8(base, 0, val)
#define GetIndexReg(base,index,val)		{ \
						MMIO_OUT8(base, 0, index);	\
						val = MMIO_IN8(base, 1);	\
						}
#define SetIndexReg(base,index, val)		{ \
						MMIO_OUT8(base, 0, index);	\
						MMIO_OUT8(base, 1, val);	\
						}
#define GetIndexRegMask(base,index, and, val)	{ \
						MMIO_OUT8(base, 0, index);	\
						val = MMIO_IN8(base, 1) & and;	\
						}
#define SetIndexRegMask(base,index, and, val)	{ \
						UCHAR __Temp;	\
						MMIO_OUT8(base, 0, index);	\
						__Temp = (MMIO_IN8(base, 1)&(and))|(val);	\
						SetIndexReg(base,index,__Temp);			\
						}

#define VGA_GET_PALETTE_INDEX(index, red, green, blue) \
{ \
   UCHAR __junk;				\
   SetReg(DAC_INDEX_READ,(UCHAR)(index));	\
   __junk = GetReg(SEQ_PORT);			\
   red = GetReg(DAC_DATA);		\
   __junk = GetReg(SEQ_PORT);			\
   green = GetReg(DAC_DATA);		\
   __junk = GetReg(SEQ_PORT);			\
   blue = GetReg(DAC_DATA);		\
   __junk = GetReg(SEQ_PORT);			\
   (void)__junk;				\
}

#define VGA_LOAD_PALETTE_INDEX(index, red, green, blue) \
{ \
   UCHAR __junk;				\
   SetReg(DAC_INDEX_WRITE,(UCHAR)(index));	\
   __junk = GetReg(SEQ_PORT);			\
   SetReg(DAC_DATA,(UCHAR)(red));		\
   __junk = GetReg(SEQ_PORT);			\
   SetReg(DAC_DATA,(UCHAR)(green));		\
   __junk = GetReg(SEQ_PORT);			\
   SetReg(DAC_DATA,(UCHAR)(blue));		\
   __junk = GetReg(SEQ_PORT);			\
   (void)__junk;				\
}

/* Reg. Definition */
#define AST1180_MEM_BASE		0x40000000
#define AST1180_MMC_BASE		0x80FC8000
#define AST1180_SCU_BASE		0x80FC8200
#define AST1180_GFX_BASE		0x80FC9000
#define AST1180_VIDEO_BASE		0x80FCD000

/* AST1180 GFX */
#define AST1180_VGA1_CTRL 	        0x60
#define AST1180_VGA1_CTRL2	        0x64
#define AST1180_VGA1_STATUS 	        0x68
#define AST1180_VGA1_PLL 	        0x6C
#define AST1180_VGA1_HTREG              0x70
#define AST1180_VGA1_HRREG              0x74
#define AST1180_VGA1_VTREG              0x78
#define AST1180_VGA1_VRREG              0x7C
#define AST1180_VGA1_STARTADDR          0x80
#define AST1180_VGA1_OFFSET 	        0x84
#define AST1180_VGA1_THRESHOLD		0x88

#define AST1180_HWC1_OFFSET		0x90
#define AST1180_HWC1_POSITION		0x94
#define AST1180_HWC1_PATTERNADDR	0x98

#define CRT_LOW_THRESHOLD_VALUE         0x40
#define CRT_HIGH_THRESHOLD_VALUE        0x7E

/* GFX Ctrl Reg */
#define AST1180_ENABLECRT		0x00000001
#define AST1180_ENABLEHWC		0x00000002
#define AST1180_MONOHWC			0x00000000
#define AST1180_ALPHAHWC		0x00000400
#define AST1180_HSYNCOFF		0x00040000
#define AST1180_VSYNCOFF		0x00080000
#define AST1180_VGAOFF			0x00100000

#define ReadAST1180SOC(addr, data)	\
{	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
}

#define WriteAST1180SOC(addr, data)	\
{	\
        ULONG temp _X_UNUSED;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
        temp = *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF));	\
}

#define ReadAST1180MEM(addr, data)	\
{	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
}

#define WriteAST1180MEM(addr, data)	\
{	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
}

/* Delay */
#define DelayUS(x)		usleep(x)
#define DelayMS(x)		DelayUS(1000*x)