darktux wrote:Lets just drop this.
2.5.70 is out!

unfortunately, the problem persists in 2.5.70. However, I'm happy to report that I have found a way to "port" the old bcm4400 driver to 2.5.70, and it seems to be working fine (am posting from it right now). Here is a patch against the 1.0.1 bcnet sources from Broadcomm (or are they from Asus?):
suggested filename: bcm4400-1.0.1-2.5.70-update.patch
license: Bugroff (
http://www.geocities.com/SoHo/Cafe/5947/bugroff.html)
Code: Select all
--- ../src/Makefile 2002-08-23 18:53:23.000000000 -0500
+++ Makefile 2003-05-27 17:57:25.000000000 -0500
@@ -2,10 +2,13 @@
# Makefile for building Linux Broadcom Gigabit ethernet driver as a module.
# $id$
+# set this to match your kernel compile
+CUSTOMCFLAGS=-O2 -mpreferred-stack-boundary=2 -march=athlon
+
# PREFIX may be set by the RPM build to set the effective root.
PREFIX=
ifeq ($(shell ls /lib/modules/`uname -r`/build > /dev/null 2>&1 && echo build),)
-LINUX=/usr/src/linux
+LINUX=/usr/src/linux-beta
else
LINUX=/lib/modules/`uname -r`/build
endif
@@ -16,7 +19,8 @@
CC = kgcc
endif
LD = ld
-CFLAGS=-DMODULE -D__KERNEL__ -DDBG=0 -Wall -Wstrict-prototypes -O6 -I$(LINUX)/include
+CFLAGS=-DMODULE -D__KERNEL__ -DDBG=0 -Wp,-MD,.bcm4400.o.d -Wstrict-prototypes -Wall -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe $(CUSTOMCFLAGS) -I$(LINUX)/include -I$(LINUX)/include/asm-i386/mach-default -nostdinc -iwithprefix include -DKBUILD_BASENAME=bcm4400 -DKBUILD_MODNAME=bcm4400 -c
+CFLAGS2=-DMODULE -D__KERNEL__ -DDBG=0 -Wp,-MD,.bcm4400.mod.o.d -Wstrict-prototypes -Wall -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe $(CUSTOMCFLAGS) -I$(LINUX)/include -I$(LINUX)/include/asm-i386/mach-default -nostdinc -iwithprefix include -DKBUILD_BASENAME=bcm4400 -DKBUILD_MODNAME=bcm4400 -c
ifeq ($(wildcard ~/rpmdir),)
rpmdir = /usr/src/redhat
@@ -40,22 +44,31 @@
CFLAGS += -DBCM_SMALL_DRV=1
endif
-all: bcm4400.o
+all: bcm4400.ko
tar: bcm4400.tgz
bcm4400.o: b44um.o b44proc.o b44lm.o
$(LD) -i $^ -o $@
-install: bcm4400.o
+bcm4400.mod.c: bcm4400.o
+ $(LINUX)/scripts/modpost $(LINUX)/vmlinux bcm4400.o
+
+bcm4400.mod.o: bcm4400.mod.c
+ $(CC) $(CFLAGS2) -o bcm4400.mod.o bcm4400.mod.c
+
+bcm4400.ko: bcm4400.o bcm4400.mod.o
+ $(LD) -m elf_i386 -r -o bcm4400.ko $^
+
+install: bcm4400.ko
@if [ -d $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/addon/bcm4400 ];\
- then install -m 444 bcm4400.o $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/addon/bcm4400;\
+ then install -m 444 bcm4400.ko $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/addon/bcm4400;\
elif [ -d $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net/bcm ];\
- then install -m 444 bcm4400.o $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net/bcm;\
+ then install -m 444 bcm4400.ko $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net/bcm;\
elif [ -d $(PREFIX)/lib/modules/`uname -r`/kernel ];\
then mkdir -p $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net;\
- install -m 444 bcm4400.o $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net;\
+ install -m 444 bcm4400.ko $(PREFIX)/lib/modules/`uname -r`/kernel/drivers/net;\
else mkdir -p $(PREFIX)/lib/modules/`uname -r`/net;\
- install -m 444 bcm4400.o $(PREFIX)/lib/modules/`uname -r`/net/;\
+ install -m 444 bcm4400.ko $(PREFIX)/lib/modules/`uname -r`/net/;\
fi
@if [ "$(PREFIX)" = "" ]; then /sbin/depmod -a ;\
else echo " *** Run '/sbin/depmod -a' to update the module database.";\
@@ -82,4 +95,4 @@
@make SMALL=1
clean:
- -rm -f bcm4400.o b44um.o b44proc.o b44lm.o
+ -rm -f bcm4400.o b44um.o b44proc.o b44lm.o bcm4400.ko .tmp_bcm4400.o .bcm4400.o.cmd .bcm4400.mod.o.d bcm4400.mod.c bcm4400.mod.o .bcm4400.o.d
--- ../src/b44mm.h 2002-08-23 18:53:19.000000000 -0500
+++ b44mm.h 2003-05-27 16:31:44.000000000 -0500
@@ -28,7 +28,7 @@
#include <linux/version.h>
#ifdef MODULE
#ifdef MODVERSIONS
-#include <linux/modversions.h>
+#include <config/modversions.h>
#endif
#include <linux/module.h>
#else
--- ../src/b44um.c 2002-08-23 18:53:19.000000000 -0500
+++ b44um.c 2003-05-27 20:41:18.000000000 -0500
@@ -205,7 +205,7 @@
STATIC void bcm4400_timer(unsigned long data);
STATIC void bcm4400_tx_timeout(struct net_device *dev);
STATIC int bcm4400_start_xmit(struct sk_buff *skb, struct net_device *dev);
-STATIC void bcm4400_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
+STATIC irqreturn_t bcm4400_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
#ifdef BCM_TASKLET
STATIC void bcm4400_tasklet(unsigned long data);
#endif
@@ -611,7 +611,7 @@
}
-STATIC void
+STATIC irqreturn_t
bcm4400_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
{
struct net_device *dev = (struct net_device *)dev_instance;
@@ -622,16 +622,16 @@
#endif
if (!pDevice->InitDone)
- return;
+ return IRQ_HANDLED;
if (atomic_read(&pUmDevice->intr_sem))
- return;
+ return IRQ_HANDLED;
if (test_and_set_bit(0, (void*)&pUmDevice->interrupt)) {
printk(KERN_ERR "%s: Duplicate entry of the interrupt handler by "
"processor %d.\n",
dev->name, hard_smp_processor_id());
- return;
+ return IRQ_HANDLED;
}
@@ -665,7 +665,7 @@
pUmDevice->tx_queued = 0;
netif_wake_queue(dev);
}
- return;
+ return IRQ_HANDLED;
}
1.0.1 may be out-of-date... but it should be pretty clear how to extrapolate this to some new version. Good luck.
I wish I cared enough about this to figure out what is broken with b44, but this solution should be enough to allow people with Asus motherboards to run their damn cards until the real experts figure this out... whee, now to set up agp 8x and recompile everything for ntpl!