Compare commits

...

12 Commits

Author SHA1 Message Date
Eric Anholt
e3e6fa3e33 Fix fill/copyarea of r128 by setting the scissor registers in setup, as
XFree86 does on engine init. Add another PCI ID to r128stub.c.
2003-11-02 09:27:36 +00:00
Keith Packard
fe28039ff4 Prototype fixes (various) Add GCC warnings (including -Werror. clean up
your code) Other warning fixes (unused variables, etc) Get rid of
    unused extension interfaces (aux screen procs) Make lots of functions
    in kdrive static Eliminate unused code from os library
2003-10-29 16:26:49 +00:00
Keith Packard
f1d14244df Was using byteStride before set in computing off_screen_base Also a couple
of unused variables removed
2003-10-25 15:13:20 +00:00
Keith Packard
0e1c630376 Make building (almost) work with automake 1.4 or 1.7. The dist-bzip2 option
needs help still.
2003-10-25 06:10:48 +00:00
Keith Packard
91dfc6b455 Function pointer initializers in wrong order (oops)
Missing return value
Not obeying autoconf HAVE_ALLOCA_H all of the time.
2003-10-25 05:44:47 +00:00
Keith Packard
faa7c94689 Add function called at CreateScreenResources to get shadow set up on pixmap
correctly. Rework vesa and fbdev code to handle shadows right with the
    non-layer world.
Use GetScreenPixmap directly for damage detection of sprite. Avoids
    problems during server shutdown with windows disappearing before the
    sprite layer is closed.
2003-10-24 09:34:33 +00:00
Keith Packard
d5b176b2d4 Ok, so this change is way bigger than it needed to be, but I couldn't stand
it anymore. The "real" change here is the addition of the damage
    extension server side pieces and a minor change of the miext/damage
    interface to add a callback on damage destroy. All of the configuration
    changes are to add macros for various sets of libraries so that we
    don't have to keep editing every Makefile.am whenever we add another
    extension to the library. The xfixes changes expose VERIFY_REGION so
    that damageext can use it.
2003-10-24 06:35:24 +00:00
Keith Packard
d67e480c32 Added SYNC_ALWAYS for debugging (sync after each operation)
Add SPRITE_DEBUG_ENABLE to help debug cursor problems
Leave all GCs redirected through Damage GC ops so that adding damage
    doesn't require revalidating all GCs (that would require walking the
    window tree and resetting all serial numbers). Add DAMAGE_DEBUG_ENABLE
    to help debug damage problems
2003-10-22 21:23:44 +00:00
Keith Packard
a7d61f290c Don't start pixmaps differing from root format in off-screen memory 2003-10-22 07:08:02 +00:00
Keith Packard
f2f8347001 oops. Failed to set window offsets in kaaGetOffscreenPixmap
Initialized shadow too early; acceleration stomped damage
2003-10-22 06:52:44 +00:00
Keith Packard
52ada03edb Build damage infrastructure. Don't build layer
Move check for 24/32 copy to fbCopyNtoN so that other users will hit it
Eliminate miext/layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Memory leak fix of mach64c on server reset Memory leak fix for video on
    server reset. Eliminate layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Don't assume windows are onscreen, use GetWindowPixmap and test
    devPrivate.ptr. Make sure depth 24 pixmaps are 24bpp when hardware
    format is 24bpp.
Get rid of debug KdAssertSync function
add memory_size to KdScreenInfo, eliminate off_screen_size, fix tests to
    suit.
Build damage infrastructure. Don't build layer
Use damage (for software cursor, I guess)
Damage is used for software cursor
Build damage infrastructure. Don't build layer
Use damage to track changes
Fix memory leak
2003-10-22 06:00:50 +00:00
Keith Packard
950cb2fd60 Minor cleanups -- remove a couple of bogus KdCheckSync calls, restructure
KdOffscreenSwapOut to avoid unneeded 'continue'
2003-10-19 20:48:16 +00:00
51 changed files with 930 additions and 1009 deletions

View File

