summaryrefslogtreecommitdiff
path: root/hw/kdrive/mach64
diff options
context:
space:
mode:
Diffstat (limited to 'hw/kdrive/mach64')
-rw-r--r--hw/kdrive/mach64/Makefile.am43
-rw-r--r--hw/kdrive/mach64/mach64.c46
-rw-r--r--hw/kdrive/mach64/mach64.h1
-rw-r--r--hw/kdrive/mach64/mach64draw.c26
-rw-r--r--hw/kdrive/mach64/mach64video.c18
5 files changed, 73 insertions, 61 deletions
diff --git a/hw/kdrive/mach64/Makefile.am b/hw/kdrive/mach64/Makefile.am
index 2a960ec5f..ff9282e60 100644
--- a/hw/kdrive/mach64/Makefile.am
+++ b/hw/kdrive/mach64/Makefile.am
@@ -1,14 +1,7 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
- -I$(top_srcdir)/hw/kdrive/linux \
+ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
- -I$(top_srcdir)/mi \
- -I$(top_srcdir)/miext/layer \
- -I$(top_srcdir)/miext/shadow \
- -I$(top_srcdir)/randr \
- -I$(top_srcdir)/render \
- $(XSERVER_CFLAGS)
+ @XSERVER_CFLAGS@
bin_PROGRAMS = Xmach64
@@ -22,28 +15,16 @@ libmach64_a_SOURCES = \
mach64.h \
mach64draw.h
-
Xmach64_SOURCES = \
mach64stub.c
-Xmach64_LDADD = \
- libmach64.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- $(top_builddir)/dix/libdix.a \
- $(top_builddir)/os/libos.a \
- $(top_builddir)/miext/layer/liblayer.a \
- $(top_builddir)/hw/kdrive/src/libkdrive.a \
- $(top_builddir)/hw/kdrive/linux/liblinux.a \
- $(top_builddir)/miext/shadow/libshadow.a \
- $(top_builddir)/randr/librandr.a \
- $(top_builddir)/render/librender.a \
- $(top_builddir)/xfixes/libxfixes.a \
- $(top_builddir)/fb/libfb.a \
- $(top_builddir)/mi/libmi.a \
- $(top_builddir)/Xext/libXext.a \
- $(top_builddir)/randr/librandr.a \
- $(top_builddir)/render/librender.a \
- $(top_builddir)/xfixes/libxfixes.a \
- $(top_builddir)/dix/libxpstubs.a \
- $(XSERVER_LIBS) \
- -lm -lz
+MACH64_LIBS = \
+ libmach64.a \
+ $(top_builddir)/hw/kdrive/vesa/libvesa.a
+
+Xmach64_LDADD = \
+ $(MACH64_LIBS) \
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
+
+Xmach64_DEPENDENCIES = $(MACH64_LIBS) @KDRIVE_LIBS@
diff --git a/hw/kdrive/mach64/mach64.c b/hw/kdrive/mach64/mach64.c
index a036f3e1d..3d24045da 100644
--- a/hw/kdrive/mach64/mach64.c
+++ b/hw/kdrive/mach64/mach64.c
@@ -27,7 +27,7 @@
#include "mach64.h"
#include <sys/io.h>
-Bool
+static Bool
mach64CardInit (KdCardInfo *card)
{
Mach64CardInfo *mach64c;
@@ -50,12 +50,11 @@ mach64CardInit (KdCardInfo *card)
return TRUE;
}
-Bool
+static Bool
mach64ScreenInit (KdScreenInfo *screen)
{
Mach64CardInfo *mach64c = screen->card->driver;
Mach64ScreenInfo *mach64s;
- int screen_size, memory;
mach64s = (Mach64ScreenInfo *) xalloc (sizeof (Mach64ScreenInfo));
if (!mach64s)
@@ -70,7 +69,6 @@ mach64ScreenInit (KdScreenInfo *screen)
screen->dumb = TRUE;
if (mach64s->vesa.mapping != VESA_LINEAR)
screen->dumb = TRUE;
- screen->memory_base = mach64s->vesa.fb;
switch (screen->fb[0].depth) {
case 8:
mach64s->colorKey = 0xff;
@@ -86,30 +84,21 @@ mach64ScreenInit (KdScreenInfo *screen)
mach64s->colorKey = 1;
break;
}
- memory = mach64s->vesa.fb_size;
- screen_size = screen->fb[0].byteStride * screen->height;
- memory -= screen_size;
- screen->softCursor = TRUE;
- screen->off_screen_base = screen_size;
- screen->off_screen_size = memory;
screen->driver = mach64s;
return TRUE;
}
-Bool
+static Bool
mach64InitScreen (ScreenPtr pScreen)
{
#ifdef XV
- KdScreenPriv(pScreen);
- Mach64CardInfo *mach64c = pScreenPriv->screen->card->driver;
- if (mach64c->media_reg && mach64c->reg)
- mach64InitVideo(pScreen);
+ mach64InitVideo(pScreen);
#endif
return vesaInitScreen (pScreen);
}
#ifdef RANDR
-Bool
+static Bool
mach64RandRSetConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
@@ -123,7 +112,7 @@ mach64RandRSetConfig (ScreenPtr pScreen,
return TRUE;
}
-void
+static void
mach64RandRInit (ScreenPtr pScreen)
{
rrScrPriv(pScreen);
@@ -132,7 +121,7 @@ mach64RandRInit (ScreenPtr pScreen)
}
#endif
-Bool
+static Bool
mach64FinishInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -143,6 +132,12 @@ mach64FinishInitScreen (ScreenPtr pScreen)
return ret;
}
+static Bool
+mach64CreateResources (ScreenPtr pScreen)
+{
+ return vesaCreateResources (pScreen);
+}
+
CARD32
mach64ReadLCD (Reg *reg, int id)
{
@@ -367,7 +362,7 @@ mach64DPMS (ScreenPtr pScreen, int mode)
return TRUE;
}
-void
+static void
mach64Restore (KdCardInfo *card)
{
Mach64CardInfo *mach64c = card->driver;
@@ -381,23 +376,26 @@ mach64Restore (KdCardInfo *card)
vesaRestore (card);
}
-void
+static void
mach64ScreenFini (KdScreenInfo *screen)
{
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
-
+#ifdef XV
+ mach64FiniVideo(screen->pScreen);
+#endif
vesaScreenFini (screen);
xfree (mach64s);
screen->driver = 0;
}
-void
+static void
mach64CardFini (KdCardInfo *card)
{
Mach64CardInfo *mach64c = card->driver;
mach64UnmapReg (card, mach64c);
vesaCardFini (card);
+ xfree (mach64c);
}
#define mach64CursorInit 0 /* initCursor */
@@ -410,6 +408,8 @@ KdCardFuncs mach64Funcs = {
mach64CardInit, /* cardinit */
mach64ScreenInit, /* scrinit */
mach64InitScreen, /* initScreen */
+ mach64FinishInitScreen, /* finishInitScreen */
+ mach64CreateResources, /* createRes */
mach64Preserve, /* preserve */
mach64Enable, /* enable */
mach64DPMS, /* dpms */
@@ -432,6 +432,4 @@ KdCardFuncs mach64Funcs = {
vesaGetColors, /* getColors */
vesaPutColors, /* putColors */
-
- mach64FinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/mach64/mach64.h b/hw/kdrive/mach64/mach64.h
index 38ddb9ae9..68e762b3b 100644
--- a/hw/kdrive/mach64/mach64.h
+++ b/hw/kdrive/mach64/mach64.h
@@ -557,6 +557,7 @@ typedef struct _mach64PortPriv {
} Mach64PortPrivRec, *Mach64PortPrivPtr;
Bool mach64InitVideo(ScreenPtr pScreen);
+void mach64FiniVideo(ScreenPtr pScreen);
typedef struct _mach64ScreenInfo {
VesaScreenPrivRec vesa;
diff --git a/hw/kdrive/mach64/mach64draw.c b/hw/kdrive/mach64/mach64draw.c
index aa065c5a8..d93e7dff7 100644
--- a/hw/kdrive/mach64/mach64draw.c
+++ b/hw/kdrive/mach64/mach64draw.c
@@ -64,6 +64,10 @@ CARD8 mach64Rop[16] = {
#define MACH64_DRAW_COMBO_SOLID 0x1
#define MACH64_DRAW_COMBO_COPY 0x8
+#define SYNC_ALWAYS 0
+#if SYNC_ALWAYS
+static ScreenPtr mach64Screen;
+#endif
static Reg *reg;
static CARD32 avail;
static CARD32 triple;
@@ -102,6 +106,9 @@ mach64Setup (PixmapPtr pDst, PixmapPtr pSrc, CARD32 combo, int wait)
reg = mach64c->reg;
triple = mach64s->bpp24;
+#if SYNC_ALWAYS
+ mach64Screen = pScreen;
+#endif
if (!reg)
return FALSE;
@@ -140,7 +147,7 @@ mach64Setup (PixmapPtr pDst, PixmapPtr pSrc, CARD32 combo, int wait)
return TRUE;
}
-Bool
+static Bool
mach64PrepareSolid (PixmapPtr pPixmap,
int alu,
Pixel pm,
@@ -154,7 +161,7 @@ mach64PrepareSolid (PixmapPtr pPixmap,
return TRUE;
}
-void
+static void
mach64Solid (int x1, int y1, int x2, int y2)
{
if (triple)
@@ -176,16 +183,19 @@ mach64Solid (int x1, int y1, int x2, int y2)
reg->DST_WIDTH_HEIGHT = MACH64_XY(x2-x1,y2-y1);
}
-void
+static void
mach64DoneSolid (void)
{
+#if SYNC_ALWAYS
+ KdCheckSync (mach64Screen);
+#endif
}
static int copyDx;
static int copyDy;
static CARD32 copyCombo;
-Bool
+static Bool
mach64PrepareCopy (PixmapPtr pSrcPixmap,
PixmapPtr pDstPixmap,
int dx,
@@ -217,7 +227,7 @@ mach64PrepareCopy (PixmapPtr pSrcPixmap,
return TRUE;
}
-void
+static void
mach64Copy (int srcX,
int srcY,
int dstX,
@@ -260,9 +270,12 @@ mach64Copy (int srcX,
reg->DST_HEIGHT_WIDTH = MACH64_YX(w,h);
}
-void
+static void
mach64DoneCopy (void)
{
+#if SYNC_ALWAYS
+ KdCheckSync (mach64Screen);
+#endif
}
KaaScreenInfoRec mach64Kaa = {
@@ -449,6 +462,7 @@ mach64DrawDisable (ScreenPtr pScreen)
void
mach64DrawFini (ScreenPtr pScreen)
{
+ kaaDrawFini (pScreen);
}
void
diff --git a/hw/kdrive/mach64/mach64video.c b/hw/kdrive/mach64/mach64video.c
index b66b4007a..64e5fb795 100644
--- a/hw/kdrive/mach64/mach64video.c
+++ b/hw/kdrive/mach64/mach64video.c
@@ -980,7 +980,10 @@ Bool mach64InitVideo(ScreenPtr pScreen)
int num_adaptors;
KdCardInfo *card = pScreenPriv->card;
Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
+ Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
+ mach64s->pAdaptor = NULL;
+
if (!mach64c->media_reg)
return FALSE;
@@ -1017,3 +1020,18 @@ Bool mach64InitVideo(ScreenPtr pScreen)
xfree(newAdaptors);
return TRUE;
}
+
+void
+mach64FiniVideo (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ mach64ScreenInfo(pScreenPriv);
+ KdVideoAdaptorPtr adapt = mach64s->pAdaptor;
+
+ if (adapt)
+ {
+ Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
+ REGION_UNINIT (pScreen, &pPortPriv->clip);
+ xfree (adapt);
+ }
+}