merge xfixes_2_branch back to HEAD
This commit is contained in:
parent
9e94665cf9
commit
5378236aa6
|
@ -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@
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ();
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 */
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
|
@ -305,11 +305,3 @@ const GCOps kdAsyncPixmapGCOps = {
|
||||||
,NULL
|
,NULL
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
KdAssertSync (ScreenPtr pScreen)
|
|
||||||
{
|
|
||||||
KdScreenPriv(pScreen);
|
|
||||||
KdCardInfo *card = pScreenPriv->card;
|
|
||||||
assert (!card->needSync);
|
|
||||||
}
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ KdDisableColormap (ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
KdColormapFb (ColormapPtr pCmap)
|
KdColormapFb (ColormapPtr pCmap)
|
||||||
{
|
{
|
||||||
ScreenPtr pScreen = pCmap->pScreen;
|
ScreenPtr pScreen = pCmap->pScreen;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue