diff options
Diffstat (limited to 'hw/kdrive/mach64')
-rw-r--r-- | hw/kdrive/mach64/Makefile.am | 43 | ||||
-rw-r--r-- | hw/kdrive/mach64/mach64.c | 46 | ||||
-rw-r--r-- | hw/kdrive/mach64/mach64.h | 1 | ||||
-rw-r--r-- | hw/kdrive/mach64/mach64draw.c | 26 | ||||
-rw-r--r-- | hw/kdrive/mach64/mach64video.c | 18 |
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); + } +} |