/* * 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 #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_ */