From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 0A1FA2946 for ; Mon, 19 Sep 2016 19:05:42 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 19 Sep 2016 10:05:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.30,362,1470726000"; d="scan'208";a="763369719" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.237.220.115]) ([10.237.220.115]) by FMSMGA003.fm.intel.com with ESMTP; 19 Sep 2016 10:05:41 -0700 From: Ferruh Yigit To: Xiao Wang , wenzhuo.lu@intel.com References: <1472312902-16963-1-git-send-email-xiao.w.wang@intel.com> <1472312902-16963-6-git-send-email-xiao.w.wang@intel.com> Cc: dev@dpdk.org Message-ID: <293acea6-24df-690c-78fe-f5b4cb5b913c@intel.com> Date: Mon, 19 Sep 2016 18:05:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <1472312902-16963-6-git-send-email-xiao.w.wang@intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH 05/39] net/ixgbe/base: support VF multicast promiscuous X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Sep 2016 17:05:43 -0000 On 8/27/2016 4:47 PM, Xiao Wang wrote: > Currently, VF is limited to 30 multicast addresses. In order to > accommodate more addresses, this patch adds support for VF multicast > promiscuous. It looks like functionality not changed, just ixgbevf_update_xcast_mode() moved to ixgbe_mac_operations struct. Is 30 multicast address limitation remains with this patch? > > Signed-off-by: Xiao Wang > --- > drivers/net/ixgbe/base/ixgbe_mbx.h | 2 +- > drivers/net/ixgbe/base/ixgbe_type.h | 1 + > drivers/net/ixgbe/base/ixgbe_vf.c | 38 ++++++++++++++++++++++++++++++++ > drivers/net/ixgbe/base/ixgbe_vf.h | 1 + > drivers/net/ixgbe/ixgbe_ethdev.c | 43 ++----------------------------------- > 5 files changed, 43 insertions(+), 42 deletions(-) > > diff --git a/drivers/net/ixgbe/base/ixgbe_mbx.h b/drivers/net/ixgbe/base/ixgbe_mbx.h > index d775142..c3e301f 100644 > --- a/drivers/net/ixgbe/base/ixgbe_mbx.h > +++ b/drivers/net/ixgbe/base/ixgbe_mbx.h > @@ -111,7 +111,7 @@ enum ixgbe_pfvf_api_rev { > /* mailbox API, version 1.2 VF requests */ > #define IXGBE_VF_GET_RETA 0x0a /* VF request for RETA */ > #define IXGBE_VF_GET_RSS_KEY 0x0b /* get RSS key */ > -#define IXGBE_VF_UPDATE_XCAST_MODE 0x0C > +#define IXGBE_VF_UPDATE_XCAST_MODE 0x0c > > /* GET_QUEUES return data indices within the mailbox */ > #define IXGBE_VF_TX_QUEUES 1 /* number of Tx queues supported */ > diff --git a/drivers/net/ixgbe/base/ixgbe_type.h b/drivers/net/ixgbe/base/ixgbe_type.h > index b2fdfcd..96b5cbd 100644 > --- a/drivers/net/ixgbe/base/ixgbe_type.h > +++ b/drivers/net/ixgbe/base/ixgbe_type.h > @@ -3883,6 +3883,7 @@ struct ixgbe_mac_operations { > s32 (*init_uta_tables)(struct ixgbe_hw *); > void (*set_mac_anti_spoofing)(struct ixgbe_hw *, bool, int); > void (*set_vlan_anti_spoofing)(struct ixgbe_hw *, bool, int); > + s32 (*update_xcast_mode)(struct ixgbe_hw *, int); > > /* Flow Control */ > s32 (*fc_enable)(struct ixgbe_hw *); > diff --git a/drivers/net/ixgbe/base/ixgbe_vf.c b/drivers/net/ixgbe/base/ixgbe_vf.c > index a75074a..20a739c 100644 > --- a/drivers/net/ixgbe/base/ixgbe_vf.c > +++ b/drivers/net/ixgbe/base/ixgbe_vf.c > @@ -75,6 +75,7 @@ s32 ixgbe_init_ops_vf(struct ixgbe_hw *hw) > hw->mac.ops.set_uc_addr = ixgbevf_set_uc_addr_vf; > hw->mac.ops.init_rx_addrs = NULL; > hw->mac.ops.update_mc_addr_list = ixgbe_update_mc_addr_list_vf; > + hw->mac.ops.update_xcast_mode = ixgbevf_update_xcast_mode; > hw->mac.ops.enable_mc = NULL; > hw->mac.ops.disable_mc = NULL; > hw->mac.ops.clear_vfta = NULL; > @@ -419,6 +420,43 @@ s32 ixgbe_update_mc_addr_list_vf(struct ixgbe_hw *hw, u8 *mc_addr_list, > } > > /** > + * ixgbevf_update_xcast_mode - Update Multicast mode > + * @hw: pointer to the HW structure > + * @xcast_mode: new multicast mode > + * > + * Updates the Multicast Mode of VF. > + **/ > +s32 ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, int xcast_mode) > +{ > + struct ixgbe_mbx_info *mbx = &hw->mbx; > + u32 msgbuf[2]; > + s32 err; > + > + switch (hw->api_version) { > + case ixgbe_mbox_api_12: > + break; > + default: > + return IXGBE_ERR_FEATURE_NOT_SUPPORTED; > + } > + > + msgbuf[0] = IXGBE_VF_UPDATE_XCAST_MODE; > + msgbuf[1] = xcast_mode; > + > + err = mbx->ops.write_posted(hw, msgbuf, 2, 0); > + if (err) > + return err; > + > + err = mbx->ops.read_posted(hw, msgbuf, 2, 0); > + if (err) > + return err; > + > + msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS; > + if (msgbuf[0] == (IXGBE_VF_UPDATE_XCAST_MODE | IXGBE_VT_MSGTYPE_NACK)) What if other flags set in msgbuf[0] Please check 18/39 patch, which fixes something similar to this > + return IXGBE_ERR_FEATURE_NOT_SUPPORTED; > + return IXGBE_SUCCESS; > +} > + > +/** > * ixgbe_set_vfta_vf - Set/Unset vlan filter table address > * @hw: pointer to the HW structure > * @vlan: 12 bit VLAN ID > diff --git a/drivers/net/ixgbe/base/ixgbe_vf.h b/drivers/net/ixgbe/base/ixgbe_vf.h > index 8851cb8..624a97d 100644 > --- a/drivers/net/ixgbe/base/ixgbe_vf.h > +++ b/drivers/net/ixgbe/base/ixgbe_vf.h > @@ -131,6 +131,7 @@ s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 index, u8 *addr); > s32 ixgbe_update_mc_addr_list_vf(struct ixgbe_hw *hw, u8 *mc_addr_list, > u32 mc_addr_count, ixgbe_mc_addr_itr, > bool clear); > +s32 ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, int xcast_mode); > s32 ixgbe_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind, > bool vlan_on, bool vlvf_bypass); > void ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size); > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c > index d478a15..7794960 100644 > --- a/drivers/net/ixgbe/ixgbe_ethdev.c > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c > @@ -7236,51 +7236,12 @@ ixgbe_dev_udp_tunnel_port_del(struct rte_eth_dev *dev, > return ret; > } > > -/* ixgbevf_update_xcast_mode - Update Multicast mode > - * @hw: pointer to the HW structure > - * @netdev: pointer to net device structure > - * @xcast_mode: new multicast mode > - * > - * Updates the Multicast Mode of VF. > - */ > -static int ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, > - int xcast_mode) > -{ > - struct ixgbe_mbx_info *mbx = &hw->mbx; > - u32 msgbuf[2]; > - s32 err; > - > - switch (hw->api_version) { > - case ixgbe_mbox_api_12: > - break; > - default: > - return -EOPNOTSUPP; > - } > - > - msgbuf[0] = IXGBE_VF_UPDATE_XCAST_MODE; > - msgbuf[1] = xcast_mode; > - > - err = mbx->ops.write_posted(hw, msgbuf, 2, 0); > - if (err) > - return err; > - > - err = mbx->ops.read_posted(hw, msgbuf, 2, 0); > - if (err) > - return err; > - > - msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS; > - if (msgbuf[0] == (IXGBE_VF_UPDATE_XCAST_MODE | IXGBE_VT_MSGTYPE_NACK)) > - return -EPERM; > - > - return 0; > -} > - > static void > ixgbevf_dev_allmulticast_enable(struct rte_eth_dev *dev) > { > struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > - ixgbevf_update_xcast_mode(hw, IXGBEVF_XCAST_MODE_ALLMULTI); > + hw->mac.ops.update_xcast_mode(hw, IXGBEVF_XCAST_MODE_ALLMULTI); > } > > static void > @@ -7288,7 +7249,7 @@ ixgbevf_dev_allmulticast_disable(struct rte_eth_dev *dev) > { > struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > - ixgbevf_update_xcast_mode(hw, IXGBEVF_XCAST_MODE_NONE); > + hw->mac.ops.update_xcast_mode(hw, IXGBEVF_XCAST_MODE_NONE); > } > > static void ixgbevf_mbx_process(struct rte_eth_dev *dev) >