165 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * 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_ */
 |