summaryrefslogtreecommitdiff
path: root/hw/kdrive/mga/mga.h
blob: 8fa956096f3a3fc57e99b3510664177114d289b3 (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
/*
 * Copyright © 2003-2004 Anders Carlsson
 *
 * 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 Anders Carlsson not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Anders Carlsson makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL ANDERS CARLSSON 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.
 */

#ifndef _MGA_H_
#define _MGA_H_
#include <vesa.h>
#include <klinux.h>

#define MGA_REG_BASE(c)	    ((c)->attr.address[1])
#define MGA_REG_SIZE(c)	    (0x4000)

#define MGA_OUT32(mmio, a, v) (*(VOL32 *) ((mmio) + (a)) = (v))
#define MGA_IN32(mmio, a) (*(VOL32 *) ((mmio) + (a)))

#define MGA_REG_EXEC		(0x0100)
#define MGA_REG_DWGCTL		(0x1c00)
#define MGA_REG_PLNWT		(0x1c1c)
#define MGA_REG_FCOL		(0x1c24)
#define MGA_REG_MACCESS 	(0x1c04)
#define MGA_REG_SGN		(0x1c58)
#define MGA_REG_AR0		(0x1c60)
#define MGA_REG_AR1		(0x1c64)
#define MGA_REG_AR2		(0x1c68)
#define MGA_REG_AR3		(0x1c6C)
#define MGA_REG_AR4		(0x1c70)
#define MGA_REG_AR5		(0x1c74)
#define MGA_REG_AR6		(0x1c78)

#define MGA_REG_CXBNDRY		(0x1c80)
#define MGA_REG_FXBNDRY		(0x1c84)
#define MGA_REG_YDSTLEN		(0x1c88)
#define MGA_REG_PITCH 		(0x1c8c)
#define MGA_REG_YTOP		(0x1c98)
#define MGA_REG_YBOT		(0x1c9c)
#define MGA_REG_FIFOSTATUS 	(0x1e10)
#define MGA_REG_STATUS	 	(0x1e14)
#define MGA_REG_CACHEFLUSH 	(0x1fff)
#define MGA_REG_SRCORG 		(0x2cb4)
#define MGA_REG_DSTORG 		(0x2cb8)

#define MGA_G4XX_DEVICE_ID	(0x0525)

#define MGA_PW8 	(0)
#define MGA_PW16 	(1)
#define MGA_PW24 	(2)
#define MGA_PW32 	(3)

/* Drawing opcodes */
#define MGA_OPCOD_TRAP	 (4)
#define MGA_OPCOD_TEXTURE_TRAP	 (6)
#define MGA_OPCOD_BITBLT (8)

#define MGA_DWGCTL_SOLID	(1 << 11)
#define MGA_DWGCTL_ARZERO	(1 << 12)
#define MGA_DWGCTL_SGNZERO	(1 << 13)
#define MGA_DWGCTL_SHIFTZERO	(1 << 14)

#define MGA_DWGCTL_BFCOL        (2 << 25)

#define MGA_ATYPE_RPL		(0 << 4)
#define MGA_ATYPE_RSTR		(1 << 4)
#define MGA_ATYPE_ZI		(3 << 4)
#define MGA_ATYPE_BLK 		(4 << 4)
#define MGA_ATYPE_I		(7 << 4)

typedef volatile CARD8	VOL8;
typedef volatile CARD16	VOL16;
typedef volatile CARD32	VOL32;
			 
typedef struct _mgaCardInfo {
    VesaCardPrivRec vesa;
    CARD8 *reg_base;
    int fifo_size;
} MgaCardInfo;

#define getMgaCardInfo(kd) ((MgaCardInfo *) ((kd)->card->driver))
#define mgaCardInfo(kd)	MgaCardInfo *mgac = getMgaCardInfo(kd)

typedef struct _mgaScreenInfo {
    VesaScreenPrivRec vesa;

    KaaScreenInfoRec kaa;

    int pitch;
    int pw;
} MgaScreenInfo;

#define getMgaScreenInfo(kd) ((MgaScreenInfo *) ((kd)->screen->driver))
#define mgaScreenInfo(kd)    MgaScreenInfo *mgas = getMgaScreenInfo(kd)


VOL8 *mmio;


Bool
mgaMapReg (KdCardInfo *card, MgaCardInfo *mgac);

void
mgaUnmapReg (KdCardInfo *card, MgaCardInfo *mgac);

void
mgaSetMMIO (KdCardInfo *card, MgaCardInfo *mgac);

void
mgaResetMMIO (KdCardInfo *card, MgaCardInfo *mgac);

Bool
mgaDrawSetup (ScreenPtr pScreen);

Bool
mgaDrawInit (ScreenPtr pScreen);

void
mgaDrawEnable (ScreenPtr pScreen);

void
mgaDrawDisable (ScreenPtr pScreen);

void
mgaDrawFini (ScreenPtr pScreen);

extern KdCardFuncs  mgaFuncs;


void
mgaWaitAvail (int n);

void
mgaWaitIdle (void);

Bool
mgaSetup (ScreenPtr pScreen, int dest_bpp, int wait);


#if 0
#define MGA_FALLBACK(x)		\
do {				\
	ErrorF x;		\
	return FALSE;		\
} while (0);
#else
#define MGA_FALLBACK(x) return FALSE;
#endif

#endif /* _MGA_H_ */