From patchwork Mon May 15 12:37:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24309 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id E33777CDB; Mon, 15 May 2017 14:38:41 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0072.outbound.protection.outlook.com [104.47.37.72]) by dpdk.org (Postfix) with ESMTP id 4E3A2324E for ; Mon, 15 May 2017 14:38:27 +0200 (CEST) Received: from BN6PR03CA0052.namprd03.prod.outlook.com (10.173.137.14) by CY1PR0301MB0905.namprd03.prod.outlook.com (10.160.165.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16; Mon, 15 May 2017 12:38:25 +0000 Received: from BN1AFFO11FD046.protection.gbl (2a01:111:f400:7c10::126) by BN6PR03CA0052.outlook.office365.com (2603:10b6:404:4c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Mon, 15 May 2017 12:38:25 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD046.mail.protection.outlook.com (10.58.53.61) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 15 May 2017 12:38:24 +0000 Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v4FCbxO2003970; Mon, 15 May 2017 05:38:23 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 15 May 2017 18:07:37 +0530 Message-ID: <1494851864-26029-15-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> References: <1492607395-5922-1-git-send-email-hemant.agrawal@nxp.com> <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131393255050438457; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39840400002)(39380400002)(39850400002)(39860400002)(39410400002)(39450400003)(39400400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(86362001)(48376002)(575784001)(50466002)(105606002)(5003940100001)(76176999)(50986999)(5660300001)(2351001)(110136004)(38730400002)(47776003)(33646002)(106466001)(36756003)(68736007)(8676002)(81166006)(54906002)(8656002)(189998001)(53936002)(6916009)(2950100002)(6666003)(77096006)(305945005)(2906002)(50226002)(356003)(85426001)(4326008)(104016004)(8936002)(498600001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB0905; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD046; 1:gzIj6Y3wlsiZeOBrUdCeWvEi1yG/YMVtwR2HhRLqhdFnI3Cs2GNdBez0dMtwfJiP4rvrwrSDkrLjkqEPe0uQI+fF2ZCwdBEsKf3WuLodNVV7uns4Lt0wwvMQ0rlSVDa8G1yX7eSYmlsiIUaivvo8C6W1c8UFNCLX1D36/KitaLlHuWw8fqnIBCW7RPDvbfO8FvdT6suJgIB7LFlGuUZQzMX5eRdsmFabDelMwlkslTRi9rv79BNcER0WWt/Tf7BygUETs2FPKaSLU1rT/6QwqrvkmuBhflOhV6jfwM/Zr732p7n3kSDn8qezXF9dD/0H7CPrU+dbEEyK+YWx9I/1zD4tajzyU+WO/nrAWF8NxIHpQrRZHthiFbSwJzkul+QU39jcgyRVf9jqpE036AAgYPTe89aJcuxJRixrncas7/oEIBnqshSmxEM5HH2uDN+gOkbUrMLe2rqBcq31/bsjo4qmjHCIBdo7h2Q5MECcoc2KDBQDd8FrVoIHxarOWhGgRnkFkKMzch373/3T+cpMpc+ncIL7RbgjfqQnl0JI0hy9Bi7lNe/lz/tyVIsgHD33SQaClHT9vvqeGDoD04NTYDGle4P3VtZ4qWwhDK/9Cho1eQMWzya7uLP0GNBk4Gh5Nj/2XPU9x6aiWwAKJ5rrxdclsA0+I++akK6FE7ufYIeMJiOZ+yE1vl6qELCUOSCsHLzKCqz9kU/gV0Q5yKr+H21bg0woJ67oCd7Wj1Q6mucdj3YBtnJiEKKVP3py7OfvtvWNOrhsVeqnaP/MwfauHw== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4d475333-3ddd-4335-85ea-08d49b8f479e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:CY1PR0301MB0905; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0905; 3:4uCyw48JbBLrnNoYTNGifcKpqI9Yl5qv1JJ0fyouGeQysCuiowuvGQmRzmoXvF1NzzmzcPkMno05IQfyqhcvnJ3SySMv/UiAt72MzMcjU63Nys8z0VcqaF3aQpjv2E1CF9JJTDyEKLseIWUF6llMfiseuEwcu8/6K2A91JUuA8cs9/i88ux/ECXu7MJleeQPIC9PpDWZ4oFOQxV3yMxz9BzNHLf7X2jtRv1OwEHSTnPfIV0dbuiQx5x8CoOQjHVSkDJEyNOBr3sy/gdL//dvyQJWzJKx6glHlxbqzKGLBfB3LoEcaXAd2QOpSVVwALLfxcMt0d6St2jowacw6/1TUMdEwpMd8msd+fLDhLY/22LSXinzd+bcG483CdtsLL9QnOmuWhZKKL1+sAzmYAD5uE73pQ6l4OyyBjceVdb3pBcN1saYDodsa+pYGUWLvPNt; 25:zHKa8AM2jgB27MLfrKH0+n5GD4N2xTxwV8Uy3g4RBN+3Muxu5wF+ZbDEliSxHIDt5loxby82Qqiqap2ePbRikNvZAIr77vM/xW9Uwl7o+5i7MaDF3Rek22eiln3XU+W3K9uwBRyFsRox+1YqlPQ28LFh7AaaKG8abWyt9X117mb2Af6T+9vv3SxzyMqyAf0ZF1MO7BusBAbn4+TslzUmWhSy+RQhpp+uNB2tD6tzm/XKvebF1Xb7Dj22OxGadd1ceV29l5xxq79hTIUjNFHGaSbht+JU1LZP/yEmA+LuISOfyuVW4SY/lWJYWiEJLtv+2moOBIi6c+cRH/HoqZdIslQleuDg00TrBPREO88F4hI1q6W50Z0KQwXpFgM9joxz/oLlWfArxwzf8wDZXqtobhJU4uqx75csK5KpOcEDoG6fa+2TuOdOEBB1QPcogEBBhx/5I0YvXHC6Sjgr0PMxWA== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0905; 31:G3gcoffj68f2yf8sKNzmTOyvvaWhmNc26ltcnd8uZkwLTKX3GHJ7ek1B/XZAG/OT/9rN1UDu/Y799XVg+EHR08iIEJUFjmMIllCAvXSl4jTx4yUXlDCIncC+ebOa2BhGuRtpCLh4dsBMzkft6TAt/klQmLxIXCqHHsJHVka5lUYEErVj/vGckiVjMVc6/f0oHULGSazw+QVtje6Jl7lkHZV5osfCXaawmiz6rK/8u/9QfnHmMCijfTa66a6FKfr1ouGb9ddfA/gL0UGDgXiv0g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13023025)(13024025)(13018025)(13015025)(5005006)(8121501046)(13017025)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123561025)(20161123565025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123556025)(20161123559100)(20161123563025); SRVR:CY1PR0301MB0905; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB0905; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0905; 4:CZmqid6FyJTfqQ/xHNqyFdHJdkg7WbtUdErGeKb6?= EWnN+wkk4uhLlZCbPLnealT0oubyCmp20/kJhsHiFQOwmOqOopEkdTfxYnI4IGXIfOaZRmWjjR2zTbqH3Z19pc7VMIN6FKbEHvwFxvt9PtmANjqDNBdJhydBFXWUMaaTo+RXPMQzlttkqiheiY7ot5rKAQl7zWcg56biHdZOQnVpVNHy3b2V5PsBYDFsK3M2soJC+c6XtRvfHaWJYqDNC5ynwr59AM0VHYMxCyjWwXqGZvJqqoF/f1v+2dP1+evj1iySTWSZZAd+Psu+RRZvTaGvv3FemzcdLpFxINIi+BtIPL1kFAhPDmCg4/xWs5uEcs5eiFoOh/BLU0tTBwOOFIvhgflfeoVFCkvosFH8YyA+SkCU9cVoX1NtaHh+JcOyO/2QmKcpp3rVgpw/3nNHwyq8U8+E4gFKkQfDFotnlTU6AjcSty0iZ+XFiTHR/Bd6PZ/8zGhaeNiffdP6zSE9FBc4fqesZHNpbJPww7KntmyuR2leX+lrnIsHfiD6W+gQSH877YePEFxxoHVEK9FC9GCp/oP+dfLsWrL/M5QB34adxeC+YuUISOXvGpaXdZM9rZ6HRFJa8If1JBv3wUAbm1IPyhm0hG/H+Hky3u7lT/A7z/onJoRtzMC+Zj7fGog6ELIxNzO37stBSHQlR6lf7bGf3zrlz2VKBo2Wjh1lfz8GJBYv7ww4fRllwUblY8jHTKX7b8pO+Nud2z4Ypx7Ubhm50ldsGJ3K2zhLie7ROa8Dyou2XqOfKX6DaouzMVB3yAHcsE4ppnX8tLbZHZZzRTHvygqsSenbE8qLDyaKxtr9D3MRHw7knvIdXsZvRy2Dt+Heo+Yo1b8y0sb22pxFSvzqqGo1RasPLO+nPr1yM4Uu++Kxx8ANapIUR/Z82zIzPsAv8yH6PdDwZTyM3bfhz0cS6qjbAjdVr1PUU4gewkEw1ZmpL6YcHhnrro3oUDNvW0s= X-Forefront-PRVS: 0308EE423E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0905; 23:JvXseUZAFm4PuydXEAatTFuxeIZCM6OeOFRu3g1?= jV5/e1kqXUI/0w5kTnTCDZPg5dQ3En2zI9f5bORq1KhmlEH6bSAWAdNYqooTKC8M+fMDB0DM/B4RoJzpYqcektD8BkcBWOX8BdYrP/Kh20AFoObuUpvxb7gkEwp/97v5clinrOG2rDgnbiOJsnjwgUzZWQlUWKl8kYJE9UeP6fytOzlvu6jER97I9CLQ7qQ9q1ibdVYVcfENBHqdwYjl+WMp2znrqiSapZ1kzoY3312RRni11CwUT846rOJ6TNXRbHk9pQqVBBpLF9dADoNLeSUM4xlVj95/6Xrh5BOLH5MuLy6fTC8I5wrWOl1be70U6oo2BbMF/e37LaUS1eFJk/Fbn27tMNjaykr4RDPBDzSibOtDmJd94S3bbwWyvt5qyAAvWZP0Gj12E7BwwTTrdxx5rD1aUbB7cNideG9IF1yEFJ6Zy27u77Xcp7jG/N4ELDaMZNEnJp7lJquJe77QesRC/xHXYmpr5QnHpJE/N/djnDlGiiQ+kFfsuMlPkiuQTQsL4gekXoIp2MR76nQwFd1nj2ab2MOkdSxjXNqwXUJZ1rfJ6ID7Z2BJ5jmZGf2s8I9kEtOB+bOrvAn3t7JkQ223fyJ2irsV0yzBcghim/xmbJB/nwMuDP0FqArPvZHJg8F3ccnOTGn+wfEIWNXAbFRxHhegZXkFhl6Lbi9M9T48CkZ0XdsCdt0yLhhISfCjZUjQRs0t6Fx/xGscncyj1+jsCfWwfRWDMv2CaUn9pcL5600pY3VxoBSDqyn4dOjgKh/kNLX73HI5N0A+ya2z0GzrzCWSUL5rnJmi0OYPDc0777fpDAB62nziVXLjvoha6pCT06I0TJ4mocQ6myt6elhNqr2sNf+rqgp5yIBZQLO9YovZ8P8fzSLSA7/2tElVUHhU4AodUtpbMOz4GbXEyOs+DiPHuFFHOcEisWYPFhqWIz+eg/+ujyACHokx/gRIHEwoHTBEi0C0uFvZLU+cVl04HotuqDz/mycW44fbH6A2zcsrZv2S848mr8Z1ui5UEJRSEG2oUGdF02WcXKS9b2WCPFllujOmehlyr9ZBvncznn2LNQmT7hLA5Ix+NUxKdZA4VM+vdDLEowJXg4Iw+nkLa/NkODI2EqOuBfyfsIVKsQWcll/08XV4BlYUpgs8E84rMST9pymcLP1HCWV1q2q8QLUJbNPJN0ZFCycVYR2SwGXIINqSZPJgLqB86+gizOY5MXSieLatrYFtCnP5+2GO8z9w3OskrX6dmJkERFj2eKg== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0905; 6:OEWsCVQNH8n24Z1X+AaVmY2AOEp8ehvyqmIHDTilSNTtzYWdhpKvdNWliaeaVByE16ZVniNuwOTgrGDsjZxV6ZmqRfGbR4xmCbFdLGi9CfIUILBHAKAWFJIj8T47V9IZmIudbYTDYC1iJwxlrTpdgYlgUcbJxIxaP6BTKa0eBSf1xL8MtTzmUmfHTRmluPzIWxk3o860GOiqqfSKaYW4aKJq9hhYQoTQ1r2rb52k4TosdMl9QSbNt8RLsDW9jP3VFf6yCMU2+/NDpwJ6HVjWDoXYFqpjPoF0WyEJQucejgcYLinmHqe7stjy2TrgmLklTtUQNFCzjY+/Uua5FbRf7H/LSTkk5ELZwl1BvKazY6uMkkHBneEUW20tqztYTJRdF9yo5XMC3o8kGl6c4Oa7AmVpD1abOIQlUyk0FuUcboZQQYzzdkOeMV2eLpO+Rtzfl1lA/q7R9k/41aQONtyfZXBcVi1Rp/sLR7ZCgaOVodxGvUBEVKlv/80vo0Bk2eKoOkebWYVP9PmAuPbwNZwdCQ==; 5:UripFOXx76HQIPtt21Liyt+j6crPz8rwgmsIWxcmz3M5QlLmndZYlhq837hyQc9Tt/swreqnCphxd1g6eEydwT37KdjRdkxPg476ZYpqzjgCSJJfoDZbxhgNpr13EOr2LiCS/IRopeLG0UmoSVGHBD+wziANIFfSjqN4hRPykguCi4K63F2qSjKushOiyEMs; 24:V77Id6MlwYo9iGErmcmYgaXPrFOrbJ+zsEo4fQyzqslB/iWcnUaUPSIBP5QSARxHT4EmaGUYGbRUzcQeKK64mIoGfbZXfSTExanqfYirJU0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0905; 7:w/E0fIDRcya3/T6Dl5hG//wKvXoBbti4OED8MHK+84akKCzHY2MB98lMUyWBtX072bQgbTGLMhY5BoR/WoSd4qukxIBqLd/+KEez/H4J0ZHPRmW1sxmB6oBGGux3uRr5OZUaTobx5xonBfY/SBOo/UrI9ea+99nt8WEltnTF6fjG30jPIGejBmVXgeaXemngKPUY504KhNIXoOhgtSpbZJxt2Wp7cjfXOTAie7Sl9hgecdwS6rbg2bSFqce+4itFpcvGkpZXXUMfi1vai+8sbCGs/krgM07kGaqLSSAWWu1ayb4yJe77YcuDGqyaRtIE/A9qvjDpTRxSN3RHAh9PYA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2017 12:38:24.8566 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB0905 Subject: [dpdk-dev] [PATCH v2 13/20] net/dpaa2: add support for VLAN filter and offload X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Hemant Agrawal --- doc/guides/nics/features/dpaa2.ini | 2 ++ drivers/net/dpaa2/dpaa2_ethdev.c | 55 +++++++++++++++++++++++++++++++ drivers/net/dpaa2/mc/dpni.c | 66 +++++++++++++++++++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni.h | 54 ++++++++++++++++++++++++++++++ drivers/net/dpaa2/mc/fsl_dpni_cmd.h | 17 ++++++++++ 5 files changed, 194 insertions(+) diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini index dddf0e0..4b1e000 100644 --- a/doc/guides/nics/features/dpaa2.ini +++ b/doc/guides/nics/features/dpaa2.ini @@ -11,6 +11,8 @@ Promiscuous mode = Y Allmulticast mode = Y Unicast MAC filter = Y RSS hash = Y +VLAN filter = Y +VLAN offload = Y L3 checksum offload = Y L4 checksum offload = Y Packet type parsing = Y diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 22e0474..46532b2 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -108,6 +108,56 @@ return 0; } +static int +dpaa2_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) +{ + int ret; + struct dpaa2_dev_priv *priv = dev->data->dev_private; + struct fsl_mc_io *dpni = priv->hw; + + PMD_INIT_FUNC_TRACE(); + + if (dpni == NULL) { + RTE_LOG(ERR, PMD, "dpni is NULL"); + return -1; + } + + if (on) + ret = dpni_add_vlan_id(dpni, CMD_PRI_LOW, + priv->token, vlan_id); + else + ret = dpni_remove_vlan_id(dpni, CMD_PRI_LOW, + priv->token, vlan_id); + + if (ret < 0) + PMD_DRV_LOG(ERR, "ret = %d Unable to add/rem vlan %d hwid =%d", + ret, vlan_id, priv->hw_id); + + return ret; +} + +static void +dpaa2_vlan_offload_set(struct rte_eth_dev *dev, int mask) +{ + struct dpaa2_dev_priv *priv = dev->data->dev_private; + struct fsl_mc_io *dpni = priv->hw; + int ret; + + PMD_INIT_FUNC_TRACE(); + + if (mask & ETH_VLAN_FILTER_MASK) { + if (dev->data->dev_conf.rxmode.hw_vlan_filter) + ret = dpni_enable_vlan_filter(dpni, CMD_PRI_LOW, + priv->token, true); + else + ret = dpni_enable_vlan_filter(dpni, CMD_PRI_LOW, + priv->token, false); + if (ret < 0) + RTE_LOG(ERR, PMD, "Unable to set vlan filter ret = %d", + ret); + } +} + static void dpaa2_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { @@ -542,6 +592,9 @@ "code = %d\n", ret); return ret; } + /* VLAN Offload Settings */ + if (priv->max_vlan_filters) + dpaa2_vlan_offload_set(dev, ETH_VLAN_FILTER_MASK); return 0; } @@ -951,6 +1004,8 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) .dev_infos_get = dpaa2_dev_info_get, .dev_supported_ptypes_get = dpaa2_supported_ptypes_get, .mtu_set = dpaa2_dev_mtu_set, + .vlan_filter_set = dpaa2_vlan_filter_set, + .vlan_offload_set = dpaa2_vlan_offload_set, .rx_queue_setup = dpaa2_dev_rx_queue_setup, .rx_queue_release = dpaa2_dev_rx_queue_release, .tx_queue_setup = dpaa2_dev_tx_queue_setup, diff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c index 54a1568..e92fe06 100644 --- a/drivers/net/dpaa2/mc/dpni.c +++ b/drivers/net/dpaa2/mc/dpni.c @@ -708,6 +708,72 @@ int dpni_get_port_mac_addr(struct fsl_mc_io *mc_io, return 0; } +int dpni_enable_vlan_filter(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + int en) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_ENABLE_VLAN_FILTER, + cmd_flags, + token); + DPNI_CMD_ENABLE_VLAN_FILTER(cmd, en); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_add_vlan_id(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint16_t vlan_id) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_ADD_VLAN_ID, + cmd_flags, + token); + DPNI_CMD_ADD_VLAN_ID(cmd, vlan_id); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_remove_vlan_id(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint16_t vlan_id) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_REMOVE_VLAN_ID, + cmd_flags, + token); + DPNI_CMD_REMOVE_VLAN_ID(cmd, vlan_id); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + +int dpni_clear_vlan_filters(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token) +{ + struct mc_command cmd = { 0 }; + + /* prepare command */ + cmd.header = mc_encode_cmd_header(DPNI_CMDID_CLR_VLAN_FILTERS, + cmd_flags, + token); + + /* send command to mc*/ + return mc_send_command(mc_io, &cmd); +} + int dpni_set_rx_tc_dist(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token, diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h index 03519fa..20ab869 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni.h +++ b/drivers/net/dpaa2/mc/fsl_dpni.h @@ -945,6 +945,60 @@ int dpni_get_port_mac_addr(struct fsl_mc_io *mc_io, uint8_t mac_addr[6]); /** + * dpni_enable_vlan_filter() - Enable/disable VLAN filtering mode + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @en: Set to '1' to enable; '0' to disable + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_enable_vlan_filter(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + int en); + +/** + * dpni_add_vlan_id() - Add VLAN ID filter + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @vlan_id: VLAN ID to add + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_add_vlan_id(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint16_t vlan_id); + +/** + * dpni_remove_vlan_id() - Remove VLAN ID filter + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * @vlan_id: VLAN ID to remove + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_remove_vlan_id(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token, + uint16_t vlan_id); + +/** + * dpni_clear_vlan_filters() - Clear all VLAN filters + * @mc_io: Pointer to MC portal's I/O object + * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' + * @token: Token of DPNI object + * + * Return: '0' on Success; Error code otherwise. + */ +int dpni_clear_vlan_filters(struct fsl_mc_io *mc_io, + uint32_t cmd_flags, + uint16_t token); + +/** * enum dpni_dist_mode - DPNI distribution mode * @DPNI_DIST_MODE_NONE: No distribution * @DPNI_DIST_MODE_HASH: Use hash distribution; only relevant if diff --git a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h index bd2bb3f..6e96271 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h +++ b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h @@ -75,6 +75,11 @@ #define DPNI_CMDID_REMOVE_MAC_ADDR ((0x227 << 4) | (0x1)) #define DPNI_CMDID_CLR_MAC_FILTERS ((0x228 << 4) | (0x1)) +#define DPNI_CMDID_ENABLE_VLAN_FILTER ((0x230 << 4) | (0x1)) +#define DPNI_CMDID_ADD_VLAN_ID ((0x231 << 4) | (0x1)) +#define DPNI_CMDID_REMOVE_VLAN_ID ((0x232 << 4) | (0x1)) +#define DPNI_CMDID_CLR_VLAN_FILTERS ((0x233 << 4) | (0x1)) + #define DPNI_CMDID_SET_RX_TC_DIST ((0x235 << 4) | (0x1)) #define DPNI_CMDID_GET_STATISTICS ((0x25D << 4) | (0x1)) @@ -325,6 +330,18 @@ MC_CMD_OP(cmd, 0, 1, 1, int, multicast); \ } while (0) +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_ENABLE_VLAN_FILTER(cmd, en) \ + MC_CMD_OP(cmd, 0, 0, 1, int, en) + +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_ADD_VLAN_ID(cmd, vlan_id) \ + MC_CMD_OP(cmd, 0, 32, 16, uint16_t, vlan_id) + +/* cmd, param, offset, width, type, arg_name */ +#define DPNI_CMD_REMOVE_VLAN_ID(cmd, vlan_id) \ + MC_CMD_OP(cmd, 0, 32, 16, uint16_t, vlan_id) + /* cmd, param, offset, width, type, arg_name */ #define DPNI_CMD_SET_RX_TC_DIST(cmd, tc_id, cfg) \