> @@ -83,12 +84,49 @@ static int
>  idpf_dev_link_update(struct rte_eth_dev *dev,
>                    __rte_unused int wait_to_complete)
>  {
> +     struct idpf_vport *vport = dev->data->dev_private;
>       struct rte_eth_link new_link;
> 
>       memset(&new_link, 0, sizeof(new_link));
> 
> -     new_link.link_speed = RTE_ETH_SPEED_NUM_NONE;
> +     switch (vport->link_speed) {
> +     case 10:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_10M;
> +             break;
> +     case 100:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_100M;
> +             break;
> +     case 1000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_1G;
> +             break;
> +     case 10000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_10G;
> +             break;
> +     case 20000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_20G;
> +             break;
> +     case 25000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_25G;
> +             break;
> +     case 40000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_40G;
> +             break;
> +     case 50000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_50G;
> +             break;
> +     case 100000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_100G;
> +             break;
> +     case 200000:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_200G;
> +             break;
> +     default:
> +             new_link.link_speed = RTE_ETH_SPEED_NUM_NONE;
> +     }
> +
>       new_link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX;
> +     new_link.link_status = vport->link_up ? RTE_ETH_LINK_UP :
> +             RTE_ETH_LINK_DOWN;
>       new_link.link_autoneg = !(dev->data->dev_conf.link_speeds &
>                                 RTE_ETH_LINK_SPEED_FIXED);
Better to use RTE_ETH_LINK_[AUTONEG/FIXED] instead.

> 
> @@ -927,6 +965,127 @@ idpf_parse_devargs(struct rte_pci_device *pci_dev, 
> struct
> idpf_adapter_ext *adap
>       return ret;
>  }
> 
> +static struct idpf_vport *
> +idpf_find_vport(struct idpf_adapter_ext *adapter, uint32_t vport_id)
> +{
> +     struct idpf_vport *vport = NULL;
> +     int i;
> +
> +     for (i = 0; i < adapter->cur_vport_nb; i++) {
> +             vport = adapter->vports[i];
> +             if (vport->vport_id != vport_id)
> +                     continue;
> +             else
> +                     return vport;
> +     }
> +
> +     return vport;
> +}
> +
> +static void
> +idpf_handle_event_msg(struct idpf_vport *vport, uint8_t *msg, uint16_t 
> msglen)
> +{
> +     struct virtchnl2_event *vc_event = (struct virtchnl2_event *)msg;
> +     struct rte_eth_dev *dev = (struct rte_eth_dev *)vport->dev;
> +
> +     if (msglen < sizeof(struct virtchnl2_event)) {
> +             PMD_DRV_LOG(ERR, "Error event");
> +             return;
> +     }
> +
> +     switch (vc_event->event) {
> +     case VIRTCHNL2_EVENT_LINK_CHANGE:
> +             PMD_DRV_LOG(DEBUG, "VIRTCHNL2_EVENT_LINK_CHANGE");
> +             vport->link_up = vc_event->link_status;
Any conversion between bool and uint8?


Reply via email to