return 0 means link status changed, -1 means not changed */
| 1898 | |
| 1899 | /* return 0 means link status changed, -1 means not changed */ |
| 1900 | int |
| 1901 | ngbe_dev_link_update_share(struct rte_eth_dev *dev, |
| 1902 | int wait_to_complete) |
| 1903 | { |
| 1904 | struct ngbe_hw *hw = ngbe_dev_hw(dev); |
| 1905 | struct rte_eth_link link; |
| 1906 | u32 link_speed = NGBE_LINK_SPEED_UNKNOWN; |
| 1907 | u32 lan_speed = 0; |
| 1908 | bool link_up; |
| 1909 | int err; |
| 1910 | int wait = 1; |
| 1911 | u32 reg; |
| 1912 | |
| 1913 | memset(&link, 0, sizeof(link)); |
| 1914 | link.link_status = RTE_ETH_LINK_DOWN; |
| 1915 | link.link_speed = RTE_ETH_SPEED_NUM_NONE; |
| 1916 | link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX; |
| 1917 | link.link_autoneg = !(dev->data->dev_conf.link_speeds & |
| 1918 | ~RTE_ETH_LINK_SPEED_AUTONEG); |
| 1919 | |
| 1920 | hw->mac.get_link_status = true; |
| 1921 | |
| 1922 | /* check if it needs to wait to complete, if lsc interrupt is enabled */ |
| 1923 | if (wait_to_complete == 0 || dev->data->dev_conf.intr_conf.lsc != 0) |
| 1924 | wait = 0; |
| 1925 | |
| 1926 | err = hw->mac.check_link(hw, &link_speed, &link_up, wait); |
| 1927 | if (err != 0) { |
| 1928 | link.link_speed = RTE_ETH_SPEED_NUM_NONE; |
| 1929 | link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; |
| 1930 | return rte_eth_linkstatus_set(dev, &link); |
| 1931 | } |
| 1932 | |
| 1933 | if (!link_up) |
| 1934 | return rte_eth_linkstatus_set(dev, &link); |
| 1935 | |
| 1936 | link.link_status = RTE_ETH_LINK_UP; |
| 1937 | link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; |
| 1938 | |
| 1939 | switch (link_speed) { |
| 1940 | default: |
| 1941 | case NGBE_LINK_SPEED_UNKNOWN: |
| 1942 | link.link_speed = RTE_ETH_SPEED_NUM_NONE; |
| 1943 | break; |
| 1944 | |
| 1945 | case NGBE_LINK_SPEED_10M_FULL: |
| 1946 | link.link_speed = RTE_ETH_SPEED_NUM_10M; |
| 1947 | lan_speed = 0; |
| 1948 | break; |
| 1949 | |
| 1950 | case NGBE_LINK_SPEED_100M_FULL: |
| 1951 | link.link_speed = RTE_ETH_SPEED_NUM_100M; |
| 1952 | lan_speed = 1; |
| 1953 | break; |
| 1954 | |
| 1955 | case NGBE_LINK_SPEED_1GB_FULL: |
| 1956 | link.link_speed = RTE_ETH_SPEED_NUM_1G; |
| 1957 | lan_speed = 2; |
no test coverage detected