summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2003-11-02 19:56:10 +0000
committerKeith Packard <keithp@keithp.com>2003-11-02 19:56:10 +0000
commit5378236aa647ec9a723a3e5fbd2a57eb286a1938 (patch)
treeb178d5f95a4882d617dbbdab8cb5e0b40003a704
parent9e94665cf9cf0f74dff5b3cdaa4cde99e234fa45 (diff)
merge xfixes_2_branch back to HEAD
-rw-r--r--hw/kdrive/fbdev/Makefile.am42
-rw-r--r--hw/kdrive/fbdev/fbdev.c311
-rw-r--r--hw/kdrive/fbdev/fbdev.h46
-rw-r--r--hw/kdrive/fbdev/fbinit.c4
-rw-r--r--hw/kdrive/linux/Makefile.am38
-rw-r--r--hw/kdrive/linux/agp.c2
-rw-r--r--hw/kdrive/linux/bus.c6
-rw-r--r--hw/kdrive/linux/keyboard.c18
-rw-r--r--hw/kdrive/linux/linux.c2
-rw-r--r--hw/kdrive/linux/mouse.c28
-rw-r--r--hw/kdrive/linux/ms.c8
-rw-r--r--hw/kdrive/linux/ps2.c8
-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
-rw-r--r--hw/kdrive/mga/Makefile.am36
-rw-r--r--hw/kdrive/mga/mga.c49
-rw-r--r--hw/kdrive/mga/mgadraw.c18
-rw-r--r--hw/kdrive/nvidia/Makefile.am30
-rw-r--r--hw/kdrive/nvidia/nvidia.c30
-rw-r--r--hw/kdrive/nvidia/nvidia.h1
-rw-r--r--hw/kdrive/nvidia/nvidiadraw.c38
-rw-r--r--hw/kdrive/r128/Makefile.am31
-rw-r--r--hw/kdrive/r128/r128.c42
-rw-r--r--hw/kdrive/r128/r128.h6
-rw-r--r--hw/kdrive/r128/r128draw.c41
-rw-r--r--hw/kdrive/r128/r128stub.c3
-rw-r--r--hw/kdrive/smi/Makefile.am30
-rw-r--r--hw/kdrive/smi/smi.c46
-rw-r--r--hw/kdrive/smi/smi.h18
-rw-r--r--hw/kdrive/smi/smidraw.c39
-rw-r--r--hw/kdrive/smi/smistub.c1
-rw-r--r--hw/kdrive/src/Makefile.am8
-rw-r--r--hw/kdrive/src/kaa.c173
-rw-r--r--hw/kdrive/src/kasync.c8
-rw-r--r--hw/kdrive/src/kcmap.c2
-rw-r--r--hw/kdrive/src/kcurscol.c2
-rw-r--r--hw/kdrive/src/kdrive.c72
-rw-r--r--hw/kdrive/src/kdrive.h29
-rw-r--r--hw/kdrive/src/kinput.c24
-rw-r--r--hw/kdrive/src/knoop.c4
-rw-r--r--hw/kdrive/src/koffscreen.c7
-rw-r--r--hw/kdrive/src/kshadow.c52
-rw-r--r--hw/kdrive/src/vga.c2
-rw-r--r--hw/kdrive/src/vga.h6
-rw-r--r--hw/kdrive/vesa/Makefile.am33
-rw-r--r--hw/kdrive/vesa/vesa.c278
-rw-r--r--hw/kdrive/vesa/vesa.h106
-rw-r--r--hw/kdrive/vesa/vesainit.c4
51 files changed, 920 insertions, 996 deletions
diff --git a/hw/kdrive/fbdev/Makefile.am b/hw/kdrive/fbdev/Makefile.am
index 43e737cc4..f492e8db6 100644
--- a/hw/kdrive/fbdev/Makefile.am
+++ b/hw/kdrive/fbdev/Makefile.am
@@ -1,12 +1,6 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
- -I$(top_srcdir)/mi \
- -I$(top_srcdir)/miext/layer \
- -I$(top_srcdir)/miext/shadow \
- -I$(top_srcdir)/randr \
- -I$(top_srcdir)/render \
- $(XSERVER_CFLAGS)
+ @KDRIVE_INCS@ \
+ @XSERVER_CFLAGS@
noinst_LIBRARIES = libfbdev.a
@@ -18,28 +12,18 @@ libfbdev_a_SOURCES = \
Xfbdev_SOURCES = \
fbinit.c
-Xfbdev_LDADD = \
- libfbdev.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
if TSLIB
-Xfbdev_LDADD += -lts
+TSLIB_FLAG = -lts
endif
+Xfbdev_LDADD = \
+ libfbdev.a \
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@ \
+ $(TSLIB_FLAG)
+
+Xfbdev_DEPENDENCIES = \
+ libfbdev.a \
+ @KDRIVE_LIBS@
+
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index e9ab57454..cb0a1b399 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -29,9 +29,6 @@
#include "fbdev.h"
#include <sys/ioctl.h>
-/* this code was used to debug MSB 24bpp code on a 16bpp frame buffer */
-#undef FAKE24_ON_16
-
extern int KdTsPhyScreen;
Bool
@@ -114,9 +111,6 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
Pixel allbits;
int depth;
Bool gray;
-#ifdef FAKE24_ON_16
- Bool fake24;
-#endif
depth = priv->var.bits_per_pixel;
gray = priv->var.grayscale;
@@ -190,35 +184,8 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
}
screen->rate = 72;
scrpriv->randr = screen->randr;
- scrpriv->layerKind = LAYER_FB;
-#ifdef FAKE24_ON_16
- if (screen->fb[0].depth == 24 && screen->fb[0].bitsPerPixel == 24 &&
- priv->var.bits_per_pixel == 16)
- {
- fake24 = TRUE;
- scrpriv->shadow = TRUE;
- scrpriv->rotation = 0;
- screen->fb[0].redMask = 0xff0000;
- screen->fb[0].greenMask = 0x00ff00;
- screen->fb[0].blueMask = 0x0000ff;
- screen->width = priv->var.xres;
- screen->height = priv->var.yres;
- screen->softCursor = TRUE;
- }
- else
-#endif
- {
- screen->fb[0].depth = depth;
- screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
- screen->width = priv->var.xres;
- screen->height = priv->var.yres;
- screen->fb[0].byteStride = priv->fix.line_length;
- screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
- priv->var.bits_per_pixel);
- screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
- }
- return TRUE;
+ return fbdevMapFramebuffer (screen);
}
Bool
@@ -256,173 +223,94 @@ fbdevWindowLinear (ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
}
-#ifdef FAKE24_ON_16
-void
-fbdevUpdateFake24 (ScreenPtr pScreen,
- PixmapPtr pShadow,
- RegionPtr damage)
+Bool
+fbdevMapFramebuffer (KdScreenInfo *screen)
{
- shadowScrPriv(pScreen);
- int nbox = REGION_NUM_RECTS (damage);
- BoxPtr pbox = REGION_RECTS (damage);
- FbBits *shaBits;
- CARD8 *shaBase, *shaLine, *sha;
- CARD16 s;
- FbStride shaStride;
- int scrBase, scrLine, scr;
- int shaBpp;
- int x, y, w, h, width;
- int i;
- CARD16 *winBase, *winLine, *win;
- CARD32 winSize;
-
- fbGetDrawable (&pShadow->drawable, shaBits, shaStride, shaBpp);
- shaStride = shaStride * sizeof (FbBits) / sizeof (CARD8);
- shaBase = (CARD8 *) shaBits;
- while (nbox--)
+ FbdevScrPriv *scrpriv = screen->driver;
+ KdMouseMatrix m;
+ FbdevPriv *priv = screen->card->driver;
+
+ if (scrpriv->randr != RR_Rotate_0)
+ scrpriv->shadow = TRUE;
+ else
+ scrpriv->shadow = FALSE;
+
+ KdComputeMouseMatrix (&m, scrpriv->randr, screen->width, screen->height);
+
+ KdSetMouseMatrix (&m);
+
+ screen->width = priv->var.xres;
+ screen->height = priv->var.yres;
+ screen->memory_base = (CARD8 *) (priv->fb);
+ screen->memory_size = 0;
+ screen->off_screen_base = 0;
+ screen->fb[0].depth = priv->var.bits_per_pixel;
+ screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
+
+ if (scrpriv->shadow)
{
- x = pbox->x1;
- y = pbox->y1;
- w = (pbox->x2 - pbox->x1);
- h = pbox->y2 - pbox->y1;
-
- shaLine = shaBase + y * shaStride + x * 3;
-
- while (h--)
- {
- winSize = 0;
- scrBase = 0;
- width = w;
- scr = x;
- sha = shaLine;
- while (width) {
- /* how much remains in this window */
- i = scrBase + winSize - scr;
- if (i <= 0 || scr < scrBase)
- {
- winBase = (CARD16 *) (*pScrPriv->window) (pScreen,
- y,
- scr * sizeof (CARD16),
- SHADOW_WINDOW_WRITE,
- &winSize);
- if(!winBase)
- return;
- scrBase = scr;
- winSize /= sizeof (CARD16);
- i = winSize;
- }
- win = winBase + (scr - scrBase);
- if (i > width)
- i = width;
- width -= i;
- scr += i;
- while (i--)
- {
-#if IMAGE_BYTE_ORDER == MSBFirst
- *win++ = ((sha[2] >> 3) |
- ((sha[1] & 0xf8) << 2) |
- ((sha[0] & 0xf8) << 7));
-#else
- *win++ = ((sha[0] >> 3) |
- ((sha[1] & 0xfc) << 3) |
- ((sha[2] & 0xf8) << 8));
-#endif
- sha += 3;
- }
- }
- shaLine += shaStride;
- y++;
- }
- pbox++;
+ if (!KdShadowFbAlloc (screen, 0,
+ scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
+ return FALSE;
+ }
+ else
+ {
+ screen->fb[0].byteStride = priv->fix.line_length;
+ screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
+ priv->var.bits_per_pixel);
+ screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
}
+
+ return TRUE;
}
-#endif /* FAKE24_ON_16 */
void
-fbdevConfigureScreen (ScreenPtr pScreen)
+fbdevSetScreenSizes (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver;
- KdMouseMatrix m;
+ FbdevPriv *priv = screen->card->driver;
-#ifdef FAKE24_ON_16
- if (fake24)
- {
- scrpriv->randr = RR_Rotate_0;
- scrpriv->shadow = TRUE;
- }
- else
-#endif /* FAKE24_ON_16 */
+ if (scrpriv->randr & (RR_Rotate_0|RR_Rotate_180))
{
- if (scrpriv->randr != RR_Rotate_0)
- scrpriv->shadow = TRUE;
- else
- scrpriv->shadow = FALSE;
- }
-
- KdComputeMouseMatrix (&m, scrpriv->randr, screen->width, screen->height);
-
- if (m.matrix[0][0])
- {
- pScreen->width = screen->width;
- pScreen->height = screen->height;
+ pScreen->width = priv->var.xres;
+ pScreen->height = priv->var.yres;
pScreen->mmWidth = screen->width_mm;
pScreen->mmHeight = screen->height_mm;
}
else
{
- pScreen->width = screen->height;
- pScreen->height = screen->width;
+ pScreen->width = priv->var.yres;
+ pScreen->height = priv->var.xres;
pScreen->mmWidth = screen->height_mm;
pScreen->mmHeight = screen->width_mm;
}
- KdSetMouseMatrix (&m);
}
-LayerPtr
-fbdevLayerCreate (ScreenPtr pScreen)
+Bool
+fbdevUnmapFramebuffer (KdScreenInfo *screen)
+{
+ KdShadowFbFree (screen, 0);
+ return TRUE;
+}
+
+Bool
+fbdevSetShadow (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver;
ShadowUpdateProc update;
ShadowWindowProc window;
- PixmapPtr pPixmap;
- int kind;
- if (scrpriv->shadow)
- {
- window = fbdevWindowLinear;
- update = 0;
-#ifdef FAKE24_ON_16
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 24 && priv->var.bits_per_pixel == 16)
- {
- update = fbdevUpdateFake24;
- }
- else
-#endif /* FAKE24_ON_16 */
- {
- if (scrpriv->randr)
- update = shadowUpdateRotatePacked;
- else
- update = shadowUpdatePacked;
- }
- if (!update)
- abort ();
- kind = LAYER_SHADOW;
- pPixmap = 0;
- }
+ window = fbdevWindowLinear;
+ update = 0;
+ if (scrpriv->randr)
+ update = shadowUpdateRotatePacked;
else
- {
- kind = scrpriv->layerKind;
- pPixmap = LAYER_SCREEN_PIXMAP;
- update = 0;
- window = 0;
- }
-
- return LayerCreate (pScreen, kind, screen->fb[0].depth,
- pPixmap, update, window, scrpriv->randr, 0);
+ update = shadowUpdatePacked;
+ return KdShadowSet (pScreen, scrpriv->randr, update, window);
}
@@ -458,29 +346,6 @@ fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
return TRUE;
}
-int
-fbdevLayerAdd (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- if (!LayerWindowAdd (pScreen, pLayer, pWin))
- return WT_STOPWALKING;
-
- return WT_WALKCHILDREN;
-}
-
-int
-fbdevLayerRemove (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- LayerWindowRemove (pScreen, pLayer, pWin);
-
- return WT_WALKCHILDREN;
-}
-
Bool
fbdevRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
@@ -496,7 +361,6 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
int oldheight;
int oldmmwidth;
int oldmmheight;
- LayerPtr pNewLayer;
int newwidth, newheight;
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
@@ -526,34 +390,46 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
scrpriv->randr = KdAddRotation (screen->randr, randr);
- fbdevConfigureScreen (pScreen);
+ KdOffscreenSwapOut (screen->pScreen);
- pNewLayer = fbdevLayerCreate (pScreen);
- if (!pNewLayer)
+ fbdevUnmapFramebuffer (screen);
+
+ if (!fbdevMapFramebuffer (screen))
goto bail4;
- if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
- goto bail5;
- WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer);
- LayerDestroy (pScreen, scrpriv->pLayer);
+ if (!fbdevSetShadow (screen->pScreen))
+ goto bail4;
- scrpriv->pLayer = pNewLayer;
+ fbdevSetScreenSizes (screen->pScreen);
+ /*
+ * Set frame buffer mapping
+ */
+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
+ pScreen->width,
+ pScreen->height,
+ screen->fb[0].depth,
+ screen->fb[0].bitsPerPixel,
+ screen->fb[0].byteStride,
+ screen->fb[0].frameBuffer);
+
+ /* set the subpixel order */
+
KdSetSubpixelOrder (pScreen, scrpriv->randr);
if (wasEnabled)
KdEnableScreen (pScreen);
return TRUE;
-bail5:
- WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
- LayerDestroy (pScreen, pNewLayer);
bail4:
+ fbdevUnmapFramebuffer (screen);
+ *scrpriv = oldscr;
+ (void) fbdevMapFramebuffer (screen);
pScreen->width = oldwidth;
pScreen->height = oldheight;
pScreen->mmWidth = oldmmwidth;
pScreen->mmHeight = oldmmheight;
- *scrpriv = oldscr;
+
if (wasEnabled)
KdEnableScreen (pScreen);
return FALSE;
@@ -616,27 +492,15 @@ fbdevInitScreen (ScreenPtr pScreen)
#endif
pScreen->CreateColormap = fbdevCreateColormap;
-
- if (!LayerStartInit (pScreen))
- return FALSE;
return TRUE;
}
Bool
fbdevFinishInitScreen (ScreenPtr pScreen)
{
- KdScreenPriv(pScreen);
- FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
-
- scrpriv->layerKind = LayerNewKind (pScreen);
-
- if (!LayerFinishInit (pScreen))
+ if (!shadowSetup (pScreen))
return FALSE;
- scrpriv->pLayer = fbdevLayerCreate (pScreen);
- if (!scrpriv->pLayer)
- return FALSE;
-
#ifdef RANDR
if (!fbdevRandRInit (pScreen))
return FALSE;
@@ -645,6 +509,13 @@ fbdevFinishInitScreen (ScreenPtr pScreen)
return TRUE;
}
+
+Bool
+fbdevCreateResources (ScreenPtr pScreen)
+{
+ return fbdevSetShadow (pScreen);
+}
+
void
fbdevPreserve (KdCardInfo *card)
{
diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h
index 4b14bc2e8..d37b99597 100644
--- a/hw/kdrive/fbdev/fbdev.h
+++ b/hw/kdrive/fbdev/fbdev.h
@@ -30,7 +30,6 @@
#include <unistd.h>
#include <sys/mman.h>
#include "kdrive.h"
-#include "layer.h"
#ifdef RANDR
#include "randrstr.h"
@@ -50,8 +49,7 @@ typedef struct _fbdevPriv {
typedef struct _fbdevScrPriv {
Rotation randr;
Bool shadow;
- int layerKind;
- LayerPtr pLayer;
+ PixmapPtr pShadow;
} FbdevScrPriv;
extern KdCardFuncs fbdevFuncs;
@@ -71,6 +69,12 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv);
Bool
fbdevInitScreen (ScreenPtr pScreen);
+Bool
+fbdevFinishInitScreen (ScreenPtr pScreen);
+
+Bool
+fbdevCreateResources (ScreenPtr pScreen);
+
void
fbdevPreserve (KdCardInfo *card);
@@ -99,6 +103,40 @@ void
fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
Bool
-fbdevFinishInitScreen (ScreenPtr pScreen);
+fbdevMapFramebuffer (KdScreenInfo *screen);
+
+void *
+fbdevWindowLinear (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure);
+
+void
+fbdevSetScreenSizes (ScreenPtr pScreen);
+
+Bool
+fbdevUnmapFramebuffer (KdScreenInfo *screen);
+
+Bool
+fbdevSetShadow (ScreenPtr pScreen);
+
+Bool
+fbdevCreateColormap (ColormapPtr pmap);
+
+#ifdef RANDR
+Bool
+fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations);
+
+Bool
+fbdevRandRSetConfig (ScreenPtr pScreen,
+ Rotation randr,
+ int rate,
+ RRScreenSizePtr pSize);
+Bool
+fbdevRandRInit (ScreenPtr pScreen);
+
+#endif
#endif /* _FBDEV_H_ */
diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c
index bc44b23fe..533aa9bf8 100644
--- a/hw/kdrive/fbdev/fbinit.c
+++ b/hw/kdrive/fbdev/fbinit.c
@@ -63,6 +63,8 @@ KdCardFuncs fbdevFuncs = {
fbdevCardInit, /* cardinit */
fbdevScreenInit, /* scrinit */
fbdevInitScreen, /* initScreen */
+ fbdevFinishInitScreen, /* finishInitScreen */
+ fbdevCreateResources, /* createRes */
fbdevPreserve, /* preserve */
fbdevEnable, /* enable */
fbdevDPMS, /* dpms */
@@ -85,6 +87,4 @@ KdCardFuncs fbdevFuncs = {
fbdevGetColors, /* getColors */
fbdevPutColors, /* putColors */
-
- fbdevFinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/linux/Makefile.am b/hw/kdrive/linux/Makefile.am
index 081767cc7..2a52d3a75 100644
--- a/hw/kdrive/linux/Makefile.am
+++ b/hw/kdrive/linux/Makefile.am
@@ -1,16 +1,18 @@
INCLUDES = \
- -I$(top_srcdir)/hw/kdrive/src \
- -I$(top_srcdir)/mi \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/miext/layer \
- -I$(top_srcdir)/miext/shadow \
- -I$(top_srcdir)/randr \
- -I$(top_srcdir)/render \
- $(XSERVER_CFLAGS)
+ @KDRIVE_INCS@ \
+ @XSERVER_CFLAGS@
noinst_LIBRARIES = liblinux.a
+if TSLIB
+TSLIB_C = tslib.c
+endif
+
+if H3600_TS
+TS_C = ts.c
+endif
+
liblinux_a_SOURCES = \
agp.c \
bus.c \
@@ -18,12 +20,18 @@ liblinux_a_SOURCES = \
linux.c \
mouse.c \
ms.c \
- ps2.c
+ ps2.c \
+ $(TSLIB_C) \
+ $(TS_C)
-if TSLIB
-liblinux_a_SOURCES += tslib.c
-endif
+liblinux_a_DEPENDENCIES = \
+ agp.c \
+ bus.c \
+ keyboard.c \
+ linux.c \
+ mouse.c \
+ ms.c \
+ ps2.c \
+ $(TSLIB_C) \
+ $(TS_C)
-if H3600_TS
-liblinux_a_SOURCES += ts.c
-endif
diff --git a/hw/kdrive/linux/agp.c b/hw/kdrive/linux/agp.c
index 6f4482c03..d401e03a1 100644
--- a/hw/kdrive/linux/agp.c
+++ b/hw/kdrive/linux/agp.c
@@ -87,7 +87,7 @@ static int acquiredScreen = -1;
*/
static Bool
-GARTInit()
+GARTInit(void)
{
static Bool initDone = FALSE;
struct _agp_info agpinf;
diff --git a/hw/kdrive/linux/bus.c b/hw/kdrive/linux/bus.c
index 5451b0aa4..15d2ba846 100644
--- a/hw/kdrive/linux/bus.c
+++ b/hw/kdrive/linux/bus.c
@@ -35,7 +35,7 @@
/* /dev/adbmouse is a busmouse */
-void
+static void
BusRead (int adbPort, void *closure)
{
unsigned char buf[3];
@@ -68,7 +68,7 @@ char *BusNames[] = {
int BusInputType;
-int
+static int
BusInit (void)
{
int i;
@@ -89,7 +89,7 @@ BusInit (void)
return n;
}
-void
+static void
BusFini (void)
{
KdUnregisterFds (BusInputType, TRUE);
diff --git a/hw/kdrive/linux/keyboard.c b/hw/kdrive/linux/keyboard.c
index f2998766e..dba87a00d 100644
--- a/hw/kdrive/linux/keyboard.c
+++ b/hw/kdrive/linux/keyboard.c
@@ -112,7 +112,7 @@ static unsigned char tbl[KD_MAX_WIDTH] =
};
static void
-readKernelMapping()
+readKernelMapping(void)
{
KeySym *k;
int i, j;
@@ -373,13 +373,13 @@ readKernelMapping()
kdMaxScanCode = maxKeyCode;
}
-void
+static void
LinuxKeyboardLoad (void)
{
readKernelMapping ();
}
-void
+static void
LinuxKeyboardRead (int fd, void *closure)
{
unsigned char buf[256], *b;
@@ -400,7 +400,7 @@ static int LinuxKbdTrans;
static struct termios LinuxTermios;
static int LinuxKbdType;
-int
+static int
LinuxKeyboardEnable (int fd, void *closure)
{
struct termios nTty;
@@ -429,14 +429,14 @@ LinuxKeyboardEnable (int fd, void *closure)
return fd;
}
-void
+static void
LinuxKeyboardDisable (int fd, void *closure)
{
ioctl(LinuxConsoleFd, KDSKBMODE, LinuxKbdTrans);
tcsetattr(LinuxConsoleFd, TCSANOW, &LinuxTermios);
}
-int
+static int
LinuxKeyboardInit (void)
{
if (!LinuxKbdType)
@@ -450,20 +450,20 @@ LinuxKeyboardInit (void)
return 1;
}
-void
+static void
LinuxKeyboardFini (void)
{
LinuxKeyboardDisable (LinuxConsoleFd, 0);
KdUnregisterFds (LinuxKbdType, FALSE);
}
-void
+static void
LinuxKeyboardLeds (int leds)
{
ioctl (LinuxConsoleFd, KDSETLED, leds & 7);
}
-void
+static void
LinuxKeyboardBell (int volume, int pitch, int duration)
{
if (volume && pitch)
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
index 76ce58349..2badebebe 100644
--- a/hw/kdrive/linux/linux.c
+++ b/hw/kdrive/linux/linux.c
@@ -65,7 +65,7 @@ LinuxCheckChown (char *file)
}
static int
-LinuxInit ()
+LinuxInit (void)
{
int fd = -1;
char vtname[11];
diff --git a/hw/kdrive/linux/mouse.c b/hw/kdrive/linux/mouse.c
index 2158a587d..689c7e9e7 100644
--- a/hw/kdrive/linux/mouse.c
+++ b/hw/kdrive/linux/mouse.c
@@ -46,7 +46,7 @@ typedef struct _kbufio {
int used;
} Kbufio;
-Bool
+static Bool
MouseWaitForReadable (int fd, int timeout)
{
fd_set set;
@@ -69,7 +69,7 @@ MouseWaitForReadable (int fd, int timeout)
return FALSE;
}
-int
+static int
MouseReadByte (Kbufio *b, int timeout)
{
int n;
@@ -89,7 +89,8 @@ MouseReadByte (Kbufio *b, int timeout)
return b->buf[b->used++];
}
-int
+#if NOTUSED
+static int
MouseFlush (Kbufio *b, char *buf, int size)
{
CARD32 now = GetTimeInMillis ();
@@ -115,7 +116,7 @@ MouseFlush (Kbufio *b, char *buf, int size)
return n;
}
-int
+static int
MousePeekByte (Kbufio *b, int timeout)
{
int c;
@@ -125,8 +126,9 @@ MousePeekByte (Kbufio *b, int timeout)
--b->used;
return c;
}
+#endif /* NOTUSED */
-Bool
+static Bool
MouseWaitForWritable (int fd, int timeout)
{
fd_set set;
@@ -149,7 +151,7 @@ MouseWaitForWritable (int fd, int timeout)
return FALSE;
}
-Bool
+static Bool
MouseWriteByte (int fd, unsigned char c, int timeout)
{
int ret;
@@ -171,7 +173,7 @@ MouseWriteByte (int fd, unsigned char c, int timeout)
}
}
-Bool
+static Bool
MouseWriteBytes (int fd, unsigned char *c, int n, int timeout)
{
while (n--)
@@ -708,7 +710,7 @@ static const KmouseProt *kmouseProts[] = {
#define NUM_PROT (sizeof (kmouseProts) / sizeof (kmouseProts[0]))
-void
+static void
MouseInitProtocol (Kmouse *km)
{
int ret;
@@ -736,7 +738,7 @@ MouseInitProtocol (Kmouse *km)
km->state = km->prot->state;
}
-void
+static void
MouseFirstProtocol (Kmouse *km, char *prot)
{
if (prot)
@@ -772,7 +774,7 @@ MouseFirstProtocol (Kmouse *km, char *prot)
MouseInitProtocol (km);
}
-void
+static void
MouseNextProtocol (Kmouse *km)
{
do
@@ -787,7 +789,7 @@ MouseNextProtocol (Kmouse *km)
ErrorF ("Switching to mouse protocol \"%s\"\n", km->prot->name);
}
-void
+static void
MouseRead (int mousePort, void *closure)
{
KdMouseInfo *mi = closure;
@@ -911,7 +913,7 @@ char *kdefaultMouse[] = {
#define NUM_DEFAULT_MOUSE (sizeof (kdefaultMouse) / sizeof (kdefaultMouse[0]))
-Bool
+static Bool
MouseInit (void)
{
int i;
@@ -968,7 +970,7 @@ MouseInit (void)
return TRUE;
}
-void
+static void
MouseFini (void)
{
KdMouseInfo *mi;
diff --git a/hw/kdrive/linux/ms.c b/hw/kdrive/linux/ms.c
index 20c3dc680..b29f6527b 100644
--- a/hw/kdrive/linux/ms.c
+++ b/hw/kdrive/linux/ms.c
@@ -35,7 +35,7 @@ THE SOFTWARE.
#include "scrnintstr.h"
#include "kdrive.h"
-int
+static int
MsReadBytes (int fd, char *buf, int len, int min)
{
int n, tot;
@@ -65,7 +65,7 @@ MsReadBytes (int fd, char *buf, int len, int min)
return tot;
}
-void
+static void
MsRead (int port, void *closure)
{
unsigned char buf[3 * 200];
@@ -97,7 +97,7 @@ MsRead (int port, void *closure)
int MsInputType;
-int
+static int
MsInit (void)
{
int port;
@@ -151,7 +151,7 @@ MsInit (void)
return 0;
}
-void
+static void
MsFini (void)
{
KdUnregisterFds (MsInputType, TRUE);
diff --git a/hw/kdrive/linux/ps2.c b/hw/kdrive/linux/ps2.c
index 3a3444366..da3372011 100644
--- a/hw/kdrive/linux/ps2.c
+++ b/hw/kdrive/linux/ps2.c
@@ -33,7 +33,7 @@
#include "scrnintstr.h"
#include "kdrive.h"
-int
+static int
Ps2ReadBytes (int fd, char *buf, int len, int min)
{
int n, tot;
@@ -71,7 +71,7 @@ char *Ps2Names[] = {
#define NUM_PS2_NAMES (sizeof (Ps2Names) / sizeof (Ps2Names[0]))
-void
+static void
Ps2Read (int ps2Port, void *closure)
{
unsigned char buf[3 * 200];
@@ -119,7 +119,7 @@ Ps2Read (int ps2Port, void *closure)
int Ps2InputType;
-int
+static int
Ps2Init (void)
{
int i;
@@ -141,7 +141,7 @@ Ps2Init (void)
return n;
}
-void
+static void
Ps2Fini (void)
{
KdUnregisterFds (Ps2InputType, TRUE);
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);
+ }
+}
diff --git a/hw/kdrive/mga/Makefile.am b/hw/kdrive/mga/Makefile.am
index bcc7607ab..157421249 100644
--- a/hw/kdrive/mga/Makefile.am
+++ b/hw/kdrive/mga/Makefile.am
@@ -1,15 +1,7 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
+ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
- -I$(top_srcdir)/hw/kdrive/linux \
- -I$(top_srcdir)/include \
- -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 = Xmga
@@ -24,23 +16,7 @@ Xmga_SOURCES = \
mgastub.c
Xmga_LDADD = \
- libmga.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
+ libmga.a \
+ $(top_builddir)/hw/kdrive/vesa/libvesa.a \
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
diff --git a/hw/kdrive/mga/mga.c b/hw/kdrive/mga/mga.c
index 2c3a4831d..556b9b18f 100644
--- a/hw/kdrive/mga/mga.c
+++ b/hw/kdrive/mga/mga.c
@@ -27,7 +27,7 @@
#endif
#include "mga.h"
-Bool
+static Bool
mgaCardInit (KdCardInfo *card)
{
MgaCardInfo *mgac;
@@ -51,11 +51,10 @@ mgaCardInit (KdCardInfo *card)
return TRUE;
}
-Bool
+static Bool
mgaScreenInit (KdScreenInfo *screen)
{
MgaScreenInfo *mgas;
- int screen_size, memory;
mgas = (MgaScreenInfo *) xalloc (sizeof (MgaScreenInfo));
if (!mgas)
@@ -75,33 +74,17 @@ mgaScreenInit (KdScreenInfo *screen)
fprintf (stderr, "vesa mapping is %d\n", mgas->vesa.mapping);
#endif
- screen->memory_base = mgas->vesa.fb;
-
- memory = mgas->vesa.fb_size;
- screen_size = screen->fb[0].byteStride * screen->height;
-
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- screen->off_screen_base = screen_size;
- screen->off_screen_size = memory;
- }
- else
- {
- screen->off_screen_base = 0;
- screen->off_screen_size = 0;
- }
screen->driver = mgas;
return TRUE;
}
-Bool
+static Bool
mgaInitScreen (ScreenPtr pScreen)
{
return vesaInitScreen (pScreen);
}
-Bool
+static Bool
mgaFinishInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -111,7 +94,13 @@ mgaFinishInitScreen (ScreenPtr pScreen)
return ret;
}
-void
+static Bool
+mgaCreateResources (ScreenPtr pScreen)
+{
+ return vesaCreateResources (pScreen);
+}
+
+static void
mgaPreserve (KdCardInfo *card)
{
vesaPreserve (card);
@@ -162,14 +151,14 @@ mgaResetMMIO (KdCardInfo *card, MgaCardInfo *mgac)
mgaUnmapReg (card, mgac);
}
-Bool
+static Bool
mgaDPMS (ScreenPtr pScreen, int mode)
{
/* XXX */
return TRUE;
}
-Bool
+static Bool
mgaEnable (ScreenPtr pScreen)
{
KdScreenPriv (pScreen);
@@ -184,7 +173,7 @@ mgaEnable (ScreenPtr pScreen)
return TRUE;
}
-void
+static void
mgaDisable (ScreenPtr pScreen)
{
KdScreenPriv (pScreen);
@@ -195,7 +184,7 @@ mgaDisable (ScreenPtr pScreen)
vesaDisable (pScreen);
}
-void
+static void
mgaRestore (KdCardInfo *card)
{
MgaCardInfo *mgac = card->driver;
@@ -204,7 +193,7 @@ mgaRestore (KdCardInfo *card)
vesaRestore (card);
}
-void
+static void
mgaScreenFini (KdScreenInfo *screen)
{
MgaScreenInfo *mgas = (MgaScreenInfo *) screen->driver;
@@ -214,7 +203,7 @@ mgaScreenFini (KdScreenInfo *screen)
screen->driver = 0;
}
-void
+static void
mgaCardFini (KdCardInfo *card)
{
MgaCardInfo *mgac = (MgaCardInfo *)card->driver;
@@ -227,6 +216,8 @@ KdCardFuncs mgaFuncs = {
mgaCardInit, /* cardinit */
mgaScreenInit, /* scrinit */
mgaInitScreen, /* initScreen */
+ mgaFinishInitScreen, /* finishInitScreen */
+ mgaCreateResources, /* createRes */
mgaPreserve, /* preserve */
mgaEnable, /* enable */
mgaDPMS, /* dpms */
@@ -249,7 +240,5 @@ KdCardFuncs mgaFuncs = {
vesaGetColors, /* getColors */
vesaPutColors, /* putColors */
-
- mgaFinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/mga/mgadraw.c b/hw/kdrive/mga/mgadraw.c
index b41c5c16a..04cd44fc9 100644
--- a/hw/kdrive/mga/mgadraw.c
+++ b/hw/kdrive/mga/mgadraw.c
@@ -51,7 +51,7 @@ int fifo_size;
int pitch, src_pitch;
int dir;
-void
+static void
mgaWaitAvail (int n)
{
if (fifo_size < n) {
@@ -62,7 +62,7 @@ mgaWaitAvail (int n)
fifo_size -= n;
}
-void
+static void
mgaWaitIdle (void)
{
while (MGA_IN32 (mmio, MGA_REG_STATUS) & 0x10000);
@@ -91,11 +91,10 @@ mgaSetup (ScreenPtr pScreen, int wait)
return TRUE;
}
-Bool
+static Bool
mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
{
KdScreenPriv(pPixmap->drawable.pScreen);
- mgaScreenInfo (pScreenPriv);
int cmd;
int dst_org;
@@ -115,7 +114,7 @@ mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
return TRUE;
}
-void
+static void
mgaSolid (int x1, int y1, int x2, int y2)
{
mgaWaitAvail (2);
@@ -124,7 +123,7 @@ mgaSolid (int x1, int y1, int x2, int y2)
MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (y1 << 16) | (y2 - y1));
}
-void
+static void
mgaDoneSolid (void)
{
}
@@ -132,12 +131,11 @@ mgaDoneSolid (void)
#define BLIT_LEFT 1
#define BLIT_UP 4
-Bool
+static Bool
mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
int dx, int dy, int alu, Pixel pm)
{
KdScreenPriv(pSrcPixmap->drawable.pScreen);
- mgaScreenInfo (pScreenPriv);
int cmd;
@@ -165,7 +163,7 @@ mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
return TRUE;
}
-void
+static void
mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
{
int start, end;
@@ -191,7 +189,7 @@ mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (dstY << 16) | h);
}
-void
+static void
mgaDoneCopy (void)
{
}
diff --git a/hw/kdrive/nvidia/Makefile.am b/hw/kdrive/nvidia/Makefile.am
index 324595e8c..41ad93691 100644
--- a/hw/kdrive/nvidia/Makefile.am
+++ b/hw/kdrive/nvidia/Makefile.am
@@ -1,13 +1,7 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
+ @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 = Xnvidia
@@ -29,21 +23,5 @@ Xnvidia_SOURCES = \
Xnvidia_LDADD = \
libnvidia.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
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
diff --git a/hw/kdrive/nvidia/nvidia.c b/hw/kdrive/nvidia/nvidia.c
index c74daf7a0..fa53476b1 100644
--- a/hw/kdrive/nvidia/nvidia.c
+++ b/hw/kdrive/nvidia/nvidia.c
@@ -28,7 +28,7 @@
#include "nvidia.h"
#include <sys/io.h>
-Bool
+static Bool
nvidiaCardInit (KdCardInfo *card)
{
NvidiaCardInfo *nvidiac;
@@ -50,7 +50,7 @@ nvidiaCardInit (KdCardInfo *card)
return TRUE;
}
-Bool
+static Bool
nvidiaScreenInit (KdScreenInfo *screen)
{
NvidiaCardInfo *nvidiac = screen->card->driver;
@@ -96,7 +96,7 @@ nvidiaScreenInit (KdScreenInfo *screen)
return TRUE;
}
-Bool
+static Bool
nvidiaInitScreen (ScreenPtr pScreen)
{
#if 0
@@ -111,13 +111,12 @@ nvidiaInitScreen (ScreenPtr pScreen)
}
#ifdef RANDR
+static Bool
nvidiaRandRSetConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr pSize)
{
- KdScreenPriv(pScreen);
-
KdCheckSync (pScreen);
if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
@@ -126,7 +125,7 @@ nvidiaRandRSetConfig (ScreenPtr pScreen,
return TRUE;
}
-void
+static void
nvidiaRandRInit (ScreenPtr pScreen)
{
rrScrPriv(pScreen);
@@ -135,7 +134,7 @@ nvidiaRandRInit (ScreenPtr pScreen)
}
#endif
-Bool
+static Bool
nvidiaFinishInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -149,8 +148,6 @@ nvidiaFinishInitScreen (ScreenPtr pScreen)
void
nvidiaPreserve (KdCardInfo *card)
{
- NvidiaCardInfo *nvidiac = card->driver;
-
vesaPreserve(card);
}
@@ -198,7 +195,7 @@ static void vgaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
LEAVE ();
}
-void nvidiaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
+static void nvidiaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
{
if (NVIDIA_IS_3(nvidiac))
nvidiaSetIndex (nvidiac, 0x3c4, 0x3c5, 0x06, lock ? 0x99 : 0x57);
@@ -276,7 +273,6 @@ nvidiaEnable (ScreenPtr pScreen)
return FALSE;
nvidiaSetMMIO (pScreenPriv->card, nvidiac);
- nvidiaDPMS (pScreen, KD_DPMS_NORMAL);
#ifdef XV
KdXVEnable (pScreen);
#endif
@@ -296,13 +292,13 @@ nvidiaDisable (ScreenPtr pScreen)
vesaDisable (pScreen);
}
-Bool
+static Bool
nvidiaDPMS (ScreenPtr pScreen, int mode)
{
return vesaDPMS (pScreen, mode);
}
-void
+static void
nvidiaRestore (KdCardInfo *card)
{
NvidiaCardInfo *nvidiac = card->driver;
@@ -311,7 +307,7 @@ nvidiaRestore (KdCardInfo *card)
vesaRestore (card);
}
-void
+static void
nvidiaScreenFini (KdScreenInfo *screen)
{
NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
@@ -321,7 +317,7 @@ nvidiaScreenFini (KdScreenInfo *screen)
screen->driver = 0;
}
-void
+static void
nvidiaCardFini (KdCardInfo *card)
{
NvidiaCardInfo *nvidiac = card->driver;
@@ -340,6 +336,8 @@ KdCardFuncs nvidiaFuncs = {
nvidiaCardInit, /* cardinit */
nvidiaScreenInit, /* scrinit */
nvidiaInitScreen, /* initScreen */
+ nvidiaFinishInitScreen, /* finishInitScreen */
+ vesaCreateResources, /* createRes */
nvidiaPreserve, /* preserve */
nvidiaEnable, /* enable */
nvidiaDPMS, /* dpms */
@@ -362,6 +360,4 @@ KdCardFuncs nvidiaFuncs = {
vesaGetColors, /* getColors */
vesaPutColors, /* putColors */
-
- nvidiaFinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/nvidia/nvidia.h b/hw/kdrive/nvidia/nvidia.h
index b1ba3b3ad..083ffc0ea 100644
--- a/hw/kdrive/nvidia/nvidia.h
+++ b/hw/kdrive/nvidia/nvidia.h
@@ -26,6 +26,7 @@
#define _NVIDIA_H_
#include <vesa.h>
#include "kxv.h"
+#include "klinux.h"
/*
* offset from ioport beginning
diff --git a/hw/kdrive/nvidia/nvidiadraw.c b/hw/kdrive/nvidia/nvidiadraw.c
index 840b0752c..b49ed7805 100644
--- a/hw/kdrive/nvidia/nvidiadraw.c
+++ b/hw/kdrive/nvidia/nvidiadraw.c
@@ -81,19 +81,18 @@ nvidiaWaitIdle (NvidiaCardInfo *card)
}
}
-Bool
-nvidiaPrepareSolid (DrawablePtr pDrawable,
- int alu,
- Pixel pm,
- Pixel fg)
+static Bool
+nvidiaPrepareSolid (PixmapPtr pPixmap,
+ int alu,
+ Pixel pm,
+ Pixel fg)
{
- ScreenPtr pScreen = pDrawable->pScreen;
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
KdScreenPriv(pScreen);
- nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv);
card = nvidiac;
- if (~pm & FbFullMask(pDrawable->depth))
+ if (~pm & FbFullMask(pPixmap->drawable.depth))
return FALSE;
nvidiaWait (nvidiac, &nvidiac->rop->FifoFree, 1);
nvidiac->rop->Rop3 = nvidiaRop[alu];
@@ -102,7 +101,7 @@ nvidiaPrepareSolid (DrawablePtr pDrawable,
return TRUE;
}
-void
+static void
nvidiaSolid (int x1, int y1, int x2, int y2)
{
nvidiaWait (card, &card->rect->FifoFree, 2);
@@ -110,34 +109,33 @@ nvidiaSolid (int x1, int y1, int x2, int y2)
card->rect->WidthHeight = NVIDIA_XY(x2-x1,y2-y1);
}
-void
+static void
nvidiaDoneSolid (void)
{
}
-Bool
-nvidiaPrepareCopy (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
+static Bool
+nvidiaPrepareCopy (PixmapPtr pSrcPixmap,
+ PixmapPtr pDstPixmap,
int dx,
int dy,
int alu,
Pixel pm)
{
- ScreenPtr pScreen = pDstDrawable->pScreen;
+ ScreenPtr pScreen = pDstPixmap->drawable.pScreen;
KdScreenPriv(pScreen);
- nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv);
card = nvidiac;
- if (~pm & FbFullMask(pDstDrawable->depth))
+ if (~pm & FbFullMask(pDstPixmap->drawable.depth))
return FALSE;
nvidiaWait (nvidiac, &card->rop->FifoFree, 1);
nvidiac->rop->Rop3 = nvidiaRop[alu];
return TRUE;
}
-void
+static void
nvidiaCopy (int srcX,
int srcY,
int dstX,
@@ -151,7 +149,7 @@ nvidiaCopy (int srcX,
card->blt->WidthHeight = NVIDIA_XY(w, h);
}
-void
+static void
nvidiaDoneCopy (void)
{
}
@@ -170,9 +168,8 @@ Bool
nvidiaDrawInit (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
- nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv);
- Bool ret;
+ Bool ret = TRUE;
ENTER ();
if (pScreenPriv->screen->fb[0].depth == 4)
@@ -213,7 +210,6 @@ void
nvidiaDrawEnable (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
- nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv);
ENTER ();
diff --git a/hw/kdrive/r128/Makefile.am b/hw/kdrive/r128/Makefile.am
index 86d3070d3..1a5718c5f 100644
--- a/hw/kdrive/r128/Makefile.am
+++ b/hw/kdrive/r128/Makefile.am
@@ -1,14 +1,7 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
+ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
- -I$(top_srcdir)/include \
- -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 = Xr128
@@ -25,21 +18,5 @@ Xr128_SOURCES = \
Xr128_LDADD = \
libr128.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
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
diff --git a/hw/kdrive/r128/r128.c b/hw/kdrive/r128/r128.c
index 10974cc7f..2be8b26d2 100644
--- a/hw/kdrive/r128/r128.c
+++ b/hw/kdrive/r128/r128.c
@@ -27,7 +27,7 @@
#endif
#include "r128.h"
-Bool
+static Bool
r128CardInit (KdCardInfo *card)
{
R128CardInfo *r128c;
@@ -51,10 +51,9 @@ r128CardInit (KdCardInfo *card)
return TRUE;
}
-Bool
+static Bool
r128ScreenInit (KdScreenInfo *screen)
{
- R128CardInfo *r128c = screen->card->driver;
R128ScreenInfo *r128s;
int screen_size, memory;
@@ -96,13 +95,13 @@ r128ScreenInit (KdScreenInfo *screen)
return TRUE;
}
-Bool
+static Bool
r128InitScreen (ScreenPtr pScreen)
{
return vesaInitScreen (pScreen);
}
-Bool
+static Bool
r128FinishInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -112,11 +111,9 @@ r128FinishInitScreen (ScreenPtr pScreen)
return ret;
}
-void
+static void
r128Preserve (KdCardInfo *card)
{
- R128CardInfo *r128c = card->driver;
-
vesaPreserve (card);
}
@@ -164,7 +161,15 @@ r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c)
r128UnmapReg (card, r128c);
}
-Bool
+
+static Bool
+r128DPMS (ScreenPtr pScreen, int mode)
+{
+ /* XXX */
+ return TRUE;
+}
+
+static Bool
r128Enable (ScreenPtr pScreen)
{
KdScreenPriv (pScreen);
@@ -179,7 +184,7 @@ r128Enable (ScreenPtr pScreen)
return TRUE;
}
-void
+static void
r128Disable (ScreenPtr pScreen)
{
KdScreenPriv (pScreen);
@@ -189,14 +194,7 @@ r128Disable (ScreenPtr pScreen)
vesaDisable (pScreen);
}
-Bool
-r128DPMS (ScreenPtr pScreen, int mode)
-{
- /* XXX */
- return TRUE;
-}
-
-void
+static void
r128Restore (KdCardInfo *card)
{
R128CardInfo *r128c = card->driver;
@@ -205,7 +203,7 @@ r128Restore (KdCardInfo *card)
vesaRestore (card);
}
-void
+static void
r128ScreenFini (KdScreenInfo *screen)
{
R128ScreenInfo *r128s = (R128ScreenInfo *) screen->driver;
@@ -215,7 +213,7 @@ r128ScreenFini (KdScreenInfo *screen)
screen->driver = 0;
}
-void
+static void
r128CardFini (KdCardInfo *card)
{
R128CardInfo *r128c = (R128CardInfo *)card->driver;
@@ -228,6 +226,8 @@ KdCardFuncs r128Funcs = {
r128CardInit, /* cardinit */
r128ScreenInit, /* scrinit */
r128InitScreen, /* initScreen */
+ r128FinishInitScreen, /* finishInitScreen */
+ vesaCreateResources,/* createRes */
r128Preserve, /* preserve */
r128Enable, /* enable */
r128DPMS, /* dpms */
@@ -250,7 +250,5 @@ KdCardFuncs r128Funcs = {
vesaGetColors, /* getColors */
vesaPutColors, /* putColors */
-
- r128FinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/r128/r128.h b/hw/kdrive/r128/r128.h
index 06b3d0286..8cf2bd4e2 100644
--- a/hw/kdrive/r128/r128.h
+++ b/hw/kdrive/r128/r128.h
@@ -45,6 +45,10 @@
#define R128_REG_PC_NGUI_CTLSTAT 0x0184
#define R128_REG_DST_HEIGHT_WIDTH 0x143c
#define R128_REG_SRC_Y_X 0x1434
+#define R128_DEFAULT_SC_BOTTOM_RIGHT 0x16e8
+#define R128_AUX_SC_CNTL 0x1660
+#define R128_SC_TOP_LEFT 0x16ec
+#define R128_SC_BOTTOM_RIGHT 0x16f0
#define R128_GMC_DST_DATATYPE_SHIFT 8
#define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28)
@@ -57,6 +61,8 @@
#define R128_GUI_ACTIVE (1 << 31)
#define R128_PC_BUSY (1 << 31)
#define R128_DP_SRC_SOURCE_MEMORY (2 << 24)
+#define R128_DEFAULT_SC_RIGHT_MAX (0x1fff << 0)
+#define R128_DEFAULT_SC_BOTTOM_MAX (0x1fff << 16)
typedef volatile CARD8 VOL8;
typedef volatile CARD16 VOL16;
diff --git a/hw/kdrive/r128/r128draw.c b/hw/kdrive/r128/r128draw.c
index 7a8de7479..be4dc79ae 100644
--- a/hw/kdrive/r128/r128draw.c
+++ b/hw/kdrive/r128/r128draw.c
@@ -69,11 +69,9 @@ int copydx, copydy;
int fifo_size;
char *mmio;
-void
+static void
r128WaitAvail (int n)
{
- int i;
-
if (fifo_size < n)
{
while ((fifo_size = R128_IN32 (mmio, R128_REG_GUI_STAT) & 0xfff) < n)
@@ -83,7 +81,7 @@ r128WaitAvail (int n)
fifo_size -= n;
}
-void
+static void
r128WaitIdle (void)
{
int tries;
@@ -127,15 +125,24 @@ r128Setup (ScreenPtr pScreen, int wait)
R128_OUT32 (mmio, R128_REG_DEFAULT_OFFSET, 0);
R128_OUT32 (mmio, R128_REG_DEFAULT_PITCH, r128s->pitch);
+ r128WaitAvail (4);
+ R128_OUT32 (mmio, R128_AUX_SC_CNTL, 0);
+ R128_OUT32 (mmio, R128_DEFAULT_SC_BOTTOM_RIGHT, (R128_DEFAULT_SC_RIGHT_MAX
+ | R128_DEFAULT_SC_BOTTOM_MAX));
+ R128_OUT32 (mmio, R128_SC_TOP_LEFT, 0);
+ R128_OUT32 (mmio, R128_SC_BOTTOM_RIGHT, (R128_DEFAULT_SC_RIGHT_MAX
+ | R128_DEFAULT_SC_BOTTOM_MAX));
+ r128WaitAvail (wait);
+ return TRUE;
}
-Bool
-r128PrepareSolid (DrawablePtr pDrawable, int alu, Pixel pm, Pixel fg)
+static Bool
+r128PrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
{
- KdScreenPriv (pDrawable->pScreen);
+ KdScreenPriv (pPixmap->drawable.pScreen);
r128ScreenInfo (pScreenPriv);
- r128Setup (pDrawable->pScreen, 4);
+ r128Setup (pPixmap->drawable.pScreen, 4);
R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
| R128_GMC_BRUSH_SOLID_COLOR
| R128_GMC_SRC_DATATYPE_COLOR
@@ -148,7 +155,7 @@ r128PrepareSolid (DrawablePtr pDrawable, int alu, Pixel pm, Pixel fg)
return TRUE;
}
-void
+static void
r128Solid (int x1, int y1, int x2, int y2)
{
r128WaitAvail (2);
@@ -157,21 +164,21 @@ r128Solid (int x1, int y1, int x2, int y2)
}
-void
+static void
r128DoneSolid (void)
{
}
-Bool
-r128PrepareCopy (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, int dx, int dy, int alu, Pixel pm)
+static Bool
+r128PrepareCopy (PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
{
- KdScreenPriv (pSrcDrawable->pScreen);
+ KdScreenPriv (pSrc->drawable.pScreen);
r128ScreenInfo (pScreenPriv);
copydx = dx;
copydy = dy;
- r128Setup (pSrcDrawable->pScreen, 3);
+ r128Setup (pSrc->drawable.pScreen, 3);
R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
| R128_GMC_BRUSH_SOLID_COLOR
| R128_GMC_SRC_DATATYPE_COLOR
@@ -186,7 +193,7 @@ r128PrepareCopy (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, int dx, int
return TRUE;
}
-void
+static void
r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h)
{
if (copydx < 0)
@@ -207,7 +214,7 @@ r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h)
R128_OUT32 (mmio, R128_REG_DST_HEIGHT_WIDTH, (h << 16) | w);
}
-void
+static void
r128DoneCopy (void)
{
}
@@ -225,8 +232,6 @@ KaaScreenInfoRec r128Kaa = {
Bool
r128DrawInit (ScreenPtr pScreen)
{
- KdScreenPriv(pScreen);
-
if (!kaaDrawInit (pScreen, &r128Kaa))
return FALSE;
diff --git a/hw/kdrive/r128/r128stub.c b/hw/kdrive/r128/r128stub.c
index 006d66a6a..30dc32c66 100644
--- a/hw/kdrive/r128/r128stub.c
+++ b/hw/kdrive/r128/r128stub.c
@@ -26,6 +26,7 @@
#include <config.h>
#endif
#include "r128.h"
+#include "klinux.h"
void
InitCard (char *name)
@@ -34,6 +35,8 @@ InitCard (char *name)
if (LinuxFindPci (0x1002, 0x4c46, 0, &attr))
KdCardInfoAdd (&r128Funcs, &attr, 0);
+ else if (LinuxFindPci (0x1002, 0x5046, 0, &attr))
+ KdCardInfoAdd (&r128Funcs, &attr, 0);
}
void
diff --git a/hw/kdrive/smi/Makefile.am b/hw/kdrive/smi/Makefile.am
index d512ecc6b..b6e4bb140 100644
--- a/hw/kdrive/smi/Makefile.am
+++ b/hw/kdrive/smi/Makefile.am
@@ -1,14 +1,8 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/fbdev \
-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)
+ @KDRIVE_INCS@ \
+ @XSERVER_CFLAGS@
bin_PROGRAMS = Xsmi
@@ -27,21 +21,5 @@ Xsmi_LDADD = \
libsmi.a \
$(top_builddir)/hw/kdrive/fbdev/libfbdev.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
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
diff --git a/hw/kdrive/smi/smi.c b/hw/kdrive/smi/smi.c
index fc29b2228..aaa0b8356 100644
--- a/hw/kdrive/smi/smi.c
+++ b/hw/kdrive/smi/smi.c
@@ -27,7 +27,7 @@
#include "smi.h"
#include <sys/io.h>
-Bool
+static Bool
smiCardInit (KdCardInfo *card)
{
SmiCardInfo *smic;
@@ -51,7 +51,7 @@ smiCardInit (KdCardInfo *card)
return TRUE;
}
-Bool
+static Bool
smiScreenInit (KdScreenInfo *screen)
{
SmiCardInfo *smic = screen->card->driver;
@@ -80,7 +80,7 @@ smiScreenInit (KdScreenInfo *screen)
return TRUE;
}
-Bool
+static Bool
smiInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -99,13 +99,13 @@ smiInitScreen (ScreenPtr pScreen)
}
#ifdef RANDR
+static Bool
smiRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
int rate,
RRScreenSizePtr pSize)
{
Bool ret;
- KdScreenPriv(pScreen);
ENTER ();
KdCheckSync (pScreen);
@@ -115,7 +115,7 @@ smiRandRSetConfig (ScreenPtr pScreen,
return ret;
}
-Bool
+static Bool
smiRandRInit (ScreenPtr pScreen)
{
rrScrPriv(pScreen);
@@ -127,7 +127,7 @@ smiRandRInit (ScreenPtr pScreen)
}
#endif
-Bool
+static Bool
smiFinishInitScreen (ScreenPtr pScreen)
{
Bool ret;
@@ -141,8 +141,6 @@ smiFinishInitScreen (ScreenPtr pScreen)
void
smiPreserve (KdCardInfo *card)
{
- SmiCardInfo *smic = card->driver;
-
ENTER ();
subPreserve(card);
LEAVE();
@@ -229,6 +227,16 @@ smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic)
smiUnmapReg (card, smic);
}
+static Bool
+smiDPMS (ScreenPtr pScreen, int mode)
+{
+ Bool ret;
+ ENTER ();
+ ret = subDPMS (pScreen, mode);
+ LEAVE ();
+ return ret;
+}
+
Bool
smiEnable (ScreenPtr pScreen)
{
@@ -268,27 +276,15 @@ smiDisable (ScreenPtr pScreen)
LEAVE ();
}
-Bool
-smiDPMS (ScreenPtr pScreen, int mode)
-{
- Bool ret;
- ENTER ();
- ret = subDPMS (pScreen, mode);
- LEAVE ();
- return ret;
-}
-
-void
+static void
smiRestore (KdCardInfo *card)
{
- SmiCardInfo *smic = card->driver;
-
ENTER ();
subRestore (card);
LEAVE();
}
-void
+static void
smiScreenFini (KdScreenInfo *screen)
{
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
@@ -300,7 +296,7 @@ smiScreenFini (KdScreenInfo *screen)
LEAVE ();
}
-void
+static void
smiCardFini (KdCardInfo *card)
{
SmiCardInfo *smic = card->driver;
@@ -321,6 +317,8 @@ KdCardFuncs smiFuncs = {
smiCardInit, /* cardinit */
smiScreenInit, /* scrinit */
smiInitScreen, /* initScreen */
+ smiFinishInitScreen, /* finishInitScreen */
+ subCreateResources, /* createRes */
smiPreserve, /* preserve */
smiEnable, /* enable */
smiDPMS, /* dpms */
@@ -343,6 +341,4 @@ KdCardFuncs smiFuncs = {
subGetColors, /* getColors */
subPutColors, /* putColors */
-
- smiFinishInitScreen, /* finishInitScreen */
};
diff --git a/hw/kdrive/smi/smi.h b/hw/kdrive/smi/smi.h
index 572312313..abee819bf 100644
--- a/hw/kdrive/smi/smi.h
+++ b/hw/kdrive/smi/smi.h
@@ -35,8 +35,9 @@
#define subInitialize vesaInitialize
#define subScreenInitialize vesaScreenInitialize
#define subInitScreen vesaInitScreen
-#define subRandRSetConfig vesaRandRSetConfig
#define subFinishInitScreen vesaFinishInitScreen
+#define subCreateResources vesaCreateResources
+#define subRandRSetConfig vesaRandRSetConfig
#define subPreserve vesaPreserve
#define subEnable vesaEnable
#define subDPMS vesaDPMS
@@ -54,8 +55,9 @@
#define subInitialize fbdevInitialize
#define subScreenInitialize fbdevScreenInitialize
#define subInitScreen fbdevInitScreen
-#define subRandRSetConfig fbdevRandRSetConfig
#define subFinishInitScreen fbdevFinishInitScreen
+#define subCreateResources fbdevCreateResources
+#define subRandRSetConfig fbdevRandRSetConfig
#define subPreserve fbdevPreserve
#define subEnable fbdevEnable
#define subDPMS fbdevDPMS
@@ -197,6 +199,18 @@ 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
diff --git a/hw/kdrive/smi/smidraw.c b/hw/kdrive/smi/smidraw.c
index 3b0033586..d1691fce0 100644
--- a/hw/kdrive/smi/smidraw.c
+++ b/hw/kdrive/smi/smidraw.c
@@ -143,18 +143,16 @@ smiSetup (ScreenPtr pScreen, int wait)
return TRUE;
}
-Bool
-smiPrepareSolid (DrawablePtr pDrawable,
+static Bool
+smiPrepareSolid (PixmapPtr pPixmap,
int alu,
Pixel pm,
Pixel fg)
{
- KdScreenPriv(pDrawable->pScreen);
-
- if (~pm & FbFullMask(pDrawable->depth))
+ if (~pm & FbFullMask(pPixmap->drawable.depth))
return FALSE;
- if (!smiSetup (pDrawable->pScreen, 3))
+ if (!smiSetup (pPixmap->drawable.pScreen, 3))
return FALSE;
accel_cmd = smiSolidRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
@@ -164,7 +162,7 @@ smiPrepareSolid (DrawablePtr pDrawable,
return TRUE;
}
-void
+static void
smiSolid (int x1, int y1, int x2, int y2)
{
smiWaitAvail(smic,3);
@@ -173,7 +171,7 @@ smiSolid (int x1, int y1, int x2, int y2)
dpr->accel_cmd = accel_cmd;
}
-void
+static void
smiDoneSolid (void)
{
}
@@ -181,20 +179,18 @@ smiDoneSolid (void)
static int copyDx;
static int copyDy;
-Bool
-smiPrepareCopy (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int dx,
- int dy,
- int alu,
- Pixel pm)
+static Bool
+smiPrepareCopy (PixmapPtr pSrcPixmap,
+ PixmapPtr pDstPixmap,
+ int dx,
+ int dy,
+ int alu,
+ Pixel pm)
{
- KdScreenPriv(pSrcDrawable->pScreen);
-
- if (~pm & FbFullMask(pSrcDrawable->depth))
+ if (~pm & FbFullMask(pSrcPixmap->drawable.depth))
return FALSE;
- if (!smiSetup (pSrcDrawable->pScreen, 0))
+ if (!smiSetup (pSrcPixmap->drawable.pScreen, 0))
return FALSE;
accel_cmd = smiBltRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
@@ -206,7 +202,7 @@ smiPrepareCopy (DrawablePtr pSrcDrawable,
return TRUE;
}
-void
+static void
smiCopy (int srcX,
int srcY,
int dstX,
@@ -228,7 +224,7 @@ smiCopy (int srcX,
dpr->accel_cmd = accel_cmd;
}
-void
+static void
smiDoneCopy (void)
{
}
@@ -248,7 +244,6 @@ smiDrawInit (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
smiCardInfo (pScreenPriv);
- smiScreenInfo (pScreenPriv);
ENTER ();
if (pScreenPriv->screen->fb[0].depth == 4)
diff --git a/hw/kdrive/smi/smistub.c b/hw/kdrive/smi/smistub.c
index 7b67c4b2e..fb4e1bad7 100644
--- a/hw/kdrive/smi/smistub.c
+++ b/hw/kdrive/smi/smistub.c
@@ -28,6 +28,7 @@
#include <config.h>
#endif
#include "smi.h"
+#include "klinux.h"
void
InitCard (char *name)
diff --git a/hw/kdrive/src/Makefile.am b/hw/kdrive/src/Makefile.am
index 95677f9f6..af7973843 100644
--- a/hw/kdrive/src/Makefile.am
+++ b/hw/kdrive/src/Makefile.am
@@ -1,10 +1,6 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/mi \
- -I$(top_srcdir)/miext/shadow \
- -I$(top_srcdir)/randr \
- -I$(top_srcdir)/render \
- $(XSERVER_CFLAGS)
+ @KDRIVE_INCS@ \
+ @XSERVER_CFLAGS@
noinst_LIBRARIES = libkdrive.a
diff --git a/hw/kdrive/src/kaa.c b/hw/kdrive/src/kaa.c
index 9b1457d77..f34f644b4 100644
--- a/hw/kdrive/src/kaa.c
+++ b/hw/kdrive/src/kaa.c
@@ -50,10 +50,6 @@ int kaaPixmapPrivateIndex;
typedef struct {
KaaScreenInfoPtr info;
-
- CreatePixmapProcPtr CreatePixmap;
- DestroyPixmapProcPtr DestroyPixmap;
- int pixelOffset; /* offset from pPixmap to pixels */
} KaaScreenPrivRec, *KaaScreenPrivPtr;
typedef struct {
@@ -71,22 +67,10 @@ typedef struct {
#define KaaGetScreenPriv(s) ((KaaScreenPrivPtr)(s)->devPrivates[kaaScreenPrivateIndex].ptr)
#define KaaScreenPriv(s) KaaScreenPrivPtr pKaaScr = KaaGetScreenPriv(s)
-#define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr)
-#define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a))
-#define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p)
-
-#define KaaPixmapPitch(w) (((w) + (pKaaScr->info->offscreenPitch - 1)) & ~(pKaaScr->info->offscreenPitch - 1))
-#define KaaDrawableIsOffscreenPixmap(d) (d->type == DRAWABLE_PIXMAP && \
- KaaGetPixmapPriv((PixmapPtr)(d)) && \
- KaaGetPixmapPriv((PixmapPtr)(d))->area)
-#define KaaDrawableIsScreen(d) (((d)->type == DRAWABLE_WINDOW) || \
- KaaDrawableIsOffscreenPixmap(d))
-
-#define KAA_SCREEN_PROLOGUE(pScreen, field) ((pScreen)->field = \
- ((KaaScreenPrivPtr) (pScreen)->devPrivates[kaaScreenPrivateIndex].ptr)->field)
-
-#define KAA_SCREEN_EPILOGUE(pScreen, field, wrapper)\
- ((pScreen)->field = wrapper)
+#define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr)
+#define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a))
+#define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p)
+#define KaaPixmapPitch(w) (((w) + (pKaaScr->info->offscreenPitch - 1)) & ~(pKaaScr->info->offscreenPitch - 1))
#define MIN_OFFPIX_SIZE (4096)
@@ -248,9 +232,6 @@ kaaPixmapUseMemory (PixmapPtr pPixmap)
static Bool
kaaDestroyPixmap (PixmapPtr pPixmap)
{
- ScreenPtr pScreen = pPixmap->drawable.pScreen;
- Bool ret;
-
if (pPixmap->refcnt == 1)
{
KaaPixmapPriv (pPixmap);
@@ -267,58 +248,93 @@ kaaDestroyPixmap (PixmapPtr pPixmap)
pPixmap->devKind = pKaaPixmap->devKind;
}
}
-
- KAA_SCREEN_PROLOGUE (pScreen, DestroyPixmap);
- ret = (*pScreen->DestroyPixmap) (pPixmap);
- KAA_SCREEN_EPILOGUE (pScreen, DestroyPixmap, kaaDestroyPixmap);
-
- return ret;
+ return fbDestroyPixmap (pPixmap);
}
static PixmapPtr
kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
{
- PixmapPtr pPixmap = NULL;
+ PixmapPtr pPixmap;
KaaPixmapPrivPtr pKaaPixmap;
+ int bpp;
- KAA_SCREEN_PROLOGUE (pScreen, CreatePixmap);
- pPixmap = (* pScreen->CreatePixmap) (pScreen, w, h, depth);
- KAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, kaaCreatePixmap);
+ bpp = BitsPerPixel (depth);
+ if (bpp == 32 && depth == 24)
+ {
+ int fb;
+ KdScreenPriv (pScreen);
+
+ for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++)
+ if (pScreenPriv->screen->fb[fb].depth == 24)
+ {
+ bpp = pScreenPriv->screen->fb[fb].bitsPerPixel;
+ break;
+ }
+ }
+ pPixmap = fbCreatePixmapBpp (pScreen, w, h, depth, bpp);
if (!pPixmap)
return NULL;
pKaaPixmap = KaaGetPixmapPriv(pPixmap);
pKaaPixmap->score = 0;
pKaaPixmap->area = NULL;
- if ((pPixmap->devKind * h) >= MIN_OFFPIX_SIZE)
+ if (depth == pScreen->rootDepth &&
+ (pPixmap->devKind * h) >= MIN_OFFPIX_SIZE)
kaaPixmapAllocArea (pPixmap);
return pPixmap;
}
-PixmapPtr
-kaaGetDrawingPixmap (DrawablePtr pDrawable, int *x, int *y)
+static Bool
+kaaPixmapIsOffscreen(PixmapPtr p)
{
- if (pDrawable->type == DRAWABLE_WINDOW) {
- if (x)
- *x = pDrawable->x;
- if (y)
- *y = pDrawable->y;
+ ScreenPtr pScreen = p->drawable.pScreen;
+ KdScreenPriv(pScreen);
- return (*pDrawable->pScreen->GetScreenPixmap) (pDrawable->pScreen);
+ return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
+ (CARD8 *) pScreenPriv->screen->memory_base) <
+ pScreenPriv->screen->memory_size);
+}
+
+static PixmapPtr
+kaaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
+{
+ PixmapPtr pPixmap;
+ int x, y;
+
+ if (pDrawable->type == DRAWABLE_WINDOW) {
+ pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
+ x = pDrawable->x;
+ y = pDrawable->y;
}
- else if (KaaDrawableIsOffscreenPixmap (pDrawable))
+ else
{
- if (x)
- *x = 0;
- if (y)
- *y = 0;
- return ((PixmapPtr)pDrawable);
+ pPixmap = (PixmapPtr) pDrawable;
+ x = 0;
+ y = 0;
}
+ if (kaaPixmapIsOffscreen (pPixmap))
+ {
+ x += pPixmap->drawable.x;
+ y += pPixmap->drawable.y;
+ if (xp) *xp = x;
+ if (yp) *yp = y;
+ return pPixmap;
+ }
+ return NULL;
+}
+
+static Bool
+kaaDrawableIsOffscreen (DrawablePtr pDrawable)
+{
+ PixmapPtr pPixmap;
+ if (pDrawable->type == DRAWABLE_WINDOW)
+ pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
else
- return NULL;
+ pPixmap = (PixmapPtr) pDrawable;
+ return kaaPixmapIsOffscreen (pPixmap);
}
-void
+static void
kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
DDXPointPtr ppt, int *pwidth, int fSorted)
{
@@ -335,7 +351,7 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
if (!pScreenPriv->enabled ||
pGC->fillStyle != FillSolid ||
- !(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) ||
+ !(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap,
pGC->alu,
pGC->planemask,
@@ -389,7 +405,8 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
if (partX2 > fullX2)
partX2 = fullX2;
if (partX2 > partX1)
- (*pKaaScr->info->Solid) (partX1, fullY1, partX2, fullY1 + 1);
+ (*pKaaScr->info->Solid) (partX1, fullY1,
+ partX2, fullY1 + 1);
}
pbox++;
}
@@ -399,7 +416,7 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
KdMarkSync(pDrawable->pScreen);
}
-void
+static void
kaaCopyNtoN (DrawablePtr pSrcDrawable,
DrawablePtr pDstDrawable,
GCPtr pGC,
@@ -418,15 +435,15 @@ kaaCopyNtoN (DrawablePtr pSrcDrawable,
/* Migrate pixmaps to same place as destination */
if (pScreenPriv->enabled && pSrcDrawable->type == DRAWABLE_PIXMAP) {
- if (KaaDrawableIsScreen (pDstDrawable))
+ if (kaaDrawableIsOffscreen (pDstDrawable))
kaaPixmapUseScreen ((PixmapPtr) pSrcDrawable);
else
kaaPixmapUseMemory ((PixmapPtr) pSrcDrawable);
}
if (pScreenPriv->enabled &&
- (pSrcPixmap = kaaGetDrawingPixmap (pSrcDrawable, NULL, NULL)) &&
- (pDstPixmap = kaaGetDrawingPixmap (pDstDrawable, NULL, NULL)) &&
+ (pSrcPixmap = kaaGetOffscreenPixmap (pSrcDrawable, NULL, NULL)) &&
+ (pDstPixmap = kaaGetOffscreenPixmap (pDstDrawable, NULL, NULL)) &&
(*pKaaScr->info->PrepareCopy) (pSrcPixmap,
pDstPixmap,
dx,
@@ -454,7 +471,7 @@ kaaCopyNtoN (DrawablePtr pSrcDrawable,
}
}
-RegionPtr
+static RegionPtr
kaaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height, int dstx, int dsty)
{
@@ -463,7 +480,7 @@ kaaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
dstx, dsty, kaaCopyNtoN, 0, 0);
}
-void
+static void
kaaPolyFillRect(DrawablePtr pDrawable,
GCPtr pGC,
int nrect,
@@ -483,7 +500,7 @@ kaaPolyFillRect(DrawablePtr pDrawable,
if (!pScreenPriv->enabled ||
pGC->fillStyle != FillSolid ||
- !(pPixmap = kaaGetDrawingPixmap (pDrawable, &xorg, &yorg)) ||
+ !(pPixmap = kaaGetOffscreenPixmap (pDrawable, &xorg, &yorg)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap,
pGC->alu,
pGC->planemask,
@@ -559,7 +576,7 @@ kaaPolyFillRect(DrawablePtr pDrawable,
KdMarkSync(pDrawable->pScreen);
}
-void
+static void
kaaSolidBoxClipped (DrawablePtr pDrawable,
RegionPtr pClip,
FbBits pm,
@@ -577,7 +594,7 @@ kaaSolidBoxClipped (DrawablePtr pDrawable,
int partX1, partX2, partY1, partY2;
if (!pScreenPriv->enabled ||
- !(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) ||
+ !(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
{
KdCheckSync (pDrawable->pScreen);
@@ -619,7 +636,7 @@ kaaSolidBoxClipped (DrawablePtr pDrawable,
KdMarkSync(pDrawable->pScreen);
}
-void
+static void
kaaImageGlyphBlt (DrawablePtr pDrawable,
GCPtr pGC,
int x,
@@ -776,12 +793,12 @@ static const GCOps kaaOps = {
#endif
};
-void
+static void
kaaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
{
fbValidateGC (pGC, changes, pDrawable);
- if (KaaDrawableIsScreen (pDrawable))
+ if (kaaDrawableIsOffscreen (pDrawable))
pGC->ops = (GCOps *) &kaaOps;
else
pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
@@ -797,7 +814,7 @@ GCFuncs kaaGCFuncs = {
miCopyClip
};
-int
+static int
kaaCreateGC (GCPtr pGC)
{
if (!fbCreateGC (pGC))
@@ -809,7 +826,7 @@ kaaCreateGC (GCPtr pGC)
}
-void
+static void
kaaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
{
RegionRec rgnDst;
@@ -833,7 +850,7 @@ kaaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
}
-void
+static void
kaaFillRegionSolid (DrawablePtr pDrawable,
RegionPtr pRegion,
Pixel pixel)
@@ -843,7 +860,7 @@ kaaFillRegionSolid (DrawablePtr pDrawable,
PixmapPtr pPixmap;
if (pScreenPriv->enabled &&
- (pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) &&
+ (pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) &&
(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
{
int nbox = REGION_NUM_RECTS (pRegion);
@@ -865,7 +882,7 @@ kaaFillRegionSolid (DrawablePtr pDrawable,
}
}
-void
+static void
kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{
@@ -933,7 +950,8 @@ kaaDrawInit (ScreenPtr pScreen,
KaaScreenInfoPtr pScreenInfo)
{
KaaScreenPrivPtr pKaaScr;
- KdScreenInfo *screen = KdGetScreenPriv (pScreen)->screen;
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
#ifdef RENDER
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
#endif
@@ -974,15 +992,13 @@ kaaDrawInit (ScreenPtr pScreen,
* Hookup offscreen pixmaps
*/
if ((pKaaScr->info->flags & KAA_OFFSCREEN_PIXMAPS) &&
- screen->off_screen_size > 0)
+ screen->off_screen_base < screen->memory_size)
{
- pKaaScr->CreatePixmap = pScreen->CreatePixmap;
- pScreen->CreatePixmap = kaaCreatePixmap;
- pKaaScr->DestroyPixmap = pScreen->DestroyPixmap;
- pScreen->DestroyPixmap = kaaDestroyPixmap;
if (!AllocatePixmapPrivate(pScreen, kaaPixmapPrivateIndex,
sizeof (KaaPixmapPrivRec)))
return FALSE;
+ pScreen->CreatePixmap = kaaCreatePixmap;
+ pScreen->DestroyPixmap = kaaDestroyPixmap;
}
else
{
@@ -993,3 +1009,10 @@ kaaDrawInit (ScreenPtr pScreen,
return TRUE;
}
+void
+kaaDrawFini (ScreenPtr pScreen)
+{
+ KaaScreenPriv(pScreen);
+
+ xfree (pKaaScr);
+}
diff --git a/hw/kdrive/src/kasync.c b/hw/kdrive/src/kasync.c
index 3c9158d9f..a2807e899 100644
--- a/hw/kdrive/src/kasync.c
+++ b/hw/kdrive/src/kasync.c
@@ -305,11 +305,3 @@ const GCOps kdAsyncPixmapGCOps = {
,NULL
#endif
};
-
-void
-KdAssertSync (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- assert (!card->needSync);
-}
diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c
index d3cb7f20a..855dc6f02 100644
--- a/hw/kdrive/src/kcmap.c
+++ b/hw/kdrive/src/kcmap.c
@@ -130,7 +130,7 @@ KdDisableColormap (ScreenPtr pScreen)
}
}
-int
+static int
KdColormapFb (ColormapPtr pCmap)
{
ScreenPtr pScreen = pCmap->pScreen;
diff --git a/hw/kdrive/src/kcurscol.c b/hw/kdrive/src/kcurscol.c
index 8afd6442b..50edf1735 100644
--- a/hw/kdrive/src/kcurscol.c
+++ b/hw/kdrive/src/kcurscol.c
@@ -28,7 +28,7 @@
#include "kdrive.h"
#include "cursorstr.h"
-int
+static int
KdComputeCmapShift (unsigned long mask)
{
int shift;
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index a3ed0e764..a6065f6f4 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -225,7 +225,7 @@ KdDisableScreen (ScreenPtr pScreen)
(*pScreenPriv->card->cfuncs->disable) (pScreen);
}
-void
+static void
KdDoSwitchCmd (char *reason)
{
if (kdSwitchCmd)
@@ -382,7 +382,7 @@ ddxGiveUp ()
Bool kdDumbDriver;
Bool kdSoftCursor;
-char *
+static char *
KdParseFindNext (char *cur, char *delim, char *save, char *last)
{
while (*cur && !strchr (delim, *cur))
@@ -833,6 +833,22 @@ KdAllocatePrivates (ScreenPtr pScreen)
}
Bool
+KdCreateScreenResources (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ KdCardInfo *card = pScreenPriv->card;
+ Bool ret;
+
+ pScreen->CreateScreenResources = pScreenPriv->CreateScreenResources;
+ ret = (*pScreen->CreateScreenResources) (pScreen);
+ pScreenPriv->CreateScreenResources = pScreen->CreateScreenResources;
+ pScreen->CreateScreenResources = KdCreateScreenResources;
+ if (ret && card->cfuncs->createRes)
+ ret = (*card->cfuncs->createRes) (pScreen);
+ return ret;
+}
+
+Bool
KdCloseScreen (int index, ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
@@ -844,7 +860,7 @@ KdCloseScreen (int index, ScreenPtr pScreen)
pScreen->CloseScreen = pScreenPriv->CloseScreen;
ret = (*pScreen->CloseScreen) (index, pScreen);
- if (screen->off_screen_size > 0)
+ if (screen->off_screen_base < screen->memory_size)
KdOffscreenFini (pScreen);
if (pScreenPriv->dpmsState != KD_DPMS_NORMAL)
@@ -930,7 +946,7 @@ KdSaveScreen (ScreenPtr pScreen, int on)
return TRUE;
}
-Bool
+static Bool
KdCreateWindow (WindowPtr pWin)
{
#ifndef PHOENIX
@@ -1015,11 +1031,32 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
KdCardInfo *card = screen->card;
KdPrivScreenPtr pScreenPriv;
int fb;
+ /*
+ * note that screen->fb is set up for the nominal orientation
+ * of the screen; that means if randr is rotated, the values
+ * there should reflect a rotated frame buffer (or shadow).
+ */
+ Bool rotated = (screen->randr & (RR_Rotate_90|RR_Rotate_270)) != 0;
+ int width, height, *width_mmp, *height_mmp;
KdAllocatePrivates (pScreen);
pScreenPriv = KdGetScreenPriv(pScreen);
+ if (!rotated)
+ {
+ width = screen->width;
+ height = screen->height;
+ width_mmp = &screen->width_mm;
+ height_mmp = &screen->height_mm;
+ }
+ else
+ {
+ width = screen->height;
+ height = screen->width;
+ width_mmp = &screen->height_mm;
+ height_mmp = &screen->width_mm;
+ }
screen->pScreen = pScreen;
pScreenPriv->screen = screen;
pScreenPriv->card = card;
@@ -1039,7 +1076,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
*/
if (!fbSetupScreen (pScreen,
screen->fb[0].frameBuffer,
- screen->width, screen->height,
+ width, height,
monitorResolution, monitorResolution,
screen->fb[0].pixelStride,
screen->fb[0].bitsPerPixel))
@@ -1072,7 +1109,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (!fbOverlayFinishScreenInit (pScreen,
screen->fb[0].frameBuffer,
screen->fb[1].frameBuffer,
- screen->width, screen->height,
+ width, height,
monitorResolution, monitorResolution,
screen->fb[0].pixelStride,
screen->fb[1].pixelStride,
@@ -1089,7 +1126,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
{
if (!fbFinishScreenInit (pScreen,
screen->fb[0].frameBuffer,
- screen->width, screen->height,
+ width, height,
monitorResolution, monitorResolution,
screen->fb[0].pixelStride,
screen->fb[0].bitsPerPixel))
@@ -1102,14 +1139,14 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
* Fix screen sizes; for some reason mi takes dpi instead of mm.
* Rounding errors are annoying
*/
- if (screen->width_mm)
- pScreen->mmWidth = screen->width_mm;
+ if (*width_mmp)
+ pScreen->mmWidth = *width_mmp;
else
- screen->width_mm = pScreen->mmWidth;
- if (screen->height_mm)
- pScreen->mmHeight = screen->height_mm;
+ *width_mmp = pScreen->mmWidth;
+ if (*height_mmp)
+ pScreen->mmHeight = *height_mmp;
else
- screen->height_mm = pScreen->mmHeight;
+ *height_mmp = pScreen->mmHeight;
/*
* Plug in our own block/wakeup handlers.
@@ -1130,7 +1167,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (!(*card->cfuncs->initAccel) (pScreen))
screen->dumb = TRUE;
- if (screen->off_screen_size > 0)
+ if (screen->off_screen_base < screen->memory_size)
KdOffscreenInit (pScreen);
#ifdef PSEUDO8
@@ -1163,6 +1200,9 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
*/
pScreenPriv->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = KdCloseScreen;
+
+ pScreenPriv->CreateScreenResources = pScreen->CreateScreenResources;
+ pScreen->CreateScreenResources = KdCreateScreenResources;
if (screen->softCursor ||
!card->cfuncs->initCursor ||
@@ -1222,7 +1262,7 @@ KdInitScreen (ScreenInfo *pScreenInfo,
screen->softCursor = TRUE;
}
-Bool
+static Bool
KdSetPixmapFormats (ScreenInfo *pScreenInfo)
{
CARD8 depthToBpp[33]; /* depth -> bpp map */
@@ -1287,7 +1327,7 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo)
return TRUE;
}
-void
+static void
KdAddScreen (ScreenInfo *pScreenInfo,
KdScreenInfo *screen,
int argc,
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 6cc976913..8969e6f83 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -93,6 +93,7 @@ typedef struct _KdFrameBuffer {
int bitsPerPixel;
int pixelStride;
int byteStride;
+ Bool shadow;
unsigned long visuals;
Pixel redMask, greenMask, blueMask;
void *closure;
@@ -119,8 +120,8 @@ typedef struct _KdScreenInfo {
DDXPointRec origin;
KdFrameBuffer fb[KD_MAX_FB];
CARD8 *memory_base;
- int off_screen_base;
- int off_screen_size;
+ unsigned long memory_size;
+ unsigned long off_screen_base;
struct _RealOffscreenArea *off_screen_areas;
} KdScreenInfo;
@@ -128,6 +129,8 @@ typedef struct _KdCardFuncs {
Bool (*cardinit) (KdCardInfo *); /* detect and map device */
Bool (*scrinit) (KdScreenInfo *);/* initialize screen information */
Bool (*initScreen) (ScreenPtr); /* initialize ScreenRec */
+ Bool (*finishInitScreen) (ScreenPtr pScreen);
+ Bool (*createRes) (ScreenPtr); /* create screen resources */
void (*preserve) (KdCardInfo *); /* save graphics card state */
Bool (*enable) (ScreenPtr); /* set up for rendering */
Bool (*dpms) (ScreenPtr, int); /* set DPMS screen saver */
@@ -151,7 +154,6 @@ typedef struct _KdCardFuncs {
void (*getColors) (ScreenPtr, int, int, xColorItem *);
void (*putColors) (ScreenPtr, int, int, xColorItem *);
- Bool (*finishInitScreen) (ScreenPtr pScreen);
} KdCardFuncs;
#define KD_MAX_PSEUDO_DEPTH 8
@@ -170,6 +172,7 @@ typedef struct {
ColormapPtr pInstalledmap[KD_MAX_FB]; /* current colormap */
xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */
+ CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
#ifdef FB_OLD_SCREEN
miBSFuncRec BackingStoreFuncs;
@@ -216,6 +219,7 @@ extern KdMouseInfo *kdMouseInfo;
extern int KdCurScreen;
KdMouseInfo *KdMouseInfoAdd (void);
+void KdMouseInfoDispose (KdMouseInfo *mi);
void KdParseMouse (char *);
typedef struct _KdMouseFuncs {
@@ -352,6 +356,9 @@ kaaDrawInit (ScreenPtr pScreen,
KaaScreenInfoPtr pScreenInfo);
void
+kaaDrawFini (ScreenPtr pScreen);
+
+void
kaaWrapGC (GCPtr pGC);
void
@@ -565,6 +572,9 @@ Bool
KdAllocatePrivates (ScreenPtr pScreen);
Bool
+KdCreateScreenResources (ScreenPtr pScreen);
+
+Bool
KdCloseScreen (int index, ScreenPtr pScreen);
Bool
@@ -689,7 +699,7 @@ void
KdEnableInput (void);
void
-ProcessInputEvents ();
+ProcessInputEvents (void);
extern KdMouseFuncs LinuxMouseFuncs;
extern KdMouseFuncs Ps2MouseFuncs;
@@ -771,13 +781,16 @@ KdCheckComposite (CARD8 op,
/* kshadow.c */
Bool
-KdShadowScreenInit (KdScreenInfo *screen);
+KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate);
-Bool
-KdShadowInitScreen (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
+void
+KdShadowFbFree (KdScreenInfo *screen, int fb);
+Bool
+KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc window);
+
void
-KdShadowScreenFini (KdScreenInfo *screen);
+KdShadowUnset (ScreenPtr pScreen);
/* ktest.c */
Bool
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 5ac032c0e..016e35ddc 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -92,7 +92,7 @@ KdInputFd kdInputFds[KD_MAX_INPUT_FDS];
int kdNumInputFds;
int kdInputTypeSequence;
-void
+static void
KdSigio (int sig)
{
int i;
@@ -101,7 +101,7 @@ KdSigio (int sig)
(*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure);
}
-void
+static void
KdBlockSigio (void)
{
sigset_t set;
@@ -111,7 +111,7 @@ KdBlockSigio (void)
sigprocmask (SIG_BLOCK, &set, 0);
}
-void
+static void
KdUnblockSigio (void)
{
sigset_t set;
@@ -158,7 +158,7 @@ KdNonBlockFd (int fd)
fcntl (fd, F_SETFL, flags);
}
-void
+static void
KdAddFd (int fd)
{
struct sigaction act;
@@ -179,7 +179,7 @@ KdAddFd (int fd)
sigprocmask (SIG_SETMASK, &set, 0);
}
-void
+static void
KdRemoveFd (int fd)
{
struct sigaction act;
@@ -915,7 +915,7 @@ KdInputTransition kdInputMachine[num_input_states][num_input_class] = {
#define EventX(e) ((e)->u.keyButtonPointer.rootX)
#define EventY(e) ((e)->u.keyButtonPointer.rootY)
-int
+static int
KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev)
{
if (ev->u.keyButtonPointer.pad1)
@@ -932,7 +932,7 @@ KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev)
abs (mi->emulationDy) < EMULATION_WINDOW);
}
-KdInputClass
+static KdInputClass
KdClassifyInput (KdMouseInfo *mi, xEvent *ev)
{
switch (ev->u.u.type) {
@@ -1083,7 +1083,7 @@ KdResetInputMachine (void)
}
}
-void
+static void
KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev)
{
if (mi->emulateMiddleButton)
@@ -1092,7 +1092,7 @@ KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev)
KdQueueEvent (ev);
}
-void
+static void
KdReceiveTimeout (KdMouseInfo *mi)
{
KdRunMouseMachine (mi, timeout, 0);
@@ -1122,7 +1122,7 @@ extern char dispatchException;
extern int nClients;
-void
+static void
KdCheckSpecialKeys(xEvent *xE)
{
KeySym sym = KEYCOL1(xE->u.u.detail);
@@ -1195,7 +1195,7 @@ KdCheckSpecialKeys(xEvent *xE)
*
*/
-void
+static void
KdHandleKeyboardEvent (xEvent *ev)
{
int key = ev->u.u.detail;
@@ -1236,7 +1236,7 @@ KdReleaseAllKeys (void)
KdUnblockSigio ();
}
-void
+static void
KdCheckLock (void)
{
KeyClassPtr keyc = pKdKeyboard->key;
diff --git a/hw/kdrive/src/knoop.c b/hw/kdrive/src/knoop.c
index d791d819d..26d7642f9 100644
--- a/hw/kdrive/src/knoop.c
+++ b/hw/kdrive/src/knoop.c
@@ -255,14 +255,14 @@ typedef void (* typePushPixels)(
#endif
);
-RegionPtr
+static RegionPtr
KdNoopCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height, int dstx, int dsty)
{
return NullRegion;
}
-RegionPtr
+static RegionPtr
KdNoopCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty, unsigned long bitPlane)
diff --git a/hw/kdrive/src/koffscreen.c b/hw/kdrive/src/koffscreen.c
index a8476ab6f..09dfc3de3 100644
--- a/hw/kdrive/src/koffscreen.c
+++ b/hw/kdrive/src/koffscreen.c
@@ -21,7 +21,6 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Header$ */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -61,7 +60,7 @@ KdOffscreenValidate (ScreenPtr pScreen)
prev = area;
}
- assert (prev->area.offset + prev->area.size == pScreenPriv->screen->off_screen_size);
+ assert (prev->area.offset + prev->area.size == pScreenPriv->screen->memory_size);
}
#else
#define KdOffscreenValidate(s)
@@ -97,7 +96,7 @@ KdOffscreenAlloc (ScreenPtr pScreen, int size, int align,
}
/* throw out requests that cannot fit */
- if (size > pScreenPriv->screen->off_screen_size)
+ if (size > (pScreenPriv->screen->memory_size - pScreenPriv->screen->off_screen_base))
{
DBG_OFFSCREEN (("Alloc 0x%x -> TOBIG\n", size));
return NULL;
@@ -280,7 +279,7 @@ KdOffscreenInit (ScreenPtr pScreen)
area->area.screen = NULL;
area->area.offset = pScreenPriv->screen->off_screen_base;
- area->area.size = pScreenPriv->screen->off_screen_size;
+ area->area.size = pScreenPriv->screen->memory_size - area->area.offset;
area->save = 0;
area->locked = FALSE;
area->next = NULL;
diff --git a/hw/kdrive/src/kshadow.c b/hw/kdrive/src/kshadow.c
index 9642bab30..f4b593f26 100644
--- a/hw/kdrive/src/kshadow.c
+++ b/hw/kdrive/src/kshadow.c
@@ -28,29 +28,59 @@
#include "kdrive.h"
Bool
-KdShadowScreenInit (KdScreenInfo *screen)
+KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate)
{
+ int paddedWidth;
void *buf;
+ int width = rotate ? screen->height : screen->width;
+ int height = rotate ? screen->width : screen->height;
+ int bpp = screen->fb[fb].bitsPerPixel;
- buf = shadowAlloc (screen->width, screen->height, screen->fb[0].bitsPerPixel);
+ /* use fb computation for width */
+ paddedWidth = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits);
+ buf = xalloc (paddedWidth * height);
if (!buf)
return FALSE;
- screen->fb[0].frameBuffer = buf;
- screen->fb[0].byteStride = BitmapBytePad (screen->width * screen->fb[0].bitsPerPixel);
- screen->fb[0].pixelStride = screen->fb[0].byteStride * 8 / screen->fb[0].bitsPerPixel;
- screen->dumb = TRUE;
+ if (screen->fb[fb].shadow)
+ xfree (screen->fb[fb].frameBuffer);
+ screen->fb[fb].shadow = TRUE;
+ screen->fb[fb].frameBuffer = buf;
+ screen->fb[fb].byteStride = paddedWidth;
+ screen->fb[fb].pixelStride = paddedWidth * 8 / bpp;
return TRUE;
}
+void
+KdShadowFbFree (KdScreenInfo *screen, int fb)
+{
+ if (screen->fb[fb].shadow)
+ {
+ xfree (screen->fb[fb].frameBuffer);
+ screen->fb[fb].frameBuffer = 0;
+ screen->fb[fb].shadow = FALSE;
+ }
+}
+
Bool
-KdShadowInitScreen (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window)
+KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc window)
{
- return shadowInit (pScreen, update, window);
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
+ int fb;
+
+ for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
+ {
+ if (screen->fb[fb].shadow)
+ return shadowSet (pScreen, (*pScreen->GetScreenPixmap) (pScreen),
+ update, window, randr, 0);
+ else
+ shadowUnset (pScreen);
+ }
+ return TRUE;
}
void
-KdShadowScreenFini (KdScreenInfo *screen)
+KdShadowUnset (ScreenPtr pScreen)
{
- if (screen->fb[0].frameBuffer)
- xfree (screen->fb[0].frameBuffer);
+ shadowUnset (pScreen);
}
diff --git a/hw/kdrive/src/vga.c b/hw/kdrive/src/vga.c
index 23372424c..7975d5c5c 100644
--- a/hw/kdrive/src/vga.c
+++ b/hw/kdrive/src/vga.c
@@ -210,7 +210,7 @@ VgaInvalidate (VgaCard *card)
}
-void
+static void
_VgaSync (VgaCard *card, VGA16 id)
{
if (!(card->values[id].flags & VGA_VALUE_VALID))
diff --git a/hw/kdrive/src/vga.h b/hw/kdrive/src/vga.h
index 2123257d5..5d7e77307 100644
--- a/hw/kdrive/src/vga.h
+++ b/hw/kdrive/src/vga.h
@@ -126,6 +126,12 @@ VgaInvalidate (VgaCard *card);
void
VgaRestore (VgaCard *card);
+void
+VgaFinish (VgaCard *card);
+
+void
+VgaFlushReg (VgaCard *card, VgaReg *reg);
+
VGA8
VgaFetch (VgaCard *card, VGA16 id);
diff --git a/hw/kdrive/vesa/Makefile.am b/hw/kdrive/vesa/Makefile.am
index 1c639a2e2..b0aeba0bb 100644
--- a/hw/kdrive/vesa/Makefile.am
+++ b/hw/kdrive/vesa/Makefile.am
@@ -1,12 +1,6 @@
INCLUDES = \
- -I$(top_srcdir)/fb \
- -I$(top_srcdir)/hw/kdrive/src \
- -I$(top_srcdir)/mi \
- -I$(top_srcdir)/miext/layer \
- -I$(top_srcdir)/miext/shadow \
- -I$(top_srcdir)/randr \
- -I$(top_srcdir)/render \
- $(XSERVER_CFLAGS)
+ @KDRIVE_INCS@ \
+ @XSERVER_CFLAGS@
noinst_LIBRARIES = libvesa.a
@@ -23,20 +17,9 @@ Xvesa_SOURCES = \
Xvesa_LDADD = \
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)
+ @KDRIVE_LIBS@ \
+ @XSERVER_LIBS@
+
+Xvesa_DEPENDENCIES = \
+ libvesa.a \
+ @KDRIVE_LIBS@
diff --git a/hw/kdrive/vesa/vesa.c b/hw/kdrive/vesa/vesa.c
index 8786d2562..9576bca04 100644
--- a/hw/kdrive/vesa/vesa.c
+++ b/hw/kdrive/vesa/vesa.c
@@ -463,8 +463,6 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr)
pscr->randr = screen->randr;
pscr->shadow = vesa_shadow;
pscr->origDepth = screen->fb[0].depth;
- pscr->layerKind = LAYER_FB;
-
/*
* Compute visual support for the selected depth
*/
@@ -683,7 +681,7 @@ void
vesaUpdateMono (ScreenPtr pScreen,
shadowBufPtr pBuf)
{
- RegionPtr damage = &pBuf->damage;
+ RegionPtr damage = shadowDamage(pBuf);
PixmapPtr pShadow = pBuf->pPixmap;
int nbox = REGION_NUM_RECTS (damage);
BoxPtr pbox = REGION_RECTS (damage);
@@ -791,30 +789,13 @@ vesaCreateColormap16 (ColormapPtr pmap)
}
void
-vesaConfigureScreen (ScreenPtr pScreen)
+vesaSetScreenSizes (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
- VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
-
- KdMouseMatrix m;
+ VesaScreenPrivPtr pscr = screen->driver;
- if (pscr->mapping == VESA_PLANAR || pscr->mapping == VESA_MONO)
- {
- pscr->shadow = TRUE;
- pscr->randr = RR_Rotate_0;
- }
- else if (pscr->mapping == VESA_WINDOWED)
- pscr->shadow = TRUE;
- else if (pscr->randr != RR_Rotate_0)
- pscr->shadow = TRUE;
- else
- pscr->shadow = vesa_shadow;
-
- KdComputeMouseMatrix (&m, pscr->randr,
- pscr->mode.XResolution, pscr->mode.YResolution);
-
- if (m.matrix[0][0])
+ if (pscr->randr & (RR_Rotate_0|RR_Rotate_180))
{
pScreen->width = pscr->mode.XResolution;
pScreen->height = pscr->mode.YResolution;
@@ -828,67 +809,45 @@ vesaConfigureScreen (ScreenPtr pScreen)
pScreen->mmWidth = screen->height_mm;
pScreen->mmHeight = screen->width_mm;
}
- KdSetMouseMatrix (&m);
}
-LayerPtr
-vesaLayerCreate (ScreenPtr pScreen)
+Bool
+vesaSetShadow (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
ShadowUpdateProc update;
ShadowWindowProc window = 0;
- PixmapPtr pPixmap;
- int kind;
- if (pscr->shadow)
- {
- if (pscr->randr != RR_Rotate_0)
- update = shadowUpdateRotatePacked;
+ if (pscr->randr != RR_Rotate_0)
+ update = shadowUpdateRotatePacked;
+ else
+ update = shadowUpdatePacked;
+ switch (pscr->mapping) {
+ case VESA_LINEAR:
+ window = vesaWindowLinear;
+ break;
+ case VESA_WINDOWED:
+ window = vesaWindowWindowed;
+ break;
+ case VESA_PLANAR:
+ pScreen->CreateColormap = vesaCreateColormap16;
+ if (pScreenPriv->screen->fb[0].bitsPerPixel == 8)
+ update = shadowUpdatePlanar4x8;
+ else
+ update = shadowUpdatePlanar4;
+ window = vesaWindowPlanar;
+ break;
+ case VESA_MONO:
+ update = vesaUpdateMono;
+ if (pscr->mode.mode < 8)
+ window = vesaWindowCga;
else
- update = shadowUpdatePacked;
- switch (pscr->mapping) {
- case VESA_LINEAR:
window = vesaWindowLinear;
- break;
- case VESA_WINDOWED:
- window = vesaWindowWindowed;
- break;
- case VESA_PLANAR:
- pScreen->CreateColormap = vesaCreateColormap16;
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 8)
- update = shadowUpdatePlanar4x8;
- else
- update = shadowUpdatePlanar4;
- window = vesaWindowPlanar;
- break;
- case VESA_MONO:
- update = vesaUpdateMono;
- if (pscr->mode.mode < 8)
- window = vesaWindowCga;
- else
- window = vesaWindowLinear;
- break;
- }
-
- kind = LAYER_SHADOW;
- pPixmap = 0;
- }
- else
- {
- kind = pscr->layerKind;
- pPixmap = LAYER_SCREEN_PIXMAP;
- update = 0;
- window = 0;
+ break;
}
-
- if (vesa_verbose)
- ErrorF ("Mode selected %dx%dx%d\n",
- pScreen->width, pScreen->height, screen->fb[0].depth);
-
- return LayerCreate (pScreen, kind, screen->fb[0].depth,
- pPixmap, update, window, pscr->randr, 0);
+
+ return KdShadowSet (pScreen, pscr->randr, update, window);
}
Bool
@@ -898,11 +857,18 @@ vesaMapFramebuffer (KdScreenInfo *screen)
VesaScreenPrivPtr pscr = screen->driver;
int depth, bpp, fbbpp;
Pixel allbits;
+ KdMouseMatrix m;
if (vesa_linear_fb)
+ {
pscr->mapping = VESA_LINEAR;
+ pscr->shadow = FALSE;
+ }
else
+ {
pscr->mapping = VESA_WINDOWED;
+ pscr->shadow = TRUE;
+ }
depth = vesaDepth (&pscr->mode);
bpp = pscr->mode.BitsPerPixel;
@@ -963,9 +929,10 @@ vesaMapFramebuffer (KdScreenInfo *screen)
bpp, depth);
}
pscr->randr = RR_Rotate_0;
+ pscr->shadow = TRUE;
break;
default:
- return 0;
+ return FALSE;
}
switch (fbbpp) {
@@ -978,15 +945,17 @@ vesaMapFramebuffer (KdScreenInfo *screen)
break;
}
- screen->width = pscr->mode.XResolution;
- screen->height = pscr->mode.YResolution;
- screen->fb[0].depth = depth;
- screen->fb[0].bitsPerPixel = bpp;
- screen->fb[0].byteStride = pscr->mode.BytesPerScanLine;
- screen->fb[0].pixelStride = ((pscr->mode.BytesPerScanLine * 8) / fbbpp);
+ if (pscr->randr != RR_Rotate_0)
+ pscr->shadow = TRUE;
+
+ if (vesa_shadow)
+ pscr->shadow = vesa_shadow;
if (pscr->mapping == VESA_LINEAR && !(pscr->mode.ModeAttributes & MODE_LINEAR))
+ {
pscr->mapping = VESA_WINDOWED;
+ pscr->shadow = TRUE;
+ }
screen->softCursor = TRUE;
@@ -1013,7 +982,35 @@ vesaMapFramebuffer (KdScreenInfo *screen)
pscr->fb = NULL;
break;
}
- screen->fb[0].frameBuffer = (CARD8 *)(pscr->fb);
+
+ KdComputeMouseMatrix (&m, pscr->randr,
+ pscr->mode.XResolution, pscr->mode.YResolution);
+
+ KdSetMouseMatrix (&m);
+
+ screen->width = pscr->mode.XResolution;
+ screen->height = pscr->mode.YResolution;
+ screen->memory_base = pscr->fb;
+ screen->memory_size = pscr->fb_size;
+ screen->fb[0].depth = depth;
+ screen->fb[0].bitsPerPixel = bpp;
+
+ if (pscr->shadow)
+ {
+ if (!KdShadowFbAlloc (screen, 0,
+ pscr->randr & (RR_Rotate_90|RR_Rotate_270)))
+ return FALSE;
+ screen->off_screen_base = screen->memory_size;
+ }
+ else
+ {
+ screen->fb[0].frameBuffer = (CARD8 *) (pscr->fb);
+ screen->fb[0].byteStride = pscr->mode.BytesPerScanLine;
+ screen->fb[0].pixelStride = ((pscr->mode.BytesPerScanLine * 8) /
+ screen->fb[0].bitsPerPixel);
+ screen->off_screen_base = screen->fb[0].byteStride * screen->height;
+ }
+
return TRUE;
}
@@ -1023,6 +1020,7 @@ vesaUnmapFramebuffer (KdScreenInfo *screen)
VesaCardPrivPtr priv = screen->card->driver;
VesaScreenPrivPtr pscr = screen->driver;
+ KdShadowFbFree (screen, 0);
if (pscr->fb)
{
if (pscr->mode.vbe)
@@ -1108,29 +1106,6 @@ vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
return TRUE;
}
-int
-vesaLayerAdd (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- if (!LayerWindowAdd (pScreen, pLayer, pWin))
- return WT_STOPWALKING;
-
- return WT_WALKCHILDREN;
-}
-
-int
-vesaLayerRemove (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- LayerWindowRemove (pScreen, pLayer, pWin);
-
- return WT_WALKCHILDREN;
-}
-
Bool
vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
@@ -1150,7 +1125,6 @@ vesaRandRSetConfig (ScreenPtr pScreen,
int oldheight;
int oldmmwidth;
int oldmmheight;
- LayerPtr pNewLayer;
int newwidth, newheight;
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
@@ -1225,54 +1199,29 @@ vesaRandRSetConfig (ScreenPtr pScreen,
break;
}
+ KdOffscreenSwapOut (screen->pScreen);
+
vesaUnmapFramebuffer (screen);
+
if (!vesaMapFramebuffer (screen))
goto bail3;
-#if 0
- /*
- * XXX can't switch depths yet
- */
- screen->fb[0].depth = depth;
- screen->fb[0].bitsPerPixel = bpp;
-#endif
- screen->fb[0].byteStride = mode->BytesPerScanLine;
- screen->fb[0].pixelStride = ((mode->BytesPerScanLine * 8) / screen->fb[0].bitsPerPixel);
+ vesaSetScreenSizes (screen->pScreen);
+
+ if (!vesaSetShadow (screen->pScreen))
+ goto bail4;
- /*
- * Compute screen geometry
- */
- vesaConfigureScreen (pScreen);
-
/*
* Set frame buffer mapping
*/
- if (!pscr->shadow)
- {
- (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
- pScreen->width,
- pScreen->height,
- screen->fb[0].depth,
- screen->fb[0].bitsPerPixel,
- screen->fb[0].byteStride,
- screen->fb[0].frameBuffer);
- }
-
- /*
- * Create the layer
- */
- pNewLayer = vesaLayerCreate (pScreen);
- if (!pNewLayer)
- goto bail4;
+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
+ pScreen->width,
+ pScreen->height,
+ screen->fb[0].depth,
+ screen->fb[0].bitsPerPixel,
+ screen->fb[0].byteStride,
+ screen->fb[0].frameBuffer);
- if (WalkTree (pScreen, vesaLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
- goto bail5;
-
- WalkTree (pScreen, vesaLayerRemove, (pointer) pscr->pLayer);
- LayerDestroy (pScreen, pscr->pLayer);
-
- pscr->pLayer = pNewLayer;
-
/* set the subpixel order */
KdSetSubpixelOrder (pScreen, pscr->randr);
@@ -1281,9 +1230,6 @@ vesaRandRSetConfig (ScreenPtr pScreen,
return TRUE;
-bail5:
- WalkTree (pScreen, vesaLayerRemove, (pointer) pNewLayer);
- LayerDestroy (pScreen, pNewLayer);
bail4:
vesaUnmapFramebuffer (screen);
*pscr = oldscr;
@@ -1298,22 +1244,7 @@ bail3:
bail2:
*pscr = oldscr;
- /*
- * Set frame buffer mapping
- */
- if (!pscr->shadow)
- {
- (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
- pScreen->width,
- pScreen->height,
- screen->fb[0].depth,
- screen->fb[0].bitsPerPixel,
- screen->fb[0].byteStride,
- screen->fb[0].frameBuffer);
- }
-
(void) vesaSetMode (pScreen, &pscr->mode);
-
bail1:
if (wasEnabled)
KdEnableScreen (pScreen);
@@ -1340,27 +1271,13 @@ vesaRandRInit (ScreenPtr pScreen)
Bool
vesaInitScreen(ScreenPtr pScreen)
{
- if (!LayerStartInit (pScreen))
- return FALSE;
-
return TRUE;
}
Bool
vesaFinishInitScreen (ScreenPtr pScreen)
{
- KdScreenPriv(pScreen);
- VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
-
- pscr->layerKind = LayerNewKind (pScreen);
-
- if (!LayerFinishInit (pScreen))
- return FALSE;
-
- vesaConfigureScreen (pScreen);
-
- pscr->pLayer = vesaLayerCreate (pScreen);
- if (!pscr->pLayer)
+ if (!shadowSetup (pScreen))
return FALSE;
#ifdef RANDR
@@ -1372,6 +1289,12 @@ vesaFinishInitScreen (ScreenPtr pScreen)
}
Bool
+vesaCreateResources (ScreenPtr pScreen)
+{
+ return vesaSetShadow (pScreen);
+}
+
+Bool
vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode)
{
@@ -1668,6 +1591,7 @@ vesaScreenFini(KdScreenInfo *screen)
{
VesaScreenPrivPtr pscr = screen->driver;
+ KdShadowFbFree (screen, 0);
vesaUnmapFramebuffer (screen);
screen->fb[0].depth = pscr->origDepth;
}
diff --git a/hw/kdrive/vesa/vesa.h b/hw/kdrive/vesa/vesa.h
index 30222d41b..4cad3ac2a 100644
--- a/hw/kdrive/vesa/vesa.h
+++ b/hw/kdrive/vesa/vesa.h
@@ -25,7 +25,7 @@ THE SOFTWARE.
#define _VESA_H_
#include "kdrive.h"
-#include "layer.h"
+#include "shadow.h"
#include "vm86.h"
#ifdef RANDR
#include "randrstr.h"
@@ -98,17 +98,92 @@ typedef struct _VesaScreenPriv {
Rotation randr;
int mapping;
int origDepth;
- int layerKind;
void *fb;
int fb_size;
CARD32 fb_phys;
- LayerPtr pLayer;
+ PixmapPtr pShadow;
} VesaScreenPrivRec, *VesaScreenPrivPtr;
extern int vesa_video_mode;
extern Bool vesa_force_mode;
void
+vesaReportMode (VesaModePtr mode);
+
+VesaModePtr
+vesaGetModes (Vm86InfoPtr vi, int *ret_nmode);
+
+void
+vesaTestMode (void);
+
+void *
+vesaSetWindowPlanar(ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size);
+
+void *
+vesaSetWindowLinear (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size);
+
+void *
+vesaSetWindowWindowed (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size);
+
+void *
+vesaWindowPlanar (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure);
+
+void *
+vesaWindowLinear (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure);
+
+void *
+vesaWindowWindowed (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure);
+
+void *
+vesaWindowCga (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure);
+
+void
+vesaUpdateMono (ScreenPtr pScreen,
+ shadowBufPtr pBuf);
+
+Bool
+vesaCreateColormap16 (ColormapPtr pmap);
+
+void
+vesaSetScreenSizes (ScreenPtr pScreen);
+
+Bool
+vesaSetShadow (ScreenPtr pScreen);
+
+
+void
vesaListModes(void);
Bool
@@ -145,12 +220,15 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr);
Bool
vesaScreenInit(KdScreenInfo *screen);
-LayerPtr
-vesaLayerCreate (ScreenPtr pScreen);
+PixmapPtr
+vesaGetPixmap (ScreenPtr pScreen);
Bool
vesaMapFramebuffer (KdScreenInfo *screen);
+void
+vesaUnmapFramebuffer (KdScreenInfo *screen);
+
Bool
vesaInitScreen(ScreenPtr pScreen);
@@ -158,6 +236,9 @@ Bool
vesaFinishInitScreen(ScreenPtr pScreen);
Bool
+vesaCreateResources (ScreenPtr pScreen);
+
+Bool
vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode);
@@ -182,6 +263,12 @@ vesaCardFini(KdCardInfo *card);
void
vesaScreenFini(KdScreenInfo *screen);
+int
+vesaSetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
+
+int
+vesaGetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
+
void
vesaPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
@@ -193,10 +280,19 @@ vesaProcessArgument (int argc, char **argv, int i);
#ifdef RANDR
Bool
+vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations);
+
+Bool
vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
int rate,
RRScreenSizePtr pSize);
+Bool
+vesaRandRInit (ScreenPtr pScreen);
+
#endif
+Bool
+toshibaDPMS (ScreenPtr pScreen, int mode);
+
#endif /* _VESA_H_ */
diff --git a/hw/kdrive/vesa/vesainit.c b/hw/kdrive/vesa/vesainit.c
index 3e9463db9..45092add0 100644
--- a/hw/kdrive/vesa/vesainit.c
+++ b/hw/kdrive/vesa/vesainit.c
@@ -30,6 +30,8 @@ const KdCardFuncs vesaFuncs = {
vesaCardInit, /* cardinit */
vesaScreenInit, /* scrinit */
vesaInitScreen, /* initScreen */
+ vesaFinishInitScreen, /* finishInitScreen */
+ vesaCreateResources, /* createRes */
vesaPreserve, /* preserve */
vesaEnable, /* enable */
vesaDPMS, /* dpms */
@@ -52,8 +54,6 @@ const KdCardFuncs vesaFuncs = {
vesaGetColors, /* getColors */
vesaPutColors, /* putColors */
-
- vesaFinishInitScreen, /* finishInitScreen */
};
void