diff -Nru fglrx-8.582.orig/drm_os_linux.h fglrx-8.582/drm_os_linux.h
--- fglrx-8.582.orig/drm_os_linux.h	2009-05-11 12:31:31.000000000 +0200
+++ fglrx-8.582/drm_os_linux.h	2009-05-11 12:53:48.414214692 +0200
@@ -42,7 +42,9 @@
 #define DRM_IRQ_ARGS		int irq, void *arg, struct pt_regs *regs
 /** backwards compatibility with old irq return values */
 #ifndef IRQ_HANDLED
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 30)
 typedef void irqreturn_t;
+#endif
 #define IRQ_HANDLED   /* nothing */
 #define IRQ_NONE      /* nothing */
 #endif
diff -Nru fglrx-8.582.orig/firegl_public.c fglrx-8.582/firegl_public.c
--- fglrx-8.582.orig/firegl_public.c	2009-05-11 12:31:31.000000000 +0200
+++ fglrx-8.582/firegl_public.c	2009-05-11 12:53:48.414214692 +0200
@@ -38,6 +38,7 @@
 #if !defined(CONFIG_X86_BIGSMP)
 #if !defined(CONFIG_X86_VISWS)
 #if !defined(CONFIG_X86_GENERICARCH)
+#if !defined(CONFIG_X86_GENERIC)
 #error unknown or undefined architecture configured
 #endif
 #endif
@@ -47,6 +48,7 @@
 #endif
 #endif
 #endif
+#endif
 
 /* The dirty-page-tracking patch included in NLD 9 SMP kernels defines
  * a static inline function that uses a GPL-only symbol in a header
@@ -171,6 +173,14 @@
 #include "kcl_io.h"
 #include "kcl_debug.h"
 
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 29)
+#undef pci_enable_msi
+int pci_enable_msi(struct pci_dev *pdev)
+{
+return pci_enable_msi_block(pdev, 1);
+}
+#endif
+
 // ============================================================
 
 // VM_SHM is deleted in 2.6.18 or higher kernels.
