From patchwork Tue Apr 17 02:08:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Schmitz X-Patchwork-Id: 899021 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="rjgxe5fI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Q7vy3wB7z9s15 for ; Tue, 17 Apr 2018 12:08:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753021AbeDQCIo (ORCPT ); Mon, 16 Apr 2018 22:08:44 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:44488 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751172AbeDQCI1 (ORCPT ); Mon, 16 Apr 2018 22:08:27 -0400 Received: by mail-pf0-f193.google.com with SMTP id p15so11418474pff.11; Mon, 16 Apr 2018 19:08:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+VP9ECh5FNbIwJsPo7iq9jNG0XCFaUr4Pw1mw1ln9zM=; b=rjgxe5fI7yutW2ZwTwmgkJ6hfJwmMpbQJ2oEsX/pGZea7nBl7IzUX41c7YK8clFi/E 03cMzygD6HxwZu3rKMCEcc+ObNPAqBIrsCAm/aCfn5l+bIbuxkhVIW6NIUruLa7wLoNB VFVxDmuW98GTIutzaRVcq94QHPE9KEr85dYyyLwRMwqMVEWqS55GJX52GNKLrxRwRGwr hChSg+lALqdGQkweVfWenXZokfSPfNft3Mq0cmzP6gMUzuwhk0iB2WRfBm7hePf4/Vz1 uEQJHfKUaueKUvWz6CRTMH3Pp0jlJ4c90e7uhq1XL00CsX17NHMxuG8ShbI+yRHAZ7s0 RK1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+VP9ECh5FNbIwJsPo7iq9jNG0XCFaUr4Pw1mw1ln9zM=; b=Xg6VjbTZG8iD86i+xPjLxw1idrrl6RacoC17VRNsjNnViJQI7dITxTlHOnJodpXdvV CJIXnCsxuvviiglJaBUYZy3KLcMFfDYRB/ZpoSTBY3X60iXxA3W1dNgxLsCVCEIK0xf6 OZ+e9mIV8e/rBHtcBGvzkYAQBkUMr3CiCGtWRHPmc360Ni63UtpOnbiJSiWTqT39StXD U/OcTUNEmL4U651q1Ik82lYQB3CTEensRRmt31e26TP8etpNuKJcQSKs3EMX0+mAhMfH SBkxl/NMqqCLQZSTQufGnO3LxFGAlp5rFSk0FAS4zrFbM/jZIVolm/x9KqIHH18gWIdu 4Svw== X-Gm-Message-State: ALQs6tBOB4NyuGBn2oityJp/q2NYMx3qi3jecWL/qZEU+9vPCFKRPCta sl/oUFrBAdPV8YLfQD49m9w= X-Google-Smtp-Source: AIpwx4/0CzFcPdGJGnSGIBwWyj4nsLdY/OMw3QLZHMrJgiG0vvkOwlK909lH1D1yMvw0SV6RD8FOaw== X-Received: by 10.99.65.6 with SMTP id o6mr184602pga.57.1523930906613; Mon, 16 Apr 2018 19:08:26 -0700 (PDT) Received: from xplor.waratah.dyndns.org (222-154-41-72-adsl.bb.spark.co.nz. [222.154.41.72]) by smtp.gmail.com with ESMTPSA id y15sm23611970pfb.37.2018.04.16.19.08.25 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 16 Apr 2018 19:08:26 -0700 (PDT) Received: by xplor.waratah.dyndns.org (Postfix, from userid 1000) id 79C79360087; Tue, 17 Apr 2018 14:08:18 +1200 (NZST) From: Michael Schmitz To: netdev@vger.kernel.org Cc: andrew@lunn.ch, linux-m68k@vger.kernel.org, Michael.Karcher@fu-berlin.de, Michael Schmitz , Michael Karcher Subject: [PATCH v2 5/8] net: ax88796: add interrupt status callback to platform data Date: Tue, 17 Apr 2018 14:08:12 +1200 Message-Id: <1523930895-6973-6-git-send-email-schmitzmic@gmail.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1523916285-6057-1-git-send-email-schmitzmic@gmail.com> References: <1523916285-6057-1-git-send-email-schmitzmic@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Signed-off-by: Michael Schmitz --- drivers/net/ethernet/8390/ax88796.c | 23 +++++++++++++++++++++-- include/net/ax88796.h | 5 +++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c index 29cde38..c799441 100644 --- a/drivers/net/ethernet/8390/ax88796.c +++ b/drivers/net/ethernet/8390/ax88796.c @@ -165,6 +165,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) @@ -484,8 +499,12 @@ static int ax_open(struct net_device *dev) if (ret) goto failed_mii; - 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 26cc459..26412cd 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 */ @@ -33,6 +34,10 @@ struct ax_plat_data { const unsigned char *buf, int star_page); void (*block_input)(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset); + /* 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 *pdev); }; #endif /* __NET_AX88796_PLAT_H */