|
大家可以去ATI的官方网站上面下载了~~
~~~呵呵。。如果是2.6.10内核以上的请对源码作如下修改~~
使用方法:将我贴的代码保存下来存为8.8.25-kernel-2.6.10+.path
然后chmod +x 8.8.25-kernel-2.6.10+.patch
进入/lib/modules/fglrx/build_mod/目录~~
patch -p0 -i /path所在目录/8.8.25-kernel-2.6.10+.patch
--- agpgart_be.c 2005-01-06 9:05:02.000000000 +0100
+++ agpgart_be.c 2005-01-06 9:19:16.000000000 +0100
@@ -255,6 +255,12 @@
}
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+#define firegl_pci_find_class(class,from) pci_get_class(class,from)
+#else
+#define firegl_pci_find_class(class,from) pci_find_class(class,from)
+#endif
+
int agp_backend_acquire(void)
{
if (agp_bridge.type == NOT_SUPPORTED) {
@@ -718,7 +724,7 @@
* AGP devices and collect their data.
*/
- while ((device = pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
+ while ((device = firegl_pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
device)) != NULL) {
pci_read_config_dword(device, 0x04, &scratch);
@@ -794,6 +800,13 @@
command &= ~0x00000001;
}
}
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ // the reference count has been increased in agp_backend_initialize.
+ if (device)
+ pci_dev_put(device);
+#endif
+
/*
* PASS2: Figure out the 4X/2X/1X setting and enable the
* target (our motherboard chipset).
@@ -839,8 +852,9 @@
* command registers.
*/
- while ((device = pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
+ while ((device = firegl_pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
device)) != NULL) {
+
pci_read_config_dword(device, 0x04, &scratch);
if (!(scratch & 0x00100000))
@@ -871,6 +885,12 @@
}
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ // the reference count has been increased in agp_backend_initialize.
+ if (device)
+ pci_dev_put(device);
+#endif
+
return 0; /* success */
}
@@ -5119,8 +5139,9 @@
* AGP devices and collect their data.
*/
- while ((device = pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
+ while ((device = firegl_pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
device)) != NULL) {
+
pci_read_config_dword(device, 0x04, &scratch);
if (!(scratch & 0x00100000))
@@ -5187,6 +5208,13 @@
command &= ~0x00000001;
}
}
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ // the reference count has been increased in agp_backend_initialize.
+ if (device)
+ pci_dev_put(device);
+#endif
+
/*
* PASS2: Figure out the 4X/2X/1X setting and enable the
* target (our motherboard chipset).
@@ -5217,8 +5245,9 @@
* command registers.
*/
- while ((device = pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
+ while ((device = firegl_pci_find_class(PCI_CLASS_DISPLAY_VGA << 8,
device)) != NULL) {
+
pci_read_config_dword(device, 0x04, &scratch);
if (!(scratch & 0x00100000))
@@ -5249,6 +5278,12 @@
}
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ // the reference count has been increased in agp_backend_initialize.
+ if (device)
+ pci_dev_put(device);
+#endif
+
return(0); /* success */
}
@@ -6494,10 +6529,10 @@
// locate host bridge device
#ifdef __x86_64__
do {
- dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, dev);
+ dev = firegl_pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, dev);
} while((dev) && !agp_check_supported_device(dev));
#else
- if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) == NULL)
+ if ((dev = firegl_pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) == NULL)
return -ENODEV;
#endif
@@ -7040,8 +7075,12 @@
&agp_bridge.mode);
return hp_zx1_setup(dev);
}
- dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, dev);
+ dev = firegl_pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, dev);
} while (dev);
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ if(dev) pci_dev_put(dev);
+#endif
return -ENODEV;
}
#endif /* __ia64__ */
@@ -7462,6 +7501,11 @@
agp_bridge.free_gatt_table();
vfree(agp_bridge.key_list);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
+ // decrease the reference count.
+ pci_dev_put(agp_bridge.dev);
+#endif
+
if (agp_bridge.needs_scratch_page == TRUE) {
agp_bridge.scratch_page &= ~(0x00000fff);
agp_bridge.agp_destroy_page((unsigned long)
--- firegl_public.c 2005-01-06 9:05:02.000000000 +0100
+++ firegl_public.c 2005-01-06 9:19:16.000000000 +0100
@@ -88,6 +88,7 @@
#include <linux/smp_lock.h>
// newer SuSE kernels need this
#include <linux/highmem.h>
+#include <linux/pagemap.h> // for lock_page and unlock_page
#if defined(__ia64__)
#include <linux/vmalloc.h> |
|