@ -1,12 +1,6 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@KDRIVE_INCS@ \
@XSERVER_CFLAGS@
noinst_LIBRARIES = libfbdev.a
@ -18,28 +12,18 @@ libfbdev_a_SOURCES = \
Xfbdev_SOURCES = \
fbinit.c
Xfbdev_LDADD = \
libfbdev.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
if TSLIB
Xfbdev_LDADD += -lts
TSLIB_FLAG = -lts
endif
Xfbdev_LDADD = \
libfbdev.a \
@KDRIVE_LIBS@ \
@XSERVER_LIBS@ \
$(TSLIB_FLAG)
Xfbdev_DEPENDENCIES = \
libfbdev.a \
@KDRIVE_LIBS@

View File

@ -29,9 +29,6 @@
#include "fbdev.h"
#include <sys/ioctl.h>
/* this code was used to debug MSB 24bpp code on a 16bpp frame buffer */
#undef FAKE24_ON_16
extern int KdTsPhyScreen;
Bool
@ -114,9 +111,6 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
Pixel allbits;
int depth;
Bool gray;
#ifdef FAKE24_ON_16
Bool fake24;
#endif
depth = priv->var.bits_per_pixel;
gray = priv->var.grayscale;
@ -190,35 +184,8 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
}
screen->rate = 72;
scrpriv->randr = screen->randr;
scrpriv->layerKind = LAYER_FB;
#ifdef FAKE24_ON_16
if (screen->fb[0].depth == 24 && screen->fb[0].bitsPerPixel == 24 &&
priv->var.bits_per_pixel == 16)
{
fake24 = TRUE;
scrpriv->shadow = TRUE;
scrpriv->rotation = 0;
screen->fb[0].redMask = 0xff0000;
screen->fb[0].greenMask = 0x00ff00;
screen->fb[0].blueMask = 0x0000ff;
screen->width = priv->var.xres;
screen->height = priv->var.yres;
screen->softCursor = TRUE;
}
else
#endif
{
screen->fb[0].depth = depth;
screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
screen->width = priv->var.xres;
screen->height = priv->var.yres;
screen->fb[0].byteStride = priv->fix.line_length;
screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
priv->var.bits_per_pixel);
screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
}
return TRUE;
return fbdevMapFramebuffer (screen);
}
Bool
@ -256,173 +223,94 @@ fbdevWindowLinear (ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
}
#ifdef FAKE24_ON_16
void
fbdevUpdateFake24 (ScreenPtr pScreen,
PixmapPtr pShadow,
RegionPtr damage)
Bool
fbdevMapFramebuffer (KdScreenInfo *screen)
{
shadowScrPriv(pScreen);
int nbox = REGION_NUM_RECTS (damage);
BoxPtr pbox = REGION_RECTS (damage);
FbBits *shaBits;
CARD8 *shaBase, *shaLine, *sha;
CARD16 s;
FbStride shaStride;
int scrBase, scrLine, scr;
int shaBpp;
int x, y, w, h, width;
int i;
CARD16 *winBase, *winLine, *win;
CARD32 winSize;
FbdevScrPriv *scrpriv = screen->driver;
KdMouseMatrix m;
FbdevPriv *priv = screen->card->driver;
fbGetDrawable (&pShadow->drawable, shaBits, shaStride, shaBpp);
shaStride = shaStride * sizeof (FbBits) / sizeof (CARD8);
shaBase = (CARD8 *) shaBits;
while (nbox--)
if (scrpriv->randr != RR_Rotate_0)
scrpriv->shadow = TRUE;
else
scrpriv->shadow = FALSE;
KdComputeMouseMatrix (&m, scrpriv->randr, screen->width, screen->height);
KdSetMouseMatrix (&m);
screen->width = priv->var.xres;
screen->height = priv->var.yres;
screen->memory_base = (CARD8 *) (priv->fb);
screen->memory_size = 0;
screen->off_screen_base = 0;
screen->fb[0].depth = priv->var.bits_per_pixel;
screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
if (scrpriv->shadow)
{
x = pbox->x1;
y = pbox->y1;
w = (pbox->x2 - pbox->x1);
h = pbox->y2 - pbox->y1;
shaLine = shaBase + y * shaStride + x * 3;
while (h--)
{
winSize = 0;
scrBase = 0;
width = w;
scr = x;
sha = shaLine;
while (width) {
/* how much remains in this window */
i = scrBase + winSize - scr;
if (i <= 0 || scr < scrBase)
{
winBase = (CARD16 *) (*pScrPriv->window) (pScreen,
y,
scr * sizeof (CARD16),
SHADOW_WINDOW_WRITE,
&winSize);
if(!winBase)
return;
scrBase = scr;
winSize /= sizeof (CARD16);
i = winSize;
}
win = winBase + (scr - scrBase);
if (i > width)
i = width;
width -= i;
scr += i;
while (i--)
{
#if IMAGE_BYTE_ORDER == MSBFirst
*win++ = ((sha[2] >> 3) |
((sha[1] & 0xf8) << 2) |
((sha[0] & 0xf8) << 7));
#else
*win++ = ((sha[0] >> 3) |
((sha[1] & 0xfc) << 3) |
((sha[2] & 0xf8) << 8));
#endif
sha += 3;
}
}
shaLine += shaStride;
y++;
}
pbox++;
if (!KdShadowFbAlloc (screen, 0,
scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
return FALSE;
}
else
{
screen->fb[0].byteStride = priv->fix.line_length;
screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
priv->var.bits_per_pixel);
screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
}
return TRUE;
}
#endif /* FAKE24_ON_16 */
void
fbdevConfigureScreen (ScreenPtr pScreen)
fbdevSetScreenSizes (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver;
KdMouseMatrix m;
FbdevPriv *priv = screen->card->driver;
#ifdef FAKE24_ON_16
if (fake24)
if (scrpriv->randr & (RR_Rotate_0|RR_Rotate_180))
{
scrpriv->randr = RR_Rotate_0;
scrpriv->shadow = TRUE;
}
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->width = priv->var.xres;
pScreen->height = priv->var.yres;
pScreen->mmWidth = screen->width_mm;
pScreen->mmHeight = screen->height_mm;
}
else
{
pScreen->width = screen->height;
pScreen->height = screen->width;
pScreen->width = priv->var.yres;
pScreen->height = priv->var.xres;
pScreen->mmWidth = screen->height_mm;
pScreen->mmHeight = screen->width_mm;
}
KdSetMouseMatrix (&m);
}
LayerPtr
fbdevLayerCreate (ScreenPtr pScreen)
Bool
fbdevUnmapFramebuffer (KdScreenInfo *screen)
{
KdShadowFbFree (screen, 0);
return TRUE;
}
Bool
fbdevSetShadow (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver;
ShadowUpdateProc update;
ShadowWindowProc window;
PixmapPtr pPixmap;
int kind;
if (scrpriv->shadow)
{
window = fbdevWindowLinear;
update = 0;
#ifdef FAKE24_ON_16
if (pScreenPriv->screen->fb[0].bitsPerPixel == 24 && priv->var.bits_per_pixel == 16)
{
update = fbdevUpdateFake24;
}
else
#endif /* FAKE24_ON_16 */
{
if (scrpriv->randr)
update = shadowUpdateRotatePacked;
else
update = shadowUpdatePacked;
}
if (!update)
abort ();
kind = LAYER_SHADOW;
pPixmap = 0;
}
window = fbdevWindowLinear;
update = 0;
if (scrpriv->randr)
update = shadowUpdateRotatePacked;
else
{
kind = scrpriv->layerKind;
pPixmap = LAYER_SCREEN_PIXMAP;
update = 0;
window = 0;
}
return LayerCreate (pScreen, kind, screen->fb[0].depth,
pPixmap, update, window, scrpriv->randr, 0);
update = shadowUpdatePacked;
return KdShadowSet (pScreen, scrpriv->randr, update, window);
}
@ -458,29 +346,6 @@ fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
return TRUE;
}
int
fbdevLayerAdd (WindowPtr pWin, pointer value)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
LayerPtr pLayer = (LayerPtr) value;
if (!LayerWindowAdd (pScreen, pLayer, pWin))
return WT_STOPWALKING;
return WT_WALKCHILDREN;
}
int
fbdevLayerRemove (WindowPtr pWin, pointer value)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
LayerPtr pLayer = (LayerPtr) value;
LayerWindowRemove (pScreen, pLayer, pWin);
return WT_WALKCHILDREN;
}
Bool
fbdevRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
@ -496,7 +361,6 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
int oldheight;
int oldmmwidth;
int oldmmheight;
LayerPtr pNewLayer;
int newwidth, newheight;
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
@ -526,34 +390,46 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
scrpriv->randr = KdAddRotation (screen->randr, randr);
fbdevConfigureScreen (pScreen);
KdOffscreenSwapOut (screen->pScreen);
pNewLayer = fbdevLayerCreate (pScreen);
if (!pNewLayer)
fbdevUnmapFramebuffer (screen);
if (!fbdevMapFramebuffer (screen))
goto bail4;
if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
goto bail5;
WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer);
LayerDestroy (pScreen, scrpriv->pLayer);
if (!fbdevSetShadow (screen->pScreen))
goto bail4;
scrpriv->pLayer = pNewLayer;
fbdevSetScreenSizes (screen->pScreen);
/*
* Set frame buffer mapping
*/
(*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
pScreen->width,
pScreen->height,
screen->fb[0].depth,
screen->fb[0].bitsPerPixel,
screen->fb[0].byteStride,
screen->fb[0].frameBuffer);
/* set the subpixel order */
KdSetSubpixelOrder (pScreen, scrpriv->randr);
if (wasEnabled)
KdEnableScreen (pScreen);
return TRUE;
bail5:
WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
LayerDestroy (pScreen, pNewLayer);
bail4:
fbdevUnmapFramebuffer (screen);
*scrpriv = oldscr;
(void) fbdevMapFramebuffer (screen);
pScreen->width = oldwidth;
pScreen->height = oldheight;
pScreen->mmWidth = oldmmwidth;
pScreen->mmHeight = oldmmheight;
*scrpriv = oldscr;
if (wasEnabled)
KdEnableScreen (pScreen);
return FALSE;
@ -616,27 +492,15 @@ fbdevInitScreen (ScreenPtr pScreen)
#endif
pScreen->CreateColormap = fbdevCreateColormap;
if (!LayerStartInit (pScreen))
return FALSE;
return TRUE;
}
Bool
fbdevFinishInitScreen (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
scrpriv->layerKind = LayerNewKind (pScreen);
if (!LayerFinishInit (pScreen))
if (!shadowSetup (pScreen))
return FALSE;
scrpriv->pLayer = fbdevLayerCreate (pScreen);
if (!scrpriv->pLayer)
return FALSE;
#ifdef RANDR
if (!fbdevRandRInit (pScreen))
return FALSE;
@ -645,6 +509,13 @@ fbdevFinishInitScreen (ScreenPtr pScreen)
return TRUE;
}
Bool
fbdevCreateResources (ScreenPtr pScreen)
{
return fbdevSetShadow (pScreen);
}
void
fbdevPreserve (KdCardInfo *card)
{

View File

@ -30,7 +30,6 @@
#include <unistd.h>
#include <sys/mman.h>
#include "kdrive.h"
#include "layer.h"
#ifdef RANDR
#include "randrstr.h"
@ -50,8 +49,7 @@ typedef struct _fbdevPriv {
typedef struct _fbdevScrPriv {
Rotation randr;
Bool shadow;
int layerKind;
LayerPtr pLayer;
PixmapPtr pShadow;
} FbdevScrPriv;
extern KdCardFuncs fbdevFuncs;
@ -71,6 +69,12 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv);
Bool
fbdevInitScreen (ScreenPtr pScreen);
Bool
fbdevFinishInitScreen (ScreenPtr pScreen);
Bool
fbdevCreateResources (ScreenPtr pScreen);
void
fbdevPreserve (KdCardInfo *card);
@ -99,6 +103,40 @@ void
fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
Bool
fbdevFinishInitScreen (ScreenPtr pScreen);
fbdevMapFramebuffer (KdScreenInfo *screen);
void *
fbdevWindowLinear (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size,
void *closure);
void
fbdevSetScreenSizes (ScreenPtr pScreen);
Bool
fbdevUnmapFramebuffer (KdScreenInfo *screen);
Bool
fbdevSetShadow (ScreenPtr pScreen);
Bool
fbdevCreateColormap (ColormapPtr pmap);
#ifdef RANDR
Bool
fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations);
Bool
fbdevRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
int rate,
RRScreenSizePtr pSize);
Bool
fbdevRandRInit (ScreenPtr pScreen);
#endif
#endif /* _FBDEV_H_ */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,14 +1,7 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/linux \
@KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@XSERVER_CFLAGS@
bin_PROGRAMS = Xmach64
@ -22,28 +15,16 @@ libmach64_a_SOURCES = \
mach64.h \
mach64draw.h
Xmach64_SOURCES = \
mach64stub.c
Xmach64_LDADD = \
libmach64.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
MACH64_LIBS = \
libmach64.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a
Xmach64_LDADD = \
$(MACH64_LIBS) \
@KDRIVE_LIBS@ \
@XSERVER_LIBS@
Xmach64_DEPENDENCIES = $(MACH64_LIBS) @KDRIVE_LIBS@

