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