diff options
Diffstat (limited to 'xorg-server/hw/kdrive/neomagic/neomagic.h')
-rw-r--r-- | xorg-server/hw/kdrive/neomagic/neomagic.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/xorg-server/hw/kdrive/neomagic/neomagic.h b/xorg-server/hw/kdrive/neomagic/neomagic.h new file mode 100644 index 000000000..9b100051b --- /dev/null +++ b/xorg-server/hw/kdrive/neomagic/neomagic.h @@ -0,0 +1,210 @@ +/* + * + * 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 <backend.h> +#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_ */ |