From patchwork Mon May 22 09:39:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 24438 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 5C4DD7CCF; Mon, 22 May 2017 11:40:38 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0042.outbound.protection.outlook.com [104.47.36.42]) by dpdk.org (Postfix) with ESMTP id EF83258CB for ; Mon, 22 May 2017 11:40:13 +0200 (CEST) Received: from BN6PR03CA0062.namprd03.prod.outlook.com (10.173.137.24) by CY1PR0301MB0906.namprd03.prod.outlook.com (10.160.165.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Mon, 22 May 2017 09:40:11 +0000 Received: from BN1AFFO11FD008.protection.gbl (2a01:111:f400:7c10::135) by BN6PR03CA0062.outlook.office365.com (2603:10b6:404:4c::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14 via Frontend Transport; Mon, 22 May 2017 09:40:10 +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 BN1AFFO11FD008.mail.protection.outlook.com (10.58.52.68) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Mon, 22 May 2017 09:40:10 +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 v4M9dk48031538; Mon, 22 May 2017 02:40:08 -0700 From: Hemant Agrawal To: CC: , Date: Mon, 22 May 2017 15:09:22 +0530 Message-ID: <1495445969-29199-14-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> References: <1494851864-26029-1-git-send-email-hemant.agrawal@nxp.com> <1495445969-29199-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131399196104680587; (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)(39410400002)(39450400003)(39860400002)(39380400002)(39850400002)(39400400002)(39840400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(9170700003)(36756003)(48376002)(50466002)(33646002)(106466001)(105606002)(356003)(5003940100001)(2351001)(498600001)(4326008)(110136004)(38730400002)(77096006)(54906002)(53936002)(8656002)(76176999)(50986999)(6666003)(305945005)(47776003)(6916009)(104016004)(2950100002)(85426001)(81166006)(189998001)(5660300001)(8936002)(50226002)(575784001)(86362001)(2906002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB0906; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD008; 1:SVtEIFHaUrZVN/oW0P1WEy+KlmPLHEmm+6CSmkol//Mz14kd9x8ylEC6e2Xmc3CN8/aqXI/L8fXTh1M4+vOHxO/vWQbjqAtsoF8zuvc4EA4iE4F6e2kid3efqP3MIpjwxFd+Lpe3kEH7LolrV/ZpOXdkMJqUlITZxnCpJpOSrsYBIrOyNDvOE6QM7b/KmoTEW0Bsfp24ZInAwtD7WW0RTuDehJka0P2asUxwXvC/s3QitFi+u2F8IwIxTyHwMQfMk9PkeYcHSHH2FlcoSDGHpKSDThQlxB/Us1c5N0vSs/H0YkejdL8xNwud818/5ZH7NUDTZeb+xMOPyu4TmHs7t8sBswur3JD6QDj1ssE9Y8bqgB7lvbv1wgii2A2bWmaZQA14ePTR1AdNo30uSxXqtDIMCtB08aY7pHuZNNC8cpsk2ugLuBIj/QSPG5vNGHkZhUap38gvI7KH6Q7DiBb/CnkDuuQ+PfekuzfIiy5CGsfnUDBX++CeCPMwcU6lnlvWZ3TEtSRrwYL8m+QaDl+rnBamY4z7hPHo9SWCTxIKp1UBDTqQfHqPCLmG19lxinxsbSexIDAxhN4pZaFQzz53GXe2J8tAI/RCNQ8MC432qFIHYecq7ylSLaPDk90HST3Ww5UmLvB876Jg9pPg/HJh/o7Kt0MBD4p7LBjyl5ySlBSIxLqCAAkoZeDfZ+5ljV8mF9A+EbXn4QTfZaXzDYQzeYxcSny9YpUC88IiSMyRYpxYjtJ1G9ch+un0atlHKWgwbmQHcaI6uZTiMmKsSATQxQ== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY1PR0301MB0906: X-MS-Office365-Filtering-Correlation-Id: 3045d314-1da3-479b-032b-08d4a0f68a0c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:CY1PR0301MB0906; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0906; 3:YpUuKo0IBOFMX32NmAhs8bfatQXzRBzGzNNFfrJ2wmYvM8p96Oi76aqM+PCh0tmCZmjOnByelTbW8pWR3icDHpuV5Y3aCOza5iqeCBeEWIpUx1nZOTKMdWYEFyGogaMdA6uh+Cy07lN2SIZZ2+5EXkZwMs/Yw2U++Y2oJok5b+u3EhR6gnYgtovK85RReGUHCv6Lu9RqC6eJ9UcFsgydkdXFCmOytZxeE8BiLXjIvlUVBRL3W121FgykKRfHDJULXs5k0F52GdMZlrc9rmIytxDRsMkW0FeIc6xA/itwt1kGfvEroWXZx8n13HthMiiKgBX+7qs6HErS9nKntxPs2ziqu+ZYsImdeRoyJBxd4gRzW/NmQvU6PIGfPusNxNYnYop9hH5nPpD5XckN32nxii7vHQQ66Q1wNMkfNOC+N3kCcmYvuS5uteR3meCBcr3s; 25:QrW6kcKMcIhh9r47mvdSUX2qSXFshr17Af+vtaieZiDRIa4fuG/kjXS2efDLWxg6uSN8kMk3QcHaXrU58FO78XXWFpo/05VhrYaHsC96KnhAl5UfnllXP7usBjgcfVLR7BpyKmQlspKLFshZN320JUl/g3ukI2RHzaLR1AVeo6loJGDUlr80Fm8QjKV7LqyoIj2iRSzPsNoIOE9h0/e+jJ1VAu8xrz3L7Bw0SBg+ZOgsmNwHs+PgNTLb/c9XjULaLds7Ll+KRUZGFyV2nltStWiu0t0Oev0+kJOMcqd5mbMUiTkKPVApeNlCcpEhvjtacYYctIzCw+QkynUiNACDolAC28sDA1oKLFIWhKHmj4m270T0JlS/uu2sfs2F9rLcxos4rSo9dTfJARzEwOW+b5b3ZOzg4hph5+UKc8Jl8L1IoDpAJHQgmAQpgJ3btl6xaCqduJySW5i9G2Fe8gwyY6BjsUPLqzAbWOkZVbffo4U= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0906; 31:pBn8KJs93HaSdFkZvn6sG48TlRuBj+1rubM9uv1CWyNtq2njGMq0r7Yyiq5hOvbzTQiy2xN0H5GPswdBHUdnRwgksMvANgRI4btRkSVTDoG0zZXfseVP7IAjX31buyQZ8Qg0MSF3KwQ+Ru2Sc2tgQin+QQ4puhtW6hDig0kxgZ3uliKx6WGAD1N9YKa98GYCxQ3YdAL+yMHtE4NJF1x6N9HQcehcFljGKuGAGb1FcawjlxWJ9F/U91l6K0rVLpXLTFddSmH0otlZAoMfZcPfdA== 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)(13017025)(8121501046)(13018025)(5005006)(13023025)(13024025)(13015025)(10201501046)(3002001)(93006095)(93001095)(6055026)(6096035)(20161123556025)(20161123559100)(20161123565025)(20161123563025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123561025); SRVR:CY1PR0301MB0906; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB0906; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0906; 4:HZQJthwax7TgIymHi/LGQ04RoEgw+mEB4jVT6mFq?= fEz0vieTJEe2VwqgXdpcuBkAvG1Cx6HPZ29HckitWUoqbUbOHqvYt/shD5MZfHlcn2tYTv8Eqt6rpLeH+JCdE+JcqTZQTKd1dBpQYkQNpR1bjaGiu64YbtjIGPui6gAF27XpTOf6o5jU3Sq8zN3bc6LN3TM8wE6SITHl1B+YL2M20KA7hlmYV8v1w5FfMoASXzjlbm3dzHApPedb9/HZC1EBS6OqXnIbFFUdgPEhWDQeDrBdP3hFiLRnkXbwZ2aHNwCuqy1hgpLveKUUl+/yMDJr5hzN6MqF/F2bIjOAtYmyYc5ReJy/AdjY/26arp/14vtVDloWeP7LST7lSe/eb+YmQjJOG9Ms9Fcasod96UqPw+WhibhN3DDwhMfllUtF021VqOfLcoym3QlK9evsjELVBe8CBTYWClsEr0EvaBI4QMgJUJQC+qW9qf1ws/z5N5oLW9FtgDrsaVJWiUzs5LVY8WoFCOUnKSdlAuzU+jZthaT9bE9yOpsfawZx011se8hv4L0yxWGOt+5rsG6nrqSsLwBu9qW0Zol1KS4nMrPQienC8iwQyQmehazW+08TuVcnHZKmlQYkdm2MIM/XIxnuXd94Wvyq1cEi62WfUor7jMaWftYoDMpbtIOF0KEkpbzgA/9bGAIYv02m0SDOsWvjqVLtywcgQtWM2GcpBBawRiTUUupGo2E5CjGEDfqfvki6hl3K3GHotnwV4U49gCYf9ld3SGT7lpNwAFoIEEEZXCVB1BoHnR3ZuNG0vYS+OBwoIoDbOEy9zk6xIgC262FEt8rgyPc1i8tnWa9w+OUyHBYtiTcqyDcNsTZ64wtAA6LvWSeJceqJCTUuxpS0ye8nIQ6l9ZvcUnGwo9M8WstcRpucuBRCN7ucvrUQjX1mzi3YJhbmx2YAvfgTAawx5O1rkfb1xl8UxOf/TS66YtNXJAEIux3+6XNztSZQMIOMd74= X-Forefront-PRVS: 03152A99FF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0906; 23:h9NOon1tkulmuWvlaLcaI716i0N6lN19HbcnTmD?= 0UHPvvbxfVOzLlwB6H8MaEWMlP8G7XQNnazhXbfmDtBydv2K2tXi5S/qyw5Zv85t5wcpcA7Bn2c3yod6ayq2FCEf/1XRpHG989gHh2WpMD6CV1RbJRn5GudWwFA/+E37tBUnSBv9WNI4M8mjCVEPuqFIopACxI8I8NWz5WNdoS+lMzKsaQUdLVfw7d9AHHOX7PeiK8Oz/jZOljGBqjBbnXdiTZqEID14KtlRFnPNkEUvhPmZ0UWXHz4UP5QX9ti+9klOgm0xJ+uhr7Lg/GReItgEAxEa58Ti4J9/gUBmQMD96RLBteCg28lcFBTvdtR1wlPPF89gqtlPyeEAfPpsPgDp0DUczD82rZ0KJZsDAAK+z25bV4KENt4dCHKQHEGjzi9ygGx3YEOxnBAMhBCK+jXemTlKeSGLm1dIiQ5ADI0ZegcuWwLHSXqS2c0TPW4PseTC2oerLi+Sxez00PrKbnPOz/mKDUkSZOmhdYwmJyNgmqXC/pfYPcQ1OK1lOaBOQWpfrLcqNInZvViSLUYJM9rF6uKOuSZTztNu/OJrn1Xg1XfRX0DwuKx7e/aFtJ5dmk2x5OCtUpHERwBV891dbDfTF/raKnSn/hdr4wHLzuF/VoYtPH/CaqUycZH9cMK0bRG3Uibvb5DuGafKEFNMvydXkmMM8BfeEThhxNN3uWHmLQ/xbvDcYpxfDje+aKJRGGrPopt/Jr28o/gxc6FyEsQAPwysTFSRN3UuceTyyoWPHKVZAtHoG3MihnZelpkoRr4X7eThQPBv83cDaKEXdhPTgu4X6xZOy+4rwQ7mUrUM+DnBnFCWVXX/mxK7IH0R653zdNxRNm8WFaFP6Nw7vem0uX34bUXWJfc3iq/mw9kICvSg1zEwLkuAA80nIpYrchclxsHmcxMCcBUMp+5uUsDV08Z3tU+tP2/UqT76vbwHqrI2d/jfna3xnsqk4mZf594V6XRRSlu1ELc99EGrZIRQ9fJqBrqorQz9mJlKuVdmk7EBUBlOaHPG1X+K0/qG5T/Est7PoI9aooLUGS30p9qthoARUcXUlvvBWmYxrGahRkoxUtVYBu/iQyZhuD07xQ133I5ZgJmrjG1PRfjwEpyeo6xKrwTpJIvw3h2gj2KO5c8JbezpauQIdGXJYlYH46BCtyfAwdt6Vl2xUHXRp3Bda9hjmDAr8xLMmZ6Ne+mNDFi8TI8OSy3KgFF4neFK7QMcrJEQRUDMygZ7c61KnmnwI X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0906; 6:Rr0wWJ7EyhdTyA7vOklQdfn5NbOMxzfoAHVUixoAMSE7pVBauG+RUsYyZ1cm28Pk5cESrlMmRYLuWSEvI30yvjO3WcXde6YbzIVp4CXvVyrddLyBQfdditXjhxcosdIJRIyzIeAhDU3saf9GJ9IXsefyHEUGsFcRDEd24sGU8sBx2ff42RQUCr1gLNidQG6MuRgTSbod43kgIIu0cVNe3Ko8giutJXSHxn20sdGqTlS917sQNWXfYLHEZUTaJxV4l2jnd7Rxizyu6d8UvaR2YI5C2/m2YhMm7MZApGSLLgE6WjA1Vm1lyOgmnq+n4wKqLHj/hV2CCI3EpZ+K/Zi7IzQNtHHef+EN3yZlNyButnvmiUKI3euGpeyq47tXltoeDpoHWe2tFJ8SEUJqntuqXiVT7V+4I+/UjmI2tTMW+0rx53SOtj44IStO555iC2NcvWAyTQW0Tey27BcMWg6VmrPqa8h4HoUao1lVjVFQkeGWgqFXIBs9s6Ezy8tdMt9K2GckQs3HrCpIosPgIW+PCw==; 5:w05+dgE/5CJ+9GpVWhnY8PDL+vTJl5STKBnmZZpb05W+ryA3wka44BIK2eT3UyjS7/go59mrTQiHJthcyJarpSsr+fSPvInhgBTL0c6wXrKbNRWIwfzuoBb0c/+S7BgCfqKNI47p0+yQ7pdMDlL7hhM9o/ZEnigxVIBtnWGupkzRlmASuFkkqN7owQzx9VBK; 24:gAZYcuGjB9sz4ht9JoAbXACXZ0SgIbMKrBdZYue6WueGlKrB67PR6V0CK87syawdkl/vSogrY5OVhXnfkx8JymNNGMZ8+yqY9hYrvhoJVGE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0906; 7:o7MEtC7g0Gd57xWupAIlc9lqxeR/tB24i3toa0OKo7fm2+mGRLXqyhk0OPhpwThJdQYdEN5NZIQxf9UKkBoncm4kwlp1HHKtbtxbhzHZ7BMALkCDXBhVzq4zvd6CXvqbwElKnVGtLftcqXnhO9YK4gDIASgRbWdK2SeoxXP+k8Q69G+u/7p0j6RC7AkVLDodU9wjYxJZmuX2QKSCF8U9Nm3QbLNfS11fBNoOW7z1UptEEfzZ/wdlkIClUkYFdZ4bHqI6Q/8wL6Zm76rIInc3YauB380znq6hgB9zMcfSfjsJQsmFZdbZuDCFj1y1+MDXz+bhi3HsiyB01mXCFkY72Q== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2017 09:40:10.2808 (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: CY1PR0301MB0906 Subject: [dpdk-dev] [PATCH v3 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) \