summaryrefslogtreecommitdiff
path: root/meta-moblin
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2009-02-05 14:06:34 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2009-02-05 14:06:34 +0000
commit31ab259720d9a776da2e6244ac559ba25c3f9d37 (patch)
tree8974a3ec248c6d561588d33d287341c05e8978c7 /meta-moblin
parenta1b17ee0ceb7d443c6a7943947eca8009feba2fb (diff)
downloadopenembedded-core-31ab259720d9a776da2e6244ac559ba25c3f9d37.tar.gz
openembedded-core-31ab259720d9a776da2e6244ac559ba25c3f9d37.tar.bz2
openembedded-core-31ab259720d9a776da2e6244ac559ba25c3f9d37.tar.xz
openembedded-core-31ab259720d9a776da2e6244ac559ba25c3f9d37.zip
xf86-video-psb: Update to work with modern xservers
Diffstat (limited to 'meta-moblin')
-rw-r--r--meta-moblin/packages/xorg-driver/files/104_disable_locks.diff49
-rw-r--r--meta-moblin/packages/xorg-driver/files/pci.patch627
-rw-r--r--meta-moblin/packages/xorg-driver/xf86-video-psb_git.bb9
3 files changed, 677 insertions, 8 deletions
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 1f0a5ba9c..4b25517d5 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 000000000..2bdf43158
--- /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 <pciaccess.h>
++
+ #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 c48215523..7d6d17869 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"