From 468787bdd2c34f9edf46da76b6357034c216fa7b Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Fri, 14 Aug 2009 11:44:35 +0100 Subject: [PATCH 1/8] Don't reset the lastDeviceEventTime when doing DPMS actions When we change the DPMS mode, don't play games with the last event time as this breaks applications using IDLETIME to turn the backlight off after a preset time. This patch fixes gnome-power-manager and xfce-power-manager Signed-off-by: Peter Hutterer (cherry picked from commit c1d901d723c3bee523736eacc15b44a7dff484fe) Signed-off-by: Keith Packard --- Xext/dpms.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/Xext/dpms.c b/Xext/dpms.c index bad7aa64f..d3e0dde8b 100644 --- a/Xext/dpms.c +++ b/Xext/dpms.c @@ -219,19 +219,10 @@ ProcDPMSForceLevel(client) if (!DPMSEnabled) return BadMatch; - if (stuff->level == DPMSModeOn) { - lastDeviceEventTime.milliseconds = - GetTimeInMillis(); - } else if (stuff->level == DPMSModeStandby) { - lastDeviceEventTime.milliseconds = - GetTimeInMillis() - DPMSStandbyTime; - } else if (stuff->level == DPMSModeSuspend) { - lastDeviceEventTime.milliseconds = - GetTimeInMillis() - DPMSSuspendTime; - } else if (stuff->level == DPMSModeOff) { - lastDeviceEventTime.milliseconds = - GetTimeInMillis() - DPMSOffTime; - } else { + if (stuff->level != DPMSModeOn && + stuff->level != DPMSModeStandby && + stuff->level != DPMSModeSuspend && + stuff->level != DPMSModeOff) { client->errorValue = stuff->level; return BadValue; } From f5d1da499c3d64f0a4ac217eb19911b8e35cb49b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 23 Jun 2009 16:45:39 +0200 Subject: [PATCH 2/8] dri2: Don't crash if pPriv is NULL. (cherry picked from commit df597709d71f47b8516e27c6fb1bfffd59de5e48) Signed-off-by: Keith Packard --- hw/xfree86/dri2/dri2.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 580383dbc..3e8a7d4a8 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -190,10 +190,18 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, int need_fake_front = 0; int have_fake_front = 0; int front_format = 0; - const int dimensions_match = (pDraw->width == pPriv->width) - && (pDraw->height == pPriv->height); + int dimensions_match; int i; + if (!pPriv) { + *width = pDraw->width; + *height = pDraw->height; + *out_count = 0; + return NULL; + } + + dimensions_match = (pDraw->width == pPriv->width) + && (pDraw->height == pPriv->height); buffers = xalloc((count + 1) * sizeof(buffers[0])); From d78669c92d751464bc3c8f79f2aa21ca0951e3a9 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 22 Sep 2009 12:09:48 -0700 Subject: [PATCH 3/8] render: return the supported version rather than just passing the proto's version Signed-off-by: Keith Packard --- render/render.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/render/render.c b/render/render.c index e3d76d2c1..d1020d5d1 100644 --- a/render/render.c +++ b/render/render.c @@ -54,6 +54,9 @@ #define UINT32_MAX 0xffffffffU #endif +#define SERVER_RENDER_MAJOR 0 +#define SERVER_RENDER_MINOR 10 + static int ProcRenderQueryVersion (ClientPtr pClient); static int ProcRenderQueryPictFormats (ClientPtr pClient); static int ProcRenderQueryPictIndexValues (ClientPtr pClient); @@ -271,8 +274,8 @@ ProcRenderQueryVersion (ClientPtr client) rep.type = X_Reply; rep.length = 0; rep.sequenceNumber = client->sequence; - rep.majorVersion = RENDER_MAJOR; - rep.minorVersion = RENDER_MINOR; + rep.majorVersion = SERVER_RENDER_MAJOR; + rep.minorVersion = SERVER_RENDER_MINOR; if (client->swapped) { swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); From 9bc4a69040493e589a3811ca5e085e323438996d Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 9 Sep 2009 15:48:33 +1000 Subject: [PATCH 4/8] fbdevhw: Test for graphics:fb%d as well as graphics/fb%d MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apparently the kernel can't decide on an API to expose to userspace, so let's just try both in the hope that one will work. Signed-off-by: Daniel Stone Acked-by: Michel Dänzer (cherry picked from commit f4350c66b493d63fa06be87caa958d7033232ea4) --- hw/xfree86/fbdevhw/fbdevhw.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c index 5269277ef..d6e78b9ff 100644 --- a/hw/xfree86/fbdevhw/fbdevhw.c +++ b/hw/xfree86/fbdevhw/fbdevhw.c @@ -318,7 +318,13 @@ fbdev_open_pci(struct pci_device * pPci, char **namep) pPci->domain, pPci->bus, pPci->dev, pPci->func, i); fd = open(filename, O_RDONLY, 0); - if (fd != -1) { + if (fd < 0) { + sprintf(filename, + "/sys/bus/pci/devices/%04x:%02x:%02x.%d/graphics:fb%d", + pPci->domain, pPci->bus, pPci->dev, pPci->func, i); + fd = open(filename, O_RDONLY, 0); + } + if (fd >= 0) { close(fd); sprintf(filename, "/dev/fb%d", i); From c3d182a47902d02f9e64f933b8565ae336f73f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Cardona?= Date: Mon, 14 Sep 2009 17:09:59 +0200 Subject: [PATCH 5/8] dix: append "built-ins" to the font path in SetDefaultFontPath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 49b93df8a3002db7196aa3fc1fd8dca1c12a55d6 made the hard dependency on a "fixed" font go away but only Xorg could use the built-ins fonts by default. With this commit, all DDXs get "built-ins" appended to their FontPath, not just Xorg. Tested with Xorg, Xvfb and Xnest. (cherry picked from commit f56cbe1ef24415d0142b9a7d0ab0a031069ccb52) Signed-off-by: Rémi Cardona Signed-off-by: Jon TURNEY Tested-by: Jon TURNEY Signed-off-by: Peter Hutterer Signed-off-by: Keith Packard --- dix/dixfonts.c | 29 ++++++++++++++++++++++++++--- hw/xfree86/common/xf86Config.c | 16 ---------------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 719bca469..174372e93 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -1815,6 +1815,9 @@ SetFontPath(ClientPtr client, int npaths, unsigned char *paths, int *error) int SetDefaultFontPath(char *path) { + char *temp_path, + *start, + *end; unsigned char *cp, *pp, *nump, @@ -1825,12 +1828,31 @@ SetDefaultFontPath(char *path) size = 0, bad; + /* ensure temp_path contains "built-ins" */ + start = path; + while (1) { + start = strstr(start, "built-ins"); + if (start == NULL) + break; + end = start + strlen("built-ins"); + if ((start == path || start[-1] == ',') && (!*end || *end == ',')) + break; + start = end; + } + if (!start) { + temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : ""); + } else { + temp_path = Xstrdup(path); + } + if (!temp_path) + return BadAlloc; + /* get enough for string, plus values -- use up commas */ - len = strlen(path) + 1; - nump = cp = newpath = (unsigned char *) xalloc(len); + len = strlen(temp_path) + 1; + nump = cp = newpath = xalloc(len); if (!newpath) return BadAlloc; - pp = (unsigned char *) path; + pp = (unsigned char *) temp_path; cp++; while (*pp) { if (*pp == ',') { @@ -1849,6 +1871,7 @@ SetDefaultFontPath(char *path) err = SetFontPathElements(num, newpath, &bad, TRUE); xfree(newpath); + xfree(temp_path); return err; } diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 93761193e..ddf474522 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -612,22 +612,6 @@ configFiles(XF86ConfFilesPtr fileconf) pathFrom = X_DEFAULT; temp_path = defaultFontPath ? defaultFontPath : ""; - /* ensure defaultFontPath contains "built-ins" */ - start = strstr(temp_path, "built-ins"); - end = start + strlen("built-ins"); - if (start == NULL || - !((start == temp_path || start[-1] == ',') && (!*end || *end == ','))) { - defaultFontPath = Xprintf("%s%sbuilt-ins", - temp_path, *temp_path ? "," : ""); - if (must_copy == TRUE) { - if (defaultFontPath != NULL) { - must_copy = FALSE; - } - } else { - /* already made a copy of the font path */ - xfree(temp_path); - } - } /* xf86ValidateFontPath modifies its argument, but returns a copy of it. */ temp_path = must_copy ? XNFstrdup(defaultFontPath) : defaultFontPath; defaultFontPath = xf86ValidateFontPath(temp_path); From 507e57381fea6334f7dc8da6925e53d2c76fddcb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 18 Sep 2009 21:12:17 -0700 Subject: [PATCH 6/8] xfree86/modes: Remove all framebuffer support from DGA This removes all rendering and mapping code from xf86DiDGA, leaving just mode setting and raw input device access. The mapping code didn't have the offset within /dev/mem for the frame buffer and the pixmap support assumed that the framebuffer was never reallocated. (cherry picked from 0b7c6c728c2e2d8433a188315cc591308a89cd85) Signed-off-by: Keith Packard Signed-off-by: Peter Hutterer --- hw/xfree86/modes/xf86Crtc.c | 7 ++ hw/xfree86/modes/xf86DiDGA.c | 119 ++++++--------------------------- hw/xfree86/modes/xf86RandR12.c | 4 +- 3 files changed, 29 insertions(+), 101 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index e9bde36e3..899cea5b8 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -769,6 +769,9 @@ xf86CrtcScreenInit (ScreenPtr screen) config->CloseScreen = screen->CloseScreen; screen->CloseScreen = xf86CrtcCloseScreen; +#ifdef XFreeXDGA + xf86DiDGAInit(screen, 0); +#endif #ifdef RANDR_13_INTERFACE return RANDR_INTERFACE_VERSION; #else @@ -1882,6 +1885,10 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn) } } scrn->currentMode = scrn->modes; +#ifdef XFreeXDGA + if (scrn->pScreen) + xf86DiDGAReInit(scrn->pScreen); +#endif } static void diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c index f40d0abef..3992c09c9 100644 --- a/hw/xfree86/modes/xf86DiDGA.c +++ b/hw/xfree86/modes/xf86DiDGA.c @@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen) mode = modes + num++; mode->mode = display_mode; - mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE; - mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT; + mode->flags = DGA_CONCURRENT_ACCESS; if (display_mode->Flags & V_DBLSCAN) mode->flags |= DGA_DOUBLESCAN; if (display_mode->Flags & V_INTERLACE) @@ -91,14 +90,14 @@ xf86_dga_get_modes (ScreenPtr pScreen) mode->yViewportStep = 1; mode->viewportFlags = DGA_FLIP_RETRACE; mode->offset = 0; - mode->address = (unsigned char *) xf86_config->dga_address; - mode->bytesPerScanline = xf86_config->dga_stride; - mode->imageWidth = xf86_config->dga_width; - mode->imageHeight = xf86_config->dga_height; + mode->address = 0; + mode->imageWidth = mode->viewportWidth; + mode->imageHeight = mode->viewportHeight; + mode->bytesPerScanline = (mode->imageWidth * scrn->bitsPerPixel) >> 3; mode->pixmapWidth = mode->imageWidth; mode->pixmapHeight = mode->imageHeight; - mode->maxViewportX = mode->imageWidth - mode->viewportWidth; - mode->maxViewportY = mode->imageHeight - mode->viewportHeight; + mode->maxViewportX = 0; + mode->maxViewportY = 0; display_mode = display_mode->next; if (display_mode == scrn->modes) @@ -148,94 +147,12 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, int flags) scrn->AdjustFrame(scrn->pScreen->myNum, x, y, flags); } -static Bool -xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, GCPtr *ppGC) -{ - ScreenPtr pScreen = scrn->pScreen; - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - PixmapPtr pPixmap; - GCPtr pGC; - - pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, xf86_config->dga_height, - scrn->depth, scrn->bitsPerPixel, xf86_config->dga_stride, - (char *) scrn->memPhysBase + scrn->fbOffset); - if (!pPixmap) - return FALSE; - pGC = GetScratchGC (scrn->depth, pScreen); - if (!pGC) - { - FreeScratchPixmapHeader (pPixmap); - return FALSE; - } - *ppDrawable = &pPixmap->drawable; - *ppGC = pGC; - return TRUE; -} - -static void -xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, GCPtr pGC) -{ - FreeScratchGC (pGC); - FreeScratchPixmapHeader ((PixmapPtr) pDrawable); -} - -static void -xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned long color) -{ - GCPtr pGC; - DrawablePtr pDrawable; - XID vals[1]; - xRectangle r; - - if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC)) - return; - vals[0] = color; - ChangeGC (pGC, GCForeground, vals); - ValidateGC (pDrawable, pGC); - r.x = x; - r.y = y; - r.width = w; - r.height = h; - pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r); - xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC); -} - -static void -xf86_dga_sync(ScrnInfoPtr scrn) -{ - ScreenPtr pScreen = scrn->pScreen; - WindowPtr pRoot = WindowTable [pScreen->myNum]; - char buffer[4]; - - pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer); -} - -static void -xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int dstx, int dsty) -{ - DrawablePtr pDrawable; - GCPtr pGC; - - if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC)) - return; - ValidateGC (pDrawable, pGC); - pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, dsty); - xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC); -} - static Bool xf86_dga_open_framebuffer(ScrnInfoPtr scrn, char **name, unsigned char **mem, int *size, int *offset, int *flags) { - xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); - - *size = xf86_config->dga_stride * xf86_config->dga_height; - *mem = (unsigned char *) (xf86_config->dga_address); - *offset = 0; - *flags = DGA_NEED_ROOT; - - return TRUE; + return FALSE; } static void @@ -249,9 +166,9 @@ static DGAFunctionRec xf86_dga_funcs = { xf86_dga_set_mode, xf86_dga_set_viewport, xf86_dga_get_viewport, - xf86_dga_sync, - xf86_dga_fill_rect, - xf86_dga_blit_rect, + NULL, + NULL, + NULL, NULL }; @@ -261,6 +178,9 @@ xf86DiDGAReInit (ScreenPtr pScreen) ScrnInfoPtr scrn = xf86Screens[pScreen->myNum]; xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + if (!DGAAvailable(pScreen->myNum)) + return TRUE; + if (!xf86_dga_get_modes (pScreen)) return FALSE; @@ -273,11 +193,14 @@ xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address) ScrnInfoPtr scrn = xf86Screens[pScreen->myNum]; xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + if (DGAAvailable(pScreen->myNum)) + return TRUE; + xf86_config->dga_flags = 0; - xf86_config->dga_address = dga_address; - xf86_config->dga_width = scrn->virtualX; - xf86_config->dga_height = scrn->virtualY; - xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3; + xf86_config->dga_address = 0; + xf86_config->dga_width = 0; + xf86_config->dga_height = 0; + xf86_config->dga_stride = 0; if (!xf86_dga_get_modes (pScreen)) return FALSE; diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index 454649213..0637ed5b1 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1,5 +1,5 @@ /* - * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc. + * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -460,7 +460,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations) { xf86ProbeOutputModes (scrp, 0, 0); xf86SetScrnInfoModes (scrp); - xf86DiDGAReInit (pScreen); } for (mode = scrp->modes; ; mode = mode->next) @@ -1481,7 +1480,6 @@ xf86RandR12GetInfo12 (ScreenPtr pScreen, Rotation *rotations) return TRUE; xf86ProbeOutputModes (pScrn, 0, 0); xf86SetScrnInfoModes (pScrn); - xf86DiDGAReInit (pScreen); return xf86RandR12SetInfo12 (pScreen); } From a26fd1a6d61507b3e69a04d6f6c192a6ec363c5c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 16 Sep 2009 15:46:55 +1000 Subject: [PATCH 7/8] Don't send events through the master if the device has SendCoreEvents off. In server 1.6, all devices are attached to the master device (VCP or VCK). Sending an event through the master device means the device is sending core events. If a device is configured as SendCoreEvents, just send through the device, not through the master. Signed-off-by: Peter Hutterer --- dix/getevents.c | 4 ++-- mi/mieq.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index 9747b35a6..eadcbeb48 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -536,7 +536,7 @@ static EventListPtr updateFromMaster(EventListPtr events, DeviceIntPtr dev, int *num_events) { DeviceIntPtr master = dev->u.master; - if (master && master->u.lastSlave != dev) + if (master && master->u.lastSlave != dev && dev->coreEvents) { updateSlaveDeviceCoords(master, dev); master->u.lastSlave = dev; @@ -674,7 +674,7 @@ positionSprite(DeviceIntPtr dev, int *x, int *y, * to the current screen. */ miPointerSetPosition(dev, &dev->last.valuators[0], &dev->last.valuators[1]); - if (dev->u.master) { + if (dev->u.master && dev->coreEvents) { dev->u.master->last.valuators[0] = dev->last.valuators[0]; dev->u.master->last.valuators[1] = dev->last.valuators[1]; } diff --git a/mi/mieq.c b/mi/mieq.c index 213ad5b40..478e68b7e 100644 --- a/mi/mieq.c +++ b/mi/mieq.c @@ -446,7 +446,7 @@ mieqProcessInputEvents(void) NewCurrentScreen (dev, DequeueScreen(dev), x, y); } else { - if (master) { + if (master && dev->coreEvents) { /* Force a copy of the key class into the VCK so that the layout is transferred. */ if (event->u.u.type == DeviceKeyPress || @@ -473,7 +473,7 @@ mieqProcessInputEvents(void) /* process slave first, then master */ dev->public.processInputProc(event, dev, nevents); - if (master) + if (master && dev->coreEvents) master->public.processInputProc(masterEvents->event, master, nevents); } From 8cf659f3a5914369a2137ac17b689e5a9fe9ca27 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 27 Sep 2009 19:21:45 -0700 Subject: [PATCH 8/8] Bump to version 1.6.4 Signed-off-by: Keith Packard --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 9bb566c99..3c19b35ba 100644 --- a/configure.ac +++ b/configure.ac @@ -26,12 +26,12 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([xorg-server], 1.6.3.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +AC_INIT([xorg-server], 1.6.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AM_MAINTAINER_MODE -RELEASE_DATE="2009-8-25" +RELEASE_DATE="2009-9-27" dnl this gets generated by autoheader, and thus contains all the defines. we dnl don't ever actually use it, internally.