Breaking all the rules by copying 2.6.25 updates from other drivers on a
"monkey see, monkey do" basis, I came up with three patches which let
unicorn-0.9.3 build on 2.6.24. The modules even insert OK but I haven't
tested more with them because 2.6.24-etchnhalf seems buggy on my network card.
The patches are attached, probably a hopelessly naive attempt to update
the driver anyway :) As I say not tested in live running since I've
not yet connected my Unicorn to a phone line !
The same three patches also let 0.9.3 compile OK on 2.6.25, however the
link stage then fails with GPL violations (?!). Building in a patched
/usr/src/modules with "m-a -t -o build unicorn" I get the following.
Doubly annoying since I want the PCI driver and don't care about USB !
dh_clean -k
# Build and install the module
if [ 6 = 4 ]; then \
/usr/bin/make modules M=/usr/src/modules/unicorn
HPATH=/lib/modules/2.6.25-2-686/build/include
KERNEL_SOURCES=/lib/modules/2.6.25-2-686/build; \
/usr/bin/make only_modules_install
KERNEL_SOURCES=/lib/modules/2.6.25-2-686/build \
DESTDIR=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686
KVERS=2.6.25-2-686; \
elif [ 6 = 6 ]; then \
/usr/bin/make -C libm modules; \
/usr/bin/make -C /lib/modules/2.6.25-2-686/build
SUBDIRS=/usr/src/modules/unicorn/unicorn_pci \
INSTALL_MOD_PATH=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686
modules modules_install; \
/usr/bin/make -C /lib/modules/2.6.25-2-686/build
SUBDIRS=/usr/src/modules/unicorn/unicorn_usb \
INSTALL_MOD_PATH=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686
modules modules_install; \
fi
make[2]: Entering directory `/usr/src/modules/unicorn/libm'
make[2]: Nothing to be done for `modules'.
make[2]: Leaving directory `/usr/src/modules/unicorn/libm'
make[2]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/linrapi.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/msw.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/crc.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../amu/amas.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../amu/amu.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../unicorn_atm/unicorn_atmdrv.o
CC [M] /usr/src/modules/unicorn/unicorn_pci/../unicorn_eth/unicorn_ethdrv.o
LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.o
LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.o
Building modules, stage 2.
MODPOST 2 modules
LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.ko
LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.ko
INSTALL /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.ko
INSTALL /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.ko
DEPMOD 2.6.25-2-686
make[2]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
make[2]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/linrapi.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/msw.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/crc.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../amu/amas.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../amu/amu.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../unicorn_atm/unicorn_atmdrv.o
CC [M] /usr/src/modules/unicorn/unicorn_usb/../unicorn_eth/unicorn_ethdrv.o
LD [M] /usr/src/modules/unicorn/unicorn_usb/unicorn_usb_atm.o
LD [M] /usr/src/modules/unicorn/unicorn_usb/unicorn_usb_eth.o
Building modules, stage 2.
MODPOST 2 modules
FATAL: modpost: GPL-incompatible module unicorn_usb_eth.ko uses GPL-only
symbol 'usb_unlink_urb'
make[3]: *** [__modpost] Error 1
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
Index: unicorn/unicorn_pci/unicorn_pcidrv.c
===================================================================
--- unicorn.orig/unicorn_pci/unicorn_pcidrv.c 2008-08-07 12:39:04.000000000 +0100
+++ unicorn/unicorn_pci/unicorn_pcidrv.c 2008-08-07 12:39:42.000000000 +0100
@@ -992,7 +992,11 @@
phys_base,dev->mem,dev->mem_size);
// Initialize and connect the interrupt
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
status = request_irq(pci_dev->irq, unicorn_isr, SA_SHIRQ, "unicorn_pci", dev);
+#else
+ status = request_irq(pci_dev->irq, unicorn_isr, IRQF_SHARED, "unicorn_pci", dev);
+#endif
if (status) {
WARN("Failed to connect Interrupt,status=%d\n",status);
return status;
Index: unicorn/unicorn_usb/unicorn_usbdrv.c
===================================================================
--- unicorn.orig/unicorn_usb/unicorn_usbdrv.c 2008-08-07 12:36:13.000000000 +0100
+++ unicorn/unicorn_usb/unicorn_usbdrv.c 2008-08-07 12:36:16.000000000 +0100
@@ -148,7 +148,9 @@
unsigned int pipe, void *buf, int length, int packet_size, usb_complete_t complete,
void *context)
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
spin_lock_init(&urb->lock);
+#endif
urb->dev=dev;
urb->pipe=pipe;
urb->transfer_buffer=buf;
Index: unicorn/unicorn_eth/unicorn_ethdrv.c
===================================================================
--- unicorn.orig/unicorn_eth/unicorn_ethdrv.c 2008-08-07 12:47:19.000000000 +0100
+++ unicorn/unicorn_eth/unicorn_ethdrv.c 2008-08-07 12:47:22.000000000 +0100
@@ -1391,7 +1391,9 @@
}
unicorn_ethdrv = drv = eth_dev->priv;
memset(drv, 0, sizeof(struct unicorn_ethdrv));
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
SET_MODULE_OWNER(eth_dev);
+#endif
drv->dev = eth_dev;
drv->adsl_status = ADSL_STATUS_NOHARDWARE;
drv->vpi = VPI;