View File

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

View File

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

View File

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

View File

@ -980,7 +980,10 @@ Bool mach64InitVideo(ScreenPtr pScreen)
int num_adaptors;
KdCardInfo *card = pScreenPriv->card;
Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
mach64s->pAdaptor = NULL;
if (!mach64c->media_reg)
return FALSE;
@ -1017,3 +1020,18 @@ Bool mach64InitVideo(ScreenPtr pScreen)
xfree(newAdaptors);
return TRUE;
}
void
mach64FiniVideo (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
mach64ScreenInfo(pScreenPriv);
KdVideoAdaptorPtr adapt = mach64s->pAdaptor;
if (adapt)
{
Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
REGION_UNINIT (pScreen, &pPortPriv->clip);
xfree (adapt);
}
}

View File

@ -1,15 +1,7 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
@KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/hw/kdrive/linux \
-I$(top_srcdir)/include \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@XSERVER_CFLAGS@
bin_PROGRAMS = Xmga
@ -24,23 +16,7 @@ Xmga_SOURCES = \
mgastub.c
Xmga_LDADD = \
libmga.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
libmga.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
@KDRIVE_LIBS@ \
@XSERVER_LIBS@

View File

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

View File

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

View File

@ -1,13 +1,7 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
@KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@XSERVER_CFLAGS@
bin_PROGRAMS = Xnvidia
@ -29,21 +23,5 @@ Xnvidia_SOURCES = \
Xnvidia_LDADD = \
libnvidia.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
@KDRIVE_LIBS@ \
@XSERVER_LIBS@

