diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic')
11 files changed, 76 insertions, 9 deletions
| diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c index b8d5270359cd..e30676515529 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c @@ -247,7 +247,7 @@ nx_fw_cmd_set_mtu(struct netxen_adapter *adapter, int mtu)  	cmd.req.arg3 = 0;  	if (recv_ctx->state == NX_HOST_CTX_STATE_ACTIVE) -		netxen_issue_cmd(adapter, &cmd); +		rcode = netxen_issue_cmd(adapter, &cmd);  	if (rcode != NX_RCODE_SUCCESS)  		return -EIO; diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c index 483241b4b05d..a672f6a860dc 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c @@ -2956,7 +2956,7 @@ static u32 qed_grc_dump_ctx_data(struct qed_hwfn *p_hwfn,  				qed_wr(p_hwfn,  				       p_ptt,  				       s_storm_defs[storm_id].cm_ctx_wr_addr, -				       BIT(9) | lid); +				       (i << 9) | lid);  				*(dump_buf + offset) = qed_rd(p_hwfn,  							      p_ptt,  							      rd_reg_addr); diff --git a/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c b/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c index 67200c5498ab..0a8fde629991 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c +++ b/drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c @@ -983,7 +983,7 @@ void qed_set_rfs_mode_disable(struct qed_hwfn *p_hwfn,  	memset(&camline, 0, sizeof(union gft_cam_line_union));  	qed_wr(p_hwfn, p_ptt, PRS_REG_GFT_CAM + CAM_LINE_SIZE * pf_id,  	       camline.cam_line_mapped.camline); -	memset(&ramline, 0, sizeof(union gft_cam_line_union)); +	memset(&ramline, 0, sizeof(ramline));  	for (i = 0; i < RAM_LINE_SIZE / REG_SIZE; i++) {  		u32 hw_addr = PRS_REG_GFT_PROFILE_MASK_RAM; diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c index 537d1236a4fe..715b3aaf83ac 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_main.c +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c @@ -1730,7 +1730,8 @@ void qed_get_protocol_stats(struct qed_dev *cdev,  		qed_get_protocol_stats_iscsi(cdev, &stats->iscsi_stats);  		break;  	default: -		DP_ERR(cdev, "Invalid protocol type = %d\n", type); +		DP_VERBOSE(cdev, QED_MSG_SP, +			   "Invalid protocol type = %d\n", type);  		return;  	}  } diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h index 49bad00a0f8f..81312924df14 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h @@ -37,8 +37,8 @@  #define _QLCNIC_LINUX_MAJOR 5  #define _QLCNIC_LINUX_MINOR 3 -#define _QLCNIC_LINUX_SUBVERSION 65 -#define QLCNIC_LINUX_VERSIONID  "5.3.65" +#define _QLCNIC_LINUX_SUBVERSION 66 +#define QLCNIC_LINUX_VERSIONID  "5.3.66"  #define QLCNIC_DRV_IDC_VER  0x01  #define QLCNIC_DRIVER_VERSION  ((_QLCNIC_LINUX_MAJOR << 16) |\  		 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION)) @@ -1824,22 +1824,44 @@ struct qlcnic_hardware_ops {  	u32 (*get_cap_size)(void *, int);  	void (*set_sys_info)(void *, int, u32);  	void (*store_cap_mask)(void *, u32); +	bool (*encap_rx_offload) (struct qlcnic_adapter *adapter); +	bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);  };  extern struct qlcnic_nic_template qlcnic_vf_ops; -static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter) +static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)  {  	return adapter->ahw->extra_capability[0] &  	       QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;  } -static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter) +static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)  {  	return adapter->ahw->extra_capability[0] &  	       QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;  } +static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter) +{ +	return false; +} + +static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter) +{ +        return false; +} + +static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter) +{ +        return adapter->ahw->hw_ops->encap_rx_offload(adapter); +} + +static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter) +{ +        return adapter->ahw->hw_ops->encap_tx_offload(adapter); +} +  static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)  {  	return adapter->nic_ops->start_firmware(adapter); diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index 718bf58a7da6..f7080d0ab874 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c @@ -242,6 +242,8 @@ static struct qlcnic_hardware_ops qlcnic_83xx_hw_ops = {  	.get_cap_size			= qlcnic_83xx_get_cap_size,  	.set_sys_info			= qlcnic_83xx_set_sys_info,  	.store_cap_mask			= qlcnic_83xx_store_cap_mask, +	.encap_rx_offload		= qlcnic_83xx_encap_rx_offload, +	.encap_tx_offload		= qlcnic_83xx_encap_tx_offload,  };  static struct qlcnic_nic_template qlcnic_83xx_ops = { @@ -3168,6 +3170,40 @@ int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr,  	return 0;  } +void qlcnic_83xx_get_port_type(struct qlcnic_adapter *adapter) +{ +	struct qlcnic_hardware_context *ahw = adapter->ahw; +	struct qlcnic_cmd_args cmd; +	u32 config; +	int err; + +	err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_STATUS); +	if (err) +		return; + +	err = qlcnic_issue_cmd(adapter, &cmd); +	if (err) { +		dev_info(&adapter->pdev->dev, +			 "Get Link Status Command failed: 0x%x\n", err); +		goto out; +	} else { +		config = cmd.rsp.arg[3]; + +		switch (QLC_83XX_SFP_MODULE_TYPE(config)) { +		case QLC_83XX_MODULE_FIBRE_1000BASE_SX: +		case QLC_83XX_MODULE_FIBRE_1000BASE_LX: +		case QLC_83XX_MODULE_FIBRE_1000BASE_CX: +		case QLC_83XX_MODULE_TP_1000BASE_T: +			ahw->port_type = QLCNIC_GBE; +			break; +		default: +			ahw->port_type = QLCNIC_XGBE; +		} +	} +out: +	qlcnic_free_mbx_args(&cmd); +} +  int qlcnic_83xx_test_link(struct qlcnic_adapter *adapter)  {  	u8 pci_func; diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h index 3dfe8e27b51c..b75a81246856 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h @@ -637,6 +637,7 @@ void qlcnic_83xx_get_pauseparam(struct qlcnic_adapter *,  int qlcnic_83xx_set_pauseparam(struct qlcnic_adapter *,  			       struct ethtool_pauseparam *);  int qlcnic_83xx_test_link(struct qlcnic_adapter *); +void qlcnic_83xx_get_port_type(struct qlcnic_adapter *adapter);  int qlcnic_83xx_reg_test(struct qlcnic_adapter *);  int qlcnic_83xx_get_regs_len(struct qlcnic_adapter *);  int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *); diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c index 9a869c15d8bf..7f7deeaf1cf0 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c @@ -486,6 +486,9 @@ static int qlcnic_set_link_ksettings(struct net_device *dev,  	u32 ret = 0;  	struct qlcnic_adapter *adapter = netdev_priv(dev); +	if (qlcnic_83xx_check(adapter)) +		qlcnic_83xx_get_port_type(adapter); +  	if (adapter->ahw->port_type != QLCNIC_GBE)  		return -EOPNOTSUPP; diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c index 838cc0ceafd8..7848cf04b29a 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c @@ -341,7 +341,7 @@ qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg)  			}  			return -EIO;  		} -		usleep_range(1000, 1500); +		udelay(1200);  	}  	if (id_reg) diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index b6628aaa6e4a..1b5f7d57b6f8 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c @@ -632,6 +632,8 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = {  	.get_cap_size			= qlcnic_82xx_get_cap_size,  	.set_sys_info			= qlcnic_82xx_set_sys_info,  	.store_cap_mask			= qlcnic_82xx_store_cap_mask, +	.encap_rx_offload               = qlcnic_82xx_encap_rx_offload, +	.encap_tx_offload               = qlcnic_82xx_encap_tx_offload,  };  static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter) diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c index 2f656f395f39..c58180f40844 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c @@ -77,6 +77,8 @@ static struct qlcnic_hardware_ops qlcnic_sriov_vf_hw_ops = {  	.free_mac_list			= qlcnic_sriov_vf_free_mac_list,  	.enable_sds_intr		= qlcnic_83xx_enable_sds_intr,  	.disable_sds_intr		= qlcnic_83xx_disable_sds_intr, +	.encap_rx_offload               = qlcnic_83xx_encap_rx_offload, +	.encap_tx_offload               = qlcnic_83xx_encap_tx_offload,  };  static struct qlcnic_nic_template qlcnic_sriov_vf_ops = { |