From patchwork Thu Aug 27 07:16:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Feldman X-Patchwork-Id: 511191 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 292811401DE for ; Thu, 27 Aug 2015 17:14:21 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=AtaUJtH1; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752603AbbH0HOR (ORCPT ); Thu, 27 Aug 2015 03:14:17 -0400 Received: from mail-pa0-f52.google.com ([209.85.220.52]:36730 "EHLO mail-pa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750725AbbH0HON (ORCPT ); Thu, 27 Aug 2015 03:14:13 -0400 Received: by padfo6 with SMTP id fo6so915296pad.3 for ; Thu, 27 Aug 2015 00:14:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZBfGArvgd2PgYs19s8Lf0jhkRL4CqdabRTPUCeqxGro=; b=AtaUJtH1NP421XZpEO1xnE5I/kmNGUEMvjcvw8L1FPn4Gk2pKqKzH1KnJJvU5qlG4W Nbu4LyFn0ofze5bnuHBJGHXuFfOlt/vDynrHJimOQUYGxX0RKrqfHRGlICx4M00hTwC0 pMRNPcmtNe2vaO9vPexMf1wROfI5Cddv0okq93FViW6MJ+TYKON3SQT1DqSEDxZZbaQN nYzMIiBGj1SO8jTw5Jwwsjtyo1gQuke5zGajaaezb0y3OjWH2Tb58TOe9LQh3e33Sqe4 8uyda97CqNTwaoAZoGDz15plT3YQMJ00/C4u696JFBJclCTNmA2HBXVEw3Qj16gD0zWi pUyQ== X-Received: by 10.66.219.39 with SMTP id pl7mr4236914pac.148.1440659653307; Thu, 27 Aug 2015 00:14:13 -0700 (PDT) Received: from rocker1.rocker.net ([199.58.98.143]) by smtp.gmail.com with ESMTPSA id uz5sm1280466pac.1.2015.08.27.00.14.12 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Aug 2015 00:14:12 -0700 (PDT) From: sfeldma@gmail.com To: netdev@vger.kernel.org Cc: jiri@resnulli.us, davem@davemloft.net, f.fainelli@gmail.com, roopa@cumulusnetworks.com Subject: [RFC PATCH net-next 2/2] rocker: register each switch as a switchdev Date: Thu, 27 Aug 2015 00:16:46 -0700 Message-Id: <1440659806-56582-3-git-send-email-sfeldma@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1440659806-56582-1-git-send-email-sfeldma@gmail.com> References: <1440659806-56582-1-git-send-email-sfeldma@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Scott Feldman Signed-off-by: Scott Feldman --- drivers/net/ethernet/rocker/rocker.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c index a7cb74a..9555ae4 100644 --- a/drivers/net/ethernet/rocker/rocker.c +++ b/drivers/net/ethernet/rocker/rocker.c @@ -233,6 +233,7 @@ struct rocker { struct pci_dev *pdev; u8 __iomem *hw_addr; struct msix_entry *msix_entries; + struct switchdev switchdev; unsigned int port_count; struct rocker_port **ports; struct { @@ -5090,6 +5091,19 @@ static void rocker_msix_fini(const struct rocker *rocker) kfree(rocker->msix_entries); } +static int rocker_probe_register_switchdev(struct rocker *rocker) +{ + char name[sizeof(rocker->hw.id) * 2 + 1]; + + sprintf(name, "%*phN", (int)sizeof(rocker->hw.id), &rocker->hw.id); + return register_switchdev(&rocker->switchdev, name); +} + +static void rocker_probe_unregister_switchdev(struct rocker *rocker) +{ + unregister_switchdev(&rocker->switchdev); +} + static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct rocker *rocker; @@ -5194,11 +5208,19 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_probe_ports; } + err = rocker_probe_register_switchdev(rocker); + if (err) { + dev_err(&pdev->dev, "cannot register switchdev\n"); + goto err_register_switchdev; + } + dev_info(&pdev->dev, "Rocker switch with id %*phN\n", (int)sizeof(rocker->hw.id), &rocker->hw.id); return 0; +err_register_switchdev: + rocker_remove_ports(rocker); err_probe_ports: rocker_free_tbls(rocker); err_init_tbls: @@ -5227,6 +5249,7 @@ static void rocker_remove(struct pci_dev *pdev) { struct rocker *rocker = pci_get_drvdata(pdev); + rocker_probe_unregister_switchdev(rocker); rocker_free_tbls(rocker); rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET); rocker_remove_ports(rocker);