View File

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

View File

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

View File

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

View File

@ -1,14 +1,7 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
@KDRIVE_INCS@ \
-I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/include \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@XSERVER_CFLAGS@
bin_PROGRAMS = Xr128
@ -25,21 +18,5 @@ Xr128_SOURCES = \
Xr128_LDADD = \
libr128.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
@KDRIVE_LIBS@ \
@XSERVER_LIBS@

View File

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

View File

@ -45,6 +45,10 @@
#define R128_REG_PC_NGUI_CTLSTAT 0x0184
#define R128_REG_DST_HEIGHT_WIDTH 0x143c
#define R128_REG_SRC_Y_X 0x1434
#define R128_DEFAULT_SC_BOTTOM_RIGHT 0x16e8
#define R128_AUX_SC_CNTL 0x1660
#define R128_SC_TOP_LEFT 0x16ec
#define R128_SC_BOTTOM_RIGHT 0x16f0
#define R128_GMC_DST_DATATYPE_SHIFT 8
#define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28)
@ -57,6 +61,8 @@
#define R128_GUI_ACTIVE (1 << 31)
#define R128_PC_BUSY (1 << 31)
#define R128_DP_SRC_SOURCE_MEMORY (2 << 24)
#define R128_DEFAULT_SC_RIGHT_MAX (0x1fff << 0)
#define R128_DEFAULT_SC_BOTTOM_MAX (0x1fff << 16)
typedef volatile CARD8 VOL8;
typedef volatile CARD16 VOL16;

