From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EE3D4A09E9; Tue, 15 Dec 2020 06:20:34 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0E3CD1E2F; Tue, 15 Dec 2020 06:20:33 +0100 (CET) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 2A7C6DE0 for ; Tue, 15 Dec 2020 06:20:30 +0100 (CET) IronPort-SDR: hBd8febLI8krmJeSu7Wjsz8IzK4WkukYrhFo2+FoKjGWNu5fOQxez0TKJGjrq37Iiq8ABVMOpu PESZ9+M9xDMQ== X-IronPort-AV: E=McAfee;i="6000,8403,9835"; a="238928203" X-IronPort-AV: E=Sophos;i="5.78,420,1599548400"; d="scan'208";a="238928203" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2020 21:20:28 -0800 IronPort-SDR: 0Wj28I0qZ0PPRcE/HHLTtK8C9TpWluANlZ90XSEr8+sbfeKkOoYGnsT+gvHMfCXV3bSYkmZy0Y zRYcGF9uNYOw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,420,1599548400"; d="scan'208";a="336538698" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga008.fm.intel.com with ESMTP; 14 Dec 2020 21:20:27 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 14 Dec 2020 21:20:27 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 14 Dec 2020 21:20:27 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 14 Dec 2020 21:20:27 -0800 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.104) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 14 Dec 2020 21:20:26 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hrOP4h55cuEDxNmWrDgMUfN6O9Ge7k6zqGEaM7O+e7dby7IFDAOwysKqv5dJ8VV99XfgUEEdiiTSCNH5TzaqwPW289n7yWASiQiSgsSwlZ4BQ6EXsGw53clmLWQncIdQe6R9mPLQL96Bt3HIPciOM+4X8AF1mTPGDQgiVCS1qYLE8kAeWmrOqLj4BJZRhsjoiobiNn4G3J79L0XMi1s6HUNVZVQxCXSVL+7Vr1A2KZJ6X5/mmEv183MTXO6NwMtSr75jxfMoBCFheKxUHf5Cd2r84cIAS5sTshKbzhlCvXALbpON1OAKSqrPrhbbz+pv5CGn0ksh6i4XQtay3xD1WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D9Gn8QGeTC+atVTh1Y3jOTqNViWosZRYJgai5Teb9SU=; b=B3poHUXf7Fx4mBvpAc0WGBFrU//G2eyr5kWB6yF2sS6lPng+G+5FP6qz4MZV4rZ9Mw9BOQPz+hb0h6C7tAYxRuCZ9BscwdZwBSDIvrsldlpv62T03bEu1jyvRuWZRDoM+fVaZO/mCIrIE8oIJzR2mMheS7WshG6dmNoI5weXO+o8E6uvSFTTPoI0J1w8ASBqOIpO8OO+bLRoiVC2S1nNHbGavkqdqFr6UEv17sdUv68uB1xO0cwRynIJpRKp+RRiaFDt6UDsrlvtLeNHb0OyG8xx+UPy31GRYpTF8EjY9w4PWfCxXD9XFJJJIPxho/EL/4cnkQTw6oFM5FUuWnf/Ag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D9Gn8QGeTC+atVTh1Y3jOTqNViWosZRYJgai5Teb9SU=; b=TtZnJz1LyMrGsKEwOmay34EAD03zaLjirXy9QP1Hs5dSU1vuq89Ql1FsiHzYbnG1lxAfXp8SOvOhoLZ4ueCfHq94Nusz5td46eESDre14Bmo3nOsuuT44MC4CuRFM+1FNI+6fO0z/Bsf+SBMWoPSN2lQwIwOtepEba/spv7IJwE= Received: from BN6PR11MB0017.namprd11.prod.outlook.com (2603:10b6:405:6c::34) by BN8PR11MB3812.namprd11.prod.outlook.com (2603:10b6:408:90::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.21; Tue, 15 Dec 2020 05:20:22 +0000 Received: from BN6PR11MB0017.namprd11.prod.outlook.com ([fe80::8da8:d44e:fa1:afde]) by BN6PR11MB0017.namprd11.prod.outlook.com ([fe80::8da8:d44e:fa1:afde%3]) with mapi id 15.20.3654.025; Tue, 15 Dec 2020 05:20:22 +0000 From: "Yang, Qiming" To: "Wang, Haiyue" , "dev@dpdk.org" CC: "Wu, Jingjing" , "Zhang, Qi Z" , "Xing, Beilei" Thread-Topic: [PATCH v2 5/5] net/iavf: support new VLAN virtchnl opcodes Thread-Index: AQHW0ep+zULGIGNAM0eTYqzGeuY2SKn3nzJg Date: Tue, 15 Dec 2020 05:20:22 +0000 Message-ID: References: <20201214071155.98764-1-haiyue.wang@intel.com> <20201214071155.98764-6-haiyue.wang@intel.com> In-Reply-To: <20201214071155.98764-6-haiyue.wang@intel.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.55.46.36] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 839d407b-c1fa-434f-d919-08d8a0b91f42 x-ms-traffictypediagnostic: BN8PR11MB3812: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DiuLNESU920PVZq+SfCbRCCRCMSiCyV2xWSa6WxrwopxEzV9u8fBx8ODcpkdia/bAqboep4SXvefx3uYpouXbGleaMfOBE7a+VwdmAkjB8j6CyuLxUsu7h7XNeHSmXT//ClBwqs+lpLJrGSZ7s3mSsp1J2E+FoR6oDlIUc4ARyetx7C4PA/ER67YaYooF3wmk+hIi7zJfzi6HwtsbIn7jE28OMWWasrbYiCzM8EQvjwoqaiEBeQbrxNk9O8p2ScmdTmKLgVHOkB1hUMJZCmhiWJ30sMrXUj6CpS0ekscDMsmPog2T7hacHIJ2dr9HCvwf5Vytbs8BKX0858Mc6CqLQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN6PR11MB0017.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(136003)(346002)(376002)(33656002)(8936002)(66946007)(186003)(26005)(9686003)(4326008)(86362001)(55016002)(107886003)(64756008)(66446008)(66556008)(52536014)(53546011)(2906002)(7696005)(83380400001)(508600001)(6506007)(54906003)(76116006)(30864003)(110136005)(66476007)(8676002)(71200400001)(5660300002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?n/NMaBoHmStFUKYantLepL8TiH0MwHwSlqhe9c+iOpYUitHtHljvRmK5E7ak?= =?us-ascii?Q?05oE5gIZm+Pu5h3DxxaId8yJfvmNoTW4k7YPMoZBeo29mknwbjDzkjdNbWgv?= =?us-ascii?Q?VM1CQXqM0vG+XIJ8RFqFkyCvB7Jt2A7zKONe6IBwS3zH47jisPfeGaH10cMe?= =?us-ascii?Q?AQP+I+407ktKu70EQPDakN3PXNFiXiKWn+/SZBTg7MtmqWM1ux+Bgw3TD2p3?= =?us-ascii?Q?PAhuGy7C9wvFRtCjHG61c3MxmReTEa881R8w8VGwPF/l3tz2CW3CPBCoqq12?= =?us-ascii?Q?ZypaSOak05zBvZthpHSdlvI/nbg6v3p2mHoHAKmqKTJHIw4BOVYItfy1Zk0o?= =?us-ascii?Q?Q8OboykzMz5mfYg6CtHLU/i5F+B7B4xABNuM09i/EDefw4+QTkOfpFUoJRFy?= =?us-ascii?Q?Gld2nuBDic41PHxs+dpnn9J1hEIxhCZASRTBdkQ4+j8K4QGZXwVHMKLaMwtO?= =?us-ascii?Q?8A1bLDjUzpghM8wDVLf0iRJ/dkAclf7EEQ81H2+Ek30WeHRKA7QDeFTFaKlC?= =?us-ascii?Q?2Wh7eCNGOU12p2G4ixydyPSgXFCcDRzbFsbdajWPBCCXknLfUaf7sml00u1O?= =?us-ascii?Q?Jy0jTqDsntVua8L8HMuT2GXnJgVVzI3ViP7/GwqldPPwOMH99q0aKXPkxVZg?= =?us-ascii?Q?hIS0baqd0uzQaSloyfsK9xMsVCoiCyPjucH2Fkm/48c4ELbHSZ8WgHK79NNJ?= =?us-ascii?Q?D8RDdGoBNqKBYHuExYUB8FaC27JaAHOTx1uFKz4FdvoSx3dlPeXjSqablslT?= =?us-ascii?Q?vdqUDDr7JngoueVsNeP/PCqSyrJCRmO8dP6+UDF/QsIPd6ORvHMSfnzneDAk?= =?us-ascii?Q?K7EZtsscHnlY16Y19iZ1pUswzehaMW4lgHV+8KZHspfhnKcktgd1sAtDsz6N?= =?us-ascii?Q?Imp8geXiUn0AlXeSZBSI8hdprOkGRuD2GTxZBgHL/nBxze5iAAw+Kq34i/yB?= =?us-ascii?Q?VlLrvOyiGaY/gEY8X7I2l7l5xgaWnRDlbNklDZHryD0=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN6PR11MB0017.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 839d407b-c1fa-434f-d919-08d8a0b91f42 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Dec 2020 05:20:22.4635 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /AV5nePIsz8qM5537PUzmpuWZfR2tfu0YIProWX+lyZvM7foBnHpr8Yz9xpBNTI0yyyKsu9le71ouA4c1CscOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR11MB3812 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v2 5/5] net/iavf: support new VLAN virtchnl opcodes 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" > -----Original Message----- > From: Wang, Haiyue > Sent: Monday, December 14, 2020 15:12 > To: dev@dpdk.org > Cc: Yang, Qiming ; Wu, Jingjing > ; Zhang, Qi Z ; Wang, Haiyue > ; Xing, Beilei > Subject: [PATCH v2 5/5] net/iavf: support new VLAN virtchnl opcodes >=20 > The new VLAN virtchnl opcodes introduce rich capabilities setting like > outer/inner different TPIDs. >=20 > Signed-off-by: Haiyue Wang > --- > drivers/net/iavf/iavf.h | 6 ++ > drivers/net/iavf/iavf_ethdev.c | 46 +++++++++++ > drivers/net/iavf/iavf_vchnl.c | 147 +++++++++++++++++++++++++++++++++ > 3 files changed, 199 insertions(+) >=20 > diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h index > 6d5912d8c..c57ad6175 100644 > --- a/drivers/net/iavf/iavf.h > +++ b/drivers/net/iavf/iavf.h > @@ -132,6 +132,7 @@ struct iavf_info { > struct virtchnl_version_info virtchnl_version; > struct virtchnl_vf_resource *vf_res; /* VF resource */ > struct virtchnl_vsi_resource *vsi_res; /* LAN VSI */ > + struct virtchnl_vlan_caps vlan_v2_caps; > uint64_t supported_rxdid; > uint8_t *proto_xtr; /* proto xtr type for all queues */ > volatile enum virtchnl_ops pend_cmd; /* pending command not > finished */ @@ -288,7 +289,9 @@ int iavf_check_api_version(struct > iavf_adapter *adapter); int iavf_get_vf_resource(struct iavf_adapter > *adapter); void iavf_handle_virtchnl_msg(struct rte_eth_dev *dev); int > iavf_enable_vlan_strip(struct iavf_adapter *adapter); > +int iavf_enable_vlan_strip_v2(struct iavf_adapter *adapter); > int iavf_disable_vlan_strip(struct iavf_adapter *adapter); > +int iavf_disable_vlan_strip_v2(struct iavf_adapter *adapter); > int iavf_switch_queue(struct iavf_adapter *adapter, uint16_t qid, > bool rx, bool on); > int iavf_switch_queue_lv(struct iavf_adapter *adapter, uint16_t qid, @@ = - > 302,6 +305,7 @@ int iavf_configure_rss_key(struct iavf_adapter *adapter); > int iavf_configure_queues(struct iavf_adapter *adapter, > uint16_t num_queue_pairs, uint16_t index); int > iavf_get_supported_rxdid(struct iavf_adapter *adapter); > +int iavf_get_vlan_offload_caps_v2(struct iavf_adapter *adapter); > int iavf_config_irq_map(struct iavf_adapter *adapter); int > iavf_config_irq_map_lv(struct iavf_adapter *adapter, uint16_t num, > uint16_t index); > @@ -315,6 +319,8 @@ int iavf_config_promisc(struct iavf_adapter *adapter, > bool enable_unicast, int iavf_add_del_eth_addr(struct iavf_adapter > *adapter, > struct rte_ether_addr *addr, bool add); int > iavf_add_del_vlan(struct iavf_adapter *adapter, uint16_t vlanid, bool add= ); > +int iavf_add_del_vlan_v2(struct iavf_adapter *adapter, uint16_t vlanid, > + bool add); > int iavf_fdir_add(struct iavf_adapter *adapter, struct iavf_fdir_conf *f= ilter); > int iavf_fdir_del(struct iavf_adapter *adapter, struct iavf_fdir_conf *fi= lter); > int iavf_fdir_check(struct iavf_adapter *adapter, diff --git > a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index > 0fd06e4b4..4d946013c 100644 > --- a/drivers/net/iavf/iavf_ethdev.c > +++ b/drivers/net/iavf/iavf_ethdev.c > @@ -384,6 +384,14 @@ iavf_dev_configure(struct rte_eth_dev *dev) > vf->max_rss_qregion =3D IAVF_MAX_NUM_QUEUES_DFLT; > } >=20 > + /* Vlan stripping setting v2 */ > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) { > + if (dev_conf->rxmode.offloads & > DEV_RX_OFFLOAD_VLAN_STRIP) > + iavf_enable_vlan_strip_v2(ad); > + else > + iavf_disable_vlan_strip_v2(ad); > + } > + > /* Vlan stripping setting */ > if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN) { > if (dev_conf->rxmode.offloads & > DEV_RX_OFFLOAD_VLAN_STRIP) @@ -992,6 +1000,13 @@ > iavf_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int o= n) > struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(adapter); > int err; >=20 > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) { > + err =3D iavf_add_del_vlan_v2(adapter, vlan_id, on); > + if (err) > + return -EIO; > + return 0; > + } > + > if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)) > return -ENOTSUP; >=20 > @@ -1001,6 +1016,27 @@ iavf_dev_vlan_filter_set(struct rte_eth_dev *dev, > uint16_t vlan_id, int on) > return 0; > } >=20 > +static int > +iavf_dev_vlan_offload_set_v2(struct rte_eth_dev *dev, int mask) { > + struct iavf_adapter *adapter =3D > + IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > + struct rte_eth_conf *dev_conf =3D &dev->data->dev_conf; > + int err; > + > + if (mask & ETH_VLAN_STRIP_MASK) { > + if (dev_conf->rxmode.offloads & > DEV_RX_OFFLOAD_VLAN_STRIP) > + err =3D iavf_enable_vlan_strip_v2(adapter); > + else > + err =3D iavf_disable_vlan_strip_v2(adapter); > + > + if (err) > + return -EIO; > + } > + > + return 0; > +} > + > static int > iavf_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) { @@ -1010= ,6 > +1046,9 @@ iavf_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) > struct rte_eth_conf *dev_conf =3D &dev->data->dev_conf; > int err; >=20 > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) > + return iavf_dev_vlan_offload_set_v2(dev, mask); > + > if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)) > return -ENOTSUP; >=20 > @@ -1861,6 +1900,13 @@ iavf_init_vf(struct rte_eth_dev *dev) > } > } >=20 > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) { > + if (iavf_get_vlan_offload_caps_v2(adapter) !=3D 0) { > + PMD_INIT_LOG(ERR, "failed to do get VLAN offload > v2 capabilities"); > + goto err_rss; > + } > + } > + > iavf_init_proto_xtr(dev); >=20 > return 0; > diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.= c index > 3f949c9e3..6b571924f 100644 > --- a/drivers/net/iavf/iavf_vchnl.c > +++ b/drivers/net/iavf/iavf_vchnl.c > @@ -174,6 +174,7 @@ iavf_execute_vf_cmd(struct iavf_adapter *adapter, > struct iavf_cmd_info *args) > case VIRTCHNL_OP_VERSION: > case VIRTCHNL_OP_GET_VF_RESOURCES: > case VIRTCHNL_OP_GET_SUPPORTED_RXDIDS: > + case VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS: > /* for init virtchnl ops, need to poll the response */ > do { > result =3D iavf_read_msg_from_pf(adapter, args- > >out_size, @@ -366,6 +367,45 @@ iavf_enable_vlan_strip(struct > iavf_adapter *adapter) > return ret; > } >=20 > +int > +iavf_enable_vlan_strip_v2(struct iavf_adapter *adapter) { Why we don't use one function to implement vlan strip v2? iavf_switch_vlan_strip_v2(struct iavf_adapter *adapter, bool on) args.ops =3D on ? VIRTCHNL_OP_ENABLE_VLAN_STRIPPING_V2 : VIRTCHNL_OP_DISABLE_VLAN_STRIPPING_V2; > + struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(adapter); > + struct virtchnl_vlan_offload_caps *offload_caps; > + struct virtchnl_vlan_strip vlan_strip; > + struct iavf_cmd_info args; > + bool outer; > + int ret; > + > + offload_caps =3D &vf->vlan_v2_caps.offloads; > + if (offload_caps->outer_stripping & > VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D true; > + else if (offload_caps->inner_stripping & > VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D false; > + else > + return -ENOTSUP; > + > + memset(&vlan_strip, 0, sizeof(vlan_strip)); > + vlan_strip.vsi_id =3D vf->vsi_res->vsi_id; > + if (outer) > + vlan_strip.outer_ethertype_setting =3D > + VIRTCHNL_VLAN_ETHERTYPE_8100; > + else > + vlan_strip.inner_ethertype_setting =3D > + VIRTCHNL_VLAN_ETHERTYPE_8100; > + > + args.ops =3D VIRTCHNL_OP_ENABLE_VLAN_STRIPPING_V2; > + args.in_args =3D (uint8_t *)&vlan_strip; > + args.in_args_size =3D sizeof(vlan_strip); > + args.out_buffer =3D vf->aq_resp; > + args.out_size =3D IAVF_AQ_BUF_SZ; > + ret =3D iavf_execute_vf_cmd(adapter, &args); > + if (ret) > + PMD_DRV_LOG(ERR, "fail to execute command > +VIRTCHNL_OP_ENABLE_VLAN_STRIPPING_V2"); > + > + return ret; > +} > + > int > iavf_disable_vlan_strip(struct iavf_adapter *adapter) { @@ -387,6 +427,= 45 > @@ iavf_disable_vlan_strip(struct iavf_adapter *adapter) > return ret; > } >=20 > +int > +iavf_disable_vlan_strip_v2(struct iavf_adapter *adapter) { Same comment. > + struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(adapter); > + struct virtchnl_vlan_offload_caps *offload_caps; > + struct virtchnl_vlan_strip vlan_strip; > + struct iavf_cmd_info args; > + bool outer; > + int ret; > + > + offload_caps =3D &vf->vlan_v2_caps.offloads; > + if (offload_caps->outer_stripping & > VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D true; > + else if (offload_caps->inner_stripping & > VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D false; > + else > + return -ENOTSUP; > + > + memset(&vlan_strip, 0, sizeof(vlan_strip)); > + vlan_strip.vsi_id =3D vf->vsi_res->vsi_id; > + if (outer) > + vlan_strip.outer_ethertype_setting =3D > + VIRTCHNL_VLAN_ETHERTYPE_8100; > + else > + vlan_strip.inner_ethertype_setting =3D > + VIRTCHNL_VLAN_ETHERTYPE_8100; > + > + args.ops =3D VIRTCHNL_OP_DISABLE_VLAN_STRIPPING_V2; > + args.in_args =3D (uint8_t *)&vlan_strip; > + args.in_args_size =3D sizeof(vlan_strip); > + args.out_buffer =3D vf->aq_resp; > + args.out_size =3D IAVF_AQ_BUF_SZ; > + ret =3D iavf_execute_vf_cmd(adapter, &args); > + if (ret) > + PMD_DRV_LOG(ERR, "fail to execute command > +VIRTCHNL_OP_DISABLE_VLAN_STRIPPING_V2"); > + > + return ret; > +} > + > #define VIRTCHNL_VERSION_MAJOR_START 1 > #define VIRTCHNL_VERSION_MINOR_START 1 >=20 > @@ -459,6 +538,7 @@ iavf_get_vf_resource(struct iavf_adapter *adapter) > VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF | > VIRTCHNL_VF_OFFLOAD_REQ_QUEUES | > VIRTCHNL_VF_OFFLOAD_CRC | > + VIRTCHNL_VF_OFFLOAD_VLAN_V2 | > VIRTCHNL_VF_LARGE_NUM_QPAIRS; >=20 > args.in_args =3D (uint8_t *)∩︀ > @@ -522,6 +602,31 @@ iavf_get_supported_rxdid(struct iavf_adapter > *adapter) > return 0; > } >=20 > +int > +iavf_get_vlan_offload_caps_v2(struct iavf_adapter *adapter) { > + struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(adapter); > + struct iavf_cmd_info args; > + int ret; > + > + args.ops =3D VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS; > + args.in_args =3D NULL; > + args.in_args_size =3D 0; > + args.out_buffer =3D vf->aq_resp; > + args.out_size =3D IAVF_AQ_BUF_SZ; > + > + ret =3D iavf_execute_vf_cmd(adapter, &args); > + if (ret) { > + PMD_DRV_LOG(ERR, > + "Failed to execute command of > VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS"); > + return ret; > + } > + > + rte_memcpy(&vf->vlan_v2_caps, vf->aq_resp, sizeof(vf- > >vlan_v2_caps)); > + > + return 0; > +} > + > int > iavf_enable_queues(struct iavf_adapter *adapter) { @@ -1165,6 +1270,48 > @@ iavf_add_del_vlan(struct iavf_adapter *adapter, uint16_t vlanid, bool > add) > return err; > } >=20 > +int > +iavf_add_del_vlan_v2(struct iavf_adapter *adapter, uint16_t vlanid, > +bool add) { > + struct iavf_info *vf =3D IAVF_DEV_PRIVATE_TO_VF(adapter); > + struct virtchnl_vlan_filtering_caps *filtering_caps; > + struct virtchnl_vlan_filter_list_v2 vlan_list; > + struct iavf_cmd_info args; > + bool outer; > + int err; > + > + filtering_caps =3D &vf->vlan_v2_caps.filtering; > + if (filtering_caps->outer & VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D true; > + else if (filtering_caps->inner & VIRTCHNL_VLAN_ETHERTYPE_8100) > + outer =3D false; > + else > + return -ENOTSUP; > + > + memset(&vlan_list, 0, sizeof(vlan_list)); > + vlan_list.num_elements =3D 1; > + > + if (outer) { > + vlan_list.filters[0].outer.tci =3D vlanid; > + vlan_list.filters[0].outer.tpid =3D RTE_ETHER_TYPE_VLAN; > + } else { > + vlan_list.filters[0].inner.tci =3D vlanid; > + vlan_list.filters[0].inner.tpid =3D RTE_ETHER_TYPE_VLAN; > + } > + > + args.ops =3D add ? VIRTCHNL_OP_ADD_VLAN_V2 : > VIRTCHNL_OP_DEL_VLAN_V2; > + args.in_args =3D (uint8_t *)&vlan_list; > + args.in_args_size =3D sizeof(vlan_list); > + args.out_buffer =3D vf->aq_resp; > + args.out_size =3D IAVF_AQ_BUF_SZ; > + err =3D iavf_execute_vf_cmd(adapter, &args); > + if (err) > + PMD_DRV_LOG(ERR, "fail to execute command %s", > + add ? "OP_ADD_VLAN_V2" : "OP_DEL_VLAN_V2"); > + > + return err; > +} > + > int > iavf_fdir_add(struct iavf_adapter *adapter, > struct iavf_fdir_conf *filter) > -- > 2.29.2