Commit b6b44ebf authored by Jeff Garzik's avatar Jeff Garzik

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
parent 139d2ebb
......@@ -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
......
......@@ -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)
......
......@@ -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);
......
......@@ -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;
}
/**************************************
......
......@@ -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;
}
......
......@@ -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;
}
/*
......
......@@ -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) {
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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);
......
......@@ -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 */
......
......@@ -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 */
......
......@@ -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 */
......
......@@ -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;
}
......
......@@ -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 */
......
......@@ -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)
......
......@@ -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:
......
......@@ -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);
......
......@@ -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 @@ static void arlan_process_interrupt(struct net_device *dev)
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;
}
......
......@@ -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;
......
......@@ -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;
}
......
......@@ -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)
......
......@@ -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 */
......
......@@ -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 */
/*===========================================================================*/
......
......@@ -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;
}
/*------------------------------------------------------------------*/
......
......@@ -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 *);
......
......@@ -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;
......
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment