diff options
| author | Jeff Garzik <jgarzik@redhat.com> | 2003-04-20 18:39:27 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2003-04-20 18:39:27 -0400 |
| commit | b6b44ebfa139b5de44257388a64b016860b3ec84 (patch) | |
| tree | addb8d0bfac94680c9747ee168783922e2ddf0cf | |
| parent | 139d2ebbcbb4928575763465d32ee295b238a61b (diff) | |
net driver cleanup, volume 6
Affected drivers: atp, de600, de620, eepro, eexpress, lp486e,
3c589_cs, axnet_cs, fmvj18x_cs, nmclan_cs, pcnet_cs, smc91c92_cs,
xirc2ps_cs, sk98lin, xircom_cb, xircom_tulip_cb, airo, arlan,
netwave_cs, orinoco, ray_cs, wavelan, znet
98% contributed by Andrew Morton
28 files changed, 107 insertions, 104 deletions
diff --git a/drivers/net/atp.c b/drivers/net/atp.c index 2deac9a550f3..e22e5553779e 100644 --- a/drivers/net/atp.c +++ b/drivers/net/atp.c @@ -203,7 +203,7 @@ static void hardware_init(struct net_device *dev); static void write_packet(long ioaddr, int length, unsigned char *packet, int pad, int mode); static void trigger_send(long ioaddr, int length); static int atp_send_packet(struct sk_buff *skb, struct net_device *dev); -static void atp_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t atp_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void net_rx(struct net_device *dev); static void read_block(long ioaddr, int length, unsigned char *buffer, int data_mode); static int net_close(struct net_device *dev); @@ -560,7 +560,7 @@ static int atp_send_packet(struct sk_buff *skb, struct net_device *dev) struct net_local *lp = (struct net_local *)dev->priv; long ioaddr = dev->base_addr; int length; - long flags; + unsigned long flags; length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; @@ -596,17 +596,19 @@ static int atp_send_packet(struct sk_buff *skb, struct net_device *dev) /* The typical workload of the driver: Handle the network interface interrupts. */ -static void atp_interrupt(int irq, void *dev_instance, struct pt_regs * regs) +static irqreturn_t +atp_interrupt(int irq, void *dev_instance, struct pt_regs * regs) { struct net_device *dev = (struct net_device *)dev_instance; struct net_local *lp; long ioaddr; static int num_tx_since_rx; int boguscount = max_interrupt_work; + int handled = 0; if (dev == NULL) { printk(KERN_ERR "ATP_interrupt(): irq %d for unknown device.\n", irq); - return; + return IRQ_NONE; } ioaddr = dev->base_addr; lp = (struct net_local *)dev->priv; @@ -626,6 +628,7 @@ static void atp_interrupt(int irq, void *dev_instance, struct pt_regs * regs) if (net_debug > 5) printk("loop status %02x..", status); if (status & (ISR_RxOK<<3)) { + handled = 1; write_reg(ioaddr, ISR, ISR_RxOK); /* Clear the Rx interrupt. */ do { int read_status = read_nibble(ioaddr, CMR1); @@ -648,6 +651,7 @@ static void atp_interrupt(int irq, void *dev_instance, struct pt_regs * regs) break; } while (--boguscount > 0); } else if (status & ((ISR_TxErr + ISR_TxOK)<<3)) { + handled = 1; if (net_debug > 6) printk("handling Tx done.."); /* Clear the Tx interrupt. We should check for too many failures and reinitialize the adapter. */ @@ -712,7 +716,7 @@ static void atp_interrupt(int irq, void *dev_instance, struct pt_regs * regs) spin_unlock(&lp->lock); if (net_debug > 5) printk("exiting interrupt.\n"); - return; + return IRQ_RETVAL(handled); } #ifdef TIMED_CHECKER diff --git a/drivers/net/de600.c b/drivers/net/de600.c index 23d87e5f185e..62c70b45e555 100644 --- a/drivers/net/de600.c +++ b/drivers/net/de600.c @@ -258,7 +258,7 @@ static int de600_start_xmit(struct sk_buff *skb, struct net_device *dev) * Handle the network interface interrupts. */ -static void de600_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t de600_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = dev_id; u8 irq_status; @@ -268,7 +268,7 @@ static void de600_interrupt(int irq, void *dev_id, struct pt_regs * regs) /* This might just as well be deleted now, no crummy drivers present :-) */ if ((dev == NULL) || (DE600_IRQ != irq)) { printk(KERN_ERR "%s: bogus interrupt %d\n", dev?dev->name:"DE-600", irq); - return; + return IRQ_NONE; } spin_lock(&de600_lock); @@ -303,7 +303,7 @@ static void de600_interrupt(int irq, void *dev_id, struct pt_regs * regs) if (retrig) trigger_interrupt(dev); spin_unlock(&de600_lock); - return; + return IRQ_HANDLED; } static int de600_tx_intr(struct net_device *dev, int irq_status) diff --git a/drivers/net/de600.h b/drivers/net/de600.h index 3bbc770904c4..269aa4b61fbb 100644 --- a/drivers/net/de600.h +++ b/drivers/net/de600.h @@ -125,7 +125,7 @@ static struct net_device_stats *get_stats(struct net_device *dev); static int de600_start_xmit(struct sk_buff *skb, struct net_device *dev); /* Dispatch from interrupts. */ -static void de600_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t de600_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int de600_tx_intr(struct net_device *dev, int irq_status); static void de600_rx_intr(struct net_device *dev); diff --git a/drivers/net/de620.c b/drivers/net/de620.c index 1ad20c3313e6..2c24105028cd 100644 --- a/drivers/net/de620.c +++ b/drivers/net/de620.c @@ -221,7 +221,7 @@ static void de620_set_multicast_list(struct net_device *); static int de620_start_xmit(struct sk_buff *, struct net_device *); /* Dispatch from interrupts. */ -static void de620_interrupt(int, void *, struct pt_regs *); +static irqreturn_t de620_interrupt(int, void *, struct pt_regs *); static int de620_rx_intr(struct net_device *); /* Initialization */ @@ -591,7 +591,8 @@ static int de620_start_xmit(struct sk_buff *skb, struct net_device *dev) * Handle the network interface interrupts. * */ -static void de620_interrupt(int irq_in, void *dev_id, struct pt_regs *regs) +static irqreturn_t +de620_interrupt(int irq_in, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; byte irq_status; @@ -617,6 +618,7 @@ static void de620_interrupt(int irq_in, void *dev_id, struct pt_regs *regs) netif_wake_queue(dev); spin_unlock(&de620_lock); + return IRQ_HANDLED; } /************************************** diff --git a/drivers/net/eepro.c b/drivers/net/eepro.c index 59b6945f4baa..a868d3abbe22 100644 --- a/drivers/net/eepro.c +++ b/drivers/net/eepro.c @@ -307,7 +307,7 @@ extern int eepro_probe(struct net_device *dev); static int eepro_probe1(struct net_device *dev, short ioaddr); static int eepro_open(struct net_device *dev); static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev); -static void eepro_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t eepro_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void eepro_rx(struct net_device *dev); static void eepro_transmit_interrupt(struct net_device *dev); static int eepro_close(struct net_device *dev); @@ -1104,8 +1104,6 @@ static int eepro_open(struct net_device *dev) /* enabling rx */ eepro_en_rx(ioaddr); - MOD_INC_USE_COUNT; - return 0; } @@ -1178,17 +1176,18 @@ static int eepro_send_packet(struct sk_buff *skb, struct net_device *dev) /* The typical workload of the driver: Handle the network interface interrupts. */ -static void +static irqreturn_t eepro_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = (struct net_device *)dev_id; /* (struct net_device *)(irq2dev_map[irq]);*/ struct eepro_local *lp; int ioaddr, status, boguscount = 20; + int handled = 0; if (dev == NULL) { printk (KERN_ERR "eepro_interrupt(): irq %d for unknown device.\\n", irq); - return; + return IRQ_NONE; } lp = (struct eepro_local *)dev->priv; @@ -1202,6 +1201,7 @@ eepro_interrupt(int irq, void *dev_id, struct pt_regs * regs) while (((status = inb(ioaddr + STATUS_REG)) & (RX_INT|TX_INT)) && (boguscount--)) { + handled = 1; if (status & RX_INT) { if (net_debug > 4) printk(KERN_DEBUG "%s: packet received interrupt.\n", dev->name); @@ -1233,7 +1233,7 @@ eepro_interrupt(int irq, void *dev_id, struct pt_regs * regs) printk(KERN_DEBUG "%s: exiting eepro_interrupt routine.\n", dev->name); spin_unlock(&lp->lock); - return; + return IRQ_RETVAL(handled); } static int eepro_close(struct net_device *dev) @@ -1275,8 +1275,6 @@ static int eepro_close(struct net_device *dev) /* Update the statistics here. What statistics? */ - MOD_DEC_USE_COUNT; - return 0; } diff --git a/drivers/net/eexpress.c b/drivers/net/eexpress.c index 675430afd4a3..806ad0377d73 100644 --- a/drivers/net/eexpress.c +++ b/drivers/net/eexpress.c @@ -252,7 +252,7 @@ static void eexp_timeout(struct net_device *dev); static struct net_device_stats *eexp_stats(struct net_device *dev); static int eexp_xmit(struct sk_buff *buf, struct net_device *dev); -static void eexp_irq(int irq, void *dev_addr, struct pt_regs *regs); +static irqreturn_t eexp_irq(int irq, void *dev_addr, struct pt_regs *regs); static void eexp_set_multicast(struct net_device *dev); /* @@ -761,7 +761,7 @@ static void eexp_cmd_clear(struct net_device *dev) } } -static void eexp_irq(int irq, void *dev_info, struct pt_regs *regs) +static irqreturn_t eexp_irq(int irq, void *dev_info, struct pt_regs *regs) { struct net_device *dev = dev_info; struct net_local *lp; @@ -772,7 +772,7 @@ static void eexp_irq(int irq, void *dev_info, struct pt_regs *regs) { printk(KERN_WARNING "eexpress: irq %d for unknown device\n", irq); - return; + return IRQ_NONE; } lp = (struct net_local *)dev->priv; @@ -860,7 +860,7 @@ static void eexp_irq(int irq, void *dev_info, struct pt_regs *regs) outw(old_write_ptr, ioaddr+WRITE_PTR); spin_unlock(&lp->lock); - return; + return IRQ_HANDLED; } /* diff --git a/drivers/net/lp486e.c b/drivers/net/lp486e.c index 52be81396ded..72a2ee6ab655 100644 --- a/drivers/net/lp486e.c +++ b/drivers/net/lp486e.c @@ -377,7 +377,7 @@ static char init_setup[14] = { static int i596_open(struct net_device *dev); static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev); -static void i596_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int i596_close(struct net_device *dev); static struct net_device_stats *i596_get_stats(struct net_device *dev); static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd); @@ -1160,7 +1160,7 @@ i596_handle_CU_completion(struct net_device *dev, spin_unlock_irqrestore(&lp->cmd_lock, flags); } -static void +static irqreturn_t i596_interrupt (int irq, void *dev_instance, struct pt_regs *regs) { struct net_device *dev = (struct net_device *) dev_instance; struct i596_private *lp; @@ -1229,7 +1229,7 @@ i596_interrupt (int irq, void *dev_instance, struct pt_regs *regs) { CA(); out: - return; + return IRQ_HANDLED; } static int i596_close(struct net_device *dev) { diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index d0e3da99b8fd..83c53ae05658 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c @@ -249,6 +249,7 @@ static dev_link_t *tc589_attach(void) link->conf.Present = PRESENT_OPTION; /* The EL3-specific entries in the device structure. */ + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &el3_start_xmit; dev->set_config = &el3_config; dev->get_stats = &el3_get_stats; @@ -740,7 +741,6 @@ static int el3_open(struct net_device *dev) return -ENODEV; link->open++; - MOD_INC_USE_COUNT; netif_start_queue(dev); tc589_reset(dev); @@ -1148,8 +1148,6 @@ static int el3_close(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index 36d9b30b2bd2..aa9f4f0febbf 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c @@ -98,7 +98,7 @@ static int axnet_event(event_t event, int priority, static int axnet_open(struct net_device *dev); static int axnet_close(struct net_device *dev); static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); -static void ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs); static void ei_watchdog(u_long arg); static void axnet_reset_8390(struct net_device *dev); @@ -122,7 +122,7 @@ static int axdev_init(struct net_device *dev); static void AX88190_init(struct net_device *dev, int startp); static int ax_open(struct net_device *dev); static int ax_close(struct net_device *dev); -static void ax_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs *regs); /*====================================================================*/ @@ -687,7 +687,6 @@ static int axnet_open(struct net_device *dev) return -ENODEV; link->open++; - MOD_INC_USE_COUNT; request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, dev_info, dev); @@ -719,8 +718,6 @@ static int axnet_close(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } /* axnet_close */ @@ -757,11 +754,11 @@ static void axnet_reset_8390(struct net_device *dev) /*====================================================================*/ -static void ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs) { axnet_dev_t *info = dev_id; info->stale = 0; - ax_interrupt(irq, dev_id, regs); + return ax_interrupt(irq, dev_id, regs); } static void ei_watchdog(u_long arg) @@ -1345,17 +1342,18 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev) * needed. */ -static void ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = dev_id; long e8390_base; int interrupts, nr_serviced = 0, i; struct ei_device *ei_local; - + int handled = 0; + if (dev == NULL) { printk ("net_interrupt(): irq %d for unknown device.\n", irq); - return; + return IRQ_NONE; } e8390_base = dev->base_addr; @@ -1378,7 +1376,7 @@ static void ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) inb_p(e8390_base + EN0_IMR)); #endif spin_unlock(&ei_local->page_lock); - return; + return IRQ_NONE; } if (ei_debug > 3) @@ -1399,6 +1397,8 @@ static void ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) interrupts = 0; break; } + handled = 1; + /* AX88190 bug fix. */ outb_p(interrupts, e8390_base + EN0_ISR); for (i = 0; i < 10; i++) { @@ -1430,6 +1430,7 @@ static void ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) if (interrupts && ei_debug) { + handled = 1; if (nr_serviced >= MAX_SERVICE) { /* 0xFF is valid for a card removal */ @@ -1448,7 +1449,7 @@ static void ax_interrupt(int irq, void *dev_id, struct pt_regs * regs) outb_p(ENISR_ALL, e8390_base + EN0_IMR); spin_unlock(&ei_local->page_lock); - return; + return IRQ_RETVAL(handled); } /** @@ -1842,6 +1843,8 @@ static int axdev_init(struct net_device *dev) if (ei_debug > 1) printk(version_8390); + SET_MODULE_OWNER(dev); + if (dev->priv == NULL) { struct ei_device *ei_local; diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c index a43a36636dbd..dc6557201ab9 100644 --- a/drivers/net/pcmcia/fmvj18x_cs.c +++ b/drivers/net/pcmcia/fmvj18x_cs.c @@ -314,6 +314,7 @@ static dev_link_t *fmvj18x_attach(void) link->conf.IntType = INT_MEMORY_AND_IO; /* The FMVJ18x specific entries in the device structure. */ + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &fjn_start_xmit; dev->set_config = &fjn_config; dev->get_stats = &fjn_get_stats; @@ -1287,8 +1288,6 @@ static int fjn_open(struct net_device *dev) lp->open_time = jiffies; netif_start_queue(dev); - MOD_INC_USE_COUNT; - return 0; } /* fjn_open */ @@ -1323,7 +1322,6 @@ static int fjn_close(struct net_device *dev) link->open--; if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; return 0; } /* fjn_close */ @@ -1369,9 +1367,11 @@ static void set_rx_mode(struct net_device *dev) memset(mc_filter, 0, sizeof(mc_filter)); for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count; - i++, mclist = mclist->next) - set_bit(ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f, - mc_filter); + i++, mclist = mclist->next) { + unsigned int bit = + ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x3f; + mc_filter[bit >> 3] |= (1 << bit); + } } save_flags(flags); diff --git a/drivers/net/pcmcia/nmclan_cs.c b/drivers/net/pcmcia/nmclan_cs.c index c4c199585ad8..84b58d18166e 100644 --- a/drivers/net/pcmcia/nmclan_cs.c +++ b/drivers/net/pcmcia/nmclan_cs.c @@ -515,6 +515,7 @@ static dev_link_t *nmclan_attach(void) lp->tx_free_frames=AM2150_MAX_TX_FRAMES; + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &mace_start_xmit; dev->set_config = &mace_config; dev->get_stats = &mace_get_stats; @@ -974,7 +975,6 @@ static int mace_open(struct net_device *dev) return -ENODEV; link->open++; - MOD_INC_USE_COUNT; MACEBANK(0); @@ -1004,8 +1004,6 @@ static int mace_close(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } /* mace_close */ diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index 81210905c2f6..543dacff82b3 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c @@ -315,6 +315,7 @@ static dev_link_t *pcnet_attach(void) link->conf.IntType = INT_MEMORY_AND_IO; ethdev_init(dev); + SET_MODULE_OWNER(dev); dev->init = &pcnet_init; dev->open = &pcnet_open; dev->stop = &pcnet_close; @@ -1030,7 +1031,6 @@ static int pcnet_open(struct net_device *dev) return -ENODEV; link->open++; - MOD_INC_USE_COUNT; set_misc_reg(dev); request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, dev_info, dev); @@ -1064,8 +1064,6 @@ static int pcnet_close(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } /* pcnet_close */ diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index d1c41d0b5bcd..1c198e0ae70a 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c @@ -376,6 +376,7 @@ static dev_link_t *smc91c92_attach(void) link->conf.IntType = INT_MEMORY_AND_IO; /* The SMC91c92-specific entries in the device structure. */ + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &smc_start_xmit; dev->get_stats = &smc_get_stats; dev->set_config = &s9k_config; @@ -1301,7 +1302,6 @@ static int smc_open(struct net_device *dev) return -ENODEV; } link->open++; - MOD_INC_USE_COUNT; netif_start_queue(dev); smc->saved_skb = 0; @@ -1347,8 +1347,6 @@ static int smc_close(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } /* smc_close */ diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index ab17d29e01a5..0339b7cdce30 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c @@ -646,6 +646,7 @@ xirc2ps_attach(void) link->irq.Instance = dev; /* Fill in card specific entries */ + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &do_start_xmit; dev->set_config = &do_config; dev->get_stats = &do_get_stats; @@ -1714,7 +1715,6 @@ do_open(struct net_device *dev) /* okay */ link->open++; - MOD_INC_USE_COUNT; netif_start_queue(dev); do_reset(dev,1); @@ -2066,8 +2066,6 @@ do_stop(struct net_device *dev) if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; - return 0; } diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c index 664ceb907fe9..b0e501181c72 100644 --- a/drivers/net/sk98lin/skge.c +++ b/drivers/net/sk98lin/skge.c @@ -322,8 +322,8 @@ static void BoardInitMem(SK_AC *pAC); static void SetupRing(SK_AC*, void*, uintptr_t, RXD**, RXD**, RXD**, int*, SK_BOOL); -static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs); -static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs); +static irqreturn_t SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs); +static irqreturn_t SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs); static int SkGeOpen(struct net_device *dev); static int SkGeClose(struct net_device *dev); static int SkGeXmit(struct sk_buff *skb, struct net_device *dev); @@ -470,6 +470,7 @@ static int __init skge_probe (void) pNet->Up = 0; dev->irq = pdev->irq; + SET_MODULE_OWNER(dev); dev->open = &SkGeOpen; dev->stop = &SkGeClose; dev->hard_start_xmit = &SkGeXmit; @@ -1236,7 +1237,7 @@ int PortIndex) /* index of the port for which to re-init */ * Returns: N/A * */ -static void SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs) +static irqreturn_t SkGeIsr(int irq, void *dev_id, struct pt_regs *ptregs) { struct net_device *dev = (struct net_device *)dev_id; @@ -1252,7 +1253,7 @@ SK_U32 IntSrc; /* interrupts source register contents */ */ SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc); if (IntSrc == 0) { - return; + return IRQ_NONE; } while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) { @@ -1380,7 +1381,7 @@ SK_U32 IntSrc; /* interrupts source register contents */ /* IRQ is processed - Enable IRQs again*/ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK); - return; + return IRQ_HANDLED; } /* SkGeIsr */ @@ -1397,7 +1398,7 @@ SK_U32 IntSrc; /* interrupts source register contents */ * Returns: N/A * */ -static void SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs) +static irqreturn_t SkGeIsrOnePort(int irq, void *dev_id, struct pt_regs *ptregs) { struct net_device *dev = (struct net_device *)dev_id; DEV_NET *pNet; @@ -1412,7 +1413,7 @@ SK_U32 IntSrc; /* interrupts source register contents */ */ SK_IN32(pAC->IoBase, B0_SP_ISRC, &IntSrc); if (IntSrc == 0) { - return; + return IRQ_NONE; } while (((IntSrc & IRQ_MASK) & ~SPECIAL_IRQS) != 0) { @@ -1498,7 +1499,7 @@ SK_U32 IntSrc; /* interrupts source register contents */ /* IRQ is processed - Enable IRQs again*/ SK_OUT32(pAC->IoBase, B0_IMSK, IRQ_MASK); - return; + return IRQ_HANDLED; } /* SkGeIsrOnePort */ @@ -1604,8 +1605,6 @@ SK_EVPARA EvPara; /* an event parameter union */ pAC->MaxPorts++; pNet->Up = 1; - MOD_INC_USE_COUNT; - SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY, ("SkGeOpen suceeded\n")); @@ -1705,7 +1704,6 @@ SK_EVPARA EvPara; pAC->MaxPorts--; pNet->Up = 0; - MOD_DEC_USE_COUNT; return (0); } /* SkGeClose */ diff --git a/drivers/net/tulip/xircom_cb.c b/drivers/net/tulip/xircom_cb.c index 95fea6ea9cd1..3acf64b11c62 100644 --- a/drivers/net/tulip/xircom_cb.c +++ b/drivers/net/tulip/xircom_cb.c @@ -111,7 +111,7 @@ struct xircom_private { /* Function prototypes */ static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id); static void xircom_remove(struct pci_dev *pdev); -static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs); +static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs); static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev); static int xircom_open(struct net_device *dev); static int xircom_close(struct net_device *dev); @@ -344,7 +344,7 @@ static void __devexit xircom_remove(struct pci_dev *pdev) leave("xircom_remove"); } -static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) +static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) { struct net_device *dev = (struct net_device *) dev_instance; struct xircom_private *card = (struct xircom_private *) dev->priv; @@ -388,6 +388,7 @@ static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) spin_unlock(&card->lock); leave("xircom_interrupt"); + return IRQ_HANDLED; } static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev) diff --git a/drivers/net/tulip/xircom_tulip_cb.c b/drivers/net/tulip/xircom_tulip_cb.c index 393537705c89..56a05a62940a 100644 --- a/drivers/net/tulip/xircom_tulip_cb.c +++ b/drivers/net/tulip/xircom_tulip_cb.c @@ -340,7 +340,7 @@ static void xircom_tx_timeout(struct net_device *dev); static void xircom_init_ring(struct net_device *dev); static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev); static int xircom_rx(struct net_device *dev); -static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs); +static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs); static int xircom_close(struct net_device *dev); static struct net_device_stats *xircom_get_stats(struct net_device *dev); static int xircom_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -355,7 +355,7 @@ static void outl_CSR6(u32 newcsr6, long ioaddr) const int strict_bits = TxThresh10 | TxStoreForw | TxThreshMask | EnableTxRx | FullDuplexBit; int csr5, csr5_22_20, csr5_19_17, currcsr6, attempts = 200; - long flags; + unsigned long flags; save_flags(flags); cli(); /* mask out the reserved bits that always read 0 on the Xircom cards */ @@ -1054,12 +1054,13 @@ static void check_duplex(struct net_device *dev) /* The interrupt handler does all of the Rx thread work and cleans up after the Tx thread. */ -static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) +static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) { struct net_device *dev = dev_instance; struct xircom_private *tp = dev->priv; long ioaddr = dev->base_addr; int csr5, work_budget = max_interrupt_work; + int handled = 0; spin_lock (&tp->lock); @@ -1078,6 +1079,8 @@ static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) if ((csr5 & (NormalIntr|AbnormalIntr)) == 0) break; + handled = 1; + if (csr5 & (RxIntr | RxNoBuf)) work_budget -= xircom_rx(dev); @@ -1185,6 +1188,7 @@ static void xircom_interrupt(int irq, void *dev_instance, struct pt_regs *regs) dev->name, inl(ioaddr + CSR5)); spin_unlock (&tp->lock); + return IRQ_RETVAL(handled); } @@ -1461,7 +1465,7 @@ static int xircom_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) struct xircom_private *tp = dev->priv; u16 *data = (u16 *)&rq->ifr_data; int phy = tp->phys[0] & 0x1f; - long flags; + unsigned long flags; switch(cmd) { case SIOCETHTOOL: diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index f402e4305ed0..26ed1b7dee01 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c @@ -947,7 +947,7 @@ static u16 transmit_allocate(struct airo_info*, int lenPayload, int raw); static int transmit_802_3_packet(struct airo_info*, int len, char *pPacket); static int transmit_802_11_packet(struct airo_info*, int len, char *pPacket); -static void airo_interrupt( int irq, void* dev_id, struct pt_regs +static irqreturn_t airo_interrupt( int irq, void* dev_id, struct pt_regs *regs); static int airo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); #ifdef WIRELESS_EXT @@ -1837,20 +1837,23 @@ static void airo_read_mic(struct airo_info *ai) { } } -static void airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) { +static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) { struct net_device *dev = (struct net_device *)dev_id; u16 status; u16 fid; struct airo_info *apriv = dev->priv; u16 savedInterrupts = 0; + int handled = 0; if (!netif_device_present(dev)) - return; + return IRQ_NONE; for (;;) { status = IN4500( apriv, EVSTAT ); if ( !(status & STATUS_INTS) || status == 0xffff ) break; + handled = 1; + if ( status & EV_AWAKE ) { OUT4500( apriv, EVACK, EV_AWAKE ); OUT4500( apriv, EVACK, EV_AWAKE ); @@ -2133,7 +2136,7 @@ static void airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) { OUT4500( apriv, EVINTEN, savedInterrupts ); /* done.. */ - return; + return IRQ_RETVAL(handled); } /* @@ -2494,7 +2497,7 @@ static int aux_bap_read(struct airo_info *ai, u16 *pu16Dst, u16 next; int words; int i; - long flags; + unsigned long flags; spin_lock_irqsave(&ai->aux_lock, flags); page = IN4500(ai, SWS0+whichbap); diff --git a/drivers/net/wireless/arlan.c b/drivers/net/wireless/arlan.c index eebd299c1dd9..2bddbef9cd0c 100644 --- a/drivers/net/wireless/arlan.c +++ b/drivers/net/wireless/arlan.c @@ -113,7 +113,7 @@ static int arlans_found; static int arlan_probe_here(struct net_device *dev, int ioaddr); static int arlan_open(struct net_device *dev); static int arlan_tx(struct sk_buff *skb, struct net_device *dev); -static void arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int arlan_close(struct net_device *dev); static struct net_device_stats * arlan_statistics (struct net_device *dev); @@ -1840,7 +1840,7 @@ end_int_process: return; } -static void arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; struct arlan_private *priv = (struct arlan_private *) dev->priv; @@ -1859,7 +1859,7 @@ static void arlan_interrupt(int irq, void *dev_id, struct pt_regs *regs) priv->irq_test_done = 1; ARLAN_DEBUG_EXIT("arlan_interrupt"); - return; + return IRQ_HANDLED; } diff --git a/drivers/net/wireless/arlan.h b/drivers/net/wireless/arlan.h index 198583664a35..3a6fe9c6b6ca 100644 --- a/drivers/net/wireless/arlan.h +++ b/drivers/net/wireless/arlan.h @@ -376,7 +376,7 @@ struct arlan_private { volatile int txNew; volatile int txOffset; volatile char ReTransmitRequested; - volatile long long tx_done_delayed; + volatile unsigned long tx_done_delayed; volatile long long registrationLastSeen; volatile char under_command; volatile char under_toggle; diff --git a/drivers/net/wireless/netwave_cs.c b/drivers/net/wireless/netwave_cs.c index c2a9874882d7..afc650181be4 100644 --- a/drivers/net/wireless/netwave_cs.c +++ b/drivers/net/wireless/netwave_cs.c @@ -495,6 +495,7 @@ static dev_link_t *netwave_attach(void) spin_lock_init(&priv->spinlock); /* Netwave specific entries in the device structure */ + SET_MODULE_OWNER(dev); dev->hard_start_xmit = &netwave_start_xmit; dev->set_config = &netwave_config; dev->get_stats = &netwave_get_stats; @@ -1727,7 +1728,6 @@ static int netwave_open(struct net_device *dev) { return -ENODEV; link->open++; - MOD_INC_USE_COUNT; netif_start_queue(dev); netwave_reset(dev); @@ -1746,7 +1746,6 @@ static int netwave_close(struct net_device *dev) { if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - MOD_DEC_USE_COUNT; return 0; } diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index c2d12d4440b9..8d33bdd304b9 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c @@ -1337,7 +1337,7 @@ static void show_rx_frame(struct orinoco_rxframe_hdr *frame) /* * Interrupt handler */ -void orinoco_interrupt(int irq, void *dev_id, struct pt_regs *regs) +irqreturn_t orinoco_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct orinoco_private *priv = (struct orinoco_private *) dev_id; hermes_t *hw = &priv->hw; @@ -1353,7 +1353,7 @@ void orinoco_interrupt(int irq, void *dev_id, struct pt_regs *regs) if (orinoco_lock(priv, &flags) != 0) { /* If hw is unavailable */ - return; + return IRQ_NONE; } evstat = hermes_read_regn(hw, EVSTAT); @@ -1403,6 +1403,8 @@ much! Shutting down.\n", }; orinoco_unlock(priv, &flags); + + return IRQ_HANDLED; } static void __orinoco_ev_tick(struct orinoco_private *priv, hermes_t *hw) diff --git a/drivers/net/wireless/orinoco.h b/drivers/net/wireless/orinoco.h index 8608626def40..5ffcce3cba6d 100644 --- a/drivers/net/wireless/orinoco.h +++ b/drivers/net/wireless/orinoco.h @@ -114,7 +114,7 @@ int orinoco_reinit_firmware(struct net_device *dev); extern int orinoco_proc_dev_init(struct net_device *dev); extern void orinoco_proc_dev_cleanup(struct net_device *dev); -extern void orinoco_interrupt(int irq, void * dev_id, struct pt_regs *regs); +extern irqreturn_t orinoco_interrupt(int irq, void * dev_id, struct pt_regs *regs); /********************************************************************/ /* Locking and synchronization functions */ diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c index 1459020f1d8f..2d9da068e1a8 100644 --- a/drivers/net/wireless/ray_cs.c +++ b/drivers/net/wireless/ray_cs.c @@ -423,6 +423,7 @@ static dev_link_t *ray_attach(void) dev->set_multicast_list = &set_multicast_list; DEBUG(2,"ray_cs ray_attach calling ether_setup.)\n"); + SET_MODULE_OWNER(dev); ether_setup(dev); dev->init = &ray_dev_init; dev->open = &ray_open; @@ -1724,14 +1725,11 @@ static int ray_open(struct net_device *dev) dev_link_t *link; ray_dev_t *local = (ray_dev_t *)dev->priv; - MOD_INC_USE_COUNT; - DEBUG(1, "ray_open('%s')\n", dev->name); for (link = dev_list; link; link = link->next) if (link->priv == dev) break; if (!DEV_OK(link)) { - MOD_DEC_USE_COUNT; return -ENODEV; } @@ -1781,8 +1779,6 @@ static int ray_dev_close(struct net_device *dev) * card is closed we can chage its configuration. * Probably also need a COR reset to get sane state - Jean II */ - MOD_DEC_USE_COUNT; - return 0; } /* end ray_dev_close */ /*===========================================================================*/ diff --git a/drivers/net/wireless/wavelan.c b/drivers/net/wireless/wavelan.c index 7196879d9cf5..57a2fe05d981 100644 --- a/drivers/net/wireless/wavelan.c +++ b/drivers/net/wireless/wavelan.c @@ -3858,7 +3858,7 @@ static int wv_check_ioaddr(unsigned long ioaddr, u8 * mac) * This function is the interrupt handler for the WaveLAN card. This * routine will be called whenever: */ -static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs) { device *dev; unsigned long ioaddr; @@ -3934,7 +3934,7 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs) dev->name, hasr); #endif spin_unlock (&lp->spinlock); - return; + return IRQ_NONE; } /* Read interrupt data. */ @@ -4004,6 +4004,7 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs) #ifdef DEBUG_INTERRUPT_TRACE printk(KERN_DEBUG "%s: <-wavelan_interrupt()\n", dev->name); #endif + return IRQ_HANDLED; } /*------------------------------------------------------------------*/ diff --git a/drivers/net/wireless/wavelan.p.h b/drivers/net/wireless/wavelan.p.h index cff7e6556701..e5519936a5de 100644 --- a/drivers/net/wireless/wavelan.p.h +++ b/drivers/net/wireless/wavelan.p.h @@ -650,7 +650,7 @@ static int wv_check_ioaddr(u_long, /* ioaddr */ u_char *); /* mac address (read) */ /* ---------------------- INTERRUPT HANDLING ---------------------- */ -static void +static irqreturn_t wavelan_interrupt(int, /* interrupt handler */ void *, struct pt_regs *); diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c index 3717d9d2588d..f44f09362126 100644 --- a/drivers/net/wireless/wavelan_cs.c +++ b/drivers/net/wireless/wavelan_cs.c @@ -5020,7 +5020,6 @@ wavelan_open(device * dev) /* Mark the device as used */ link->open++; - MOD_INC_USE_COUNT; #ifdef WAVELAN_ROAMING if(do_roaming) @@ -5065,7 +5064,6 @@ wavelan_close(device * dev) #endif /* WAVELAN_ROAMING */ link->open--; - MOD_DEC_USE_COUNT; /* If the card is still present */ if(netif_running(dev)) @@ -5186,6 +5184,7 @@ wavelan_attach(void) ether_setup(dev); /* wavelan NET3 callbacks */ + SET_MODULE_OWNER(dev); dev->open = &wavelan_open; dev->stop = &wavelan_close; dev->hard_start_xmit = &wavelan_packet_xmit; diff --git a/drivers/net/znet.c b/drivers/net/znet.c index d529122aa9e5..741a223f293e 100644 --- a/drivers/net/znet.c +++ b/drivers/net/znet.c @@ -159,7 +159,7 @@ struct netidblk { static int znet_open(struct net_device *dev); static int znet_send_packet(struct sk_buff *skb, struct net_device *dev); -static void znet_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t znet_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void znet_rx(struct net_device *dev); static int znet_close(struct net_device *dev); static struct net_device_stats *net_get_stats(struct net_device *dev); @@ -604,16 +604,17 @@ static int znet_send_packet(struct sk_buff *skb, struct net_device *dev) } /* The ZNET interrupt handler. */ -static void znet_interrupt(int irq, void *dev_id, struct pt_regs * regs) +static irqreturn_t znet_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = dev_id; struct znet_private *znet = dev->priv; int ioaddr; int boguscnt = 20; + int handled = 0; if (dev == NULL) { printk(KERN_WARNING "znet_interrupt(): IRQ %d for unknown device.\n", irq); - return; + return IRQ_NONE; } spin_lock (&znet->lock); @@ -637,6 +638,8 @@ static void znet_interrupt(int irq, void *dev_id, struct pt_regs * regs) if ((status & SR0_INTERRUPT) == 0) break; + handled = 1; + if ((status & SR0_EVENT_MASK) == SR0_TRANSMIT_DONE || (status & SR0_EVENT_MASK) == SR0_RETRANSMIT_DONE || (status & SR0_EVENT_MASK) == SR0_TRANSMIT_NO_CRC_DONE) { @@ -682,7 +685,7 @@ static void znet_interrupt(int irq, void *dev_id, struct pt_regs * regs) spin_unlock (&znet->lock); - return; + return IRQ_RETVAL(handled); } static void znet_rx(struct net_device *dev) |
