250 lines
6.0 KiB
C
250 lines
6.0 KiB
C
|
/*
|
||
|
* $Id: nvidia.h,v 1.1.1.1 2006/11/26 18:22:08 matthieu Exp $
|
||
|
*
|
||
|
* 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_ */
|