xgi_regs.h revision dfe64dd3
1/*
2 * Copyright 1998,1999 by Alan Hourihane, Wigan, England.
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Alan Hourihane not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission.  Alan Hourihane makes no representations
11 * about the suitability of this software for any purpose.  It is provided
12 * "as is" without express or implied warranty.
13 *
14 * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
21 *
22 * Authors:  Alan Hourihane, alanh@fairlite.demon.co.uk
23 *           Mike Chapman <mike@paranoia.com>,
24 *           Juanjo Santamarta <santamarta@ctv.es>,
25 *           Mitani Hiroshi <hmitani@drl.mei.co.jp>
26 *           David Thomas <davtom@dream.org.uk>.
27 */
28
29#ifndef _XGI_REGS_H_
30#define _XGI_REGS_H_
31
32/* Jong 02/11/2009; replace inb/outb */
33#if defined(__arm__)
34#ifndef minb
35#define minb(p) MMIO_IN8(0, (p))
36#endif
37#ifndef moutb
38#define moutb(p,v) MMIO_OUT8(0, (p),(v))
39#endif
40#ifndef minw
41#define minw(p) MMIO_IN16(0, (p))
42#endif
43#ifndef moutw
44#define moutw(p,v) MMIO_OUT16(0, (p))
45#endif
46#ifndef minl
47#define minl(p) MMIO_IN32(0, (p))
48#endif
49#ifndef moutl
50#define moutl(p,v) MMIO_OUT32(0, (p), (v))
51#endif
52
53/* Jong 02/11/2009; replace inb/outb */
54#define inb(p)			minb(p)
55#define outb(p, v)		moutb(p, v)
56#endif
57
58#include "vgaHW.h"
59
60#define inXGIREG(base)      inb(base)
61#define outXGIREG(base,val) outb(base,val)
62#define orXGIREG(base,val)  do { \
63                                unsigned char temp = inb(base); \
64                                outXGIREG(base, temp | (val)); \
65                            } while (0)
66
67#define andXGIREG(base,val) do { \
68                                unsigned char temp = inb(base); \
69                                outXGIREG(base, temp & (val)); \
70                            } while (0)
71
72#define inXGIIDXREG(base,idx,var)\
73                    do { \
74                        outb(base,idx); var=inb((base)+1); \
75                    } while (0)
76
77#define outXGIIDXREG(base,idx,val)\
78                    do { \
79                      outb(base,idx); outb((base)+1,val); \
80                    } while (0)
81
82#define orXGIIDXREG(base,idx,val)\
83                    do { \
84                        unsigned char temp; \
85                        outb(base,idx);    \
86                        temp = inb((base)+1)|(val); \
87                        outXGIIDXREG(base,idx,temp); \
88                    } while (0)
89#define andXGIIDXREG(base,idx,and)\
90                    do { \
91                        unsigned char temp; \
92                        outb(base,idx);    \
93                        temp = inb((base)+1)&(and); \
94                        outXGIIDXREG(base,idx,temp); \
95                    } while (0)
96#define setXGIIDXREG(base,idx,and,or)\
97                    do { \
98                        unsigned char temp; \
99                        outb(base,idx);    \
100                        temp = (inb((base)+1)&(and))|(or); \
101                        outXGIIDXREG(base,idx,temp); \
102                    } while (0)
103
104#define BITMASK(h,l)             (((unsigned)(1U << ((h)-(l)+1))-1)<<(l))
105#define GENMASK(mask)            BITMASK(1?mask,0?mask)
106
107#define GETBITS(var,mask)        (((var) & GENMASK(mask)) >> (0?mask))
108/* #define SETBITS(val,mask)        ((val) << (0?mask)) */ /* Jong@08032009 */
109#define SETBIT(n)                (1<<(n))
110
111#define GETBITSTR(val,from,to)    ((GETBITS(val,from)) << (0?to))
112#define SETVARBITS(var,val,from,to)\
113                (((var)&(~(GENMASK(to)))) | GETBITSTR(val,from,to))
114
115#define GETVAR8(var)        ((var)&0xFF)
116#define SETVAR8(var,val)    (var) =  GETVAR8(val)
117
118#define VGA_RELIO_BASE    0x380
119
120#define AROFFSET       VGA_ATTR_INDEX - VGA_RELIO_BASE
121#define ARROFFSET      VGA_ATTR_DATA_R - VGA_RELIO_BASE
122#define GROFFSET       VGA_GRAPH_INDEX - VGA_RELIO_BASE
123#define SROFFSET       VGA_SEQ_INDEX - VGA_RELIO_BASE
124#define CROFFSET       VGA_CRTC_INDEX_OFFSET + VGA_IOBASE_COLOR-VGA_RELIO_BASE
125#define MISCROFFSET    VGA_MISC_OUT_R - VGA_RELIO_BASE
126#define MISCWOFFSET    VGA_MISC_OUT_W - VGA_RELIO_BASE
127#define COLREGOFFSET    0x48
128#define INPUTSTATOFFSET 0x5A
129#define DACROFFSET     VGA_DAC_READ_ADDR - VGA_RELIO_BASE
130#define DACWOFFSET     VGA_DAC_WRITE_ADDR - VGA_RELIO_BASE
131#define DACDOFFSET     VGA_DAC_DATA - VGA_RELIO_BASE
132#define IS1OFFSET      VGA_IOBASE_COLOR - VGA_RELIO_BASE + VGA_IN_STAT_1_OFFSET
133
134#define XGI_IS1        (pXGI->RelIO+IS1OFFSET)
135
136/**********************************************************************/
137#define IS_BIT_DIAGNOSTIC_RB (3<<4)
138#define IS_BIT_VERT_ACTIVE (1<<3)
139#define IS_BIT_HORZ_NACTIVE (1)
140/**********************************************************************/
141
142#define XGIARR         (pXGI->RelIO+ARROFFSET)
143#define XGIGR          (pXGI->RelIO+GROFFSET)
144#define XGISR          (pXGI->RelIO+SROFFSET)
145#define XGICR          (pXGI->RelIO+CROFFSET)
146#define XGIMISCR       (pXGI->RelIO+MISCROFFSET)
147#define XGIMISCW       (pXGI->RelIO+MISCWOFFSET)
148#define XGIDACREAD     (pXGI->RelIO+DACROFFSET)
149#define XGIDACWRITE    (pXGI->RelIO+DACWOFFSET)
150#define XGIDACDATA     (pXGI->RelIO+DACDOFFSET)
151#define XGIVIDEO       (pXGI->RelIO+0x02)
152#define XGICOLIDX      (pXGI->RelIO+COLREGOFFSET)
153#define XGICOLDATA     (pXGI->RelIO+COLREGOFFSET+1)
154#define XGIINPSTAT     (pXGI->RelIO+INPUTSTATOFFSET)
155#define XGIPART1       (pXGI->RelIO+0x04)
156#define XGIPART2       (pXGI->RelIO+0x10)
157#define XGIPART3       (pXGI->RelIO+0x12)
158#define XGIPART4       (pXGI->RelIO+0x14)
159#define XGIPART5       (pXGI->RelIO+0x16)
160
161
162/*  PART1 */
163#define xgiPART1_FUNCTION                     0x00
164#define xgiPART1_THRESHOLD_HIGH               0x01
165#define xgiPART1_THRESHOLD_LOW                0x02
166#define xgiPART1_FIFO_STOP                    0x03
167#define xgiPART1_MEM_ADDR_HIGH                0x04
168#define xgiPART1_MEM_ADDR_MID                 0x05
169#define xgiPART1_MEM_ADDR_LOW                 0x06
170#define xgiPART1_SCR_PITCH_LOW                0x07
171#define xgiPART1_HORZ_TOTAL_LOW               0x08
172#define xgiPART1_SCR_HTOTAL_OVERFLOW          0x09
173#define xgiPART1_HORZ_DISP_END                0x0A
174#define xgiPART1_HORZ_RETRACE_START           0x0B
175#define xgiPART1_HORZ_OVERFLOW                0x0C
176#define xgiPART1_HORZ_RETRACE_END             0x0D
177
178#define xgiPART1_VERT_TOTAL_LOW               0x0E
179#define xgiPART1_VERT_DISP_END                0x0F
180#define xgiPART1_VERT_RETRACE_START           0x10
181#define xgiPART1_VERT_RETRACE_END             0x11
182#define xgiPART1_VERT_OVERFLOW                0x12
183
184/* 2000/04/10 added by jjtseng */
185/* [VBCTL_000410] */
186#define xgiPART1_CRT2_FLIP                    0x24
187#define xgiPART1_LOWRES_DUALVB_MODE           0x2c
188/* ~jjtseng 2000/04/10 */
189
190#define xgiPART1_ENABLEWRITE                  0x2f
191#define xgiPART1_VERTRETRACE                  0x30
192#define xgiPART1_HORZRETRACE                  0x33
193
194/* 2005/11/08 added by jjtseng */
195#define Index_CR_GPIO_Reg1 0x48
196#define Index_CR_GPIO_Reg2 0x49
197#define Index_CR_GPIO_Reg3 0x4a
198
199#define GPIOA_EN    (1<<0)
200#define GPIOA_WRITE  (1<<0)
201#define GPIOA_READ (1<<7)
202
203#define GPIOA_EN    (1<<0)
204#define GPIOA_WRITE (1<<0)
205#define GPIOA_READ  (1<<7)
206
207#define GPIOB_EN    (1<<1)
208#define GPIOB_WRITE (1<<1)
209#define GPIOB_READ  (1<<6)
210
211#define GPIOC_EN    (1<<2)
212#define GPIOC_WRITE (1<<2)
213#define GPIOC_READ  (1<<5)
214
215#define GPIOD_EN    (1<<3)
216#define GPIOD_WRITE (1<<3)
217#define GPIOD_READ  (1<<4)
218
219#define GPIOE_EN    (1<<4)
220#define GPIOE_WRITE (1<<4)
221#define GPIOE_READ  (1<<3)
222
223#define GPIOF_EN    (1<<5)
224#define GPIOF_WRITE (1<<5)
225#define GPIOF_READ  (1<<2)
226
227#define GPIOG_EN    (1<<6)
228#define GPIOG_WRITE (1<<6)
229#define GPIOG_READ  (1<<1)
230
231#define GPIOH_EN    (1<<7)
232#define GPIOH_WRITE (1<<7)
233#define GPIOH_READ  (1<<0)
234
235#define XGIMMIOLONG(offset)  *(volatile unsigned long *)(pXGI->IOBase+(offset))
236#define XGIMMIOSHORT(offset) *(volatile unsigned short *)(pXGI->IOBase+(offset))
237#define XGIMMIOBYTE(offset)  *(volatile unsigned char *)(pXGI->IOBase+(offset))
238
239#endif  /* _XGI_REGS_H_ */
240