/* * * Copyright © 2004 Franco Catrin * * 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 Franco Catrin not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Franco Catrin makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL FRANCO CATRIN 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 _NEOMAGIC_H_ #define _NEOMAGIC_H_ #include #include "kxv.h" #include "klinux.h" #include "vesa.h" #define DBGOUT DebugF #define ENTER() DBGOUT("Enter %s\n", __FUNCTION__) #define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__) #define NEO_VENDOR 0x10c8 #define CAP_NM2070 0x01 /* If it's a NM2070 series */ #define CAP_NM2090 0x02 /* If it's a NM2090 series */ #define CAP_NM2097 0x03 /* If it's a NM2097 series */ #define CAP_NM2200 0x04 /* If it's a NM2200 series */ #define NEO_BS0_BLT_BUSY 0x00000001 #define NEO_BS0_FIFO_AVAIL 0x00000002 #define NEO_BS0_FIFO_PEND 0x00000004 #define NEO_BC0_DST_Y_DEC 0x00000001 #define NEO_BC0_X_DEC 0x00000002 #define NEO_BC0_SRC_TRANS 0x00000004 #define NEO_BC0_SRC_IS_FG 0x00000008 #define NEO_BC0_SRC_Y_DEC 0x00000010 #define NEO_BC0_FILL_PAT 0x00000020 #define NEO_BC0_SRC_MONO 0x00000040 #define NEO_BC0_SYS_TO_VID 0x00000080 #define NEO_BC1_DEPTH8 0x00000100 #define NEO_BC1_DEPTH16 0x00000200 #define NEO_BC1_X_320 0x00000400 #define NEO_BC1_X_640 0x00000800 #define NEO_BC1_X_800 0x00000c00 #define NEO_BC1_X_1024 0x00001000 #define NEO_BC1_X_1152 0x00001400 #define NEO_BC1_X_1280 0x00001800 #define NEO_BC1_X_1600 0x00001c00 #define NEO_BC1_DST_TRANS 0x00002000 #define NEO_BC1_MSTR_BLT 0x00004000 #define NEO_BC1_FILTER_Z 0x00008000 #define NEO_BC2_WR_TR_DST 0x00800000 #define NEO_BC3_SRC_XY_ADDR 0x01000000 #define NEO_BC3_DST_XY_ADDR 0x02000000 #define NEO_BC3_CLIP_ON 0x04000000 #define NEO_BC3_FIFO_EN 0x08000000 #define NEO_BC3_BLT_ON_ADDR 0x10000000 #define NEO_BC3_SKIP_MAPPING 0x80000000 #define NEO_MODE1_DEPTH8 0x0100 #define NEO_MODE1_DEPTH16 0x0200 #define NEO_MODE1_DEPTH24 0x0300 #define NEO_MODE1_X_320 0x0400 #define NEO_MODE1_X_640 0x0800 #define NEO_MODE1_X_800 0x0c00 #define NEO_MODE1_X_1024 0x1000 #define NEO_MODE1_X_1152 0x1400 #define NEO_MODE1_X_1280 0x1800 #define NEO_MODE1_X_1600 0x1c00 #define NEO_MODE1_BLT_ON_ADDR 0x2000 typedef volatile CARD8 VOL8; typedef volatile CARD16 VOL16; typedef volatile CARD32 VOL32; #define NEO_REG_SIZE(c) (0x200000L) typedef volatile struct { CARD32 bltStat; CARD32 bltCntl; CARD32 xpColor; CARD32 fgColor; CARD32 bgColor; CARD32 pitch; CARD32 clipLT; CARD32 clipRB; CARD32 srcBitOffset; CARD32 srcStart; CARD32 reserved0; CARD32 dstStart; CARD32 xyExt; CARD32 reserved1[19]; CARD32 pageCntl; CARD32 pageBase; CARD32 postBase; CARD32 postPtr; CARD32 dataPtr; } NeoMMIO; typedef struct _neoCardInfo { VesaCardPrivRec backendCard; CARD32 reg_base; NeoMMIO *mmio; int dstOrg; int dstPitch; int dstPixelWidth; int srcOrg; int srcPitch; int srcPixelWidth; struct NeoChipInfo *chip; CARD32 bltCntl; } NeoCardInfo; struct NeoChipInfo { CARD16 vendor; CARD16 device; CARD8 caps; char *name; int videoRam; int maxClock; int cursorMem; int cursorOff; int linearSize; int maxWidth; int maxHeight; }; #define getNeoCardInfo(kd) ((NeoCardInfo *) ((kd)->card->driver)) #define neoCardInfo(kd) NeoCardInfo *neoc = getNeoCardInfo(kd) typedef struct _neoScreenInfo { VesaScreenPrivRec backendScreen; CARD8 *screen; CARD8 *off_screen; int off_screen_size; int pitch; int depth; KdVideoAdaptorPtr pAdaptor; KaaScreenInfoRec kaa; } NeoScreenInfo; #define getNeoScreenInfo(kd) ((NeoScreenInfo *) ((kd)->screen->driver)) #define neoScreenInfo(kd) NeoScreenInfo *neos = getNeoScreenInfo(kd) #define SetupNeo(s) KdScreenPriv(s); \ neoCardInfo(pScreenPriv); \ neoScreenInfo(pScreenPriv); void neoPreserve (KdCardInfo *card); Bool neoEnable (ScreenPtr pScreen); void neoDisable (ScreenPtr pScreen); Bool neoMapReg (KdCardInfo *card, NeoCardInfo *nvidiac); void neoUnmapReg (KdCardInfo *card, NeoCardInfo *nvidiac); CARD8 neoGetIndex (NeoCardInfo *nvidiac, CARD16 addr, CARD8 id); void neoSetIndex (NeoCardInfo *nvidiac, CARD16 addr, CARD8 id, CARD8 val); Bool neoDrawInit (ScreenPtr pScreen); void neoDrawEnable (ScreenPtr pScreen); void neoDrawDisable (ScreenPtr pScreen); void neoDrawFini (ScreenPtr pScreen); extern KdCardFuncs neoFuncs; #endif /* _NEOMAGIC_H_ */