{
        struct qlcnic_adapter *adapter = netdev_priv(dev);
        int check_sfp_module = 0;
-       u16 pcifn = adapter->ahw->pci_func;
 
        /* read which mode */
        if (adapter->ahw->port_type == QLCNIC_GBE) {
                        goto skip;
                }
 
-               val = QLCRD32(adapter, P3P_LINK_SPEED_REG(pcifn));
-               ethtool_cmd_speed_set(ecmd, P3P_LINK_SPEED_MHZ *
-                                     P3P_LINK_SPEED_VAL(pcifn, val));
-               ecmd->duplex = DUPLEX_FULL;
+               ethtool_cmd_speed_set(ecmd, SPEED_UNKNOWN);
+               ecmd->duplex = DUPLEX_UNKNOWN;
                ecmd->autoneg = AUTONEG_DISABLE;
        } else
                return -EIO;
 
 
        adapter->module_type = module;
        adapter->link_autoneg = autoneg;
-       adapter->link_speed = link_speed;
+
+       if (link_status) {
+               adapter->link_speed = link_speed;
+       } else {
+               adapter->link_speed = SPEED_UNKNOWN;
+               adapter->link_duplex = DUPLEX_UNKNOWN;
+       }
 }
 
 static void