drivers/net: update Rx RSS hash offload capabilities
[dpdk.git] / drivers / net / ixgbe / ixgbe_ethdev.c
index 06414d1..8c1caac 100644 (file)
@@ -2402,6 +2402,9 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
        int ret;
 
        PMD_INIT_FUNC_TRACE();
+
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        /* multipe queue mode checking */
        ret  = ixgbe_check_mq_mode(dev);
        if (ret != 0) {
@@ -2912,6 +2915,7 @@ ixgbe_dev_set_link_up(struct rte_eth_dev *dev)
        } else {
                /* Turn on the laser */
                ixgbe_enable_tx_laser(hw);
+               ixgbe_dev_link_update(dev, 0);
        }
 
        return 0;
@@ -2942,6 +2946,7 @@ ixgbe_dev_set_link_down(struct rte_eth_dev *dev)
        } else {
                /* Turn off the laser */
                ixgbe_disable_tx_laser(hw);
+               ixgbe_dev_link_update(dev, 0);
        }
 
        return 0;
@@ -2986,7 +2991,7 @@ ixgbe_dev_close(struct rte_eth_dev *dev)
        do {
                ret = rte_intr_callback_unregister(intr_handle,
                                ixgbe_dev_interrupt_handler, dev);
-               if (ret >= 0) {
+               if (ret >= 0 || ret == -ENOENT) {
                        break;
                } else if (ret != -EAGAIN) {
                        PMD_INIT_LOG(ERR,
@@ -4116,6 +4121,7 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
        int link_up;
        int diag;
        int wait = 1;
+       u32 esdp_reg;
 
        memset(&link, 0, sizeof(link));
        link.link_status = ETH_LINK_DOWN;
@@ -4143,6 +4149,10 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
                return rte_eth_linkstatus_set(dev, &link);
        }
 
+       esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
+       if ((esdp_reg & IXGBE_ESDP_SDP3))
+               link_up = 0;
+
        if (link_up == 0) {
                if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber) {
                        intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
@@ -5148,6 +5158,8 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
                     dev->data->port_id);
 
+       dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
        /*
         * VF has no ability to enable/disable HW CRC
         * Keep the persistent behavior the same as Host PF