Initial revision
This commit is contained in:
parent
544ee9bb7a
commit
b923d897a5
20
hw/kdrive/smi/Imakefile
Normal file
20
hw/kdrive/smi/Imakefile
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/smi/Imakefile,v 1.2 2001/06/16 05:48:48 keithp Exp $
|
||||||
|
KDRIVE=..
|
||||||
|
#include "../Kdrive.tmpl"
|
||||||
|
|
||||||
|
#if BuildXvExt
|
||||||
|
XVSRCS=smivideo.c
|
||||||
|
XVOBJS=smivideo.o
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SRCS = smi.c smidraw.c smistub.c $(XVSRCS)
|
||||||
|
|
||||||
|
OBJS = smi.o smidraw.o smistub.o $(XVOBJS)
|
||||||
|
|
||||||
|
DEFINES = XvExtensionDefines -DVESA /* -DUSE_PCI*/
|
||||||
|
|
||||||
|
INCLUDES = -I. $(KDINCS) -I$(KDRIVE)/vesa
|
||||||
|
|
||||||
|
NormalLibraryObjectRule()
|
||||||
|
NormalLibraryTarget(smi,$(OBJS))
|
||||||
|
DependTarget()
|
367
hw/kdrive/smi/smi.c
Normal file
367
hw/kdrive/smi/smi.c
Normal file
|
@ -0,0 +1,367 @@
|
||||||
|
/*
|
||||||
|
* 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.c,v 1.11 2002/10/18 06:31:17 keithp Exp $ */
|
||||||
|
|
||||||
|
#include "smi.h"
|
||||||
|
#include <sys/io.h>
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
#ifdef 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__)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiCardInit (KdCardInfo *card)
|
||||||
|
{
|
||||||
|
SmiCardInfo *smic;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
smic = (SmiCardInfo *) xalloc (sizeof (SmiCardInfo));
|
||||||
|
if (!smic)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
(void) smiMapReg (card, smic);
|
||||||
|
|
||||||
|
if (!vesaInitialize (card, &smic->vesa))
|
||||||
|
{
|
||||||
|
xfree (smic);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
card->driver = smic;
|
||||||
|
LEAVE();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiScreenInit (KdScreenInfo *screen)
|
||||||
|
{
|
||||||
|
SmiCardInfo *smic = screen->card->driver;
|
||||||
|
SmiScreenInfo *smis;
|
||||||
|
int screen_size, memory;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
smis = (SmiScreenInfo *) xalloc (sizeof (SmiScreenInfo));
|
||||||
|
if (!smis)
|
||||||
|
return FALSE;
|
||||||
|
memset (smis, '\0', sizeof (SmiScreenInfo));
|
||||||
|
if (!vesaScreenInitialize (screen, &smis->vesa))
|
||||||
|
{
|
||||||
|
xfree (smis);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!smic->reg_base)
|
||||||
|
screen->dumb = TRUE;
|
||||||
|
if (smis->vesa.mapping != VESA_LINEAR)
|
||||||
|
screen->dumb = TRUE;
|
||||||
|
smis->screen = smis->vesa.fb;
|
||||||
|
memory = smis->vesa.fb_size;
|
||||||
|
screen_size = screen->fb[0].byteStride * screen->height;
|
||||||
|
screen->softCursor = TRUE;
|
||||||
|
memory -= screen_size;
|
||||||
|
if (memory > screen->fb[0].byteStride)
|
||||||
|
{
|
||||||
|
smis->off_screen = smis->screen + screen_size;
|
||||||
|
smis->off_screen_size = memory;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
smis->off_screen = 0;
|
||||||
|
smis->off_screen_size = 0;
|
||||||
|
}
|
||||||
|
screen->driver = smis;
|
||||||
|
LEAVE();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiInitScreen (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
Bool ret;
|
||||||
|
ENTER ();
|
||||||
|
#if 0
|
||||||
|
#ifdef XV
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
SmiCardInfo *smic = pScreenPriv->screen->card->driver;
|
||||||
|
if (smic->media_reg && smic->reg)
|
||||||
|
smiInitVideo(pScreen);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
ret = vesaInitScreen (pScreen);
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RANDR
|
||||||
|
smiRandRSetConfig (ScreenPtr pScreen,
|
||||||
|
Rotation randr,
|
||||||
|
int rate,
|
||||||
|
RRScreenSizePtr pSize)
|
||||||
|
{
|
||||||
|
Bool ret;
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
KdCheckSync (pScreen);
|
||||||
|
|
||||||
|
ret = vesaRandRSetConfig (pScreen, randr, rate, pSize);
|
||||||
|
LEAVE();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiRandRInit (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
rrScrPriv(pScreen);
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
pScrPriv->rrSetConfig = smiRandRSetConfig;
|
||||||
|
LEAVE ();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiFinishInitScreen (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
ENTER ();
|
||||||
|
if (!vesaFinishInitScreen (pScreen))
|
||||||
|
return FALSE;
|
||||||
|
#ifdef RANDR
|
||||||
|
if (!smiRandRInit (pScreen))
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
LEAVE ();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiPreserve (KdCardInfo *card)
|
||||||
|
{
|
||||||
|
SmiCardInfo *smic = card->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
vesaPreserve(card);
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiMapReg (KdCardInfo *card, SmiCardInfo *smic)
|
||||||
|
{
|
||||||
|
ENTER ();
|
||||||
|
smic->io_base = 0; /* only handles one SMI card at standard VGA address */
|
||||||
|
smic->reg_base = (CARD8 *) KdMapDevice (SMI_REG_BASE(card),
|
||||||
|
SMI_REG_SIZE(card));
|
||||||
|
|
||||||
|
if (!smic->reg_base)
|
||||||
|
{
|
||||||
|
smic->dpr = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
KdSetMappedMode (SMI_REG_BASE(card),
|
||||||
|
SMI_REG_SIZE(card),
|
||||||
|
KD_MAPPED_MODE_REGISTERS);
|
||||||
|
smic->dpr = (DPR *) (smic->reg_base + SMI_DPR_OFF(card));
|
||||||
|
LEAVE ();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic)
|
||||||
|
{
|
||||||
|
ENTER ();
|
||||||
|
if (smic->reg_base)
|
||||||
|
{
|
||||||
|
KdResetMappedMode (SMI_REG_BASE(card),
|
||||||
|
SMI_REG_SIZE(card),
|
||||||
|
KD_MAPPED_MODE_REGISTERS);
|
||||||
|
KdUnmapDevice ((void *) smic->reg_base, SMI_REG_SIZE(card));
|
||||||
|
smic->reg_base = 0;
|
||||||
|
smic->dpr = 0;
|
||||||
|
}
|
||||||
|
LEAVE ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiOutb (CARD16 port, CARD8 val)
|
||||||
|
{
|
||||||
|
asm volatile ("outb %b0,%w1" : : "a" (val), "d" (port));
|
||||||
|
}
|
||||||
|
|
||||||
|
CARD8
|
||||||
|
smiInb (CARD16 port)
|
||||||
|
{
|
||||||
|
CARD8 v;
|
||||||
|
asm volatile ("inb %w1,%b0" : "=a" (v) : "d" (port));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
CARD8
|
||||||
|
smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id)
|
||||||
|
{
|
||||||
|
smiOutb (smic->io_base + addr, id);
|
||||||
|
return smiInb (smic->io_base + data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val)
|
||||||
|
{
|
||||||
|
smiOutb (smic->io_base + addr, id);
|
||||||
|
smiOutb (smic->io_base + data, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic)
|
||||||
|
{
|
||||||
|
ENTER ();
|
||||||
|
if (!smic->reg_base)
|
||||||
|
smiMapReg (card, smic);
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic)
|
||||||
|
{
|
||||||
|
smiUnmapReg (card, smic);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiEnable (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
SmiCardInfo *smic = pScreenPriv->card->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
if (!vesaEnable (pScreen))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
smiSetMMIO (pScreenPriv->card, smic);
|
||||||
|
smiDPMS (pScreen, KD_DPMS_NORMAL);
|
||||||
|
#if 0
|
||||||
|
#ifdef XV
|
||||||
|
KdXVEnable (pScreen);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
LEAVE ();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDisable (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
SmiCardInfo *smic = pScreenPriv->card->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
#ifdef XV
|
||||||
|
KdXVDisable (pScreen);
|
||||||
|
#endif
|
||||||
|
smiResetMMIO (pScreenPriv->card, smic);
|
||||||
|
vesaDisable (pScreen);
|
||||||
|
LEAVE ();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiDPMS (ScreenPtr pScreen, int mode)
|
||||||
|
{
|
||||||
|
Bool ret;
|
||||||
|
ENTER ();
|
||||||
|
ret = vesaDPMS (pScreen, mode);
|
||||||
|
LEAVE ();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiRestore (KdCardInfo *card)
|
||||||
|
{
|
||||||
|
SmiCardInfo *smic = card->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
vesaRestore (card);
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiScreenFini (KdScreenInfo *screen)
|
||||||
|
{
|
||||||
|
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
vesaScreenFini (screen);
|
||||||
|
xfree (smis);
|
||||||
|
screen->driver = 0;
|
||||||
|
LEAVE ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiCardFini (KdCardInfo *card)
|
||||||
|
{
|
||||||
|
SmiCardInfo *smic = card->driver;
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
|
smiUnmapReg (card, smic);
|
||||||
|
vesaCardFini (card);
|
||||||
|
LEAVE ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define smiCursorInit 0 /* initCursor */
|
||||||
|
#define smiCursorEnable 0 /* enableCursor */
|
||||||
|
#define smiCursorDisable 0 /* disableCursor */
|
||||||
|
#define smiCursorFini 0 /* finiCursor */
|
||||||
|
#define smiRecolorCursor 0 /* recolorCursor */
|
||||||
|
|
||||||
|
KdCardFuncs smiFuncs = {
|
||||||
|
smiCardInit, /* cardinit */
|
||||||
|
smiScreenInit, /* scrinit */
|
||||||
|
smiInitScreen, /* initScreen */
|
||||||
|
smiPreserve, /* preserve */
|
||||||
|
smiEnable, /* enable */
|
||||||
|
smiDPMS, /* dpms */
|
||||||
|
smiDisable, /* disable */
|
||||||
|
smiRestore, /* restore */
|
||||||
|
smiScreenFini, /* scrfini */
|
||||||
|
smiCardFini, /* cardfini */
|
||||||
|
|
||||||
|
smiCursorInit, /* initCursor */
|
||||||
|
smiCursorEnable, /* enableCursor */
|
||||||
|
smiCursorDisable, /* disableCursor */
|
||||||
|
smiCursorFini, /* finiCursor */
|
||||||
|
smiRecolorCursor, /* recolorCursor */
|
||||||
|
|
||||||
|
smiDrawInit, /* initAccel */
|
||||||
|
smiDrawEnable, /* enableAccel */
|
||||||
|
smiDrawSync, /* syncAccel */
|
||||||
|
smiDrawDisable, /* disableAccel */
|
||||||
|
smiDrawFini, /* finiAccel */
|
||||||
|
|
||||||
|
vesaGetColors, /* getColors */
|
||||||
|
vesaPutColors, /* putColors */
|
||||||
|
|
||||||
|
smiFinishInitScreen, /* finishInitScreen */
|
||||||
|
};
|
196
hw/kdrive/smi/smi.h
Normal file
196
hw/kdrive/smi/smi.h
Normal file
|
@ -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_ */
|
336
hw/kdrive/smi/smidraw.c
Normal file
336
hw/kdrive/smi/smidraw.c
Normal file
|
@ -0,0 +1,336 @@
|
||||||
|
/*
|
||||||
|
* Id: smidraw.c,v 1.1 1999/11/02 03:54:47 keithp Exp $
|
||||||
|
*
|
||||||
|
* Copyright © 1999 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/smidraw.c,v 1.7 2001/07/24 19:06:03 keithp Exp $ */
|
||||||
|
|
||||||
|
#include "smi.h"
|
||||||
|
#include "smidraw.h"
|
||||||
|
|
||||||
|
#include "Xmd.h"
|
||||||
|
#include "gcstruct.h"
|
||||||
|
#include "scrnintstr.h"
|
||||||
|
#include "pixmapstr.h"
|
||||||
|
#include "regionstr.h"
|
||||||
|
#include "mistruct.h"
|
||||||
|
#include "fontstruct.h"
|
||||||
|
#include "dixfontstr.h"
|
||||||
|
#include "fb.h"
|
||||||
|
#include "migc.h"
|
||||||
|
#include "miline.h"
|
||||||
|
#include "picturestr.h"
|
||||||
|
|
||||||
|
CARD8 smiBltRop[16] = {
|
||||||
|
/* GXclear */ 0x00, /* 0 */
|
||||||
|
/* GXand */ 0x88, /* src AND dst */
|
||||||
|
/* GXandReverse */ 0x44, /* src AND NOT dst */
|
||||||
|
/* GXcopy */ 0xcc, /* src */
|
||||||
|
/* GXandInverted*/ 0x22, /* NOT src AND dst */
|
||||||
|
/* GXnoop */ 0xaa, /* dst */
|
||||||
|
/* GXxor */ 0x66, /* src XOR dst */
|
||||||
|
/* GXor */ 0xee, /* src OR dst */
|
||||||
|
/* GXnor */ 0x11, /* NOT src AND NOT dst */
|
||||||
|
/* GXequiv */ 0x99, /* NOT src XOR dst */
|
||||||
|
/* GXinvert */ 0x55, /* NOT dst */
|
||||||
|
/* GXorReverse */ 0xdd, /* src OR NOT dst */
|
||||||
|
/* GXcopyInverted*/ 0x33, /* NOT src */
|
||||||
|
/* GXorInverted */ 0xbb, /* NOT src OR dst */
|
||||||
|
/* GXnand */ 0x77, /* NOT src OR NOT dst */
|
||||||
|
/* GXset */ 0xff, /* 1 */
|
||||||
|
};
|
||||||
|
|
||||||
|
CARD8 smiSolidRop[16] = {
|
||||||
|
/* GXclear */ 0x00, /* 0 */
|
||||||
|
/* GXand */ 0xa0, /* src AND dst */
|
||||||
|
/* GXandReverse */ 0x50, /* src AND NOT dst */
|
||||||
|
/* GXcopy */ 0xf0, /* src */
|
||||||
|
/* GXandInverted*/ 0x0a, /* NOT src AND dst */
|
||||||
|
/* GXnoop */ 0xaa, /* dst */
|
||||||
|
/* GXxor */ 0x5a, /* src XOR dst */
|
||||||
|
/* GXor */ 0xfa, /* src OR dst */
|
||||||
|
/* GXnor */ 0x05, /* NOT src AND NOT dst */
|
||||||
|
/* GXequiv */ 0xa5, /* NOT src XOR dst */
|
||||||
|
/* GXinvert */ 0x55, /* NOT dst */
|
||||||
|
/* GXorReverse */ 0xf5, /* src OR NOT dst */
|
||||||
|
/* GXcopyInverted*/ 0x0f, /* NOT src */
|
||||||
|
/* GXorInverted */ 0xaf, /* NOT src OR dst */
|
||||||
|
/* GXnand */ 0x5f, /* NOT src OR NOT dst */
|
||||||
|
/* GXset */ 0xff, /* 1 */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define GET_STATUS(smic) smiGetIndex (smic, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x16)
|
||||||
|
|
||||||
|
#define ENGINE_IDLE_EMPTY(smic) ((GET_STATUS(smic) & 0x18) == 0x10)
|
||||||
|
#define FIFO_EMPTY(smic) ((GET_STATUS(smic) & 0x10) == 0x10)
|
||||||
|
|
||||||
|
static void
|
||||||
|
smiSleep (int ms)
|
||||||
|
{
|
||||||
|
struct timespec req;
|
||||||
|
|
||||||
|
req.tv_sec = ms / 1000;
|
||||||
|
req.tv_nsec = (ms % 1000) * 1000000;
|
||||||
|
while (req.tv_sec || req.tv_nsec)
|
||||||
|
if (nanosleep (&req, &req) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAX_FIFO 16
|
||||||
|
|
||||||
|
void
|
||||||
|
smiWaitAvail(SmiCardInfo *smic, int n)
|
||||||
|
{
|
||||||
|
if (smic->avail < n)
|
||||||
|
{
|
||||||
|
while (!FIFO_EMPTY (smic))
|
||||||
|
;
|
||||||
|
smic->avail = MAX_FIFO;
|
||||||
|
}
|
||||||
|
smic->avail -= n;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiWaitIdle (SmiCardInfo *smic)
|
||||||
|
{
|
||||||
|
while (!ENGINE_IDLE_EMPTY (smic))
|
||||||
|
;
|
||||||
|
smic->avail = MAX_FIFO;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SmiCardInfo *smic;
|
||||||
|
static SmiScreenInfo *smis;
|
||||||
|
static DPR *dpr;
|
||||||
|
static CARD32 accel_cmd;
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
smiSetup (ScreenPtr pScreen, int wait)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
|
||||||
|
smis = getSmiScreenInfo (pScreenPriv);
|
||||||
|
smic = getSmiCardInfo(pScreenPriv);
|
||||||
|
dpr = smic->dpr;
|
||||||
|
|
||||||
|
if (!dpr)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* enable DPR/VPR registers */
|
||||||
|
smiSetIndex (smic, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x21,
|
||||||
|
smis->dpr_vpr_enable);
|
||||||
|
|
||||||
|
smiWaitAvail (smic, wait + 9);
|
||||||
|
dpr->src_stride = (smis->stride << 16) | smis->stride;
|
||||||
|
dpr->data_format = smis->data_format;
|
||||||
|
dpr->mask1 = 0xffffffff;
|
||||||
|
dpr->mask2 = 0xffffffff;
|
||||||
|
dpr->dst_stride = (smis->stride << 16) | smis->stride;
|
||||||
|
dpr->unknown_40 = 0x0;
|
||||||
|
dpr->unknown_44 = 0x0;
|
||||||
|
dpr->scissors_ul = 0x0;
|
||||||
|
dpr->scissors_lr = SMI_XY(4095,4095);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiPrepareSolid (DrawablePtr pDrawable,
|
||||||
|
int alu,
|
||||||
|
Pixel pm,
|
||||||
|
Pixel fg)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pDrawable->pScreen);
|
||||||
|
|
||||||
|
if (~pm & FbFullMask(pDrawable->depth))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!smiSetup (pDrawable->pScreen, 3))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
accel_cmd = smiSolidRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
|
||||||
|
dpr->fg = fg;
|
||||||
|
dpr->mask3 = 0xffffffff;
|
||||||
|
dpr->mask4 = 0xffffffff;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiSolid (int x1, int y1, int x2, int y2)
|
||||||
|
{
|
||||||
|
smiWaitAvail(smic,3);
|
||||||
|
dpr->dst_xy = SMI_XY(x1,y1);
|
||||||
|
dpr->dst_wh = SMI_XY(x2-x1,y2-y1);
|
||||||
|
dpr->accel_cmd = accel_cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDoneSolid (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static int copyDx;
|
||||||
|
static int copyDy;
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiPrepareCopy (DrawablePtr pSrcDrawable,
|
||||||
|
DrawablePtr pDstDrawable,
|
||||||
|
int dx,
|
||||||
|
int dy,
|
||||||
|
int alu,
|
||||||
|
Pixel pm)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pSrcDrawable->pScreen);
|
||||||
|
|
||||||
|
if (~pm & FbFullMask(pSrcDrawable->depth))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!smiSetup (pSrcDrawable->pScreen, 0))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
accel_cmd = smiBltRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
|
||||||
|
|
||||||
|
copyDx = dx;
|
||||||
|
copyDy = dy;
|
||||||
|
if (dy < 0 || (dy == 0 && dx < 0))
|
||||||
|
accel_cmd |= SMI_RIGHT_TO_LEFT;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiCopy (int srcX,
|
||||||
|
int srcY,
|
||||||
|
int dstX,
|
||||||
|
int dstY,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
if (accel_cmd & SMI_RIGHT_TO_LEFT)
|
||||||
|
{
|
||||||
|
srcX += w - 1;
|
||||||
|
dstX += w - 1;
|
||||||
|
srcY += h - 1;
|
||||||
|
dstY += h - 1;
|
||||||
|
}
|
||||||
|
smiWaitAvail (smic, 4);
|
||||||
|
dpr->src_xy = SMI_XY (srcX, srcY);
|
||||||
|
dpr->dst_xy = SMI_XY (dstX, dstY);
|
||||||
|
dpr->dst_wh = SMI_XY (w, h);
|
||||||
|
dpr->accel_cmd = accel_cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDoneCopy (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
KaaScreenPrivRec smiKaa = {
|
||||||
|
smiPrepareSolid,
|
||||||
|
smiSolid,
|
||||||
|
smiDoneSolid,
|
||||||
|
|
||||||
|
smiPrepareCopy,
|
||||||
|
smiCopy,
|
||||||
|
smiDoneCopy,
|
||||||
|
};
|
||||||
|
|
||||||
|
Bool
|
||||||
|
smiDrawInit (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
|
||||||
|
if (pScreenPriv->screen->fb[0].depth == 4)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!kaaDrawInit (pScreen, &smiKaa))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDrawEnable (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
int i;
|
||||||
|
static const int xyAddress[] = { 320, 400, 512, 640, 800, 1024, 1280, 1600, 2048 };
|
||||||
|
|
||||||
|
smis = getSmiScreenInfo (pScreenPriv);
|
||||||
|
smic = getSmiCardInfo(pScreenPriv);
|
||||||
|
dpr = smic->dpr;
|
||||||
|
|
||||||
|
smis->stride = pScreenPriv->screen->fb[0].byteStride;
|
||||||
|
smis->dpr_vpr_enable = smiGetIndex (smic, VGA_SEQ_INDEX,
|
||||||
|
VGA_SEQ_DATA, 0x21) & ~0x03;
|
||||||
|
|
||||||
|
switch (pScreenPriv->screen->fb[0].depth) {
|
||||||
|
case 8:
|
||||||
|
smis->data_format = 0x00000000;
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
case 16:
|
||||||
|
smis->data_format = 0x00100000;
|
||||||
|
smis->stride >>= 1;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
smis->data_format = 0x00300000;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
smis->data_format = 0x00200000;
|
||||||
|
smis->stride >>= 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (i = 0; i < sizeof(xyAddress) / sizeof(xyAddress[0]); i++)
|
||||||
|
{
|
||||||
|
if (xyAddress[i] == pScreenPriv->screen->fb[0].pixelStride)
|
||||||
|
{
|
||||||
|
smis->data_format |= i << 16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
smiSetup (pScreen, 0);
|
||||||
|
|
||||||
|
KdMarkSync (pScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDrawDisable (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
smic = 0;
|
||||||
|
smis = 0;
|
||||||
|
dpr = 0;
|
||||||
|
accel_cmd = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDrawFini (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
smiDrawSync (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
smic = getSmiCardInfo(pScreenPriv);
|
||||||
|
|
||||||
|
smiWaitIdle (smic);
|
||||||
|
}
|
72
hw/kdrive/smi/smidraw.h
Normal file
72
hw/kdrive/smi/smidraw.h
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Id: smidraw.h,v 1.1 1999/11/02 03:54:47 keithp Exp $
|
||||||
|
*
|
||||||
|
* Copyright © 1999 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/mach64/mach64draw.h,v 1.1 2001/06/03 18:48:19 keithp Exp $ */
|
||||||
|
|
||||||
|
#ifndef _SMIDRAW_H_
|
||||||
|
#define _SMIDRAW_H_
|
||||||
|
|
||||||
|
#define SetupSmi(s) KdScreenPriv(s); \
|
||||||
|
smiCardInfo(pScreenPriv); \
|
||||||
|
Cop *cop = smic->cop
|
||||||
|
|
||||||
|
#define SmiAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE)
|
||||||
|
|
||||||
|
#define _smiInit(cop,smic) { \
|
||||||
|
if ((cop)->status == 0xffffffff) smiSetMMIO(smic); \
|
||||||
|
(cop)->multi = (smic)->cop_depth; \
|
||||||
|
(cop)->multi = (smic)->cop_stride; \
|
||||||
|
(cop)->multi = SmiAlpha; \
|
||||||
|
} \
|
||||||
|
|
||||||
|
#define _smiSetSolidRect(cop,pix,alu,cmd) {\
|
||||||
|
cop->multi = COP_MULTI_PATTERN; \
|
||||||
|
cop->multi = COP_MULTI_ROP | smiRop[alu]; \
|
||||||
|
cop->fg = (pix); \
|
||||||
|
cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _smiRect(cop,x1,y1,x2,y2,cmd) { \
|
||||||
|
(cop)->dst_start_xy = TRI_XY (x1,y1); \
|
||||||
|
(cop)->dst_end_xy = TRI_XY(x2,y2); \
|
||||||
|
_smiWaitDone(cop); \
|
||||||
|
(cop)->command = (cmd); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \
|
||||||
|
COP_STATUS_DPE_BUSY | \
|
||||||
|
COP_STATUS_MI_BUSY)
|
||||||
|
|
||||||
|
#define _smiWaitDone(cop) { \
|
||||||
|
int __q__ = 500000; \
|
||||||
|
while (__q__-- && (cop)->status & COP_STATUS_BUSY) \
|
||||||
|
; \
|
||||||
|
if (!__q__) \
|
||||||
|
(cop)->status = 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _smiWaitIdleEmpty(cop) _smiWaitDone(cop)
|
||||||
|
|
||||||
|
#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
|
||||||
|
|
||||||
|
#endif
|
58
hw/kdrive/smi/smistub.c
Normal file
58
hw/kdrive/smi/smistub.c
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Id: smistub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $
|
||||||
|
*
|
||||||
|
* Copyright 1999 SuSE, Inc.
|
||||||
|
*
|
||||||
|
* 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 SuSE not be used in advertising or
|
||||||
|
* publicity pertaining to distribution of the software without specific,
|
||||||
|
* written prior permission. SuSE makes no representations about the
|
||||||
|
* suitability of this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*
|
||||||
|
* SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Author: Keith Packard, SuSE, Inc.
|
||||||
|
*/
|
||||||
|
/* $XFree86: xc/programs/Xserver/hw/kdrive/smi/smistub.c,v 1.4 2002/10/08 21:25:35 keithp Exp $ */
|
||||||
|
|
||||||
|
#include "smi.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
InitCard (char *name)
|
||||||
|
{
|
||||||
|
KdCardAttr attr;
|
||||||
|
|
||||||
|
if (LinuxFindPci (0x126f, 0x0720, 0, &attr))
|
||||||
|
KdCardInfoAdd (&smiFuncs, &attr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
|
||||||
|
{
|
||||||
|
KdInitOutput (pScreenInfo, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
InitInput (int argc, char **argv)
|
||||||
|
{
|
||||||
|
KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ddxProcessArgument (int argc, char **argv, int i)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!(ret = vesaProcessArgument (argc, argv, i)))
|
||||||
|
ret = KdProcessArgument(argc, argv, i);
|
||||||
|
return ret;
|
||||||
|
}
|
1013
hw/kdrive/smi/smivideo.c
Normal file
1013
hw/kdrive/smi/smivideo.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user