diff options
Diffstat (limited to 'xorg-server/hw/kdrive')
28 files changed, 548 insertions, 1132 deletions
diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.c b/xorg-server/hw/kdrive/ephyr/ephyr.c index b6a2adaff..b21559bba 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyr.c +++ b/xorg-server/hw/kdrive/ephyr/ephyr.c @@ -101,77 +101,77 @@ ephyrScreenInitialize (KdScreenInfo *screen, EphyrScrPriv *scrpriv) } if (EphyrWantGrayScale) - screen->fb[0].depth = 8; + screen->fb.depth = 8; - if (screen->fb[0].depth && screen->fb[0].depth != hostx_get_depth()) + if (screen->fb.depth && screen->fb.depth != hostx_get_depth()) { - if (screen->fb[0].depth < hostx_get_depth() - && (screen->fb[0].depth == 24 || screen->fb[0].depth == 16 - || screen->fb[0].depth == 8)) + if (screen->fb.depth < hostx_get_depth() + && (screen->fb.depth == 24 || screen->fb.depth == 16 + || screen->fb.depth == 8)) { - hostx_set_server_depth(screen, screen->fb[0].depth); + hostx_set_server_depth(screen, screen->fb.depth); } else ErrorF("\nXephyr: requested screen depth not supported, setting to match hosts.\n"); } - screen->fb[0].depth = hostx_get_server_depth(screen); + screen->fb.depth = hostx_get_server_depth(screen); screen->rate = 72; - if (screen->fb[0].depth <= 8) + if (screen->fb.depth <= 8) { if (EphyrWantGrayScale) - screen->fb[0].visuals = ((1 << StaticGray) | (1 << GrayScale)); + screen->fb.visuals = ((1 << StaticGray) | (1 << GrayScale)); else - screen->fb[0].visuals = ((1 << StaticGray) | - (1 << GrayScale) | - (1 << StaticColor) | - (1 << PseudoColor) | - (1 << TrueColor) | - (1 << DirectColor)); + screen->fb.visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); - screen->fb[0].redMask = 0x00; - screen->fb[0].greenMask = 0x00; - screen->fb[0].blueMask = 0x00; - screen->fb[0].depth = 8; - screen->fb[0].bitsPerPixel = 8; + screen->fb.redMask = 0x00; + screen->fb.greenMask = 0x00; + screen->fb.blueMask = 0x00; + screen->fb.depth = 8; + screen->fb.bitsPerPixel = 8; } else { - screen->fb[0].visuals = (1 << TrueColor); + screen->fb.visuals = (1 << TrueColor); - if (screen->fb[0].depth <= 15) + if (screen->fb.depth <= 15) { - screen->fb[0].depth = 15; - screen->fb[0].bitsPerPixel = 16; + screen->fb.depth = 15; + screen->fb.bitsPerPixel = 16; } - else if (screen->fb[0].depth <= 16) + else if (screen->fb.depth <= 16) { - screen->fb[0].depth = 16; - screen->fb[0].bitsPerPixel = 16; + screen->fb.depth = 16; + screen->fb.bitsPerPixel = 16; } - else if (screen->fb[0].depth <= 24) + else if (screen->fb.depth <= 24) { - screen->fb[0].depth = 24; - screen->fb[0].bitsPerPixel = 32; + screen->fb.depth = 24; + screen->fb.bitsPerPixel = 32; } - else if (screen->fb[0].depth <= 30) + else if (screen->fb.depth <= 30) { - screen->fb[0].depth = 30; - screen->fb[0].bitsPerPixel = 32; + screen->fb.depth = 30; + screen->fb.bitsPerPixel = 32; } else { ErrorF("\nXephyr: Unsupported screen depth %d\n", - screen->fb[0].depth); + screen->fb.depth); return FALSE; } hostx_get_visual_masks (screen, &redMask, &greenMask, &blueMask); - screen->fb[0].redMask = (Pixel) redMask; - screen->fb[0].greenMask = (Pixel) greenMask; - screen->fb[0].blueMask = (Pixel) blueMask; + screen->fb.redMask = (Pixel) redMask; + screen->fb.greenMask = (Pixel) greenMask; + screen->fb.blueMask = (Pixel) blueMask; } @@ -220,6 +220,22 @@ ephyrWindowLinear (ScreenPtr pScreen, return priv->base + row * priv->bytes_per_line + offset; } +/** + * Figure out display buffer size. If fakexa is enabled, allocate a larger + * buffer so that fakexa has space to put offscreen pixmaps. + */ +int +ephyrBufferHeight(KdScreenInfo *screen) +{ + int buffer_height; + if (ephyrFuncs.initAccel == NULL) + buffer_height = screen->height; + else + buffer_height = 3 * screen->height; + return buffer_height; +} + + Bool ephyrMapFramebuffer (KdScreenInfo *screen) { @@ -234,30 +250,19 @@ ephyrMapFramebuffer (KdScreenInfo *screen) KdComputePointerMatrix (&m, scrpriv->randr, screen->width, screen->height); KdSetPointerMatrix (&m); - priv->bytes_per_line = ((screen->width * screen->fb[0].bitsPerPixel + 31) >> 5) << 2; - - /* point the framebuffer to the data in an XImage */ - /* If fakexa is enabled, allocate a larger buffer so that fakexa has space to - * put offscreen pixmaps. - */ - if (ephyrFuncs.initAccel == NULL) - buffer_height = screen->height; - else - buffer_height = 3 * screen->height; + priv->bytes_per_line = ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2; + + buffer_height = ephyrBufferHeight(screen); priv->base = hostx_screen_init (screen, screen->width, screen->height, buffer_height); - screen->memory_base = (CARD8 *) (priv->base); - screen->memory_size = priv->bytes_per_line * buffer_height; - screen->off_screen_base = priv->bytes_per_line * screen->height; - if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) { scrpriv->shadow = FALSE; - screen->fb[0].byteStride = priv->bytes_per_line; - screen->fb[0].pixelStride = screen->width; - screen->fb[0].frameBuffer = (CARD8 *) (priv->base); + screen->fb.byteStride = priv->bytes_per_line; + screen->fb.pixelStride = screen->width; + screen->fb.frameBuffer = (CARD8 *) (priv->base); } else { @@ -266,7 +271,7 @@ ephyrMapFramebuffer (KdScreenInfo *screen) EPHYR_LOG("allocing shadow"); - KdShadowFbAlloc (screen, 0, + KdShadowFbAlloc (screen, scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)); } @@ -302,7 +307,7 @@ ephyrUnmapFramebuffer (KdScreenInfo *screen) EphyrScrPriv *scrpriv = screen->driver; if (scrpriv->shadow) - KdShadowFbFree (screen, 0); + KdShadowFbFree (screen); /* Note, priv->base will get freed when XImage recreated */ @@ -566,10 +571,10 @@ ephyrRandRSetConfig (ScreenPtr pScreen, (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen), pScreen->width, pScreen->height, - screen->fb[0].depth, - screen->fb[0].bitsPerPixel, - screen->fb[0].byteStride, - screen->fb[0].frameBuffer); + screen->fb.depth, + screen->fb.bitsPerPixel, + screen->fb.byteStride, + screen->fb.frameBuffer); /* set the subpixel order */ @@ -730,7 +735,7 @@ ephyrScreenFini (KdScreenInfo *screen) { EphyrScrPriv *scrpriv = screen->driver; if (scrpriv->shadow) { - KdShadowFbFree (screen, 0); + KdShadowFbFree (screen); } xfree(screen->driver); screen->driver = NULL; @@ -1022,7 +1027,7 @@ ephyrCardFini (KdCardInfo *card) } void -ephyrGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +ephyrGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { /* XXX Not sure if this is right */ @@ -1039,7 +1044,7 @@ ephyrGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) } void -ephyrPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +ephyrPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { int min, max, p; diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.h b/xorg-server/hw/kdrive/ephyr/ephyr.h index f5ea144b3..41a82bf9d 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyr.h +++ b/xorg-server/hw/kdrive/ephyr/ephyr.h @@ -116,10 +116,10 @@ void ephyrCardFini (KdCardInfo *card); void -ephyrGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +ephyrGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs); void -ephyrPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +ephyrPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs); Bool ephyrMapFramebuffer (KdScreenInfo *screen); @@ -180,6 +180,8 @@ extern Bool ephyrCursorInit(ScreenPtr pScreen); extern void ephyrCursorEnable(ScreenPtr pScreen); +extern int ephyrBufferHeight(KdScreenInfo *screen); + /* ephyr_draw.c */ Bool diff --git a/xorg-server/hw/kdrive/ephyr/ephyr_draw.c b/xorg-server/hw/kdrive/ephyr/ephyr_draw.c index 7b579c24b..f9fac8007 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyr_draw.c +++ b/xorg-server/hw/kdrive/ephyr/ephyr_draw.c @@ -428,6 +428,7 @@ ephyrDrawInit(ScreenPtr pScreen) KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; + EphyrPriv *priv = screen->card->driver; EphyrFakexaPriv *fakexa; Bool success; @@ -441,9 +442,9 @@ ephyrDrawInit(ScreenPtr pScreen) return FALSE; } - fakexa->exa->memoryBase = screen->memory_base; - fakexa->exa->memorySize = screen->memory_size; - fakexa->exa->offScreenBase = screen->off_screen_base; + fakexa->exa->memoryBase = (CARD8 *) (priv->base); + fakexa->exa->memorySize = priv->bytes_per_line * ephyrBufferHeight(screen); + fakexa->exa->offScreenBase = priv->bytes_per_line * screen->height; /* Since we statically link against EXA, we shouldn't have to be smart about * versioning. diff --git a/xorg-server/hw/kdrive/ephyr/ephyrinit.c b/xorg-server/hw/kdrive/ephyr/ephyrinit.c index 2b72b4e0a..c7bfb5bec 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyrinit.c +++ b/xorg-server/hw/kdrive/ephyr/ephyrinit.c @@ -40,17 +40,18 @@ extern Bool noGlxVisualInit; #endif extern Bool ephyrNoXV; +#ifdef KDRIVE_EVDEV +extern KdPointerDriver LinuxEvdevMouseDriver; +extern KdKeyboardDriver LinuxEvdevKeyboardDriver; +#endif + void processScreenArg (char *screen_size, char *parent_id) ; void InitCard (char *name) { - KdCardAttr attr; - EPHYR_DBG("mark"); - - - KdCardInfoAdd (&ephyrFuncs, &attr, 0); + KdCardInfoAdd (&ephyrFuncs, 0); } void @@ -66,11 +67,11 @@ InitInput (int argc, char **argv) KdPointerInfo *pi; KdAddKeyboardDriver(&EphyrKeyboardDriver); -#ifdef linux +#ifdef KDRIVE_EVDEV KdAddKeyboardDriver(&LinuxEvdevKeyboardDriver); #endif KdAddPointerDriver(&EphyrMouseDriver); -#ifdef linux +#ifdef KDRIVE_EVDEV KdAddPointerDriver(&LinuxEvdevMouseDriver); #endif diff --git a/xorg-server/hw/kdrive/ephyr/ephyrvideo.c b/xorg-server/hw/kdrive/ephyr/ephyrvideo.c index bb2ee1032..6624ab98a 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyrvideo.c +++ b/xorg-server/hw/kdrive/ephyr/ephyrvideo.c @@ -302,7 +302,7 @@ ephyrInitVideo (ScreenPtr pScreen) EPHYR_LOG ("enter\n") ; - if (screen->fb[0].bitsPerPixel == 8) { + if (screen->fb.bitsPerPixel == 8) { EPHYR_LOG_ERROR ("8 bits depth not supported\n") ; return FALSE ; } diff --git a/xorg-server/hw/kdrive/fake/fake.c b/xorg-server/hw/kdrive/fake/fake.c index ea88f0edb..809e309a6 100644 --- a/xorg-server/hw/kdrive/fake/fake.c +++ b/xorg-server/hw/kdrive/fake/fake.c @@ -69,45 +69,45 @@ fakeScreenInitialize (KdScreenInfo *screen, FakeScrPriv *scrpriv) if (screen->height <= 0) screen->height = 1; - if (!screen->fb[0].depth) - screen->fb[0].depth = 16; + if (!screen->fb.depth) + screen->fb.depth = 16; - if (screen->fb[0].depth <= 8) + if (screen->fb.depth <= 8) { - screen->fb[0].visuals = ((1 << StaticGray) | - (1 << GrayScale) | - (1 << StaticColor) | - (1 << PseudoColor) | - (1 << TrueColor) | - (1 << DirectColor)); + screen->fb.visuals = ((1 << StaticGray) | + (1 << GrayScale) | + (1 << StaticColor) | + (1 << PseudoColor) | + (1 << TrueColor) | + (1 << DirectColor)); } else { - screen->fb[0].visuals = (1 << TrueColor); + screen->fb.visuals = (1 << TrueColor); #define Mask(o,l) (((1 << l) - 1) << o) - if (screen->fb[0].depth <= 15) + if (screen->fb.depth <= 15) { - screen->fb[0].depth = 15; - screen->fb[0].bitsPerPixel = 16; - screen->fb[0].redMask = Mask (10, 5); - screen->fb[0].greenMask = Mask (5, 5); - screen->fb[0].blueMask = Mask (0, 5); + screen->fb.depth = 15; + screen->fb.bitsPerPixel = 16; + screen->fb.redMask = Mask (10, 5); + screen->fb.greenMask = Mask (5, 5); + screen->fb.blueMask = Mask (0, 5); } - else if (screen->fb[0].depth <= 16) + else if (screen->fb.depth <= 16) { - screen->fb[0].depth = 16; - screen->fb[0].bitsPerPixel = 16; - screen->fb[0].redMask = Mask (11, 5); - screen->fb[0].greenMask = Mask (5, 6); - screen->fb[0].blueMask = Mask (0, 5); + screen->fb.depth = 16; + screen->fb.bitsPerPixel = 16; + screen->fb.redMask = Mask (11, 5); + screen->fb.greenMask = Mask (5, 6); + screen->fb.blueMask = Mask (0, 5); } else { - screen->fb[0].depth = 24; - screen->fb[0].bitsPerPixel = 32; - screen->fb[0].redMask = Mask (16, 8); - screen->fb[0].greenMask = Mask (8, 8); - screen->fb[0].blueMask = Mask (0, 8); + screen->fb.depth = 24; + screen->fb.bitsPerPixel = 32; + screen->fb.redMask = Mask (16, 8); + screen->fb.greenMask = Mask (8, 8); + screen->fb.blueMask = Mask (0, 8); } } @@ -167,26 +167,22 @@ fakeMapFramebuffer (KdScreenInfo *screen) KdSetPointerMatrix (&m); - priv->bytes_per_line = ((screen->width * screen->fb[0].bitsPerPixel + 31) >> 5) << 2; + priv->bytes_per_line = ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2; if (priv->base) free (priv->base); priv->base = malloc (priv->bytes_per_line * screen->height); - screen->memory_base = (CARD8 *) (priv->base); - screen->memory_size = 0; - screen->off_screen_base = 0; if (scrpriv->shadow) { - if (!KdShadowFbAlloc (screen, 0, - scrpriv->randr & (RR_Rotate_90|RR_Rotate_270))) + if (!KdShadowFbAlloc (screen, scrpriv->randr & (RR_Rotate_90|RR_Rotate_270))) return FALSE; } else { - screen->fb[0].byteStride = priv->bytes_per_line; - screen->fb[0].pixelStride = (priv->bytes_per_line * 8/ - screen->fb[0].bitsPerPixel); - screen->fb[0].frameBuffer = (CARD8 *) (priv->base); + screen->fb.byteStride = priv->bytes_per_line; + screen->fb.pixelStride = (priv->bytes_per_line * 8/ + screen->fb.bitsPerPixel); + screen->fb.frameBuffer = (CARD8 *) (priv->base); } return TRUE; @@ -219,7 +215,7 @@ Bool fakeUnmapFramebuffer (KdScreenInfo *screen) { FakePriv *priv = screen->card->driver; - KdShadowFbFree (screen, 0); + KdShadowFbFree (screen); if (priv->base) { free (priv->base); @@ -341,10 +337,10 @@ fakeRandRSetConfig (ScreenPtr pScreen, (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen), pScreen->width, pScreen->height, - screen->fb[0].depth, - screen->fb[0].bitsPerPixel, - screen->fb[0].byteStride, - screen->fb[0].frameBuffer); + screen->fb.depth, + screen->fb.bitsPerPixel, + screen->fb.byteStride, + screen->fb.frameBuffer); /* set the subpixel order */ @@ -463,7 +459,7 @@ fakeCardFini (KdCardInfo *card) } void -fakeGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +fakeGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { while (n--) { @@ -475,6 +471,6 @@ fakeGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) } void -fakePutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +fakePutColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { } diff --git a/xorg-server/hw/kdrive/fake/fake.h b/xorg-server/hw/kdrive/fake/fake.h index 3c4a51bbc..d5058606a 100644 --- a/xorg-server/hw/kdrive/fake/fake.h +++ b/xorg-server/hw/kdrive/fake/fake.h @@ -85,10 +85,10 @@ void fakeCardFini (KdCardInfo *card); void -fakeGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +fakeGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs); void -fakePutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +fakePutColors (ScreenPtr pScreen, int n, xColorItem *pdefs); Bool fakeMapFramebuffer (KdScreenInfo *screen); diff --git a/xorg-server/hw/kdrive/fake/fakeinit.c b/xorg-server/hw/kdrive/fake/fakeinit.c index 0472a7183..87c221d37 100644 --- a/xorg-server/hw/kdrive/fake/fakeinit.c +++ b/xorg-server/hw/kdrive/fake/fakeinit.c @@ -28,9 +28,7 @@ void InitCard (char *name) { - KdCardAttr attr; - - KdCardInfoAdd (&fakeFuncs, &attr, 0); + KdCardInfoAdd (&fakeFuncs, 0); } void diff --git a/xorg-server/hw/kdrive/fbdev/fbdev.c b/xorg-server/hw/kdrive/fbdev/fbdev.c index 4eeca289a..d4604ad29 100644 --- a/xorg-server/hw/kdrive/fbdev/fbdev.c +++ b/xorg-server/hw/kdrive/fbdev/fbdev.c @@ -32,32 +32,31 @@ extern int KdTsPhyScreen; char *fbdevDevicePath = NULL; -Bool +static Bool fbdevInitialize (KdCardInfo *card, FbdevPriv *priv) { - int k; unsigned long off; - if (fbdevDevicePath == NULL) + if (fbdevDevicePath == NULL) fbdevDevicePath = "/dev/fb0"; if ((priv->fd = open(fbdevDevicePath, O_RDWR)) < 0) { - ErrorF("Error opening framebuffer %s: %s\n", + ErrorF("Error opening framebuffer %s: %s\n", fbdevDevicePath, strerror(errno)); return FALSE; } /* quiet valgrind */ memset (&priv->fix, '\0', sizeof (priv->fix)); - if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0) { + if (ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix) < 0) { perror("Error with /dev/fb ioctl FIOGET_FSCREENINFO"); close (priv->fd); return FALSE; } /* quiet valgrind */ memset (&priv->var, '\0', sizeof (priv->var)); - if ((k=ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var)) < 0) { + if (ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var) < 0) { perror("Error with /dev/fb ioctl FIOGET_VSCREENINFO"); close (priv->fd); return FALSE; @@ -68,8 +67,8 @@ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv) PROT_READ|PROT_WRITE, MAP_SHARED, priv->fd, 0); - - if (priv->fb_base == (char *)-1) + + if (priv->fb_base == (char *)-1) { perror("ERROR: mmap framebuffer fails!"); close (priv->fd); @@ -88,14 +87,14 @@ fbdevCardInit (KdCardInfo *card) priv = (FbdevPriv *) xalloc (sizeof (FbdevPriv)); if (!priv) return FALSE; - + if (!fbdevInitialize (card, priv)) { xfree (priv); return FALSE; } card->driver = priv; - + return TRUE; } @@ -124,7 +123,7 @@ static void fbdevConvertMonitorTiming (const KdMonitorTiming *t, struct fb_var_screeninfo *var) { memset (var, 0, sizeof (struct fb_var_screeninfo)); - + var->xres = t->horizontal; var->yres = t->vertical; var->xres_virtual = t->horizontal; @@ -148,7 +147,7 @@ fbdevConvertMonitorTiming (const KdMonitorTiming *t, struct fb_var_screeninfo *v var->sync |= FB_SYNC_VERT_HIGH_ACT; } -Bool +static Bool fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) { FbdevPriv *priv = screen->card->driver; @@ -160,10 +159,10 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) int k; k = ioctl (priv->fd, FBIOGET_VSCREENINFO, &var); - + if (!screen->width || !screen->height) { - if (k >= 0) + if (k >= 0) { screen->width = var.xres; screen->height = var.yres; @@ -175,12 +174,12 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) } screen->rate = 103; /* FIXME: should get proper value from fb driver */ } - if (!screen->fb[0].depth) + if (!screen->fb.depth) { - if (k >= 0) - screen->fb[0].depth = var.bits_per_pixel; + if (k >= 0) + screen->fb.depth = var.bits_per_pixel; else - screen->fb[0].depth = 16; + screen->fb.depth = 16; } if ((screen->width != var.xres) || (screen->height != var.yres)) @@ -196,7 +195,7 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) } var.activate = FB_ACTIVATE_NOW; - var.bits_per_pixel = screen->fb[0].depth; + var.bits_per_pixel = screen->fb.depth; var.nonstd = 0; var.grayscale = 0; @@ -217,65 +216,65 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) ioctl (priv->fd, FBIOGET_VSCREENINFO, &priv->var); depth = priv->var.bits_per_pixel; gray = priv->var.grayscale; - + switch (priv->fix.visual) { case FB_VISUAL_PSEUDOCOLOR: if (gray) { - screen->fb[0].visuals = (1 << StaticGray); + screen->fb.visuals = (1 << StaticGray); /* could also support GrayScale, but what's the point? */ } else { - screen->fb[0].visuals = ((1 << StaticGray) | + screen->fb.visuals = ((1 << StaticGray) | (1 << GrayScale) | (1 << StaticColor) | (1 << PseudoColor) | (1 << TrueColor) | (1 << DirectColor)); } - screen->fb[0].blueMask = 0x00; - screen->fb[0].greenMask = 0x00; - screen->fb[0].redMask = 0x00; + screen->fb.blueMask = 0x00; + screen->fb.greenMask = 0x00; + screen->fb.redMask = 0x00; break; case FB_VISUAL_STATIC_PSEUDOCOLOR: if (gray) { - screen->fb[0].visuals = (1 << StaticGray); + screen->fb.visuals = (1 << StaticGray); } else { - screen->fb[0].visuals = (1 << StaticColor); + screen->fb.visuals = (1 << StaticColor); } - screen->fb[0].blueMask = 0x00; - screen->fb[0].greenMask = 0x00; - screen->fb[0].redMask = 0x00; + screen->fb.blueMask = 0x00; + screen->fb.greenMask = 0x00; + screen->fb.redMask = 0x00; break; case FB_VISUAL_TRUECOLOR: case FB_VISUAL_DIRECTCOLOR: - screen->fb[0].visuals = (1 << TrueColor); + screen->fb.visuals = (1 << TrueColor); #define Mask(o,l) (((1 << l) - 1) << o) - screen->fb[0].redMask = Mask (priv->var.red.offset, priv->var.red.length); - screen->fb[0].greenMask = Mask (priv->var.green.offset, priv->var.green.length); - screen->fb[0].blueMask = Mask (priv->var.blue.offset, priv->var.blue.length); + screen->fb.redMask = Mask (priv->var.red.offset, priv->var.red.length); + screen->fb.greenMask = Mask (priv->var.green.offset, priv->var.green.length); + screen->fb.blueMask = Mask (priv->var.blue.offset, priv->var.blue.length); /* * This is a kludge so that Render will work -- fill in the gaps * in the pixel */ - screen->fb[0].redMask = fbdevMakeContig (screen->fb[0].redMask, - screen->fb[0].greenMask| - screen->fb[0].blueMask); + screen->fb.redMask = fbdevMakeContig (screen->fb.redMask, + screen->fb.greenMask| + screen->fb.blueMask); - screen->fb[0].greenMask = fbdevMakeContig (screen->fb[0].greenMask, - screen->fb[0].redMask| - screen->fb[0].blueMask); + screen->fb.greenMask = fbdevMakeContig (screen->fb.greenMask, + screen->fb.redMask| + screen->fb.blueMask); - screen->fb[0].blueMask = fbdevMakeContig (screen->fb[0].blueMask, - screen->fb[0].redMask| - screen->fb[0].greenMask); + screen->fb.blueMask = fbdevMakeContig (screen->fb.blueMask, + screen->fb.redMask| + screen->fb.greenMask); - allbits = screen->fb[0].redMask | screen->fb[0].greenMask | screen->fb[0].blueMask; + allbits = screen->fb.redMask | screen->fb.greenMask | screen->fb.blueMask; depth = 32; while (depth && !(allbits & (1 << (depth - 1)))) depth--; @@ -284,8 +283,8 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv) return FALSE; break; } - screen->fb[0].depth = depth; - screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel; + screen->fb.depth = depth; + screen->fb.bitsPerPixel = priv->var.bits_per_pixel; scrpriv->randr = screen->randr; @@ -309,8 +308,8 @@ fbdevScreenInit (KdScreenInfo *screen) } return TRUE; } - -void * + +static void * fbdevWindowLinear (ScreenPtr pScreen, CARD32 row, CARD32 offset, @@ -338,36 +337,32 @@ fbdevMapFramebuffer (KdScreenInfo *screen) scrpriv->shadow = TRUE; else scrpriv->shadow = FALSE; - + KdComputePointerMatrix (&m, scrpriv->randr, screen->width, screen->height); - + KdSetPointerMatrix (&m); - + screen->width = priv->var.xres; screen->height = priv->var.yres; - screen->memory_base = (CARD8 *) (priv->fb); - screen->memory_size = priv->fix.smem_len; - + if (scrpriv->shadow) { - if (!KdShadowFbAlloc (screen, 0, + if (!KdShadowFbAlloc (screen, scrpriv->randr & (RR_Rotate_90|RR_Rotate_270))) return FALSE; - screen->off_screen_base = screen->memory_size; } else { - screen->fb[0].byteStride = priv->fix.line_length; - screen->fb[0].pixelStride = (priv->fix.line_length * 8 / + screen->fb.byteStride = priv->fix.line_length; + screen->fb.pixelStride = (priv->fix.line_length * 8 / priv->var.bits_per_pixel); - screen->fb[0].frameBuffer = (CARD8 *) (priv->fb); - screen->off_screen_base = screen->fb[0].byteStride * screen->height; + screen->fb.frameBuffer = (CARD8 *) (priv->fb); } - + return TRUE; } -void +static void fbdevSetScreenSizes (ScreenPtr pScreen) { KdScreenPriv(pScreen); @@ -391,14 +386,14 @@ fbdevSetScreenSizes (ScreenPtr pScreen) } } -Bool +static Bool fbdevUnmapFramebuffer (KdScreenInfo *screen) { - KdShadowFbFree (screen, 0); + KdShadowFbFree (screen); return TRUE; } -Bool +static Bool fbdevSetShadow (ScreenPtr pScreen) { KdScreenPriv(pScreen); @@ -449,7 +444,7 @@ fbdevSetShadow (ScreenPtr pScreen) #ifdef RANDR -Bool +static Bool fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) { KdScreenPriv(pScreen); @@ -458,29 +453,29 @@ fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) RRScreenSizePtr pSize; Rotation randr; int n; - + *rotations = RR_Rotate_All|RR_Reflect_All; - + for (n = 0; n < pScreen->numDepths; n++) if (pScreen->allowedDepths[n].numVids) break; if (n == pScreen->numDepths) return FALSE; - + pSize = RRRegisterSize (pScreen, screen->width, screen->height, screen->width_mm, screen->height_mm); - + randr = KdSubRotation (scrpriv->randr, screen->randr); - + RRSetCurrentConfig (pScreen, randr, 0, pSize); - + return TRUE; } -Bool +static Bool fbdevRandRSetConfig (ScreenPtr pScreen, Rotation randr, int rate, @@ -512,20 +507,20 @@ fbdevRandRSetConfig (ScreenPtr pScreen, 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); fbdevUnmapFramebuffer (screen); - + if (!fbdevMapFramebuffer (screen)) goto bail4; @@ -542,13 +537,13 @@ fbdevRandRSetConfig (ScreenPtr pScreen, (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen), pScreen->width, pScreen->height, - screen->fb[0].depth, - screen->fb[0].bitsPerPixel, - screen->fb[0].byteStride, - screen->fb[0].frameBuffer); - + screen->fb.depth, + screen->fb.bitsPerPixel, + screen->fb.byteStride, + screen->fb.frameBuffer); + /* set the subpixel order */ - + KdSetSubpixelOrder (pScreen, scrpriv->randr); if (wasEnabled) KdEnableScreen (pScreen); @@ -563,17 +558,17 @@ bail4: pScreen->height = oldheight; pScreen->mmWidth = oldmmwidth; pScreen->mmHeight = oldmmheight; - + if (wasEnabled) KdEnableScreen (pScreen); return FALSE; } -Bool +static Bool fbdevRandRInit (ScreenPtr pScreen) { rrScrPrivPtr pScrPriv; - + if (!RRScreenInit (pScreen)) return FALSE; @@ -584,7 +579,7 @@ fbdevRandRInit (ScreenPtr pScreen) } #endif -Bool +static Bool fbdevCreateColormap (ColormapPtr pmap) { ScreenPtr pScreen = pmap->pScreen; @@ -594,7 +589,7 @@ fbdevCreateColormap (ColormapPtr pmap) int i; int nent; xColorItem *pdefs; - + switch (priv->fix.visual) { case FB_VISUAL_STATIC_PSEUDOCOLOR: pVisual = pmap->pVisual; @@ -604,7 +599,7 @@ fbdevCreateColormap (ColormapPtr pmap) return FALSE; for (i = 0; i < nent; i++) pdefs[i].pixel = i; - fbdevGetColors (pScreen, 0, nent, pdefs); + fbdevGetColors (pScreen, nent, pdefs); for (i = 0; i < nent; i++) { pmap->red[i].co.local.red = pdefs[i].red; @@ -639,7 +634,7 @@ fbdevFinishInitScreen (ScreenPtr pScreen) if (!fbdevRandRInit (pScreen)) return FALSE; #endif - + return TRUE; } @@ -655,6 +650,21 @@ fbdevPreserve (KdCardInfo *card) { } +static int +fbdevUpdateFbColormap(FbdevPriv *priv, int minidx, int maxidx) +{ + struct fb_cmap cmap; + + cmap.start = minidx; + cmap.len = maxidx - minidx + 1; + cmap.red = &priv->red[minidx]; + cmap.green = &priv->green[minidx]; + cmap.blue = &priv->blue[minidx]; + cmap.transp = 0; + + return ioctl(priv->fd, FBIOPUTCMAP, &cmap); +} + Bool fbdevEnable (ScreenPtr pScreen) { @@ -663,7 +673,7 @@ fbdevEnable (ScreenPtr pScreen) int k; priv->var.activate = FB_ACTIVATE_NOW|FB_CHANGE_CMAP_VBL; - + /* display it on the LCD */ k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &priv->var); if (k < 0) @@ -671,13 +681,12 @@ fbdevEnable (ScreenPtr pScreen) perror ("FBIOPUT_VSCREENINFO"); return FALSE; } - + if (priv->fix.visual == FB_VISUAL_DIRECTCOLOR) { - struct fb_cmap cmap; int i; - for (i = 0; + for (i = 0; i < (1 << priv->var.red.length) || i < (1 << priv->var.green.length) || i < (1 << priv->var.blue.length); i++) @@ -686,13 +695,8 @@ fbdevEnable (ScreenPtr pScreen) priv->green[i] = i * 65535 / ((1 << priv->var.green.length) - 1); priv->blue[i] = i * 65535 / ((1 << priv->var.blue.length) - 1); } - cmap.start = 0; - cmap.len = i; - cmap.red = &priv->red[0]; - cmap.green = &priv->green[0]; - cmap.blue = &priv->blue[0]; - cmap.transp = 0; - ioctl (priv->fd, FBIOPUTCMAP, &cmap); + + fbdevUpdateFbColormap(priv, 0, i); } return TRUE; } @@ -742,14 +746,17 @@ void fbdevCardFini (KdCardInfo *card) { FbdevPriv *priv = card->driver; - + munmap (priv->fb_base, priv->fix.smem_len); close (priv->fd); xfree (priv); } +/* + * Retrieve actual colormap and return selected n entries in pdefs. + */ void -fbdevGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +fbdevGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { KdScreenPriv(pScreen); FbdevPriv *priv = pScreenPriv->card->driver; @@ -789,12 +796,14 @@ fbdevGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) } } +/* + * Change colormap by updating n entries described in pdefs. + */ void -fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) +fbdevPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs) { KdScreenPriv(pScreen); FbdevPriv *priv = pScreenPriv->card->driver; - struct fb_cmap cmap; int p; int min, max; @@ -812,11 +821,6 @@ fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs) max = p; pdefs++; } - cmap.start = min; - cmap.len = max - min + 1; - cmap.red = &priv->red[min]; - cmap.green = &priv->green[min]; - cmap.blue = &priv->blue[min]; - cmap.transp = 0; - ioctl (priv->fd, FBIOPUTCMAP, &cmap); + + fbdevUpdateFbColormap(priv, min, max); } diff --git a/xorg-server/hw/kdrive/fbdev/fbdev.h b/xorg-server/hw/kdrive/fbdev/fbdev.h index 3da8e4753..ebac6ad8b 100644 --- a/xorg-server/hw/kdrive/fbdev/fbdev.h +++ b/xorg-server/hw/kdrive/fbdev/fbdev.h @@ -52,18 +52,12 @@ extern KdCardFuncs fbdevFuncs; extern char* fbdevDevicePath; Bool -fbdevInitialize (KdCardInfo *card, FbdevPriv *priv); - -Bool fbdevCardInit (KdCardInfo *card); Bool fbdevScreenInit (KdScreenInfo *screen); Bool -fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv); - -Bool fbdevInitScreen (ScreenPtr pScreen); Bool @@ -94,46 +88,12 @@ void fbdevCardFini (KdCardInfo *card); void -fbdevGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +fbdevGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs); void -fbdevPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs); +fbdevPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs); Bool 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_ */ diff --git a/xorg-server/hw/kdrive/fbdev/fbinit.c b/xorg-server/hw/kdrive/fbdev/fbinit.c index de80c79aa..93646f6d7 100644 --- a/xorg-server/hw/kdrive/fbdev/fbinit.c +++ b/xorg-server/hw/kdrive/fbdev/fbinit.c @@ -28,9 +28,7 @@ void InitCard (char *name) { - KdCardAttr attr; - - KdCardInfoAdd (&fbdevFuncs, &attr, 0); + KdCardInfoAdd (&fbdevFuncs, 0); } void @@ -60,11 +58,11 @@ ddxProcessArgument (int argc, char **argv, int i) { if (!strcmp (argv[i], "-fb")) { - if (i+1 < argc) + if (i+1 < argc) { fbdevDevicePath = argv[i+1]; return 2; - } + } UseMsg(); exit(1); } @@ -86,18 +84,18 @@ KdCardFuncs fbdevFuncs = { fbdevRestore, /* restore */ fbdevScreenFini, /* scrfini */ fbdevCardFini, /* cardfini */ - + 0, /* initCursor */ 0, /* enableCursor */ 0, /* disableCursor */ 0, /* finiCursor */ 0, /* recolorCursor */ - + 0, /* initAccel */ 0, /* enableAccel */ 0, /* disableAccel */ 0, /* finiAccel */ - + fbdevGetColors, /* getColors */ fbdevPutColors, /* putColors */ }; diff --git a/xorg-server/hw/kdrive/linux/Makefile.am b/xorg-server/hw/kdrive/linux/Makefile.am index 13df142f7..fe4a3d183 100644 --- a/xorg-server/hw/kdrive/linux/Makefile.am +++ b/xorg-server/hw/kdrive/linux/Makefile.am @@ -6,19 +6,22 @@ AM_CFLAGS = -DHAVE_DIX_CONFIG_H noinst_LTLIBRARIES = liblinux.la -if TSLIB -TSLIB_C = tslib.c +liblinux_la_SOURCES = + +liblinux_la_SOURCES += linux.c klinux.h + +if KDRIVE_KBD +liblinux_la_SOURCES += keyboard.c +endif + +if KDRIVE_EVDEV +liblinux_la_SOURCES += evdev.c endif -KDRIVE_HW_SOURCES = \ - evdev.c \ - keyboard.c \ - linux.c - -liblinux_la_SOURCES = \ - bus.c \ - mouse.c \ - ms.c \ - ps2.c \ - $(KDRIVE_HW_SOURCES) \ - $(TSLIB_C) +if KDRIVE_MOUSE +liblinux_la_SOURCES += mouse.c ms.c ps2.c +endif + +if TSLIB +liblinux_la_SOURCES += tslib.c +endif diff --git a/xorg-server/hw/kdrive/linux/bus.c b/xorg-server/hw/kdrive/linux/bus.c deleted file mode 100644 index de9b90f5a..000000000 --- a/xorg-server/hw/kdrive/linux/bus.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include <kdrive-config.h> -#endif -#include <X11/X.h> -#include <X11/Xproto.h> -#include <X11/Xpoll.h> -#include "inputstr.h" -#include "scrnintstr.h" -#include "kdrive.h" - -/* /dev/adbmouse is a busmouse */ - -static void -BusRead (int adbPort, void *closure) -{ - unsigned char buf[3]; - int n; - int dx, dy; - unsigned long flags; - - n = read (adbPort, buf, 3); - if (n == 3) - { - flags = KD_MOUSE_DELTA; - dx = (char) buf[1]; - dy = -(char) buf[2]; - if ((buf[0] & 4) == 0) - flags |= KD_BUTTON_1; - if ((buf[0] & 2) == 0) - flags |= KD_BUTTON_2; - if ((buf[0] & 1) == 0) - flags |= KD_BUTTON_3; - KdEnqueuePointerEvent (closure, flags, dx, dy, 0); - } -} - -char *BusNames[] = { - "/dev/adbmouse", - "/dev/mouse", -}; - -#define NUM_BUS_NAMES (sizeof (BusNames) / sizeof (BusNames[0])) - -static int -BusInit (KdPointerInfo *pi) -{ - int i, fd = 0; - - if (!pi->path || (strcmp(pi->path, "auto") == 0)) - { - for (i = 0; i < NUM_BUS_NAMES; i++) - { - if ((fd = open (BusNames[i], 0)) >= 0) - { - close(fd); - xfree(pi->path); - pi->path = strdup(BusNames[i]); - return Success; - } - } - } - else - { - if ((fd = open(pi->path, 0)) >= 0) - { - close(fd); - return Success; - } - } - - return !Success; -} - -static int -BusEnable (KdPointerInfo *pi) -{ - int fd = open(pi->path, 0); - - if (fd >= 0) - { - KdRegisterFd(fd, BusRead, pi); - pi->driverPrivate = (void *)fd; - return Success; - } - else - { - return !Success; - } -} - -static void -BusDisable (KdPointerInfo *pi) -{ - KdUnregisterFd(pi, (int)pi->driverPrivate, TRUE); -} - -static void -BusFini (KdPointerInfo *pi) -{ - return; -} - -KdPointerDriver BusMouseDriver = { - "bus", - BusInit, - BusEnable, - BusDisable, - BusFini, - NULL -}; diff --git a/xorg-server/hw/kdrive/linux/evdev.c b/xorg-server/hw/kdrive/linux/evdev.c index 096a2ddc3..485a2b557 100644 --- a/xorg-server/hw/kdrive/linux/evdev.c +++ b/xorg-server/hw/kdrive/linux/evdev.c @@ -48,7 +48,7 @@ typedef struct _kevdev { int abs[ABS_MAX + 1]; int prevabs[ABS_MAX + 1]; long key[NBITS(KEY_MAX + 1)]; - + /* supported device info */ long relbits[NBITS(REL_MAX + 1)]; long absbits[NBITS(ABS_MAX + 1)]; @@ -106,12 +106,12 @@ EvdevPtrMotion (KdPointerInfo *pi, struct input_event *ev) int a; for (a = 0; a <= ke->max_rel; a++) { - if (ISBITSET (ke->relbits, a)) + if (ISBITSET (ke->relbits, a)) { if (a == 0) KdEnqueuePointerEvent(pi, flags, ke->rel[a], 0, 0); else if (a == 1) - KdEnqueuePointerEvent(pi, flags, 0, ke->rel[a], 0); + KdEnqueuePointerEvent(pi, flags, 0, ke->rel[a], 0); } ke->rel[a] = 0; } @@ -131,9 +131,9 @@ EvdevPtrMotion (KdPointerInfo *pi, struct input_event *ev) ErrorF ("\n"); break; } - - if (ev->code == REL_WHEEL) { - for (i = 0; i < abs (ev->value); i++) + + if (ev->code == REL_WHEEL) { + for (i = 0; i < abs (ev->value); i++) { if (ev->value > 0) flags |= KD_BUTTON_4; @@ -150,7 +150,7 @@ EvdevPtrMotion (KdPointerInfo *pi, struct input_event *ev) KdEnqueuePointerEvent (pi, flags, 0, 0, 0); } } - + } static void @@ -164,7 +164,7 @@ EvdevPtrRead (int evdevPort, void *closure) n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event)); if (n <= 0) { - if (errno == ENODEV) + if (errno == ENODEV) DeleteInputDeviceRequest(pi->dixdev); return; } @@ -231,7 +231,7 @@ EvdevPtrInit (KdPointerInfo *pi) static Status EvdevPtrEnable (KdPointerInfo *pi) -{ +{ int fd; unsigned long ev[NBITS(EV_MAX)]; Kevdev *ke; @@ -352,7 +352,7 @@ EvdevPtrFini (KdPointerInfo *pi) /* - * Evdev keyboard functions + * Evdev keyboard functions */ static void @@ -374,7 +374,7 @@ EvdevKbdRead (int evdevPort, void *closure) n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event)); if (n <= 0) { - if (errno == ENODEV) + if (errno == ENODEV) DeleteInputDeviceRequest(ki->dixdev); return; } @@ -395,7 +395,7 @@ static Status EvdevKbdInit (KdKeyboardInfo *ki) { int fd; - + if (!ki->path) { ErrorF("Couldn't find evdev device path\n"); return BadValue; diff --git a/xorg-server/hw/kdrive/linux/linux.c b/xorg-server/hw/kdrive/linux/linux.c index f76c2cbd9..9863c1424 100644 --- a/xorg-server/hw/kdrive/linux/linux.c +++ b/xorg-server/hw/kdrive/linux/linux.c @@ -33,6 +33,22 @@ #include <X11/keysym.h> #include <linux/apm_bios.h> +#ifdef KDRIVE_MOUSE +extern KdPointerDriver LinuxMouseDriver; +extern KdPointerDriver Ps2MouseDriver; +extern KdPointerDriver MsMouseDriver; +#endif +#ifdef TSLIB +extern KdPointerDriver TsDriver; +#endif +#ifdef KDRIVE_EVDEV +extern KdPointerDriver LinuxEvdevMouseDriver; +extern KdKeyboardDriver LinuxEvdevKeyboardDriver; +#endif +#ifdef KDRIVE_KBD +extern KdKeyboardDriver LinuxKeyboardDriver; +#endif + static int vtno; int LinuxConsoleFd; int LinuxApmFd = -1; @@ -79,7 +95,7 @@ LinuxInit (void) vtno = kdVirtualTerminal; else { - if ((fd = open("/dev/tty0",O_WRONLY,0)) < 0) + if ((fd = open("/dev/tty0",O_WRONLY,0)) < 0) { FatalError( "LinuxInit: Cannot open /dev/tty0 (%s)\n", @@ -129,8 +145,8 @@ LinuxSetSwitchMode (int mode) { struct sigaction act; struct vt_mode VT; - - if (ioctl(LinuxConsoleFd, VT_GETMODE, &VT) < 0) + + if (ioctl(LinuxConsoleFd, VT_GETMODE, &VT) < 0) { FatalError ("LinuxInit: VT_GETMODE failed\n"); } @@ -141,7 +157,7 @@ LinuxSetSwitchMode (int mode) sigemptyset (&act.sa_mask); act.sa_flags = 0; sigaction (SIGUSR1, &act, 0); - + VT.mode = mode; VT.relsig = SIGUSR1; VT.acqsig = SIGUSR1; @@ -152,12 +168,12 @@ LinuxSetSwitchMode (int mode) sigemptyset (&act.sa_mask); act.sa_flags = 0; sigaction (SIGUSR1, &act, 0); - + VT.mode = mode; VT.relsig = 0; VT.acqsig = 0; } - if (ioctl(LinuxConsoleFd, VT_SETMODE, &VT) < 0) + if (ioctl(LinuxConsoleFd, VT_SETMODE, &VT) < 0) { FatalError("LinuxInit: VT_SETMODE failed\n"); } @@ -237,7 +253,7 @@ LinuxEnable (void) */ LinuxApmFd = open ("/dev/apm_bios", 2); if (LinuxApmFd < 0 && errno == ENOENT) - LinuxApmFd = open ("/dev/misc/apm_bios", 2); + LinuxApmFd = open ("/dev/misc/apm_bios", 2); if (LinuxApmFd >= 0) { LinuxApmRunning = TRUE; @@ -245,7 +261,7 @@ LinuxEnable (void) RegisterBlockAndWakeupHandlers (LinuxApmBlock, LinuxApmWakeup, 0); AddEnabledDevice (LinuxApmFd); } - + /* * now get the VT */ @@ -308,8 +324,8 @@ LinuxFini (void) * Find a legal VT to switch to, either the one we started from * or the lowest active one that isn't ours */ - if (activeVT < 0 || - activeVT == vts.v_active || + if (activeVT < 0 || + activeVT == vts.v_active || !(vts.v_state & (1 << activeVT))) { for (activeVT = 1; activeVT < 16; activeVT++) @@ -345,15 +361,21 @@ LinuxFini (void) void KdOsAddInputDrivers (void) { +#ifdef KDRIVE_MOUSE KdAddPointerDriver(&LinuxMouseDriver); KdAddPointerDriver(&MsMouseDriver); KdAddPointerDriver(&Ps2MouseDriver); +#endif #ifdef TSLIB KdAddPointerDriver(&TsDriver); #endif +#ifdef KDRIVE_EVDEV KdAddPointerDriver(&LinuxEvdevMouseDriver); - KdAddKeyboardDriver(&LinuxKeyboardDriver); KdAddKeyboardDriver(&LinuxEvdevKeyboardDriver); +#endif +#ifdef KDRIVE_KBD + KdAddKeyboardDriver(&LinuxKeyboardDriver); +#endif } static void diff --git a/xorg-server/hw/kdrive/linux/mouse.c b/xorg-server/hw/kdrive/linux/mouse.c index 6f399b586..007263e4b 100644 --- a/xorg-server/hw/kdrive/linux/mouse.c +++ b/xorg-server/hw/kdrive/linux/mouse.c @@ -112,7 +112,7 @@ MouseFlush (Kbufio *b, char *buf, int size) CARD32 done = now + 100; int c; int n = 0; - + while ((c = MouseReadByte (b, done - now)) != -1) { if (buf) @@ -170,7 +170,7 @@ static Bool MouseWriteByte (int fd, unsigned char c, int timeout) { int ret; - + #ifdef DEBUG_BYTES ErrorF ("\tput %02x\n", c); #endif @@ -234,7 +234,7 @@ typedef struct _kmouse { int invalid;/* total invalid bytes for this protocol */ unsigned long state; /* private per protocol, init to prot->state */ } Kmouse; - + static int mouseValid (KdPointerInfo *pi, unsigned char *ev, int ne) { Kmouse *km = pi->driverPrivate; @@ -271,16 +271,16 @@ static Bool MouseReasonable (KdPointerInfo *pi, unsigned long flags, int dx, int { Kmouse *km = pi->driverPrivate; - if (km->stage == MouseWorking) + if (km->stage == MouseWorking) return TRUE; - if (dx < -50 || dx > 50) + if (dx < -50 || dx > 50) { #ifdef DEBUG ErrorF ("Large X %d\n", dx); #endif return FALSE; } - if (dy < -50 || dy > 50) + if (dy < -50 || dy > 50) { #ifdef DEBUG ErrorF ("Large Y %d\n", dy); @@ -299,7 +299,7 @@ static Bool ps2Parse (KdPointerInfo *pi, unsigned char *ev, int ne) int dx, dy, dz; unsigned long flags; unsigned long flagsrelease = 0; - + flags = KD_MOUSE_DELTA; if (ev[0] & 4) flags |= KD_BUTTON_2; @@ -307,7 +307,7 @@ static Bool ps2Parse (KdPointerInfo *pi, unsigned char *ev, int ne) flags |= KD_BUTTON_3; if (ev[0] & 1) flags |= KD_BUTTON_1; - + if (ne > 3) { dz = (int) (signed char) ev[3]; @@ -322,7 +322,7 @@ static Bool ps2Parse (KdPointerInfo *pi, unsigned char *ev, int ne) flagsrelease = KD_BUTTON_5; } } - + dx = ev[1]; if (ev[0] & 0x10) dx -= 256; @@ -407,14 +407,14 @@ static const KmouseProt exps2Prot = { #define PSM_4DMOUSE_ID 6 #define PSM_4DPLUS_ID 8 -static unsigned char ps2_init[] = { +static unsigned char ps2_init[] = { PSMC_ENABLE_DEV, 0, }; #define NINIT_PS2 1 -static unsigned char wheel_3button_init[] = { +static unsigned char wheel_3button_init[] = { PSMC_SET_SAMPLING_RATE, 200, PSMC_SET_SAMPLING_RATE, 100, PSMC_SET_SAMPLING_RATE, 80, @@ -431,7 +431,7 @@ static unsigned char wheel_5button_init[] = { PSMC_SET_SAMPLING_RATE, 200, PSMC_SET_SAMPLING_RATE, 200, PSMC_SET_SAMPLING_RATE, 80, - PSMC_SEND_DEV_ID, + PSMC_SEND_DEV_ID, 0 }; @@ -439,8 +439,8 @@ static unsigned char wheel_5button_init[] = { static unsigned char intelli_init[] = { PSMC_SET_SAMPLING_RATE, 200, - PSMC_SET_SAMPLING_RATE, 100, - PSMC_SET_SAMPLING_RATE, 80, + PSMC_SET_SAMPLING_RATE, 100, + PSMC_SET_SAMPLING_RATE, 80, 0 }; @@ -453,7 +453,7 @@ ps2SkipInit (KdPointerInfo *pi, int ninit, Bool ret_next) int c = -1; int skipping; Bool waiting; - + skipping = 0; waiting = FALSE; while (ninit || ret_next) @@ -486,7 +486,7 @@ ps2Init (KdPointerInfo *pi) int id; unsigned char *init; int ninit; - + /* Send Intellimouse initialization sequence */ MouseWriteBytes (km->iob.fd, intelli_init, strlen ((char *) intelli_init), 100); /* @@ -530,7 +530,7 @@ static Bool busParse (KdPointerInfo *pi, unsigned char *ev, int ne) Kmouse *km = pi->driverPrivate; int dx, dy; unsigned long flags; - + flags = KD_MOUSE_DELTA; dx = (signed char) ev[1]; dy = -(signed char) ev[2]; @@ -636,14 +636,14 @@ static Bool logiParse (KdPointerInfo *pi, unsigned char *ev, int ne) unsigned long flags; flags = KD_MOUSE_DELTA; - + if (ne == 3) { if (ev[0] & 0x20) flags |= KD_BUTTON_1; if (ev[0] & 0x10) flags |= KD_BUTTON_3; - + dx = (signed char)(((ev[0] & 0x03) << 6) | (ev[1] & 0x3F)); dy = (signed char)(((ev[0] & 0x0C) << 4) | (ev[2] & 0x3F)); flags |= km->state & KD_BUTTON_2; @@ -686,7 +686,7 @@ static Bool mscParse (KdPointerInfo *pi, unsigned char *ev, int ne) unsigned long flags; flags = KD_MOUSE_DELTA; - + if (!(ev[0] & 0x4)) flags |= KD_BUTTON_1; if (!(ev[0] & 0x2)) @@ -871,7 +871,7 @@ MouseRead (int mousePort, void *closure) switch (km->stage) { case MouseBroken: -#ifdef DEBUG +#ifdef DEBUG ErrorF ("Mouse protocol %s seems OK\n", km->prot->name); #endif @@ -939,7 +939,7 @@ MouseInit (KdPointerInfo *pi) if (!pi) return BadImplementation; - + if (!pi->path || strcmp(pi->path, "auto") == 0) { for (i = 0; i < NUM_DEFAULT_MOUSE; i++) { fd = open (kdefaultMouse[i], 2); @@ -952,7 +952,7 @@ MouseInit (KdPointerInfo *pi) else { fd = open (pi->path, 2); } - + if (fd < 0) return BadMatch; @@ -1008,7 +1008,7 @@ MouseDisable (KdPointerInfo *pi) Kmouse *km; if (!pi || !pi->driverPrivate) return; - + km = pi->driverPrivate; KdUnregisterFd (pi, km->iob.fd, TRUE); } diff --git a/xorg-server/hw/kdrive/linux/ms.c b/xorg-server/hw/kdrive/linux/ms.c index 5786ed170..b6151cd90 100644 --- a/xorg-server/hw/kdrive/linux/ms.c +++ b/xorg-server/hw/kdrive/linux/ms.c @@ -83,7 +83,7 @@ MsRead (int port, void *closure) flags |= KD_BUTTON_1; if (b[0] & 0x10) flags |= KD_BUTTON_3; - + dx = (char)(((b[0] & 0x03) << 6) | (b[1] & 0x3F)); dy = (char)(((b[0] & 0x0C) << 4) | (b[2] & 0x3F)); n -= 3; @@ -103,8 +103,8 @@ MsInit (KdPointerInfo *pi) pi->path = strdup("/dev/mouse"); if (!pi->name) pi->name = strdup("Microsoft protocol mouse"); - - return Success; + + return Success; } static Status diff --git a/xorg-server/hw/kdrive/linux/ps2.c b/xorg-server/hw/kdrive/linux/ps2.c index 396758481..552a3c7cb 100644 --- a/xorg-server/hw/kdrive/linux/ps2.c +++ b/xorg-server/hw/kdrive/linux/ps2.c @@ -99,7 +99,7 @@ Ps2Read (int ps2Port, void *closure) flags |= right_button; if (b[0] & 1) flags |= left_button; - + dx = b[1]; if (b[0] & 0x10) dx -= 256; @@ -146,7 +146,7 @@ static Status Ps2Enable (KdPointerInfo *pi) { int fd; - + if (!pi) return BadImplementation; diff --git a/xorg-server/hw/kdrive/src/Makefile.am b/xorg-server/hw/kdrive/src/Makefile.am index 7ac23c2aa..51375b950 100644 --- a/xorg-server/hw/kdrive/src/Makefile.am +++ b/xorg-server/hw/kdrive/src/Makefile.am @@ -15,12 +15,10 @@ endif libkdrive_la_SOURCES = \ fourcc.h \ kcmap.c \ - kcurscol.c \ kdrive.c \ kdrive.h \ kinfo.c \ kinput.c \ - kmap.c \ kmode.c \ kshadow.c \ $(KDRIVE_XV_SOURCES) \ diff --git a/xorg-server/hw/kdrive/src/kcmap.c b/xorg-server/hw/kdrive/src/kcmap.c index 2c33e798a..40697e091 100644 --- a/xorg-server/hw/kdrive/src/kcmap.c +++ b/xorg-server/hw/kdrive/src/kcmap.c @@ -30,10 +30,10 @@ */ void -KdSetColormap (ScreenPtr pScreen, int fb) +KdSetColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); - ColormapPtr pCmap = pScreenPriv->pInstalledmap[fb]; + ColormapPtr pCmap = pScreenPriv->pInstalledmap; Pixel pixels[KD_MAX_PSEUDO_SIZE]; xrgb colors[KD_MAX_PSEUDO_SIZE]; xColorItem defs[KD_MAX_PSEUDO_SIZE]; @@ -41,12 +41,12 @@ KdSetColormap (ScreenPtr pScreen, int fb) if (!pScreenPriv->card->cfuncs->putColors) return; - if (pScreenPriv->screen->fb[fb].depth > KD_MAX_PSEUDO_DEPTH) + if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) return; - + if (!pScreenPriv->enabled) return; - + if (!pCmap) return; @@ -54,13 +54,13 @@ KdSetColormap (ScreenPtr pScreen, int fb) * Make DIX convert pixels into RGB values -- this handles * true/direct as well as pseudo/static visuals */ - - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) + + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) pixels[i] = i; - QueryColors (pCmap, (1 << pScreenPriv->screen->fb[fb].depth), pixels, colors); - - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) + QueryColors (pCmap, (1 << pScreenPriv->screen->fb.depth), pixels, colors); + + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) { defs[i].pixel = i; defs[i].red = colors[i].red; @@ -69,8 +69,8 @@ KdSetColormap (ScreenPtr pScreen, int fb) defs[i].flags = DoRed|DoGreen|DoBlue; } - (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), + (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, + (1 << pScreenPriv->screen->fb.depth), defs); /* recolor hardware cursor */ @@ -87,77 +87,35 @@ KdEnableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); int i; - int fb; - Bool done = FALSE; if (!pScreenPriv->card->cfuncs->putColors) return; - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) + + if (pScreenPriv->screen->fb.depth <= KD_MAX_PSEUDO_DEPTH) { - if (pScreenPriv->screen->fb[fb].depth <= KD_MAX_PSEUDO_DEPTH && !done) - { - for (i = 0; i < (1 << pScreenPriv->screen->fb[fb].depth); i++) - pScreenPriv->systemPalette[i].pixel = i; - (*pScreenPriv->card->cfuncs->getColors) (pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), - pScreenPriv->systemPalette); - done = TRUE; - } - KdSetColormap (pScreen, fb); + for (i = 0; i < (1 << pScreenPriv->screen->fb.depth); i++) + pScreenPriv->systemPalette[i].pixel = i; + (*pScreenPriv->card->cfuncs->getColors) (pScreen, + (1 << pScreenPriv->screen->fb.depth), + pScreenPriv->systemPalette); } + KdSetColormap (pScreen); } void KdDisableColormap (ScreenPtr pScreen) { KdScreenPriv(pScreen); - int fb; if (!pScreenPriv->card->cfuncs->putColors) return; - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) - { - if (pScreenPriv->screen->fb[fb].depth <= KD_MAX_PSEUDO_DEPTH) - { - (*pScreenPriv->card->cfuncs->putColors) (pScreen, fb, - (1 << pScreenPriv->screen->fb[fb].depth), - pScreenPriv->systemPalette); - break; - } - } -} -static int -KdColormapFb (ColormapPtr pCmap) -{ - ScreenPtr pScreen = pCmap->pScreen; - KdScreenPriv (pScreen); - KdScreenInfo *screen = pScreenPriv->screen; - int d; - DepthPtr depth; - int v; - VisualID vid = pCmap->pVisual->vid; - int fb; - - if (screen->fb[1].depth) + if (pScreenPriv->screen->fb.depth <= KD_MAX_PSEUDO_DEPTH) { - for (d = 0; d < pScreen->numDepths; d++) - { - depth = &pScreen->allowedDepths[d]; - for (v = 0; v < depth->numVids; v++) - { - if (depth->vids[v] == vid) - { - for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++) - { - if (depth->depth == screen->fb[fb].depth) - return fb; - } - } - } - } + (*pScreenPriv->card->cfuncs->putColors) (pScreen, + (1 << pScreenPriv->screen->fb.depth), + pScreenPriv->systemPalette); } - return 0; } /* @@ -173,21 +131,20 @@ void KdInstallColormap (ColormapPtr pCmap) { KdScreenPriv(pCmap->pScreen); - int fb = KdColormapFb (pCmap); - if (pCmap == pScreenPriv->pInstalledmap[fb]) + if (pCmap == pScreenPriv->pInstalledmap) return; /* Tell X clients that the installed colormap is going away. */ - if (pScreenPriv->pInstalledmap[fb]) - WalkTree(pScreenPriv->pInstalledmap[fb]->pScreen, TellLostMap, - (pointer) &(pScreenPriv->pInstalledmap[fb]->mid)); + if (pScreenPriv->pInstalledmap) + WalkTree(pScreenPriv->pInstalledmap->pScreen, TellLostMap, + (pointer) &(pScreenPriv->pInstalledmap->mid)); /* Take note of the new installed colorscreen-> */ - pScreenPriv->pInstalledmap[fb] = pCmap; + pScreenPriv->pInstalledmap = pCmap; + + KdSetColormap (pCmap->pScreen); - KdSetColormap (pCmap->pScreen, fb); - /* Tell X clients of the new colormap */ WalkTree(pCmap->pScreen, TellGainedMap, (pointer) &(pCmap->mid)); } @@ -195,7 +152,7 @@ KdInstallColormap (ColormapPtr pCmap) /* * KdUninstallColormap * - * This function uninstalls a colormap by either installing + * This function uninstalls a colormap by either installing * the default X colormap or erasing the installed colormap pointer. * The default X colormap itself cannot be uninstalled. */ @@ -203,12 +160,11 @@ void KdUninstallColormap (ColormapPtr pCmap) { KdScreenPriv(pCmap->pScreen); - int fb = KdColormapFb (pCmap); Colormap defMapID; ColormapPtr defMap; /* ignore if not installed */ - if (pCmap != pScreenPriv->pInstalledmap[fb]) + if (pCmap != pScreenPriv->pInstalledmap) return; /* ignore attempts to uninstall default colormap */ @@ -216,17 +172,17 @@ KdUninstallColormap (ColormapPtr pCmap) if ((Colormap) pCmap->mid == defMapID) return; - /* install default if on same fb */ + /* install default */ dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, serverClient, DixInstallAccess); - if (defMap && KdColormapFb (defMap) == fb) + if (defMap) (*pCmap->pScreen->InstallColormap)(defMap); else { /* uninstall and clear colormap pointer */ WalkTree(pCmap->pScreen, TellLostMap, (pointer) &(pCmap->mid)); - pScreenPriv->pInstalledmap[fb] = 0; + pScreenPriv->pInstalledmap = 0; } } @@ -234,16 +190,12 @@ int KdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps) { KdScreenPriv(pScreen); - int fb; int n = 0; - - for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++) + + if (pScreenPriv->pInstalledmap) { - if (pScreenPriv->pInstalledmap[fb]) - { - *pCmaps++ = pScreenPriv->pInstalledmap[fb]->mid; - n++; - } + *pCmaps++ = pScreenPriv->pInstalledmap->mid; + n++; } return n; } @@ -261,20 +213,19 @@ KdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs) KdScreenPriv(pCmap->pScreen); VisualPtr pVisual; xColorItem expanddefs[KD_MAX_PSEUDO_SIZE]; - int fb = KdColormapFb (pCmap); - if (pCmap != pScreenPriv->pInstalledmap[fb]) + if (pCmap != pScreenPriv->pInstalledmap) return; - + if (!pScreenPriv->card->cfuncs->putColors) return; - - if (pScreenPriv->screen->fb[fb].depth > KD_MAX_PSEUDO_DEPTH) + + if (pScreenPriv->screen->fb.depth > KD_MAX_PSEUDO_DEPTH) return; - + if (!pScreenPriv->enabled) return; - + /* Check for DirectColor or TrueColor being simulated on a PseudoColor device. */ pVisual = pCmap->pVisual; if ((pVisual->class | DynamicClass) == DirectColor) @@ -287,8 +238,8 @@ KdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs) pdefs = expanddefs; } - (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, fb, ndef, pdefs); - + (*pScreenPriv->card->cfuncs->putColors) (pCmap->pScreen, ndef, pdefs); + /* recolor hardware cursor */ if (pScreenPriv->card->cfuncs->recolorCursor) (*pScreenPriv->card->cfuncs->recolorCursor) (pCmap->pScreen, ndef, pdefs); diff --git a/xorg-server/hw/kdrive/src/kcurscol.c b/xorg-server/hw/kdrive/src/kcurscol.c deleted file mode 100644 index 6a17df30f..000000000 --- a/xorg-server/hw/kdrive/src/kcurscol.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright © 1999 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include <kdrive-config.h> -#endif -#include "kdrive.h" -#include "cursorstr.h" - -static int -KdComputeCmapShift (unsigned long mask) -{ - int shift; - unsigned long bit; - - shift = 16; - bit = 0x80000000; - while (!(mask & bit)) - { - shift--; - bit >>= 1; - } - return shift; -} - -#define Shift(v,d) ((d) < 0 ? ((v) >> (-d)) : ((v) << (d))) - -void -KdAllocateCursorPixels (ScreenPtr pScreen, - int fb, - CursorPtr pCursor, - Pixel *source, - Pixel *mask) -{ - xColorItem sourceColor, maskColor; - int r, g, b; - KdScreenPriv(pScreen); - - if (pScreenPriv->screen->fb[fb].redMask) - { - - r = KdComputeCmapShift (pScreenPriv->screen->fb[fb].redMask); - g = KdComputeCmapShift (pScreenPriv->screen->fb[fb].greenMask); - b = KdComputeCmapShift (pScreenPriv->screen->fb[fb].blueMask); - *source = ((Shift(pCursor->foreRed,r) & pScreenPriv->screen->fb[fb].redMask) | - (Shift(pCursor->foreGreen,g) & pScreenPriv->screen->fb[fb].greenMask) | - (Shift(pCursor->foreBlue,b) & pScreenPriv->screen->fb[fb].blueMask)); - *mask = ((Shift(pCursor->backRed,r) & pScreenPriv->screen->fb[fb].redMask) | - (Shift(pCursor->backGreen,g) & pScreenPriv->screen->fb[fb].greenMask) | - (Shift(pCursor->backBlue,b) & pScreenPriv->screen->fb[fb].blueMask)); - } - else - { - /* - * Set these to an invalid pixel value so that - * when the store colors comes through, the cursor - * won't get recolored - */ - *source = ~0; - *mask = ~0; - - sourceColor.red = pCursor->foreRed; - sourceColor.green = pCursor->foreGreen; - sourceColor.blue = pCursor->foreBlue; - FakeAllocColor(pScreenPriv->pInstalledmap[fb], &sourceColor); - maskColor.red = pCursor->backRed; - maskColor.green = pCursor->backGreen; - maskColor.blue = pCursor->backBlue; - FakeAllocColor(pScreenPriv->pInstalledmap[fb], &maskColor); - FakeFreeColor(pScreenPriv->pInstalledmap[fb], sourceColor.pixel); - FakeFreeColor(pScreenPriv->pInstalledmap[fb], maskColor.pixel); - *source = sourceColor.pixel; - *mask = maskColor.pixel; - } -} 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 */ diff --git a/xorg-server/hw/kdrive/src/kdrive.h b/xorg-server/hw/kdrive/src/kdrive.h index 9620391c6..35ce03660 100644 --- a/xorg-server/hw/kdrive/src/kdrive.h +++ b/xorg-server/hw/kdrive/src/kdrive.h @@ -53,45 +53,15 @@ #define KD_DPMS_POWERDOWN 3 #define KD_DPMS_MAX KD_DPMS_POWERDOWN -#ifndef KD_MAX_FB -#define KD_MAX_FB FB_OVERLAY_MAX -#endif - -#ifndef KD_MAX_CARD_ADDRESS -#define KD_MAX_CARD_ADDRESS 8 -#endif - #define Status int -/* - * Configuration information per video card - */ - -typedef struct _KdCardAttr { - CARD32 io; - CARD32 address[KD_MAX_CARD_ADDRESS]; - int naddr; - - /* PCI bus info */ - CARD16 vendorID; - CARD16 deviceID; - CARD8 domain; - CARD8 bus; - CARD8 slot; - CARD8 func; -} KdCardAttr; - typedef struct _KdCardInfo { struct _KdCardFuncs *cfuncs; void *closure; - KdCardAttr attr; void *driver; struct _KdScreenInfo *screenList; int selected; struct _KdCardInfo *next; - - Bool needSync; - int lastMarker; } KdCardInfo; extern KdCardInfo *kdCardInfo; @@ -130,10 +100,7 @@ typedef struct _KdScreenInfo { Bool softCursor; int mynum; DDXPointRec origin; - KdFrameBuffer fb[KD_MAX_FB]; - CARD8 *memory_base; - unsigned long memory_size; - unsigned long off_screen_base; + KdFrameBuffer fb; } KdScreenInfo; typedef struct _KdCardFuncs { @@ -161,8 +128,8 @@ typedef struct _KdCardFuncs { void (*disableAccel) (ScreenPtr); void (*finiAccel) (ScreenPtr); - void (*getColors) (ScreenPtr, int, int, xColorItem *); - void (*putColors) (ScreenPtr, int, int, xColorItem *); + void (*getColors) (ScreenPtr, int, xColorItem *); + void (*putColors) (ScreenPtr, int, xColorItem *); } KdCardFuncs; @@ -175,11 +142,11 @@ typedef struct { Bool enabled; Bool closed; - int bytesPerPixel[KD_MAX_FB]; + int bytesPerPixel; int dpmsState; - ColormapPtr pInstalledmap[KD_MAX_FB]; /* current colormap */ + ColormapPtr pInstalledmap; /* current colormap */ xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];/* saved windows colors */ CreateScreenResourcesProcPtr CreateScreenResources; @@ -242,7 +209,7 @@ struct _KdPointerInfo { int z; int flags; int absrel; - } heldEvent; + } heldEvent; unsigned char buttonState; Bool transformCoordinates; int pressureThreshold; @@ -392,12 +359,9 @@ extern KdOsFuncs *kdOsFuncs; dixSetPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey, v) #define KdScreenPriv(pScreen) KdPrivScreenPtr pScreenPriv = KdGetScreenPriv(pScreen) -/* knoop.c */ -extern GCOps kdNoopOps; - /* kcmap.c */ void -KdSetColormap (ScreenPtr pScreen, int fb); +KdSetColormap (ScreenPtr pScreen); void KdEnableColormap (ScreenPtr pScreen); @@ -417,14 +381,6 @@ KdListInstalledColormaps (ScreenPtr pScreen, Colormap *pCmaps); void KdStoreColors (ColormapPtr pCmap, int ndef, xColorItem *pdefs); -/* kcurscol.c */ -void -KdAllocateCursorPixels (ScreenPtr pScreen, - int fb, - CursorPtr pCursor, - Pixel *source, - Pixel *mask); - /* kdrive.c */ extern miPointerScreenFuncRec kdPointerScreenFuncs; @@ -517,17 +473,16 @@ void KdInitOutput (ScreenInfo *pScreenInfo, int argc, char **argv); - + void KdSetSubpixelOrder (ScreenPtr pScreen, Rotation randr); void KdBacktrace (int signum); - + /* kinfo.c */ KdCardInfo * KdCardInfoAdd (KdCardFuncs *funcs, - KdCardAttr *attr, void *closure); KdCardInfo * @@ -584,7 +539,7 @@ _KdEnqueuePointerEvent(KdPointerInfo *pi, int type, int x, int y, int z, void KdReleaseAllKeys (void); - + void KdSetLed (KdKeyboardInfo *ki, int led, Bool on); @@ -604,7 +559,7 @@ KdBlockHandler (int screen, pointer readmask); void -KdWakeupHandler (int screen, +KdWakeupHandler (int screen, pointer data, unsigned long result, pointer readmask); @@ -624,37 +579,6 @@ KdRingBell (KdKeyboardInfo *ki, int pitch, int duration); -extern KdPointerDriver LinuxMouseDriver; -extern KdPointerDriver LinuxEvdevMouseDriver; -extern KdPointerDriver Ps2MouseDriver; -extern KdPointerDriver BusMouseDriver; -extern KdPointerDriver MsMouseDriver; -extern KdPointerDriver TsDriver; -extern KdKeyboardDriver LinuxKeyboardDriver; -extern KdKeyboardDriver LinuxEvdevKeyboardDriver; -extern KdOsFuncs LinuxFuncs; - -extern KdPointerDriver VxWorksMouseDriver; -extern KdKeyboardDriver VxWorksKeyboardDriver; -extern KdOsFuncs VxWorksFuncs; - -/* kmap.c */ - -#define KD_MAPPED_MODE_REGISTERS 0 -#define KD_MAPPED_MODE_FRAMEBUFFER 1 - -void * -KdMapDevice (CARD32 addr, CARD32 size); - -void -KdUnmapDevice (void *addr, CARD32 size); - -void -KdSetMappedMode (CARD32 addr, CARD32 size, int mode); - -void -KdResetMappedMode (CARD32 addr, CARD32 size, int mode); - /* kmode.c */ const KdMonitorTiming * KdFindMode (KdScreenInfo *screen, @@ -669,14 +593,14 @@ KdTuneMode (KdScreenInfo *screen, #ifdef RANDR Bool -KdRandRGetInfo (ScreenPtr pScreen, +KdRandRGetInfo (ScreenPtr pScreen, int randr, - Bool (*supported) (ScreenPtr pScreen, + Bool (*supported) (ScreenPtr pScreen, const KdMonitorTiming *)); const KdMonitorTiming * KdRandRGetTiming (ScreenPtr pScreen, - Bool (*supported) (ScreenPtr pScreen, + Bool (*supported) (ScreenPtr pScreen, const KdMonitorTiming *), int rate, RRScreenSizePtr pSize); @@ -684,14 +608,14 @@ KdRandRGetTiming (ScreenPtr pScreen, /* kshadow.c */ Bool -KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate); +KdShadowFbAlloc (KdScreenInfo *screen, Bool rotate); void -KdShadowFbFree (KdScreenInfo *screen, int fb); +KdShadowFbFree (KdScreenInfo *screen); Bool KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindowProc window); - + void KdShadowUnset (ScreenPtr pScreen); diff --git a/xorg-server/hw/kdrive/src/kinfo.c b/xorg-server/hw/kdrive/src/kinfo.c index 95afc7963..0825ee24f 100644 --- a/xorg-server/hw/kdrive/src/kinfo.c +++ b/xorg-server/hw/kdrive/src/kinfo.c @@ -29,7 +29,6 @@ KdCardInfo *kdCardInfo; KdCardInfo * KdCardInfoAdd (KdCardFuncs *funcs, - KdCardAttr *attr, void *closure) { KdCardInfo *ci, **prev; @@ -40,7 +39,6 @@ KdCardInfoAdd (KdCardFuncs *funcs, for (prev = &kdCardInfo; *prev; prev = &(*prev)->next); *prev = ci; ci->cfuncs = funcs; - ci->attr = *attr; ci->closure = closure; ci->screenList = 0; ci->selected = 0; diff --git a/xorg-server/hw/kdrive/src/kmap.c b/xorg-server/hw/kdrive/src/kmap.c deleted file mode 100644 index 60e8ae134..000000000 --- a/xorg-server/hw/kdrive/src/kmap.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright © 1999 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include <kdrive-config.h> -#include "kdrive.h" - -#include <errno.h> -#include <unistd.h> -#include <sys/mman.h> -#ifdef HAVE_ASM_MTRR_H -#include <asm/mtrr.h> -#endif - -#include <sys/ioctl.h> - -void * -KdMapDevice (CARD32 addr, CARD32 size) -{ -#ifdef WINDOWS - void *a; - void *d; - - d = VirtualAlloc (NULL, size, MEM_RESERVE, PAGE_NOACCESS); - if (!d) - return NULL; - DRAW_DEBUG ((DEBUG_S3INIT, "Virtual address of 0x%x is 0x%x", addr, d)); - a = VirtualCopyAddr (addr); - DRAW_DEBUG ((DEBUG_S3INIT, "Translated address is 0x%x", a)); - if (!VirtualCopy (d, a, size, - PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL)) - { - DRAW_DEBUG ((DEBUG_FAILURE, "VirtualCopy failed %d", - GetLastError ())); - return NULL; - } - DRAW_DEBUG ((DEBUG_S3INIT, "Device mapped successfully")); - return d; -#endif -#ifdef linux - void *a; - int fd; - -#ifdef __arm__ - fd = open ("/dev/mem", O_RDWR|O_SYNC); -#else - fd = open ("/dev/mem", O_RDWR); -#endif - if (fd < 0) - FatalError ("KdMapDevice: failed to open /dev/mem (%s)\n", - strerror (errno)); - - a = mmap ((caddr_t) 0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr); - close (fd); - if ((long) a == -1) - FatalError ("KdMapDevice: failed to map frame buffer (%s)\n", - strerror (errno)); - return a; -#endif -} - -void -KdUnmapDevice (void *addr, CARD32 size) -{ -#ifdef WINDOWS - VirtualFree (addr, size, MEM_DECOMMIT); - VirtualFree (addr, 0, MEM_RELEASE); -#endif -#ifdef linux - munmap (addr, size); -#endif -} - -#ifdef HAVE_ASM_MTRR_H -static int mtrr; -#endif - -void -KdSetMappedMode (CARD32 addr, CARD32 size, int mode) -{ -#ifdef HAVE_ASM_MTRR_H - struct mtrr_sentry sentry; - unsigned long base, bound; - unsigned int type = MTRR_TYPE_WRBACK; - - if (addr < 0x100000) - return; - if (!mtrr) - mtrr = open ("/proc/mtrr", 2); - if (mtrr > 0) - { - unsigned long nsize; - base = addr & ~((1<<22)-1); - bound = ((addr + size) + ((1<<22) - 1)) & ~((1<<22) - 1); - nsize = 1; - while (nsize < (bound - base)) - nsize <<= 1; - switch (mode) { - case KD_MAPPED_MODE_REGISTERS: - type = MTRR_TYPE_UNCACHABLE; - break; - case KD_MAPPED_MODE_FRAMEBUFFER: - type = MTRR_TYPE_WRCOMB; - break; - } - sentry.base = base; - sentry.size = nsize; - sentry.type = type; - - if (ioctl (mtrr, MTRRIOC_ADD_ENTRY, &sentry) < 0) - ErrorF ("MTRRIOC_ADD_ENTRY failed 0x%x 0x%x %d (%s)\n", - base, bound - base, type, strerror(errno)); - } -#endif -} - -void -KdResetMappedMode (CARD32 addr, CARD32 size, int mode) -{ -#ifdef HAVE_ASM_MTRR_H - struct mtrr_sentry sentry; - unsigned long base, bound; - unsigned int type = MTRR_TYPE_WRBACK; - - if (addr < 0x100000) - return; - if (!mtrr) - mtrr = open ("/proc/mtrr", 2); - if (mtrr > 0) - { - unsigned long nsize; - base = addr & ~((1<<22)-1); - bound = ((addr + size) + ((1<<22) - 1)) & ~((1<<22) - 1); - nsize = 1; - while (nsize < (bound - base)) - nsize <<= 1; - switch (mode) { - case KD_MAPPED_MODE_REGISTERS: - type = MTRR_TYPE_UNCACHABLE; - break; - case KD_MAPPED_MODE_FRAMEBUFFER: - type = MTRR_TYPE_WRCOMB; - break; - } - sentry.base = base; - sentry.size = nsize; - sentry.type = type; - - if (ioctl (mtrr, MTRRIOC_DEL_ENTRY, &sentry) < 0) - ErrorF ("MTRRIOC_DEL_ENTRY failed 0x%x 0x%x %d (%s)\n", - base, bound - base, type, strerror(errno)); - } -#endif -} diff --git a/xorg-server/hw/kdrive/src/kmode.c b/xorg-server/hw/kdrive/src/kmode.c index d02cb55e1..38b7bc881 100644 --- a/xorg-server/hw/kdrive/src/kmode.c +++ b/xorg-server/hw/kdrive/src/kmode.c @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Keith Packard, SuSE, Inc. @@ -38,7 +38,7 @@ const KdMonitorTiming kdMonitorTimings[] = { 17, 12, 32, KdSyncNegative, 1, 11, 14, KdSyncNegative, }, - + /* Other VESA modes */ { 640, 350, 85, 31500, /* VESA */ 32, 96, 192, KdSyncPositive, /* 26.413 */ @@ -60,7 +60,7 @@ const KdMonitorTiming kdMonitorTimings[] = { 16, 80, 160, KdSyncPositive, /* 32.954 */ 1, 45, 49, KdSyncPositive, /* 52.727 */ }, - + /* 640x480 modes */ { 640, 480, 85, 36000, /* VESA */ 56, 80, 192, KdSyncNegative, /* 43.269 */ @@ -78,7 +78,7 @@ const KdMonitorTiming kdMonitorTimings[] = { 16, 48, 160, KdSyncNegative, /* 31.469 */ 10, 33, 45, KdSyncNegative, /* 59.940 */ }, - + /* 800x600 modes */ { 800, 600, 85, 56250, /* VESA */ 32, 152, 248, KdSyncPositive, /* 53.674 */ @@ -102,7 +102,7 @@ const KdMonitorTiming kdMonitorTimings[] = { 24, 128, 224, KdSyncPositive, /* 35.156 */ 1, 22, 25, KdSyncPositive, /* 56.250 */ }, - + /* 1024x768 modes */ { 1024, 768, 85, 94500, /* VESA */ 48, 208, 352, KdSyncPositive, /* 68.677 */ @@ -120,13 +120,13 @@ const KdMonitorTiming kdMonitorTimings[] = { 24, 160, 320, KdSyncNegative, /* 48.363 */ 3, 29, 38, KdSyncNegative, /* 60.004 */ }, - + /* 1152x864 mode */ { 1152, 864, 75, 108000, /* VESA */ 64, 256, 448, KdSyncPositive, /* 67.500 */ 1, 32, 36, KdSyncPositive, /* 75.000 */ }, - + /* 1152x900 modes */ { 1152, 900, 85, 122500, /* ADDED */ 48, 208, 384, KdSyncPositive, /* 79.753 */ @@ -315,19 +315,17 @@ KdTuneMode (KdScreenInfo *screen, const KdMonitorTiming *)) { const KdMonitorTiming *t; - + while (!(*usable) (screen)) { /* * Fix requested depth and geometry until it works */ - if (screen->fb[1].depth) - screen->fb[1].depth = 0; - else if (screen->fb[0].depth > 16) - screen->fb[0].depth = 16; - else if (screen->fb[0].depth > 8) - screen->fb[0].depth = 8; - else + if (screen->fb.depth > 16) + screen->fb.depth = 16; + else if (screen->fb.depth > 8) + screen->fb.depth = 8; + else { t = kdFindPrevSize (KdFindMode (screen, supported)); if (!t) @@ -344,14 +342,14 @@ KdTuneMode (KdScreenInfo *screen, Bool KdRandRGetInfo (ScreenPtr pScreen, int randr, - Bool (*supported) (ScreenPtr pScreen, + Bool (*supported) (ScreenPtr pScreen, const KdMonitorTiming *)) { KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; int i; const KdMonitorTiming *t; - + for (i = 0, t = kdMonitorTimings; i < NUM_MONITOR_TIMINGS; i++, t++) { if ((*supported) (pScreen, t)) @@ -373,20 +371,20 @@ KdRandRGetInfo (ScreenPtr pScreen, RRSetCurrentConfig (pScreen, randr, t->rate, pSize); } } - + return TRUE; } const KdMonitorTiming * KdRandRGetTiming (ScreenPtr pScreen, - Bool (*supported) (ScreenPtr pScreen, + Bool (*supported) (ScreenPtr pScreen, const KdMonitorTiming *), int rate, RRScreenSizePtr pSize) { int i; const KdMonitorTiming *t; - + for (i = 0, t = kdMonitorTimings; i < NUM_MONITOR_TIMINGS; i++, t++) { if (t->horizontal == pSize->width && diff --git a/xorg-server/hw/kdrive/src/kshadow.c b/xorg-server/hw/kdrive/src/kshadow.c index ea44812db..cf3391dba 100644 --- a/xorg-server/hw/kdrive/src/kshadow.c +++ b/xorg-server/hw/kdrive/src/kshadow.c @@ -26,36 +26,36 @@ #include "kdrive.h" Bool -KdShadowFbAlloc (KdScreenInfo *screen, int fb, Bool rotate) +KdShadowFbAlloc (KdScreenInfo *screen, 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; + int bpp = screen->fb.bitsPerPixel; /* use fb computation for width */ paddedWidth = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits); buf = xalloc (paddedWidth * height); if (!buf) return FALSE; - 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; + if (screen->fb.shadow) + xfree (screen->fb.frameBuffer); + screen->fb.shadow = TRUE; + screen->fb.frameBuffer = buf; + screen->fb.byteStride = paddedWidth; + screen->fb.pixelStride = paddedWidth * 8 / bpp; return TRUE; } void -KdShadowFbFree (KdScreenInfo *screen, int fb) +KdShadowFbFree (KdScreenInfo *screen) { - if (screen->fb[fb].shadow) + if (screen->fb.shadow) { - xfree (screen->fb[fb].frameBuffer); - screen->fb[fb].frameBuffer = 0; - screen->fb[fb].shadow = FALSE; + xfree (screen->fb.frameBuffer); + screen->fb.frameBuffer = 0; + screen->fb.shadow = FALSE; } } @@ -64,14 +64,12 @@ KdShadowSet (ScreenPtr pScreen, int randr, ShadowUpdateProc update, ShadowWindow { KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; - int fb; shadowRemove (pScreen, pScreen->GetScreenPixmap(pScreen)); - for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++) + if(screen->fb.shadow) { - if (screen->fb[fb].shadow) - return shadowAdd (pScreen, pScreen->GetScreenPixmap(pScreen), - update, window, randr, 0); + return shadowAdd (pScreen, pScreen->GetScreenPixmap(pScreen), + update, window, randr, 0); } return TRUE; } diff --git a/xorg-server/hw/kdrive/src/kxv.h b/xorg-server/hw/kdrive/src/kxv.h index 900baefde..21a295be3 100644 --- a/xorg-server/hw/kdrive/src/kxv.h +++ b/xorg-server/hw/kdrive/src/kxv.h @@ -1,6 +1,6 @@ -/* +/* - XFree86 Xv DDX written by Mark Vojkovich (markv@valinux.com) + XFree86 Xv DDX written by Mark Vojkovich (markv@valinux.com) Adapted for KDrive by Pontus Lidman <pontus.lidman@nokia.com> Copyright (C) 2000, 2001 - Nokia Home Communications @@ -60,21 +60,21 @@ typedef struct { int id; int type; int byte_order; - unsigned char guid[16]; + unsigned char guid[16]; int bits_per_pixel; int format; int num_planes; /* for RGB formats only */ int depth; - unsigned int red_mask; - unsigned int green_mask; - unsigned int blue_mask; + unsigned int red_mask; + unsigned int green_mask; + unsigned int blue_mask; /* for YUV formats only */ unsigned int y_sample_bits; unsigned int u_sample_bits; - unsigned int v_sample_bits; + unsigned int v_sample_bits; unsigned int horz_y_period; unsigned int horz_u_period; unsigned int horz_v_period; @@ -83,7 +83,7 @@ typedef struct { unsigned int vert_v_period; char component_order[32]; int scanline_order; -} KdImageRec, *KdImagePtr; +} KdImageRec, *KdImagePtr; typedef struct { @@ -92,7 +92,7 @@ typedef struct { unsigned short width, height; int *pitches; /* bytes */ int *offsets; /* in bytes from start of framebuffer */ - DevUnion devPrivate; + DevUnion devPrivate; } KdSurfaceRec, *KdSurfacePtr; @@ -118,7 +118,7 @@ typedef int (* SetPortAttributeFuncPtr)(KdScreenInfo * screen, Atom attribute, typedef int (* GetPortAttributeFuncPtr)(KdScreenInfo * screen, Atom attribute, int *value, pointer data); typedef void (* QueryBestSizeFuncPtr)(KdScreenInfo * screen, Bool motion, - short vid_w, short vid_h, short drw_w, short drw_h, + short vid_w, short vid_h, short drw_w, short drw_h, unsigned int *p_w, unsigned int *p_h, pointer data); typedef int (* PutImageFuncPtr)( KdScreenInfo * screen, DrawablePtr pDraw, short src_x, short src_y, short drw_x, short drw_y, @@ -128,8 +128,8 @@ typedef int (* PutImageFuncPtr)( KdScreenInfo * screen, DrawablePtr pDraw, typedef int (* ReputImageFuncPtr)( KdScreenInfo * screen, DrawablePtr pDraw, short drw_x, short drw_y, RegionPtr clipBoxes, pointer data ); -typedef int (*QueryImageAttributesFuncPtr)(KdScreenInfo * screen, - int image, unsigned short *width, unsigned short *height, +typedef int (*QueryImageAttributesFuncPtr)(KdScreenInfo * screen, + int image, unsigned short *width, unsigned short *height, int *pitches, int *offsets); typedef enum { @@ -148,7 +148,7 @@ typedef struct { } KdVideoEncodingRec, *KdVideoEncodingPtr; typedef struct { - char depth; + char depth; short class; } KdVideoFormatRec, *KdVideoFormatPtr; @@ -160,13 +160,13 @@ typedef struct { } KdAttributeRec, *KdAttributePtr; typedef struct { - unsigned int type; + unsigned int type; int flags; char *name; int nEncodings; - KdVideoEncodingPtr pEncodings; + KdVideoEncodingPtr pEncodings; int nFormats; - KdVideoFormatPtr pFormats; + KdVideoFormatPtr pFormats; int nPorts; DevUnion *pPortPrivates; int nAttributes; @@ -188,7 +188,7 @@ typedef struct { Bool KdXVScreenInit( - ScreenPtr pScreen, + ScreenPtr pScreen, KdVideoAdaptorPtr *Adaptors, int num ); @@ -239,7 +239,7 @@ typedef struct { } KdXVScreenRec, *KdXVScreenPtr; typedef struct { - int flags; + int flags; PutVideoFuncPtr PutVideo; PutStillFuncPtr PutStill; GetVideoFuncPtr GetVideo; @@ -276,4 +276,4 @@ typedef struct _KdXVWindowRec{ } KdXVWindowRec, *KdXVWindowPtr; #endif /* _XVDIX_H_ */ - + |