mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
371 lines
9.5 KiB
Diff
371 lines
9.5 KiB
Diff
From: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
|
|
Date: Fri, 18 Jul 2008 21:27:26 +0000 (-0300)
|
|
Subject: Add libpciaccess and remove xf1bpp and xf4bpp support.
|
|
X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-vga.git;a=commitdiff;h=97e2d12548921d92b6dc2dcce8abee48f25981d2
|
|
|
|
Add libpciaccess and remove xf1bpp and xf4bpp support.
|
|
|
|
The driver is not fully functional, starts at 320x200, but may require
|
|
running something like vbetool post before starting the X Server, and does
|
|
not restore console as usually linux consoles use vesafb, but should work
|
|
correctly if console is in a "standard vga mode".
|
|
---
|
|
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -57,6 +57,22 @@ PKG_CHECK_MODULES(XORG, [xorg-server >=
|
|
sdkdir=$(pkg-config --variable=sdkdir xorg-server)
|
|
|
|
# Checks for libraries.
|
|
+SAVE_CPPFLAGS="$CPPFLAGS"
|
|
+CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
|
|
+AC_CHECK_DECL(XSERVER_LIBPCIACCESS,
|
|
+ [XSERVER_LIBPCIACCESS=yes], [XSERVER_LIBPCIACCESS=no],
|
|
+ [#include "xorg-server.h"])
|
|
+AC_CHECK_HEADER(xf1bpp.h,[AC_DEFINE(HAVE_XF1BPP, 1, [Have 1bpp support])],[])
|
|
+AC_CHECK_HEADER(xf4bpp.h,[AC_DEFINE(HAVE_XF4BPP, 1, [Have 4bpp support])],[])
|
|
+CPPFLAGS="$SAVE_CPPFLAGS"
|
|
+
|
|
+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.
|
|
AC_HEADER_STDC
|
|
--- a/src/generic.c
|
|
+++ b/src/generic.c
|
|
@@ -50,8 +50,13 @@
|
|
|
|
#include "fb.h"
|
|
|
|
+#if HAVE_XF4BPP
|
|
#include "xf4bpp.h"
|
|
+#endif
|
|
+
|
|
+#if HAVE_XF1BPP
|
|
#include "xf1bpp.h"
|
|
+#endif
|
|
|
|
#include "shadowfb.h"
|
|
|
|
@@ -62,6 +67,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 +88,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 +127,24 @@ static Bool GenericMapMe
|
|
|
|
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 +154,13 @@ _X_EXPORT DriverRec VGA =
|
|
GenericProbe,
|
|
GenericAvailableOptions,
|
|
NULL,
|
|
- 0
|
|
+ 0,
|
|
+ NULL,
|
|
+
|
|
+#ifdef XSERVER_LIBPCIACCESS
|
|
+ generic_device_match,
|
|
+ GenericPciProbe
|
|
+#endif
|
|
};
|
|
|
|
typedef enum
|
|
@@ -146,8 +200,12 @@ static const char *vgahwSymbols[] =
|
|
#ifdef XFree86LOADER
|
|
static const char *miscfbSymbols[] =
|
|
{
|
|
+#if HAVE_XF1BPP
|
|
"xf1bppScreenInit",
|
|
+#endif
|
|
+#if HAVE_XF4BPP
|
|
"xf4bppScreenInit",
|
|
+#endif
|
|
NULL
|
|
};
|
|
#endif
|
|
@@ -210,7 +268,13 @@ GenericSetup(pointer Module, pointer Opt
|
|
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 +288,6 @@ GenericSetup(pointer Module, pointer Opt
|
|
#endif
|
|
|
|
|
|
-enum GenericTypes
|
|
-{
|
|
- CHIP_VGA_GENERIC
|
|
-};
|
|
-
|
|
/* Supported chipsets */
|
|
static SymTabRec GenericChipsets[] =
|
|
{
|
|
@@ -236,11 +295,13 @@ static SymTabRec GenericChipsets[] =
|
|
{-1, NULL}
|
|
};
|
|
|
|
+#ifndef XSERVER_LIBPCIACCESS
|
|
static PciChipsets GenericPCIchipsets[] =
|
|
{
|
|
{CHIP_VGA_GENERIC, PCI_CHIP_VGA, RES_SHARED_VGA},
|
|
{-1, -1, RES_UNDEFINED},
|
|
};
|
|
+#endif
|
|
|
|
static IsaChipsets GenericISAchipsets[] =
|
|
{
|
|
@@ -267,6 +328,37 @@ GenericAvailableOptions(int chipid, int
|
|
* 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 +375,7 @@ GenericProbe(DriverPtr drv, int flags)
|
|
if ((numDevSections = xf86MatchDevice(VGA_NAME, &devSections)) <= 0)
|
|
return FALSE;
|
|
|
|
+#ifndef XSERVER_LIBPCIACCESS
|
|
/* PCI BUS */
|
|
if (xf86GetPciVideoInfo())
|
|
{
|
|
@@ -324,6 +417,7 @@ GenericProbe(DriverPtr drv, int flags)
|
|
xfree(usedChips);
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
/* Isa Bus */
|
|
numUsed = xf86MatchIsaInstances(VGA_NAME, GenericChipsets,
|
|
@@ -391,20 +485,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)
|
|
{
|
|
@@ -509,8 +589,14 @@ GenericPreInit(ScrnInfoPtr pScreenInfo,
|
|
|
|
switch (pScreenInfo->depth)
|
|
{
|
|
- case 1: Module = "xf1bpp"; Sym = "xf1bppScreenInit"; break;
|
|
- case 4: Module = "xf4bpp"; Sym = "xf4bppScreenInit"; break;
|
|
+ case 1:
|
|
+#if HAVE_XF1BPP
|
|
+ Module = "xf1bpp"; Sym = "xf1bppScreenInit"; break;
|
|
+#endif
|
|
+ case 4:
|
|
+#if HAVE_XF4BPP
|
|
+ Module = "xf4bpp"; Sym = "xf4bppScreenInit"; break;
|
|
+#endif
|
|
case 8: Module = "fb"; break;
|
|
|
|
default:
|
|
@@ -673,6 +759,8 @@ GenericPreInit(ScrnInfoPtr pScreenInfo,
|
|
/* Set display resolution */
|
|
xf86SetDpi(pScreenInfo, 0, 0);
|
|
|
|
+
|
|
+#if HAVE_XF1BPP && HAVE_XF4BPP
|
|
if (xf86ReturnOptValBool(pGenericPriv->Options, OPTION_SHADOW_FB, FALSE))
|
|
{
|
|
pGenericPriv->ShadowFB = TRUE;
|
|
@@ -688,7 +776,7 @@ GenericPreInit(ScrnInfoPtr pScreenInfo,
|
|
"Enabling universal \"KGA\" treatment.\n");
|
|
}
|
|
|
|
-#ifdef SPECIAL_FB_BYTE_ACCESS
|
|
+# ifdef SPECIAL_FB_BYTE_ACCESS
|
|
if (!pGenericPriv->ShadowFB && (pScreenInfo->depth == 4))
|
|
{
|
|
xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
|
|
@@ -696,8 +784,13 @@ GenericPreInit(ScrnInfoPtr pScreenInfo,
|
|
" ShadowFB enabled.\n");
|
|
pGenericPriv->ShadowFB = TRUE;
|
|
}
|
|
+# endif
|
|
+
|
|
+#else
|
|
+ pGenericPriv->ShadowFB = TRUE;
|
|
#endif
|
|
|
|
+
|
|
if (pGenericPriv->ShadowFB)
|
|
{
|
|
pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER;
|
|
@@ -1378,6 +1471,7 @@ GenericScreenInit(int scrnIndex, ScreenP
|
|
#endif
|
|
ShadowFBInit(pScreen, GenericRefreshArea1bpp);
|
|
}
|
|
+#if HAVE_XF1BPP
|
|
else
|
|
{
|
|
Inited = xf1bppScreenInit(pScreen, pvgaHW->Base,
|
|
@@ -1386,6 +1480,7 @@ GenericScreenInit(int scrnIndex, ScreenP
|
|
pScreenInfo->xDpi, pScreenInfo->yDpi,
|
|
pScreenInfo->displayWidth);
|
|
}
|
|
+#endif
|
|
break;
|
|
case 4:
|
|
if (pGenericPriv->ShadowFB)
|
|
@@ -1410,6 +1505,7 @@ GenericScreenInit(int scrnIndex, ScreenP
|
|
#endif
|
|
ShadowFBInit(pScreen, GenericRefreshArea4bpp);
|
|
}
|
|
+#if HAVE_XF4BPP
|
|
else
|
|
{
|
|
Inited = xf4bppScreenInit(pScreen, pvgaHW->Base,
|
|
@@ -1418,6 +1514,7 @@ GenericScreenInit(int scrnIndex, ScreenP
|
|
pScreenInfo->xDpi, pScreenInfo->yDpi,
|
|
pScreenInfo->displayWidth);
|
|
}
|
|
+#endif
|
|
break;
|
|
case 8:
|
|
Inited = fbScreenInit(pScreen, pvgaHW->Base,
|
|
@@ -1579,6 +1676,9 @@ GenericMapMem(ScrnInfoPtr scrp)
|
|
{
|
|
vgaHWPtr hwp = VGAHWPTR(scrp);
|
|
int scr_index = scrp->scrnIndex;
|
|
+#ifdef XSERVER_LIBPCIACCESS
|
|
+ GenericPtr pPriv = GenericGetRec(scrp);
|
|
+#endif
|
|
|
|
if (hwp->Base)
|
|
return TRUE;
|
|
@@ -1589,7 +1689,12 @@ GenericMapMem(ScrnInfoPtr scrp)
|
|
if (hwp->MapPhys == 0)
|
|
hwp->MapPhys = VGA_DEFAULT_PHYS_ADDR;
|
|
|
|
- hwp->Base = xf86MapDomainMemory(scr_index, VIDMEM_MMIO, hwp->Tag,
|
|
+ hwp->Base = xf86MapDomainMemory(scr_index, VIDMEM_MMIO,
|
|
+#ifdef XSERVER_LIBPCIACCESS
|
|
+ pPriv->pciInfo,
|
|
+#else
|
|
+ hwp->Tag,
|
|
+#endif
|
|
hwp->MapPhys, hwp->MapSize);
|
|
return hwp->Base != NULL;
|
|
}
|