/*
* Copyright © 2003 Keith Packard
*
* 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 Keith Packard not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Keith Packard makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL KEITH PACKARD 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 _NVIDIA_H_
#define _NVIDIA_H_
#include <vesa.h>
#include "kxv.h"
#include "klinux.h"
/*
* offset from ioport beginning
*/
#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 NVIDIA_REG_BASE(c) ((c)->attr.address[0])
#define NVIDIA_REG_SIZE(c) (16 * 1024 * 1024)
#define NVIDIA_PCIO_OFF(c) (0x601000)
#define NVIDIA_MMIO_OFF(c) (NVIDIA_PCIO_OFF(c) + 0)
#define NVIDIA_FIFO_OFF(c) (0x800000)
#define NVIDIA_ROP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0)
#define NVIDIA_CLIP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x2000)
#define NVIDIA_PATT_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x4000)
#define NVIDIA_PIXMAP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x6000)
#define NVIDIA_BLT_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x8000)
#define NVIDIA_RECTANGLE_OFF(c) (NVIDIA_FIFO_OFF(c) + 0xa000)
#define NVIDIA_LINE_OFF(c) (NVIDIA_FIFO_OFF(c) + 0xc000)
#define NVIDIA_IS_3(c) (0)
#define NVIDIA_BUSY(c) (NVIDIA_IS_3(c) ? 0x6b0 : 0x700)
#define NVIDIA_BUSY_OFF(c) (0x400000 + NVIDIA_BUSY(c))
typedef volatile CARD8 VOL8;
typedef volatile CARD16 VOL16;
typedef volatile CARD32 VOL32;
#define NVIDIA_XY(x,y) ((x) | ((y) << 16))
typedef struct {
#if X_BYTE_ORDER == X_BIG_ENDIAN
VOL32 FifoFree;
#else
VOL16 FifoFree;
VOL16 Nop;
#endif
} NvidiaFifoFree;
/*
* Raster OPeration. Windows style ROP3.
*/
typedef struct {
VOL32 reserved00[4];
NvidiaFifoFree FifoFree;
VOL32 reserved01[0x0BB];
VOL32 Rop3;
} NvidiaRop;
/*
* 2D filled rectangle.
*/
typedef struct {
VOL32 reserved00[4];
NvidiaFifoFree FifoFree;
VOL32 reserved01[0x0BB];
VOL32 reserved03[(0x040)-1];
VOL32 Color1A;
VOL32 TopLeft;
VOL32 WidthHeight;
} NvidiaRectangle;
/*
* 2D screen-screen BLT.
*/
typedef struct {
VOL32 reserved00[4];
NvidiaFifoFree FifoFree;
VOL32 reserved01[0x0BB];
VOL32 TopLeftSrc;
VOL32 TopLeftDst;
VOL32 WidthHeight;
} NvidiaScreenBlt;
typedef struct {
VOL32 busy;
} NvidiaBusy;
typedef struct _nvidiaCardInfo {
VesaCardPrivRec vesa;
CARD8 *reg_base;
int fifo_free;
int fifo_size;
CARD8 *mmio;
NvidiaRop *rop;
NvidiaRectangle *rect;
NvidiaScreenBlt *blt;
NvidiaBusy *busy;
} NvidiaCardInfo;
#define getNvidiaCardInfo(kd) ((NvidiaCardInfo *) ((kd)->card->driver))
#define nvidiaCardInfo(kd) NvidiaCardInfo *nvidiac = getNvidiaCardInfo(kd)
/*
* Xv information, optional
*/
typedef struct _nvidiaPortPriv {
CARD32 YBuf0Offset;
CARD32 YBuf1Offset;
CARD8 currentBuf;
int brightness;
int saturation;
RegionRec clip;
CARD32 colorKey;
Bool videoOn;
Time offTime;
Time freeTime;
CARD32 size;
CARD32 offset;
} NvidiaPortPrivRec, *NvidiaPortPrivPtr;
Bool nvidiaInitVideo(ScreenPtr pScreen);
typedef struct _nvidiaScreenInfo {
VesaScreenPrivRec vesa;
CARD8 *cursor_base;
CARD8 *screen;
CARD8 *off_screen;
int off_screen_size;
KdVideoAdaptorPtr pAdaptor;
KaaScreenInfoRec kaa;
} NvidiaScreenInfo;
#define getNvidiaScreenInfo(kd) ((NvidiaScreenInfo *) ((kd)->screen->driver))
#define nvidiaScreenInfo(kd) NvidiaScreenInfo *nvidias = getNvidiaScreenInfo(kd)
void
nvidiaPreserve (KdCardInfo *card);
void
nvidiaOutb (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 val);
CARD8
nvidiaInb (NvidiaCardInfo *nvidiac, CARD16 port);
CARD8
nvidiaGetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id);
void
nvidiaSetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id, CARD8 val);
Bool
nvidiaMapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac);
void
nvidiaUnmapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac);
void
nvidiaSetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac);
void
nvidiaResetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac);
Bool
nvidiaEnable (ScreenPtr pScreen);
void
nvidiaDisable (ScreenPtr pScreen);
void
nvidiaWait (NvidiaCardInfo *card, NvidiaFifoFree *free, int n);
void
nvidiaWaitIdle (NvidiaCardInfo *card);
Bool
nvidiaDrawSetup (ScreenPtr pScreen);
Bool
nvidiaDrawInit (ScreenPtr pScreen);
void
nvidiaDrawReinit (ScreenPtr pScreen);
void
nvidiaDrawEnable (ScreenPtr pScreen);
void
nvidiaDrawDisable (ScreenPtr pScreen);
void
nvidiaDrawFini (ScreenPtr pScreen);
CARD8
nvidiaReadIndex (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 index);
void
nvidiaWriteIndex (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 index, CARD8 value);
Bool
nvidiaCursorInit (ScreenPtr pScreen);
void
nvidiaCursorEnable (ScreenPtr pScreen);
void
nvidiaCursorDisable (ScreenPtr pScreen);
void
nvidiaCursorFini (ScreenPtr pScreen);
void
nvidiaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
extern KdCardFuncs nvidiaFuncs;
#endif /* _NVIDIA_H_ */
|