ast_vgatool.h revision b534f209
115fb4814Smrg/*
215fb4814Smrg * Copyright (c) 2005 ASPEED Technology Inc.
315fb4814Smrg *
415fb4814Smrg * Permission to use, copy, modify, distribute, and sell this software and its
515fb4814Smrg * documentation for any purpose is hereby granted without fee, provided that
615fb4814Smrg * the above copyright notice appear in all copies and that both that
715fb4814Smrg * copyright notice and this permission notice appear in supporting
815fb4814Smrg * documentation, and that the name of the authors not be used in
915fb4814Smrg * advertising or publicity pertaining to distribution of the software without
1015fb4814Smrg * specific, written prior permission.  The authors makes no representations
1115fb4814Smrg * about the suitability of this software for any purpose.  It is provided
1215fb4814Smrg * "as is" without express or implied warranty.
1315fb4814Smrg *
1415fb4814Smrg * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1515fb4814Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1615fb4814Smrg * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1715fb4814Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1815fb4814Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1915fb4814Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2015fb4814Smrg * PERFORMANCE OF THIS SOFTWARE.
2115fb4814Smrg */
2215fb4814Smrg
2315fb4814Smrg/* VRAM Size Definition */
2415fb4814Smrg#define VIDEOMEM_SIZE_08M	0x00800000
2515fb4814Smrg#define VIDEOMEM_SIZE_16M	0x01000000
2615fb4814Smrg#define VIDEOMEM_SIZE_32M	0x02000000
2715fb4814Smrg#define VIDEOMEM_SIZE_64M	0x04000000
28de78e416Smrg#define VIDEOMEM_SIZE_128M	0x08000000
29de78e416Smrg
30b534f209Smrg#define DRAM_SIZE_016M		0x01000000
31b534f209Smrg#define DRAM_SIZE_032M		0x02000000
32b534f209Smrg#define DRAM_SIZE_064M		0x04000000
33b534f209Smrg#define DRAM_SIZE_128M		0x08000000
34b534f209Smrg#define DRAM_SIZE_256M		0x10000000
35b534f209Smrg
36de78e416Smrg#define DRAMTYPE_512Mx16	0
37de78e416Smrg#define DRAMTYPE_1Gx16		1
38de78e416Smrg#define DRAMTYPE_512Mx32	2
39de78e416Smrg#define DRAMTYPE_1Gx32		3
40b534f209Smrg#define DRAMTYPE_2Gx16		6
41b534f209Smrg#define DRAMTYPE_4Gx16		7
4215fb4814Smrg
4315fb4814Smrg#define AR_PORT_WRITE		(pAST->RelocateIO + 0x40)
4415fb4814Smrg#define MISC_PORT_WRITE		(pAST->RelocateIO + 0x42)
4515fb4814Smrg#define SEQ_PORT 		(pAST->RelocateIO + 0x44)
46b534f209Smrg#define DAC_INDEX_READ		(pAST->MMIOVirtualAddr + 0x3c7)
4715fb4814Smrg#define DAC_INDEX_WRITE		(pAST->RelocateIO + 0x48)
4815fb4814Smrg#define DAC_DATA		(pAST->RelocateIO + 0x49)
4915fb4814Smrg#define GR_PORT			(pAST->RelocateIO + 0x4E)
5015fb4814Smrg#define CRTC_PORT 		(pAST->RelocateIO + 0x54)
5115fb4814Smrg#define INPUT_STATUS1_READ	(pAST->RelocateIO + 0x5A)
52de78e416Smrg#define MISC_PORT_READ		(pAST->RelocateIO + 0x4C)
5315fb4814Smrg
5415fb4814Smrg#define GetReg(base)				inb(base)
5515fb4814Smrg#define SetReg(base,val)			outb(base,val)
5615fb4814Smrg#define GetIndexReg(base,index,val)			do {			\
5715fb4814Smrg                      				outb(base,index);	\
5815fb4814Smrg                      				val = inb(base+1);		\
5915fb4814Smrg                    				} while (0)
6015fb4814Smrg#define SetIndexReg(base,index, val)		do { \
61de78e416Smrg						outw(base, ((USHORT)(val) << 8) | index);	\
62de78e416Smrg						} while (0)
6315fb4814Smrg#define GetIndexRegMask(base,index, and, val)	do {			\
6415fb4814Smrg                      				outb(base,index);	\
6515fb4814Smrg                      				val = (inb(base+1) & and);		\
6615fb4814Smrg                    				} while (0)
6715fb4814Smrg#define SetIndexRegMask(base,index, and, val)  	do { \
6815fb4814Smrg                      				UCHAR __Temp; 	\
6915fb4814Smrg                      				outb(base,index);   	\
7015fb4814Smrg                      				__Temp = (inb((base)+1)&(and))|(val); 	\
7115fb4814Smrg                      				SetIndexReg(base,index,__Temp); 	\
7215fb4814Smrg                    				} while (0)
7315fb4814Smrg
74b534f209Smrg#define VGA_GET_PALETTE_INDEX(index, red, green, blue) \
75b534f209Smrg{ \
76b534f209Smrg   UCHAR __junk;				\
77b534f209Smrg   SetReg(DAC_INDEX_READ,(UCHAR)(index));	\
78b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
79b534f209Smrg   red = GetReg(DAC_DATA);		\
80b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
81b534f209Smrg   green = GetReg(DAC_DATA);		\
82b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
83b534f209Smrg   blue = GetReg(DAC_DATA);		\
84b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
85b534f209Smrg}
86b534f209Smrg
8715fb4814Smrg#define VGA_LOAD_PALETTE_INDEX(index, red, green, blue) \
8815fb4814Smrg{ \
8915fb4814Smrg   UCHAR __junk;				\
9015fb4814Smrg   SetReg(DAC_INDEX_WRITE,(UCHAR)(index));	\
9115fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9215fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(red));		\
9315fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9415fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(green));		\
9515fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9615fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(blue));		\
9715fb4814Smrg   __junk = GetReg(SEQ_PORT);      		\
9815fb4814Smrg}
99b534f209Smrg
100b534f209Smrg/* Reg. Definition */
101b534f209Smrg#define AST1180_MEM_BASE		0x40000000
102b534f209Smrg#define AST1180_MMC_BASE		0x80FC8000
103b534f209Smrg#define AST1180_SCU_BASE		0x80FC8200
104b534f209Smrg#define AST1180_GFX_BASE		0x80FC9000
105b534f209Smrg#define AST1180_VIDEO_BASE		0x80FCD000
106b534f209Smrg
107b534f209Smrg/* AST1180 GFX */
108b534f209Smrg#define AST1180_VGA1_CTRL 	        0x60
109b534f209Smrg#define AST1180_VGA1_CTRL2	        0x64
110b534f209Smrg#define AST1180_VGA1_STATUS 	        0x68
111b534f209Smrg#define AST1180_VGA1_PLL 	        0x6C
112b534f209Smrg#define AST1180_VGA1_HTREG              0x70
113b534f209Smrg#define AST1180_VGA1_HRREG              0x74
114b534f209Smrg#define AST1180_VGA1_VTREG              0x78
115b534f209Smrg#define AST1180_VGA1_VRREG              0x7C
116b534f209Smrg#define AST1180_VGA1_STARTADDR          0x80
117b534f209Smrg#define AST1180_VGA1_OFFSET 	        0x84
118b534f209Smrg#define AST1180_VGA1_THRESHOLD		0x88
119b534f209Smrg
120b534f209Smrg#define AST1180_HWC1_OFFSET		0x90
121b534f209Smrg#define AST1180_HWC1_POSITION		0x94
122b534f209Smrg#define AST1180_HWC1_PATTERNADDR	0x98
123b534f209Smrg
124b534f209Smrg#define CRT_LOW_THRESHOLD_VALUE         0x40
125b534f209Smrg#define CRT_HIGH_THRESHOLD_VALUE        0x7E
126b534f209Smrg
127b534f209Smrg/* GFX Ctrl Reg */
128b534f209Smrg#define AST1180_ENABLECRT		0x00000001
129b534f209Smrg#define AST1180_ENABLEHWC		0x00000002
130b534f209Smrg#define AST1180_MONOHWC			0x00000000
131b534f209Smrg#define AST1180_ALPHAHWC		0x00000400
132b534f209Smrg#define AST1180_HSYNCOFF		0x00040000
133b534f209Smrg#define AST1180_VSYNCOFF		0x00080000
134b534f209Smrg#define AST1180_VGAOFF			0x00100000
135b534f209Smrg
136b534f209Smrg#define ReadAST1180SOC(addr, data)	\
137b534f209Smrg{	\
138b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
139b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
140b534f209Smrg        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
141b534f209Smrg}
142b534f209Smrg
143b534f209Smrg#define WriteAST1180SOC(addr, data)	\
144b534f209Smrg{	\
145b534f209Smrg        ULONG temp;	\
146b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
147b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
148b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
149b534f209Smrg        temp = *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF));	\
150b534f209Smrg}
151b534f209Smrg
152b534f209Smrg#define ReadAST1180MEM(addr, data)	\
153b534f209Smrg{	\
154b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
155b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
156b534f209Smrg        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
157b534f209Smrg}
158b534f209Smrg
159b534f209Smrg#define WriteAST1180MEM(addr, data)	\
160b534f209Smrg{	\
161b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
162b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
163b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
164b534f209Smrg}
165