MCPcopy Create free account
hub / github.com/F-Stack/f-stack / virtio_dev_link_update

Function virtio_dev_link_update

dpdk/drivers/net/virtio/virtio_ethdev.c:2550–2589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2548}
2549
2550static int
2551virtio_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete)
2552{
2553 struct rte_eth_link link;
2554 uint16_t status;
2555 struct virtio_hw *hw = dev->data->dev_private;
2556
2557 memset(&link, 0, sizeof(link));
2558 link.link_duplex = hw->duplex;
2559 link.link_speed = hw->speed;
2560 link.link_autoneg = RTE_ETH_LINK_AUTONEG;
2561
2562 if (!hw->started) {
2563 link.link_status = RTE_ETH_LINK_DOWN;
2564 link.link_speed = RTE_ETH_SPEED_NUM_NONE;
2565 } else if (virtio_with_feature(hw, VIRTIO_NET_F_STATUS)) {
2566 PMD_INIT_LOG(DEBUG, "Get link status from hw");
2567 virtio_read_dev_config(hw,
2568 offsetof(struct virtio_net_config, status),
2569 &status, sizeof(status));
2570 if ((status & VIRTIO_NET_S_LINK_UP) == 0) {
2571 link.link_status = RTE_ETH_LINK_DOWN;
2572 link.link_speed = RTE_ETH_SPEED_NUM_NONE;
2573 PMD_INIT_LOG(DEBUG, "Port %d is down",
2574 dev->data->port_id);
2575 } else {
2576 link.link_status = RTE_ETH_LINK_UP;
2577 if (hw->get_speed_via_feat)
2578 virtio_get_speed_duplex(dev, &link);
2579 PMD_INIT_LOG(DEBUG, "Port %d is up",
2580 dev->data->port_id);
2581 }
2582 } else {
2583 link.link_status = RTE_ETH_LINK_UP;
2584 if (hw->get_speed_via_feat)
2585 virtio_get_speed_duplex(dev, &link);
2586 }
2587
2588 return rte_eth_linkstatus_set(dev, &link);
2589}
2590
2591static int
2592virtio_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)

Callers 2

virtio_interrupt_handlerFunction · 0.85
virtio_dev_startFunction · 0.85

Calls 5

memsetFunction · 0.85
virtio_with_featureFunction · 0.85
virtio_read_dev_configFunction · 0.85
virtio_get_speed_duplexFunction · 0.85
rte_eth_linkstatus_setFunction · 0.85

Tested by

no test coverage detected