Fix fbdev server to allow accelerated servers on top to use RandR. Switch
smi server to fbdev (vesa bios doesnt work on the Acer I have here)
This commit is contained in:
parent
f3d8476ced
commit
adc5b8068d
|
@ -192,6 +192,7 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
|
||||||
}
|
}
|
||||||
screen->rate = 72;
|
screen->rate = 72;
|
||||||
scrpriv->randr = screen->randr;
|
scrpriv->randr = screen->randr;
|
||||||
|
scrpriv->layerKind = LAYER_FB;
|
||||||
|
|
||||||
#ifdef FAKE24_ON_16
|
#ifdef FAKE24_ON_16
|
||||||
if (screen->fb[0].depth == 24 && screen->fb[0].bitsPerPixel == 24 &&
|
if (screen->fb[0].depth == 24 && screen->fb[0].bitsPerPixel == 24 &&
|
||||||
|
@ -339,18 +340,13 @@ fbdevUpdateFake24 (ScreenPtr pScreen,
|
||||||
}
|
}
|
||||||
#endif /* FAKE24_ON_16 */
|
#endif /* FAKE24_ON_16 */
|
||||||
|
|
||||||
LayerPtr
|
void
|
||||||
fbdevLayerCreate (ScreenPtr pScreen)
|
fbdevConfigureScreen (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
KdScreenInfo *screen = pScreenPriv->screen;
|
KdScreenInfo *screen = pScreenPriv->screen;
|
||||||
FbdevPriv *priv = pScreenPriv->card->driver;
|
FbdevPriv *priv = pScreenPriv->card->driver;
|
||||||
FbdevScrPriv *scrpriv = screen->driver;
|
FbdevScrPriv *scrpriv = screen->driver;
|
||||||
LayerPtr pLayer;
|
|
||||||
ShadowUpdateProc update;
|
|
||||||
ShadowWindowProc window;
|
|
||||||
PixmapPtr pPixmap;
|
|
||||||
int kind;
|
|
||||||
KdMouseMatrix m;
|
KdMouseMatrix m;
|
||||||
|
|
||||||
#ifdef FAKE24_ON_16
|
#ifdef FAKE24_ON_16
|
||||||
|
@ -385,7 +381,22 @@ fbdevLayerCreate (ScreenPtr pScreen)
|
||||||
pScreen->mmHeight = screen->width_mm;
|
pScreen->mmHeight = screen->width_mm;
|
||||||
}
|
}
|
||||||
KdSetMouseMatrix (&m);
|
KdSetMouseMatrix (&m);
|
||||||
|
}
|
||||||
|
|
||||||
|
LayerPtr
|
||||||
|
fbdevLayerCreate (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
KdScreenInfo *screen = pScreenPriv->screen;
|
||||||
|
FbdevPriv *priv = pScreenPriv->card->driver;
|
||||||
|
FbdevScrPriv *scrpriv = screen->driver;
|
||||||
|
LayerPtr pLayer;
|
||||||
|
ShadowUpdateProc update;
|
||||||
|
ShadowWindowProc window;
|
||||||
|
PixmapPtr pPixmap;
|
||||||
|
int kind;
|
||||||
|
KdMouseMatrix m;
|
||||||
|
|
||||||
if (scrpriv->shadow)
|
if (scrpriv->shadow)
|
||||||
{
|
{
|
||||||
window = fbdevWindowLinear;
|
window = fbdevWindowLinear;
|
||||||
|
@ -410,7 +421,7 @@ fbdevLayerCreate (ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
kind = LAYER_FB;
|
kind = scrpriv->layerKind;
|
||||||
pPixmap = LAYER_SCREEN_PIXMAP;
|
pPixmap = LAYER_SCREEN_PIXMAP;
|
||||||
update = 0;
|
update = 0;
|
||||||
window = 0;
|
window = 0;
|
||||||
|
@ -486,55 +497,76 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
|
||||||
KdScreenInfo *screen = pScreenPriv->screen;
|
KdScreenInfo *screen = pScreenPriv->screen;
|
||||||
FbdevPriv *priv = pScreenPriv->card->driver;
|
FbdevPriv *priv = pScreenPriv->card->driver;
|
||||||
FbdevScrPriv *scrpriv = screen->driver;
|
FbdevScrPriv *scrpriv = screen->driver;
|
||||||
int rotate;
|
|
||||||
int reflect;
|
|
||||||
Bool wasEnabled = pScreenPriv->enabled;
|
Bool wasEnabled = pScreenPriv->enabled;
|
||||||
|
FbdevScrPriv oldscr;
|
||||||
|
int oldwidth;
|
||||||
|
int oldheight;
|
||||||
|
int oldmmwidth;
|
||||||
|
int oldmmheight;
|
||||||
|
LayerPtr pNewLayer;
|
||||||
|
int newwidth, newheight;
|
||||||
|
|
||||||
/*
|
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
|
||||||
* The only thing that can change is rotation
|
|
||||||
*/
|
|
||||||
randr = KdAddRotation (randr, screen->randr);
|
|
||||||
|
|
||||||
if (scrpriv->randr != randr)
|
|
||||||
{
|
{
|
||||||
LayerPtr pNewLayer;
|
newwidth = pSize->width;
|
||||||
int kind;
|
newheight = pSize->height;
|
||||||
int oldrandr = scrpriv->randr;
|
|
||||||
int oldshadow = scrpriv->shadow;
|
|
||||||
int oldwidth = pScreen->width;
|
|
||||||
int oldheight = pScreen->height;
|
|
||||||
PixmapPtr pPixmap;
|
|
||||||
|
|
||||||
if (wasEnabled)
|
|
||||||
KdDisableScreen (pScreen);
|
|
||||||
|
|
||||||
scrpriv->randr = randr;
|
|
||||||
pNewLayer = fbdevLayerCreate (pScreen);
|
|
||||||
if (!pNewLayer)
|
|
||||||
{
|
|
||||||
scrpriv->shadow = oldshadow;
|
|
||||||
scrpriv->randr = oldrandr;
|
|
||||||
}
|
|
||||||
if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
|
|
||||||
{
|
|
||||||
WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
|
|
||||||
LayerDestroy (pScreen, pNewLayer);
|
|
||||||
scrpriv->randr = oldrandr;
|
|
||||||
scrpriv->shadow = oldshadow;
|
|
||||||
pScreen->width = oldwidth;
|
|
||||||
pScreen->height = oldheight;
|
|
||||||
if (wasEnabled)
|
|
||||||
KdEnableScreen (pScreen);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer);
|
|
||||||
LayerDestroy (pScreen, scrpriv->pLayer);
|
|
||||||
scrpriv->pLayer = pNewLayer;
|
|
||||||
KdSetSubpixelOrder (pScreen, scrpriv->randr);
|
|
||||||
if (wasEnabled)
|
|
||||||
KdEnableScreen (pScreen);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newwidth = pSize->height;
|
||||||
|
newheight = pSize->width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wasEnabled)
|
||||||
|
KdDisableScreen (pScreen);
|
||||||
|
|
||||||
|
oldscr = *scrpriv;
|
||||||
|
|
||||||
|
oldwidth = screen->width;
|
||||||
|
oldheight = screen->height;
|
||||||
|
oldmmwidth = pScreen->mmWidth;
|
||||||
|
oldmmheight = pScreen->mmHeight;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set new configuration
|
||||||
|
*/
|
||||||
|
|
||||||
|
scrpriv->randr = KdAddRotation (screen->randr, randr);
|
||||||
|
|
||||||
|
fbdevConfigureScreen (pScreen);
|
||||||
|
|
||||||
|
pNewLayer = fbdevLayerCreate (pScreen);
|
||||||
|
if (!pNewLayer)
|
||||||
|
goto bail4;
|
||||||
|
if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
|
||||||
|
goto bail5;
|
||||||
|
|
||||||
|
WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer);
|
||||||
|
LayerDestroy (pScreen, scrpriv->pLayer);
|
||||||
|
|
||||||
|
scrpriv->pLayer = pNewLayer;
|
||||||
|
|
||||||
|
KdSetSubpixelOrder (pScreen, scrpriv->randr);
|
||||||
|
if (wasEnabled)
|
||||||
|
KdEnableScreen (pScreen);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
bail5:
|
||||||
|
WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
|
||||||
|
LayerDestroy (pScreen, pNewLayer);
|
||||||
|
bail4:
|
||||||
|
pScreen->width = oldwidth;
|
||||||
|
pScreen->height = oldheight;
|
||||||
|
pScreen->mmWidth = oldmmwidth;
|
||||||
|
pScreen->mmHeight = oldmmheight;
|
||||||
|
bail2:
|
||||||
|
*scrpriv = oldscr;
|
||||||
|
bail1:
|
||||||
|
if (wasEnabled)
|
||||||
|
KdEnableScreen (pScreen);
|
||||||
|
bail0:
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
|
@ -590,10 +622,6 @@ Bool
|
||||||
fbdevInitScreen (ScreenPtr pScreen)
|
fbdevInitScreen (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
FbdevPriv *priv = pScreenPriv->card->driver;
|
|
||||||
FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
|
|
||||||
ShadowUpdateProc update;
|
|
||||||
ShadowWindowProc window;
|
|
||||||
|
|
||||||
#ifdef TOUCHSCREEN
|
#ifdef TOUCHSCREEN
|
||||||
KdTsPhyScreen = pScreen->myNum;
|
KdTsPhyScreen = pScreen->myNum;
|
||||||
|
@ -603,15 +631,30 @@ fbdevInitScreen (ScreenPtr pScreen)
|
||||||
|
|
||||||
if (!LayerStartInit (pScreen))
|
if (!LayerStartInit (pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
fbdevFinishInitScreen (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
KdScreenPriv(pScreen);
|
||||||
|
FbdevPriv *priv = pScreenPriv->card->driver;
|
||||||
|
FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
|
||||||
|
|
||||||
|
scrpriv->layerKind = LayerNewKind (pScreen);
|
||||||
|
|
||||||
if (!LayerFinishInit (pScreen))
|
if (!LayerFinishInit (pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
scrpriv->pLayer = fbdevLayerCreate (pScreen);
|
scrpriv->pLayer = fbdevLayerCreate (pScreen);
|
||||||
if (!scrpriv->pLayer)
|
if (!scrpriv->pLayer)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
#ifdef RANDR
|
#ifdef RANDR
|
||||||
if (!fbdevRandRInit (pScreen))
|
if (!fbdevRandRInit (pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -789,32 +832,3 @@ fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
|
||||||
cmap.transp = 0;
|
cmap.transp = 0;
|
||||||
ioctl (priv->fd, FBIOPUTCMAP, &cmap);
|
ioctl (priv->fd, FBIOPUTCMAP, &cmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KdCardFuncs fbdevFuncs = {
|
|
||||||
fbdevCardInit, /* cardinit */
|
|
||||||
fbdevScreenInit, /* scrinit */
|
|
||||||
fbdevInitScreen, /* initScreen */
|
|
||||||
fbdevPreserve, /* preserve */
|
|
||||||
fbdevEnable, /* enable */
|
|
||||||
fbdevDPMS, /* dpms */
|
|
||||||
fbdevDisable, /* disable */
|
|
||||||
fbdevRestore, /* restore */
|
|
||||||
fbdevScreenFini, /* scrfini */
|
|
||||||
fbdevCardFini, /* cardfini */
|
|
||||||
|
|
||||||
0, /* initCursor */
|
|
||||||
0, /* enableCursor */
|
|
||||||
0, /* disableCursor */
|
|
||||||
0, /* finiCursor */
|
|
||||||
0, /* recolorCursor */
|
|
||||||
|
|
||||||
0, /* initAccel */
|
|
||||||
0, /* enableAccel */
|
|
||||||
0, /* syncAccel */
|
|
||||||
0, /* disableAccel */
|
|
||||||
0, /* finiAccel */
|
|
||||||
|
|
||||||
fbdevGetColors, /* getColors */
|
|
||||||
fbdevPutColors, /* putColors */
|
|
||||||
};
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ typedef struct _fbdevPriv {
|
||||||
typedef struct _fbdevScrPriv {
|
typedef struct _fbdevScrPriv {
|
||||||
Rotation randr;
|
Rotation randr;
|
||||||
Bool shadow;
|
Bool shadow;
|
||||||
|
int layerKind;
|
||||||
LayerPtr pLayer;
|
LayerPtr pLayer;
|
||||||
} FbdevScrPriv;
|
} FbdevScrPriv;
|
||||||
|
|
||||||
|
@ -97,5 +98,7 @@ fbdevGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
|
||||||
void
|
void
|
||||||
fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
|
fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
|
||||||
|
|
||||||
|
Bool
|
||||||
|
fbdevFinishInitScreen (ScreenPtr pScreen);
|
||||||
|
|
||||||
#endif /* _FBDEV_H_ */
|
#endif /* _FBDEV_H_ */
|
||||||
|
|
|
@ -56,3 +56,35 @@ ddxProcessArgument (int argc, char **argv, int i)
|
||||||
{
|
{
|
||||||
return KdProcessArgument (argc, argv, i);
|
return KdProcessArgument (argc, argv, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KdCardFuncs fbdevFuncs = {
|
||||||
|
fbdevCardInit, /* cardinit */
|
||||||
|
fbdevScreenInit, /* scrinit */
|
||||||
|
fbdevInitScreen, /* initScreen */
|
||||||
|
fbdevPreserve, /* preserve */
|
||||||
|
fbdevEnable, /* enable */
|
||||||
|
fbdevDPMS, /* dpms */
|
||||||
|
fbdevDisable, /* disable */
|
||||||
|
fbdevRestore, /* restore */
|
||||||
|
fbdevScreenFini, /* scrfini */
|
||||||
|
fbdevCardFini, /* cardfini */
|
||||||
|
|
||||||
|
0, /* initCursor */
|
||||||
|
0, /* enableCursor */
|
||||||
|
0, /* disableCursor */
|
||||||
|
0, /* finiCursor */
|
||||||
|
0, /* recolorCursor */
|
||||||
|
|
||||||
|
0, /* initAccel */
|
||||||
|
0, /* enableAccel */
|
||||||
|
0, /* syncAccel */
|
||||||
|
0, /* disableAccel */
|
||||||
|
0, /* finiAccel */
|
||||||
|
|
||||||
|
fbdevGetColors, /* getColors */
|
||||||
|
fbdevPutColors, /* putColors */
|
||||||
|
|
||||||
|
fbdevFinishInitScreen, /* finishInitScreen */
|
||||||
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/fb \
|
-I$(top_srcdir)/fb \
|
||||||
-I$(top_srcdir)/hw/kdrive/src \
|
-I$(top_srcdir)/hw/kdrive/src \
|
||||||
-I$(top_srcdir)/hw/kdrive/vesa \
|
-I$(top_srcdir)/hw/kdrive/fbdev \
|
||||||
-I$(top_srcdir)/mi \
|
-I$(top_srcdir)/mi \
|
||||||
-I$(top_srcdir)/miext/layer \
|
-I$(top_srcdir)/miext/layer \
|
||||||
-I$(top_srcdir)/miext/shadow \
|
-I$(top_srcdir)/miext/shadow \
|
||||||
|
@ -24,7 +24,7 @@ Xsmi_SOURCES = \
|
||||||
|
|
||||||
Xsmi_LDADD = \
|
Xsmi_LDADD = \
|
||||||
$(top_builddir)/hw/kdrive/smi/libsmi.a \
|
$(top_builddir)/hw/kdrive/smi/libsmi.a \
|
||||||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
$(top_builddir)/hw/kdrive/fbdev/libfbdev.a \
|
||||||
$(top_builddir)/dix/libdix.a \
|
$(top_builddir)/dix/libdix.a \
|
||||||
$(top_builddir)/os/libos.a \
|
$(top_builddir)/os/libos.a \
|
||||||
$(top_builddir)/miext/layer/liblayer.a \
|
$(top_builddir)/miext/layer/liblayer.a \
|
||||||
|
|
|
@ -27,18 +27,6 @@
|
||||||
#include "smi.h"
|
#include "smi.h"
|
||||||
#include <sys/io.h>
|
#include <sys/io.h>
|
||||||
|
|
||||||
#define DEBUG
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
|
|
||||||
#else
|
|
||||||
#define DBGOUT(fmt,a...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
|
|
||||||
#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
smiCardInit (KdCardInfo *card)
|
smiCardInit (KdCardInfo *card)
|
||||||
{
|
{
|
||||||
|
@ -48,10 +36,11 @@ smiCardInit (KdCardInfo *card)
|
||||||
smic = (SmiCardInfo *) xalloc (sizeof (SmiCardInfo));
|
smic = (SmiCardInfo *) xalloc (sizeof (SmiCardInfo));
|
||||||
if (!smic)
|
if (!smic)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
memset (smic, '\0', sizeof (SmiCardInfo));
|
||||||
|
|
||||||
(void) smiMapReg (card, smic);
|
(void) smiMapReg (card, smic);
|
||||||
|
|
||||||
if (!vesaInitialize (card, &smic->vesa))
|
if (!fbdevInitialize (card, &smic->fbdev))
|
||||||
{
|
{
|
||||||
xfree (smic);
|
xfree (smic);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -67,37 +56,21 @@ smiScreenInit (KdScreenInfo *screen)
|
||||||
{
|
{
|
||||||
SmiCardInfo *smic = screen->card->driver;
|
SmiCardInfo *smic = screen->card->driver;
|
||||||
SmiScreenInfo *smis;
|
SmiScreenInfo *smis;
|
||||||
int screen_size, memory;
|
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
smis = (SmiScreenInfo *) xalloc (sizeof (SmiScreenInfo));
|
smis = (SmiScreenInfo *) xalloc (sizeof (SmiScreenInfo));
|
||||||
if (!smis)
|
if (!smis)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
memset (smis, '\0', sizeof (SmiScreenInfo));
|
memset (smis, '\0', sizeof (SmiScreenInfo));
|
||||||
if (!vesaScreenInitialize (screen, &smis->vesa))
|
if (!fbdevScreenInitialize (screen, &smis->fbdev))
|
||||||
{
|
{
|
||||||
xfree (smis);
|
xfree (smis);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (!smic->reg_base)
|
if (!smic->reg_base)
|
||||||
screen->dumb = TRUE;
|
screen->dumb = TRUE;
|
||||||
if (smis->vesa.mapping != VESA_LINEAR)
|
|
||||||
screen->dumb = TRUE;
|
|
||||||
smis->screen = smis->vesa.fb;
|
|
||||||
memory = smis->vesa.fb_size;
|
|
||||||
screen_size = screen->fb[0].byteStride * screen->height;
|
|
||||||
screen->softCursor = TRUE;
|
screen->softCursor = TRUE;
|
||||||
memory -= screen_size;
|
smis->screen = smic->fbdev.fb;
|
||||||
if (memory > screen->fb[0].byteStride)
|
|
||||||
{
|
|
||||||
smis->off_screen = smis->screen + screen_size;
|
|
||||||
smis->off_screen_size = memory;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
smis->off_screen = 0;
|
|
||||||
smis->off_screen_size = 0;
|
|
||||||
}
|
|
||||||
screen->driver = smis;
|
screen->driver = smis;
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -116,8 +89,9 @@ smiInitScreen (ScreenPtr pScreen)
|
||||||
smiInitVideo(pScreen);
|
smiInitVideo(pScreen);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
ret = vesaInitScreen (pScreen);
|
ret = fbdevInitScreen (pScreen);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RANDR
|
#ifdef RANDR
|
||||||
|
@ -132,7 +106,7 @@ smiRandRSetConfig (ScreenPtr pScreen,
|
||||||
ENTER ();
|
ENTER ();
|
||||||
KdCheckSync (pScreen);
|
KdCheckSync (pScreen);
|
||||||
|
|
||||||
ret = vesaRandRSetConfig (pScreen, randr, rate, pSize);
|
ret = fbdevRandRSetConfig (pScreen, randr, rate, pSize);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -152,15 +126,12 @@ smiRandRInit (ScreenPtr pScreen)
|
||||||
Bool
|
Bool
|
||||||
smiFinishInitScreen (ScreenPtr pScreen)
|
smiFinishInitScreen (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
ENTER ();
|
Bool ret;
|
||||||
if (!vesaFinishInitScreen (pScreen))
|
ret = fbdevFinishInitScreen (pScreen);
|
||||||
return FALSE;
|
|
||||||
#ifdef RANDR
|
#ifdef RANDR
|
||||||
if (!smiRandRInit (pScreen))
|
smiRandRInit (pScreen);
|
||||||
return FALSE;
|
|
||||||
#endif
|
#endif
|
||||||
LEAVE ();
|
return ret;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -169,7 +140,7 @@ smiPreserve (KdCardInfo *card)
|
||||||
SmiCardInfo *smic = card->driver;
|
SmiCardInfo *smic = card->driver;
|
||||||
|
|
||||||
ENTER ();
|
ENTER ();
|
||||||
vesaPreserve(card);
|
fbdevPreserve(card);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +232,7 @@ smiEnable (ScreenPtr pScreen)
|
||||||
SmiCardInfo *smic = pScreenPriv->card->driver;
|
SmiCardInfo *smic = pScreenPriv->card->driver;
|
||||||
|
|
||||||
ENTER ();
|
ENTER ();
|
||||||
if (!vesaEnable (pScreen))
|
if (!fbdevEnable (pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
smiSetMMIO (pScreenPriv->card, smic);
|
smiSetMMIO (pScreenPriv->card, smic);
|
||||||
|
@ -286,7 +257,7 @@ smiDisable (ScreenPtr pScreen)
|
||||||
KdXVDisable (pScreen);
|
KdXVDisable (pScreen);
|
||||||
#endif
|
#endif
|
||||||
smiResetMMIO (pScreenPriv->card, smic);
|
smiResetMMIO (pScreenPriv->card, smic);
|
||||||
vesaDisable (pScreen);
|
fbdevDisable (pScreen);
|
||||||
LEAVE ();
|
LEAVE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,7 +266,7 @@ smiDPMS (ScreenPtr pScreen, int mode)
|
||||||
{
|
{
|
||||||
Bool ret;
|
Bool ret;
|
||||||
ENTER ();
|
ENTER ();
|
||||||
ret = vesaDPMS (pScreen, mode);
|
ret = fbdevDPMS (pScreen, mode);
|
||||||
LEAVE ();
|
LEAVE ();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -306,7 +277,7 @@ smiRestore (KdCardInfo *card)
|
||||||
SmiCardInfo *smic = card->driver;
|
SmiCardInfo *smic = card->driver;
|
||||||
|
|
||||||
ENTER ();
|
ENTER ();
|
||||||
vesaRestore (card);
|
fbdevRestore (card);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +287,7 @@ smiScreenFini (KdScreenInfo *screen)
|
||||||
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
|
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
|
||||||
|
|
||||||
ENTER ();
|
ENTER ();
|
||||||
vesaScreenFini (screen);
|
fbdevScreenFini (screen);
|
||||||
xfree (smis);
|
xfree (smis);
|
||||||
screen->driver = 0;
|
screen->driver = 0;
|
||||||
LEAVE ();
|
LEAVE ();
|
||||||
|
@ -329,7 +300,7 @@ smiCardFini (KdCardInfo *card)
|
||||||
|
|
||||||
ENTER ();
|
ENTER ();
|
||||||
smiUnmapReg (card, smic);
|
smiUnmapReg (card, smic);
|
||||||
vesaCardFini (card);
|
fbdevCardFini (card);
|
||||||
LEAVE ();
|
LEAVE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,8 +334,8 @@ KdCardFuncs smiFuncs = {
|
||||||
smiDrawDisable, /* disableAccel */
|
smiDrawDisable, /* disableAccel */
|
||||||
smiDrawFini, /* finiAccel */
|
smiDrawFini, /* finiAccel */
|
||||||
|
|
||||||
vesaGetColors, /* getColors */
|
fbdevGetColors, /* getColors */
|
||||||
vesaPutColors, /* putColors */
|
fbdevPutColors, /* putColors */
|
||||||
|
|
||||||
smiFinishInitScreen, /* finishInitScreen */
|
smiFinishInitScreen, /* finishInitScreen */
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,9 +25,19 @@
|
||||||
|
|
||||||
#ifndef _SMI_H_
|
#ifndef _SMI_H_
|
||||||
#define _SMI_H_
|
#define _SMI_H_
|
||||||
#include <vesa.h>
|
#include <fbdev.h>
|
||||||
#include "kxv.h"
|
#include "kxv.h"
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
|
||||||
|
#else
|
||||||
|
#define DBGOUT(fmt,a...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
|
||||||
|
#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* offset from ioport beginning
|
* offset from ioport beginning
|
||||||
*/
|
*/
|
||||||
|
@ -114,7 +124,7 @@ typedef struct _DPR {
|
||||||
#define VGA_SEQ_DATA 0x3C5
|
#define VGA_SEQ_DATA 0x3C5
|
||||||
|
|
||||||
typedef struct _smiCardInfo {
|
typedef struct _smiCardInfo {
|
||||||
VesaCardPrivRec vesa;
|
FbdevPriv fbdev;
|
||||||
CARD16 io_base;
|
CARD16 io_base;
|
||||||
CARD8 *reg_base;
|
CARD8 *reg_base;
|
||||||
DPR *dpr;
|
DPR *dpr;
|
||||||
|
@ -125,13 +135,11 @@ typedef struct _smiCardInfo {
|
||||||
#define smiCardInfo(kd) SmiCardInfo *smic = getSmiCardInfo(kd)
|
#define smiCardInfo(kd) SmiCardInfo *smic = getSmiCardInfo(kd)
|
||||||
|
|
||||||
typedef struct _smiScreenInfo {
|
typedef struct _smiScreenInfo {
|
||||||
VesaScreenPrivRec vesa;
|
FbdevScrPriv fbdev;
|
||||||
CARD8 *screen;
|
CARD8 *screen;
|
||||||
CARD8 *off_screen;
|
CARD32 stride;
|
||||||
int off_screen_size;
|
CARD32 data_format;
|
||||||
CARD32 stride;
|
CARD8 dpr_vpr_enable;
|
||||||
CARD32 data_format;
|
|
||||||
CARD8 dpr_vpr_enable;
|
|
||||||
} SmiScreenInfo;
|
} SmiScreenInfo;
|
||||||
|
|
||||||
#define getSmiScreenInfo(kd) ((SmiScreenInfo *) ((kd)->screen->driver))
|
#define getSmiScreenInfo(kd) ((SmiScreenInfo *) ((kd)->screen->driver))
|
||||||
|
|
|
@ -86,18 +86,6 @@ CARD8 smiSolidRop[16] = {
|
||||||
#define ENGINE_IDLE_EMPTY(smic) ((GET_STATUS(smic) & 0x18) == 0x10)
|
#define ENGINE_IDLE_EMPTY(smic) ((GET_STATUS(smic) & 0x18) == 0x10)
|
||||||
#define FIFO_EMPTY(smic) ((GET_STATUS(smic) & 0x10) == 0x10)
|
#define FIFO_EMPTY(smic) ((GET_STATUS(smic) & 0x10) == 0x10)
|
||||||
|
|
||||||
static void
|
|
||||||
smiSleep (int ms)
|
|
||||||
{
|
|
||||||
struct timespec req;
|
|
||||||
|
|
||||||
req.tv_sec = ms / 1000;
|
|
||||||
req.tv_nsec = (ms % 1000) * 1000000;
|
|
||||||
while (req.tv_sec || req.tv_nsec)
|
|
||||||
if (nanosleep (&req, &req) == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MAX_FIFO 16
|
#define MAX_FIFO 16
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -126,7 +114,7 @@ static DPR *dpr;
|
||||||
static CARD32 accel_cmd;
|
static CARD32 accel_cmd;
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
smiSetup (ScreenPtr pScreen, int wait)
|
smiSetup (ScreenPtr pScreen, int wait)
|
||||||
{
|
{
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
|
|
||||||
|
@ -259,13 +247,29 @@ Bool
|
||||||
smiDrawInit (ScreenPtr pScreen)
|
smiDrawInit (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
KdScreenPriv(pScreen);
|
KdScreenPriv(pScreen);
|
||||||
|
smiCardInfo (pScreenPriv);
|
||||||
|
smiScreenInfo (pScreenPriv);
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
if (pScreenPriv->screen->fb[0].depth == 4)
|
if (pScreenPriv->screen->fb[0].depth == 4)
|
||||||
|
{
|
||||||
|
LEAVE ();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!kaaDrawInit (pScreen, &smiKaa))
|
if (!smic->dpr)
|
||||||
|
{
|
||||||
|
LEAVE ();
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!kaaDrawInit (pScreen, &smiKaa))
|
||||||
|
{
|
||||||
|
LEAVE ();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LEAVE ();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,10 +280,13 @@ smiDrawEnable (ScreenPtr pScreen)
|
||||||
int i;
|
int i;
|
||||||
static const int xyAddress[] = { 320, 400, 512, 640, 800, 1024, 1280, 1600, 2048 };
|
static const int xyAddress[] = { 320, 400, 512, 640, 800, 1024, 1280, 1600, 2048 };
|
||||||
|
|
||||||
|
ENTER ();
|
||||||
smis = getSmiScreenInfo (pScreenPriv);
|
smis = getSmiScreenInfo (pScreenPriv);
|
||||||
smic = getSmiCardInfo(pScreenPriv);
|
smic = getSmiCardInfo(pScreenPriv);
|
||||||
dpr = smic->dpr;
|
dpr = smic->dpr;
|
||||||
|
|
||||||
|
iopl(3);
|
||||||
|
|
||||||
smis->stride = pScreenPriv->screen->fb[0].byteStride;
|
smis->stride = pScreenPriv->screen->fb[0].byteStride;
|
||||||
smis->dpr_vpr_enable = smiGetIndex (smic, VGA_SEQ_INDEX,
|
smis->dpr_vpr_enable = smiGetIndex (smic, VGA_SEQ_INDEX,
|
||||||
VGA_SEQ_DATA, 0x21) & ~0x03;
|
VGA_SEQ_DATA, 0x21) & ~0x03;
|
||||||
|
@ -310,23 +317,27 @@ smiDrawEnable (ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
smiSetup (pScreen, 0);
|
|
||||||
|
|
||||||
KdMarkSync (pScreen);
|
KdMarkSync (pScreen);
|
||||||
|
LEAVE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
smiDrawDisable (ScreenPtr pScreen)
|
smiDrawDisable (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
|
ENTER ();
|
||||||
smic = 0;
|
smic = 0;
|
||||||
smis = 0;
|
smis = 0;
|
||||||
dpr = 0;
|
dpr = 0;
|
||||||
accel_cmd = 0;
|
accel_cmd = 0;
|
||||||
|
iopl (0);
|
||||||
|
LEAVE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
smiDrawFini (ScreenPtr pScreen)
|
smiDrawFini (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
|
ENTER ();
|
||||||
|
LEAVE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -55,7 +55,7 @@ ddxProcessArgument (int argc, char **argv, int i)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!(ret = vesaProcessArgument (argc, argv, i)))
|
/* if (!(ret = vesaProcessArgument (argc, argv, i))) */
|
||||||
ret = KdProcessArgument(argc, argv, i);
|
ret = KdProcessArgument(argc, argv, i);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user