| From: Anna-Maria Gleixner <anna-maria@linutronix.de> |
| Date: Thu, 12 Apr 2018 18:36:14 +0200 |
| Subject: [PATCH] net: 3com: 3c59x: Move boomerang/vortex conditional into |
| function |
| |
| If vp->full_bus_master_tx is set, vp->full_bus_master_rx is set as well |
| (see vortex_probe1()). Therefore the conditionals for the decision if |
| boomerang or vortex ISR is executed have the same result. Instead of |
| repeating the explicit conditional execution of the boomerang/vortex ISR, |
| move it into an own function. |
| |
| No functional change. |
| |
| Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| drivers/net/ethernet/3com/3c59x.c | 34 ++++++++++++++++++++-------------- |
| 1 file changed, 20 insertions(+), 14 deletions(-) |
| |
| --- a/drivers/net/ethernet/3com/3c59x.c |
| +++ b/drivers/net/ethernet/3com/3c59x.c |
| @@ -765,8 +765,9 @@ static netdev_tx_t boomerang_start_xmit( |
| struct net_device *dev); |
| static int vortex_rx(struct net_device *dev); |
| static int boomerang_rx(struct net_device *dev); |
| -static irqreturn_t vortex_interrupt(int irq, void *dev_id); |
| -static irqreturn_t boomerang_interrupt(int irq, void *dev_id); |
| +static irqreturn_t vortex_boomerang_interrupt(int irq, void *dev_id); |
| +static irqreturn_t _vortex_interrupt(int irq, struct net_device *dev); |
| +static irqreturn_t _boomerang_interrupt(int irq, struct net_device *dev); |
| static int vortex_close(struct net_device *dev); |
| static void dump_tx_ring(struct net_device *dev); |
| static void update_stats(void __iomem *ioaddr, struct net_device *dev); |
| @@ -838,10 +839,9 @@ MODULE_PARM_DESC(use_mmio, "3c59x: use m |
| #ifdef CONFIG_NET_POLL_CONTROLLER |
| static void poll_vortex(struct net_device *dev) |
| { |
| - struct vortex_private *vp = netdev_priv(dev); |
| unsigned long flags; |
| local_irq_save(flags); |
| - (vp->full_bus_master_rx ? boomerang_interrupt:vortex_interrupt)(dev->irq,dev); |
| + vortex_boomerang_interrupt(dev->irq, dev); |
| local_irq_restore(flags); |
| } |
| #endif |
| @@ -1728,8 +1728,7 @@ vortex_open(struct net_device *dev) |
| dma_addr_t dma; |
| |
| /* Use the now-standard shared IRQ implementation. */ |
| - if ((retval = request_irq(dev->irq, vp->full_bus_master_rx ? |
| - boomerang_interrupt : vortex_interrupt, IRQF_SHARED, dev->name, dev))) { |
| + if ((retval = request_irq(dev->irq, vortex_boomerang_interrupt, IRQF_SHARED, dev->name, dev))) { |
| pr_err("%s: Could not reserve IRQ %d\n", dev->name, dev->irq); |
| goto err; |
| } |
| @@ -1910,10 +1909,7 @@ static void vortex_tx_timeout(struct net |
| */ |
| unsigned long flags; |
| local_irq_save(flags); |
| - if (vp->full_bus_master_tx) |
| - boomerang_interrupt(dev->irq, dev); |
| - else |
| - vortex_interrupt(dev->irq, dev); |
| + vortex_boomerang_interrupt(dev->irq, dev); |
| local_irq_restore(flags); |
| } |
| } |
| @@ -2266,9 +2262,8 @@ boomerang_start_xmit(struct sk_buff *skb |
| */ |
| |
| static irqreturn_t |
| -vortex_interrupt(int irq, void *dev_id) |
| +_vortex_interrupt(int irq, struct net_device *dev) |
| { |
| - struct net_device *dev = dev_id; |
| struct vortex_private *vp = netdev_priv(dev); |
| void __iomem *ioaddr; |
| int status; |
| @@ -2385,9 +2380,8 @@ vortex_interrupt(int irq, void *dev_id) |
| */ |
| |
| static irqreturn_t |
| -boomerang_interrupt(int irq, void *dev_id) |
| +_boomerang_interrupt(int irq, struct net_device *dev) |
| { |
| - struct net_device *dev = dev_id; |
| struct vortex_private *vp = netdev_priv(dev); |
| void __iomem *ioaddr; |
| int status; |
| @@ -2525,6 +2519,18 @@ boomerang_interrupt(int irq, void *dev_i |
| return IRQ_RETVAL(handled); |
| } |
| |
| +static irqreturn_t |
| +vortex_boomerang_interrupt(int irq, void *dev_id) |
| +{ |
| + struct net_device *dev = dev_id; |
| + struct vortex_private *vp = netdev_priv(dev); |
| + |
| + if (vp->full_bus_master_rx) |
| + return _boomerang_interrupt(dev->irq, dev); |
| + else |
| + return _vortex_interrupt(dev->irq, dev); |
| +} |
| + |
| static int vortex_rx(struct net_device *dev) |
| { |
| struct vortex_private *vp = netdev_priv(dev); |