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