| 2982 | } |
| 2983 | |
| 2984 | int |
| 2985 | rte_eth_link_get(uint16_t port_id, struct rte_eth_link *eth_link) |
| 2986 | { |
| 2987 | struct rte_eth_dev *dev; |
| 2988 | |
| 2989 | RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); |
| 2990 | dev = &rte_eth_devices[port_id]; |
| 2991 | |
| 2992 | if (eth_link == NULL) { |
| 2993 | RTE_ETHDEV_LOG(ERR, "Cannot get ethdev port %u link to NULL\n", |
| 2994 | port_id); |
| 2995 | return -EINVAL; |
| 2996 | } |
| 2997 | |
| 2998 | if (dev->data->dev_conf.intr_conf.lsc && dev->data->dev_started) |
| 2999 | rte_eth_linkstatus_get(dev, eth_link); |
| 3000 | else { |
| 3001 | if (*dev->dev_ops->link_update == NULL) |
| 3002 | return -ENOTSUP; |
| 3003 | (*dev->dev_ops->link_update)(dev, 1); |
| 3004 | *eth_link = dev->data->dev_link; |
| 3005 | } |
| 3006 | |
| 3007 | rte_eth_trace_link_get(port_id, eth_link); |
| 3008 | |
| 3009 | return 0; |
| 3010 | } |
| 3011 | |
| 3012 | int |
| 3013 | rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link) |