diff options
Diffstat (limited to 'hw/kdrive/smi/smi.h')
-rw-r--r-- | hw/kdrive/smi/smi.h | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/hw/kdrive/smi/smi.h b/hw/kdrive/smi/smi.h new file mode 100644 index 000000000..5092988d7 --- /dev/null +++ b/hw/kdrive/smi/smi.h @@ -0,0 +1,196 @@ +/* + * Id: smi.h,v 1.2 1999/11/02 08:17:24 keithp Exp $ + * + * 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. + */ +/* $XFree86: xc/programs/Xserver/hw/kdrive/smi/smi.h,v 1.6 2001/07/24 19:06:03 keithp Exp $ */ + +#ifndef _SMI_H_ +#define _SMI_H_ +#include <vesa.h> +#include "kxv.h" + +/* + * 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 { + VesaCardPrivRec vesa; + 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 { + VesaScreenPrivRec vesa; + CARD8 *screen; + CARD8 *off_screen; + int off_screen_size; + CARD32 stride; + CARD32 data_format; + CARD8 dpr_vpr_enable; +} 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 +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 +smiDrawSync (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_ */ |