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