On 01/04/15 09:18, Ouyang Changchun wrote:
> Negotiate API version with VF when receiving the IXGBE_VF_API_NEGOTIATE 
> message.
>
> Signed-off-by: Changchun Ouyang <changchun.ouyang at intel.com>

Reviewed-by: Vlad Zolotarov <vladz at cloudius-systems.com>

> ---
>   lib/librte_pmd_ixgbe/ixgbe_ethdev.h |  1 +
>   lib/librte_pmd_ixgbe/ixgbe_pf.c     | 25 +++++++++++++++++++++++++
>   2 files changed, 26 insertions(+)
>
> diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.h 
> b/lib/librte_pmd_ixgbe/ixgbe_ethdev.h
> index ca99170..730098d 100644
> --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.h
> +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.h
> @@ -159,6 +159,7 @@ struct ixgbe_vf_info {
>       uint16_t tx_rate[IXGBE_MAX_QUEUE_NUM_PER_VF];
>       uint16_t vlan_count;
>       uint8_t spoofchk_enabled;
> +     uint8_t api_version;
>   };
>   
>   /*
> diff --git a/lib/librte_pmd_ixgbe/ixgbe_pf.c b/lib/librte_pmd_ixgbe/ixgbe_pf.c
> index 51da1fd..495aff5 100644
> --- a/lib/librte_pmd_ixgbe/ixgbe_pf.c
> +++ b/lib/librte_pmd_ixgbe/ixgbe_pf.c
> @@ -469,6 +469,28 @@ ixgbe_set_vf_lpe(struct rte_eth_dev *dev, __rte_unused 
> uint32_t vf, uint32_t *ms
>   }
>   
>   static int
> +ixgbe_negotiate_vf_api(struct rte_eth_dev *dev, uint32_t vf, uint32_t 
> *msgbuf)
> +{
> +     uint32_t api_version = msgbuf[1];
> +     struct ixgbe_vf_info *vfinfo =
> +             *IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
> +
> +     switch (api_version) {
> +     case ixgbe_mbox_api_10:
> +     case ixgbe_mbox_api_11:
> +             vfinfo[vf].api_version = (uint8_t)api_version;
> +             return 0;
> +     default:
> +             break;
> +     }
> +
> +     RTE_LOG(ERR, PMD, "Negotiate invalid api version %u from VF %d\n",
> +             api_version, vf);
> +
> +     return -1;
> +}
> +
> +static int
>   ixgbe_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf)
>   {
>       uint16_t mbx_size = IXGBE_VFMAILBOX_SIZE;
> @@ -512,6 +534,9 @@ ixgbe_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t 
> vf)
>       case IXGBE_VF_SET_VLAN:
>               retval = ixgbe_vf_set_vlan(dev, vf, msgbuf);
>               break;
> +     case IXGBE_VF_API_NEGOTIATE:
> +             retval = ixgbe_negotiate_vf_api(dev, vf, msgbuf);
> +             break;
>       default:
>               PMD_DRV_LOG(DEBUG, "Unhandled Msg %8.8x", (unsigned)msgbuf[0]);
>               retval = IXGBE_ERR_MBX;

Reply via email to