xserver-multidpi/hw/kdrive/neomagic/neomagic.h
Eric Anholt 545c082cf9 - Replace the syncAccel hook in the kdrive structure with a pair of hooks
in the kaa structure: markSync and waitMarker. The first, if set,
    returns a hardware-dependent marker number which can then be waited for
    with waitMarker. If markSync is absent (which is the case on all
    drivers currently), waitMarker must wait for idle on any given marker
    number. The intention is to allow for more parallelism when we get
    downloading from framebuffer, or more fine-grained idling.
- Replace the KdMarkSync/KdCheckSync functions with kaaMarkSync and
    kaaWaitSync. These will need to be refined when KAA starts being smart
    about using them. Merge kpict.c into kasync.c since kasyn.c has all the
    rest of these fallback funcs.
- Restructure all drivers to initialize a KaaInfo structure by hand rather
    than statically in dubious order.
- Whack the i810 driver into shape in hopes that it'll work after this
    change (it certainly wouldn't have before this). Doesn't support my
    i845 though.
- Make a new KXV helper to avoid duplicated code to fill the region with
    the necessary color key. Use it in i810 and mach64 (tested).
2005-06-09 10:44:45 +00:00

215 lines
5.7 KiB
C

/*
*
* 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"
#define DEBUG
#ifdef DEBUG
#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
#else
#define DBGOUT(fmt,a...)
#endif
#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_ */