Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4bd7ef0b authored by Chopra, Manish's avatar Chopra, Manish Committed by David S. Miller
Browse files

qlcnic: Fix tunnel offload for 82xx adapters



Qlogic's 82xx series adapter doesn't support
tunnel offloads, driver incorrectly assumes that it is
supported and causes firmware hang while running tunnel IO.

This patch fixes this by not advertising tunnel offloads
for 82xx adapters.

Signed-off-by: default avatarManish Chopra <manish.chopra@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a53cb29b
Loading
Loading
Loading
Loading
+24 −2
Original line number Original line Diff line number Diff line
@@ -1824,22 +1824,44 @@ struct qlcnic_hardware_ops {
	u32 (*get_cap_size)(void *, int);
	u32 (*get_cap_size)(void *, int);
	void (*set_sys_info)(void *, int, u32);
	void (*set_sys_info)(void *, int, u32);
	void (*store_cap_mask)(void *, 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;
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] &
	return adapter->ahw->extra_capability[0] &
	       QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
	       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] &
	return adapter->ahw->extra_capability[0] &
	       QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
	       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)
static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
{
{
	return adapter->nic_ops->start_firmware(adapter);
	return adapter->nic_ops->start_firmware(adapter);
+2 −0
Original line number Original line Diff line number Diff line
@@ -242,6 +242,8 @@ static struct qlcnic_hardware_ops qlcnic_83xx_hw_ops = {
	.get_cap_size			= qlcnic_83xx_get_cap_size,
	.get_cap_size			= qlcnic_83xx_get_cap_size,
	.set_sys_info			= qlcnic_83xx_set_sys_info,
	.set_sys_info			= qlcnic_83xx_set_sys_info,
	.store_cap_mask			= qlcnic_83xx_store_cap_mask,
	.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 = {
static struct qlcnic_nic_template qlcnic_83xx_ops = {
+2 −0
Original line number Original line Diff line number Diff line
@@ -632,6 +632,8 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = {
	.get_cap_size			= qlcnic_82xx_get_cap_size,
	.get_cap_size			= qlcnic_82xx_get_cap_size,
	.set_sys_info			= qlcnic_82xx_set_sys_info,
	.set_sys_info			= qlcnic_82xx_set_sys_info,
	.store_cap_mask			= qlcnic_82xx_store_cap_mask,
	.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)
static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter)
+2 −0
Original line number Original line Diff line number Diff line
@@ -77,6 +77,8 @@ static struct qlcnic_hardware_ops qlcnic_sriov_vf_hw_ops = {
	.free_mac_list			= qlcnic_sriov_vf_free_mac_list,
	.free_mac_list			= qlcnic_sriov_vf_free_mac_list,
	.enable_sds_intr		= qlcnic_83xx_enable_sds_intr,
	.enable_sds_intr		= qlcnic_83xx_enable_sds_intr,
	.disable_sds_intr		= qlcnic_83xx_disable_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 = {
static struct qlcnic_nic_template qlcnic_sriov_vf_ops = {