View File

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

View File

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

View File

@ -1,14 +1,8 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/hw/kdrive/fbdev \
-I$(top_srcdir)/hw/kdrive/vesa \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@KDRIVE_INCS@ \
@XSERVER_CFLAGS@
bin_PROGRAMS = Xsmi
@ -27,21 +21,5 @@ Xsmi_LDADD = \
libsmi.a \
$(top_builddir)/hw/kdrive/fbdev/libfbdev.a \
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS) \
-lm -lz
@KDRIVE_LIBS@ \
@XSERVER_LIBS@

View File

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

View File

@ -35,8 +35,9 @@
#define subInitialize vesaInitialize
#define subScreenInitialize vesaScreenInitialize
#define subInitScreen vesaInitScreen
#define subRandRSetConfig vesaRandRSetConfig
#define subFinishInitScreen vesaFinishInitScreen
#define subCreateResources vesaCreateResources
#define subRandRSetConfig vesaRandRSetConfig
#define subPreserve vesaPreserve
#define subEnable vesaEnable
#define subDPMS vesaDPMS
@ -54,8 +55,9 @@
#define subInitialize fbdevInitialize
#define subScreenInitialize fbdevScreenInitialize
#define subInitScreen fbdevInitScreen
#define subRandRSetConfig fbdevRandRSetConfig
#define subFinishInitScreen fbdevFinishInitScreen
#define subCreateResources fbdevCreateResources
#define subRandRSetConfig fbdevRandRSetConfig
#define subPreserve fbdevPreserve
#define subEnable fbdevEnable
#define subDPMS fbdevDPMS
@ -196,6 +198,18 @@ smiMapReg (KdCardInfo *card, SmiCardInfo *smic);
void
smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic);
void
smiOutb (CARD16 port, CARD8 val);
CARD8
smiInb (CARD16 port);
CARD8
smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id);
void
smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val);
void
smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -61,7 +61,7 @@ KdOffscreenValidate (ScreenPtr pScreen)
prev = area;
}
assert (prev->area.offset + prev->area.size == pScreenPriv->screen->off_screen_size);
assert (prev->area.offset + prev->area.size == pScreenPriv->screen->memory_size);
}
#else
#define KdOffscreenValidate(s)
@ -71,7 +71,6 @@ static void
KdOffscreenKickOut (KdOffscreenArea *area)
{
RealOffscreenArea *real_area = (RealOffscreenArea *) area;
KdCheckSync (area->screen);
if (real_area->save)
(*real_area->save) (area);
KdOffscreenFree (area);
@ -98,7 +97,7 @@ KdOffscreenAlloc (ScreenPtr pScreen, int size, int align,
}
/* throw out requests that cannot fit */
if (size > pScreenPriv->screen->off_screen_size)
if (size > (pScreenPriv->screen->memory_size - pScreenPriv->screen->off_screen_base))
{
DBG_OFFSCREEN (("Alloc 0x%x -> TOBIG\n", size));
return NULL;
@ -209,14 +208,12 @@ KdOffscreenSwapOut (ScreenPtr pScreen)
if (!area)
break;
if (area->area.screen)
if (!area->area.screen)
{
KdOffscreenKickOut (&area->area);
continue;
area = area->next;
if (!area)
break;
}
area = area->next;
if (!area)
break;
assert (area->area.screen);
KdOffscreenKickOut (&area->area);
KdOffscreenValidate (pScreen);
@ -283,7 +280,7 @@ KdOffscreenInit (ScreenPtr pScreen)
area->area.screen = NULL;
area->area.offset = pScreenPriv->screen->off_screen_base;
area->area.size = pScreenPriv->screen->off_screen_size;
area->area.size = pScreenPriv->screen->memory_size - area->area.offset;
area->save = 0;
area->locked = FALSE;
area->next = NULL;

View File

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

View File

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

View File

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

View File

@ -1,12 +1,6 @@
INCLUDES = \
-I$(top_srcdir)/fb \
-I$(top_srcdir)/hw/kdrive/src \
-I$(top_srcdir)/mi \
-I$(top_srcdir)/miext/layer \
-I$(top_srcdir)/miext/shadow \
-I$(top_srcdir)/randr \
-I$(top_srcdir)/render \
$(XSERVER_CFLAGS)
@KDRIVE_INCS@ \
@XSERVER_CFLAGS@
noinst_LIBRARIES = libvesa.a
@ -23,20 +17,9 @@ Xvesa_SOURCES = \
Xvesa_LDADD = \
libvesa.a \
$(top_builddir)/dix/libdix.a \
$(top_builddir)/os/libos.a \
$(top_builddir)/miext/layer/liblayer.a \
$(top_builddir)/hw/kdrive/src/libkdrive.a \
$(top_builddir)/hw/kdrive/linux/liblinux.a \
$(top_builddir)/miext/shadow/libshadow.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/fb/libfb.a \
$(top_builddir)/mi/libmi.a \
$(top_builddir)/Xext/libXext.a \
$(top_builddir)/randr/librandr.a \
$(top_builddir)/render/librender.a \
$(top_builddir)/xfixes/libxfixes.a \
$(top_builddir)/dix/libxpstubs.a \
$(XSERVER_LIBS)
@KDRIVE_LIBS@ \
@XSERVER_LIBS@
Xvesa_DEPENDENCIES = \
libvesa.a \
@KDRIVE_LIBS@

View File

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

View File

@ -25,7 +25,7 @@ THE SOFTWARE.
#define _VESA_H_
#include "kdrive.h"
#include "layer.h"
#include "shadow.h"
#include "vm86.h"
#ifdef RANDR
#include "randrstr.h"
@ -98,16 +98,91 @@ typedef struct _VesaScreenPriv {
Rotation randr;
int mapping;
int origDepth;
int layerKind;
void *fb;
int fb_size;
CARD32 fb_phys;
LayerPtr pLayer;
PixmapPtr pShadow;
} VesaScreenPrivRec, *VesaScreenPrivPtr;
extern int vesa_video_mode;
extern Bool vesa_force_mode;
void
vesaReportMode (VesaModePtr mode);
VesaModePtr
vesaGetModes (Vm86InfoPtr vi, int *ret_nmode);
void
vesaTestMode (void);
void *
vesaSetWindowPlanar(ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size);
void *
vesaSetWindowLinear (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size);
void *
vesaSetWindowWindowed (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size);
void *
vesaWindowPlanar (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size,
void *closure);
void *
vesaWindowLinear (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size,
void *closure);
void *
vesaWindowWindowed (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size,
void *closure);
void *
vesaWindowCga (ScreenPtr pScreen,
CARD32 row,
CARD32 offset,
int mode,
CARD32 *size,
void *closure);
void
vesaUpdateMono (ScreenPtr pScreen,
shadowBufPtr pBuf);
Bool
vesaCreateColormap16 (ColormapPtr pmap);
void
vesaSetScreenSizes (ScreenPtr pScreen);
Bool
vesaSetShadow (ScreenPtr pScreen);
void
vesaListModes(void);
@ -145,18 +220,24 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr);
Bool
vesaScreenInit(KdScreenInfo *screen);
LayerPtr
vesaLayerCreate (ScreenPtr pScreen);
PixmapPtr
vesaGetPixmap (ScreenPtr pScreen);
Bool
vesaMapFramebuffer (KdScreenInfo *screen);
void
vesaUnmapFramebuffer (KdScreenInfo *screen);
Bool
vesaInitScreen(ScreenPtr pScreen);
Bool
vesaFinishInitScreen(ScreenPtr pScreen);
Bool
vesaCreateResources (ScreenPtr pScreen);
Bool
vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode);
@ -182,6 +263,12 @@ vesaCardFini(KdCardInfo *card);
void
vesaScreenFini(KdScreenInfo *screen);
int
vesaSetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
int
vesaGetPalette(VesaCardPrivPtr priv, int first, int number, U8 *entries);
void
vesaPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
@ -192,11 +279,20 @@ int
vesaProcessArgument (int argc, char **argv, int i);
#ifdef RANDR
Bool
vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations);
Bool
vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
int rate,
RRScreenSizePtr pSize);
Bool
vesaRandRInit (ScreenPtr pScreen);
#endif
Bool
toshibaDPMS (ScreenPtr pScreen, int mode);
#endif /* _VESA_H_ */

View File

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