merge xfixes_2_branch back to HEAD

This commit is contained in:
Keith Packard 2003-11-02 19:56:10 +00:00
parent 9e94665cf9
commit 5378236aa6
51 changed files with 926 additions and 1002 deletions

View File

@ -1,12 +1,6 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \ @XSERVER_CFLAGS@
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
noinst_LIBRARIES = libfbdev.a noinst_LIBRARIES = libfbdev.a
@ -18,28 +12,18 @@ libfbdev_a_SOURCES = \
Xfbdev_SOURCES = \ Xfbdev_SOURCES = \
fbinit.c 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 if TSLIB
Xfbdev_LDADD += -lts TSLIB_FLAG = -lts
endif endif
Xfbdev_LDADD = \
libfbdev.a \
@KDRIVE_LIBS@ \
@XSERVER_LIBS@ \
$(TSLIB_FLAG)
Xfbdev_DEPENDENCIES = \
libfbdev.a \
@KDRIVE_LIBS@

View File

@ -29,9 +29,6 @@
#include "fbdev.h" #include "fbdev.h"
#include <sys/ioctl.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; extern int KdTsPhyScreen;
Bool Bool
@ -114,9 +111,6 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
Pixel allbits; Pixel allbits;
int depth; int depth;
Bool gray; Bool gray;
#ifdef FAKE24_ON_16
Bool fake24;
#endif
depth = priv->var.bits_per_pixel; depth = priv->var.bits_per_pixel;
gray = priv->var.grayscale; gray = priv->var.grayscale;
@ -190,35 +184,8 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
} }
screen->rate = 72; screen->rate = 72;
scrpriv->randr = screen->randr; scrpriv->randr = screen->randr;
scrpriv->layerKind = LAYER_FB;
#ifdef FAKE24_ON_16 return fbdevMapFramebuffer (screen);
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;
} }
Bool Bool
@ -256,173 +223,94 @@ fbdevWindowLinear (ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset; return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
} }
#ifdef FAKE24_ON_16 Bool
void fbdevMapFramebuffer (KdScreenInfo *screen)
fbdevUpdateFake24 (ScreenPtr pScreen,
PixmapPtr pShadow,
RegionPtr damage)
{ {
shadowScrPriv(pScreen); FbdevScrPriv *scrpriv = screen->driver;
int nbox = REGION_NUM_RECTS (damage); KdMouseMatrix m;
BoxPtr pbox = REGION_RECTS (damage); FbdevPriv *priv = screen->card->driver;
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); if (scrpriv->randr != RR_Rotate_0)
shaStride = shaStride * sizeof (FbBits) / sizeof (CARD8); scrpriv->shadow = TRUE;
shaBase = (CARD8 *) shaBits; else
while (nbox--) 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; if (!KdShadowFbAlloc (screen, 0,
y = pbox->y1; scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
w = (pbox->x2 - pbox->x1); return FALSE;
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++;
} }
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 void
fbdevConfigureScreen (ScreenPtr pScreen) fbdevSetScreenSizes (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver; FbdevScrPriv *scrpriv = screen->driver;
KdMouseMatrix m; FbdevPriv *priv = screen->card->driver;
#ifdef FAKE24_ON_16 if (scrpriv->randr & (RR_Rotate_0|RR_Rotate_180))
if (fake24)
{ {
scrpriv->randr = RR_Rotate_0; pScreen->width = priv->var.xres;
scrpriv->shadow = TRUE; pScreen->height = priv->var.yres;
}
else
#endif /* FAKE24_ON_16 */
{
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->mmWidth = screen->width_mm; pScreen->mmWidth = screen->width_mm;
pScreen->mmHeight = screen->height_mm; pScreen->mmHeight = screen->height_mm;
} }
else else
{ {
pScreen->width = screen->height; pScreen->width = priv->var.yres;
pScreen->height = screen->width; pScreen->height = priv->var.xres;
pScreen->mmWidth = screen->height_mm; pScreen->mmWidth = screen->height_mm;
pScreen->mmHeight = screen->width_mm; pScreen->mmHeight = screen->width_mm;
} }
KdSetMouseMatrix (&m);
} }
LayerPtr Bool
fbdevLayerCreate (ScreenPtr pScreen) fbdevUnmapFramebuffer (KdScreenInfo *screen)
{
KdShadowFbFree (screen, 0);
return TRUE;
}
Bool
fbdevSetShadow (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver; FbdevScrPriv *scrpriv = screen->driver;
ShadowUpdateProc update; ShadowUpdateProc update;
ShadowWindowProc window; ShadowWindowProc window;
PixmapPtr pPixmap;
int kind;
if (scrpriv->shadow) window = fbdevWindowLinear;
{ update = 0;
window = fbdevWindowLinear; if (scrpriv->randr)
update = 0; update = shadowUpdateRotatePacked;
#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;
}
else else
{ update = shadowUpdatePacked;
kind = scrpriv->layerKind; return KdShadowSet (pScreen, scrpriv->randr, update, window);
pPixmap = LAYER_SCREEN_PIXMAP;
update = 0;
window = 0;
}
return LayerCreate (pScreen, kind, screen->fb[0].depth,
pPixmap, update, window, scrpriv->randr, 0);
} }
@ -458,29 +346,6 @@ fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
return TRUE; 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 Bool
fbdevRandRSetConfig (ScreenPtr pScreen, fbdevRandRSetConfig (ScreenPtr pScreen,
Rotation randr, Rotation randr,
@ -496,7 +361,6 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
int oldheight; int oldheight;
int oldmmwidth; int oldmmwidth;
int oldmmheight; int oldmmheight;
LayerPtr pNewLayer;
int newwidth, newheight; int newwidth, newheight;
if (screen->randr & (RR_Rotate_0|RR_Rotate_180)) if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
@ -526,34 +390,46 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
scrpriv->randr = KdAddRotation (screen->randr, randr); scrpriv->randr = KdAddRotation (screen->randr, randr);
fbdevConfigureScreen (pScreen); KdOffscreenSwapOut (screen->pScreen);
pNewLayer = fbdevLayerCreate (pScreen); fbdevUnmapFramebuffer (screen);
if (!pNewLayer)
if (!fbdevMapFramebuffer (screen))
goto bail4; goto bail4;
if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
goto bail5;
WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer); if (!fbdevSetShadow (screen->pScreen))
LayerDestroy (pScreen, scrpriv->pLayer); 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); KdSetSubpixelOrder (pScreen, scrpriv->randr);
if (wasEnabled) if (wasEnabled)
KdEnableScreen (pScreen); KdEnableScreen (pScreen);
return TRUE; return TRUE;
bail5:
WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
LayerDestroy (pScreen, pNewLayer);
bail4: bail4:
fbdevUnmapFramebuffer (screen);
*scrpriv = oldscr;
(void) fbdevMapFramebuffer (screen);
pScreen->width = oldwidth; pScreen->width = oldwidth;
pScreen->height = oldheight; pScreen->height = oldheight;
pScreen->mmWidth = oldmmwidth; pScreen->mmWidth = oldmmwidth;
pScreen->mmHeight = oldmmheight; pScreen->mmHeight = oldmmheight;
*scrpriv = oldscr;
if (wasEnabled) if (wasEnabled)
KdEnableScreen (pScreen); KdEnableScreen (pScreen);
return FALSE; return FALSE;
@ -616,27 +492,15 @@ fbdevInitScreen (ScreenPtr pScreen)
#endif #endif
pScreen->CreateColormap = fbdevCreateColormap; pScreen->CreateColormap = fbdevCreateColormap;
if (!LayerStartInit (pScreen))
return FALSE;
return TRUE; return TRUE;
} }
Bool Bool
fbdevFinishInitScreen (ScreenPtr pScreen) fbdevFinishInitScreen (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); if (!shadowSetup (pScreen))
FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
scrpriv->layerKind = LayerNewKind (pScreen);
if (!LayerFinishInit (pScreen))
return FALSE; return FALSE;
scrpriv->pLayer = fbdevLayerCreate (pScreen);
if (!scrpriv->pLayer)
return FALSE;
#ifdef RANDR #ifdef RANDR
if (!fbdevRandRInit (pScreen)) if (!fbdevRandRInit (pScreen))
return FALSE; return FALSE;
@ -645,6 +509,13 @@ fbdevFinishInitScreen (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
Bool
fbdevCreateResources (ScreenPtr pScreen)
{
return fbdevSetShadow (pScreen);
}
void void
fbdevPreserve (KdCardInfo *card) fbdevPreserve (KdCardInfo *card)
{ {

View File

@ -30,7 +30,6 @@
#include <unistd.h> #include <unistd.h>
#include <sys/mman.h> #include <sys/mman.h>
#include "kdrive.h" #include "kdrive.h"
#include "layer.h"
#ifdef RANDR #ifdef RANDR
#include "randrstr.h" #include "randrstr.h"
@ -50,8 +49,7 @@ typedef struct _fbdevPriv {
typedef struct _fbdevScrPriv { typedef struct _fbdevScrPriv {
Rotation randr; Rotation randr;
Bool shadow; Bool shadow;
int layerKind; PixmapPtr pShadow;
LayerPtr pLayer;
} FbdevScrPriv; } FbdevScrPriv;
extern KdCardFuncs fbdevFuncs; extern KdCardFuncs fbdevFuncs;
@ -71,6 +69,12 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv);
Bool Bool
fbdevInitScreen (ScreenPtr pScreen); fbdevInitScreen (ScreenPtr pScreen);
Bool
fbdevFinishInitScreen (ScreenPtr pScreen);
Bool
fbdevCreateResources (ScreenPtr pScreen);
void void
fbdevPreserve (KdCardInfo *card); fbdevPreserve (KdCardInfo *card);
@ -99,6 +103,40 @@ void
fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
Bool 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_ */ #endif /* _FBDEV_H_ */

View File

@ -63,6 +63,8 @@ KdCardFuncs fbdevFuncs = {
fbdevCardInit, /* cardinit */ fbdevCardInit, /* cardinit */
fbdevScreenInit, /* scrinit */ fbdevScreenInit, /* scrinit */
fbdevInitScreen, /* initScreen */ fbdevInitScreen, /* initScreen */
fbdevFinishInitScreen, /* finishInitScreen */
fbdevCreateResources, /* createRes */
fbdevPreserve, /* preserve */ fbdevPreserve, /* preserve */
fbdevEnable, /* enable */ fbdevEnable, /* enable */
fbdevDPMS, /* dpms */ fbdevDPMS, /* dpms */
@ -85,6 +87,4 @@ KdCardFuncs fbdevFuncs = {
fbdevGetColors, /* getColors */ fbdevGetColors, /* getColors */
fbdevPutColors, /* putColors */ fbdevPutColors, /* putColors */
fbdevFinishInitScreen, /* finishInitScreen */
}; };

View File

@ -1,16 +1,18 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/hw/kdrive/src \ @KDRIVE_INCS@ \
-I$(top_srcdir)/mi \ @XSERVER_CFLAGS@
-I$(top_srcdir)/fb \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
noinst_LIBRARIES = liblinux.a noinst_LIBRARIES = liblinux.a
if TSLIB
TSLIB_C = tslib.c
endif
if H3600_TS
TS_C = ts.c
endif
liblinux_a_SOURCES = \ liblinux_a_SOURCES = \
agp.c \ agp.c \
bus.c \ bus.c \
@ -18,12 +20,18 @@ liblinux_a_SOURCES = \
linux.c \ linux.c \
mouse.c \ mouse.c \
ms.c \ ms.c \
ps2.c ps2.c \
$(TSLIB_C) \
$(TS_C)
if TSLIB liblinux_a_DEPENDENCIES = \
liblinux_a_SOURCES += tslib.c agp.c \
endif 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

View File

@ -87,7 +87,7 @@ static int acquiredScreen = -1;
*/ */
static Bool static Bool
GARTInit() GARTInit(void)
{ {
static Bool initDone = FALSE; static Bool initDone = FALSE;
struct _agp_info agpinf; struct _agp_info agpinf;

View File

@ -35,7 +35,7 @@
/* /dev/adbmouse is a busmouse */ /* /dev/adbmouse is a busmouse */
void static void
BusRead (int adbPort, void *closure) BusRead (int adbPort, void *closure)
{ {
unsigned char buf[3]; unsigned char buf[3];
@ -68,7 +68,7 @@ char *BusNames[] = {
int BusInputType; int BusInputType;
int static int
BusInit (void) BusInit (void)
{ {
int i; int i;
@ -89,7 +89,7 @@ BusInit (void)
return n; return n;
} }
void static void
BusFini (void) BusFini (void)
{ {
KdUnregisterFds (BusInputType, TRUE); KdUnregisterFds (BusInputType, TRUE);

View File

@ -112,7 +112,7 @@ static unsigned char tbl[KD_MAX_WIDTH] =
}; };
static void static void
readKernelMapping() readKernelMapping(void)
{ {
KeySym *k; KeySym *k;
int i, j; int i, j;
@ -373,13 +373,13 @@ readKernelMapping()
kdMaxScanCode = maxKeyCode; kdMaxScanCode = maxKeyCode;
} }
void static void
LinuxKeyboardLoad (void) LinuxKeyboardLoad (void)
{ {
readKernelMapping (); readKernelMapping ();
} }
void static void
LinuxKeyboardRead (int fd, void *closure) LinuxKeyboardRead (int fd, void *closure)
{ {
unsigned char buf[256], *b; unsigned char buf[256], *b;
@ -400,7 +400,7 @@ static int LinuxKbdTrans;
static struct termios LinuxTermios; static struct termios LinuxTermios;
static int LinuxKbdType; static int LinuxKbdType;
int static int
LinuxKeyboardEnable (int fd, void *closure) LinuxKeyboardEnable (int fd, void *closure)
{ {
struct termios nTty; struct termios nTty;
@ -429,14 +429,14 @@ LinuxKeyboardEnable (int fd, void *closure)
return fd; return fd;
} }
void static void
LinuxKeyboardDisable (int fd, void *closure) LinuxKeyboardDisable (int fd, void *closure)
{ {
ioctl(LinuxConsoleFd, KDSKBMODE, LinuxKbdTrans); ioctl(LinuxConsoleFd, KDSKBMODE, LinuxKbdTrans);
tcsetattr(LinuxConsoleFd, TCSANOW, &LinuxTermios); tcsetattr(LinuxConsoleFd, TCSANOW, &LinuxTermios);
} }
int static int
LinuxKeyboardInit (void) LinuxKeyboardInit (void)
{ {
if (!LinuxKbdType) if (!LinuxKbdType)
@ -450,20 +450,20 @@ LinuxKeyboardInit (void)
return 1; return 1;
} }
void static void
LinuxKeyboardFini (void) LinuxKeyboardFini (void)
{ {
LinuxKeyboardDisable (LinuxConsoleFd, 0); LinuxKeyboardDisable (LinuxConsoleFd, 0);
KdUnregisterFds (LinuxKbdType, FALSE); KdUnregisterFds (LinuxKbdType, FALSE);
} }
void static void
LinuxKeyboardLeds (int leds) LinuxKeyboardLeds (int leds)
{ {
ioctl (LinuxConsoleFd, KDSETLED, leds & 7); ioctl (LinuxConsoleFd, KDSETLED, leds & 7);
} }
void static void
LinuxKeyboardBell (int volume, int pitch, int duration) LinuxKeyboardBell (int volume, int pitch, int duration)
{ {
if (volume && pitch) if (volume && pitch)

View File

@ -65,7 +65,7 @@ LinuxCheckChown (char *file)
} }
static int static int
LinuxInit () LinuxInit (void)
{ {
int fd = -1; int fd = -1;
char vtname[11]; char vtname[11];

View File

@ -46,7 +46,7 @@ typedef struct _kbufio {
int used; int used;
} Kbufio; } Kbufio;
Bool static Bool
MouseWaitForReadable (int fd, int timeout) MouseWaitForReadable (int fd, int timeout)
{ {
fd_set set; fd_set set;
@ -69,7 +69,7 @@ MouseWaitForReadable (int fd, int timeout)
return FALSE; return FALSE;
} }
int static int
MouseReadByte (Kbufio *b, int timeout) MouseReadByte (Kbufio *b, int timeout)
{ {
int n; int n;
@ -89,7 +89,8 @@ MouseReadByte (Kbufio *b, int timeout)
return b->buf[b->used++]; return b->buf[b->used++];
} }
int #if NOTUSED
static int
MouseFlush (Kbufio *b, char *buf, int size) MouseFlush (Kbufio *b, char *buf, int size)
{ {
CARD32 now = GetTimeInMillis (); CARD32 now = GetTimeInMillis ();
@ -115,7 +116,7 @@ MouseFlush (Kbufio *b, char *buf, int size)
return n; return n;
} }
int static int
MousePeekByte (Kbufio *b, int timeout) MousePeekByte (Kbufio *b, int timeout)
{ {
int c; int c;
@ -125,8 +126,9 @@ MousePeekByte (Kbufio *b, int timeout)
--b->used; --b->used;
return c; return c;
} }
#endif /* NOTUSED */
Bool static Bool
MouseWaitForWritable (int fd, int timeout) MouseWaitForWritable (int fd, int timeout)
{ {
fd_set set; fd_set set;
@ -149,7 +151,7 @@ MouseWaitForWritable (int fd, int timeout)
return FALSE; return FALSE;
} }
Bool static Bool
MouseWriteByte (int fd, unsigned char c, int timeout) MouseWriteByte (int fd, unsigned char c, int timeout)
{ {
int ret; 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) MouseWriteBytes (int fd, unsigned char *c, int n, int timeout)
{ {
while (n--) while (n--)
@ -708,7 +710,7 @@ static const KmouseProt *kmouseProts[] = {
#define NUM_PROT (sizeof (kmouseProts) / sizeof (kmouseProts[0])) #define NUM_PROT (sizeof (kmouseProts) / sizeof (kmouseProts[0]))
void static void
MouseInitProtocol (Kmouse *km) MouseInitProtocol (Kmouse *km)
{ {
int ret; int ret;
@ -736,7 +738,7 @@ MouseInitProtocol (Kmouse *km)
km->state = km->prot->state; km->state = km->prot->state;
} }
void static void
MouseFirstProtocol (Kmouse *km, char *prot) MouseFirstProtocol (Kmouse *km, char *prot)
{ {
if (prot) if (prot)
@ -772,7 +774,7 @@ MouseFirstProtocol (Kmouse *km, char *prot)
MouseInitProtocol (km); MouseInitProtocol (km);
} }
void static void
MouseNextProtocol (Kmouse *km) MouseNextProtocol (Kmouse *km)
{ {
do do
@ -787,7 +789,7 @@ MouseNextProtocol (Kmouse *km)
ErrorF ("Switching to mouse protocol \"%s\"\n", km->prot->name); ErrorF ("Switching to mouse protocol \"%s\"\n", km->prot->name);
} }
void static void
MouseRead (int mousePort, void *closure) MouseRead (int mousePort, void *closure)
{ {
KdMouseInfo *mi = closure; KdMouseInfo *mi = closure;
@ -911,7 +913,7 @@ char *kdefaultMouse[] = {
#define NUM_DEFAULT_MOUSE (sizeof (kdefaultMouse) / sizeof (kdefaultMouse[0])) #define NUM_DEFAULT_MOUSE (sizeof (kdefaultMouse) / sizeof (kdefaultMouse[0]))
Bool static Bool
MouseInit (void) MouseInit (void)
{ {
int i; int i;
@ -968,7 +970,7 @@ MouseInit (void)
return TRUE; return TRUE;
} }
void static void
MouseFini (void) MouseFini (void)
{ {
KdMouseInfo *mi; KdMouseInfo *mi;

View File

@ -35,7 +35,7 @@ THE SOFTWARE.
#include "scrnintstr.h" #include "scrnintstr.h"
#include "kdrive.h" #include "kdrive.h"
int static int
MsReadBytes (int fd, char *buf, int len, int min) MsReadBytes (int fd, char *buf, int len, int min)
{ {
int n, tot; int n, tot;
@ -65,7 +65,7 @@ MsReadBytes (int fd, char *buf, int len, int min)
return tot; return tot;
} }
void static void
MsRead (int port, void *closure) MsRead (int port, void *closure)
{ {
unsigned char buf[3 * 200]; unsigned char buf[3 * 200];
@ -97,7 +97,7 @@ MsRead (int port, void *closure)
int MsInputType; int MsInputType;
int static int
MsInit (void) MsInit (void)
{ {
int port; int port;
@ -151,7 +151,7 @@ MsInit (void)
return 0; return 0;
} }
void static void
MsFini (void) MsFini (void)
{ {
KdUnregisterFds (MsInputType, TRUE); KdUnregisterFds (MsInputType, TRUE);

View File

@ -33,7 +33,7 @@
#include "scrnintstr.h" #include "scrnintstr.h"
#include "kdrive.h" #include "kdrive.h"
int static int
Ps2ReadBytes (int fd, char *buf, int len, int min) Ps2ReadBytes (int fd, char *buf, int len, int min)
{ {
int n, tot; int n, tot;
@ -71,7 +71,7 @@ char *Ps2Names[] = {
#define NUM_PS2_NAMES (sizeof (Ps2Names) / sizeof (Ps2Names[0])) #define NUM_PS2_NAMES (sizeof (Ps2Names) / sizeof (Ps2Names[0]))
void static void
Ps2Read (int ps2Port, void *closure) Ps2Read (int ps2Port, void *closure)
{ {
unsigned char buf[3 * 200]; unsigned char buf[3 * 200];
@ -119,7 +119,7 @@ Ps2Read (int ps2Port, void *closure)
int Ps2InputType; int Ps2InputType;
int static int
Ps2Init (void) Ps2Init (void)
{ {
int i; int i;
@ -141,7 +141,7 @@ Ps2Init (void)
return n; return n;
} }
void static void
Ps2Fini (void) Ps2Fini (void)
{ {
KdUnregisterFds (Ps2InputType, TRUE); KdUnregisterFds (Ps2InputType, TRUE);

View File

@ -1,14 +1,7 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/linux \
-I$(top_srcdir)/hw/kdrive/vesa \ -I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \ @XSERVER_CFLAGS@
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
bin_PROGRAMS = Xmach64 bin_PROGRAMS = Xmach64
@ -22,28 +15,16 @@ libmach64_a_SOURCES = \
mach64.h \ mach64.h \
mach64draw.h mach64draw.h
Xmach64_SOURCES = \ Xmach64_SOURCES = \
mach64stub.c mach64stub.c
Xmach64_LDADD = \ MACH64_LIBS = \
libmach64.a \ libmach64.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \ $(top_builddir)/hw/kdrive/vesa/libvesa.a
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \ Xmach64_LDADD = \
$(top_builddir)/miext/layer/liblayer.a \ $(MACH64_LIBS) \
$(top_builddir)/hw/kdrive/src/libkdrive.a \ @KDRIVE_LIBS@ \
$(top_builddir)/hw/kdrive/linux/liblinux.a \ @XSERVER_LIBS@
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \ Xmach64_DEPENDENCIES = $(MACH64_LIBS) @KDRIVE_LIBS@
$(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

View File

@ -27,7 +27,7 @@
#include "mach64.h" #include "mach64.h"
#include <sys/io.h> #include <sys/io.h>
Bool static Bool
mach64CardInit (KdCardInfo *card) mach64CardInit (KdCardInfo *card)
{ {
Mach64CardInfo *mach64c; Mach64CardInfo *mach64c;
@ -50,12 +50,11 @@ mach64CardInit (KdCardInfo *card)
return TRUE; return TRUE;
} }
Bool static Bool
mach64ScreenInit (KdScreenInfo *screen) mach64ScreenInit (KdScreenInfo *screen)
{ {
Mach64CardInfo *mach64c = screen->card->driver; Mach64CardInfo *mach64c = screen->card->driver;
Mach64ScreenInfo *mach64s; Mach64ScreenInfo *mach64s;
int screen_size, memory;
mach64s = (Mach64ScreenInfo *) xalloc (sizeof (Mach64ScreenInfo)); mach64s = (Mach64ScreenInfo *) xalloc (sizeof (Mach64ScreenInfo));
if (!mach64s) if (!mach64s)
@ -70,7 +69,6 @@ mach64ScreenInit (KdScreenInfo *screen)
screen->dumb = TRUE; screen->dumb = TRUE;
if (mach64s->vesa.mapping != VESA_LINEAR) if (mach64s->vesa.mapping != VESA_LINEAR)
screen->dumb = TRUE; screen->dumb = TRUE;
screen->memory_base = mach64s->vesa.fb;
switch (screen->fb[0].depth) { switch (screen->fb[0].depth) {
case 8: case 8:
mach64s->colorKey = 0xff; mach64s->colorKey = 0xff;
@ -86,30 +84,21 @@ mach64ScreenInit (KdScreenInfo *screen)
mach64s->colorKey = 1; mach64s->colorKey = 1;
break; 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; screen->driver = mach64s;
return TRUE; return TRUE;
} }
Bool static Bool
mach64InitScreen (ScreenPtr pScreen) mach64InitScreen (ScreenPtr pScreen)
{ {
#ifdef XV #ifdef XV
KdScreenPriv(pScreen); mach64InitVideo(pScreen);
Mach64CardInfo *mach64c = pScreenPriv->screen->card->driver;
if (mach64c->media_reg && mach64c->reg)
mach64InitVideo(pScreen);
#endif #endif
return vesaInitScreen (pScreen); return vesaInitScreen (pScreen);
} }
#ifdef RANDR #ifdef RANDR
Bool static Bool
mach64RandRSetConfig (ScreenPtr pScreen, mach64RandRSetConfig (ScreenPtr pScreen,
Rotation rotation, Rotation rotation,
int rate, int rate,
@ -123,7 +112,7 @@ mach64RandRSetConfig (ScreenPtr pScreen,
return TRUE; return TRUE;
} }
void static void
mach64RandRInit (ScreenPtr pScreen) mach64RandRInit (ScreenPtr pScreen)
{ {
rrScrPriv(pScreen); rrScrPriv(pScreen);
@ -132,7 +121,7 @@ mach64RandRInit (ScreenPtr pScreen)
} }
#endif #endif
Bool static Bool
mach64FinishInitScreen (ScreenPtr pScreen) mach64FinishInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -143,6 +132,12 @@ mach64FinishInitScreen (ScreenPtr pScreen)
return ret; return ret;
} }
static Bool
mach64CreateResources (ScreenPtr pScreen)
{
return vesaCreateResources (pScreen);
}
CARD32 CARD32
mach64ReadLCD (Reg *reg, int id) mach64ReadLCD (Reg *reg, int id)
{ {
@ -367,7 +362,7 @@ mach64DPMS (ScreenPtr pScreen, int mode)
return TRUE; return TRUE;
} }
void static void
mach64Restore (KdCardInfo *card) mach64Restore (KdCardInfo *card)
{ {
Mach64CardInfo *mach64c = card->driver; Mach64CardInfo *mach64c = card->driver;
@ -381,23 +376,26 @@ mach64Restore (KdCardInfo *card)
vesaRestore (card); vesaRestore (card);
} }
void static void
mach64ScreenFini (KdScreenInfo *screen) mach64ScreenFini (KdScreenInfo *screen)
{ {
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver; Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
#ifdef XV
mach64FiniVideo(screen->pScreen);
#endif
vesaScreenFini (screen); vesaScreenFini (screen);
xfree (mach64s); xfree (mach64s);
screen->driver = 0; screen->driver = 0;
} }
void static void
mach64CardFini (KdCardInfo *card) mach64CardFini (KdCardInfo *card)
{ {
Mach64CardInfo *mach64c = card->driver; Mach64CardInfo *mach64c = card->driver;
mach64UnmapReg (card, mach64c); mach64UnmapReg (card, mach64c);
vesaCardFini (card); vesaCardFini (card);
xfree (mach64c);
} }
#define mach64CursorInit 0 /* initCursor */ #define mach64CursorInit 0 /* initCursor */
@ -410,6 +408,8 @@ KdCardFuncs mach64Funcs = {
mach64CardInit, /* cardinit */ mach64CardInit, /* cardinit */
mach64ScreenInit, /* scrinit */ mach64ScreenInit, /* scrinit */
mach64InitScreen, /* initScreen */ mach64InitScreen, /* initScreen */
mach64FinishInitScreen, /* finishInitScreen */
mach64CreateResources, /* createRes */
mach64Preserve, /* preserve */ mach64Preserve, /* preserve */
mach64Enable, /* enable */ mach64Enable, /* enable */
mach64DPMS, /* dpms */ mach64DPMS, /* dpms */
@ -432,6 +432,4 @@ KdCardFuncs mach64Funcs = {
vesaGetColors, /* getColors */ vesaGetColors, /* getColors */
vesaPutColors, /* putColors */ vesaPutColors, /* putColors */
mach64FinishInitScreen, /* finishInitScreen */
}; };

View File

@ -557,6 +557,7 @@ typedef struct _mach64PortPriv {
} Mach64PortPrivRec, *Mach64PortPrivPtr; } Mach64PortPrivRec, *Mach64PortPrivPtr;
Bool mach64InitVideo(ScreenPtr pScreen); Bool mach64InitVideo(ScreenPtr pScreen);
void mach64FiniVideo(ScreenPtr pScreen);
typedef struct _mach64ScreenInfo { typedef struct _mach64ScreenInfo {
VesaScreenPrivRec vesa; VesaScreenPrivRec vesa;

View File

@ -64,6 +64,10 @@ CARD8 mach64Rop[16] = {
#define MACH64_DRAW_COMBO_SOLID 0x1 #define MACH64_DRAW_COMBO_SOLID 0x1
#define MACH64_DRAW_COMBO_COPY 0x8 #define MACH64_DRAW_COMBO_COPY 0x8
#define SYNC_ALWAYS 0
#if SYNC_ALWAYS
static ScreenPtr mach64Screen;
#endif
static Reg *reg; static Reg *reg;
static CARD32 avail; static CARD32 avail;
static CARD32 triple; static CARD32 triple;
@ -102,6 +106,9 @@ mach64Setup (PixmapPtr pDst, PixmapPtr pSrc, CARD32 combo, int wait)
reg = mach64c->reg; reg = mach64c->reg;
triple = mach64s->bpp24; triple = mach64s->bpp24;
#if SYNC_ALWAYS
mach64Screen = pScreen;
#endif
if (!reg) if (!reg)
return FALSE; return FALSE;
@ -140,7 +147,7 @@ mach64Setup (PixmapPtr pDst, PixmapPtr pSrc, CARD32 combo, int wait)
return TRUE; return TRUE;
} }
Bool static Bool
mach64PrepareSolid (PixmapPtr pPixmap, mach64PrepareSolid (PixmapPtr pPixmap,
int alu, int alu,
Pixel pm, Pixel pm,
@ -154,7 +161,7 @@ mach64PrepareSolid (PixmapPtr pPixmap,
return TRUE; return TRUE;
} }
void static void
mach64Solid (int x1, int y1, int x2, int y2) mach64Solid (int x1, int y1, int x2, int y2)
{ {
if (triple) 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); reg->DST_WIDTH_HEIGHT = MACH64_XY(x2-x1,y2-y1);
} }
void static void
mach64DoneSolid (void) mach64DoneSolid (void)
{ {
#if SYNC_ALWAYS
KdCheckSync (mach64Screen);
#endif
} }
static int copyDx; static int copyDx;
static int copyDy; static int copyDy;
static CARD32 copyCombo; static CARD32 copyCombo;
Bool static Bool
mach64PrepareCopy (PixmapPtr pSrcPixmap, mach64PrepareCopy (PixmapPtr pSrcPixmap,
PixmapPtr pDstPixmap, PixmapPtr pDstPixmap,
int dx, int dx,
@ -217,7 +227,7 @@ mach64PrepareCopy (PixmapPtr pSrcPixmap,
return TRUE; return TRUE;
} }
void static void
mach64Copy (int srcX, mach64Copy (int srcX,
int srcY, int srcY,
int dstX, int dstX,
@ -260,9 +270,12 @@ mach64Copy (int srcX,
reg->DST_HEIGHT_WIDTH = MACH64_YX(w,h); reg->DST_HEIGHT_WIDTH = MACH64_YX(w,h);
} }
void static void
mach64DoneCopy (void) mach64DoneCopy (void)
{ {
#if SYNC_ALWAYS
KdCheckSync (mach64Screen);
#endif
} }
KaaScreenInfoRec mach64Kaa = { KaaScreenInfoRec mach64Kaa = {
@ -449,6 +462,7 @@ mach64DrawDisable (ScreenPtr pScreen)
void void
mach64DrawFini (ScreenPtr pScreen) mach64DrawFini (ScreenPtr pScreen)
{ {
kaaDrawFini (pScreen);
} }
void void

View File

@ -980,7 +980,10 @@ Bool mach64InitVideo(ScreenPtr pScreen)
int num_adaptors; int num_adaptors;
KdCardInfo *card = pScreenPriv->card; KdCardInfo *card = pScreenPriv->card;
Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver; Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
mach64s->pAdaptor = NULL;
if (!mach64c->media_reg) if (!mach64c->media_reg)
return FALSE; return FALSE;
@ -1017,3 +1020,18 @@ Bool mach64InitVideo(ScreenPtr pScreen)
xfree(newAdaptors); xfree(newAdaptors);
return TRUE; 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);
}
}

View File

@ -1,15 +1,7 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/vesa \ -I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/hw/kdrive/linux \ @XSERVER_CFLAGS@
-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)
bin_PROGRAMS = Xmga bin_PROGRAMS = Xmga
@ -24,23 +16,7 @@ Xmga_SOURCES = \
mgastub.c mgastub.c
Xmga_LDADD = \ Xmga_LDADD = \
libmga.a \ libmga.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \ $(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \ @KDRIVE_LIBS@ \
$(top_builddir)/os/libos.a \ @XSERVER_LIBS@
$(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

View File

@ -27,7 +27,7 @@
#endif #endif
#include "mga.h" #include "mga.h"
Bool static Bool
mgaCardInit (KdCardInfo *card) mgaCardInit (KdCardInfo *card)
{ {
MgaCardInfo *mgac; MgaCardInfo *mgac;
@ -51,11 +51,10 @@ mgaCardInit (KdCardInfo *card)
return TRUE; return TRUE;
} }
Bool static Bool
mgaScreenInit (KdScreenInfo *screen) mgaScreenInit (KdScreenInfo *screen)
{ {
MgaScreenInfo *mgas; MgaScreenInfo *mgas;
int screen_size, memory;
mgas = (MgaScreenInfo *) xalloc (sizeof (MgaScreenInfo)); mgas = (MgaScreenInfo *) xalloc (sizeof (MgaScreenInfo));
if (!mgas) if (!mgas)
@ -75,33 +74,17 @@ mgaScreenInit (KdScreenInfo *screen)
fprintf (stderr, "vesa mapping is %d\n", mgas->vesa.mapping); fprintf (stderr, "vesa mapping is %d\n", mgas->vesa.mapping);
#endif #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; screen->driver = mgas;
return TRUE; return TRUE;
} }
Bool static Bool
mgaInitScreen (ScreenPtr pScreen) mgaInitScreen (ScreenPtr pScreen)
{ {
return vesaInitScreen (pScreen); return vesaInitScreen (pScreen);
} }
Bool static Bool
mgaFinishInitScreen (ScreenPtr pScreen) mgaFinishInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -111,7 +94,13 @@ mgaFinishInitScreen (ScreenPtr pScreen)
return ret; return ret;
} }
void static Bool
mgaCreateResources (ScreenPtr pScreen)
{
return vesaCreateResources (pScreen);
}
static void
mgaPreserve (KdCardInfo *card) mgaPreserve (KdCardInfo *card)
{ {
vesaPreserve (card); vesaPreserve (card);
@ -162,14 +151,14 @@ mgaResetMMIO (KdCardInfo *card, MgaCardInfo *mgac)
mgaUnmapReg (card, mgac); mgaUnmapReg (card, mgac);
} }
Bool static Bool
mgaDPMS (ScreenPtr pScreen, int mode) mgaDPMS (ScreenPtr pScreen, int mode)
{ {
/* XXX */ /* XXX */
return TRUE; return TRUE;
} }
Bool static Bool
mgaEnable (ScreenPtr pScreen) mgaEnable (ScreenPtr pScreen)
{ {
KdScreenPriv (pScreen); KdScreenPriv (pScreen);
@ -184,7 +173,7 @@ mgaEnable (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
void static void
mgaDisable (ScreenPtr pScreen) mgaDisable (ScreenPtr pScreen)
{ {
KdScreenPriv (pScreen); KdScreenPriv (pScreen);
@ -195,7 +184,7 @@ mgaDisable (ScreenPtr pScreen)
vesaDisable (pScreen); vesaDisable (pScreen);
} }
void static void
mgaRestore (KdCardInfo *card) mgaRestore (KdCardInfo *card)
{ {
MgaCardInfo *mgac = card->driver; MgaCardInfo *mgac = card->driver;
@ -204,7 +193,7 @@ mgaRestore (KdCardInfo *card)
vesaRestore (card); vesaRestore (card);
} }
void static void
mgaScreenFini (KdScreenInfo *screen) mgaScreenFini (KdScreenInfo *screen)
{ {
MgaScreenInfo *mgas = (MgaScreenInfo *) screen->driver; MgaScreenInfo *mgas = (MgaScreenInfo *) screen->driver;
@ -214,7 +203,7 @@ mgaScreenFini (KdScreenInfo *screen)
screen->driver = 0; screen->driver = 0;
} }
void static void
mgaCardFini (KdCardInfo *card) mgaCardFini (KdCardInfo *card)
{ {
MgaCardInfo *mgac = (MgaCardInfo *)card->driver; MgaCardInfo *mgac = (MgaCardInfo *)card->driver;
@ -227,6 +216,8 @@ KdCardFuncs mgaFuncs = {
mgaCardInit, /* cardinit */ mgaCardInit, /* cardinit */
mgaScreenInit, /* scrinit */ mgaScreenInit, /* scrinit */
mgaInitScreen, /* initScreen */ mgaInitScreen, /* initScreen */
mgaFinishInitScreen, /* finishInitScreen */
mgaCreateResources, /* createRes */
mgaPreserve, /* preserve */ mgaPreserve, /* preserve */
mgaEnable, /* enable */ mgaEnable, /* enable */
mgaDPMS, /* dpms */ mgaDPMS, /* dpms */
@ -249,7 +240,5 @@ KdCardFuncs mgaFuncs = {
vesaGetColors, /* getColors */ vesaGetColors, /* getColors */
vesaPutColors, /* putColors */ vesaPutColors, /* putColors */
mgaFinishInitScreen, /* finishInitScreen */
}; };

View File

@ -51,7 +51,7 @@ int fifo_size;
int pitch, src_pitch; int pitch, src_pitch;
int dir; int dir;
void static void
mgaWaitAvail (int n) mgaWaitAvail (int n)
{ {
if (fifo_size < n) { if (fifo_size < n) {
@ -62,7 +62,7 @@ mgaWaitAvail (int n)
fifo_size -= n; fifo_size -= n;
} }
void static void
mgaWaitIdle (void) mgaWaitIdle (void)
{ {
while (MGA_IN32 (mmio, MGA_REG_STATUS) & 0x10000); while (MGA_IN32 (mmio, MGA_REG_STATUS) & 0x10000);
@ -91,11 +91,10 @@ mgaSetup (ScreenPtr pScreen, int wait)
return TRUE; return TRUE;
} }
Bool static Bool
mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg) mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
{ {
KdScreenPriv(pPixmap->drawable.pScreen); KdScreenPriv(pPixmap->drawable.pScreen);
mgaScreenInfo (pScreenPriv);
int cmd; int cmd;
int dst_org; int dst_org;
@ -115,7 +114,7 @@ mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
return TRUE; return TRUE;
} }
void static void
mgaSolid (int x1, int y1, int x2, int y2) mgaSolid (int x1, int y1, int x2, int y2)
{ {
mgaWaitAvail (2); 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)); MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (y1 << 16) | (y2 - y1));
} }
void static void
mgaDoneSolid (void) mgaDoneSolid (void)
{ {
} }
@ -132,12 +131,11 @@ mgaDoneSolid (void)
#define BLIT_LEFT 1 #define BLIT_LEFT 1
#define BLIT_UP 4 #define BLIT_UP 4
Bool static Bool
mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
int dx, int dy, int alu, Pixel pm) int dx, int dy, int alu, Pixel pm)
{ {
KdScreenPriv(pSrcPixmap->drawable.pScreen); KdScreenPriv(pSrcPixmap->drawable.pScreen);
mgaScreenInfo (pScreenPriv);
int cmd; int cmd;
@ -165,7 +163,7 @@ mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
return TRUE; return TRUE;
} }
void static void
mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h) mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
{ {
int start, end; 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); MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (dstY << 16) | h);
} }
void static void
mgaDoneCopy (void) mgaDoneCopy (void)
{ {
} }

View File

@ -1,13 +1,7 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/vesa \ -I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \ @XSERVER_CFLAGS@
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
bin_PROGRAMS = Xnvidia bin_PROGRAMS = Xnvidia
@ -29,21 +23,5 @@ Xnvidia_SOURCES = \
Xnvidia_LDADD = \ Xnvidia_LDADD = \
libnvidia.a \ libnvidia.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \ $(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \ @KDRIVE_LIBS@ \
$(top_builddir)/os/libos.a \ @XSERVER_LIBS@
$(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

View File

@ -28,7 +28,7 @@
#include "nvidia.h" #include "nvidia.h"
#include <sys/io.h> #include <sys/io.h>
Bool static Bool
nvidiaCardInit (KdCardInfo *card) nvidiaCardInit (KdCardInfo *card)
{ {
NvidiaCardInfo *nvidiac; NvidiaCardInfo *nvidiac;
@ -50,7 +50,7 @@ nvidiaCardInit (KdCardInfo *card)
return TRUE; return TRUE;
} }
Bool static Bool
nvidiaScreenInit (KdScreenInfo *screen) nvidiaScreenInit (KdScreenInfo *screen)
{ {
NvidiaCardInfo *nvidiac = screen->card->driver; NvidiaCardInfo *nvidiac = screen->card->driver;
@ -96,7 +96,7 @@ nvidiaScreenInit (KdScreenInfo *screen)
return TRUE; return TRUE;
} }
Bool static Bool
nvidiaInitScreen (ScreenPtr pScreen) nvidiaInitScreen (ScreenPtr pScreen)
{ {
#if 0 #if 0
@ -111,13 +111,12 @@ nvidiaInitScreen (ScreenPtr pScreen)
} }
#ifdef RANDR #ifdef RANDR
static Bool
nvidiaRandRSetConfig (ScreenPtr pScreen, nvidiaRandRSetConfig (ScreenPtr pScreen,
Rotation rotation, Rotation rotation,
int rate, int rate,
RRScreenSizePtr pSize) RRScreenSizePtr pSize)
{ {
KdScreenPriv(pScreen);
KdCheckSync (pScreen); KdCheckSync (pScreen);
if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize)) if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
@ -126,7 +125,7 @@ nvidiaRandRSetConfig (ScreenPtr pScreen,
return TRUE; return TRUE;
} }
void static void
nvidiaRandRInit (ScreenPtr pScreen) nvidiaRandRInit (ScreenPtr pScreen)
{ {
rrScrPriv(pScreen); rrScrPriv(pScreen);
@ -135,7 +134,7 @@ nvidiaRandRInit (ScreenPtr pScreen)
} }
#endif #endif
Bool static Bool
nvidiaFinishInitScreen (ScreenPtr pScreen) nvidiaFinishInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -149,8 +148,6 @@ nvidiaFinishInitScreen (ScreenPtr pScreen)
void void
nvidiaPreserve (KdCardInfo *card) nvidiaPreserve (KdCardInfo *card)
{ {
NvidiaCardInfo *nvidiac = card->driver;
vesaPreserve(card); vesaPreserve(card);
} }
@ -198,7 +195,7 @@ static void vgaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
LEAVE (); LEAVE ();
} }
void nvidiaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock) static void nvidiaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
{ {
if (NVIDIA_IS_3(nvidiac)) if (NVIDIA_IS_3(nvidiac))
nvidiaSetIndex (nvidiac, 0x3c4, 0x3c5, 0x06, lock ? 0x99 : 0x57); nvidiaSetIndex (nvidiac, 0x3c4, 0x3c5, 0x06, lock ? 0x99 : 0x57);
@ -276,7 +273,6 @@ nvidiaEnable (ScreenPtr pScreen)
return FALSE; return FALSE;
nvidiaSetMMIO (pScreenPriv->card, nvidiac); nvidiaSetMMIO (pScreenPriv->card, nvidiac);
nvidiaDPMS (pScreen, KD_DPMS_NORMAL);
#ifdef XV #ifdef XV
KdXVEnable (pScreen); KdXVEnable (pScreen);
#endif #endif
@ -296,13 +292,13 @@ nvidiaDisable (ScreenPtr pScreen)
vesaDisable (pScreen); vesaDisable (pScreen);
} }
Bool static Bool
nvidiaDPMS (ScreenPtr pScreen, int mode) nvidiaDPMS (ScreenPtr pScreen, int mode)
{ {
return vesaDPMS (pScreen, mode); return vesaDPMS (pScreen, mode);
} }
void static void
nvidiaRestore (KdCardInfo *card) nvidiaRestore (KdCardInfo *card)
{ {
NvidiaCardInfo *nvidiac = card->driver; NvidiaCardInfo *nvidiac = card->driver;
@ -311,7 +307,7 @@ nvidiaRestore (KdCardInfo *card)
vesaRestore (card); vesaRestore (card);
} }
void static void
nvidiaScreenFini (KdScreenInfo *screen) nvidiaScreenFini (KdScreenInfo *screen)
{ {
NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver; NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
@ -321,7 +317,7 @@ nvidiaScreenFini (KdScreenInfo *screen)
screen->driver = 0; screen->driver = 0;
} }
void static void
nvidiaCardFini (KdCardInfo *card) nvidiaCardFini (KdCardInfo *card)
{ {
NvidiaCardInfo *nvidiac = card->driver; NvidiaCardInfo *nvidiac = card->driver;
@ -340,6 +336,8 @@ KdCardFuncs nvidiaFuncs = {
nvidiaCardInit, /* cardinit */ nvidiaCardInit, /* cardinit */
nvidiaScreenInit, /* scrinit */ nvidiaScreenInit, /* scrinit */
nvidiaInitScreen, /* initScreen */ nvidiaInitScreen, /* initScreen */
nvidiaFinishInitScreen, /* finishInitScreen */
vesaCreateResources, /* createRes */
nvidiaPreserve, /* preserve */ nvidiaPreserve, /* preserve */
nvidiaEnable, /* enable */ nvidiaEnable, /* enable */
nvidiaDPMS, /* dpms */ nvidiaDPMS, /* dpms */
@ -362,6 +360,4 @@ KdCardFuncs nvidiaFuncs = {
vesaGetColors, /* getColors */ vesaGetColors, /* getColors */
vesaPutColors, /* putColors */ vesaPutColors, /* putColors */
nvidiaFinishInitScreen, /* finishInitScreen */
}; };

View File

@ -26,6 +26,7 @@
#define _NVIDIA_H_ #define _NVIDIA_H_
#include <vesa.h> #include <vesa.h>
#include "kxv.h" #include "kxv.h"
#include "klinux.h"
/* /*
* offset from ioport beginning * offset from ioport beginning

View File

@ -81,19 +81,18 @@ nvidiaWaitIdle (NvidiaCardInfo *card)
} }
} }
Bool static Bool
nvidiaPrepareSolid (DrawablePtr pDrawable, nvidiaPrepareSolid (PixmapPtr pPixmap,
int alu, int alu,
Pixel pm, Pixel pm,
Pixel fg) Pixel fg)
{ {
ScreenPtr pScreen = pDrawable->pScreen; ScreenPtr pScreen = pPixmap->drawable.pScreen;
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv); nvidiaCardInfo(pScreenPriv);
card = nvidiac; card = nvidiac;
if (~pm & FbFullMask(pDrawable->depth)) if (~pm & FbFullMask(pPixmap->drawable.depth))
return FALSE; return FALSE;
nvidiaWait (nvidiac, &nvidiac->rop->FifoFree, 1); nvidiaWait (nvidiac, &nvidiac->rop->FifoFree, 1);
nvidiac->rop->Rop3 = nvidiaRop[alu]; nvidiac->rop->Rop3 = nvidiaRop[alu];
@ -102,7 +101,7 @@ nvidiaPrepareSolid (DrawablePtr pDrawable,
return TRUE; return TRUE;
} }
void static void
nvidiaSolid (int x1, int y1, int x2, int y2) nvidiaSolid (int x1, int y1, int x2, int y2)
{ {
nvidiaWait (card, &card->rect->FifoFree, 2); 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); card->rect->WidthHeight = NVIDIA_XY(x2-x1,y2-y1);
} }
void static void
nvidiaDoneSolid (void) nvidiaDoneSolid (void)
{ {
} }
Bool static Bool
nvidiaPrepareCopy (DrawablePtr pSrcDrawable, nvidiaPrepareCopy (PixmapPtr pSrcPixmap,
DrawablePtr pDstDrawable, PixmapPtr pDstPixmap,
int dx, int dx,
int dy, int dy,
int alu, int alu,
Pixel pm) Pixel pm)
{ {
ScreenPtr pScreen = pDstDrawable->pScreen; ScreenPtr pScreen = pDstPixmap->drawable.pScreen;
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv); nvidiaCardInfo(pScreenPriv);
card = nvidiac; card = nvidiac;
if (~pm & FbFullMask(pDstDrawable->depth)) if (~pm & FbFullMask(pDstPixmap->drawable.depth))
return FALSE; return FALSE;
nvidiaWait (nvidiac, &card->rop->FifoFree, 1); nvidiaWait (nvidiac, &card->rop->FifoFree, 1);
nvidiac->rop->Rop3 = nvidiaRop[alu]; nvidiac->rop->Rop3 = nvidiaRop[alu];
return TRUE; return TRUE;
} }
void static void
nvidiaCopy (int srcX, nvidiaCopy (int srcX,
int srcY, int srcY,
int dstX, int dstX,
@ -151,7 +149,7 @@ nvidiaCopy (int srcX,
card->blt->WidthHeight = NVIDIA_XY(w, h); card->blt->WidthHeight = NVIDIA_XY(w, h);
} }
void static void
nvidiaDoneCopy (void) nvidiaDoneCopy (void)
{ {
} }
@ -170,9 +168,8 @@ Bool
nvidiaDrawInit (ScreenPtr pScreen) nvidiaDrawInit (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv); nvidiaCardInfo(pScreenPriv);
Bool ret; Bool ret = TRUE;
ENTER (); ENTER ();
if (pScreenPriv->screen->fb[0].depth == 4) if (pScreenPriv->screen->fb[0].depth == 4)
@ -213,7 +210,6 @@ void
nvidiaDrawEnable (ScreenPtr pScreen) nvidiaDrawEnable (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
nvidiaScreenInfo(pScreenPriv);
nvidiaCardInfo(pScreenPriv); nvidiaCardInfo(pScreenPriv);
ENTER (); ENTER ();

View File

@ -1,14 +1,7 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/vesa \ -I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/include \ @XSERVER_CFLAGS@
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
bin_PROGRAMS = Xr128 bin_PROGRAMS = Xr128
@ -25,21 +18,5 @@ Xr128_SOURCES = \
Xr128_LDADD = \ Xr128_LDADD = \
libr128.a \ libr128.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \ $(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \ @KDRIVE_LIBS@ \
$(top_builddir)/os/libos.a \ @XSERVER_LIBS@
$(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

View File

@ -27,7 +27,7 @@
#endif #endif
#include "r128.h" #include "r128.h"
Bool static Bool
r128CardInit (KdCardInfo *card) r128CardInit (KdCardInfo *card)
{ {
R128CardInfo *r128c; R128CardInfo *r128c;
@ -51,10 +51,9 @@ r128CardInit (KdCardInfo *card)
return TRUE; return TRUE;
} }
Bool static Bool
r128ScreenInit (KdScreenInfo *screen) r128ScreenInit (KdScreenInfo *screen)
{ {
R128CardInfo *r128c = screen->card->driver;
R128ScreenInfo *r128s; R128ScreenInfo *r128s;
int screen_size, memory; int screen_size, memory;
@ -96,13 +95,13 @@ r128ScreenInit (KdScreenInfo *screen)
return TRUE; return TRUE;
} }
Bool static Bool
r128InitScreen (ScreenPtr pScreen) r128InitScreen (ScreenPtr pScreen)
{ {
return vesaInitScreen (pScreen); return vesaInitScreen (pScreen);
} }
Bool static Bool
r128FinishInitScreen (ScreenPtr pScreen) r128FinishInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -112,11 +111,9 @@ r128FinishInitScreen (ScreenPtr pScreen)
return ret; return ret;
} }
void static void
r128Preserve (KdCardInfo *card) r128Preserve (KdCardInfo *card)
{ {
R128CardInfo *r128c = card->driver;
vesaPreserve (card); vesaPreserve (card);
} }
@ -164,7 +161,15 @@ r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c)
r128UnmapReg (card, r128c); r128UnmapReg (card, r128c);
} }
Bool
static Bool
r128DPMS (ScreenPtr pScreen, int mode)
{
/* XXX */
return TRUE;
}
static Bool
r128Enable (ScreenPtr pScreen) r128Enable (ScreenPtr pScreen)
{ {
KdScreenPriv (pScreen); KdScreenPriv (pScreen);
@ -179,7 +184,7 @@ r128Enable (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
void static void
r128Disable (ScreenPtr pScreen) r128Disable (ScreenPtr pScreen)
{ {
KdScreenPriv (pScreen); KdScreenPriv (pScreen);
@ -189,14 +194,7 @@ r128Disable (ScreenPtr pScreen)
vesaDisable (pScreen); vesaDisable (pScreen);
} }
Bool static void
r128DPMS (ScreenPtr pScreen, int mode)
{
/* XXX */
return TRUE;
}
void
r128Restore (KdCardInfo *card) r128Restore (KdCardInfo *card)
{ {
R128CardInfo *r128c = card->driver; R128CardInfo *r128c = card->driver;
@ -205,7 +203,7 @@ r128Restore (KdCardInfo *card)
vesaRestore (card); vesaRestore (card);
} }
void static void
r128ScreenFini (KdScreenInfo *screen) r128ScreenFini (KdScreenInfo *screen)
{ {
R128ScreenInfo *r128s = (R128ScreenInfo *) screen->driver; R128ScreenInfo *r128s = (R128ScreenInfo *) screen->driver;
@ -215,7 +213,7 @@ r128ScreenFini (KdScreenInfo *screen)
screen->driver = 0; screen->driver = 0;
} }
void static void
r128CardFini (KdCardInfo *card) r128CardFini (KdCardInfo *card)
{ {
R128CardInfo *r128c = (R128CardInfo *)card->driver; R128CardInfo *r128c = (R128CardInfo *)card->driver;
@ -228,6 +226,8 @@ KdCardFuncs r128Funcs = {
r128CardInit, /* cardinit */ r128CardInit, /* cardinit */
r128ScreenInit, /* scrinit */ r128ScreenInit, /* scrinit */
r128InitScreen, /* initScreen */ r128InitScreen, /* initScreen */
r128FinishInitScreen, /* finishInitScreen */
vesaCreateResources,/* createRes */
r128Preserve, /* preserve */ r128Preserve, /* preserve */
r128Enable, /* enable */ r128Enable, /* enable */
r128DPMS, /* dpms */ r128DPMS, /* dpms */
@ -250,7 +250,5 @@ KdCardFuncs r128Funcs = {
vesaGetColors, /* getColors */ vesaGetColors, /* getColors */
vesaPutColors, /* putColors */ vesaPutColors, /* putColors */
r128FinishInitScreen, /* finishInitScreen */
}; };

View File

@ -45,6 +45,10 @@
#define R128_REG_PC_NGUI_CTLSTAT 0x0184 #define R128_REG_PC_NGUI_CTLSTAT 0x0184
#define R128_REG_DST_HEIGHT_WIDTH 0x143c #define R128_REG_DST_HEIGHT_WIDTH 0x143c
#define R128_REG_SRC_Y_X 0x1434 #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_DST_DATATYPE_SHIFT 8
#define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28) #define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28)
@ -57,6 +61,8 @@
#define R128_GUI_ACTIVE (1 << 31) #define R128_GUI_ACTIVE (1 << 31)
#define R128_PC_BUSY (1 << 31) #define R128_PC_BUSY (1 << 31)
#define R128_DP_SRC_SOURCE_MEMORY (2 << 24) #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 CARD8 VOL8;
typedef volatile CARD16 VOL16; typedef volatile CARD16 VOL16;

View File

@ -69,11 +69,9 @@ int copydx, copydy;
int fifo_size; int fifo_size;
char *mmio; char *mmio;
void static void
r128WaitAvail (int n) r128WaitAvail (int n)
{ {
int i;
if (fifo_size < n) if (fifo_size < n)
{ {
while ((fifo_size = R128_IN32 (mmio, R128_REG_GUI_STAT) & 0xfff) < n) while ((fifo_size = R128_IN32 (mmio, R128_REG_GUI_STAT) & 0xfff) < n)
@ -83,7 +81,7 @@ r128WaitAvail (int n)
fifo_size -= n; fifo_size -= n;
} }
void static void
r128WaitIdle (void) r128WaitIdle (void)
{ {
int tries; 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_OFFSET, 0);
R128_OUT32 (mmio, R128_REG_DEFAULT_PITCH, r128s->pitch); 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 static Bool
r128PrepareSolid (DrawablePtr pDrawable, int alu, Pixel pm, Pixel fg) r128PrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
{ {
KdScreenPriv (pDrawable->pScreen); KdScreenPriv (pPixmap->drawable.pScreen);
r128ScreenInfo (pScreenPriv); 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_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
| R128_GMC_BRUSH_SOLID_COLOR | R128_GMC_BRUSH_SOLID_COLOR
| R128_GMC_SRC_DATATYPE_COLOR | R128_GMC_SRC_DATATYPE_COLOR
@ -148,7 +155,7 @@ r128PrepareSolid (DrawablePtr pDrawable, int alu, Pixel pm, Pixel fg)
return TRUE; return TRUE;
} }
void static void
r128Solid (int x1, int y1, int x2, int y2) r128Solid (int x1, int y1, int x2, int y2)
{ {
r128WaitAvail (2); r128WaitAvail (2);
@ -157,21 +164,21 @@ r128Solid (int x1, int y1, int x2, int y2)
} }
void static void
r128DoneSolid (void) r128DoneSolid (void)
{ {
} }
Bool static Bool
r128PrepareCopy (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, int dx, int dy, int alu, Pixel pm) r128PrepareCopy (PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
{ {
KdScreenPriv (pSrcDrawable->pScreen); KdScreenPriv (pSrc->drawable.pScreen);
r128ScreenInfo (pScreenPriv); r128ScreenInfo (pScreenPriv);
copydx = dx; copydx = dx;
copydy = dy; 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_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
| R128_GMC_BRUSH_SOLID_COLOR | R128_GMC_BRUSH_SOLID_COLOR
| R128_GMC_SRC_DATATYPE_COLOR | R128_GMC_SRC_DATATYPE_COLOR
@ -186,7 +193,7 @@ r128PrepareCopy (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, int dx, int
return TRUE; return TRUE;
} }
void static void
r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h) r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h)
{ {
if (copydx < 0) 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); R128_OUT32 (mmio, R128_REG_DST_HEIGHT_WIDTH, (h << 16) | w);
} }
void static void
r128DoneCopy (void) r128DoneCopy (void)
{ {
} }
@ -225,8 +232,6 @@ KaaScreenInfoRec r128Kaa = {
Bool Bool
r128DrawInit (ScreenPtr pScreen) r128DrawInit (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen);
if (!kaaDrawInit (pScreen, &r128Kaa)) if (!kaaDrawInit (pScreen, &r128Kaa))
return FALSE; return FALSE;

View File

@ -26,6 +26,7 @@
#include <config.h> #include <config.h>
#endif #endif
#include "r128.h" #include "r128.h"
#include "klinux.h"
void void
InitCard (char *name) InitCard (char *name)
@ -34,6 +35,8 @@ InitCard (char *name)
if (LinuxFindPci (0x1002, 0x4c46, 0, &attr)) if (LinuxFindPci (0x1002, 0x4c46, 0, &attr))
KdCardInfoAdd (&r128Funcs, &attr, 0); KdCardInfoAdd (&r128Funcs, &attr, 0);
else if (LinuxFindPci (0x1002, 0x5046, 0, &attr))
KdCardInfoAdd (&r128Funcs, &attr, 0);
} }
void void

View File

@ -1,14 +1,8 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/fbdev \ -I$(top_srcdir)/hw/kdrive/fbdev \
-I$(top_srcdir)/hw/kdrive/vesa \ -I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \ @KDRIVE_INCS@ \
-I$(top_srcdir)/miext/layer \ @XSERVER_CFLAGS@
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
bin_PROGRAMS = Xsmi bin_PROGRAMS = Xsmi
@ -27,21 +21,5 @@ Xsmi_LDADD = \
libsmi.a \ libsmi.a \
$(top_builddir)/hw/kdrive/fbdev/libfbdev.a \ $(top_builddir)/hw/kdrive/fbdev/libfbdev.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \ $(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \ @KDRIVE_LIBS@ \
$(top_builddir)/os/libos.a \ @XSERVER_LIBS@
$(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

View File

@ -27,7 +27,7 @@
#include "smi.h" #include "smi.h"
#include <sys/io.h> #include <sys/io.h>
Bool static Bool
smiCardInit (KdCardInfo *card) smiCardInit (KdCardInfo *card)
{ {
SmiCardInfo *smic; SmiCardInfo *smic;
@ -51,7 +51,7 @@ smiCardInit (KdCardInfo *card)
return TRUE; return TRUE;
} }
Bool static Bool
smiScreenInit (KdScreenInfo *screen) smiScreenInit (KdScreenInfo *screen)
{ {
SmiCardInfo *smic = screen->card->driver; SmiCardInfo *smic = screen->card->driver;
@ -80,7 +80,7 @@ smiScreenInit (KdScreenInfo *screen)
return TRUE; return TRUE;
} }
Bool static Bool
smiInitScreen (ScreenPtr pScreen) smiInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -99,13 +99,13 @@ smiInitScreen (ScreenPtr pScreen)
} }
#ifdef RANDR #ifdef RANDR
static Bool
smiRandRSetConfig (ScreenPtr pScreen, smiRandRSetConfig (ScreenPtr pScreen,
Rotation randr, Rotation randr,
int rate, int rate,
RRScreenSizePtr pSize) RRScreenSizePtr pSize)
{ {
Bool ret; Bool ret;
KdScreenPriv(pScreen);
ENTER (); ENTER ();
KdCheckSync (pScreen); KdCheckSync (pScreen);
@ -115,7 +115,7 @@ smiRandRSetConfig (ScreenPtr pScreen,
return ret; return ret;
} }
Bool static Bool
smiRandRInit (ScreenPtr pScreen) smiRandRInit (ScreenPtr pScreen)
{ {
rrScrPriv(pScreen); rrScrPriv(pScreen);
@ -127,7 +127,7 @@ smiRandRInit (ScreenPtr pScreen)
} }
#endif #endif
Bool static Bool
smiFinishInitScreen (ScreenPtr pScreen) smiFinishInitScreen (ScreenPtr pScreen)
{ {
Bool ret; Bool ret;
@ -141,8 +141,6 @@ smiFinishInitScreen (ScreenPtr pScreen)
void void
smiPreserve (KdCardInfo *card) smiPreserve (KdCardInfo *card)
{ {
SmiCardInfo *smic = card->driver;
ENTER (); ENTER ();
subPreserve(card); subPreserve(card);
LEAVE(); LEAVE();
@ -229,6 +227,16 @@ smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic)
smiUnmapReg (card, smic); smiUnmapReg (card, smic);
} }
static Bool
smiDPMS (ScreenPtr pScreen, int mode)
{
Bool ret;
ENTER ();
ret = subDPMS (pScreen, mode);
LEAVE ();
return ret;
}
Bool Bool
smiEnable (ScreenPtr pScreen) smiEnable (ScreenPtr pScreen)
{ {
@ -268,27 +276,15 @@ smiDisable (ScreenPtr pScreen)
LEAVE (); LEAVE ();
} }
Bool static void
smiDPMS (ScreenPtr pScreen, int mode)
{
Bool ret;
ENTER ();
ret = subDPMS (pScreen, mode);
LEAVE ();
return ret;
}
void
smiRestore (KdCardInfo *card) smiRestore (KdCardInfo *card)
{ {
SmiCardInfo *smic = card->driver;
ENTER (); ENTER ();
subRestore (card); subRestore (card);
LEAVE(); LEAVE();
} }
void static void
smiScreenFini (KdScreenInfo *screen) smiScreenFini (KdScreenInfo *screen)
{ {
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver; SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
@ -300,7 +296,7 @@ smiScreenFini (KdScreenInfo *screen)
LEAVE (); LEAVE ();
} }
void static void
smiCardFini (KdCardInfo *card) smiCardFini (KdCardInfo *card)
{ {
SmiCardInfo *smic = card->driver; SmiCardInfo *smic = card->driver;
@ -321,6 +317,8 @@ KdCardFuncs smiFuncs = {
smiCardInit, /* cardinit */ smiCardInit, /* cardinit */
smiScreenInit, /* scrinit */ smiScreenInit, /* scrinit */
smiInitScreen, /* initScreen */ smiInitScreen, /* initScreen */
smiFinishInitScreen, /* finishInitScreen */
subCreateResources, /* createRes */
smiPreserve, /* preserve */ smiPreserve, /* preserve */
smiEnable, /* enable */ smiEnable, /* enable */
smiDPMS, /* dpms */ smiDPMS, /* dpms */
@ -343,6 +341,4 @@ KdCardFuncs smiFuncs = {
subGetColors, /* getColors */ subGetColors, /* getColors */
subPutColors, /* putColors */ subPutColors, /* putColors */
smiFinishInitScreen, /* finishInitScreen */
}; };

View File

@ -35,8 +35,9 @@
#define subInitialize vesaInitialize #define subInitialize vesaInitialize
#define subScreenInitialize vesaScreenInitialize #define subScreenInitialize vesaScreenInitialize
#define subInitScreen vesaInitScreen #define subInitScreen vesaInitScreen
#define subRandRSetConfig vesaRandRSetConfig
#define subFinishInitScreen vesaFinishInitScreen #define subFinishInitScreen vesaFinishInitScreen
#define subCreateResources vesaCreateResources
#define subRandRSetConfig vesaRandRSetConfig
#define subPreserve vesaPreserve #define subPreserve vesaPreserve
#define subEnable vesaEnable #define subEnable vesaEnable
#define subDPMS vesaDPMS #define subDPMS vesaDPMS
@ -54,8 +55,9 @@
#define subInitialize fbdevInitialize #define subInitialize fbdevInitialize
#define subScreenInitialize fbdevScreenInitialize #define subScreenInitialize fbdevScreenInitialize
#define subInitScreen fbdevInitScreen #define subInitScreen fbdevInitScreen
#define subRandRSetConfig fbdevRandRSetConfig
#define subFinishInitScreen fbdevFinishInitScreen #define subFinishInitScreen fbdevFinishInitScreen
#define subCreateResources fbdevCreateResources
#define subRandRSetConfig fbdevRandRSetConfig
#define subPreserve fbdevPreserve #define subPreserve fbdevPreserve
#define subEnable fbdevEnable #define subEnable fbdevEnable
#define subDPMS fbdevDPMS #define subDPMS fbdevDPMS
@ -196,6 +198,18 @@ smiMapReg (KdCardInfo *card, SmiCardInfo *smic);
void void
smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic); 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 void
smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic); smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic);

View File

@ -143,18 +143,16 @@ smiSetup (ScreenPtr pScreen, int wait)
return TRUE; return TRUE;
} }
Bool static Bool
smiPrepareSolid (DrawablePtr pDrawable, smiPrepareSolid (PixmapPtr pPixmap,
int alu, int alu,
Pixel pm, Pixel pm,
Pixel fg) Pixel fg)
{ {
KdScreenPriv(pDrawable->pScreen); if (~pm & FbFullMask(pPixmap->drawable.depth))
if (~pm & FbFullMask(pDrawable->depth))
return FALSE; return FALSE;
if (!smiSetup (pDrawable->pScreen, 3)) if (!smiSetup (pPixmap->drawable.pScreen, 3))
return FALSE; return FALSE;
accel_cmd = smiSolidRop[alu] | SMI_BITBLT | SMI_START_ENGINE; accel_cmd = smiSolidRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
@ -164,7 +162,7 @@ smiPrepareSolid (DrawablePtr pDrawable,
return TRUE; return TRUE;
} }
void static void
smiSolid (int x1, int y1, int x2, int y2) smiSolid (int x1, int y1, int x2, int y2)
{ {
smiWaitAvail(smic,3); smiWaitAvail(smic,3);
@ -173,7 +171,7 @@ smiSolid (int x1, int y1, int x2, int y2)
dpr->accel_cmd = accel_cmd; dpr->accel_cmd = accel_cmd;
} }
void static void
smiDoneSolid (void) smiDoneSolid (void)
{ {
} }
@ -181,20 +179,18 @@ smiDoneSolid (void)
static int copyDx; static int copyDx;
static int copyDy; static int copyDy;
Bool static Bool
smiPrepareCopy (DrawablePtr pSrcDrawable, smiPrepareCopy (PixmapPtr pSrcPixmap,
DrawablePtr pDstDrawable, PixmapPtr pDstPixmap,
int dx, int dx,
int dy, int dy,
int alu, int alu,
Pixel pm) Pixel pm)
{ {
KdScreenPriv(pSrcDrawable->pScreen); if (~pm & FbFullMask(pSrcPixmap->drawable.depth))
if (~pm & FbFullMask(pSrcDrawable->depth))
return FALSE; return FALSE;
if (!smiSetup (pSrcDrawable->pScreen, 0)) if (!smiSetup (pSrcPixmap->drawable.pScreen, 0))
return FALSE; return FALSE;
accel_cmd = smiBltRop[alu] | SMI_BITBLT | SMI_START_ENGINE; accel_cmd = smiBltRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
@ -206,7 +202,7 @@ smiPrepareCopy (DrawablePtr pSrcDrawable,
return TRUE; return TRUE;
} }
void static void
smiCopy (int srcX, smiCopy (int srcX,
int srcY, int srcY,
int dstX, int dstX,
@ -228,7 +224,7 @@ smiCopy (int srcX,
dpr->accel_cmd = accel_cmd; dpr->accel_cmd = accel_cmd;
} }
void static void
smiDoneCopy (void) smiDoneCopy (void)
{ {
} }
@ -248,7 +244,6 @@ smiDrawInit (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
smiCardInfo (pScreenPriv); smiCardInfo (pScreenPriv);
smiScreenInfo (pScreenPriv);
ENTER (); ENTER ();
if (pScreenPriv->screen->fb[0].depth == 4) if (pScreenPriv->screen->fb[0].depth == 4)

View File

@ -28,6 +28,7 @@
#include <config.h> #include <config.h>
#endif #endif
#include "smi.h" #include "smi.h"
#include "klinux.h"
void void
InitCard (char *name) InitCard (char *name)

View File

@ -1,10 +1,6 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/mi \ @XSERVER_CFLAGS@
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
noinst_LIBRARIES = libkdrive.a noinst_LIBRARIES = libkdrive.a

View File

@ -50,10 +50,6 @@ int kaaPixmapPrivateIndex;
typedef struct { typedef struct {
KaaScreenInfoPtr info; KaaScreenInfoPtr info;
CreatePixmapProcPtr CreatePixmap;
DestroyPixmapProcPtr DestroyPixmap;
int pixelOffset; /* offset from pPixmap to pixels */
} KaaScreenPrivRec, *KaaScreenPrivPtr; } KaaScreenPrivRec, *KaaScreenPrivPtr;
typedef struct { typedef struct {
@ -71,22 +67,10 @@ typedef struct {
#define KaaGetScreenPriv(s) ((KaaScreenPrivPtr)(s)->devPrivates[kaaScreenPrivateIndex].ptr) #define KaaGetScreenPriv(s) ((KaaScreenPrivPtr)(s)->devPrivates[kaaScreenPrivateIndex].ptr)
#define KaaScreenPriv(s) KaaScreenPrivPtr pKaaScr = KaaGetScreenPriv(s) #define KaaScreenPriv(s) KaaScreenPrivPtr pKaaScr = KaaGetScreenPriv(s)
#define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr) #define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr)
#define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a)) #define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a))
#define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p) #define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p)
#define KaaPixmapPitch(w) (((w) + (pKaaScr->info->offscreenPitch - 1)) & ~(pKaaScr->info->offscreenPitch - 1))
#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 MIN_OFFPIX_SIZE (4096) #define MIN_OFFPIX_SIZE (4096)
@ -248,9 +232,6 @@ kaaPixmapUseMemory (PixmapPtr pPixmap)
static Bool static Bool
kaaDestroyPixmap (PixmapPtr pPixmap) kaaDestroyPixmap (PixmapPtr pPixmap)
{ {
ScreenPtr pScreen = pPixmap->drawable.pScreen;
Bool ret;
if (pPixmap->refcnt == 1) if (pPixmap->refcnt == 1)
{ {
KaaPixmapPriv (pPixmap); KaaPixmapPriv (pPixmap);
@ -267,58 +248,93 @@ kaaDestroyPixmap (PixmapPtr pPixmap)
pPixmap->devKind = pKaaPixmap->devKind; pPixmap->devKind = pKaaPixmap->devKind;
} }
} }
return fbDestroyPixmap (pPixmap);
KAA_SCREEN_PROLOGUE (pScreen, DestroyPixmap);
ret = (*pScreen->DestroyPixmap) (pPixmap);
KAA_SCREEN_EPILOGUE (pScreen, DestroyPixmap, kaaDestroyPixmap);
return ret;
} }
static PixmapPtr static PixmapPtr
kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth) kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
{ {
PixmapPtr pPixmap = NULL; PixmapPtr pPixmap;
KaaPixmapPrivPtr pKaaPixmap; KaaPixmapPrivPtr pKaaPixmap;
int bpp;
KAA_SCREEN_PROLOGUE (pScreen, CreatePixmap); bpp = BitsPerPixel (depth);
pPixmap = (* pScreen->CreatePixmap) (pScreen, w, h, depth); if (bpp == 32 && depth == 24)
KAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, kaaCreatePixmap); {
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) if (!pPixmap)
return NULL; return NULL;
pKaaPixmap = KaaGetPixmapPriv(pPixmap); pKaaPixmap = KaaGetPixmapPriv(pPixmap);
pKaaPixmap->score = 0; pKaaPixmap->score = 0;
pKaaPixmap->area = NULL; pKaaPixmap->area = NULL;
if ((pPixmap->devKind * h) >= MIN_OFFPIX_SIZE) if (depth == pScreen->rootDepth &&
(pPixmap->devKind * h) >= MIN_OFFPIX_SIZE)
kaaPixmapAllocArea (pPixmap); kaaPixmapAllocArea (pPixmap);
return pPixmap; return pPixmap;
} }
PixmapPtr static Bool
kaaGetDrawingPixmap (DrawablePtr pDrawable, int *x, int *y) kaaPixmapIsOffscreen(PixmapPtr p)
{ {
if (pDrawable->type == DRAWABLE_WINDOW) { ScreenPtr pScreen = p->drawable.pScreen;
if (x) KdScreenPriv(pScreen);
*x = pDrawable->x;
if (y)
*y = pDrawable->y;
return (*pDrawable->pScreen->GetScreenPixmap) (pDrawable->pScreen); return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
} (CARD8 *) pScreenPriv->screen->memory_base) <
else if (KaaDrawableIsOffscreenPixmap (pDrawable)) pScreenPriv->screen->memory_size);
{
if (x)
*x = 0;
if (y)
*y = 0;
return ((PixmapPtr)pDrawable);
}
else
return NULL;
} }
void 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
{
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
pPixmap = (PixmapPtr) pDrawable;
return kaaPixmapIsOffscreen (pPixmap);
}
static void
kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n, kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
DDXPointPtr ppt, int *pwidth, int fSorted) DDXPointPtr ppt, int *pwidth, int fSorted)
{ {
@ -335,7 +351,7 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
if (!pScreenPriv->enabled || if (!pScreenPriv->enabled ||
pGC->fillStyle != FillSolid || pGC->fillStyle != FillSolid ||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) || !(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap, !(*pKaaScr->info->PrepareSolid) (pPixmap,
pGC->alu, pGC->alu,
pGC->planemask, pGC->planemask,
@ -389,7 +405,8 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
if (partX2 > fullX2) if (partX2 > fullX2)
partX2 = fullX2; partX2 = fullX2;
if (partX2 > partX1) if (partX2 > partX1)
(*pKaaScr->info->Solid) (partX1, fullY1, partX2, fullY1 + 1); (*pKaaScr->info->Solid) (partX1, fullY1,
partX2, fullY1 + 1);
} }
pbox++; pbox++;
} }
@ -399,7 +416,7 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
KdMarkSync(pDrawable->pScreen); KdMarkSync(pDrawable->pScreen);
} }
void static void
kaaCopyNtoN (DrawablePtr pSrcDrawable, kaaCopyNtoN (DrawablePtr pSrcDrawable,
DrawablePtr pDstDrawable, DrawablePtr pDstDrawable,
GCPtr pGC, GCPtr pGC,
@ -418,15 +435,15 @@ kaaCopyNtoN (DrawablePtr pSrcDrawable,
/* Migrate pixmaps to same place as destination */ /* Migrate pixmaps to same place as destination */
if (pScreenPriv->enabled && pSrcDrawable->type == DRAWABLE_PIXMAP) { if (pScreenPriv->enabled && pSrcDrawable->type == DRAWABLE_PIXMAP) {
if (KaaDrawableIsScreen (pDstDrawable)) if (kaaDrawableIsOffscreen (pDstDrawable))
kaaPixmapUseScreen ((PixmapPtr) pSrcDrawable); kaaPixmapUseScreen ((PixmapPtr) pSrcDrawable);
else else
kaaPixmapUseMemory ((PixmapPtr) pSrcDrawable); kaaPixmapUseMemory ((PixmapPtr) pSrcDrawable);
} }
if (pScreenPriv->enabled && if (pScreenPriv->enabled &&
(pSrcPixmap = kaaGetDrawingPixmap (pSrcDrawable, NULL, NULL)) && (pSrcPixmap = kaaGetOffscreenPixmap (pSrcDrawable, NULL, NULL)) &&
(pDstPixmap = kaaGetDrawingPixmap (pDstDrawable, NULL, NULL)) && (pDstPixmap = kaaGetOffscreenPixmap (pDstDrawable, NULL, NULL)) &&
(*pKaaScr->info->PrepareCopy) (pSrcPixmap, (*pKaaScr->info->PrepareCopy) (pSrcPixmap,
pDstPixmap, pDstPixmap,
dx, dx,
@ -454,7 +471,7 @@ kaaCopyNtoN (DrawablePtr pSrcDrawable,
} }
} }
RegionPtr static RegionPtr
kaaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, kaaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height, int dstx, int dsty) 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); dstx, dsty, kaaCopyNtoN, 0, 0);
} }
void static void
kaaPolyFillRect(DrawablePtr pDrawable, kaaPolyFillRect(DrawablePtr pDrawable,
GCPtr pGC, GCPtr pGC,
int nrect, int nrect,
@ -483,7 +500,7 @@ kaaPolyFillRect(DrawablePtr pDrawable,
if (!pScreenPriv->enabled || if (!pScreenPriv->enabled ||
pGC->fillStyle != FillSolid || pGC->fillStyle != FillSolid ||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, &xorg, &yorg)) || !(pPixmap = kaaGetOffscreenPixmap (pDrawable, &xorg, &yorg)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap, !(*pKaaScr->info->PrepareSolid) (pPixmap,
pGC->alu, pGC->alu,
pGC->planemask, pGC->planemask,
@ -559,7 +576,7 @@ kaaPolyFillRect(DrawablePtr pDrawable,
KdMarkSync(pDrawable->pScreen); KdMarkSync(pDrawable->pScreen);
} }
void static void
kaaSolidBoxClipped (DrawablePtr pDrawable, kaaSolidBoxClipped (DrawablePtr pDrawable,
RegionPtr pClip, RegionPtr pClip,
FbBits pm, FbBits pm,
@ -577,7 +594,7 @@ kaaSolidBoxClipped (DrawablePtr pDrawable,
int partX1, partX2, partY1, partY2; int partX1, partX2, partY1, partY2;
if (!pScreenPriv->enabled || if (!pScreenPriv->enabled ||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) || !(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
!(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg)) !(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
{ {
KdCheckSync (pDrawable->pScreen); KdCheckSync (pDrawable->pScreen);
@ -619,7 +636,7 @@ kaaSolidBoxClipped (DrawablePtr pDrawable,
KdMarkSync(pDrawable->pScreen); KdMarkSync(pDrawable->pScreen);
} }
void static void
kaaImageGlyphBlt (DrawablePtr pDrawable, kaaImageGlyphBlt (DrawablePtr pDrawable,
GCPtr pGC, GCPtr pGC,
int x, int x,
@ -776,12 +793,12 @@ static const GCOps kaaOps = {
#endif #endif
}; };
void static void
kaaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable) kaaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
{ {
fbValidateGC (pGC, changes, pDrawable); fbValidateGC (pGC, changes, pDrawable);
if (KaaDrawableIsScreen (pDrawable)) if (kaaDrawableIsOffscreen (pDrawable))
pGC->ops = (GCOps *) &kaaOps; pGC->ops = (GCOps *) &kaaOps;
else else
pGC->ops = (GCOps *) &kdAsyncPixmapGCOps; pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
@ -797,7 +814,7 @@ GCFuncs kaaGCFuncs = {
miCopyClip miCopyClip
}; };
int static int
kaaCreateGC (GCPtr pGC) kaaCreateGC (GCPtr pGC)
{ {
if (!fbCreateGC (pGC)) if (!fbCreateGC (pGC))
@ -809,7 +826,7 @@ kaaCreateGC (GCPtr pGC)
} }
void static void
kaaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) kaaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
{ {
RegionRec rgnDst; RegionRec rgnDst;
@ -833,7 +850,7 @@ kaaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
} }
void static void
kaaFillRegionSolid (DrawablePtr pDrawable, kaaFillRegionSolid (DrawablePtr pDrawable,
RegionPtr pRegion, RegionPtr pRegion,
Pixel pixel) Pixel pixel)
@ -843,7 +860,7 @@ kaaFillRegionSolid (DrawablePtr pDrawable,
PixmapPtr pPixmap; PixmapPtr pPixmap;
if (pScreenPriv->enabled && if (pScreenPriv->enabled &&
(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) && (pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) &&
(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel)) (*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
{ {
int nbox = REGION_NUM_RECTS (pRegion); int nbox = REGION_NUM_RECTS (pRegion);
@ -865,7 +882,7 @@ kaaFillRegionSolid (DrawablePtr pDrawable,
} }
} }
void static void
kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
@ -933,7 +950,8 @@ kaaDrawInit (ScreenPtr pScreen,
KaaScreenInfoPtr pScreenInfo) KaaScreenInfoPtr pScreenInfo)
{ {
KaaScreenPrivPtr pKaaScr; KaaScreenPrivPtr pKaaScr;
KdScreenInfo *screen = KdGetScreenPriv (pScreen)->screen; KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
#ifdef RENDER #ifdef RENDER
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen); PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
#endif #endif
@ -974,15 +992,13 @@ kaaDrawInit (ScreenPtr pScreen,
* Hookup offscreen pixmaps * Hookup offscreen pixmaps
*/ */
if ((pKaaScr->info->flags & KAA_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, if (!AllocatePixmapPrivate(pScreen, kaaPixmapPrivateIndex,
sizeof (KaaPixmapPrivRec))) sizeof (KaaPixmapPrivRec)))
return FALSE; return FALSE;
pScreen->CreatePixmap = kaaCreatePixmap;
pScreen->DestroyPixmap = kaaDestroyPixmap;
} }
else else
{ {
@ -993,3 +1009,10 @@ kaaDrawInit (ScreenPtr pScreen,
return TRUE; return TRUE;
} }
void
kaaDrawFini (ScreenPtr pScreen)
{
KaaScreenPriv(pScreen);
xfree (pKaaScr);
}

View File

@ -305,11 +305,3 @@ const GCOps kdAsyncPixmapGCOps = {
,NULL ,NULL
#endif #endif
}; };
void
KdAssertSync (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdCardInfo *card = pScreenPriv->card;
assert (!card->needSync);
}

View File

@ -130,7 +130,7 @@ KdDisableColormap (ScreenPtr pScreen)
} }
} }
int static int
KdColormapFb (ColormapPtr pCmap) KdColormapFb (ColormapPtr pCmap)
{ {
ScreenPtr pScreen = pCmap->pScreen; ScreenPtr pScreen = pCmap->pScreen;

View File

@ -28,7 +28,7 @@
#include "kdrive.h" #include "kdrive.h"
#include "cursorstr.h" #include "cursorstr.h"
int static int
KdComputeCmapShift (unsigned long mask) KdComputeCmapShift (unsigned long mask)
{ {
int shift; int shift;

View File

@ -225,7 +225,7 @@ KdDisableScreen (ScreenPtr pScreen)
(*pScreenPriv->card->cfuncs->disable) (pScreen); (*pScreenPriv->card->cfuncs->disable) (pScreen);
} }
void static void
KdDoSwitchCmd (char *reason) KdDoSwitchCmd (char *reason)
{ {
if (kdSwitchCmd) if (kdSwitchCmd)
@ -382,7 +382,7 @@ ddxGiveUp ()
Bool kdDumbDriver; Bool kdDumbDriver;
Bool kdSoftCursor; Bool kdSoftCursor;
char * static char *
KdParseFindNext (char *cur, char *delim, char *save, char *last) KdParseFindNext (char *cur, char *delim, char *save, char *last)
{ {
while (*cur && !strchr (delim, *cur)) while (*cur && !strchr (delim, *cur))
@ -832,6 +832,22 @@ KdAllocatePrivates (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
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 Bool
KdCloseScreen (int index, ScreenPtr pScreen) KdCloseScreen (int index, ScreenPtr pScreen)
{ {
@ -844,7 +860,7 @@ KdCloseScreen (int index, ScreenPtr pScreen)
pScreen->CloseScreen = pScreenPriv->CloseScreen; pScreen->CloseScreen = pScreenPriv->CloseScreen;
ret = (*pScreen->CloseScreen) (index, pScreen); ret = (*pScreen->CloseScreen) (index, pScreen);
if (screen->off_screen_size > 0) if (screen->off_screen_base < screen->memory_size)
KdOffscreenFini (pScreen); KdOffscreenFini (pScreen);
if (pScreenPriv->dpmsState != KD_DPMS_NORMAL) if (pScreenPriv->dpmsState != KD_DPMS_NORMAL)
@ -930,7 +946,7 @@ KdSaveScreen (ScreenPtr pScreen, int on)
return TRUE; return TRUE;
} }
Bool static Bool
KdCreateWindow (WindowPtr pWin) KdCreateWindow (WindowPtr pWin)
{ {
#ifndef PHOENIX #ifndef PHOENIX
@ -1015,11 +1031,32 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
KdCardInfo *card = screen->card; KdCardInfo *card = screen->card;
KdPrivScreenPtr pScreenPriv; KdPrivScreenPtr pScreenPriv;
int fb; 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); KdAllocatePrivates (pScreen);
pScreenPriv = KdGetScreenPriv(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; screen->pScreen = pScreen;
pScreenPriv->screen = screen; pScreenPriv->screen = screen;
pScreenPriv->card = card; pScreenPriv->card = card;
@ -1039,7 +1076,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
*/ */
if (!fbSetupScreen (pScreen, if (!fbSetupScreen (pScreen,
screen->fb[0].frameBuffer, screen->fb[0].frameBuffer,
screen->width, screen->height, width, height,
monitorResolution, monitorResolution, monitorResolution, monitorResolution,
screen->fb[0].pixelStride, screen->fb[0].pixelStride,
screen->fb[0].bitsPerPixel)) screen->fb[0].bitsPerPixel))
@ -1072,7 +1109,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (!fbOverlayFinishScreenInit (pScreen, if (!fbOverlayFinishScreenInit (pScreen,
screen->fb[0].frameBuffer, screen->fb[0].frameBuffer,
screen->fb[1].frameBuffer, screen->fb[1].frameBuffer,
screen->width, screen->height, width, height,
monitorResolution, monitorResolution, monitorResolution, monitorResolution,
screen->fb[0].pixelStride, screen->fb[0].pixelStride,
screen->fb[1].pixelStride, screen->fb[1].pixelStride,
@ -1089,7 +1126,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
{ {
if (!fbFinishScreenInit (pScreen, if (!fbFinishScreenInit (pScreen,
screen->fb[0].frameBuffer, screen->fb[0].frameBuffer,
screen->width, screen->height, width, height,
monitorResolution, monitorResolution, monitorResolution, monitorResolution,
screen->fb[0].pixelStride, screen->fb[0].pixelStride,
screen->fb[0].bitsPerPixel)) 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. * Fix screen sizes; for some reason mi takes dpi instead of mm.
* Rounding errors are annoying * Rounding errors are annoying
*/ */
if (screen->width_mm) if (*width_mmp)
pScreen->mmWidth = screen->width_mm; pScreen->mmWidth = *width_mmp;
else else
screen->width_mm = pScreen->mmWidth; *width_mmp = pScreen->mmWidth;
if (screen->height_mm) if (*height_mmp)
pScreen->mmHeight = screen->height_mm; pScreen->mmHeight = *height_mmp;
else else
screen->height_mm = pScreen->mmHeight; *height_mmp = pScreen->mmHeight;
/* /*
* Plug in our own block/wakeup handlers. * 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)) if (!(*card->cfuncs->initAccel) (pScreen))
screen->dumb = TRUE; screen->dumb = TRUE;
if (screen->off_screen_size > 0) if (screen->off_screen_base < screen->memory_size)
KdOffscreenInit (pScreen); KdOffscreenInit (pScreen);
#ifdef PSEUDO8 #ifdef PSEUDO8
@ -1163,6 +1200,9 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
*/ */
pScreenPriv->CloseScreen = pScreen->CloseScreen; pScreenPriv->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = KdCloseScreen; pScreen->CloseScreen = KdCloseScreen;
pScreenPriv->CreateScreenResources = pScreen->CreateScreenResources;
pScreen->CreateScreenResources = KdCreateScreenResources;
if (screen->softCursor || if (screen->softCursor ||
!card->cfuncs->initCursor || !card->cfuncs->initCursor ||
@ -1222,7 +1262,7 @@ KdInitScreen (ScreenInfo *pScreenInfo,
screen->softCursor = TRUE; screen->softCursor = TRUE;
} }
Bool static Bool
KdSetPixmapFormats (ScreenInfo *pScreenInfo) KdSetPixmapFormats (ScreenInfo *pScreenInfo)
{ {
CARD8 depthToBpp[33]; /* depth -> bpp map */ CARD8 depthToBpp[33]; /* depth -> bpp map */
@ -1287,7 +1327,7 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo)
return TRUE; return TRUE;
} }
void static void
KdAddScreen (ScreenInfo *pScreenInfo, KdAddScreen (ScreenInfo *pScreenInfo,
KdScreenInfo *screen, KdScreenInfo *screen,
int argc, int argc,

View File

@ -93,6 +93,7 @@ typedef struct _KdFrameBuffer {
int bitsPerPixel; int bitsPerPixel;
int pixelStride; int pixelStride;
int byteStride; int byteStride;
Bool shadow;
unsigned long visuals; unsigned long visuals;
Pixel redMask, greenMask, blueMask; Pixel redMask, greenMask, blueMask;
void *closure; void *closure;
@ -119,8 +120,8 @@ typedef struct _KdScreenInfo {
DDXPointRec origin; DDXPointRec origin;
KdFrameBuffer fb[KD_MAX_FB]; KdFrameBuffer fb[KD_MAX_FB];
CARD8 *memory_base; CARD8 *memory_base;
int off_screen_base; unsigned long memory_size;
int off_screen_size; unsigned long off_screen_base;
struct _RealOffscreenArea *off_screen_areas; struct _RealOffscreenArea *off_screen_areas;
} KdScreenInfo; } KdScreenInfo;
@ -128,6 +129,8 @@ typedef struct _KdCardFuncs {
Bool (*cardinit) (KdCardInfo *); /* detect and map device */ Bool (*cardinit) (KdCardInfo *); /* detect and map device */
Bool (*scrinit) (KdScreenInfo *);/* initialize screen information */ Bool (*scrinit) (KdScreenInfo *);/* initialize screen information */
Bool (*initScreen) (ScreenPtr); /* initialize ScreenRec */ Bool (*initScreen) (ScreenPtr); /* initialize ScreenRec */
Bool (*finishInitScreen) (ScreenPtr pScreen);
Bool (*createRes) (ScreenPtr); /* create screen resources */
void (*preserve) (KdCardInfo *); /* save graphics card state */ void (*preserve) (KdCardInfo *); /* save graphics card state */
Bool (*enable) (ScreenPtr); /* set up for rendering */ Bool (*enable) (ScreenPtr); /* set up for rendering */
Bool (*dpms) (ScreenPtr, int); /* set DPMS screen saver */ Bool (*dpms) (ScreenPtr, int); /* set DPMS screen saver */
@ -151,7 +154,6 @@ typedef struct _KdCardFuncs {
void (*getColors) (ScreenPtr, int, int, xColorItem *); void (*getColors) (ScreenPtr, int, int, xColorItem *);
void (*putColors) (ScreenPtr, int, int, xColorItem *); void (*putColors) (ScreenPtr, int, int, xColorItem *);
Bool (*finishInitScreen) (ScreenPtr pScreen);
} KdCardFuncs; } KdCardFuncs;
#define KD_MAX_PSEUDO_DEPTH 8 #define KD_MAX_PSEUDO_DEPTH 8
@ -170,6 +172,7 @@ typedef struct {
ColormapPtr pInstalledmap[KD_MAX_FB]; /* current colormap */ ColormapPtr pInstalledmap[KD_MAX_FB]; /* current colormap */
xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */ xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen; CloseScreenProcPtr CloseScreen;
#ifdef FB_OLD_SCREEN #ifdef FB_OLD_SCREEN
miBSFuncRec BackingStoreFuncs; miBSFuncRec BackingStoreFuncs;
@ -216,6 +219,7 @@ extern KdMouseInfo *kdMouseInfo;
extern int KdCurScreen; extern int KdCurScreen;
KdMouseInfo *KdMouseInfoAdd (void); KdMouseInfo *KdMouseInfoAdd (void);
void KdMouseInfoDispose (KdMouseInfo *mi);
void KdParseMouse (char *); void KdParseMouse (char *);
typedef struct _KdMouseFuncs { typedef struct _KdMouseFuncs {
@ -351,6 +355,9 @@ Bool
kaaDrawInit (ScreenPtr pScreen, kaaDrawInit (ScreenPtr pScreen,
KaaScreenInfoPtr pScreenInfo); KaaScreenInfoPtr pScreenInfo);
void
kaaDrawFini (ScreenPtr pScreen);
void void
kaaWrapGC (GCPtr pGC); kaaWrapGC (GCPtr pGC);
@ -564,6 +571,9 @@ KdOsInit (KdOsFuncs *pOsFuncs);
Bool Bool
KdAllocatePrivates (ScreenPtr pScreen); KdAllocatePrivates (ScreenPtr pScreen);
Bool
KdCreateScreenResources (ScreenPtr pScreen);
Bool Bool
KdCloseScreen (int index, ScreenPtr pScreen); KdCloseScreen (int index, ScreenPtr pScreen);
@ -689,7 +699,7 @@ void
KdEnableInput (void); KdEnableInput (void);
void void
ProcessInputEvents (); ProcessInputEvents (void);
extern KdMouseFuncs LinuxMouseFuncs; extern KdMouseFuncs LinuxMouseFuncs;
extern KdMouseFuncs Ps2MouseFuncs; extern KdMouseFuncs Ps2MouseFuncs;
@ -771,13 +781,16 @@ KdCheckComposite (CARD8 op,
/* kshadow.c */ /* kshadow.c */
Bool Bool
KdShadowScreenInit (KdScreenInfo *screen); KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate);
Bool
KdShadowInitScreen (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
void void
KdShadowScreenFini (KdScreenInfo *screen); KdShadowFbFree (KdScreenInfo *screen, int fb);
Bool
KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc window);
void
KdShadowUnset (ScreenPtr pScreen);
/* ktest.c */ /* ktest.c */
Bool Bool

View File

@ -92,7 +92,7 @@ KdInputFd kdInputFds[KD_MAX_INPUT_FDS];
int kdNumInputFds; int kdNumInputFds;
int kdInputTypeSequence; int kdInputTypeSequence;
void static void
KdSigio (int sig) KdSigio (int sig)
{ {
int i; int i;
@ -101,7 +101,7 @@ KdSigio (int sig)
(*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure); (*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure);
} }
void static void
KdBlockSigio (void) KdBlockSigio (void)
{ {
sigset_t set; sigset_t set;
@ -111,7 +111,7 @@ KdBlockSigio (void)
sigprocmask (SIG_BLOCK, &set, 0); sigprocmask (SIG_BLOCK, &set, 0);
} }
void static void
KdUnblockSigio (void) KdUnblockSigio (void)
{ {
sigset_t set; sigset_t set;
@ -158,7 +158,7 @@ KdNonBlockFd (int fd)
fcntl (fd, F_SETFL, flags); fcntl (fd, F_SETFL, flags);
} }
void static void
KdAddFd (int fd) KdAddFd (int fd)
{ {
struct sigaction act; struct sigaction act;
@ -179,7 +179,7 @@ KdAddFd (int fd)
sigprocmask (SIG_SETMASK, &set, 0); sigprocmask (SIG_SETMASK, &set, 0);
} }
void static void
KdRemoveFd (int fd) KdRemoveFd (int fd)
{ {
struct sigaction act; struct sigaction act;
@ -915,7 +915,7 @@ KdInputTransition kdInputMachine[num_input_states][num_input_class] = {
#define EventX(e) ((e)->u.keyButtonPointer.rootX) #define EventX(e) ((e)->u.keyButtonPointer.rootX)
#define EventY(e) ((e)->u.keyButtonPointer.rootY) #define EventY(e) ((e)->u.keyButtonPointer.rootY)
int static int
KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev) KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev)
{ {
if (ev->u.keyButtonPointer.pad1) if (ev->u.keyButtonPointer.pad1)
@ -932,7 +932,7 @@ KdInsideEmulationWindow (KdMouseInfo *mi, xEvent *ev)
abs (mi->emulationDy) < EMULATION_WINDOW); abs (mi->emulationDy) < EMULATION_WINDOW);
} }
KdInputClass static KdInputClass
KdClassifyInput (KdMouseInfo *mi, xEvent *ev) KdClassifyInput (KdMouseInfo *mi, xEvent *ev)
{ {
switch (ev->u.u.type) { switch (ev->u.u.type) {
@ -1083,7 +1083,7 @@ KdResetInputMachine (void)
} }
} }
void static void
KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev) KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev)
{ {
if (mi->emulateMiddleButton) if (mi->emulateMiddleButton)
@ -1092,7 +1092,7 @@ KdHandleMouseEvent (KdMouseInfo *mi, xEvent *ev)
KdQueueEvent (ev); KdQueueEvent (ev);
} }
void static void
KdReceiveTimeout (KdMouseInfo *mi) KdReceiveTimeout (KdMouseInfo *mi)
{ {
KdRunMouseMachine (mi, timeout, 0); KdRunMouseMachine (mi, timeout, 0);
@ -1122,7 +1122,7 @@ extern char dispatchException;
extern int nClients; extern int nClients;
void static void
KdCheckSpecialKeys(xEvent *xE) KdCheckSpecialKeys(xEvent *xE)
{ {
KeySym sym = KEYCOL1(xE->u.u.detail); KeySym sym = KEYCOL1(xE->u.u.detail);
@ -1195,7 +1195,7 @@ KdCheckSpecialKeys(xEvent *xE)
* *
*/ */
void static void
KdHandleKeyboardEvent (xEvent *ev) KdHandleKeyboardEvent (xEvent *ev)
{ {
int key = ev->u.u.detail; int key = ev->u.u.detail;
@ -1236,7 +1236,7 @@ KdReleaseAllKeys (void)
KdUnblockSigio (); KdUnblockSigio ();
} }
void static void
KdCheckLock (void) KdCheckLock (void)
{ {
KeyClassPtr keyc = pKdKeyboard->key; KeyClassPtr keyc = pKdKeyboard->key;

View File

@ -255,14 +255,14 @@ typedef void (* typePushPixels)(
#endif #endif
); );
RegionPtr static RegionPtr
KdNoopCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, KdNoopCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height, int dstx, int dsty) int srcx, int srcy, int width, int height, int dstx, int dsty)
{ {
return NullRegion; return NullRegion;
} }
RegionPtr static RegionPtr
KdNoopCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, KdNoopCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
int srcx, int srcy, int width, int height, int srcx, int srcy, int width, int height,
int dstx, int dsty, unsigned long bitPlane) int dstx, int dsty, unsigned long bitPlane)

View File

@ -21,7 +21,6 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE. * PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Header$ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -61,7 +60,7 @@ KdOffscreenValidate (ScreenPtr pScreen)
prev = area; 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 #else
#define KdOffscreenValidate(s) #define KdOffscreenValidate(s)
@ -97,7 +96,7 @@ KdOffscreenAlloc (ScreenPtr pScreen, int size, int align,
} }
/* throw out requests that cannot fit */ /* 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)); DBG_OFFSCREEN (("Alloc 0x%x -> TOBIG\n", size));
return NULL; return NULL;
@ -280,7 +279,7 @@ KdOffscreenInit (ScreenPtr pScreen)
area->area.screen = NULL; area->area.screen = NULL;
area->area.offset = pScreenPriv->screen->off_screen_base; 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->save = 0;
area->locked = FALSE; area->locked = FALSE;
area->next = NULL; area->next = NULL;

View File

@ -28,29 +28,59 @@
#include "kdrive.h" #include "kdrive.h"
Bool Bool
KdShadowScreenInit (KdScreenInfo *screen) KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate)
{ {
int paddedWidth;
void *buf; 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) if (!buf)
return FALSE; return FALSE;
screen->fb[0].frameBuffer = buf; if (screen->fb[fb].shadow)
screen->fb[0].byteStride = BitmapBytePad (screen->width * screen->fb[0].bitsPerPixel); xfree (screen->fb[fb].frameBuffer);
screen->fb[0].pixelStride = screen->fb[0].byteStride * 8 / screen->fb[0].bitsPerPixel; screen->fb[fb].shadow = TRUE;
screen->dumb = TRUE; screen->fb[fb].frameBuffer = buf;
screen->fb[fb].byteStride = paddedWidth;
screen->fb[fb].pixelStride = paddedWidth * 8 / bpp;
return TRUE; return TRUE;
} }
Bool void
KdShadowInitScreen (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window) KdShadowFbFree (KdScreenInfo *screen, int fb)
{ {
return shadowInit (pScreen, update, window); if (screen->fb[fb].shadow)
{
xfree (screen->fb[fb].frameBuffer);
screen->fb[fb].frameBuffer = 0;
screen->fb[fb].shadow = FALSE;
}
}
Bool
KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc 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 void
KdShadowScreenFini (KdScreenInfo *screen) KdShadowUnset (ScreenPtr pScreen)
{ {
if (screen->fb[0].frameBuffer) shadowUnset (pScreen);
xfree (screen->fb[0].frameBuffer);
} }

View File

@ -210,7 +210,7 @@ VgaInvalidate (VgaCard *card)
} }
void static void
_VgaSync (VgaCard *card, VGA16 id) _VgaSync (VgaCard *card, VGA16 id)
{ {
if (!(card->values[id].flags & VGA_VALUE_VALID)) if (!(card->values[id].flags & VGA_VALUE_VALID))

View File

@ -126,6 +126,12 @@ VgaInvalidate (VgaCard *card);
void void
VgaRestore (VgaCard *card); VgaRestore (VgaCard *card);
void
VgaFinish (VgaCard *card);
void
VgaFlushReg (VgaCard *card, VgaReg *reg);
VGA8 VGA8
VgaFetch (VgaCard *card, VGA16 id); VgaFetch (VgaCard *card, VGA16 id);

View File

@ -1,12 +1,6 @@
INCLUDES = \ INCLUDES = \
-I$(top_srcdir)/fb \ @KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/src \ @XSERVER_CFLAGS@
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
noinst_LIBRARIES = libvesa.a noinst_LIBRARIES = libvesa.a
@ -23,20 +17,9 @@ Xvesa_SOURCES = \
Xvesa_LDADD = \ Xvesa_LDADD = \
libvesa.a \ libvesa.a \
$(top_builddir)/dix/libdix.a \ @KDRIVE_LIBS@ \
$(top_builddir)/os/libos.a \ @XSERVER_LIBS@
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \ Xvesa_DEPENDENCIES = \
$(top_builddir)/hw/kdrive/linux/liblinux.a \ libvesa.a \
$(top_builddir)/miext/shadow/libshadow.a \ @KDRIVE_LIBS@
$(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)

View File

@ -463,8 +463,6 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr)
pscr->randr = screen->randr; pscr->randr = screen->randr;
pscr->shadow = vesa_shadow; pscr->shadow = vesa_shadow;
pscr->origDepth = screen->fb[0].depth; pscr->origDepth = screen->fb[0].depth;
pscr->layerKind = LAYER_FB;
/* /*
* Compute visual support for the selected depth * Compute visual support for the selected depth
*/ */
@ -683,7 +681,7 @@ void
vesaUpdateMono (ScreenPtr pScreen, vesaUpdateMono (ScreenPtr pScreen,
shadowBufPtr pBuf) shadowBufPtr pBuf)
{ {
RegionPtr damage = &pBuf->damage; RegionPtr damage = shadowDamage(pBuf);
PixmapPtr pShadow = pBuf->pPixmap; PixmapPtr pShadow = pBuf->pPixmap;
int nbox = REGION_NUM_RECTS (damage); int nbox = REGION_NUM_RECTS (damage);
BoxPtr pbox = REGION_RECTS (damage); BoxPtr pbox = REGION_RECTS (damage);
@ -791,30 +789,13 @@ vesaCreateColormap16 (ColormapPtr pmap)
} }
void void
vesaConfigureScreen (ScreenPtr pScreen) vesaSetScreenSizes (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = screen->driver;
KdMouseMatrix m; if (pscr->randr & (RR_Rotate_0|RR_Rotate_180))
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])
{ {
pScreen->width = pscr->mode.XResolution; pScreen->width = pscr->mode.XResolution;
pScreen->height = pscr->mode.YResolution; pScreen->height = pscr->mode.YResolution;
@ -828,67 +809,45 @@ vesaConfigureScreen (ScreenPtr pScreen)
pScreen->mmWidth = screen->height_mm; pScreen->mmWidth = screen->height_mm;
pScreen->mmHeight = screen->width_mm; pScreen->mmHeight = screen->width_mm;
} }
KdSetMouseMatrix (&m);
} }
LayerPtr Bool
vesaLayerCreate (ScreenPtr pScreen) vesaSetShadow (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
ShadowUpdateProc update; ShadowUpdateProc update;
ShadowWindowProc window = 0; 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
window = vesaWindowLinear;
break;
}
kind = LAYER_SHADOW;
pPixmap = 0;
}
else else
{ update = shadowUpdatePacked;
kind = pscr->layerKind; switch (pscr->mapping) {
pPixmap = LAYER_SCREEN_PIXMAP; case VESA_LINEAR:
update = 0; window = vesaWindowLinear;
window = 0; 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;
} }
if (vesa_verbose) return KdShadowSet (pScreen, pscr->randr, update, window);
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);
} }
Bool Bool
@ -898,11 +857,18 @@ vesaMapFramebuffer (KdScreenInfo *screen)
VesaScreenPrivPtr pscr = screen->driver; VesaScreenPrivPtr pscr = screen->driver;
int depth, bpp, fbbpp; int depth, bpp, fbbpp;
Pixel allbits; Pixel allbits;
KdMouseMatrix m;
if (vesa_linear_fb) if (vesa_linear_fb)
{
pscr->mapping = VESA_LINEAR; pscr->mapping = VESA_LINEAR;
pscr->shadow = FALSE;
}
else else
{
pscr->mapping = VESA_WINDOWED; pscr->mapping = VESA_WINDOWED;
pscr->shadow = TRUE;
}
depth = vesaDepth (&pscr->mode); depth = vesaDepth (&pscr->mode);
bpp = pscr->mode.BitsPerPixel; bpp = pscr->mode.BitsPerPixel;
@ -963,9 +929,10 @@ vesaMapFramebuffer (KdScreenInfo *screen)
bpp, depth); bpp, depth);
} }
pscr->randr = RR_Rotate_0; pscr->randr = RR_Rotate_0;
pscr->shadow = TRUE;
break; break;
default: default:
return 0; return FALSE;
} }
switch (fbbpp) { switch (fbbpp) {
@ -978,15 +945,17 @@ vesaMapFramebuffer (KdScreenInfo *screen)
break; break;
} }
screen->width = pscr->mode.XResolution; if (pscr->randr != RR_Rotate_0)
screen->height = pscr->mode.YResolution; pscr->shadow = TRUE;
screen->fb[0].depth = depth;
screen->fb[0].bitsPerPixel = bpp; if (vesa_shadow)
screen->fb[0].byteStride = pscr->mode.BytesPerScanLine; pscr->shadow = vesa_shadow;
screen->fb[0].pixelStride = ((pscr->mode.BytesPerScanLine * 8) / fbbpp);
if (pscr->mapping == VESA_LINEAR && !(pscr->mode.ModeAttributes & MODE_LINEAR)) if (pscr->mapping == VESA_LINEAR && !(pscr->mode.ModeAttributes & MODE_LINEAR))
{
pscr->mapping = VESA_WINDOWED; pscr->mapping = VESA_WINDOWED;
pscr->shadow = TRUE;
}
screen->softCursor = TRUE; screen->softCursor = TRUE;
@ -1013,7 +982,35 @@ vesaMapFramebuffer (KdScreenInfo *screen)
pscr->fb = NULL; pscr->fb = NULL;
break; 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; return TRUE;
} }
@ -1023,6 +1020,7 @@ vesaUnmapFramebuffer (KdScreenInfo *screen)
VesaCardPrivPtr priv = screen->card->driver; VesaCardPrivPtr priv = screen->card->driver;
VesaScreenPrivPtr pscr = screen->driver; VesaScreenPrivPtr pscr = screen->driver;
KdShadowFbFree (screen, 0);
if (pscr->fb) if (pscr->fb)
{ {
if (pscr->mode.vbe) if (pscr->mode.vbe)
@ -1108,29 +1106,6 @@ vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
return TRUE; 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 Bool
vesaRandRSetConfig (ScreenPtr pScreen, vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr, Rotation randr,
@ -1150,7 +1125,6 @@ vesaRandRSetConfig (ScreenPtr pScreen,
int oldheight; int oldheight;
int oldmmwidth; int oldmmwidth;
int oldmmheight; int oldmmheight;
LayerPtr pNewLayer;
int newwidth, newheight; int newwidth, newheight;
if (screen->randr & (RR_Rotate_0|RR_Rotate_180)) if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
@ -1225,54 +1199,29 @@ vesaRandRSetConfig (ScreenPtr pScreen,
break; break;
} }
KdOffscreenSwapOut (screen->pScreen);
vesaUnmapFramebuffer (screen); vesaUnmapFramebuffer (screen);
if (!vesaMapFramebuffer (screen)) if (!vesaMapFramebuffer (screen))
goto bail3; goto bail3;
#if 0 vesaSetScreenSizes (screen->pScreen);
/*
* XXX can't switch depths yet if (!vesaSetShadow (screen->pScreen))
*/ goto bail4;
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);
/*
* Compute screen geometry
*/
vesaConfigureScreen (pScreen);
/* /*
* Set frame buffer mapping * Set frame buffer mapping
*/ */
if (!pscr->shadow) (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
{ pScreen->width,
(*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen), pScreen->height,
pScreen->width, screen->fb[0].depth,
pScreen->height, screen->fb[0].bitsPerPixel,
screen->fb[0].depth, screen->fb[0].byteStride,
screen->fb[0].bitsPerPixel, screen->fb[0].frameBuffer);
screen->fb[0].byteStride,
screen->fb[0].frameBuffer);
}
/*
* Create the layer
*/
pNewLayer = vesaLayerCreate (pScreen);
if (!pNewLayer)
goto bail4;
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 */ /* set the subpixel order */
KdSetSubpixelOrder (pScreen, pscr->randr); KdSetSubpixelOrder (pScreen, pscr->randr);
@ -1281,9 +1230,6 @@ vesaRandRSetConfig (ScreenPtr pScreen,
return TRUE; return TRUE;
bail5:
WalkTree (pScreen, vesaLayerRemove, (pointer) pNewLayer);
LayerDestroy (pScreen, pNewLayer);
bail4: bail4:
vesaUnmapFramebuffer (screen); vesaUnmapFramebuffer (screen);
*pscr = oldscr; *pscr = oldscr;
@ -1298,22 +1244,7 @@ bail3:
bail2: bail2:
*pscr = oldscr; *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); (void) vesaSetMode (pScreen, &pscr->mode);
bail1: bail1:
if (wasEnabled) if (wasEnabled)
KdEnableScreen (pScreen); KdEnableScreen (pScreen);
@ -1340,27 +1271,13 @@ vesaRandRInit (ScreenPtr pScreen)
Bool Bool
vesaInitScreen(ScreenPtr pScreen) vesaInitScreen(ScreenPtr pScreen)
{ {
if (!LayerStartInit (pScreen))
return FALSE;
return TRUE; return TRUE;
} }
Bool Bool
vesaFinishInitScreen (ScreenPtr pScreen) vesaFinishInitScreen (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); if (!shadowSetup (pScreen))
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
pscr->layerKind = LayerNewKind (pScreen);
if (!LayerFinishInit (pScreen))
return FALSE;
vesaConfigureScreen (pScreen);
pscr->pLayer = vesaLayerCreate (pScreen);
if (!pscr->pLayer)
return FALSE; return FALSE;
#ifdef RANDR #ifdef RANDR
@ -1371,6 +1288,12 @@ vesaFinishInitScreen (ScreenPtr pScreen)
return TRUE; return TRUE;
} }
Bool
vesaCreateResources (ScreenPtr pScreen)
{
return vesaSetShadow (pScreen);
}
Bool Bool
vesaSetMode (ScreenPtr pScreen, vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode) VesaModePtr mode)
@ -1668,6 +1591,7 @@ vesaScreenFini(KdScreenInfo *screen)
{ {
VesaScreenPrivPtr pscr = screen->driver; VesaScreenPrivPtr pscr = screen->driver;
KdShadowFbFree (screen, 0);
vesaUnmapFramebuffer (screen); vesaUnmapFramebuffer (screen);
screen->fb[0].depth = pscr->origDepth; screen->fb[0].depth = pscr->origDepth;
} }

View File

@ -25,7 +25,7 @@ THE SOFTWARE.
#define _VESA_H_ #define _VESA_H_
#include "kdrive.h" #include "kdrive.h"
#include "layer.h" #include "shadow.h"
#include "vm86.h" #include "vm86.h"
#ifdef RANDR #ifdef RANDR
#include "randrstr.h" #include "randrstr.h"
@ -98,16 +98,91 @@ typedef struct _VesaScreenPriv {
Rotation randr; Rotation randr;
int mapping; int mapping;
int origDepth; int origDepth;
int layerKind;
void *fb; void *fb;
int fb_size; int fb_size;
CARD32 fb_phys; CARD32 fb_phys;
LayerPtr pLayer; PixmapPtr pShadow;
} VesaScreenPrivRec, *VesaScreenPrivPtr; } VesaScreenPrivRec, *VesaScreenPrivPtr;
extern int vesa_video_mode; extern int vesa_video_mode;
extern Bool vesa_force_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 void
vesaListModes(void); vesaListModes(void);
@ -145,18 +220,24 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr);
Bool Bool
vesaScreenInit(KdScreenInfo *screen); vesaScreenInit(KdScreenInfo *screen);
LayerPtr PixmapPtr
vesaLayerCreate (ScreenPtr pScreen); vesaGetPixmap (ScreenPtr pScreen);
Bool Bool
vesaMapFramebuffer (KdScreenInfo *screen); vesaMapFramebuffer (KdScreenInfo *screen);
void
vesaUnmapFramebuffer (KdScreenInfo *screen);
Bool Bool
vesaInitScreen(ScreenPtr pScreen); vesaInitScreen(ScreenPtr pScreen);
Bool Bool
vesaFinishInitScreen(ScreenPtr pScreen); vesaFinishInitScreen(ScreenPtr pScreen);
Bool
vesaCreateResources (ScreenPtr pScreen);
Bool Bool
vesaSetMode (ScreenPtr pScreen, vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode); VesaModePtr mode);
@ -182,6 +263,12 @@ vesaCardFini(KdCardInfo *card);
void void
vesaScreenFini(KdScreenInfo *screen); vesaScreenFini(KdScreenInfo *screen);
int
vesaSetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
int
vesaGetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
void void
vesaPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); vesaPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
@ -192,11 +279,20 @@ int
vesaProcessArgument (int argc, char **argv, int i); vesaProcessArgument (int argc, char **argv, int i);
#ifdef RANDR #ifdef RANDR
Bool
vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations);
Bool Bool
vesaRandRSetConfig (ScreenPtr pScreen, vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr, Rotation randr,
int rate, int rate,
RRScreenSizePtr pSize); RRScreenSizePtr pSize);
Bool
vesaRandRInit (ScreenPtr pScreen);
#endif #endif
Bool
toshibaDPMS (ScreenPtr pScreen, int mode);
#endif /* _VESA_H_ */ #endif /* _VESA_H_ */

View File

@ -30,6 +30,8 @@ const KdCardFuncs vesaFuncs = {
vesaCardInit, /* cardinit */ vesaCardInit, /* cardinit */
vesaScreenInit, /* scrinit */ vesaScreenInit, /* scrinit */
vesaInitScreen, /* initScreen */ vesaInitScreen, /* initScreen */
vesaFinishInitScreen, /* finishInitScreen */
vesaCreateResources, /* createRes */
vesaPreserve, /* preserve */ vesaPreserve, /* preserve */
vesaEnable, /* enable */ vesaEnable, /* enable */
vesaDPMS, /* dpms */ vesaDPMS, /* dpms */
@ -52,8 +54,6 @@ const KdCardFuncs vesaFuncs = {
vesaGetColors, /* getColors */ vesaGetColors, /* getColors */
vesaPutColors, /* putColors */ vesaPutColors, /* putColors */
vesaFinishInitScreen, /* finishInitScreen */
}; };
void void