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 <xiao.w.wang at intel.com>
> ---
>  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)
> 



Reply via email to