Separated Intel drivers from default DriDrivers to avoid building them on
IA64 (Egbert Eich). Fixed wrong function prototype (Egbert Eich). Don't test for generic VGA on IA64 (Egbert Eich). Fixed a segfault when accessing a structure before verifying the pointer exists (Egbert Eich). Added a showcache option for debugging (Egbert Eich). Increase default video RAM size to 16MB when DRI is enabled and more than 128MB are available (Egbert Eich). Fixed lockups during mode switch. Problem was introduced when attempting to copy the behavior during LeaveVT()/EnterVT() but but forgetting to call I810DRILeave() before I810DRIEnter(). The entire DRILeave()/Enter() scenario has been commented out as it didn't seem to be necessary (Egbert Eich). Fix TweakMemorySize() (tested with i855/i865) (Egbert Eich). increased MAX_DEVICES to 128 (Egbert Eich). Use OS provided PCI config space access as default method (Egbert Eich). Added support for Linux 2.6 proc file format. Fixed unaligned accesses to pieces of the VBE info block. VESA did not align elements to size (Egbert Eich).
This commit is contained in:
parent
7c466d64c3
commit
df2b55a25b
|
@ -2988,7 +2988,7 @@ static void
|
|||
CheckGenericGA()
|
||||
{
|
||||
/* This needs to be changed for multiple domains */
|
||||
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__)
|
||||
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined ( __ia64__)
|
||||
IOADDRESS GenericIOBase = VGAHW_GET_IOBASE();
|
||||
CARD8 CurrentValue, TestValue;
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ xf86InfoRec xf86Info = {
|
|||
FALSE, /* vidModeAllowNonLocal */
|
||||
TRUE, /* miscModInDevEnabled */
|
||||
FALSE, /* miscModInDevAllowNonLocal */
|
||||
PCIProbe1, /* pciFlags */
|
||||
PCIOsConfig, /* pciFlags */
|
||||
Pix24DontCare, /* pixmap24 */
|
||||
X_DEFAULT, /* pix24From */
|
||||
#if defined(i386) || defined(__i386__)
|
||||
|
|
|
@ -3230,10 +3230,14 @@ pciVideoPtr
|
|||
xf86GetPciInfoForEntity(int entityIndex)
|
||||
{
|
||||
pciVideoPtr *ppPci;
|
||||
EntityPtr p = xf86Entities[entityIndex];
|
||||
EntityPtr p;
|
||||
|
||||
if (entityIndex >= xf86NumEntities
|
||||
|| p->busType != BUS_PCI) return NULL;
|
||||
if (entityIndex >= xf86NumEntities)
|
||||
return NULL;
|
||||
|
||||
p = xf86Entities[entityIndex];
|
||||
if (p->busType != BUS_PCI)
|
||||
return NULL;
|
||||
|
||||
for (ppPci = xf86PciVideoInfo; *ppPci != NULL; ppPci++) {
|
||||
if (p->pciBusId.bus == (*ppPci)->bus &&
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h,v 1.42 2003/08/29 21:08:06 tsi Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h,v 1.45 2004/02/02 03:55:31 dawes Exp $ */
|
||||
/*
|
||||
* Copyright 1998 by Concurrent Computer Corporation
|
||||
*
|
||||
|
@ -112,7 +112,7 @@
|
|||
/*
|
||||
* Global Definitions
|
||||
*/
|
||||
#define MAX_PCI_DEVICES 64 /* Max number of devices accomodated */
|
||||
#define MAX_PCI_DEVICES 128 /* Max number of devices accomodated */
|
||||
/* by xf86scanpci */
|
||||
#if defined(sun) && defined(SVR4) && defined(sparc)
|
||||
# define MAX_PCI_BUSES 4096 /* Max number of PCI buses */
|
||||
|
@ -255,9 +255,13 @@
|
|||
# define ARCH_PCI_INIT linuxPciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
# elif defined(FreeBSD)
|
||||
# define ARCH_PCI_INIT freebsdPciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
# endif
|
||||
# define XF86SCANPCI_WRAPPER ia64ScanPCIWrapper
|
||||
#elif defined(__i386__)
|
||||
#elif defined(__i386__) || defined(i386)
|
||||
# define ARCH_PCI_INIT ix86PciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
|
@ -308,21 +312,27 @@
|
|||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
# endif
|
||||
#elif defined(__sparc__)
|
||||
#elif defined(__sparc__) || defined(sparc)
|
||||
# if defined(linux)
|
||||
# define ARCH_PCI_INIT linuxPciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# elif defined(sun)
|
||||
# define ARCH_PCI_INIT sparcPciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# elif defined(__OpenBSD__) && defined(__sparc64__)
|
||||
# elif (defined(__OpenBSD__) || defined(__FreeBSD__)) && defined(__sparc64__)
|
||||
# define ARCH_PCI_INIT freebsdPciInit
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
# endif
|
||||
# define ARCH_PCI_PCI_BRIDGE sparcPciPciBridge
|
||||
#elif defined(__AMD64__)
|
||||
# define ARCH_PCI_INIT ix86PciInit
|
||||
# if !defined(__FreeBSD__)
|
||||
# define ARCH_PCI_PCI_BRIDGE sparcPciPciBridge
|
||||
# endif
|
||||
#elif defined(__amd64__)
|
||||
# if defined(__FreeBSD__)
|
||||
# define ARCH_PCI_INIT freebsdPciInit
|
||||
# else
|
||||
# define ARCH_PCI_INIT ix86PciInit
|
||||
# endif
|
||||
# define INCLUDE_XF86_MAP_PCI_MEM
|
||||
# define INCLUDE_XF86_NO_DOMAIN
|
||||
# if defined(linux)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c,v 1.24 2003/08/29 20:49:03 tsi Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/ix86Pci.c,v 1.25 2003/09/24 02:43:34 dawes Exp $ */
|
||||
/*
|
||||
* ix86Pci.c - x86 PCI driver
|
||||
*
|
||||
|
@ -272,10 +272,16 @@ void ix86PciSelectCfgmech(void)
|
|||
*/
|
||||
switch (xf86Info.pciFlags) {
|
||||
|
||||
case PCIProbe1: /* { */
|
||||
case PCIOsConfig:
|
||||
#if ARCH_PCI_OS_INIT
|
||||
return;
|
||||
#endif
|
||||
|
||||
case PCIProbe1:
|
||||
|
||||
xf86MsgVerb(X_INFO, 2, "PCI: Probing config type using method 1\n");
|
||||
oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG);
|
||||
xf86MsgVerb(X_INFO, 2,
|
||||
"PCI: Probing config type using method 1\n");
|
||||
oldVal1 = inl(PCI_CFGMECH1_ADDRESS_REG);
|
||||
|
||||
#ifdef DEBUGPCI
|
||||
if (xf86Verbose > 2) {
|
||||
|
@ -345,8 +351,9 @@ void ix86PciSelectCfgmech(void)
|
|||
|
||||
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
|
||||
xf86MsgVerb(X_INFO, 3,
|
||||
"PCI: stages = 0x%02x, oldVal1 = 0x%08x, mode1Res1"
|
||||
" = 0x%08x\n", stages, oldVal1, mode1Res1);
|
||||
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx, mode1Res1"
|
||||
" = 0x%08lx\n", stages, (unsigned long)oldVal1,
|
||||
(unsigned long)mode1Res1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -399,9 +406,10 @@ void ix86PciSelectCfgmech(void)
|
|||
|
||||
xf86MsgVerb(X_INFO, 2, "PCI: Config type is 1\n");
|
||||
xf86MsgVerb(X_INFO, 3,
|
||||
"PCI: stages = 0x%02x, oldVal1 = 0x%08x,\n"
|
||||
"\tmode1Res1 = 0x%08x, mode1Res2 = 0x%08x\n",
|
||||
stages, oldVal1, mode1Res1, mode1Res2);
|
||||
"PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
|
||||
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
|
||||
stages, (unsigned long)oldVal1,
|
||||
(unsigned long)mode1Res1, (unsigned long)mode1Res2);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -415,9 +423,10 @@ void ix86PciSelectCfgmech(void)
|
|||
}
|
||||
|
||||
xf86MsgVerb(X_INFO, 3, "PCI: Standard check for type 1 failed.\n");
|
||||
xf86MsgVerb(X_INFO, 3, "PCI: stages = 0x%02x, oldVal1 = 0x%08x,\n"
|
||||
"\tmode1Res1 = 0x%08x, mode1Res2 = 0x%08x\n",
|
||||
stages, oldVal1, mode1Res1, mode1Res2);
|
||||
xf86MsgVerb(X_INFO, 3, "PCI: stages = 0x%02x, oldVal1 = 0x%08lx,\n"
|
||||
"\tmode1Res1 = 0x%08lx, mode1Res2 = 0x%08lx\n",
|
||||
stages, (unsigned long)oldVal1, (unsigned long)mode1Res1,
|
||||
(unsigned long)mode1Res2);
|
||||
|
||||
/* Try config type 2 */
|
||||
oldVal2 = inb(PCI_CFGMECH2_ENABLE_REG);
|
||||
|
@ -489,9 +498,6 @@ void ix86PciSelectCfgmech(void)
|
|||
ix86Pci0.funcs = &ix86Funcs2;
|
||||
return;
|
||||
|
||||
case PCIOsConfig:
|
||||
return;
|
||||
|
||||
case PCIForceNone:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c,v 1.10 2002/11/17 18:42:01 alanh Exp $ */
|
||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c,v 1.9 2002/09/24 16:14:16 tsi Exp $ */
|
||||
/*
|
||||
* Copyright 1998 by Concurrent Computer Corporation
|
||||
*
|
||||
|
@ -104,6 +104,7 @@ linuxPciOpenFile(PCITAG tag)
|
|||
static int lbus,ldev,lfunc,fd = -1;
|
||||
int bus, dev, func;
|
||||
char file[32];
|
||||
struct stat ignored;
|
||||
|
||||
bus = PCI_BUS_FROM_TAG(tag);
|
||||
dev = PCI_DEV_FROM_TAG(tag);
|
||||
|
@ -111,12 +112,21 @@ linuxPciOpenFile(PCITAG tag)
|
|||
if (fd == -1 || bus != lbus || dev != ldev || func != lfunc) {
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
if (bus < 256)
|
||||
sprintf(file, "/proc/bus/pci/%02x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
else
|
||||
sprintf(file, "/proc/bus/pci/%04x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
if (bus < 256) {
|
||||
if (stat("/proc/bus/pci/00", &ignored) < 0)
|
||||
sprintf(file, "/proc/bus/pci/0000:%02x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
else
|
||||
sprintf(file, "/proc/bus/pci/%02x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
} else {
|
||||
if (stat("/proc/bus/pci/00", &ignored) < 0)
|
||||
sprintf(file, "/proc/bus/pci/0000:%04x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
else
|
||||
sprintf(file, "/proc/bus/pci/%04x/%02x.%1x",
|
||||
bus, dev, func);
|
||||
}
|
||||
fd = open(file,O_RDWR);
|
||||
lbus = bus;
|
||||
ldev = dev;
|
||||
|
|
|
@ -57,8 +57,11 @@ VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags)
|
|||
vbeControllerInfoPtr vbe = NULL;
|
||||
Bool init_int10 = FALSE;
|
||||
vbeInfoPtr vip = NULL;
|
||||
int screen = pScrn->scrnIndex;
|
||||
int screen;
|
||||
|
||||
if (!pScrn) return NULL;
|
||||
screen = pScrn->scrnIndex;
|
||||
|
||||
if (!pInt) {
|
||||
if (!xf86LoadSubModule(pScrn, "int10"))
|
||||
goto error;
|
||||
|
@ -336,6 +339,8 @@ vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule)
|
|||
return pMonitor;
|
||||
}
|
||||
|
||||
#define GET_UNALIGNED2(x) \
|
||||
((*(CARD16*)(x)) | (*(((CARD16*)(x) + 1))) << 16)
|
||||
|
||||
VbeInfoBlock *
|
||||
VBEGetVBEInfo(vbeInfoPtr pVbe)
|
||||
|
@ -381,7 +386,7 @@ VBEGetVBEInfo(vbeInfoPtr pVbe)
|
|||
block->VESAVersion = *(CARD16*)(((char*)pVbe->memory) + 4);
|
||||
major = (unsigned)block->VESAVersion >> 8;
|
||||
|
||||
pStr = *(CARD32*)(((char*)pVbe->memory) + 6);
|
||||
pStr = GET_UNALIGNED2((((char*)pVbe->memory) + 6));
|
||||
str = xf86int10Addr(pVbe->pInt10, FARP(pStr));
|
||||
block->OEMStringPtr = strdup(str);
|
||||
|
||||
|
@ -390,7 +395,7 @@ VBEGetVBEInfo(vbeInfoPtr pVbe)
|
|||
block->Capabilities[2] = ((char*)pVbe->memory)[12];
|
||||
block->Capabilities[3] = ((char*)pVbe->memory)[13];
|
||||
|
||||
pModes = *(CARD32*)(((char*)pVbe->memory) + 14);
|
||||
pModes = GET_UNALIGNED2((((char*)pVbe->memory) + 14));
|
||||
modes = xf86int10Addr(pVbe->pInt10, FARP(pModes));
|
||||
i = 0;
|
||||
while (modes[i] != 0xffff)
|
||||
|
@ -405,13 +410,13 @@ VBEGetVBEInfo(vbeInfoPtr pVbe)
|
|||
memcpy(&block->OemSoftwareRev, ((char*)pVbe->memory) + 20, 236);
|
||||
else {
|
||||
block->OemSoftwareRev = *(CARD16*)(((char*)pVbe->memory) + 20);
|
||||
pStr = *(CARD32*)(((char*)pVbe->memory) + 22);
|
||||
pStr = GET_UNALIGNED2((((char*)pVbe->memory) + 22));
|
||||
str = xf86int10Addr(pVbe->pInt10, FARP(pStr));
|
||||
block->OemVendorNamePtr = strdup(str);
|
||||
pStr = *(CARD32*)(((char*)pVbe->memory) + 26);
|
||||
pStr = GET_UNALIGNED2((((char*)pVbe->memory) + 26));
|
||||
str = xf86int10Addr(pVbe->pInt10, FARP(pStr));
|
||||
block->OemProductNamePtr = strdup(str);
|
||||
pStr = *(CARD32*)(((char*)pVbe->memory) + 30);
|
||||
pStr = GET_UNALIGNED2((((char*)pVbe->memory) + 30));
|
||||
str = xf86int10Addr(pVbe->pInt10, FARP(pStr));
|
||||
block->OemProductRevPtr = strdup(str);
|
||||
memcpy(&block->Reserved, ((char*)pVbe->memory) + 34, 222);
|
||||
|
|
Loading…
Reference in New Issue