2004-04-04 00:22:48 +02:00
|
|
|
/*
|
|
|
|
*
|
|
|
|
* 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_
|
2004-04-04 09:30:07 +02:00
|
|
|
#include <backend.h>
|
2004-04-04 00:22:48 +02:00
|
|
|
#include "kxv.h"
|
|
|
|
#include "klinux.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define DEBUG
|
|
|
|
#ifdef DEBUG
|
|
|
|
#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
|
|
|
|
#else
|
|
|
|
#define DBGOUT(fmt,a...)
|
|
|
|
#endif
|
|
|
|
|
2004-04-04 09:30:07 +02:00
|
|
|
#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
|
2004-04-04 00:22:48 +02:00
|
|
|
#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
|
|
|
|
|
2004-04-04 00:26:37 +02:00
|
|
|
#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 */
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
#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
|
|
|
|
|
2004-04-11 02:15:57 +02:00
|
|
|
#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
|
|
|
|
|
2004-04-04 09:30:07 +02:00
|
|
|
typedef volatile CARD8 VOL8;
|
|
|
|
typedef volatile CARD16 VOL16;
|
|
|
|
typedef volatile CARD32 VOL32;
|
2004-04-04 00:22:48 +02:00
|
|
|
|
2004-04-04 09:30:07 +02:00
|
|
|
#define NEO_REG_SIZE(c) (0x200000L)
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
typedef volatile struct {
|
2004-04-04 09:30:07 +02:00
|
|
|
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;
|
2004-04-04 00:22:48 +02:00
|
|
|
} NeoMMIO;
|
|
|
|
|
|
|
|
typedef struct _neoCardInfo {
|
2004-04-06 20:09:44 +02:00
|
|
|
VesaCardPrivRec backendCard;
|
2004-04-04 00:22:48 +02:00
|
|
|
|
2004-04-04 09:30:07 +02:00
|
|
|
CARD32 reg_base;
|
|
|
|
NeoMMIO *mmio;
|
|
|
|
int dstOrg;
|
|
|
|
int dstPitch;
|
|
|
|
int dstPixelWidth;
|
|
|
|
|
|
|
|
int srcOrg;
|
|
|
|
int srcPitch;
|
|
|
|
int srcPixelWidth;
|
2004-04-04 00:26:37 +02:00
|
|
|
|
|
|
|
struct NeoChipInfo *chip;
|
2004-04-04 09:30:07 +02:00
|
|
|
|
|
|
|
CARD32 bltCntl;
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
} NeoCardInfo;
|
2004-04-04 00:26:37 +02:00
|
|
|
|
|
|
|
struct NeoChipInfo {
|
|
|
|
CARD16 vendor;
|
|
|
|
CARD16 device;
|
|
|
|
CARD8 caps;
|
|
|
|
char *name;
|
|
|
|
int videoRam;
|
|
|
|
int maxClock;
|
|
|
|
int cursorMem;
|
|
|
|
int cursorOff;
|
|
|
|
int linearSize;
|
|
|
|
int maxWidth;
|
|
|
|
int maxHeight;
|
|
|
|
};
|
2004-04-04 09:30:07 +02:00
|
|
|
|
|
|
|
#define getNeoCardInfo(kd) ((NeoCardInfo *) ((kd)->card->driver))
|
2004-04-05 04:52:35 +02:00
|
|
|
#define neoCardInfo(kd) NeoCardInfo *neoc = getNeoCardInfo(kd)
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
typedef struct _neoScreenInfo {
|
2004-04-06 20:09:44 +02:00
|
|
|
VesaScreenPrivRec backendScreen;
|
2004-04-04 09:30:07 +02:00
|
|
|
|
|
|
|
CARD8 *screen;
|
|
|
|
CARD8 *off_screen;
|
|
|
|
int off_screen_size;
|
|
|
|
int pitch;
|
|
|
|
int depth;
|
|
|
|
KdVideoAdaptorPtr pAdaptor;
|
2005-06-09 12:44:45 +02:00
|
|
|
KaaScreenInfoRec kaa;
|
2004-04-04 00:22:48 +02:00
|
|
|
} NeoScreenInfo;
|
|
|
|
|
|
|
|
#define getNeoScreenInfo(kd) ((NeoScreenInfo *) ((kd)->screen->driver))
|
2004-04-04 09:30:07 +02:00
|
|
|
#define neoScreenInfo(kd) NeoScreenInfo *neos = getNeoScreenInfo(kd)
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
#define SetupNeo(s) KdScreenPriv(s); \
|
2004-04-04 09:30:07 +02:00
|
|
|
neoCardInfo(pScreenPriv); \
|
|
|
|
neoScreenInfo(pScreenPriv);
|
2004-04-04 00:22:48 +02:00
|
|
|
|
|
|
|
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_ */
|