Getting the built-in 3c509 network interface on a Dell Optiplex GXL5150 to work in Linux is a dog's cunt.
The problem seems to be that the ISA PnP stuff doesn't work and does fucking stupid things. When you insert the 3c509 module it finds two interfaces even though you have only got one, and the result is that neither of them works.
You can tell this is happening because you get entries in /proc/ioports like this:
0220-022f : 3c509 PnP 0280-028f : 3c509
which is shit.
There are various mentions of this card being an arse on the net (though nothing about this particular system specifically) and they all bang on about using this fucking DOS utility called 3c5x9cfg.exe to disable the PnP function on the card, which is no fucking use at all if you haven't got DOS. There is a similar Linux utility called 3c5x9setup, which is available as part of nictools-nopci, but this does not have an option to disable PnP so it is not much bloody use either.
Fortunately the real solution is a lot simpler and I have no fucking idea why none of the stuff on the net mentions it. The 3c509 module has a parameter nopnp which you can use to disable PnP on the fly. So all you have to do is this:
# modprobe 3c509 nopnp=1
...and now we are all as merry as lambkins on the lea. There is no spurious extra entry in /proc/ioports, there is only one interface, and it works.
Why the FUCK does NO FUCKER mention this instead of going on about this fucking useless utility which only runs under DOS? Fucksake.
As it happens, there was another cunt in my particular system, although not a real dog's cunt, at least not a full size dog, a chihuahua maybe. This was that the card had been configured to use an interrupt which was also being used by a PCI card in the system. Fuck knows why the PCI subsystem had assigned the card an interrupt which wasn't free, but it did. So I had to change the 3c509's interrupt, which the 3c5x9setup utility is able to do. It is necessary to do this WITHOUT the kernel module inserted, and it goes something like this:
# 3c5x9setup -a -p 280 -Q 9 -w
...with two notes:
1) I can't remember whether I had to use the "real" address (-p 280) or the dodgy one that you only get with PnP still active (-p 220). I think I tried both, actually. I'm pretty sure it was the real one though.
2) I also can't remember whether or not I had to use the -f parameter to get it to accept my instruction. But it's no big deal to try it without and then try it with if it didn't work without.
Of course I could go back and fuck it all up again and then unfuck it and this time remember to write down which address that I used actually worked, but I can't be arsed now that it is all working, so bollocks to it.
Another thing which was a continual pain in the arse is that all the stuff about this contains references to useful stuff written by Don Becker available on www.scyld.com. Which does not fucking work. It still seems to exist, but connections to it just time out, so none of these references are any flaming use. So whoever is in charge of that domain now, please put something on port 80 that will respond to HTTP requests, even if all it does is return a page saying to look elsewhere, otherwise I shall think that you are a great big penis.
Back to Pigeon's Nest
Be kind to pigeons