From patchwork Fri May 26 08:03:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 767305 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 3wYzDS433vz9s1h for ; Fri, 26 May 2017 18:04:08 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="z+NIXU7g"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S939925AbdEZIEG (ORCPT ); Fri, 26 May 2017 04:04:06 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:34077 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S939906AbdEZID4 (ORCPT ); Fri, 26 May 2017 04:03:56 -0400 Received: by mail-pf0-f175.google.com with SMTP id 9so4734213pfj.1 for ; Fri, 26 May 2017 01:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sepuYQnzR37uUQJf9e69qXlxcux0aBXH8ZHwnCL2bdM=; b=z+NIXU7gzPSv2TTqCHVXH2avwPnYeNkEWGXp6/kIabJwdd1XF1Gdj6HM6VHDsC41ne gRLcghfoKCWEv3ni2jOuOLHYyZXDOonXmuATVJ6kQeaWWlE2s9g5iWUSOnoNlZ/wDfYr WqnpQ29cSYzSJI6+EPuYC3XL9a7dh35hzYXf/Da0fDEih+L+T7Ym4IPZfUyeL7U01EQM WXPEDxJ6G+n08nysv5cMXsulDP9rqaX+QXP57aN5B6smdqbZtKKIc/SYu61IqTMAwFrG uKMpEc9l3K85iPnaS5SH6vHptzEnh2h5m2/0P++1brO2GB1C6k2TTXU2iHVdjPoIycvJ CWpA== 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=sepuYQnzR37uUQJf9e69qXlxcux0aBXH8ZHwnCL2bdM=; b=BLHY1eqebYAJNOzNeFZ+ABG2PL6trhzuAgoQ9MV2nLLRNgJCd9IXcvL1t7UbrvRUAj ISXG4dCV0amV9YigvCxvV2eni16NcAlBaR7AO9ErrarCfF5tGY5d9R5mXlXHFbUlkosc LUqqnyEZMLLdz5fkAIrNlFkbcEPZAMsaTxhgPMg1NwNxcwPFxl3UmkDkThc+yNIeQuwL piZ10UuHppKX2TgaPkSe8D3imHhFkAv7VYQZQ8u+op1XTgWlkOrLc6MiZk/CayP63AHh /E2M2EBowFCcS8LnDDYEO9mAa3t8EffNOsRqLj0RKVbUwabQABp+OgT10+uk6WH35FbV Kh6A== X-Gm-Message-State: AODbwcA1tazeqtZSK1M+uk+1rLXz0j+QqRvhp3J8lbnYVYoX5kD5RLiw EYLngju7NlDi4lo2 X-Received: by 10.84.137.1 with SMTP id 1mr57597507plm.128.1495785834714; Fri, 26 May 2017 01:03:54 -0700 (PDT) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id s82sm199777pfe.57.2017.05.26.01.03.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 26 May 2017 01:03:54 -0700 (PDT) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: jiri@resnulli.us, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v2 4/6] nfp: register ports as devlink ports Date: Fri, 26 May 2017 01:03:34 -0700 Message-Id: <20170526080336.32689-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170526080336.32689-1-jakub.kicinski@netronome.com> References: <20170526080336.32689-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Extend nfp_port to contain devlink_port structures. Register the ports to allow users inspecting device ports. Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/netronome/nfp/nfp_devlink.c | 45 +++++++++++++++++++++++ drivers/net/ethernet/netronome/nfp/nfp_net_main.c | 13 +++++++ drivers/net/ethernet/netronome/nfp/nfp_port.h | 8 ++++ 3 files changed, 66 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index a8a52b3ff42b..2cfcb66b04bb 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -31,9 +31,54 @@ * SOFTWARE. */ +#include #include +#include "nfpcore/nfp_nsp.h" +#include "nfp_app.h" #include "nfp_main.h" +#include "nfp_port.h" + +static int +nfp_devlink_fill_eth_port(struct nfp_port *port, + struct nfp_eth_table_port *copy) +{ + struct nfp_eth_table_port *eth_port; + + eth_port = __nfp_port_get_eth_port(port); + if (!eth_port) + return -EINVAL; + + memcpy(copy, eth_port, sizeof(*eth_port)); + + return 0; +} const struct devlink_ops nfp_devlink_ops = { }; + +int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port) +{ + struct nfp_eth_table_port eth_port; + struct devlink *devlink; + int ret; + + rtnl_lock(); + ret = nfp_devlink_fill_eth_port(port, ð_port); + rtnl_unlock(); + if (ret) + return ret; + + devlink_port_type_eth_set(&port->dl_port, port->netdev); + if (eth_port.is_split) + devlink_port_split_set(&port->dl_port, eth_port.label_port); + + devlink = priv_to_devlink(app->pf); + + return devlink_port_register(devlink, &port->dl_port, port->eth_id); +} + +void nfp_devlink_port_unregister(struct nfp_port *port) +{ + devlink_port_unregister(&port->dl_port); +} diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c index b0a6ec4fe097..b733c97677fb 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c @@ -354,9 +354,20 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id) nfp_net_debugfs_vnic_add(nn, pf->ddir, id); + if (nn->port) { + err = nfp_devlink_port_register(pf->app, nn->port); + if (err) + goto err_dfs_clean; + } + nfp_net_info(nn); return 0; + +err_dfs_clean: + nfp_net_debugfs_dir_clean(&nn->debugfs_dir); + nfp_net_clean(nn); + return err; } static int @@ -420,6 +431,8 @@ nfp_net_pf_alloc_vnics(struct nfp_pf *pf, void __iomem *ctrl_bar, static void nfp_net_pf_clean_vnic(struct nfp_pf *pf, struct nfp_net *nn) { + if (nn->port) + nfp_devlink_port_unregister(nn->port); nfp_net_debugfs_dir_clean(&nn->debugfs_dir); nfp_net_clean(nn); } diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.h b/drivers/net/ethernet/netronome/nfp/nfp_port.h index 641617de41cc..36a540b514be 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_port.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_port.h @@ -34,6 +34,8 @@ #ifndef _NFP_PORT_H_ #define _NFP_PORT_H_ +#include + struct net_device; struct nfp_app; struct nfp_port; @@ -66,6 +68,7 @@ enum nfp_port_flags { * @type: what port type does the entity represent * @flags: port flags * @app: backpointer to the app structure + * @dl_port: devlink port structure * @eth_id: for %NFP_PORT_PHYS_PORT port ID in NFP enumeration scheme * @eth_port: for %NFP_PORT_PHYS_PORT translated ETH Table port entry * @port_list: entry on pf's list of ports @@ -78,6 +81,8 @@ struct nfp_port { struct nfp_app *app; + struct devlink_port dl_port; + unsigned int eth_id; struct nfp_eth_table_port *eth_port; @@ -99,4 +104,7 @@ void nfp_port_free(struct nfp_port *port); int nfp_net_refresh_eth_port(struct nfp_port *port); void nfp_net_refresh_port_table(struct nfp_port *port); +int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port); +void nfp_devlink_port_unregister(struct nfp_port *port); + #endif