Manfred Spraul wrote:
>
> I found 2 bugs in several network drivers:
>
> * dev->mem_start: NULL means "not command line configuration" 0xffffffff
> means "default".
> several drivers only check for NULL, not for 0xffffffff.
I think that's worth another "ehttp://www...", don't you?
> * something is wrong in the vortex initialization: I don't have such a
> card, but the driver didn't return an error message on insmod. I'm not
> sure if my fix is correct.
That was intentional - dhinds suggested that if the hardware
isn't present the driver should float about in memory anyway.
That is the current behaviour of 3c575_cb.c I forget the
rationale for this. Perhaps David can remind me?
There are a fair few pending 3c59x updates wrt Linus'
tree - small stuff. Most are in the zerocopy patch,
and there's a delta on top of that here.
Jeff Garzik wrote:
>
>
> IMHO vortex should be trying to initialize EISA regardless of the
> results of the PCI probe... Andrew?
I guess so. Testing is hard - EISA vorticies are hen's teeth. I've
heard from only two people who have such hardware in a year.
I've made the below change. Pending enlightenment from
DavidH and some testing from my sole EISA Vortex person,
I'll flush this stuff out to DavidM. Thanks.
--- drivers/net/3c59x.c 2001/02/14 11:51:43 1.41
+++ drivers/net/3c59x.c 2001/02/14 13:23:49
@@ -866,8 +866,7 @@
}
rc = vortex_probe1(NULL, ioaddr, inw(ioaddr + 0xC88) >> 12,
- EISA_TBL_OFFSET,
- vortex_cards_found);
+ EISA_TBL_OFFSET, vortex_cards_found);
if (rc == 0)
vortex_cards_found++;
else
@@ -1005,7 +1004,7 @@
pdev->driver_data = dev;
/* The lower four bits are the media type. */
- if (dev->mem_start) {
+ if (dev->mem_start && dev->mem_start != ~0UL) {
/*
* AKPM: ewww.. The 'options' param is passed in as the third arg to the
* LILO 'ether=' argument for non-modular use
@@ -2794,18 +2793,17 @@
static int __init vortex_init (void)
{
- int rc;
-
- rc = pci_module_init(&vortex_driver);
- if (rc < 0) {
- rc = vortex_eisa_init();
- if (rc > 0)
- vortex_have_eisa = 1;
- } else {
+ int pci_rc, eisa_rc;
+
+ pci_rc = pci_module_init(&vortex_driver);
+ eisa_rc = vortex_eisa_init();
+
+ if (pci_rc == 0)
vortex_have_pci = 1;
- }
+ if (eisa_rc > 0)
+ vortex_have_eisa = 1;
- return rc;
+ return (vortex_have_pci + vortex_have_eisa) ? 0 : -ENODEV;
}