From patchwork Thu Jul 21 10:03:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 651129 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 3rw8W92fB3z9snm for ; Thu, 21 Jul 2016 20:03:49 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b=gfRmVmpc; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752107AbcGUKDn (ORCPT ); Thu, 21 Jul 2016 06:03:43 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33690 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752000AbcGUKDb (ORCPT ); Thu, 21 Jul 2016 06:03:31 -0400 Received: by mail-wm0-f67.google.com with SMTP id o80so1964794wme.0 for ; Thu, 21 Jul 2016 03:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pxx7hh8Vbj7oLAtQl/OXs6rrdbWBSX76ePtSKNRpk/Y=; b=gfRmVmpckGUEAMLdIATgm4YR/L0Y56nz0viUn3GZbAAv/2A0T0QsHhLWRMoT64C/ZW TsTskrXUsYoLbGzoyS5sk/6RKD3Px9kdqYOHLbGWOGgpsB/6PfVbOYtiLYQP9GdhUvTw 8iSKUifPwRvOT4O1yhwOEilKcl7MefGzu/gy1BQj577dth2nmtv9KmVlxT1JH7uC53K7 nocZhwkbsd340JiU2BVzMnS8x32rMjSNUT4dWE1Uc0q5ZNnucI9E1Fnyrb52d8+AEzj1 6hhqALJtBgh5Q7TdygoxOYqqd1dHFpJoqO7+3lX1fMHu7m2L6DTy5ob7I6mnz9rNJyLI y4hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pxx7hh8Vbj7oLAtQl/OXs6rrdbWBSX76ePtSKNRpk/Y=; b=iG7Xn+X0M6NVO2VC8U3dpy9NQvfVr13MoSRcbbk9f4YJ3vYMgHRJjLJ5dqJM6EgOit 9klfqamfOAXSVvvTaUMWVEfyxihR3vpLeyN5N94lE2vGIEVrYhRmldG60WRLySDV7PRB /u86jQle1Nwe7OYOvBWDPOxCZNWsU8pIs2CKfwp9kt2ymAhbFZpDisN0TJvWs9LLNVqq +aIsuC/uAlb3MXoalp7TZMSqi1ndLHbOfczMkj4znP+u/bIMZu58aV6UpidRpsjHR8VC Sl96k9m3eRzN0EkcEZoE5sLdwSCYWcJvhibohqdJrOeXNSfNR8USYOHAnCoUJEgLsSgb hbcw== X-Gm-Message-State: ALyK8tL9LljwBevcBXp+EpBXFlTVxBY446BPsPGlTgU8p710hSwzSpiTLf+a/YRIhC/IUQ== X-Received: by 10.28.67.129 with SMTP id q123mr16816811wma.53.1469095408893; Thu, 21 Jul 2016 03:03:28 -0700 (PDT) Received: from localhost (ip-94-113-120-206.net.upcbroadband.cz. [94.113.120.206]) by smtp.gmail.com with ESMTPSA id m127sm2688162wmm.21.2016.07.21.03.03.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 21 Jul 2016 03:03:28 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, yotamg@mellanox.com, eladr@mellanox.com, idosch@mellanox.com, nogahf@mellanox.com, ogerlitz@mellanox.com, jhs@mojatatu.com Subject: [patch net-next v2 7/9] mlxsw: reg: Add the Monitoring Port Analyzer register Date: Thu, 21 Jul 2016 12:03:15 +0200 Message-Id: <1469095397-3837-8-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1469095397-3837-1-git-send-email-jiri@resnulli.us> References: <1469095397-3837-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Yotam Gigi The MPAR register is used to bind ports to a SPAN entry (which was created using MPAT register) and thus mirror their traffic (ingress / egress) to a different port. Signed-off-by: Yotam Gigi Reviewed-by: Ido Schimmel Signed-off-by: Jiri Pirko --- v1->v2: - fixed wrapping issue in function pointed out by Jamal --- drivers/net/ethernet/mellanox/mlxsw/reg.h | 67 +++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h index 341ee245..311b5c0 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h @@ -4660,6 +4660,16 @@ MLXSW_ITEM32(reg, mpat, e, 0x04, 31, 1); */ MLXSW_ITEM32(reg, mpat, qos, 0x04, 26, 1); +/* reg_mpat_be + * Best effort mode. Indicates mirroring traffic should not cause packet + * drop or back pressure, but will discard the mirrored packets. Mirrored + * packets will be forwarded on a best effort manner. + * 0: Do not discard mirrored packets + * 1: Discard mirrored packets if causing congestion + * Access: RW + */ +MLXSW_ITEM32(reg, mpat, be, 0x04, 25, 1); + static inline void mlxsw_reg_mpat_pack(char *payload, u8 pa_id, u16 system_port, bool e) { @@ -4668,6 +4678,61 @@ static inline void mlxsw_reg_mpat_pack(char *payload, u8 pa_id, mlxsw_reg_mpat_system_port_set(payload, system_port); mlxsw_reg_mpat_e_set(payload, e); mlxsw_reg_mpat_qos_set(payload, 1); + mlxsw_reg_mpat_be_set(payload, 1); +} + +/* MPAR - Monitoring Port Analyzer Register + * ---------------------------------------- + * MPAR register is used to query and configure the port analyzer port mirroring + * properties. + */ +#define MLXSW_REG_MPAR_ID 0x901B +#define MLXSW_REG_MPAR_LEN 0x08 + +static const struct mlxsw_reg_info mlxsw_reg_mpar = { + .id = MLXSW_REG_MPAR_ID, + .len = MLXSW_REG_MPAR_LEN, +}; + +/* reg_mpar_local_port + * The local port to mirror the packets from. + * Access: Index + */ +MLXSW_ITEM32(reg, mpar, local_port, 0x00, 16, 8); + +enum mlxsw_reg_mpar_i_e { + MLXSW_REG_MPAR_TYPE_EGRESS, + MLXSW_REG_MPAR_TYPE_INGRESS, +}; + +/* reg_mpar_i_e + * Ingress/Egress + * Access: Index + */ +MLXSW_ITEM32(reg, mpar, i_e, 0x00, 0, 4); + +/* reg_mpar_enable + * Enable mirroring + * By default, port mirroring is disabled for all ports. + * Access: RW + */ +MLXSW_ITEM32(reg, mpar, enable, 0x04, 31, 1); + +/* reg_mpar_pa_id + * Port Analyzer ID. + * Access: RW + */ +MLXSW_ITEM32(reg, mpar, pa_id, 0x04, 0, 4); + +static inline void mlxsw_reg_mpar_pack(char *payload, u8 local_port, + enum mlxsw_reg_mpar_i_e i_e, + bool enable, u8 pa_id) +{ + MLXSW_REG_ZERO(mpar, payload); + mlxsw_reg_mpar_local_port_set(payload, local_port); + mlxsw_reg_mpar_enable_set(payload, enable); + mlxsw_reg_mpar_i_e_set(payload, i_e); + mlxsw_reg_mpar_pa_id_set(payload, pa_id); } /* MLCR - Management LED Control Register @@ -5243,6 +5308,8 @@ static inline const char *mlxsw_reg_id_str(u16 reg_id) return "MTCAP"; case MLXSW_REG_MPAT_ID: return "MPAT"; + case MLXSW_REG_MPAR_ID: + return "MPAR"; case MLXSW_REG_MTMP_ID: return "MTMP"; case MLXSW_REG_MLCR_ID: