mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 14:43:58 +08:00
Merge branch 'be2net-next'
Sathya Perla says: ==================== be2net: patch set This patch set contains the following modificatons: * three patches (1/7 to 3/7) that fix indentation style issues * convert the u8 vlan[] array to a bit-map to reduce memory usage * use MCCQ instead of MBOX in be_cmd_rss_config() as the MCCQ is already created by that time * include rx-comp-error counter in ethtool stats * remove the unused promiscuous setting from be_cmd_vlan_config() Pls apply to net-next tree. Thanks! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
97e72829d7
@ -455,7 +455,7 @@ struct be_adapter {
|
||||
struct be_drv_stats drv_stats;
|
||||
struct be_aic_obj aic_obj[MAX_EVT_QS];
|
||||
u16 vlans_added;
|
||||
u8 vlan_tag[VLAN_N_VID];
|
||||
unsigned long vids[BITS_TO_LONGS(VLAN_N_VID)];
|
||||
u8 vlan_prio_bmap; /* Available Priority BitMap */
|
||||
u16 recommended_prio; /* Recommended Priority */
|
||||
struct be_dma_mem rx_filter; /* Cmd DMA mem for rx-filter */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2060,7 +2060,7 @@ int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver,
|
||||
char *fw_on_flash);
|
||||
int be_cmd_modify_eqd(struct be_adapter *adapter, struct be_set_eqd *, int num);
|
||||
int be_cmd_vlan_config(struct be_adapter *adapter, u32 if_id, u16 *vtag_array,
|
||||
u32 num, bool promiscuous);
|
||||
u32 num);
|
||||
int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 status);
|
||||
int be_cmd_set_flow_control(struct be_adapter *adapter, u32 tx_fc, u32 rx_fc);
|
||||
int be_cmd_get_flow_control(struct be_adapter *adapter, u32 *tx_fc, u32 *rx_fc);
|
||||
|
@ -132,6 +132,7 @@ static const struct be_ethtool_stat et_rx_stats[] = {
|
||||
{DRVSTAT_RX_INFO(rx_bytes)},/* If moving this member see above note */
|
||||
{DRVSTAT_RX_INFO(rx_pkts)}, /* If moving this member see above note */
|
||||
{DRVSTAT_RX_INFO(rx_compl)},
|
||||
{DRVSTAT_RX_INFO(rx_compl_err)},
|
||||
{DRVSTAT_RX_INFO(rx_mcast_pkts)},
|
||||
/* Number of page allocation failures while posting receive buffers
|
||||
* to HW.
|
||||
@ -181,7 +182,7 @@ static const char et_self_tests[][ETH_GSTRING_LEN] = {
|
||||
#define BE_NO_LOOPBACK 0xff
|
||||
|
||||
static void be_get_drvinfo(struct net_device *netdev,
|
||||
struct ethtool_drvinfo *drvinfo)
|
||||
struct ethtool_drvinfo *drvinfo)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@ -201,8 +202,7 @@ static void be_get_drvinfo(struct net_device *netdev,
|
||||
drvinfo->eedump_len = 0;
|
||||
}
|
||||
|
||||
static u32
|
||||
lancer_cmd_get_file_len(struct be_adapter *adapter, u8 *file_name)
|
||||
static u32 lancer_cmd_get_file_len(struct be_adapter *adapter, u8 *file_name)
|
||||
{
|
||||
u32 data_read = 0, eof;
|
||||
u8 addn_status;
|
||||
@ -212,14 +212,14 @@ lancer_cmd_get_file_len(struct be_adapter *adapter, u8 *file_name)
|
||||
memset(&data_len_cmd, 0, sizeof(data_len_cmd));
|
||||
/* data_offset and data_size should be 0 to get reg len */
|
||||
status = lancer_cmd_read_object(adapter, &data_len_cmd, 0, 0,
|
||||
file_name, &data_read, &eof, &addn_status);
|
||||
file_name, &data_read, &eof,
|
||||
&addn_status);
|
||||
|
||||
return data_read;
|
||||
}
|
||||
|
||||
static int
|
||||
lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
|
||||
u32 buf_len, void *buf)
|
||||
static int lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
|
||||
u32 buf_len, void *buf)
|
||||
{
|
||||
struct be_dma_mem read_cmd;
|
||||
u32 read_len = 0, total_read_len = 0, chunk_size;
|
||||
@ -229,11 +229,11 @@ lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
|
||||
|
||||
read_cmd.size = LANCER_READ_FILE_CHUNK;
|
||||
read_cmd.va = pci_alloc_consistent(adapter->pdev, read_cmd.size,
|
||||
&read_cmd.dma);
|
||||
&read_cmd.dma);
|
||||
|
||||
if (!read_cmd.va) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Memory allocation failure while reading dump\n");
|
||||
"Memory allocation failure while reading dump\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -242,8 +242,8 @@ lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
|
||||
LANCER_READ_FILE_CHUNK);
|
||||
chunk_size = ALIGN(chunk_size, 4);
|
||||
status = lancer_cmd_read_object(adapter, &read_cmd, chunk_size,
|
||||
total_read_len, file_name, &read_len,
|
||||
&eof, &addn_status);
|
||||
total_read_len, file_name,
|
||||
&read_len, &eof, &addn_status);
|
||||
if (!status) {
|
||||
memcpy(buf + total_read_len, read_cmd.va, read_len);
|
||||
total_read_len += read_len;
|
||||
@ -254,13 +254,12 @@ lancer_cmd_read_file(struct be_adapter *adapter, u8 *file_name,
|
||||
}
|
||||
}
|
||||
pci_free_consistent(adapter->pdev, read_cmd.size, read_cmd.va,
|
||||
read_cmd.dma);
|
||||
read_cmd.dma);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
be_get_reg_len(struct net_device *netdev)
|
||||
static int be_get_reg_len(struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
u32 log_size = 0;
|
||||
@ -271,7 +270,7 @@ be_get_reg_len(struct net_device *netdev)
|
||||
if (be_physfn(adapter)) {
|
||||
if (lancer_chip(adapter))
|
||||
log_size = lancer_cmd_get_file_len(adapter,
|
||||
LANCER_FW_DUMP_FILE);
|
||||
LANCER_FW_DUMP_FILE);
|
||||
else
|
||||
be_cmd_get_reg_len(adapter, &log_size);
|
||||
}
|
||||
@ -287,7 +286,7 @@ be_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *buf)
|
||||
memset(buf, 0, regs->len);
|
||||
if (lancer_chip(adapter))
|
||||
lancer_cmd_read_file(adapter, LANCER_FW_DUMP_FILE,
|
||||
regs->len, buf);
|
||||
regs->len, buf);
|
||||
else
|
||||
be_cmd_get_regs(adapter, regs->len, buf);
|
||||
}
|
||||
@ -337,9 +336,8 @@ static int be_set_coalesce(struct net_device *netdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
be_get_ethtool_stats(struct net_device *netdev,
|
||||
struct ethtool_stats *stats, uint64_t *data)
|
||||
static void be_get_ethtool_stats(struct net_device *netdev,
|
||||
struct ethtool_stats *stats, uint64_t *data)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_rx_obj *rxo;
|
||||
@ -390,9 +388,8 @@ be_get_ethtool_stats(struct net_device *netdev,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
be_get_stat_strings(struct net_device *netdev, uint32_t stringset,
|
||||
uint8_t *data)
|
||||
static void be_get_stat_strings(struct net_device *netdev, uint32_t stringset,
|
||||
uint8_t *data)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int i, j;
|
||||
@ -642,16 +639,15 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
|
||||
adapter->rx_fc = ecmd->rx_pause;
|
||||
|
||||
status = be_cmd_set_flow_control(adapter,
|
||||
adapter->tx_fc, adapter->rx_fc);
|
||||
adapter->tx_fc, adapter->rx_fc);
|
||||
if (status)
|
||||
dev_warn(&adapter->pdev->dev, "Pause param set failed.\n");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
be_set_phys_id(struct net_device *netdev,
|
||||
enum ethtool_phys_id_state state)
|
||||
static int be_set_phys_id(struct net_device *netdev,
|
||||
enum ethtool_phys_id_state state)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@ -708,8 +704,7 @@ static int be_set_dump(struct net_device *netdev, struct ethtool_dump *dump)
|
||||
return status;
|
||||
}
|
||||
|
||||
static void
|
||||
be_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
static void be_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@ -723,8 +718,7 @@ be_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
memset(&wol->sopass, 0, sizeof(wol->sopass));
|
||||
}
|
||||
|
||||
static int
|
||||
be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
static int be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@ -744,8 +738,7 @@ be_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
be_test_ddr_dma(struct be_adapter *adapter)
|
||||
static int be_test_ddr_dma(struct be_adapter *adapter)
|
||||
{
|
||||
int ret, i;
|
||||
struct be_dma_mem ddrdma_cmd;
|
||||
@ -761,7 +754,7 @@ be_test_ddr_dma(struct be_adapter *adapter)
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
ret = be_cmd_ddr_dma_test(adapter, pattern[i],
|
||||
4096, &ddrdma_cmd);
|
||||
4096, &ddrdma_cmd);
|
||||
if (ret != 0)
|
||||
goto err;
|
||||
}
|
||||
@ -773,20 +766,17 @@ err:
|
||||
}
|
||||
|
||||
static u64 be_loopback_test(struct be_adapter *adapter, u8 loopback_type,
|
||||
u64 *status)
|
||||
u64 *status)
|
||||
{
|
||||
be_cmd_set_loopback(adapter, adapter->hba_port_num,
|
||||
loopback_type, 1);
|
||||
be_cmd_set_loopback(adapter, adapter->hba_port_num, loopback_type, 1);
|
||||
*status = be_cmd_loopback_test(adapter, adapter->hba_port_num,
|
||||
loopback_type, 1500,
|
||||
2, 0xabc);
|
||||
be_cmd_set_loopback(adapter, adapter->hba_port_num,
|
||||
BE_NO_LOOPBACK, 1);
|
||||
loopback_type, 1500, 2, 0xabc);
|
||||
be_cmd_set_loopback(adapter, adapter->hba_port_num, BE_NO_LOOPBACK, 1);
|
||||
return *status;
|
||||
}
|
||||
|
||||
static void
|
||||
be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
|
||||
static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
|
||||
u64 *data)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int status;
|
||||
@ -801,12 +791,10 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
|
||||
memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM);
|
||||
|
||||
if (test->flags & ETH_TEST_FL_OFFLINE) {
|
||||
if (be_loopback_test(adapter, BE_MAC_LOOPBACK,
|
||||
&data[0]) != 0)
|
||||
if (be_loopback_test(adapter, BE_MAC_LOOPBACK, &data[0]) != 0)
|
||||
test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
||||
if (be_loopback_test(adapter, BE_PHY_LOOPBACK,
|
||||
&data[1]) != 0)
|
||||
if (be_loopback_test(adapter, BE_PHY_LOOPBACK, &data[1]) != 0)
|
||||
test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
||||
if (test->flags & ETH_TEST_FL_EXTERNAL_LB) {
|
||||
@ -832,16 +820,14 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
be_do_flash(struct net_device *netdev, struct ethtool_flash *efl)
|
||||
static int be_do_flash(struct net_device *netdev, struct ethtool_flash *efl)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
return be_load_fw(adapter, efl->data);
|
||||
}
|
||||
|
||||
static int
|
||||
be_get_eeprom_len(struct net_device *netdev)
|
||||
static int be_get_eeprom_len(struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
@ -851,18 +837,17 @@ be_get_eeprom_len(struct net_device *netdev)
|
||||
if (lancer_chip(adapter)) {
|
||||
if (be_physfn(adapter))
|
||||
return lancer_cmd_get_file_len(adapter,
|
||||
LANCER_VPD_PF_FILE);
|
||||
LANCER_VPD_PF_FILE);
|
||||
else
|
||||
return lancer_cmd_get_file_len(adapter,
|
||||
LANCER_VPD_VF_FILE);
|
||||
LANCER_VPD_VF_FILE);
|
||||
} else {
|
||||
return BE_READ_SEEPROM_LEN;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
be_read_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom,
|
||||
uint8_t *data)
|
||||
static int be_read_eeprom(struct net_device *netdev,
|
||||
struct ethtool_eeprom *eeprom, uint8_t *data)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_dma_mem eeprom_cmd;
|
||||
@ -875,10 +860,10 @@ be_read_eeprom(struct net_device *netdev, struct ethtool_eeprom *eeprom,
|
||||
if (lancer_chip(adapter)) {
|
||||
if (be_physfn(adapter))
|
||||
return lancer_cmd_read_file(adapter, LANCER_VPD_PF_FILE,
|
||||
eeprom->len, data);
|
||||
eeprom->len, data);
|
||||
else
|
||||
return lancer_cmd_read_file(adapter, LANCER_VPD_VF_FILE,
|
||||
eeprom->len, data);
|
||||
eeprom->len, data);
|
||||
}
|
||||
|
||||
eeprom->magic = BE_VENDOR_ID | (adapter->pdev->device<<16);
|
||||
@ -962,7 +947,7 @@ static u64 be_get_rss_hash_opts(struct be_adapter *adapter, u64 flow_type)
|
||||
}
|
||||
|
||||
static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
|
||||
u32 *rule_locs)
|
||||
u32 *rule_locs)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -134,7 +134,7 @@ static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
|
||||
}
|
||||
|
||||
static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
|
||||
u16 len, u16 entry_size)
|
||||
u16 len, u16 entry_size)
|
||||
{
|
||||
struct be_dma_mem *mem = &q->dma_mem;
|
||||
|
||||
@ -154,7 +154,7 @@ static void be_reg_intr_set(struct be_adapter *adapter, bool enable)
|
||||
u32 reg, enabled;
|
||||
|
||||
pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET,
|
||||
®);
|
||||
®);
|
||||
enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
|
||||
|
||||
if (!enabled && enable)
|
||||
@ -165,7 +165,7 @@ static void be_reg_intr_set(struct be_adapter *adapter, bool enable)
|
||||
return;
|
||||
|
||||
pci_write_config_dword(adapter->pdev,
|
||||
PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
|
||||
PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
|
||||
}
|
||||
|
||||
static void be_intr_set(struct be_adapter *adapter, bool enable)
|
||||
@ -206,12 +206,11 @@ static void be_txq_notify(struct be_adapter *adapter, struct be_tx_obj *txo,
|
||||
}
|
||||
|
||||
static void be_eq_notify(struct be_adapter *adapter, u16 qid,
|
||||
bool arm, bool clear_int, u16 num_popped)
|
||||
bool arm, bool clear_int, u16 num_popped)
|
||||
{
|
||||
u32 val = 0;
|
||||
val |= qid & DB_EQ_RING_ID_MASK;
|
||||
val |= ((qid & DB_EQ_RING_ID_EXT_MASK) <<
|
||||
DB_EQ_RING_ID_EXT_MASK_SHIFT);
|
||||
val |= ((qid & DB_EQ_RING_ID_EXT_MASK) << DB_EQ_RING_ID_EXT_MASK_SHIFT);
|
||||
|
||||
if (adapter->eeh_error)
|
||||
return;
|
||||
@ -477,7 +476,7 @@ static void populate_be_v2_stats(struct be_adapter *adapter)
|
||||
drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
|
||||
drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
|
||||
adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
|
||||
if (be_roce_supported(adapter)) {
|
||||
if (be_roce_supported(adapter)) {
|
||||
drvs->rx_roce_bytes_lsd = port_stats->roce_bytes_received_lsd;
|
||||
drvs->rx_roce_bytes_msd = port_stats->roce_bytes_received_msd;
|
||||
drvs->rx_roce_frames = port_stats->roce_frames_received;
|
||||
@ -491,8 +490,7 @@ static void populate_lancer_stats(struct be_adapter *adapter)
|
||||
{
|
||||
|
||||
struct be_drv_stats *drvs = &adapter->drv_stats;
|
||||
struct lancer_pport_stats *pport_stats =
|
||||
pport_stats_from_cmd(adapter);
|
||||
struct lancer_pport_stats *pport_stats = pport_stats_from_cmd(adapter);
|
||||
|
||||
be_dws_le_to_cpu(pport_stats, sizeof(*pport_stats));
|
||||
drvs->rx_pause_frames = pport_stats->rx_pause_frames_lo;
|
||||
@ -539,8 +537,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
|
||||
}
|
||||
|
||||
static void populate_erx_stats(struct be_adapter *adapter,
|
||||
struct be_rx_obj *rxo,
|
||||
u32 erx_stat)
|
||||
struct be_rx_obj *rxo, u32 erx_stat)
|
||||
{
|
||||
if (!BEx_chip(adapter))
|
||||
rx_stats(rxo)->rx_drops_no_frags = erx_stat;
|
||||
@ -579,7 +576,7 @@ void be_parse_stats(struct be_adapter *adapter)
|
||||
}
|
||||
|
||||
static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
|
||||
struct rtnl_link_stats64 *stats)
|
||||
struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_drv_stats *drvs = &adapter->drv_stats;
|
||||
@ -660,7 +657,8 @@ void be_link_status_update(struct be_adapter *adapter, u8 link_status)
|
||||
}
|
||||
|
||||
static void be_tx_stats_update(struct be_tx_obj *txo,
|
||||
u32 wrb_cnt, u32 copied, u32 gso_segs, bool stopped)
|
||||
u32 wrb_cnt, u32 copied, u32 gso_segs,
|
||||
bool stopped)
|
||||
{
|
||||
struct be_tx_stats *stats = tx_stats(txo);
|
||||
|
||||
@ -676,7 +674,7 @@ static void be_tx_stats_update(struct be_tx_obj *txo,
|
||||
|
||||
/* Determine number of WRB entries needed to xmit data in an skb */
|
||||
static u32 wrb_cnt_for_skb(struct be_adapter *adapter, struct sk_buff *skb,
|
||||
bool *dummy)
|
||||
bool *dummy)
|
||||
{
|
||||
int cnt = (skb->len > skb->data_len);
|
||||
|
||||
@ -704,7 +702,7 @@ static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
|
||||
}
|
||||
|
||||
static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
|
||||
struct sk_buff *skb)
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
u8 vlan_prio;
|
||||
u16 vlan_tag;
|
||||
@ -733,7 +731,8 @@ static u16 skb_ip_proto(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
|
||||
struct sk_buff *skb, u32 wrb_cnt, u32 len, bool skip_hw_vlan)
|
||||
struct sk_buff *skb, u32 wrb_cnt, u32 len,
|
||||
bool skip_hw_vlan)
|
||||
{
|
||||
u16 vlan_tag, proto;
|
||||
|
||||
@ -774,7 +773,7 @@ static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
|
||||
}
|
||||
|
||||
static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
|
||||
bool unmap_single)
|
||||
bool unmap_single)
|
||||
{
|
||||
dma_addr_t dma;
|
||||
|
||||
@ -791,8 +790,8 @@ static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
|
||||
}
|
||||
|
||||
static int make_tx_wrbs(struct be_adapter *adapter, struct be_queue_info *txq,
|
||||
struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb,
|
||||
bool skip_hw_vlan)
|
||||
struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb,
|
||||
bool skip_hw_vlan)
|
||||
{
|
||||
dma_addr_t busaddr;
|
||||
int i, copied = 0;
|
||||
@ -821,8 +820,7 @@ static int make_tx_wrbs(struct be_adapter *adapter, struct be_queue_info *txq,
|
||||
}
|
||||
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
||||
const struct skb_frag_struct *frag =
|
||||
&skb_shinfo(skb)->frags[i];
|
||||
const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
|
||||
busaddr = skb_frag_dma_map(dev, frag, 0,
|
||||
skb_frag_size(frag), DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(dev, busaddr))
|
||||
@ -927,8 +925,7 @@ static int be_vlan_tag_tx_chk(struct be_adapter *adapter, struct sk_buff *skb)
|
||||
return vlan_tx_tag_present(skb) || adapter->pvid || adapter->qnq_vid;
|
||||
}
|
||||
|
||||
static int be_ipv6_tx_stall_chk(struct be_adapter *adapter,
|
||||
struct sk_buff *skb)
|
||||
static int be_ipv6_tx_stall_chk(struct be_adapter *adapter, struct sk_buff *skb)
|
||||
{
|
||||
return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
|
||||
}
|
||||
@ -959,7 +956,7 @@ static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
|
||||
*/
|
||||
if (be_pvid_tagging_enabled(adapter) &&
|
||||
veh->h_vlan_proto == htons(ETH_P_8021Q))
|
||||
*skip_hw_vlan = true;
|
||||
*skip_hw_vlan = true;
|
||||
|
||||
/* HW has a bug wherein it will calculate CSUM for VLAN
|
||||
* pkts even though it is disabled.
|
||||
@ -1077,16 +1074,15 @@ static int be_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
if (new_mtu < BE_MIN_MTU ||
|
||||
new_mtu > (BE_MAX_JUMBO_FRAME_SIZE -
|
||||
(ETH_HLEN + ETH_FCS_LEN))) {
|
||||
new_mtu > (BE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN))) {
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"MTU must be between %d and %d bytes\n",
|
||||
BE_MIN_MTU,
|
||||
(BE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN)));
|
||||
"MTU must be between %d and %d bytes\n",
|
||||
BE_MIN_MTU,
|
||||
(BE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN)));
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_info(&adapter->pdev->dev, "MTU changed from %d to %d bytes\n",
|
||||
netdev->mtu, new_mtu);
|
||||
netdev->mtu, new_mtu);
|
||||
netdev->mtu = new_mtu;
|
||||
return 0;
|
||||
}
|
||||
@ -1098,7 +1094,7 @@ static int be_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
static int be_vid_config(struct be_adapter *adapter)
|
||||
{
|
||||
u16 vids[BE_NUM_VLANS_SUPPORTED];
|
||||
u16 num = 0, i;
|
||||
u16 num = 0, i = 0;
|
||||
int status = 0;
|
||||
|
||||
/* No need to further configure vids if in promiscuous mode */
|
||||
@ -1109,13 +1105,10 @@ static int be_vid_config(struct be_adapter *adapter)
|
||||
goto set_vlan_promisc;
|
||||
|
||||
/* Construct VLAN Table to give to HW */
|
||||
for (i = 0; i < VLAN_N_VID; i++)
|
||||
if (adapter->vlan_tag[i])
|
||||
vids[num++] = cpu_to_le16(i);
|
||||
|
||||
status = be_cmd_vlan_config(adapter, adapter->if_handle,
|
||||
vids, num, 0);
|
||||
for_each_set_bit(i, adapter->vids, VLAN_N_VID)
|
||||
vids[num++] = cpu_to_le16(i);
|
||||
|
||||
status = be_cmd_vlan_config(adapter, adapter->if_handle, vids, num);
|
||||
if (status) {
|
||||
/* Set to VLAN promisc mode as setting VLAN filter failed */
|
||||
if (status == MCC_ADDL_STS_INSUFFICIENT_RESOURCES)
|
||||
@ -1160,16 +1153,16 @@ static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
if (lancer_chip(adapter) && vid == 0)
|
||||
return status;
|
||||
|
||||
if (adapter->vlan_tag[vid])
|
||||
if (test_bit(vid, adapter->vids))
|
||||
return status;
|
||||
|
||||
adapter->vlan_tag[vid] = 1;
|
||||
set_bit(vid, adapter->vids);
|
||||
adapter->vlans_added++;
|
||||
|
||||
status = be_vid_config(adapter);
|
||||
if (status) {
|
||||
adapter->vlans_added--;
|
||||
adapter->vlan_tag[vid] = 0;
|
||||
clear_bit(vid, adapter->vids);
|
||||
}
|
||||
|
||||
return status;
|
||||
@ -1184,12 +1177,12 @@ static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
if (lancer_chip(adapter) && vid == 0)
|
||||
goto ret;
|
||||
|
||||
adapter->vlan_tag[vid] = 0;
|
||||
clear_bit(vid, adapter->vids);
|
||||
status = be_vid_config(adapter);
|
||||
if (!status)
|
||||
adapter->vlans_added--;
|
||||
else
|
||||
adapter->vlan_tag[vid] = 1;
|
||||
set_bit(vid, adapter->vids);
|
||||
ret:
|
||||
return status;
|
||||
}
|
||||
@ -1254,8 +1247,10 @@ static void be_set_rx_mode(struct net_device *netdev)
|
||||
|
||||
/* Set to MCAST promisc mode if setting MULTICAST address fails */
|
||||
if (status) {
|
||||
dev_info(&adapter->pdev->dev, "Exhausted multicast HW filters.\n");
|
||||
dev_info(&adapter->pdev->dev, "Disabling HW multicast filtering.\n");
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Exhausted multicast HW filters.\n");
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Disabling HW multicast filtering.\n");
|
||||
be_cmd_rx_filter(adapter, IFF_ALLMULTI, ON);
|
||||
}
|
||||
done:
|
||||
@ -1287,7 +1282,7 @@ static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
|
||||
|
||||
if (status)
|
||||
dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed\n",
|
||||
mac, vf);
|
||||
mac, vf);
|
||||
else
|
||||
memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
|
||||
|
||||
@ -1295,7 +1290,7 @@ static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
|
||||
}
|
||||
|
||||
static int be_get_vf_config(struct net_device *netdev, int vf,
|
||||
struct ifla_vf_info *vi)
|
||||
struct ifla_vf_info *vi)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
|
||||
@ -1316,8 +1311,7 @@ static int be_get_vf_config(struct net_device *netdev, int vf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int be_set_vf_vlan(struct net_device *netdev,
|
||||
int vf, u16 vlan, u8 qos)
|
||||
static int be_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
|
||||
@ -1348,8 +1342,7 @@ static int be_set_vf_vlan(struct net_device *netdev,
|
||||
return status;
|
||||
}
|
||||
|
||||
static int be_set_vf_tx_rate(struct net_device *netdev,
|
||||
int vf, int rate)
|
||||
static int be_set_vf_tx_rate(struct net_device *netdev, int vf, int rate)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int status = 0;
|
||||
@ -1369,7 +1362,7 @@ static int be_set_vf_tx_rate(struct net_device *netdev,
|
||||
status = be_cmd_config_qos(adapter, rate / 10, vf + 1);
|
||||
if (status)
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"tx rate %d on VF %d failed\n", rate, vf);
|
||||
"tx rate %d on VF %d failed\n", rate, vf);
|
||||
else
|
||||
adapter->vf_cfg[vf].tx_rate = rate;
|
||||
return status;
|
||||
@ -1469,7 +1462,7 @@ modify_eqd:
|
||||
}
|
||||
|
||||
static void be_rx_stats_update(struct be_rx_obj *rxo,
|
||||
struct be_rx_compl_info *rxcp)
|
||||
struct be_rx_compl_info *rxcp)
|
||||
{
|
||||
struct be_rx_stats *stats = rx_stats(rxo);
|
||||
|
||||
@ -1566,7 +1559,8 @@ static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
|
||||
skb_frag_set_page(skb, 0, page_info->page);
|
||||
skb_shinfo(skb)->frags[0].page_offset =
|
||||
page_info->page_offset + hdr_len;
|
||||
skb_frag_size_set(&skb_shinfo(skb)->frags[0], curr_frag_len - hdr_len);
|
||||
skb_frag_size_set(&skb_shinfo(skb)->frags[0],
|
||||
curr_frag_len - hdr_len);
|
||||
skb->data_len = curr_frag_len - hdr_len;
|
||||
skb->truesize += rx_frag_size;
|
||||
skb->tail += hdr_len;
|
||||
@ -1725,8 +1719,8 @@ static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
|
||||
if (rxcp->vlanf) {
|
||||
rxcp->qnq = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, qnq,
|
||||
compl);
|
||||
rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vlan_tag,
|
||||
compl);
|
||||
rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v1,
|
||||
vlan_tag, compl);
|
||||
}
|
||||
rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, port, compl);
|
||||
rxcp->tunneled =
|
||||
@ -1757,8 +1751,8 @@ static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
|
||||
if (rxcp->vlanf) {
|
||||
rxcp->qnq = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, qnq,
|
||||
compl);
|
||||
rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vlan_tag,
|
||||
compl);
|
||||
rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0,
|
||||
vlan_tag, compl);
|
||||
}
|
||||
rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, port, compl);
|
||||
rxcp->ip_frag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0,
|
||||
@ -1799,7 +1793,7 @@ static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
|
||||
rxcp->vlan_tag = swab16(rxcp->vlan_tag);
|
||||
|
||||
if (adapter->pvid == (rxcp->vlan_tag & VLAN_VID_MASK) &&
|
||||
!adapter->vlan_tag[rxcp->vlan_tag])
|
||||
!test_bit(rxcp->vlan_tag, adapter->vids))
|
||||
rxcp->vlanf = 0;
|
||||
}
|
||||
|
||||
@ -1915,7 +1909,7 @@ static struct be_eth_tx_compl *be_tx_compl_get(struct be_queue_info *tx_cq)
|
||||
}
|
||||
|
||||
static u16 be_tx_compl_process(struct be_adapter *adapter,
|
||||
struct be_tx_obj *txo, u16 last_index)
|
||||
struct be_tx_obj *txo, u16 last_index)
|
||||
{
|
||||
struct be_queue_info *txq = &txo->q;
|
||||
struct be_eth_wrb *wrb;
|
||||
@ -2122,7 +2116,7 @@ static int be_evt_queues_create(struct be_adapter *adapter)
|
||||
|
||||
eq = &eqo->q;
|
||||
rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
|
||||
sizeof(struct be_eq_entry));
|
||||
sizeof(struct be_eq_entry));
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@ -2155,7 +2149,7 @@ static int be_mcc_queues_create(struct be_adapter *adapter)
|
||||
|
||||
cq = &adapter->mcc_obj.cq;
|
||||
if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
|
||||
sizeof(struct be_mcc_compl)))
|
||||
sizeof(struct be_mcc_compl)))
|
||||
goto err;
|
||||
|
||||
/* Use the default EQ for MCC completions */
|
||||
@ -2275,7 +2269,7 @@ static int be_rx_cqs_create(struct be_adapter *adapter)
|
||||
rxo->adapter = adapter;
|
||||
cq = &rxo->cq;
|
||||
rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
|
||||
sizeof(struct be_eth_rx_compl));
|
||||
sizeof(struct be_eth_rx_compl));
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@ -2339,7 +2333,7 @@ static inline bool do_gro(struct be_rx_compl_info *rxcp)
|
||||
}
|
||||
|
||||
static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,
|
||||
int budget, int polling)
|
||||
int budget, int polling)
|
||||
{
|
||||
struct be_adapter *adapter = rxo->adapter;
|
||||
struct be_queue_info *rx_cq = &rxo->cq;
|
||||
@ -2365,7 +2359,7 @@ static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,
|
||||
* promiscuous mode on some skews
|
||||
*/
|
||||
if (unlikely(rxcp->port != adapter->port_num &&
|
||||
!lancer_chip(adapter))) {
|
||||
!lancer_chip(adapter))) {
|
||||
be_rx_compl_discard(rxo, rxcp);
|
||||
goto loop_continue;
|
||||
}
|
||||
@ -2405,8 +2399,9 @@ static bool be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo,
|
||||
if (!txcp)
|
||||
break;
|
||||
num_wrbs += be_tx_compl_process(adapter, txo,
|
||||
AMAP_GET_BITS(struct amap_eth_tx_compl,
|
||||
wrb_index, txcp));
|
||||
AMAP_GET_BITS(struct
|
||||
amap_eth_tx_compl,
|
||||
wrb_index, txcp));
|
||||
}
|
||||
|
||||
if (work_done) {
|
||||
@ -2416,7 +2411,7 @@ static bool be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo,
|
||||
/* As Tx wrbs have been freed up, wake up netdev queue
|
||||
* if it was stopped due to lack of tx wrbs. */
|
||||
if (__netif_subqueue_stopped(adapter->netdev, idx) &&
|
||||
atomic_read(&txo->q.used) < txo->q.len / 2) {
|
||||
atomic_read(&txo->q.used) < txo->q.len / 2) {
|
||||
netif_wake_subqueue(adapter->netdev, idx);
|
||||
}
|
||||
|
||||
@ -2510,9 +2505,9 @@ void be_detect_error(struct be_adapter *adapter)
|
||||
sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
|
||||
if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
|
||||
sliport_err1 = ioread32(adapter->db +
|
||||
SLIPORT_ERROR1_OFFSET);
|
||||
SLIPORT_ERROR1_OFFSET);
|
||||
sliport_err2 = ioread32(adapter->db +
|
||||
SLIPORT_ERROR2_OFFSET);
|
||||
SLIPORT_ERROR2_OFFSET);
|
||||
adapter->hw_error = true;
|
||||
/* Do not log error messages if its a FW reset */
|
||||
if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 &&
|
||||
@ -2531,13 +2526,13 @@ void be_detect_error(struct be_adapter *adapter)
|
||||
}
|
||||
} else {
|
||||
pci_read_config_dword(adapter->pdev,
|
||||
PCICFG_UE_STATUS_LOW, &ue_lo);
|
||||
PCICFG_UE_STATUS_LOW, &ue_lo);
|
||||
pci_read_config_dword(adapter->pdev,
|
||||
PCICFG_UE_STATUS_HIGH, &ue_hi);
|
||||
PCICFG_UE_STATUS_HIGH, &ue_hi);
|
||||
pci_read_config_dword(adapter->pdev,
|
||||
PCICFG_UE_STATUS_LOW_MASK, &ue_lo_mask);
|
||||
PCICFG_UE_STATUS_LOW_MASK, &ue_lo_mask);
|
||||
pci_read_config_dword(adapter->pdev,
|
||||
PCICFG_UE_STATUS_HI_MASK, &ue_hi_mask);
|
||||
PCICFG_UE_STATUS_HI_MASK, &ue_hi_mask);
|
||||
|
||||
ue_lo = (ue_lo & ~ue_lo_mask);
|
||||
ue_hi = (ue_hi & ~ue_hi_mask);
|
||||
@ -2624,7 +2619,7 @@ fail:
|
||||
}
|
||||
|
||||
static inline int be_msix_vec_get(struct be_adapter *adapter,
|
||||
struct be_eq_obj *eqo)
|
||||
struct be_eq_obj *eqo)
|
||||
{
|
||||
return adapter->msix_entries[eqo->msix_idx].vector;
|
||||
}
|
||||
@ -2648,7 +2643,7 @@ err_msix:
|
||||
for (i--, eqo = &adapter->eq_obj[i]; i >= 0; i--, eqo--)
|
||||
free_irq(be_msix_vec_get(adapter, eqo), eqo);
|
||||
dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
|
||||
status);
|
||||
status);
|
||||
be_msix_disable(adapter);
|
||||
return status;
|
||||
}
|
||||
@ -2821,8 +2816,7 @@ static int be_rx_qs_create(struct be_adapter *adapter)
|
||||
}
|
||||
|
||||
get_random_bytes(rss_hkey, RSS_HASH_KEY_LEN);
|
||||
rc = be_cmd_rss_config(adapter, rss->rsstable,
|
||||
rss->rss_flags,
|
||||
rc = be_cmd_rss_config(adapter, rss->rsstable, rss->rss_flags,
|
||||
128, rss_hkey);
|
||||
if (rc) {
|
||||
rss->rss_flags = RSS_ENABLE_NONE;
|
||||
@ -2903,7 +2897,8 @@ static int be_setup_wol(struct be_adapter *adapter, bool enable)
|
||||
|
||||
if (enable) {
|
||||
status = pci_write_config_dword(adapter->pdev,
|
||||
PCICFG_PM_CONTROL_OFFSET, PCICFG_PM_CONTROL_MASK);
|
||||
PCICFG_PM_CONTROL_OFFSET,
|
||||
PCICFG_PM_CONTROL_MASK);
|
||||
if (status) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Could not enable Wake-on-lan\n");
|
||||
@ -2912,7 +2907,8 @@ static int be_setup_wol(struct be_adapter *adapter, bool enable)
|
||||
return status;
|
||||
}
|
||||
status = be_cmd_enable_magic_wol(adapter,
|
||||
adapter->netdev->dev_addr, &cmd);
|
||||
adapter->netdev->dev_addr,
|
||||
&cmd);
|
||||
pci_enable_wake(adapter->pdev, PCI_D3hot, 1);
|
||||
pci_enable_wake(adapter->pdev, PCI_D3cold, 1);
|
||||
} else {
|
||||
@ -2951,7 +2947,8 @@ static int be_vf_eth_addr_config(struct be_adapter *adapter)
|
||||
|
||||
if (status)
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Mac address assignment failed for VF %d\n", vf);
|
||||
"Mac address assignment failed for VF %d\n",
|
||||
vf);
|
||||
else
|
||||
memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
|
||||
|
||||
@ -3093,9 +3090,11 @@ static int be_vfs_if_create(struct be_adapter *adapter)
|
||||
|
||||
/* If a FW profile exists, then cap_flags are updated */
|
||||
en_flags = cap_flags & (BE_IF_FLAGS_UNTAGGED |
|
||||
BE_IF_FLAGS_BROADCAST | BE_IF_FLAGS_MULTICAST);
|
||||
status = be_cmd_if_create(adapter, cap_flags, en_flags,
|
||||
&vf_cfg->if_handle, vf + 1);
|
||||
BE_IF_FLAGS_BROADCAST |
|
||||
BE_IF_FLAGS_MULTICAST);
|
||||
status =
|
||||
be_cmd_if_create(adapter, cap_flags, en_flags,
|
||||
&vf_cfg->if_handle, vf + 1);
|
||||
if (status)
|
||||
goto err;
|
||||
}
|
||||
@ -3601,8 +3600,8 @@ static void be_netpoll(struct net_device *netdev)
|
||||
static char flash_cookie[2][16] = {"*** SE FLAS", "H DIRECTORY *** "};
|
||||
|
||||
static bool be_flash_redboot(struct be_adapter *adapter,
|
||||
const u8 *p, u32 img_start, int image_size,
|
||||
int hdr_size)
|
||||
const u8 *p, u32 img_start, int image_size,
|
||||
int hdr_size)
|
||||
{
|
||||
u32 crc_offset;
|
||||
u8 flashed_crc[4];
|
||||
@ -3612,11 +3611,10 @@ static bool be_flash_redboot(struct be_adapter *adapter,
|
||||
|
||||
p += crc_offset;
|
||||
|
||||
status = be_cmd_get_flash_crc(adapter, flashed_crc,
|
||||
(image_size - 4));
|
||||
status = be_cmd_get_flash_crc(adapter, flashed_crc, (image_size - 4));
|
||||
if (status) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"could not get crc from flash, not flashing redboot\n");
|
||||
"could not get crc from flash, not flashing redboot\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3656,8 +3654,8 @@ static bool is_comp_in_ufi(struct be_adapter *adapter,
|
||||
}
|
||||
|
||||
static struct flash_section_info *get_fsec_info(struct be_adapter *adapter,
|
||||
int header_size,
|
||||
const struct firmware *fw)
|
||||
int header_size,
|
||||
const struct firmware *fw)
|
||||
{
|
||||
struct flash_section_info *fsec = NULL;
|
||||
const u8 *p = fw->data;
|
||||
@ -3673,7 +3671,7 @@ static struct flash_section_info *get_fsec_info(struct be_adapter *adapter,
|
||||
}
|
||||
|
||||
static int be_flash(struct be_adapter *adapter, const u8 *img,
|
||||
struct be_dma_mem *flash_cmd, int optype, int img_size)
|
||||
struct be_dma_mem *flash_cmd, int optype, int img_size)
|
||||
{
|
||||
u32 total_bytes = 0, flash_op, num_bytes = 0;
|
||||
int status = 0;
|
||||
@ -3700,7 +3698,7 @@ static int be_flash(struct be_adapter *adapter, const u8 *img,
|
||||
memcpy(req->data_buf, img, num_bytes);
|
||||
img += num_bytes;
|
||||
status = be_cmd_write_flashrom(adapter, flash_cmd, optype,
|
||||
flash_op, num_bytes);
|
||||
flash_op, num_bytes);
|
||||
if (status) {
|
||||
if (status == ILLEGAL_IOCTL_REQ &&
|
||||
optype == OPTYPE_PHY_FW)
|
||||
@ -3715,10 +3713,8 @@ static int be_flash(struct be_adapter *adapter, const u8 *img,
|
||||
|
||||
/* For BE2, BE3 and BE3-R */
|
||||
static int be_flash_BEx(struct be_adapter *adapter,
|
||||
const struct firmware *fw,
|
||||
struct be_dma_mem *flash_cmd,
|
||||
int num_of_images)
|
||||
|
||||
const struct firmware *fw,
|
||||
struct be_dma_mem *flash_cmd, int num_of_images)
|
||||
{
|
||||
int status = 0, i, filehdr_size = 0;
|
||||
int img_hdrs_size = (num_of_images * sizeof(struct image_hdr));
|
||||
@ -3800,8 +3796,10 @@ static int be_flash_BEx(struct be_adapter *adapter,
|
||||
|
||||
if (pflashcomp[i].optype == OPTYPE_REDBOOT) {
|
||||
redboot = be_flash_redboot(adapter, fw->data,
|
||||
pflashcomp[i].offset, pflashcomp[i].size,
|
||||
filehdr_size + img_hdrs_size);
|
||||
pflashcomp[i].offset,
|
||||
pflashcomp[i].size,
|
||||
filehdr_size +
|
||||
img_hdrs_size);
|
||||
if (!redboot)
|
||||
continue;
|
||||
}
|
||||
@ -3812,7 +3810,7 @@ static int be_flash_BEx(struct be_adapter *adapter,
|
||||
return -1;
|
||||
|
||||
status = be_flash(adapter, p, flash_cmd, pflashcomp[i].optype,
|
||||
pflashcomp[i].size);
|
||||
pflashcomp[i].size);
|
||||
if (status) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Flashing section type %d failed.\n",
|
||||
@ -3824,8 +3822,8 @@ static int be_flash_BEx(struct be_adapter *adapter,
|
||||
}
|
||||
|
||||
static int be_flash_skyhawk(struct be_adapter *adapter,
|
||||
const struct firmware *fw,
|
||||
struct be_dma_mem *flash_cmd, int num_of_images)
|
||||
const struct firmware *fw,
|
||||
struct be_dma_mem *flash_cmd, int num_of_images)
|
||||
{
|
||||
int status = 0, i, filehdr_size = 0;
|
||||
int img_offset, img_size, img_optype, redboot;
|
||||
@ -3873,8 +3871,9 @@ static int be_flash_skyhawk(struct be_adapter *adapter,
|
||||
|
||||
if (img_optype == OPTYPE_REDBOOT) {
|
||||
redboot = be_flash_redboot(adapter, fw->data,
|
||||
img_offset, img_size,
|
||||
filehdr_size + img_hdrs_size);
|
||||
img_offset, img_size,
|
||||
filehdr_size +
|
||||
img_hdrs_size);
|
||||
if (!redboot)
|
||||
continue;
|
||||
}
|
||||
@ -3896,7 +3895,7 @@ static int be_flash_skyhawk(struct be_adapter *adapter,
|
||||
}
|
||||
|
||||
static int lancer_fw_download(struct be_adapter *adapter,
|
||||
const struct firmware *fw)
|
||||
const struct firmware *fw)
|
||||
{
|
||||
#define LANCER_FW_DOWNLOAD_CHUNK (32 * 1024)
|
||||
#define LANCER_FW_DOWNLOAD_LOCATION "/prg"
|
||||
@ -3962,7 +3961,7 @@ static int lancer_fw_download(struct be_adapter *adapter,
|
||||
}
|
||||
|
||||
dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
|
||||
flash_cmd.dma);
|
||||
flash_cmd.dma);
|
||||
if (status) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Firmware load error. "
|
||||
@ -3983,9 +3982,8 @@ static int lancer_fw_download(struct be_adapter *adapter,
|
||||
goto lancer_fw_exit;
|
||||
}
|
||||
} else if (change_status != LANCER_NO_RESET_NEEDED) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"System reboot required for new FW"
|
||||
" to be active\n");
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"System reboot required for new FW to be active\n");
|
||||
}
|
||||
|
||||
dev_info(&adapter->pdev->dev, "Firmware flashed successfully\n");
|
||||
@ -4049,7 +4047,7 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
|
||||
switch (ufi_type) {
|
||||
case UFI_TYPE4:
|
||||
status = be_flash_skyhawk(adapter, fw,
|
||||
&flash_cmd, num_imgs);
|
||||
&flash_cmd, num_imgs);
|
||||
break;
|
||||
case UFI_TYPE3R:
|
||||
status = be_flash_BEx(adapter, fw, &flash_cmd,
|
||||
@ -4119,8 +4117,7 @@ fw_exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
static int be_ndo_bridge_setlink(struct net_device *dev,
|
||||
struct nlmsghdr *nlh)
|
||||
static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(dev);
|
||||
struct nlattr *attr, *br_spec;
|
||||
@ -4162,8 +4159,7 @@ err:
|
||||
}
|
||||
|
||||
static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
||||
struct net_device *dev,
|
||||
u32 filter_mask)
|
||||
struct net_device *dev, u32 filter_mask)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(dev);
|
||||
int status = 0;
|
||||
@ -4877,7 +4873,7 @@ static void be_shutdown(struct pci_dev *pdev)
|
||||
}
|
||||
|
||||
static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
|
||||
pci_channel_state_t state)
|
||||
pci_channel_state_t state)
|
||||
{
|
||||
struct be_adapter *adapter = pci_get_drvdata(pdev);
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
|
Loading…
Reference in New Issue
Block a user