configure.ac | 2 src/nouveau_dri2.c | 5 - src/nv_driver.c | 198 ++++++++++++++++++++++++++++++++--------------------- src/nv_type.h | 2 4 files changed, 126 insertions(+), 81 deletions(-)
New commits: commit 018ab2d4634f3c8923038337ce9600973e2f0002 Author: Ben Skeggs <bske...@redhat.com> Date: Fri Nov 9 12:16:00 2012 +1000 bump version to 1.0.4 Signed-off-by: Ben Skeggs <bske...@redhat.com> diff --git a/configure.ac b/configure.ac index e2fdb20..ff9c337 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ([2.60]) AC_INIT([xf86-video-nouveau], - [1.0.3], + [1.0.4], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-video-nouveau]) commit 0d32d964dbba3864af0946aa8894cef858eb1319 Author: Dave Airlie <airl...@redhat.com> Date: Wed Nov 7 14:49:03 2012 +1000 nouveau: drop unused nv private members. these are no longer needed. Signed-off-by: Dave Airlie <airl...@redhat.com> diff --git a/src/nv_type.h b/src/nv_type.h index d882e7c..ed21c6d 100644 --- a/src/nv_type.h +++ b/src/nv_type.h @@ -69,9 +69,7 @@ typedef struct _NVRec { CARD32 currentRop; - DRIInfoPtr pDRIInfo; drmVersionPtr pLibDRMVersion; - drmVersionPtr pKernelDRMVersion; void *drmmode; /* for KMS */ commit b1a630b48210d6a3c44994fce1b73273000ace5c Author: Dave Airlie <airl...@redhat.com> Date: Wed Nov 7 14:45:14 2012 +1000 nouveau: drop DRI1 device open interface. this is a DRI1 left over, the driver is meant to open the device itself now. this old interface did crazy stuff like drmAddMap. Reviewed-by: Ben Skeggs <bske...@redhat.com> Signed-off-by: Dave Airlie <airl...@redhat.com> diff --git a/src/nv_driver.c b/src/nv_driver.c index ea4a018..de09f53 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -680,39 +680,69 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn) #endif } +static Bool NVOpenDRMMaster(ScrnInfoPtr pScrn) +{ + NVPtr pNv = NVPTR(pScrn); + struct pci_device *dev = pNv->PciInfo; + char *busid; + drmSetVersion sv; + int err; + int ret; + +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0) + XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d", + dev->domain, dev->bus, dev->dev, dev->func); +#else + busid = XNFprintf("pci:%04x:%02x:%02x.%d", + dev->domain, dev->bus, dev->dev, dev->func); +#endif + + ret = nouveau_device_open(busid, &pNv->dev); + if (ret) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] Failed to open DRM device for %s: %d\n", + busid, ret); + free(busid); + return FALSE; + } + free(busid); + + sv.drm_di_major = 1; + sv.drm_di_minor = 1; + sv.drm_dd_major = -1; + sv.drm_dd_minor = -1; + err = drmSetInterfaceVersion(pNv->dev->fd, &sv); + if (err != 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] failed to set drm interface version.\n"); + nouveau_device_del(&pNv->dev); + return FALSE; + } + return TRUE; +} + static Bool NVPreInitDRM(ScrnInfoPtr pScrn) { NVPtr pNv = NVPTR(pScrn); - char *bus_id; int ret; if (!NVDRIGetVersion(pScrn)) return FALSE; /* Load the kernel module, and open the DRM */ - bus_id = DRICreatePCIBusID(pNv->PciInfo); - ret = DRIOpenDRMMaster(pScrn, SAREA_MAX, bus_id, "nouveau"); - free(bus_id); + ret = NVOpenDRMMaster(pScrn); if (!ret) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[drm] error opening the drm\n"); return FALSE; } - /* Initialise libdrm_nouveau */ - ret = nouveau_device_wrap(DRIMasterFD(pScrn), 1, &pNv->dev); - if (ret) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] error creating device\n"); - return FALSE; - } - ret = nouveau_client_new(pNv->dev, &pNv->client); if (ret) return FALSE; - pNv->drm_device_name = drmGetDeviceNameFromFd(DRIMasterFD(pScrn)); + pNv->drm_device_name = drmGetDeviceNameFromFd(pNv->dev->fd); return TRUE; } commit 27a1a0616304e9b9f0ae842899b7d614f1026578 Author: Emil Velikov <emil.l.veli...@gmail.com> Date: Fri Nov 2 03:57:42 2012 +0000 nouveau: NVPlatformProbe, handle shareable entities During NVPciProbe, xf86ConfigPciEntity() implicitly calls checks and sets the entity as shared Here we are only allocating the screen, thus need to explicitly call the functions ZaphodHead and Xinerama should finally work Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56347 Reported-By: Vladimir Chebotarev <e...@rbcmail.ru> Reported-By: Damian Nowak <nowa...@geozone.pl> Tested-By: Damian Nowak <nowa...@geozone.pl> Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Signed-off-by: Ben Skeggs <bske...@redhat.com> diff --git a/src/nv_driver.c b/src/nv_driver.c index f184cd4..ea4a018 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -353,6 +353,11 @@ NVPlatformProbe(DriverPtr driver, scr_flags = XF86_ALLOCATE_GPU_SCREEN; scrn = xf86AllocateScreen(driver, scr_flags); + if (!scrn) + return FALSE; + + if (xf86IsEntitySharable(entity_num)) + xf86SetEntityShared(entity_num); xf86AddEntityToScreen(scrn, entity_num); NVInitScrn(scrn, entity_num); commit e34cfbd5bd23f7f15372af52d8a39a5715ce7310 Author: Emil Velikov <emil.l.veli...@gmail.com> Date: Fri Nov 2 03:57:41 2012 +0000 nouveau: Factor out common code to NVHasKMS() As the name suggests checks if it has kernel mode setting, prints out the interface version and checkes if the chipset is supported Function is used in NVPciProbe and NVPlatformProbe Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Signed-off-by: Ben Skeggs <bske...@redhat.com> diff --git a/src/nv_driver.c b/src/nv_driver.c index dc4f3b2..f184cd4 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -247,19 +247,12 @@ NVInitScrn(ScrnInfoPtr pScrn, int entity_num) } static Bool -NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, - intptr_t match_data) +NVHasKMS(struct pci_device *pci_dev) { - PciChipsets NVChipsets[] = { - { pci_dev->device_id, - (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL }, - { -1, -1, NULL } - }; struct nouveau_device *dev = NULL; - ScrnInfoPtr pScrn = NULL; drmVersion *version; - int chipset, ret; char *busid; + int chipset, ret; if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) { xf86DrvMsg(-1, X_ERROR, "[drm] No DRICreatePCIBusID symbol\n"); @@ -267,10 +260,17 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, } busid = DRICreatePCIBusID(pci_dev); + ret = drmCheckModesettingSupported(busid); + if (ret) { + xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n"); + free(busid); + return FALSE; + } + ret = nouveau_device_open(busid, &dev); + free(busid); if (ret) { xf86DrvMsg(-1, X_ERROR, "[drm] failed to open device\n"); - free(busid); return FALSE; } @@ -288,12 +288,6 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, chipset = dev->chipset; nouveau_device_del(&dev); - ret = drmCheckModesettingSupported(busid); - free(busid); - if (ret) { - xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n"); - return FALSE; - } switch (chipset & 0xf0) { case 0x00: @@ -314,6 +308,22 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, xf86DrvMsg(-1, X_ERROR, "Unknown chipset: NV%02x\n", chipset); return FALSE; } + return TRUE; +} + +static Bool +NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, + intptr_t match_data) +{ + PciChipsets NVChipsets[] = { + { pci_dev->device_id, + (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL }, + { -1, -1, NULL } + }; + ScrnInfoPtr pScrn = NULL; + + if (!NVHasKMS(pci_dev)) + return FALSE; pScrn = xf86ConfigPciEntity(pScrn, 0, entity_num, NVChipsets, NULL, NULL, NULL, NULL, NULL); @@ -336,6 +346,9 @@ NVPlatformProbe(DriverPtr driver, if (!dev->pdev) return FALSE; + if (!NVHasKMS(dev->pdev)) + return FALSE; + if (flags & PLATFORM_PROBE_GPU_SCREEN) scr_flags = XF86_ALLOCATE_GPU_SCREEN; commit 78f24dc3798d635fca2e20856a09012c28bbbb8b Author: Emil Velikov <emil.l.veli...@gmail.com> Date: Fri Nov 2 03:57:40 2012 +0000 nouveau: introduce NVInitScrn() Common/helper function for NV{Pci,Platform}Probe() This introduces some the following functions to the NVPlatformProbe codepath * xf86SetEntitySharable() * xf86SetEntityInstanceForScreen() Necessary for dualhead, xinerama and/or zaphodhead v2: Rename nouveau_init_scrn() to NVInitScrn() Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Signed-off-by: Ben Skeggs <bske...@redhat.com> diff --git a/src/nv_driver.c b/src/nv_driver.c index c885e73..dc4f3b2 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -74,36 +74,10 @@ static Bool NVPciProbe ( DriverPtr drv, intptr_t match_data ); #ifdef XSERVER_PLATFORM_BUS -static Bool -NVPlatformProbe(DriverPtr driver, - int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data) -{ - ScrnInfoPtr scrn = NULL; - uint32_t scr_flags = 0; - - if (!dev->pdev) - return FALSE; - - if (flags & PLATFORM_PROBE_GPU_SCREEN) - scr_flags = XF86_ALLOCATE_GPU_SCREEN; - - scrn = xf86AllocateScreen(driver, scr_flags); - xf86AddEntityToScreen(scrn, entity_num); - - scrn->driverVersion = NV_VERSION; - scrn->driverName = NV_DRIVER_NAME; - scrn->name = NV_NAME; - - scrn->Probe = NULL; - scrn->PreInit = NVPreInit; - scrn->ScreenInit = NVScreenInit; - scrn->SwitchMode = NVSwitchMode; - scrn->AdjustFrame = NVAdjustFrame; - scrn->EnterVT = NVEnterVT; - scrn->LeaveVT = NVLeaveVT; - scrn->FreeScreen = NVFreeScreen; - return scrn != NULL; -} +static Bool NVPlatformProbe(DriverPtr driver, + int entity_num, int flags, + struct xf86_platform_device *dev, + intptr_t dev_match_data); #endif /* @@ -251,6 +225,27 @@ NVDriverFunc(ScrnInfoPtr scrn, xorgDriverFuncOp op, void *data) } } +static void +NVInitScrn(ScrnInfoPtr pScrn, int entity_num) +{ + pScrn->driverVersion = NV_VERSION; + pScrn->driverName = NV_DRIVER_NAME; + pScrn->name = NV_NAME; + + pScrn->Probe = NULL; + pScrn->PreInit = NVPreInit; + pScrn->ScreenInit = NVScreenInit; + pScrn->SwitchMode = NVSwitchMode; + pScrn->AdjustFrame = NVAdjustFrame; + pScrn->EnterVT = NVEnterVT; + pScrn->LeaveVT = NVLeaveVT; + pScrn->FreeScreen = NVFreeScreen; + + xf86SetEntitySharable(entity_num); + xf86SetEntityInstanceForScreen(pScrn, entity_num, + xf86GetNumEntityInstances(entity_num) - 1); +} + static Bool NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, intptr_t match_data) @@ -325,25 +320,33 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, if (!pScrn) return FALSE; - pScrn->driverVersion = NV_VERSION; - pScrn->driverName = NV_DRIVER_NAME; - pScrn->name = NV_NAME; + NVInitScrn(pScrn, entity_num); - pScrn->Probe = NULL; - pScrn->PreInit = NVPreInit; - pScrn->ScreenInit = NVScreenInit; - pScrn->SwitchMode = NVSwitchMode; - pScrn->AdjustFrame = NVAdjustFrame; - pScrn->EnterVT = NVEnterVT; - pScrn->LeaveVT = NVLeaveVT; - pScrn->FreeScreen = NVFreeScreen; + return TRUE; +} - xf86SetEntitySharable(entity_num); - xf86SetEntityInstanceForScreen(pScrn, entity_num, - xf86GetNumEntityInstances(entity_num) - 1); +#ifdef XSERVER_PLATFORM_BUS +static Bool +NVPlatformProbe(DriverPtr driver, + int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data) +{ + ScrnInfoPtr scrn = NULL; + uint32_t scr_flags = 0; + + if (!dev->pdev) + return FALSE; + + if (flags & PLATFORM_PROBE_GPU_SCREEN) + scr_flags = XF86_ALLOCATE_GPU_SCREEN; + + scrn = xf86AllocateScreen(driver, scr_flags); + xf86AddEntityToScreen(scrn, entity_num); + + NVInitScrn(scrn, entity_num); return TRUE; } +#endif #define MAX_CHIPS MAXSCREENS commit 47457fbd5006070ea9a06238a5a69ca8167dac77 Author: Emil Velikov <emil.l.veli...@gmail.com> Date: Fri Nov 2 03:57:39 2012 +0000 nouveau: Remove unneeded xf86GetEntityInfo() Retrieving the whole entity information is not needed as we only use the index - stored already in entity_num Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> Signed-off-by: Ben Skeggs <bske...@redhat.com> diff --git a/src/nv_driver.c b/src/nv_driver.c index 9b5b9d6..c885e73 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -261,7 +261,6 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, { -1, -1, NULL } }; struct nouveau_device *dev = NULL; - EntityInfoPtr pEnt = NULL; ScrnInfoPtr pScrn = NULL; drmVersion *version; int chipset, ret; @@ -340,10 +339,8 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, pScrn->FreeScreen = NVFreeScreen; xf86SetEntitySharable(entity_num); - - pEnt = xf86GetEntityInfo(entity_num); - xf86SetEntityInstanceForScreen(pScrn, pEnt->index, xf86GetNumEntityInstances(pEnt->index) - 1); - free(pEnt); + xf86SetEntityInstanceForScreen(pScrn, entity_num, + xf86GetNumEntityInstances(entity_num) - 1); return TRUE; } commit 20995bb5920021668b8b607f886201c643ee0e9a Author: Dave Airlie <airl...@redhat.com> Date: Fri Nov 2 09:04:43 2012 +1000 nouveau: fix regression in virtualbox drawing hopefully. Signed-off-by: Dave Airlie <airl...@redhat.com> diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c index 8d21dca..036bcff 100644 --- a/src/nouveau_dri2.c +++ b/src/nouveau_dri2.c @@ -159,11 +159,10 @@ nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegio else #endif dst_draw = pDraw; + if (dst_draw != pDraw) + translate = TRUE; } - if (dst_draw != pDraw) - translate = TRUE; - if (translate && pDraw->type == DRAWABLE_WINDOW) { PixmapPtr pPix = get_drawable_pixmap(pDraw); off_x = pDraw->x - pPix->screen_x; -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1tyweu-0003yf...@vasks.debian.org