248 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * 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_ */
 |