[prev in list] [next in list] [prev in thread] [next in thread]
List: freedesktop-xorg
Subject: xorg/driver/xf86-video-vga - [PATCH] Add libpciaccess support to
From: pcpa () mandriva ! com ! br
Date: 2008-01-31 5:40:17
Message-ID: 20080131034017.melyn42j9280sgo4 () webmail ! conectiva ! com ! br
[Download RAW message or body]
This message is in MIME format.
["0001-Add-libpciaccess-support-to-generic-vga-driver.patch" (text/x-patch)]
From f0d53110b3f344aec68e32a170aa038c5a85aeaf Mon Sep 17 00:00:00 2001
From: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com>
Date: Thu, 31 Jan 2008 02:12:53 -0200
Subject: [PATCH] Add libpciaccess support to generic vga driver.
---
configure.ac | 10 +++++
src/generic.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++-----------
2 files changed, 100 insertions(+), 21 deletions(-)
diff --git a/configure.ac b/configure.ac
index 39e2a3d..c24796d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -56,6 +56,16 @@ XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901 xproto fontsproto $REQUIRED_MODULES])
sdkdir=$(pkg-config --variable=sdkdir xorg-server)
+AC_CHECK_DECL(XSERVER_LIBPCIACCESS,
+ [XSERVER_LIBPCIACCESS=yes], [XSERVER_LIBPCIACCESS=no],
+ [#include "xorg-server.h"])
+
+if test "x$XSERVER_LIBPCIACCESS" = xyes; then
+ PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
+ XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
+fi
+AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes)
+
# Checks for libraries.
# Checks for header files.
diff --git a/src/generic.c b/src/generic.c
index 4be7c39..684552b 100644
--- a/src/generic.c
+++ b/src/generic.c
@@ -62,6 +62,10 @@
#include "xf86Resources.h"
#include "xf86int10.h"
+#ifdef XSERVER_LIBPCIACCESS
+#include <pciaccess.h>
+#endif
+
/* Some systems #define VGA for their own purposes */
#undef VGA
@@ -79,10 +83,31 @@
#define CLOCK_TOLERANCE 2000 /* Clock matching tolerance (2MHz) */
#endif
+/*
+ * This structure is used to wrap the screen's CloseScreen vector.
+ */
+typedef struct _GenericRec
+{
+ Bool ShadowFB;
+ Bool KGAUniversal;
+ CARD8 * ShadowPtr;
+ CARD32 ShadowPitch;
+ CloseScreenProcPtr CloseScreen;
+ OptionInfoPtr Options;
+#ifdef XSERVER_LIBPCIACCESS
+ struct pci_device *pciInfo;
+#endif
+} GenericRec, *GenericPtr;
+
+
/* Forward definitions */
static const OptionInfoRec *GenericAvailableOptions(int chipid, int busid);
static void GenericIdentify(int);
static Bool GenericProbe(DriverPtr, int);
+#ifdef XSERVER_LIBPCIACCESS
+static Bool GenericPciProbe(DriverPtr drv, int entity_num,
+ struct pci_device *dev, intptr_t match_data);
+#endif
static Bool GenericPreInit(ScrnInfoPtr, int);
static Bool GenericScreenInit(int, ScreenPtr, int, char **);
static Bool GenericSwitchMode(int, DisplayModePtr, int);
@@ -97,6 +122,24 @@ static Bool GenericMapMem(ScrnInfoPtr scrp);
static ModeStatus GenericValidMode(int, DisplayModePtr, Bool, int);
+static GenericPtr GenericGetRec(ScrnInfoPtr pScreenInfo);
+
+enum GenericTypes
+{
+ CHIP_VGA_GENERIC
+};
+
+#ifdef XSERVER_LIBPCIACCESS
+static const struct pci_id_match generic_device_match[] = {
+ {
+ PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
+ 0x00030000, 0x00ffffff, CHIP_VGA_GENERIC
+ },
+
+ { 0, 0, 0 },
+};
+#endif
+
/* The root of all evil... */
_X_EXPORT DriverRec VGA =
{
@@ -106,7 +149,13 @@ _X_EXPORT DriverRec VGA =
GenericProbe,
GenericAvailableOptions,
NULL,
- 0
+ 0,
+ NULL,
+
+#ifdef XSERVER_LIBPCIACCESS
+ generic_device_match,
+ GenericPciProbe
+#endif
};
typedef enum
@@ -210,7 +259,13 @@ GenericSetup(pointer Module, pointer Options, int *ErrorMajor, int *ErrorMinor)
if (!Initialised)
{
Initialised = TRUE;
- xf86AddDriver(&VGA, Module, 0);
+ xf86AddDriver(&VGA, Module,
+#ifdef XSERVER_LIBPCIACCESS
+ HaveDriverFuncs
+#else
+ 0
+#endif
+ );
LoaderRefSymLists(vgahwSymbols, miscfbSymbols, fbSymbols,
shadowfbSymbols, int10Symbols, NULL);
return (pointer)TRUE;
@@ -224,11 +279,6 @@ GenericSetup(pointer Module, pointer Options, int *ErrorMajor, int *ErrorMinor)
#endif
-enum GenericTypes
-{
- CHIP_VGA_GENERIC
-};
-
/* Supported chipsets */
static SymTabRec GenericChipsets[] =
{
@@ -267,6 +317,37 @@ GenericAvailableOptions(int chipid, int busid)
* do a minimal probe for supported hardware.
*/
+#ifdef XSERVER_LIBPCIACCESS
+static Bool
+GenericPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev,
+ intptr_t match_data)
+{
+ ScrnInfoPtr pScrn;
+
+ pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, NULL,
+ NULL, NULL, NULL, NULL, NULL);
+ if (pScrn != NULL) {
+ GenericPtr pGeneric = GenericGetRec(pScrn);
+
+ pScrn->driverVersion = VGA_VERSION_CURRENT;
+ pScrn->driverName = VGA_DRIVER_NAME;
+ pScrn->name = VGA_NAME;
+ pScrn->Probe = GenericProbe;
+ pScrn->PreInit = GenericPreInit;
+ pScrn->ScreenInit = GenericScreenInit;
+ pScrn->SwitchMode = GenericSwitchMode;
+ pScrn->AdjustFrame = GenericAdjustFrame;
+ pScrn->EnterVT = GenericEnterVT;
+ pScrn->LeaveVT = GenericLeaveVT;
+ pScrn->FreeScreen = GenericFreeScreen;
+
+ pGeneric->pciInfo = dev;
+ }
+
+ return (pScrn != NULL);
+}
+#endif
+
static Bool
GenericProbe(DriverPtr drv, int flags)
{
@@ -283,6 +364,7 @@ GenericProbe(DriverPtr drv, int flags)
if ((numDevSections = xf86MatchDevice(VGA_NAME, &devSections)) <= 0)
return FALSE;
+#ifndef XSERVER_LIBPCIACCESS
/* PCI BUS */
if (xf86GetPciVideoInfo())
{
@@ -324,6 +406,7 @@ GenericProbe(DriverPtr drv, int flags)
xfree(usedChips);
}
}
+#endif
/* Isa Bus */
numUsed = xf86MatchIsaInstances(VGA_NAME, GenericChipsets,
@@ -391,20 +474,6 @@ VGAFindIsaDevice(GDevPtr dev)
return (int)CHIP_VGA_GENERIC;
}
-/*
- * This structure is used to wrap the screen's CloseScreen vector.
- */
-typedef struct _GenericRec
-{
- Bool ShadowFB;
- Bool KGAUniversal;
- CARD8 * ShadowPtr;
- CARD32 ShadowPitch;
- CloseScreenProcPtr CloseScreen;
- OptionInfoPtr Options;
-} GenericRec, *GenericPtr;
-
-
static GenericPtr
GenericGetRec(ScrnInfoPtr pScreenInfo)
{
--
1.5.3.2
_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic