static inline int get_status(unsigned int base_addr)
{
- int timeout = jiffies + 10*HZ/100;
+ unsigned long timeout = jiffies + 10*HZ/100;
register int stat1;
do {
stat1 = inb_status(base_addr);
inline static void adapter_reset(struct net_device *dev)
{
- int timeout;
+ unsigned long timeout;
elp_device *adapter = dev->priv;
unsigned char orig_hcr = adapter->hcr_val;
/* Primitive functions used by send_pcb() */
static inline unsigned int send_pcb_slow(unsigned int base_addr, unsigned char byte)
{
- unsigned int timeout;
+ unsigned long timeout;
outb_command(byte, base_addr);
for (timeout = jiffies + 5*HZ/100; time_before(jiffies, timeout);) {
if (inb_status(base_addr) & HCRE)
static int send_pcb(struct net_device *dev, pcb_struct * pcb)
{
int i;
- int timeout;
+ unsigned long timeout;
elp_device *adapter = dev->priv;
unsigned long flags;
int i, j;
int total_length;
int stat;
- int timeout;
+ unsigned long timeout;
unsigned long flags;
elp_device *adapter = dev->priv;
*
******************************************************/
-static void elp_interrupt(int irq, void *dev_id, struct pt_regs *reg_ptr)
+static irqreturn_t elp_interrupt(int irq, void *dev_id, struct pt_regs *reg_ptr)
{
int len;
int dlen;
int icount = 0;
struct net_device *dev;
elp_device *adapter;
- int timeout;
+ unsigned long timeout;
dev = dev_id;
adapter = (elp_device *) dev->priv;
* indicate no longer in interrupt routine
*/
spin_unlock(&adapter->lock);
+ return IRQ_HANDLED;
}
if (!send_pcb(dev, &adapter->tx_pcb))
printk("%s: couldn't send memory configuration command\n", dev->name);
else {
- int timeout = jiffies + TIMEOUT;
+ unsigned long timeout = jiffies + TIMEOUT;
while (adapter->got[CMD_CONFIGURE_ADAPTER_MEMORY] == 0 && time_before(jiffies, timeout));
if (time_after_eq(jiffies, timeout))
TIMEOUT_MSG(__LINE__);
if (!send_pcb(dev, &adapter->tx_pcb))
printk("%s: couldn't send 82586 configure command\n", dev->name);
else {
- int timeout = jiffies + TIMEOUT;
+ unsigned long timeout = jiffies + TIMEOUT;
while (adapter->got[CMD_CONFIGURE_82586] == 0 && time_before(jiffies, timeout));
if (time_after_eq(jiffies, timeout))
TIMEOUT_MSG(__LINE__);
if (!send_pcb(dev, &adapter->tx_pcb))
printk("%s: couldn't send get statistics command\n", dev->name);
else {
- int timeout = jiffies + TIMEOUT;
+ unsigned long timeout = jiffies + TIMEOUT;
while (adapter->got[CMD_NETWORK_STATISTICS] == 0 && time_before(jiffies, timeout));
if (time_after_eq(jiffies, timeout)) {
TIMEOUT_MSG(__LINE__);
if (!send_pcb(dev, &adapter->tx_pcb))
printk("%s: couldn't send set_multicast command\n", dev->name);
else {
- int timeout = jiffies + TIMEOUT;
+ unsigned long timeout = jiffies + TIMEOUT;
while (adapter->got[CMD_LOAD_MULTICAST_LIST] == 0 && time_before(jiffies, timeout));
if (time_after_eq(jiffies, timeout)) {
TIMEOUT_MSG(__LINE__);
printk("%s: couldn't send 82586 configure command\n", dev->name);
}
else {
- int timeout = jiffies + TIMEOUT;
+ unsigned long timeout = jiffies + TIMEOUT;
spin_unlock_irqrestore(&adapter->lock, flags);
while (adapter->got[CMD_CONFIGURE_82586] == 0 && time_before(jiffies, timeout));
if (time_after_eq(jiffies, timeout))
static int __init elp_sense(struct net_device *dev)
{
- int timeout;
int addr = dev->base_addr;
const char *name = dev->name;
- unsigned long flags;
byte orig_HSR;
if (!request_region(addr, ELP_IO_EXTENT, "3c505"))
int __init elplus_probe(struct net_device *dev)
{
elp_device *adapter;
- int i, tries, tries1, timeout, okay;
+ int i, tries, tries1, okay;
+ unsigned long timeout;
unsigned long cookie = 0;
SET_MODULE_OWNER(dev);
unsigned int length;
struct sk_buff *skb;
void *target;
- long int start_time;
+ unsigned long start_time;
} current_dma;
/* flags */
*/
static int depca_open(struct net_device *dev);
static int depca_start_xmit(struct sk_buff *skb, struct net_device *dev);
-static void depca_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t depca_interrupt(int irq, void *dev_id, struct pt_regs *regs);
static int depca_close(struct net_device *dev);
static int depca_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static void depca_tx_timeout(struct net_device *dev);
/*
** The DEPCA interrupt handler.
*/
-static void depca_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t depca_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct net_device *dev = dev_id;
struct depca_private *lp;
if (dev == NULL) {
printk("depca_interrupt(): irq %d for unknown device.\n", irq);
- return;
+ return IRQ_NONE;
}
lp = (struct depca_private *) dev->priv;
outb(nicsr, DEPCA_NICSR);
spin_unlock(&lp->lock);
+ return IRQ_HANDLED;
}
/* Called with lp->lock held */
static int ni5010_probe1(struct net_device *dev, int ioaddr);
static int ni5010_open(struct net_device *dev);
static int ni5010_send_packet(struct sk_buff *skb, struct net_device *dev);
-static void ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs);
static void ni5010_rx(struct net_device *dev);
static void ni5010_timeout(struct net_device *dev);
static int ni5010_close(struct net_device *dev);
* The typical workload of the driver:
* Handle the network interface interrupts.
*/
-static void ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct net_device *dev = dev_id;
struct ni5010_local *lp;
if (!xmit_was_error)
reset_receiver(dev);
- return;
+ return IRQ_HANDLED;
}
#define NI52_ADDR2 0x01
static int ni52_probe1(struct net_device *dev,int ioaddr);
-static void ni52_interrupt(int irq,void *dev_id,struct pt_regs *reg_ptr);
+static irqreturn_t ni52_interrupt(int irq,void *dev_id,struct pt_regs *reg_ptr);
static int ni52_open(struct net_device *dev);
static int ni52_close(struct net_device *dev);
static int ni52_send_packet(struct sk_buff *,struct net_device *);
* Interrupt Handler ...
*/
-static void ni52_interrupt(int irq,void *dev_id,struct pt_regs *reg_ptr)
+static irqreturn_t ni52_interrupt(int irq,void *dev_id,struct pt_regs *reg_ptr)
{
struct net_device *dev = dev_id;
unsigned short stat;
if (!dev) {
printk ("ni5210-interrupt: irq %d for unknown device.\n",irq);
- return;
+ return IRQ_NONE;
}
p = (struct priv *) dev->priv;
if(debuglevel > 1)
printk("i");
+ return IRQ_HANDLED;
}
/*******************************************************
};
static int ni65_probe1(struct net_device *dev,int);
-static void ni65_interrupt(int irq, void * dev_id, struct pt_regs *regs);
+static irqreturn_t ni65_interrupt(int irq, void * dev_id, struct pt_regs *regs);
static void ni65_recv_intr(struct net_device *dev,int);
static void ni65_xmit_intr(struct net_device *dev,int);
static int ni65_open(struct net_device *dev);
if(ni65_lance_reinit(dev))
{
netif_start_queue(dev);
- MOD_INC_USE_COUNT;
return 0;
}
else
}
#endif
free_irq(dev->irq,dev);
- MOD_DEC_USE_COUNT;
return 0;
}
}
dev->base_addr = ioaddr;
-
+ SET_MODULE_OWNER(dev);
dev->open = ni65_open;
dev->stop = ni65_close;
dev->hard_start_xmit = ni65_send_packet;
/*
* interrupt handler
*/
-static void ni65_interrupt(int irq, void * dev_id, struct pt_regs * regs)
+static irqreturn_t ni65_interrupt(int irq, void * dev_id, struct pt_regs * regs)
{
int csr0 = 0;
struct net_device *dev = dev_id;
else
writedatareg(CSR0_INEA);
- return;
+ return IRQ_HANDLED;
}
/*
static void dmfe_set_filter_mode(struct DEVICE *);
static int dmfe_do_ioctl(struct DEVICE *, struct ifreq *, int);
static u16 read_srom_word(long ,int);
-static void dmfe_interrupt(int , void *, struct pt_regs *);
+static irqreturn_t dmfe_interrupt(int , void *, struct pt_regs *);
static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long);
static void allocate_rx_buffer(struct dmfe_board_info *);
static void update_cr6(u32, unsigned long);
* receive the packet to upper layer, free the transmitted packet
*/
-static void dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct DEVICE *dev = dev_id;
struct dmfe_board_info *db = (struct dmfe_board_info *) dev->priv;
if (!dev) {
DMFE_DBUG(1, "dmfe_interrupt() without DEVICE arg", 0);
- return;
+ return IRQ_NONE;
}
spin_lock_irqsave(&db->lock, flags);
outl(db->cr5_data, ioaddr + DCR5);
if ( !(db->cr5_data & 0xc1) ) {
spin_unlock_irqrestore(&db->lock, flags);
- return;
+ return IRQ_HANDLED;
}
/* Disable all interrupt in CR7 to solve the interrupt edge problem */
db->reset_fatal++;
db->wait_reset = 1; /* Need to RESET */
spin_unlock_irqrestore(&db->lock, flags);
- return;
+ return IRQ_HANDLED;
}
/* Received the coming packet */
outl(db->cr7_data, ioaddr + DCR7);
spin_unlock_irqrestore(&db->lock, flags);
+ return IRQ_HANDLED;
}
static int alloc_ringdesc(struct net_device *dev);
static void free_ringdesc(struct netdev_private *np);
static int start_tx(struct sk_buff *skb, struct net_device *dev);
-static void intr_handler(int irq, void *dev_instance, struct pt_regs *regs);
+static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *regs);
static void netdev_error(struct net_device *dev, int intr_status);
static int netdev_rx(struct net_device *dev);
static u32 __set_rx_mode(struct net_device *dev);
/* The interrupt handler does all of the Rx thread work and cleans up
after the Tx thread. */
-static void intr_handler(int irq, void *dev_instance, struct pt_regs *rgs)
+static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *rgs)
{
struct net_device *dev = (struct net_device *)dev_instance;
struct netdev_private *np = dev->priv;
long ioaddr = dev->base_addr;
int work_limit = max_interrupt_work;
+ int handled = 0;
if (!netif_device_present(dev))
- return;
+ return IRQ_NONE;
do {
u32 intr_status = readl(ioaddr + IntrStatus);
if ((intr_status & (NormalIntr|AbnormalIntr)) == 0)
break;
+ handled = 1;
+
if (intr_status & (IntrRxDone | RxNoBuf))
netdev_rx(dev);
if (intr_status & RxNoBuf)
if (debug > 3)
printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
dev->name, (int)readl(ioaddr + IntrStatus));
+ return IRQ_RETVAL(handled);
}
/* This routine is logically part of the interrupt handler, but separated