258 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright © 2001 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 _SMI_H_
 | |
| #define _SMI_H_
 | |
| 
 | |
| #define SMI_VESA 0
 | |
| 
 | |
| #if SMI_VESA
 | |
| #include <vesa.h>
 | |
| #define subGetColors vesaGetColors
 | |
| #define subPutColors vesaPutColors
 | |
| #define subInitialize vesaInitialize
 | |
| #define subScreenInitialize vesaScreenInitialize
 | |
| #define subInitScreen vesaInitScreen
 | |
| #define subFinishInitScreen vesaFinishInitScreen
 | |
| #define subCreateResources vesaCreateResources
 | |
| #define subRandRSetConfig vesaRandRSetConfig
 | |
| #define subPreserve vesaPreserve
 | |
| #define subEnable vesaEnable
 | |
| #define subDPMS vesaDPMS
 | |
| #define subRestore vesaRestore
 | |
| #define subScreenFini vesaScreenFini
 | |
| #define subCardFini vesaCardFini
 | |
| #define subDisable vesaDisable
 | |
| #define SubCardPrivRec	VesaCardPrivRec
 | |
| #define SubScreenPrivRec    VesaScreenPrivRec
 | |
| #define subUseMsg() vesaUseMsg()
 | |
| #define subProcessArgument(c,v,i) vesaProcessArgument(c,v,i)
 | |
| #else
 | |
| #include <fbdev.h>
 | |
| #define subGetColors fbdevGetColors
 | |
| #define subPutColors fbdevPutColors
 | |
| #define subInitialize fbdevInitialize
 | |
| #define subScreenInitialize fbdevScreenInitialize
 | |
| #define subInitScreen fbdevInitScreen
 | |
| #define subFinishInitScreen fbdevFinishInitScreen
 | |
| #define subCreateResources fbdevCreateResources
 | |
| #define subRandRSetConfig fbdevRandRSetConfig
 | |
| #define subPreserve fbdevPreserve
 | |
| #define subEnable fbdevEnable
 | |
| #define subDPMS fbdevDPMS
 | |
| #define subRestore fbdevRestore
 | |
| #define subScreenFini fbdevScreenFini
 | |
| #define subCardFini fbdevCardFini
 | |
| #define subDisable fbdevDisable
 | |
| #define SubCardPrivRec	FbdevPriv
 | |
| #define SubScreenPrivRec    FbdevScrPriv
 | |
| #define subUseMsg()
 | |
| #define subProcessArgument(c,v,i) 0
 | |
| #endif
 | |
| 
 | |
| #include "kxv.h"
 | |
| 
 | |
| #define SMI_DEBUG 0
 | |
| #if SMI_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__)
 | |
| 
 | |
| /*
 | |
|  * offset from ioport beginning 
 | |
|  */
 | |
| 
 | |
| #define SMI_IO_BASE(c)	    ((c)->attr.io)
 | |
| #define SMI_REG_BASE(c)	    ((c)->attr.address[0])
 | |
| #define SMI_REG_SIZE(c)	    (4096)
 | |
| 
 | |
| #define SMI_DPR_OFF(c)	    (0x00000)
 | |
| 
 | |
| typedef volatile CARD8	VOL8;
 | |
| typedef volatile CARD16	VOL16;
 | |
| typedef volatile CARD32	VOL32;
 | |
| 
 | |
| /* DPR reg */
 | |
| typedef struct _DPR {
 | |
|     VOL32   src_xy;			/* 0x00 */
 | |
|     VOL32   dst_xy;			/* 0x04 */
 | |
|     VOL32   dst_wh;			/* 0x08 */
 | |
|     VOL32   accel_cmd;			/* 0x0c */
 | |
|     VOL32   src_stride;			/* 0x10 */
 | |
|     VOL32   fg;				/* 0x14 */
 | |
|     VOL32   bg;				/* 0x18 */
 | |
|     VOL32   data_format;		/* 0x1c */
 | |
|     VOL32   transparent;		/* 0x20 */
 | |
|     VOL32   mask1;			/* 0x24 ? */
 | |
|     VOL32   mask2;			/* 0x28 ? */
 | |
|     VOL32   scissors_ul;		/* 0x2c */
 | |
|     VOL32   scissors_lr;		/* 0x30 */
 | |
|     VOL32   mask3;			/* 0x34 */
 | |
|     VOL32   mask4;			/* 0x38 */
 | |
|     VOL32   dst_stride;			/* 0x3c */
 | |
|     VOL32   unknown_40;			/* 0x40 */
 | |
|     VOL32   unknown_44;			/* 0x44 */
 | |
| } DPR;
 | |
| 
 | |
| #define SMI_XY(x,y)	    (((y) & 0x7fff) | (((x) & 0x7fff) << 16))
 | |
| 
 | |
| /* 2D Engine commands */
 | |
| #define SMI_TRANSPARENT_SRC		0x00000100
 | |
| #define SMI_TRANSPARENT_DEST		0x00000300
 | |
| 
 | |
| #define SMI_OPAQUE_PXL			0x00000000
 | |
| #define SMI_TRANSPARENT_PXL		0x00000400
 | |
