From 31ab259720d9a776da2e6244ac559ba25c3f9d37 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 5 Feb 2009 14:06:34 +0000 Subject: xf86-video-psb: Update to work with modern xservers --- .../xorg-driver/files/104_disable_locks.diff | 49 +- meta-moblin/packages/xorg-driver/files/pci.patch | 627 +++++++++++++++++++++ .../packages/xorg-driver/xf86-video-psb_git.bb | 9 +- 3 files changed, 677 insertions(+), 8 deletions(-) create mode 100644 meta-moblin/packages/xorg-driver/files/pci.patch (limited to 'meta-moblin') diff --git a/meta-moblin/packages/xorg-driver/files/104_disable_locks.diff b/meta-moblin/packages/xorg-driver/files/104_disable_locks.diff index 1f0a5ba9c2..4b25517d58 100644 --- a/meta-moblin/packages/xorg-driver/files/104_disable_locks.diff +++ b/meta-moblin/packages/xorg-driver/files/104_disable_locks.diff @@ -1,8 +1,36 @@ Index: git/src/psb_driver.c =================================================================== ---- git.orig/src/psb_driver.c 2008-12-12 15:14:28.000000000 +0000 -+++ git/src/psb_driver.c 2008-12-30 14:18:16.000000000 +0000 -@@ -1326,7 +1326,7 @@ +--- git.orig/src/psb_driver.c 2009-02-05 13:28:59.000000000 +0000 ++++ git/src/psb_driver.c 2009-02-05 13:28:59.000000000 +0000 +@@ -325,7 +325,7 @@ + + if (!Initialised) { + Initialised = TRUE; +- xf86AddDriver(&psb, Module, 0); ++ xf86AddDriver(&psb, Module, HaveDriverFuncs); + LoaderRefSymLists(fbSymbols, ddcSymbols, shadowSymbols, + psbvgahwSymbols, + #ifdef XF86DRI +@@ -839,6 +839,9 @@ + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Linear framebuffer at 0x%lX\n", + (unsigned long)pScrn->memPhysBase); + ++ ++ pDevice->PciInfo = xf86GetPciInfoForEntity(pDevice->pEnt->index); ++ + /* color weight */ + if (!xf86SetWeight(pScrn, rzeros, rzeros)) { + return (FALSE); +@@ -1030,7 +1033,7 @@ + return FALSE; + + pDevice->regPhys = pDevice->PciInfo->regions[0].base_addr; +- pDevice->regSize = 1 << pDevice->PciInfo->regions[0].size; ++ pDevice->regSize = pDevice->PciInfo->regions[0].size; + + pDevice->regMap = xf86MapVidMem(scrnIndex, VIDMEM_MMIO_32BIT, + pDevice->regPhys, pDevice->regSize); +@@ -1303,7 +1306,7 @@ pScrn->pScreen = pScreen; @@ -11,7 +39,7 @@ Index: git/src/psb_driver.c pPsb->front = psbScanoutCreate(pScrn, pScrn->bitsPerPixel >> 3, pScrn->depth, pScrn->virtualX, pScrn->virtualY, 0, -1, 0); -@@ -1489,7 +1489,9 @@ +@@ -1466,7 +1469,9 @@ return psbEnterVT(pScreen->myNum, 0); out_err_unlock: @@ -21,3 +49,16 @@ Index: git/src/psb_driver.c out_err: psbRestoreHWState(pDevice); return FALSE; +Index: git/src/psb_ioctl.c +=================================================================== +--- git.orig/src/psb_ioctl.c 2009-02-05 13:43:39.000000000 +0000 ++++ git/src/psb_ioctl.c 2009-02-05 13:44:14.000000000 +0000 +@@ -167,7 +167,7 @@ + buf->size = rep->size; + buf->offset = rep->offset; + buf->mapHandle = rep->arg_handle; +- buf->mask = rep->mask; ++ buf->mask = rep->proposed_flags; + buf->start = rep->buffer_start; + buf->fenceFlags = rep->fence_flags; + buf->replyFlags = rep->rep_flags; diff --git a/meta-moblin/packages/xorg-driver/files/pci.patch b/meta-moblin/packages/xorg-driver/files/pci.patch new file mode 100644 index 0000000000..2bdf43158f --- /dev/null +++ b/meta-moblin/packages/xorg-driver/files/pci.patch @@ -0,0 +1,627 @@ +Index: git/configure.ac +=================================================================== +--- git.orig/configure.ac 2008-12-12 15:14:28.000000000 +0000 ++++ git/configure.ac 2009-02-04 16:38:32.000000000 +0000 +@@ -1,3 +1,4 @@ ++AC_DEFUN(CC_AC_CHECK_FILE, $2) + # Copyright 2005 Adam Jackson. + # + # Permission is hereby granted, free of charge, to any person obtaining a +@@ -65,17 +66,19 @@ + PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901 xproto fontsproto xf86dgaproto $REQUIRED_MODULES]) + sdkdir=$(pkg-config --variable=sdkdir xorg-server) + ++PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0]) ++ + # Checks for libraries. + + # Checks for header files. + AC_HEADER_STDC + + if test "$DRI" != no; then +- AC_CHECK_FILE([${sdkdir}/dri.h], ++ CC_AC_CHECK_FILE([${sdkdir}/dri.h], + [have_dri_h="yes"], [have_dri_h="no"]) +- AC_CHECK_FILE([${sdkdir}/sarea.h], ++ CC_AC_CHECK_FILE([${sdkdir}/sarea.h], + [have_sarea_h="yes"], [have_sarea_h="no"]) +- AC_CHECK_FILE([${sdkdir}/dristruct.h], ++ CC_AC_CHECK_FILE([${sdkdir}/dristruct.h], + [have_dristruct_h="yes"], [have_dristruct_h="no"]) + fi + +Index: git/exa/exa.c +=================================================================== +--- git.orig/exa/exa.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/exa/exa.c 2009-02-04 16:38:32.000000000 +0000 +@@ -44,7 +44,6 @@ + #include "exa.h" + #include "cw.h" + +-static int exaGeneration; + int exaScreenPrivateIndex; + int exaPixmapPrivateIndex; + +@@ -239,7 +238,7 @@ + * for scratch pixmaps, or to represent the visible screen. + */ + static PixmapPtr +-exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth) ++exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, int usage_hint) + { + PixmapPtr pPixmap; + ExaPixmapPrivPtr pExaPixmap; +@@ -249,7 +248,7 @@ + if (w > 32767 || h > 32767) + return NullPixmap; + +- pPixmap = fbCreatePixmap (pScreen, w, h, depth); ++ pPixmap = fbCreatePixmap (pScreen, w, h, depth, usage_hint); + if (!pPixmap) + return NULL; + pExaPixmap = ExaGetPixmapPriv(pPixmap); +@@ -606,12 +605,6 @@ + #ifdef RENDER + ps = GetPictureScreenIfSet(pScreen); + #endif +- if (exaGeneration != serverGeneration) +- { +- exaScreenPrivateIndex = AllocateScreenPrivateIndex(); +- exaPixmapPrivateIndex = AllocatePixmapPrivateIndex(); +- exaGeneration = serverGeneration; +- } + + pExaScr = xcalloc (sizeof (ExaScreenPrivRec), 1); + +@@ -623,7 +616,7 @@ + + pExaScr->info = pScreenInfo; + +- pScreen->devPrivates[exaScreenPrivateIndex].ptr = (pointer) pExaScr; ++ dixSetPrivate(&pScreen->devPrivates, &exaScreenPrivateIndex, pExaScr); + + pExaScr->migration = ExaMigrationAlways; + +Index: git/exa/exa_priv.h +=================================================================== +--- git.orig/exa/exa_priv.h 2008-12-12 15:14:28.000000000 +0000 ++++ git/exa/exa_priv.h 2009-02-04 16:38:32.000000000 +0000 +@@ -129,7 +129,8 @@ + + extern int exaScreenPrivateIndex; + extern int exaPixmapPrivateIndex; +-#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)(s)->devPrivates[exaScreenPrivateIndex].ptr) ++ ++#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr) dixLookupPrivate(&s->devPrivates, &exaScreenPrivateIndex)) + #define ExaScreenPriv(s) ExaScreenPrivPtr pExaScr = ExaGetScreenPriv(s) + + /** Align an offset to an arbitrary alignment */ +@@ -145,8 +146,8 @@ + #define EXA_PIXMAP_SCORE_PINNED 1000 + #define EXA_PIXMAP_SCORE_INIT 1001 + +-#define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)(p)->devPrivates[exaPixmapPrivateIndex].ptr) +-#define ExaSetPixmapPriv(p,a) ((p)->devPrivates[exaPixmapPrivateIndex].ptr = (pointer) (a)) ++#define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixLookupPrivate(&p->devPrivates, &exaPixmapPrivateIndex)) ++#define ExaSetPixmapPriv(p,a) (dixSetPrivate(&p->devPrivates, &exaScreenPrivateIndex, (a))) + #define ExaPixmapPriv(p) ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p) + + typedef struct { +Index: git/exa/exa_render.c +=================================================================== +--- git.orig/exa/exa_render.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/exa/exa_render.c 2009-02-04 16:38:32.000000000 +0000 +@@ -898,7 +898,7 @@ + width = extents.x2 - extents.x1; + height = extents.y2 - extents.y1; + pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, +- maskFormat->depth); ++ maskFormat->depth, 0); + if (!pMaskPixmap) + return; + component_alpha = NeedsComponent(maskFormat->format); +@@ -960,7 +960,7 @@ + + /* Create the (real) temporary pixmap to store the current glyph in */ + pPixmap = (*pScreen->CreatePixmap) (pScreen, maxwidth, maxheight, +- list->format->depth); ++ list->format->depth, 0); + if (!pPixmap) + return; + +Index: git/exa/examodule.c +=================================================================== +--- git.orig/exa/examodule.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/exa/examodule.c 2009-02-04 16:38:32.000000000 +0000 +@@ -42,8 +42,7 @@ + OptionInfoPtr options; + } ExaXorgScreenPrivRec, *ExaXorgScreenPrivPtr; + +-static int exaXorgServerGeneration; +-static int exaXorgScreenPrivateIndex; ++int exaXorgScreenPrivateIndex; + + typedef enum { + EXAOPT_MIGRATION_HEURISTIC, +@@ -69,8 +68,8 @@ + exaXorgCloseScreen (int i, ScreenPtr pScreen) + { + ScrnInfoPtr pScrn = XF86SCRNINFO(pScreen); +- ExaXorgScreenPrivPtr pScreenPriv = +- pScreen->devPrivates[exaXorgScreenPrivateIndex].ptr; ++ ++ ExaXorgScreenPrivPtr pScreenPriv = (ExaXorgScreenPrivPtr) dixLookupPrivate(&pScreen->devPrivates, &exaXorgScreenPrivateIndex); + + pScreen->CloseScreen = pScreenPriv->SavedCloseScreen; + +@@ -86,8 +85,8 @@ + exaXorgEnableDisableFBAccess (int index, Bool enable) + { + ScreenPtr pScreen = screenInfo.screens[index]; +- ExaXorgScreenPrivPtr pScreenPriv = +- pScreen->devPrivates[exaXorgScreenPrivateIndex].ptr; ++ ++ ExaXorgScreenPrivPtr pScreenPriv = (ExaXorgScreenPrivPtr) dixLookupPrivate(&pScreen->devPrivates, &exaXorgScreenPrivateIndex); + + if (!enable) + exaEnableDisableFBAccess (index, enable); +@@ -111,11 +110,6 @@ + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ExaXorgScreenPrivPtr pScreenPriv; + +- if (exaXorgServerGeneration != serverGeneration) { +- exaXorgScreenPrivateIndex = AllocateScreenPrivateIndex(); +- exaXorgServerGeneration = serverGeneration; +- } +- + pScreenPriv = xcalloc (1, sizeof(ExaXorgScreenPrivRec)); + if (pScreenPriv == NULL) + return; +@@ -166,7 +160,7 @@ + pExaScr->info->DownloadFromScreen = NULL; + } + +- pScreen->devPrivates[exaXorgScreenPrivateIndex].ptr = pScreenPriv; ++ dixSetPrivate(&pScreen->devPrivates, &exaXorgScreenPrivateIndex, pScreenPriv); + + pScreenPriv->SavedEnableDisableFBAccess = pScrn->EnableDisableFBAccess; + pScrn->EnableDisableFBAccess = exaXorgEnableDisableFBAccess; +Index: git/src/i830_bios.c +=================================================================== +--- git.orig/src/i830_bios.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/src/i830_bios.c 2009-02-04 16:38:32.000000000 +0000 +@@ -97,7 +97,7 @@ + INTEL_VBIOS_SIZE); + vbeFree(pVbe); + } else { +- xf86ReadPciBIOS(0, pI830->PciTag, 0, bios, INTEL_VBIOS_SIZE); ++ pci_device_read_rom(pI830->PciInfo, bios); + } + + if (0) +@@ -159,7 +159,7 @@ + for (bdb_block_off = bdb->header_size; bdb_block_off < bdb->bdb_size; + bdb_block_off += block_size) { + int start = bdb_off + bdb_block_off; +- int id, i, num_entries; ++ int id, num_entries; + struct lvds_bdb_1 *lvds1; + struct lvds_bdb_2 *lvds2; + struct lvds_bdb_2_fp_params *fpparam; +Index: git/src/psb_dri.c +=================================================================== +--- git.orig/src/psb_dri.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/src/psb_dri.c 2009-02-04 16:38:32.000000000 +0000 +@@ -139,9 +139,9 @@ + return; + + pDevice->irq = drmGetInterruptFromBusID(pDevice->drmFD, +- pDevice->pciInfo->bus, +- pDevice->pciInfo->device, +- pDevice->pciInfo->func); ++ ((pDevice->PciInfo->domain << 8) | pDevice->PciInfo->bus), ++ pDevice->PciInfo->dev, ++ pDevice->PciInfo->func); + if ((drmCtlInstHandler(pDevice->drmFD, pDevice->irq))) { + xf86DrvMsg(-1, X_WARNING, "[drm] Failed to install IRQ handler.\n"); + pDevice->irq = -1; +@@ -530,7 +530,6 @@ + DRIInfoPtr pDRIInfo; + PsbDRIPtr pPsbDRI; + int major, minor, patch; +- pciVideoPtr pciInfo; + + PSB_DEBUG(pScrn->scrnIndex, 2, "psbDRIScreenInit\n"); + +@@ -568,8 +567,8 @@ + pDRIInfo->clientDriverName = NULL; + pDRIInfo->busIdString = xalloc(64); + sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d", +- pDevice->pciInfo->bus, +- pDevice->pciInfo->device, pDevice->pciInfo->func); ++ ((pDevice->PciInfo->domain << 8) | pDevice->PciInfo->bus), ++ pDevice->PciInfo->dev, pDevice->PciInfo->func); + pDRIInfo->ddxDriverMajorVersion = PSB_DRIDDX_VERSION_MAJOR; + pDRIInfo->ddxDriverMinorVersion = PSB_DRIDDX_VERSION_MINOR; + pDRIInfo->ddxDriverPatchVersion = PSB_DRIDDX_VERSION_PATCH; +@@ -608,8 +607,8 @@ + } + + pPsbDRI->pciVendor = PCI_VENDOR_INTEL; +- pciInfo = xf86GetPciInfoForEntity(pDevice->pEnt->index); +- pPsbDRI->pciDevice = pciInfo->chipType; ++ /*pciInfo = xf86GetPciInfoForEntity(pDevice->pEnt->index);*/ ++ pPsbDRI->pciDevice = pDevice->PciInfo->device_id; + pPsbDRI->lockSAreaSize = PSB_DRI_LOCK_SAREA_SIZE; + #if PSB_LEGACY_DRI + pPsbDRI->lockSAreaHandle = 0; +Index: git/src/psb_driver.c +=================================================================== +--- git.orig/src/psb_driver.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/src/psb_driver.c 2009-02-04 16:48:40.000000000 +0000 +@@ -58,7 +58,7 @@ + /* Mandatory functions */ + static const OptionInfoRec *psbAvailableOptions(int chipid, int busid); + static void psbIdentify(int flags); +-static Bool psbProbe(DriverPtr drv, int flags); ++static Bool psbProbe(DriverPtr drv, int entity_num, struct pci_device *device, intptr_t match_data); + static Bool psbPreInit(ScrnInfoPtr pScrn, int flags); + static Bool psbScreenInit(int Index, ScreenPtr pScreen, int argc, + char **argv); +@@ -92,6 +92,13 @@ + #define makedev(x,y) ((dev_t)(((x) << 8) | (y))) + #endif + ++ ++static const struct pci_id_match psbDeviceMatch[] = { ++ { 0x8086, PCI_CHIP_PSB1, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0 }, ++ { 0x8086, PCI_CHIP_PSB2, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0 }, ++ { 0, 0, 0 }, ++}; ++ + /* + * This contains the functions needed by the server after loading the + * driver module. It must be supplied, and gets added the driver list by +@@ -104,10 +111,13 @@ + PSB_VERSION, + PSB_DRIVER_NAME, + psbIdentify, +- psbProbe, ++ NULL, + psbAvailableOptions, + NULL, +- 0 ++ 0, ++ NULL, ++ psbDeviceMatch, ++ psbProbe + }; + + enum GenericTypes +@@ -350,122 +360,85 @@ + * do a minimal probe for supported hardware. + */ + +-static Bool +-psbProbe(DriverPtr drv, int flags) ++ ++/*psbProbe(DriverPtr drv, int flags)*/ ++static Bool psbProbe (DriverPtr driver, ++ int entity_num, ++ struct pci_device *device, ++ intptr_t match_data) + { ++ ScrnInfoPtr scrn = NULL; + Bool foundScreen = FALSE; +- int numDevSections, numUsed; +- GDevPtr *devSections = NULL; +- int *usedChips = NULL; +- int i; ++ int numUsed; + EntityInfoPtr pEnt; + PsbDevicePtr pPsbDev; + DevUnion *pPriv; + ++ + PSB_DEBUG(-1, 2, "psbProbe\n"); + numUsed = 0; + +- /* +- * Find the config file Device sections that match this +- * driver, and return if there are none. +- */ +- +- if ((numDevSections = xf86MatchDevice(PSB_NAME, &devSections)) <= 0) +- return (FALSE); +- +- if (xf86GetPciVideoInfo()) { +- +- /* +- * This function allocates screens to devices according to +- * bus ids in the config file. Multiple device sections may point +- * to the same PCI device. +- */ +- +- numUsed = xf86MatchPciInstances(PSB_NAME, PCI_VENDOR_INTEL, +- psbChipsets, psbPCIchipsets, +- devSections, numDevSections, drv, +- &usedChips); +- } +- +- if (numUsed <= 0) +- goto out; +- +- if (flags & PROBE_DETECT) { +- foundScreen = TRUE; +- goto out; +- } +- +- if (psbEntityIndex == -1) +- psbEntityIndex = xf86AllocateEntityPrivateIndex(); ++ scrn = xf86ConfigPciEntity (scrn, 0, entity_num, psbPCIchipsets, ++ NULL, ++ NULL, NULL, NULL, NULL); + +- for (i = 0; i < numUsed; i++) { +- ScrnInfoPtr pScrn = NULL; +- +- /* Allocate a ScrnInfoRec */ +- if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i], +- psbPCIchipsets, NULL, NULL, NULL, +- NULL, NULL))) { +- pScrn->driverVersion = PSB_VERSION; +- pScrn->driverName = PSB_DRIVER_NAME; +- pScrn->name = PSB_NAME; +- pScrn->Probe = psbProbe; +- pScrn->PreInit = psbPreInit; +- pScrn->ScreenInit = psbScreenInit; +- pScrn->SwitchMode = psbSwitchMode; +- pScrn->AdjustFrame = psbAdjustFrame; +- pScrn->EnterVT = psbEnterVT; +- pScrn->LeaveVT = psbLeaveVT; +- pScrn->FreeScreen = psbFreeScreen; +- pScrn->ValidMode = NULL; +- foundScreen = TRUE; +- } ++ if (scrn != NULL) ++ { ++ scrn->driverVersion = PSB_VERSION; ++ scrn->driverName = PSB_DRIVER_NAME; ++ scrn->name = PSB_NAME; ++ scrn->Probe = NULL; ++ scrn->PreInit = psbPreInit; ++ scrn->ScreenInit = psbScreenInit; ++ scrn->SwitchMode = psbSwitchMode; ++ scrn->AdjustFrame = psbAdjustFrame; ++ scrn->EnterVT = psbEnterVT; ++ scrn->LeaveVT = psbLeaveVT; ++ scrn->FreeScreen = psbFreeScreen; ++ scrn->ValidMode = NULL; ++ foundScreen = TRUE; + + /* + * We support dual head, And need a per-device structure. + */ + + pPsbDev = NULL; +- pEnt = xf86GetEntityInfo(usedChips[i]); +- xf86SetEntitySharable(usedChips[i]); ++ pEnt = xf86GetEntityInfo(entity_num); ++ xf86SetEntitySharable(entity_num); + +- pPriv = xf86GetEntityPrivate(pScrn->entityList[0], psbEntityIndex); ++ /* Allocate an entity private if necessary */ ++ if (psbEntityIndex < 0) ++ psbEntityIndex = xf86AllocateEntityPrivateIndex(); ++ ++ pPriv = xf86GetEntityPrivate(scrn->entityList[0], psbEntityIndex); + + if (!pPriv->ptr) { +- PSB_DEBUG(pScrn->scrnIndex, 3, "Allocating new device\n"); ++ PSB_DEBUG(scrn->scrnIndex, 3, "Allocating new device\n"); + + pPriv->ptr = xnfcalloc(sizeof(PsbDevice), 1); + pPsbDev = pPriv->ptr; + pPsbDev->lastInstance = -1; + pPsbDev->pEnt = pEnt; +- pPsbDev->pciInfo = xf86GetPciInfoForEntity(pEnt->index); +- pPsbDev->pciTag = pciTag(pPsbDev->pciInfo->bus, +- pPsbDev->pciInfo->device, +- pPsbDev->pciInfo->func); + pPsbDev->refCount = 0; +- pPsbDev->pScrns[0] = pScrn; ++ pPsbDev->pScrns[0] = scrn; + } else { + pPsbDev = pPriv->ptr; +- PSB_DEBUG(pScrn->scrnIndex, 3, "Secondary screen %d\n", ++ PSB_DEBUG(scrn->scrnIndex, 3, "Secondary screen %d\n", + pPsbDev->lastInstance + 1); +- pPsbDev->pScrns[1] = pScrn; ++ pPsbDev->pScrns[1] = scrn; + } + + pPsbDev->lastInstance++; + pPsbDev->numScreens = pPsbDev->lastInstance + 1; + +- xf86SetEntityInstanceForScreen(pScrn, pScrn->entityList[0], ++ xf86SetEntityInstanceForScreen(scrn, scrn->entityList[0], + pPsbDev->lastInstance); +- pPsbDev->device = xf86GetDevFromEntity(pScrn->entityList[0], +- pScrn->entityInstanceList[0]); ++ pPsbDev->device = xf86GetDevFromEntity(scrn->entityList[0], ++ scrn->entityInstanceList[0]); + } + +- out: +- if (usedChips != NULL) +- xfree(usedChips); +- if (devSections != NULL) +- xfree(devSections); + +- return foundScreen; ++ return scrn != NULL; + } + + static PsbPtr +@@ -492,8 +465,10 @@ + I830Ptr pI830 = &pPsb->i830Ptr; + + pI830->pEnt = pDevice->pEnt; +- pI830->PciTag = pDevice->pciTag; +- pI830->PciInfo = pDevice->pciInfo; ++ pI830->PciInfo = pDevice->PciInfo; ++ pI830->mmio_bar = pDevice->mmio_bar; ++ pI830->fb_bar = pDevice->fb_bar; ++ pI830->gtt_bar = pDevice->gtt_bar; + pI830->pDevice = pDevice; + } + +@@ -607,7 +582,6 @@ + psbPreInitDRI(ScrnInfoPtr pScrn) + { + PsbPtr pPsb = psbPTR(pScrn); +- MessageType from; + + mmInitListHead(&pPsb->sAreaList); + pPsb->dri = TRUE; +@@ -930,12 +904,13 @@ + 400, + 533, + }; +- PCITAG host = pciTag(0, 0, 0); +- CARD32 clock, period; + +- pciWriteLong(host, 0xD0, 0xD0050300); ++ CARD32 period; ++ unsigned int clock; ++ ++ pci_device_cfg_write_u32(pDevice->PciInfo, 0xD0050300, 0xD0); + +- clock = pciReadLong(host, 0xD4); ++ pci_device_cfg_read_u32(pDevice->PciInfo, &clock, 0xD4); + + pPsb->CoreClock = CoreClocks[clock & 0x07]; + pPsb->MemClock = MemClocks[(clock & 0x08) >> 3]; +@@ -1054,8 +1029,8 @@ + if (!vgaHWGetHWRec(pDevice->pScrns[0])) + return FALSE; + +- pDevice->regPhys = pDevice->pciInfo->memBase[0]; +- pDevice->regSize = 1 << pDevice->pciInfo->size[0]; ++ pDevice->regPhys = pDevice->PciInfo->regions[0].base_addr; ++ pDevice->regSize = 1 << pDevice->PciInfo->regions[0].size; + + pDevice->regMap = xf86MapVidMem(scrnIndex, VIDMEM_MMIO_32BIT, + pDevice->regPhys, pDevice->regSize); +@@ -1076,12 +1051,12 @@ + * Map the OpRegion SCI region + */ + { +- CARD32 OpRegion_Phys; ++ unsigned int OpRegion_Phys; + unsigned int OpRegion_Size = 0x100; + OpRegionPtr OpRegion; + char *OpRegion_String = "IntelGraphicsMem"; + +- OpRegion_Phys = pciReadLong(pDevice->pciTag, 0xFC); ++ pci_device_cfg_read_u32(pDevice->PciInfo, &OpRegion_Phys, 0xFC); + + pDevice->OpRegion = xf86MapVidMem(scrnIndex, VIDMEM_MMIO_32BIT, + OpRegion_Phys, OpRegion_Size); +@@ -1107,8 +1082,10 @@ + } + } + +- pDevice->stolenBase = +- (unsigned long)pciReadLong(pDevice->pciTag, PSB_BSM) & 0xFFFFF000; ++ pci_device_cfg_read_u32(pDevice->PciInfo, &pDevice->stolenBase, PSB_BSM); ++ ++ pDevice->stolenBase = pDevice->stolenBase & 0xFFFFF000; ++ + pDevice->stolenSize = PSB_READ32(PSB_PGETBL_CTL) & 0xFFFFF000; + + pDevice->stolenSize -= pDevice->stolenBase; +Index: git/src/psb_driver.h +=================================================================== +--- git.orig/src/psb_driver.h 2008-12-12 15:14:28.000000000 +0000 ++++ git/src/psb_driver.h 2009-02-04 16:38:32.000000000 +0000 +@@ -54,6 +54,9 @@ + #include "xf86Crtc.h" + #include "xf86str.h" + ++#include "xorg-server.h" ++#include ++ + #include "libmm/mm_defines.h" + #include "libmm/mm_interface.h" + +@@ -137,8 +140,10 @@ + unsigned deviceIndex; + EntityInfoPtr pEnt; + GDevPtr device; +- pciVideoPtr pciInfo; +- PCITAG pciTag; ++ struct pci_device *PciInfo; ++ int mmio_bar; ++ int fb_bar; ++ int gtt_bar; + unsigned long regPhys; + unsigned long regSize; + unsigned long fbPhys; +@@ -202,8 +207,10 @@ + typedef struct _I830Rec + { + EntityInfoPtr pEnt; +- PCITAG PciTag; +- pciVideoPtr PciInfo; ++ struct pci_device *PciInfo; ++ int mmio_bar; ++ int fb_bar; ++ int gtt_bar; + PsbDevicePtr pDevice; + } I830Rec, *I830Ptr; + +Index: git/src/psb_lvds.c +=================================================================== +--- git.orig/src/psb_lvds.c 2008-12-12 15:14:28.000000000 +0000 ++++ git/src/psb_lvds.c 2009-02-04 16:38:32.000000000 +0000 +@@ -131,7 +131,7 @@ + + #define MAGIC_SCI 0x8001 + /* Go get the data from SCI */ +- pciWriteLong(pDevice->pciTag, 0xE0, MAGIC_SCI); ++ pci_device_cfg_write_u32(pDevice->PciInfo, MAGIC_SCI, 0xE0); + + /* wait for the data */ + loop = (*SciDSLP == 0) ? 10 : *SciDSLP; +@@ -281,7 +281,7 @@ + psbLVDSSetBacklight(PsbLVDSOutputPtr pLVDS, int level) + { + PsbDevicePtr pDevice = pLVDS->psbOutput.pDevice; +- CARD32 blc_pwm_ctl, blc_pwm_duty_cycle; ++ CARD32 blc_pwm_duty_cycle; + PsbPtr pPsb = psbPTR(pLVDS->psbOutput.pScrn); + CARD32 max_pwm_blc; + unsigned long newbacklight = 0; +@@ -322,7 +322,7 @@ + static CARD32 + psbLVDSGetMaxBacklight(PsbLVDSOutputPtr pLVDS) + { +- PsbDevicePtr pDevice = pLVDS->psbOutput.pDevice; ++ /*PsbDevicePtr pDevice = pLVDS->psbOutput.pDevice;*/ + return BRIGHTNESS_MAX_LEVEL; + } + +Index: git/src/psb_ioctl.h +=================================================================== +--- git.orig/src/psb_ioctl.h 2009-02-04 16:47:55.000000000 +0000 ++++ git/src/psb_ioctl.h 2009-02-04 16:48:08.000000000 +0000 +@@ -33,6 +33,8 @@ + #ifndef _PSB_IOCTL_H_ + #define _PSB_IOCTL_H_ + ++#include "libdrm_lists.h" ++ + typedef struct _drmBOList + { + unsigned numTarget; diff --git a/meta-moblin/packages/xorg-driver/xf86-video-psb_git.bb b/meta-moblin/packages/xorg-driver/xf86-video-psb_git.bb index c48215523a..7d6d178693 100644 --- a/meta-moblin/packages/xorg-driver/xf86-video-psb_git.bb +++ b/meta-moblin/packages/xorg-driver/xf86-video-psb_git.bb @@ -1,20 +1,21 @@ require xf86-video-common.inc DESCRIPTION = "X.Org X server -- PIntel i8xx, i9xx display driver" -DEPENDS += "virtual/libx11 libxvmc libdrm-psb dri2proto glproto \ +DEPENDS += "virtual/libx11 libxvmc libdrm dri2proto glproto \ virtual/libgl xineramaproto libpciaccess" -RDEPENDS += linux-psb-modules +RDEPENDS += "kernel-modules" PV = "0.2.6+git${SRCREV}" -PR = "r4" +PR = "r5" SRC_URI = "git://git.moblin.org/projects/xf86-video-psb;protocol=git \ + file://pci.patch;patch=1 \ file://104_disable_locks.diff;patch=1" S = "${WORKDIR}/git" COMPATIBLE_HOST = '(i.86.*-linux)' -COMPATIBLE_MACHINE = "menlow" +COMPATIBLE_MACHINE = "(menlow|netbook)" EXTRA_OECONF = "--enable-dri --disable-static" -- cgit v1.2.3-54-g00ecf