X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fcnxk%2Fcnxk_link.c;h=b1d59e325895626f0959958a42d222cc3a970643;hb=3c100e0e6b9c7865193cc07236ac347927660ff2;hp=b0273e7b6d77e4d1e55d462214e2f9a82211a877;hpb=0f5ee447f5c5bc98d1ce9010ad7d22a270b0dd7e;p=dpdk.git diff --git a/drivers/net/cnxk/cnxk_link.c b/drivers/net/cnxk/cnxk_link.c index b0273e7b6d..b1d59e3258 100644 --- a/drivers/net/cnxk/cnxk_link.c +++ b/drivers/net/cnxk/cnxk_link.c @@ -4,6 +4,28 @@ #include "cnxk_ethdev.h" +void +cnxk_nix_toggle_flag_link_cfg(struct cnxk_eth_dev *dev, bool set) +{ + if (set) + dev->flags |= CNXK_LINK_CFG_IN_PROGRESS_F; + else + dev->flags &= ~CNXK_LINK_CFG_IN_PROGRESS_F; + + /* Update link info for LBK */ + if (!set && roc_nix_is_lbk(&dev->nix)) { + struct rte_eth_link link; + + link.link_status = RTE_ETH_LINK_UP; + link.link_speed = RTE_ETH_SPEED_NUM_100G; + link.link_autoneg = RTE_ETH_LINK_FIXED; + link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; + rte_eth_linkstatus_set(dev->eth_dev, &link); + } + + rte_wmb(); +} + static inline int nix_wait_for_link_cfg(struct cnxk_eth_dev *dev) { @@ -27,13 +49,36 @@ nix_link_status_print(struct rte_eth_dev *eth_dev, struct rte_eth_link *link) plt_info("Port %d: Link Up - speed %u Mbps - %s", (int)(eth_dev->data->port_id), (uint32_t)link->link_speed, - link->link_duplex == ETH_LINK_FULL_DUPLEX + link->link_duplex == RTE_ETH_LINK_FULL_DUPLEX ? "full-duplex" : "half-duplex"); else plt_info("Port %d: Link Down", (int)(eth_dev->data->port_id)); } +void +cnxk_eth_dev_link_status_get_cb(struct roc_nix *nix, + struct roc_nix_link_info *link) +{ + struct cnxk_eth_dev *dev = (struct cnxk_eth_dev *)nix; + struct rte_eth_link eth_link; + struct rte_eth_dev *eth_dev; + + if (!link || !nix) + return; + + eth_dev = dev->eth_dev; + if (!eth_dev) + return; + + rte_eth_linkstatus_get(eth_dev, ð_link); + + link->status = eth_link.link_status; + link->speed = eth_link.link_speed; + link->autoneg = eth_link.link_autoneg; + link->full_duplex = eth_link.link_duplex; +} + void cnxk_eth_dev_link_status_cb(struct roc_nix *nix, struct roc_nix_link_info *link) { @@ -55,7 +100,7 @@ cnxk_eth_dev_link_status_cb(struct roc_nix *nix, struct roc_nix_link_info *link) eth_link.link_status = link->status; eth_link.link_speed = link->speed; - eth_link.link_autoneg = ETH_LINK_AUTONEG; + eth_link.link_autoneg = RTE_ETH_LINK_AUTONEG; eth_link.link_duplex = link->full_duplex; /* Print link info */ @@ -79,21 +124,21 @@ cnxk_nix_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete) RTE_SET_USED(wait_to_complete); memset(&link, 0, sizeof(struct rte_eth_link)); - if (roc_nix_is_sdp(&dev->nix)) + if (!eth_dev->data->dev_started || roc_nix_is_sdp(&dev->nix)) return 0; if (roc_nix_is_lbk(&dev->nix)) { - link.link_status = ETH_LINK_UP; - link.link_speed = ETH_SPEED_NUM_100G; - link.link_autoneg = ETH_LINK_FIXED; - link.link_duplex = ETH_LINK_FULL_DUPLEX; + link.link_status = RTE_ETH_LINK_UP; + link.link_speed = RTE_ETH_SPEED_NUM_100G; + link.link_autoneg = RTE_ETH_LINK_FIXED; + link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; } else { rc = roc_nix_mac_link_info_get(&dev->nix, &info); if (rc) return rc; link.link_status = info.status; link.link_speed = info.speed; - link.link_autoneg = ETH_LINK_AUTONEG; + link.link_autoneg = RTE_ETH_LINK_AUTONEG; if (info.full_duplex) link.link_duplex = info.full_duplex; }