diff options
Diffstat (limited to 'xorg-server/hw/kdrive/nvidia/nvidia.h')
-rw-r--r-- | xorg-server/hw/kdrive/nvidia/nvidia.h | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/xorg-server/hw/kdrive/nvidia/nvidia.h b/xorg-server/hw/kdrive/nvidia/nvidia.h new file mode 100644 index 000000000..026233cc1 --- /dev/null +++ b/xorg-server/hw/kdrive/nvidia/nvidia.h @@ -0,0 +1,247 @@ +/* + * 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_ */ |