| 
 | |
| #define SMI_MONO_PACK_8			0x00001000
 | |
| #define SMI_MONO_PACK_16		0x00002000
 | |
| #define SMI_MONO_PACK_32		0x00003000
 | |
| 
 | |
| #define SMI_ROP2_SRC			0x00008000
 | |
| #define SMI_ROP2_PAT			0x0000C000
 | |
| #define SMI_ROP3			0x00000000
 | |
| 
 | |
| #define SMI_BITBLT			0x00000000
 | |
| #define SMI_RECT_FILL			0x00010000
 | |
| #define SMI_TRAPEZOID_FILL		0x00030000
 | |
| #define SMI_SHORT_STROKE		0x00060000
 | |
| #define SMI_BRESENHAM_LINE		0x00070000
 | |
| #define SMI_HOSTBLT_WRITE		0x00080000
 | |
| #define SMI_HOSTBLT_READ		0x00090000
 | |
| #define SMI_ROTATE_BLT			0x000B0000
 | |
| 
 | |
| #define SMI_SRC_COLOR			0x00000000
 | |
| #define SMI_SRC_MONOCHROME		0x00400000
 | |
| 
 | |
| #define SMI_GRAPHICS_STRETCH		0x00800000
 | |
| 
 | |
| #define SMI_ROTATE_CW			0x01000000
 | |
| #define SMI_ROTATE_CCW			0x02000000
 | |
| 
 | |
| #define SMI_MAJOR_X			0x00000000
 | |
| #define SMI_MAJOR_Y			0x04000000
 | |
| 
 | |
| #define SMI_LEFT_TO_RIGHT		0x00000000
 | |
| #define SMI_RIGHT_TO_LEFT		0x08000000
 | |
| 
 | |
| #define SMI_COLOR_PATTERN		0x40000000
 | |
| #define SMI_MONO_PATTERN		0x00000000
 | |
| 
 | |
| #define SMI_QUICK_START			0x10000000
 | |
| #define SMI_START_ENGINE		0x80000000
 | |
| 
 | |
| #define VGA_SEQ_INDEX		0x3C4
 | |
| #define VGA_SEQ_DATA		0x3C5
 | |
| 
 | |
| typedef struct _smiCardInfo {
 | |
|     SubCardPrivRec    	sub;
 | |
|     CARD16		io_base;
 | |
|     CARD8		*reg_base;
 | |
|     DPR			*dpr;
 | |
|     int			avail;
 | |
| } SmiCardInfo;
 | |
|     
 | |
| #define getSmiCardInfo(kd)	((SmiCardInfo *) ((kd)->card->driver))
 | |
| #define smiCardInfo(kd)	SmiCardInfo	*smic = getSmiCardInfo(kd)
 | |
| 
 | |
| typedef struct _smiScreenInfo {
 | |
|     SubScreenPrivRec	sub;
 | |
|     CARD8		*screen;
 | |
|     CARD32		stride;
 | |
|     CARD32		data_format;
 | |
|     CARD8		dpr_vpr_enable;
 | |
|     KaaScreenInfoRec kaa;
 | |
| } SmiScreenInfo;
 | |
| 
 | |
| #define getSmiScreenInfo(kd) ((SmiScreenInfo *) ((kd)->screen->driver))
 | |
| #define smiScreenInfo(kd)    SmiScreenInfo *smis = getSmiScreenInfo(kd)
 | |
|     
 | |
| void
 | |
| smiPreserve (KdCardInfo *card);
 | |
| 
 | |
| Bool
 | |
| smiMapReg (KdCardInfo *card, SmiCardInfo *smic);
 | |
| 
 | |
| void
 | |
| smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic);
 | |
| 
 | |
| void
 | |
| smiOutb (CARD16 port, CARD8 val);
 | |
| 
 | |
| CARD8
 | |
| smiInb (CARD16 port);
 | |
| 
 | |
| CARD8
 | |
| smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id);
 | |
| 
 | |
| void
 | |
| smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val);
 | |
| 
 | |
| void
 | |
| smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic);
 | |
| 
 | |
| void
 | |
| smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic);
 | |
| 
 | |
| Bool
 | |
| smiEnable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiDisable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiWaitAvail(SmiCardInfo *smic, int n);
 | |
| 
 | |
| void
 | |
| smiWaitIdle (SmiCardInfo *smic);
 | |
|     
 | |
| Bool
 | |
| smiDrawSetup (ScreenPtr pScreen);
 | |
| 
 | |
| Bool
 | |
| smiDrawInit (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiDrawReinit (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiDrawEnable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiDrawDisable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| smiDrawFini (ScreenPtr pScreen);
 | |
| 
 | |
| CARD8
 | |
| smiReadIndex (SmiCardInfo *smic, CARD16 port, CARD8 index);
 | |
| 
 | |
| void
 | |
| smiWriteIndex (SmiCardInfo *smic, CARD16 port, CARD8 index, CARD8 value);
 | |
| 
 | |
| extern KdCardFuncs  smiFuncs;
 | |
| 
 | |
| #endif /* _SMI_H_ */
 |