patch-2.4.20 linux-2.4.20/drivers/net/ni65.c
Next file: linux-2.4.20/drivers/net/ns83820.c
Previous file: linux-2.4.20/drivers/net/natsemi.c
Back to the patch index
Back to the overall index
- Lines: 85
- Date:
Thu Nov 28 15:53:14 2002
- Orig file:
linux-2.4.19/drivers/net/ni65.c
- Orig date:
Sun Sep 30 12:26:07 2001
diff -urN linux-2.4.19/drivers/net/ni65.c linux-2.4.20/drivers/net/ni65.c
@@ -353,18 +353,21 @@
unsigned long flags;
for(i=0;i<NUM_CARDS;i++) {
- if(check_region(ioaddr, cards[i].total_size))
+ if(!request_region(ioaddr, cards[i].total_size, cards[i].cardname))
continue;
if(cards[i].id_offset >= 0) {
if(inb(ioaddr+cards[i].id_offset+0) != cards[i].id0 ||
inb(ioaddr+cards[i].id_offset+1) != cards[i].id1) {
+ release_region(ioaddr, cards[i].total_size);
continue;
}
}
if(cards[i].vendor_id) {
for(j=0;j<3;j++)
- if(inb(ioaddr+cards[i].addr_offset+j) != cards[i].vendor_id[j])
+ if(inb(ioaddr+cards[i].addr_offset+j) != cards[i].vendor_id[j]) {
+ release_region(ioaddr, cards[i].total_size);
continue;
+ }
}
break;
}
@@ -374,8 +377,10 @@
for(j=0;j<6;j++)
dev->dev_addr[j] = inb(ioaddr+cards[i].addr_offset+j);
- if( (j=ni65_alloc_buffer(dev)) < 0)
+ if( (j=ni65_alloc_buffer(dev)) < 0) {
+ release_region(ioaddr, cards[i].total_size);
return j;
+ }
p = (struct priv *) dev->priv;
p->cmdr_addr = ioaddr + cards[i].cmd_offset;
p->cardno = i;
@@ -386,6 +391,7 @@
if( (j=readreg(CSR0)) != 0x4) {
printk(KERN_ERR "can't RESET card: %04x\n",j);
ni65_free_buffer(p);
+ release_region(ioaddr, cards[p->cardno].total_size);
return -EAGAIN;
}
@@ -437,6 +443,7 @@
if(i == 5) {
printk("Can't detect DMA channel!\n");
ni65_free_buffer(p);
+ release_region(ioaddr, cards[p->cardno].total_size);
return -EAGAIN;
}
dev->dma = dmatab[i];
@@ -455,6 +462,7 @@
{
printk("Failed to detect IRQ line!\n");
ni65_free_buffer(p);
+ release_region(ioaddr, cards[p->cardno].total_size);
return -EAGAIN;
}
printk("IRQ %d (autodetected).\n",dev->irq);
@@ -467,14 +475,10 @@
{
printk("%s: Can't request dma-channel %d\n",dev->name,(int) dev->dma);
ni65_free_buffer(p);
+ release_region(ioaddr, cards[p->cardno].total_size);
return -EAGAIN;
}
- /*
- * Grab the region so we can find another board.
- */
- request_region(ioaddr,cards[p->cardno].total_size,cards[p->cardno].cardname);
-
dev->base_addr = ioaddr;
dev->open = ni65_open;
@@ -1101,7 +1105,7 @@
{
short len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
struct tmd *tmdp;
- long flags;
+ unsigned long flags;
#ifdef XMT_VIA_SKB
if( (unsigned long) (skb->data + skb->len) > 0x1000000) {
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)