Hi, I've started preparing the attached patch backported to our version of the driver from the upstream workaround published in the bugzilla; unfortunately it fails with: │ /usr/src/modules/fglrx/firegl_public.c:4006: warning: passing argument 1 o │ │ LD [M] /usr/src/modules/fglrx/fglrx.o │ │ Building modules, stage 2. │ │ MODPOST 1 modules │ │ FATAL: modpost: GPL-incompatible module fglrx.ko uses GPL-only symbol 'par │ │ make[2]: *** [__modpost] Error 1 │
I'll give a try to the new release. Cheers, -- Loïc Minier <[EMAIL PROTECTED]>
--- fglrx-driver-8.31.5/debian/changelog +++ fglrx-driver-8.31.5/debian/changelog @@ -1,3 +1,13 @@ +fglrx-driver (8.31.5-1.1) experimental; urgency=low + + * Non-maintainer upload. + * New patch, 14_2.6.20-i386-syscalls, to support 2.6.20 kernels on x86; + backported from + <http://whoopie.gmxhome.de/linux/patches/2.6.20/fglrx-8.34.8-for-2.6.20.patch>; + closes: #410111. + + -- Loic Minier <[EMAIL PROTECTED]> Tue, 27 Feb 2007 14:24:28 +0100 + fglrx-driver (8.31.5-1) experimental; urgency=low * New upstream version. (Closes: #399136, #399301) --- fglrx-driver-8.31.5.orig/debian/patches/14_2.6.20-i386-syscalls.patch +++ fglrx-driver-8.31.5/debian/patches/14_2.6.20-i386-syscalls.patch @@ -0,0 +1,109 @@ +--- firegl_public.c.orig 2007-02-27 14:12:10.000000000 +0100 ++++ firegl_public.c 2007-02-27 14:20:11.000000000 +0100 +@@ -187,6 +187,82 @@ + int errno; + #endif // __ia64__ + ++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19) ++#if defined(__i386__) ++ ++#define __syscall_return(type, res) \ ++do { \ ++ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ ++ errno = -(res); \ ++ res = -1; \ ++ } \ ++ return (type) (res); \ ++} while (0) ++ ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++type name(type1 arg1,type2 arg2) \ ++{ \ ++long __res; \ ++__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ ++ : "=a" (__res) \ ++ : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \ ++ : "memory"); \ ++__syscall_return(type,__res); \ ++} ++ ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++type name(type1 arg1,type2 arg2,type3 arg3) \ ++{ \ ++long __res; \ ++__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ ++ : "=a" (__res) \ ++ : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ ++ "d" ((long)(arg3)) : "memory"); \ ++__syscall_return(type,__res); \ ++} ++ ++#elif defined(__x86_64__) ++#define __syscall_clobber "r11","rcx","memory" ++ ++#define __syscall_return(type, res) \ ++do { \ ++ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ ++ errno = -(res); \ ++ res = -1; \ ++ } \ ++ return (type) (res); \ ++} while (0) ++ ++#define __syscall "syscall" ++ ++#define _syscall2(type,name,type1,arg1,type2,arg2) \ ++type name(type1 arg1,type2 arg2) \ ++{ \ ++long __res; \ ++__asm__ volatile (__syscall \ ++ : "=a" (__res) \ ++ : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)) : __syscall_clobber ); \ ++__syscall_return(type,__res); \ ++} ++ ++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ ++type name(type1 arg1,type2 arg2,type3 arg3) \ ++{ \ ++long __res; \ ++__asm__ volatile (__syscall \ ++ : "=a" (__res) \ ++ : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ ++ "d" ((long)(arg3)) : __syscall_clobber); \ ++__syscall_return(type,__res); \ ++} ++ ++#else ++ ++#error "please fix the fglrx syscall mess" ++ ++#endif /* __i386__ */ ++#endif /* 2.6.19 */ ++ + // int mlock(const void *addr, size_t len); + _syscall2(int, mlock, const void *, addr, size_t, len ) + // int munlock(const void *addr, size_t len); +@@ -2514,11 +2590,23 @@ + #else + static void ATI_API_CALL (*irq_handler_func)(int, void*, void*); /* function pointer variable */ + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) + static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1, struct pt_regs *regs) + { + irq_handler_func(irq, arg1, regs); + return IRQ_HANDLED; + } ++#else ++static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1) ++{ ++ irq_handler_func(irq, arg1, get_irq_regs()); ++ return IRQ_HANDLED; ++} ++#endif ++ ++#ifndef SA_SHIRQ ++#define SA_SHIRQ IRQF_SHARED ++#endif + + int ATI_API_CALL __ke_request_irq(unsigned int irq, + void (*ATI_API_CALL handler)(int, void *, void *),