public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
From: Michael Schmitz <schmitzmic@gmail.com>
To: linux-m68k@vger.kernel.org
Cc: geert@linux-m68k.org, debian-68k@lists.debian.org,
	kernel@mkarcher.dialup.fu-berlin.de,
	Michael Schmitz <schmitzmic@gmail.com>
Subject: [PATCH 6/8] ax88796: add interrupt status callback to platform data
Date: Tue, 17 Nov 2015 12:33:15 +1300	[thread overview]
Message-ID: <1447716797-20906-7-git-send-email-schmitzmic@gmail.com> (raw)
In-Reply-To: <1447716797-20906-1-git-send-email-schmitzmic@gmail.com>

To be able to tell the ax88796 driver whether it is sensible to enter
the 8390 interrupt handler, an "is this interrupt caused by the 88796"
callback has been added to the ax_plat_data structure (with NULL being
compatible to the previous behaviour).

Signed-off-by: Michael Karcher <kernel@mkarcher.dialup.fu-berlin.de>
Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
---
 drivers/net/ethernet/8390/ax88796.c |   23 +++++++++++++++++++++--
 include/net/ax88796.h               |    4 ++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c
index d45c032..020bcf7 100644
--- a/drivers/net/ethernet/8390/ax88796.c
+++ b/drivers/net/ethernet/8390/ax88796.c
@@ -166,6 +166,21 @@ static void ax_reset_8390(struct net_device *dev)
 	ei_outb(ENISR_RESET, addr + EN0_ISR);	/* Ack intr. */
 }
 
+/*
+ * Wrapper for __ei_interrupt for platforms that have a platform-specific
+ * way to find out whether the interrupt request might be caused by
+ * the ax88796 chip.
+ */
+static irqreturn_t ax_ei_interrupt_filtered(int irq, void *dev_id)
+{
+	struct net_device *dev = dev_id;
+	struct ax_device *ax = to_ax_dev(dev);
+	struct platform_device *pdev = to_platform_device(dev->dev.parent);
+	if (!ax->plat->check_irq(pdev))
+		return IRQ_NONE;
+
+	return ax_ei_interrupt(irq, dev_id);
+}
 
 static void ax_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
 			    int ring_page)
@@ -498,8 +513,12 @@ static int ax_open(struct net_device *dev)
 	if (ret)
 		goto failed_request_irq;
 
-	ret = request_irq(dev->irq, ax_ei_interrupt, ax->irqflags,
-			  dev->name, dev);
+	if (ax->plat->check_irq)
+		ret = request_irq(dev->irq, ax_ei_interrupt_filtered,
+		                  ax->irqflags, dev->name, dev);
+	else
+		ret = request_irq(dev->irq, ax_ei_interrupt, ax->irqflags,
+				  dev->name, dev);
 	if (ret)
 		goto failed_request_irq;
 
diff --git a/include/net/ax88796.h b/include/net/ax88796.h
index 28d6a93..d5b24be 100644
--- a/include/net/ax88796.h
+++ b/include/net/ax88796.h
@@ -12,6 +12,7 @@
 #define __NET_AX88796_PLAT_H
 
 struct net_device;
+struct platform_device;
 
 #define AXFLG_HAS_EEPROM		(1<<0)
 #define AXFLG_MAC_FROMDEV		(1<<1)	/* device already has MAC */
@@ -31,6 +32,9 @@ struct ax_plat_data {
         /* uses default ax88796 buffer if set to NULL */
 	void (*block_output)(struct net_device *, int, const unsigned char *, int);
 	void (*block_input)(struct net_device *, int, struct sk_buff *, int);
+	/* returns nonzero if a pending interrupt request might by caused by
+	   the ax88786. Handles all interrupts if set to NULL */
+	int (*check_irq)(struct platform_device *);
 };
 
 #endif /* __NET_AX88796_PLAT_H */
-- 
1.7.0.4

  parent reply	other threads:[~2015-11-16 23:33 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-16 23:33 [PATCH 0/8] Amiga XSurf100 patch series, to be submitted to linux-net Michael Schmitz
2015-11-16 23:33 ` [PATCH 1/8] aX88796: Fix MAC address reading Michael Schmitz
2015-11-16 23:33 ` [PATCH 2/8] ax88796: Attach MII bus only when open Michael Schmitz
2015-11-16 23:33 ` [PATCH 3/8] ax88796: Move mii support functions upwards to prevent need of forward declaration Michael Schmitz
2015-11-16 23:33 ` [PATCH 4/8] ax88796: Do not free IRQ that did not get requested Michael Schmitz
2015-11-16 23:33 ` [PATCH 5/8] ax88796: Add block_input/output hooks to ax_plat_data Michael Schmitz
2015-11-16 23:33 ` Michael Schmitz [this message]
2015-11-16 23:33 ` [PATCH 7/8] ax88796: Add X-Surf 100 zorro driver providing an ax88796 platform device Michael Schmitz
2015-11-17  8:16   ` Geert Uytterhoeven
2015-11-17 17:59     ` Michael Karcher
2015-11-17 20:01       ` Geert Uytterhoeven
2015-11-16 23:33 ` [PATCH 8/8] ax88796: use interrupt status callback for XSurf100 driver Michael Schmitz
2015-11-17  8:18 ` [PATCH 0/8] Amiga XSurf100 patch series, to be submitted to linux-net Geert Uytterhoeven
2015-11-17 18:16   ` Michael Karcher
2015-11-17 20:02     ` Geert Uytterhoeven
2015-11-18  1:52   ` Michael Schmitz
2015-11-18  8:09     ` Geert Uytterhoeven

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447716797-20906-7-git-send-email-schmitzmic@gmail.com \
    --to=schmitzmic@gmail.com \
    --cc=debian-68k@lists.debian.org \
    --cc=geert@linux-m68k.org \
    --cc=kernel@mkarcher.dialup.fu-berlin.de \
    --cc=linux-m68k@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox