aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/kdrive/src/kdrive.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-01-08 13:17:02 +0000
committermarha <marha@users.sourceforge.net>2010-01-08 13:17:02 +0000
commit91a30d5622174febaa2107b010effcf2fb5b9a2e (patch)
treebef04beb0812925c8d343813b26be65073a53c3f /xorg-server/hw/kdrive/src/kdrive.c
parent20f59c125afe31a8bdb0ae6a74dd408e5fa00237 (diff)
downloadvcxsrv-91a30d5622174febaa2107b010effcf2fb5b9a2e.tar.gz
vcxsrv-91a30d5622174febaa2107b010effcf2fb5b9a2e.tar.bz2
vcxsrv-91a30d5622174febaa2107b010effcf2fb5b9a2e.zip
Git update 8 jan 2010
Diffstat (limited to 'xorg-server/hw/kdrive/src/kdrive.c')
-rw-r--r--xorg-server/hw/kdrive/src/kdrive.c217
1 files changed, 87 insertions, 130 deletions
diff --git a/xorg-server/hw/kdrive/src/kdrive.c b/xorg-server/hw/kdrive/src/kdrive.c
index 5cfe54ff8..7675c1e86 100644
--- a/xorg-server/hw/kdrive/src/kdrive.c
+++ b/xorg-server/hw/kdrive/src/kdrive.c
@@ -148,9 +148,9 @@ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
REGION_EMPTY(pScreen, &pWin->borderClip);
REGION_BREAK (pWin->drawable.pScreen, &pWin->clipList);
}
-
+
ResizeChildrenWinSize (pWin, 0, 0, 0, 0);
-
+
if (WasViewable)
{
if (pWin->firstChild)
@@ -185,7 +185,7 @@ void
KdDisableScreen (ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
-
+
if (!pScreenPriv->enabled)
return;
if (!pScreenPriv->closed)
@@ -209,7 +209,7 @@ KdDoSwitchCmd (char *reason)
{
char *command = xalloc (strlen (kdSwitchCmd) +
1 +
- strlen (reason) +
+ strlen (reason) +
1);
if (!command)
return;
@@ -389,10 +389,9 @@ KdParseScreen (KdScreenInfo *screen,
{
char delim;
char save[1024];
- int fb;
int i;
int pixels, mm;
-
+
screen->dumb = kdDumbDriver;
screen->softCursor = kdSoftCursor;
screen->origin = kdOrigin;
@@ -403,22 +402,21 @@ KdParseScreen (KdScreenInfo *screen,
screen->height_mm = 0;
screen->subpixel_order = kdSubpixelOrder;
screen->rate = 0;
- for (fb = 0; fb < KD_MAX_FB; fb++)
- screen->fb[fb].depth = 0;
+ screen->fb.depth = 0;
if (!arg)
return;
if (strlen (arg) >= sizeof (save))
return;
-
+
for (i = 0; i < 2; i++)
{
arg = KdParseFindNext (arg, "x/@XY", save, &delim);
if (!save[0])
return;
-
+
pixels = atoi(save);
mm = 0;
-
+
if (delim == '/')
{
arg = KdParseFindNext (arg, "x@XY", save, &delim);
@@ -426,7 +424,7 @@ KdParseScreen (KdScreenInfo *screen,
return;
mm = atoi(save);
}
-
+
if (i == 0)
{
screen->width = pixels;
@@ -476,26 +474,19 @@ KdParseScreen (KdScreenInfo *screen,
arg = KdParseFindNext (arg, "xY", save, &delim);
screen->randr |= RR_Reflect_Y;
}
-
- fb = 0;
- while (fb < KD_MAX_FB)
+
+ arg = KdParseFindNext (arg, "x/,", save, &delim);
+ if (save[0])
{
- arg = KdParseFindNext (arg, "x/,", save, &delim);
- if (!save[0])
- break;
- screen->fb[fb].depth = atoi(save);
+ screen->fb.depth = atoi(save);
if (delim == '/')
{
arg = KdParseFindNext (arg, "x,", save, &delim);
- if (!save[0])
- break;
- screen->fb[fb].bitsPerPixel = atoi (save);
+ if (save[0])
+ screen->fb.bitsPerPixel = atoi (save);
}
else
- screen->fb[fb].bitsPerPixel = 0;
- if (delim != ',')
- break;
- fb++;
+ screen->fb.bitsPerPixel = 0;
}
if (delim == 'x')
@@ -538,7 +529,7 @@ void
KdUseMsg (void)
{
ErrorF("\nTinyX Device Dependent Usage:\n");
- ErrorF("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP{,DEPTH/BPP}[xFREQ]] Specify screen characteristics\n");
+ ErrorF("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n");
ErrorF("-rgba rgb/bgr/vrgb/vbgr/none Specify subpixel ordering for LCD panels\n");
ErrorF("-mouse driver [,n,,options] Specify the pointer driver and its options (n is the number of buttons)\n");
ErrorF("-keybd driver [,,options] Specify the keyboard driver and its options\n");
@@ -691,7 +682,7 @@ KdOsInit (KdOsFuncs *pOsFuncs)
kdOsFuncs = pOsFuncs;
if (pOsFuncs)
{
- if (serverGeneration == 1)
+ if (serverGeneration == 1)
{
KdDoSwitchCmd ("start");
if (pOsFuncs->Init)
@@ -704,7 +695,7 @@ Bool
KdAllocatePrivates (ScreenPtr pScreen)
{
KdPrivScreenPtr pScreenPriv;
-
+
if (kdGeneration != serverGeneration)
kdGeneration = serverGeneration;
@@ -741,20 +732,20 @@ KdCloseScreen (int index, ScreenPtr pScreen)
KdScreenInfo *screen = pScreenPriv->screen;
KdCardInfo *card = pScreenPriv->card;
Bool ret;
-
+
pScreenPriv->closed = TRUE;
pScreen->CloseScreen = pScreenPriv->CloseScreen;
if(pScreen->CloseScreen)
ret = (*pScreen->CloseScreen) (index, pScreen);
else
ret = TRUE;
-
+
if (pScreenPriv->dpmsState != KD_DPMS_NORMAL)
(*card->cfuncs->dpms) (pScreen, KD_DPMS_NORMAL);
-
+
if (screen->mynum == card->selected)
KdDisableScreen (pScreen);
-
+
/*
* Restore video hardware when last screen is closed
*/
@@ -763,7 +754,7 @@ KdCloseScreen (int index, ScreenPtr pScreen)
if (kdEnabled && card->cfuncs->restore)
(*card->cfuncs->restore) (card);
}
-
+
if (!pScreenPriv->screen->dumb && card->cfuncs->finiAccel)
(*card->cfuncs->finiAccel) (pScreen);
@@ -794,9 +785,9 @@ KdCloseScreen (int index, ScreenPtr pScreen)
}
}
}
-
+
pScreenPriv->screen->pScreen = 0;
-
+
xfree ((pointer) pScreenPriv);
return ret;
}
@@ -806,10 +797,10 @@ KdSaveScreen (ScreenPtr pScreen, int on)
{
KdScreenPriv(pScreen);
int dpmsState;
-
+
if (!pScreenPriv->card->cfuncs->dpms)
return FALSE;
-
+
dpmsState = pScreenPriv->dpmsState;
switch (on) {
case SCREEN_SAVER_OFF:
@@ -861,7 +852,7 @@ KdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr)
int subpixel_order = screen->subpixel_order;
Rotation subpixel_dir;
int i;
-
+
static struct {
int subpixel_order;
Rotation direction;
@@ -874,7 +865,7 @@ KdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr)
static struct {
int bit;
- int normal;
+ int normal;
int reflect;
} reflects[] = {
{ RR_Reflect_X, SubPixelHorizontalRGB, SubPixelHorizontalBGR },
@@ -882,7 +873,7 @@ KdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr)
{ RR_Reflect_Y, SubPixelVerticalRGB, SubPixelVerticalBGR },
{ RR_Reflect_Y, SubPixelVerticalRGB, SubPixelVerticalRGB },
};
-
+
/* map subpixel to direction */
for (i = 0; i < 4; i++)
if (orders[i].subpixel_order == subpixel_order)
@@ -890,7 +881,7 @@ KdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr)
if (i < 4)
{
subpixel_dir = KdAddRotation (randr & RR_Rotate_All, orders[i].direction);
-
+
/* map back to subpixel order */
for (i = 0; i < 4; i++)
if (orders[i].direction & subpixel_dir)
@@ -919,7 +910,6 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
KdScreenInfo *screen = kdCurrentScreen;
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
@@ -931,7 +921,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
KdAllocatePrivates (pScreen);
pScreenPriv = KdGetScreenPriv(pScreen);
-
+
if (!rotated)
{
width = screen->width;
@@ -949,8 +939,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
screen->pScreen = pScreen;
pScreenPriv->screen = screen;
pScreenPriv->card = card;
- for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
- pScreenPriv->bytesPerPixel[fb] = screen->fb[fb].bitsPerPixel >> 3;
+ pScreenPriv->bytesPerPixel = screen->fb.bitsPerPixel >> 3;
pScreenPriv->dpmsState = KD_DPMS_NORMAL;
#ifdef PANORAMIX
dixScreenOrigins[pScreen->myNum] = screen->origin;
@@ -963,12 +952,12 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
* our GC functions; fbFinishScreenInit initializes MI
* backing store
*/
- if (!fbSetupScreen (pScreen,
- screen->fb[0].frameBuffer,
- width, height,
- monitorResolution, monitorResolution,
- screen->fb[0].pixelStride,
- screen->fb[0].bitsPerPixel))
+ if (!fbSetupScreen (pScreen,
+ screen->fb.frameBuffer,
+ width, height,
+ monitorResolution, monitorResolution,
+ screen->fb.pixelStride,
+ screen->fb.bitsPerPixel))
{
return FALSE;
}
@@ -980,42 +969,20 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pScreen->UninstallColormap = KdUninstallColormap;
pScreen->ListInstalledColormaps = KdListInstalledColormaps;
pScreen->StoreColors = KdStoreColors;
-
+
pScreen->SaveScreen = KdSaveScreen;
pScreen->CreateWindow = KdCreateWindow;
-#if KD_MAX_FB > 1
- if (screen->fb[1].depth)
+ if (!fbFinishScreenInit (pScreen,
+ screen->fb.frameBuffer,
+ width, height,
+ monitorResolution, monitorResolution,
+ screen->fb.pixelStride,
+ screen->fb.bitsPerPixel))
{
- if (!fbOverlayFinishScreenInit (pScreen,
- screen->fb[0].frameBuffer,
- screen->fb[1].frameBuffer,
- width, height,
- monitorResolution, monitorResolution,
- screen->fb[0].pixelStride,
- screen->fb[1].pixelStride,
- screen->fb[0].bitsPerPixel,
- screen->fb[1].bitsPerPixel,
- screen->fb[0].depth,
- screen->fb[1].depth))
- {
- return FALSE;
- }
- }
- else
-#endif
- {
- if (!fbFinishScreenInit (pScreen,
- screen->fb[0].frameBuffer,
- width, height,
- monitorResolution, monitorResolution,
- screen->fb[0].pixelStride,
- screen->fb[0].bitsPerPixel))
- {
- return FALSE;
- }
+ return FALSE;
}
-
+
/*
* Fix screen sizes; for some reason mi takes dpi instead of mm.
* Rounding errors are annoying
@@ -1028,14 +995,14 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pScreen->mmHeight = *height_mmp;
else
*height_mmp = pScreen->mmHeight;
-
+
/*
* Plug in our own block/wakeup handlers.
* miScreenInit installs NoopDDA in both places
*/
pScreen->BlockHandler = KdBlockHandler;
pScreen->WakeupHandler = KdWakeupHandler;
-
+
#ifdef RENDER
if (!fbPictureInit (pScreen, 0, 0))
return FALSE;
@@ -1043,26 +1010,26 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (card->cfuncs->initScreen)
if (!(*card->cfuncs->initScreen) (pScreen))
return FALSE;
-
+
if (!screen->dumb && card->cfuncs->initAccel)
if (!(*card->cfuncs->initAccel) (pScreen))
screen->dumb = TRUE;
-
+
if (card->cfuncs->finishInitScreen)
if (!(*card->cfuncs->finishInitScreen) (pScreen))
return FALSE;
-
+
#if 0
fbInitValidateTree (pScreen);
#endif
-
+
#if 0
pScreen->backingStoreSupport = Always;
miInitializeBackingStore (pScreen);
#endif
- /*
+ /*
* Wrap CloseScreen, the order now is:
* KdCloseScreen
* miBSCloseScreen
@@ -1073,9 +1040,9 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pScreenPriv->CreateScreenResources = pScreen->CreateScreenResources;
pScreen->CreateScreenResources = KdCreateScreenResources;
-
+
if (screen->softCursor ||
- !card->cfuncs->initCursor ||
+ !card->cfuncs->initCursor ||
!(*card->cfuncs->initCursor) (pScreen))
{
/* Use MI for cursor display and event queueing. */
@@ -1083,7 +1050,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
miDCInitialize(pScreen, &kdPointerScreenFuncs);
}
-
+
if (!fbCreateDefColormap (pScreen))
{
return FALSE;
@@ -1100,7 +1067,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if(kdOsFuncs->Enable)
(*kdOsFuncs->Enable) ();
}
-
+
if (screen->mynum == card->selected)
{
if(card->cfuncs->preserve)
@@ -1115,7 +1082,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (!screen->dumb && card->cfuncs->enableAccel)
(*card->cfuncs->enableAccel) (pScreen);
}
-
+
return TRUE;
}
@@ -1126,9 +1093,9 @@ KdInitScreen (ScreenInfo *pScreenInfo,
char **argv)
{
KdCardInfo *card = screen->card;
-
+
(*card->cfuncs->scrinit) (screen);
-
+
if (!card->cfuncs->initAccel)
screen->dumb = TRUE;
if (!card->cfuncs->initCursor)
@@ -1143,7 +1110,6 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo)
KdScreenInfo *screen;
int i;
int bpp;
- int fb;
PixmapFormatRec *format;
for (i = 1; i <= 32; i++)
@@ -1159,33 +1125,30 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo)
{
for (screen = card->screenList; screen; screen = screen->next)
{
- for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
- {
- bpp = screen->fb[fb].bitsPerPixel;
- if (bpp == 24)
- bpp = 32;
- if (!depthToBpp[screen->fb[fb].depth])
- depthToBpp[screen->fb[fb].depth] = bpp;
- else if (depthToBpp[screen->fb[fb].depth] != bpp)
- return FALSE;
- }
+ bpp = screen->fb.bitsPerPixel;
+ if (bpp == 24)
+ bpp = 32;
+ if (!depthToBpp[screen->fb.depth])
+ depthToBpp[screen->fb.depth] = bpp;
+ else if (depthToBpp[screen->fb.depth] != bpp)
+ return FALSE;
}
}
-
+
/*
* Fill in additional formats
*/
for (i = 0; i < NUM_KD_DEPTHS; i++)
if (!depthToBpp[kdDepths[i].depth])
depthToBpp[kdDepths[i].depth] = kdDepths[i].bpp;
-
+
pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER;
pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER;
-
+
pScreenInfo->numPixmapFormats = 0;
-
+
for (i = 1; i <= 32; i++)
{
if (depthToBpp[i])
@@ -1196,7 +1159,7 @@ KdSetPixmapFormats (ScreenInfo *pScreenInfo)
format->scanlinePad = BITMAP_SCANLINE_PAD;
}
}
-
+
return TRUE;
}
@@ -1214,20 +1177,15 @@ KdAddScreen (ScreenInfo *pScreenInfo,
{
unsigned long visuals;
Pixel rm, gm, bm;
- int fb;
-
+
visuals = 0;
rm = gm = bm = 0;
- for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
+ if (pScreenInfo->formats[i].depth == screen->fb.depth)
{
- if (pScreenInfo->formats[i].depth == screen->fb[fb].depth)
- {
- visuals = screen->fb[fb].visuals;
- rm = screen->fb[fb].redMask;
- gm = screen->fb[fb].greenMask;
- bm = screen->fb[fb].blueMask;
- break;
- }
+ visuals = screen->fb.visuals;
+ rm = screen->fb.redMask;
+ gm = screen->fb.greenMask;
+ bm = screen->fb.blueMask;
}
fbSetVisualTypesAndMasks (pScreenInfo->formats[i].depth,
visuals,
@@ -1236,7 +1194,7 @@ KdAddScreen (ScreenInfo *pScreenInfo,
}
kdCurrentScreen = screen;
-
+
AddScreen (KdScreenInit, argc, argv);
}
@@ -1246,10 +1204,9 @@ int
KdDepthToFb (ScreenPtr pScreen, int depth)
{
KdScreenPriv(pScreen);
- int fb;
- for (fb = 0; fb <= KD_MAX_FB && pScreenPriv->screen->fb[fb].frameBuffer; fb++)
- if (pScreenPriv->screen->fb[fb].depth == depth)
+ for (fb = 0; fb <= KD_MAX_FB && pScreenPriv->screen->fb.frameBuffer; fb++)
+ if (pScreenPriv->screen->fb.depth == depth)
return fb;
}
@@ -1292,14 +1249,14 @@ KdInitOutput (ScreenInfo *pScreenInfo,
KdInitScreen (pScreenInfo, screen, argc, argv);
}
}
-
+
/*
* Merge the various pixmap formats together, this can fail
* when two screens share depth but not bitsPerPixel
*/
if (!KdSetPixmapFormats (pScreenInfo))
return;
-
+
/*
* Add all of the screens
*/