summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Hartmann <jhartmann@valinux.com>2001-08-08 16:10:47 +0000
committerJeff Hartmann <jhartmann@valinux.com>2001-08-08 16:10:47 +0000
commitb6923b39539c34c2a589197def5eee72a9d719bf (patch)
tree8fc63d04fe2344377ef4123acbe38ff1fa3f3493
parent938a637d1fc33bc8ef14210d655c27d646ddc2d2 (diff)
Update to the code I sent Linus and Alan this morning. Added some missing
agp chipsets to drm_agpsupport.h, redid the card detection common code to use a structure (avoids endian porting issues), changed the tdfx driver to use the kernel pci id '#defines'
-rw-r--r--linux-core/drmP.h5
-rw-r--r--linux-core/drm_agpsupport.c22
-rw-r--r--linux-core/drm_drv.c19
-rw-r--r--linux-core/tdfx_drv.c14
-rw-r--r--linux/drmP.h5
-rw-r--r--linux/drm_agpsupport.h22
-rw-r--r--linux/drm_drv.h19
-rw-r--r--linux/tdfx_drv.c14
8 files changed, 88 insertions, 32 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index b48d9b1f..3b282685 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -393,6 +393,11 @@ do { \
typedef int drm_ioctl_t( struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg );
+typedef struct drm_pci_list {
+ u16 vendor;
+ u16 device;
+} drm_pci_list_t;
+
typedef struct drm_ioctl_desc {
drm_ioctl_t *func;
int auth_needed;
diff --git a/linux-core/drm_agpsupport.c b/linux-core/drm_agpsupport.c
index 9b056c75..66d1defc 100644
--- a/linux-core/drm_agpsupport.c
+++ b/linux-core/drm_agpsupport.c
@@ -272,13 +272,14 @@ drm_agp_head_t *DRM(agp_init)(void)
case INTEL_I810: head->chipset = "Intel i810"; break;
#if LINUX_VERSION_CODE >= 0x020400
+ case INTEL_I815: head->chipset = "Intel i815"; break;
case INTEL_I840: head->chipset = "Intel i840"; break;
+ case INTEL_I850: head->chipset = "Intel i850"; break;
#endif
case VIA_GENERIC: head->chipset = "VIA"; break;
case VIA_VP3: head->chipset = "VIA VP3"; break;
case VIA_MVP3: head->chipset = "VIA MVP3"; break;
-
#if LINUX_VERSION_CODE >= 0x020400
case VIA_MVP4: head->chipset = "VIA MVP4"; break;
case VIA_APOLLO_KX133: head->chipset = "VIA Apollo KX133";
@@ -294,6 +295,25 @@ drm_agp_head_t *DRM(agp_init)(void)
case AMD_IRONGATE: head->chipset = "AMD Irongate"; break;
case ALI_GENERIC: head->chipset = "ALi"; break;
case ALI_M1541: head->chipset = "ALi M1541"; break;
+
+#if LINUX_VERSION_CODE >= 0x020402
+ case ALI_M1621: head->chipset = "ALi M1621"; break;
+ case ALI_M1631: head->chipset = "ALi M1631"; break;
+ case ALI_M1632: head->chipset = "ALi M1632"; break;
+ case ALI_M1641: head->chipset = "ALi M1641"; break;
+ case ALI_M1647: head->chipset = "ALi M1647"; break;
+ case ALI_M1651: head->chipset = "ALi M1651"; break;
+#endif
+
+#if LINUX_VERSION_CODE >= 0x020406
+ case SVWRKS_HE: head->chipset = "Serverworks HE";
+ break;
+ case SVWRKS_LE: head->chipset = "Serverworks LE";
+ break;
+ case SVWRKS_GENERIC: head->chipset = "Serverworks Generic";
+ break;
+#endif
+
default: head->chipset = "Unknown"; break;
}
DRM_INFO("AGP %d.%d on %s @ 0x%08lx %ZuMB\n",
diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c
index a28b0b5b..e1aff06d 100644
--- a/linux-core/drm_drv.c
+++ b/linux-core/drm_drv.c
@@ -506,8 +506,9 @@ static int drm_count_cards(void)
{
int num = 0;
#if defined(DRIVER_CARD_LIST)
- u_int *l;
- u_int device, vendor;
+ int i;
+ drm_pci_list_t *l;
+ u16 device, vendor;
struct pci_dev *pdev = NULL;
#endif
@@ -516,14 +517,12 @@ static int drm_count_cards(void)
#if defined(DRIVER_COUNT_CARDS)
num = DRIVER_COUNT_CARDS();
#elif defined(DRIVER_CARD_LIST)
- for (l = DRIVER_CARD_LIST; *l; l++) {
+ for (i = 0, l = DRIVER_CARD_LIST; l[i].vendor != 0; i++) {
pdev = NULL;
- device = *l & 0xFFFF;
- if (device == 0xFFFF)
- device = PCI_ANY_ID;
- vendor = (*l >> 16) & 0xFFFF;
- if (vendor == 0xFFFF)
- vendor = PCI_ANY_ID;
+ vendor = l[i].vendor;
+ device = l[i].device;
+ if(device == 0xffff) device = PCI_ANY_ID;
+ if(vendor == 0xffff) vendor = PCI_ANY_ID;
while ((pdev = pci_find_device(vendor, device, pdev))) {
num++;
}
@@ -648,7 +647,7 @@ static void __exit drm_cleanup( void )
#endif
#if __REALLY_HAVE_AGP && __REALLY_HAVE_MTRR
- if ( dev->agp && dev->agp->agp_mtrr ) {
+ if ( dev->agp && dev->agp->agp_mtrr >= 0) {
int retval;
retval = mtrr_del( dev->agp->agp_mtrr,
dev->agp->agp_info.aper_base,
diff --git a/linux-core/tdfx_drv.c b/linux-core/tdfx_drv.c
index 94e5d41c..8f975875 100644
--- a/linux-core/tdfx_drv.c
+++ b/linux-core/tdfx_drv.c
@@ -44,11 +44,15 @@
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 0
-static u_int DRM(idlist)[] = {
- 0x121A0003, /* Banshee */
- 0x121A0005, /* Voodoo3 */
- 0x121A0009, /* Voodoo5 */
- 0
+#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
+#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
+#endif
+
+static drm_pci_list_t DRM(idlist)[] = {
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE },
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3 },
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO5 },
+ { 0, 0 }
};
#define DRIVER_CARD_LIST DRM(idlist)
diff --git a/linux/drmP.h b/linux/drmP.h
index b48d9b1f..3b282685 100644
--- a/linux/drmP.h
+++ b/linux/drmP.h
@@ -393,6 +393,11 @@ do { \
typedef int drm_ioctl_t( struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg );
+typedef struct drm_pci_list {
+ u16 vendor;
+ u16 device;
+} drm_pci_list_t;
+
typedef struct drm_ioctl_desc {
drm_ioctl_t *func;
int auth_needed;
diff --git a/linux/drm_agpsupport.h b/linux/drm_agpsupport.h
index 9b056c75..66d1defc 100644
--- a/linux/drm_agpsupport.h
+++ b/linux/drm_agpsupport.h
@@ -272,13 +272,14 @@ drm_agp_head_t *DRM(agp_init)(void)
case INTEL_I810: head->chipset = "Intel i810"; break;
#if LINUX_VERSION_CODE >= 0x020400
+ case INTEL_I815: head->chipset = "Intel i815"; break;
case INTEL_I840: head->chipset = "Intel i840"; break;
+ case INTEL_I850: head->chipset = "Intel i850"; break;
#endif
case VIA_GENERIC: head->chipset = "VIA"; break;
case VIA_VP3: head->chipset = "VIA VP3"; break;
case VIA_MVP3: head->chipset = "VIA MVP3"; break;
-
#if LINUX_VERSION_CODE >= 0x020400
case VIA_MVP4: head->chipset = "VIA MVP4"; break;
case VIA_APOLLO_KX133: head->chipset = "VIA Apollo KX133";
@@ -294,6 +295,25 @@ drm_agp_head_t *DRM(agp_init)(void)
case AMD_IRONGATE: head->chipset = "AMD Irongate"; break;
case ALI_GENERIC: head->chipset = "ALi"; break;
case ALI_M1541: head->chipset = "ALi M1541"; break;
+
+#if LINUX_VERSION_CODE >= 0x020402
+ case ALI_M1621: head->chipset = "ALi M1621"; break;
+ case ALI_M1631: head->chipset = "ALi M1631"; break;
+ case ALI_M1632: head->chipset = "ALi M1632"; break;
+ case ALI_M1641: head->chipset = "ALi M1641"; break;
+ case ALI_M1647: head->chipset = "ALi M1647"; break;
+ case ALI_M1651: head->chipset = "ALi M1651"; break;
+#endif
+
+#if LINUX_VERSION_CODE >= 0x020406
+ case SVWRKS_HE: head->chipset = "Serverworks HE";
+ break;
+ case SVWRKS_LE: head->chipset = "Serverworks LE";
+ break;
+ case SVWRKS_GENERIC: head->chipset = "Serverworks Generic";
+ break;
+#endif
+
default: head->chipset = "Unknown"; break;
}
DRM_INFO("AGP %d.%d on %s @ 0x%08lx %ZuMB\n",
diff --git a/linux/drm_drv.h b/linux/drm_drv.h
index a28b0b5b..e1aff06d 100644
--- a/linux/drm_drv.h
+++ b/linux/drm_drv.h
@@ -506,8 +506,9 @@ static int drm_count_cards(void)
{
int num = 0;
#if defined(DRIVER_CARD_LIST)
- u_int *l;
- u_int device, vendor;
+ int i;
+ drm_pci_list_t *l;
+ u16 device, vendor;
struct pci_dev *pdev = NULL;
#endif
@@ -516,14 +517,12 @@ static int drm_count_cards(void)
#if defined(DRIVER_COUNT_CARDS)
num = DRIVER_COUNT_CARDS();
#elif defined(DRIVER_CARD_LIST)
- for (l = DRIVER_CARD_LIST; *l; l++) {
+ for (i = 0, l = DRIVER_CARD_LIST; l[i].vendor != 0; i++) {
pdev = NULL;
- device = *l & 0xFFFF;
- if (device == 0xFFFF)
- device = PCI_ANY_ID;
- vendor = (*l >> 16) & 0xFFFF;
- if (vendor == 0xFFFF)
- vendor = PCI_ANY_ID;
+ vendor = l[i].vendor;
+ device = l[i].device;
+ if(device == 0xffff) device = PCI_ANY_ID;
+ if(vendor == 0xffff) vendor = PCI_ANY_ID;
while ((pdev = pci_find_device(vendor, device, pdev))) {
num++;
}
@@ -648,7 +647,7 @@ static void __exit drm_cleanup( void )
#endif
#if __REALLY_HAVE_AGP && __REALLY_HAVE_MTRR
- if ( dev->agp && dev->agp->agp_mtrr ) {
+ if ( dev->agp && dev->agp->agp_mtrr >= 0) {
int retval;
retval = mtrr_del( dev->agp->agp_mtrr,
dev->agp->agp_info.aper_base,
diff --git a/linux/tdfx_drv.c b/linux/tdfx_drv.c
index 94e5d41c..8f975875 100644
--- a/linux/tdfx_drv.c
+++ b/linux/tdfx_drv.c
@@ -44,11 +44,15 @@
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 0
-static u_int DRM(idlist)[] = {
- 0x121A0003, /* Banshee */
- 0x121A0005, /* Voodoo3 */
- 0x121A0009, /* Voodoo5 */
- 0
+#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
+#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
+#endif
+
+static drm_pci_list_t DRM(idlist)[] = {
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE },
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3 },
+ { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO5 },
+ { 0, 0 }
};
#define DRIVER_CARD_LIST DRM(idlist)