static irqreturn_t ether3_interrupt(int irq, void *dev_id) { struct net_device *dev = (struct net_device *)dev_id; unsigned int status, handled = IRQ_NONE; #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) printk("eth3irq: %d ", irq); #endif status = ether3_inw(REG_STATUS); if (status & STAT_INTRX) { ether3_outw(CMD_ACKINTRX | priv(dev)->regs.command, REG_COMMAND); ether3_rx(dev, 12); handled = IRQ_HANDLED; } if (status & STAT_INTTX) { ether3_outw(CMD_ACKINTTX | priv(dev)->regs.command, REG_COMMAND); ether3_tx(dev); handled = IRQ_HANDLED; } #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) printk("done\n"); #endif return handled; }
static void ether3_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = (struct net_device *)dev_id; struct dev_priv *priv; unsigned int status; #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) printk("eth3irq: %d ", irq); #endif priv = (struct dev_priv *)dev->priv; status = ether3_inw(REG_STATUS); if (status & STAT_INTRX) { ether3_outw(CMD_ACKINTRX | priv->regs.command, REG_COMMAND); ether3_rx(dev, priv, 12); } if (status & STAT_INTTX) { ether3_outw(CMD_ACKINTTX | priv->regs.command, REG_COMMAND); ether3_tx(dev, priv); } #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) printk("done\n"); #endif }