diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 123 | 
1 files changed, 63 insertions, 60 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h index 0991534f61d..aee7671ff4c 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h @@ -1,6 +1,6 @@  /* bnx2x_cmn.h: Broadcom Everest network driver.   * - * Copyright (c) 2007-2012 Broadcom Corporation + * Copyright (c) 2007-2013 Broadcom Corporation   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@  #include "bnx2x.h" +#include "bnx2x_sriov.h"  /* This is used as a replacement for an MCP if it's not present */  extern int load_count[2][3]; /* per-path: 0-common, 1-port0, 2-port1 */ @@ -196,6 +197,7 @@ void bnx2x_igu_ack_sb(struct bnx2x *bp, u8 igu_sb_id, u8 segment,  /* Disable transactions from chip to host */  void bnx2x_pf_disable(struct bnx2x *bp); +int bnx2x_pretend_func(struct bnx2x *bp, u16 pretend_func_val);  /**   * bnx2x__link_status_update - handles link status change. @@ -401,7 +403,7 @@ void bnx2x_set_rx_mode(struct net_device *dev);   * If bp->state is OPEN, should be called with   * netif_addr_lock_bh().   */ -void bnx2x_set_storm_rx_mode(struct bnx2x *bp); +int bnx2x_set_storm_rx_mode(struct bnx2x *bp);  /**   * bnx2x_set_q_rx_mode - configures rx_mode for a single queue. @@ -413,11 +415,11 @@ void bnx2x_set_storm_rx_mode(struct bnx2x *bp);   * @tx_accept_flags:	tx accept configuration (tx switch)   * @ramrod_flags:	ramrod configuration   */ -void bnx2x_set_q_rx_mode(struct bnx2x *bp, u8 cl_id, -			 unsigned long rx_mode_flags, -			 unsigned long rx_accept_flags, -			 unsigned long tx_accept_flags, -			 unsigned long ramrod_flags); +int bnx2x_set_q_rx_mode(struct bnx2x *bp, u8 cl_id, +			unsigned long rx_mode_flags, +			unsigned long rx_accept_flags, +			unsigned long tx_accept_flags, +			unsigned long ramrod_flags);  /* Parity errors related */  void bnx2x_set_pf_load(struct bnx2x *bp); @@ -477,8 +479,6 @@ int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state);   */  void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value);  /* Error handling */ -void bnx2x_panic_dump(struct bnx2x *bp); -  void bnx2x_fw_dump_lvl(struct bnx2x *bp, const char *lvl);  /* validate currect fw is loaded */ @@ -496,9 +496,44 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev);  /* setup_tc callback */  int bnx2x_setup_tc(struct net_device *dev, u8 num_tc); +int bnx2x_set_vf_mac(struct net_device *dev, int queue, u8 *mac); +  /* select_queue callback */  u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb); +static inline void bnx2x_update_rx_prod(struct bnx2x *bp, +					struct bnx2x_fastpath *fp, +					u16 bd_prod, u16 rx_comp_prod, +					u16 rx_sge_prod) +{ +	struct ustorm_eth_rx_producers rx_prods = {0}; +	u32 i; + +	/* Update producers */ +	rx_prods.bd_prod = bd_prod; +	rx_prods.cqe_prod = rx_comp_prod; +	rx_prods.sge_prod = rx_sge_prod; + +	/* Make sure that the BD and SGE data is updated before updating the +	 * producers since FW might read the BD/SGE right after the producer +	 * is updated. +	 * This is only applicable for weak-ordered memory model archs such +	 * as IA-64. The following barrier is also mandatory since FW will +	 * assumes BDs must have buffers. +	 */ +	wmb(); + +	for (i = 0; i < sizeof(rx_prods)/4; i++) +		REG_WR(bp, fp->ustorm_rx_prods_offset + i*4, +		       ((u32 *)&rx_prods)[i]); + +	mmiowb(); /* keep prod updates ordered */ + +	DP(NETIF_MSG_RX_STATUS, +	   "queue[%d]:  wrote  bd_prod %u  cqe_prod %u  sge_prod %u\n", +	   fp->index, bd_prod, rx_comp_prod, rx_sge_prod); +} +  /* reload helper */  int bnx2x_reload_if_running(struct net_device *dev); @@ -507,9 +542,6 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p);  /* NAPI poll Rx part */  int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget); -void bnx2x_update_rx_prod(struct bnx2x *bp, struct bnx2x_fastpath *fp, -			u16 bd_prod, u16 rx_comp_prod, u16 rx_sge_prod); -  /* NAPI poll Tx part */  int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata); @@ -612,38 +644,6 @@ static inline void bnx2x_update_fpsb_idx(struct bnx2x_fastpath *fp)  	fp->fp_hc_idx = fp->sb_running_index[SM_RX_ID];  } -static inline void bnx2x_update_rx_prod_gen(struct bnx2x *bp, -			struct bnx2x_fastpath *fp, u16 bd_prod, -			u16 rx_comp_prod, u16 rx_sge_prod, u32 start) -{ -	struct ustorm_eth_rx_producers rx_prods = {0}; -	u32 i; - -	/* Update producers */ -	rx_prods.bd_prod = bd_prod; -	rx_prods.cqe_prod = rx_comp_prod; -	rx_prods.sge_prod = rx_sge_prod; - -	/* -	 * Make sure that the BD and SGE data is updated before updating the -	 * producers since FW might read the BD/SGE right after the producer -	 * is updated. -	 * This is only applicable for weak-ordered memory model archs such -	 * as IA-64. The following barrier is also mandatory since FW will -	 * assumes BDs must have buffers. -	 */ -	wmb(); - -	for (i = 0; i < sizeof(rx_prods)/4; i++) -		REG_WR(bp, start + i*4, ((u32 *)&rx_prods)[i]); - -	mmiowb(); /* keep prod updates ordered */ - -	DP(NETIF_MSG_RX_STATUS, -	   "queue[%d]:  wrote  bd_prod %u  cqe_prod %u  sge_prod %u\n", -	   fp->index, bd_prod, rx_comp_prod, rx_sge_prod); -} -  static inline void bnx2x_igu_ack_sb_gen(struct bnx2x *bp, u8 igu_sb_id,  					u8 segment, u16 index, u8 op,  					u8 update, u32 igu_addr) @@ -819,7 +819,7 @@ static inline void bnx2x_free_rx_sge(struct bnx2x *bp,  		return;  	dma_unmap_page(&bp->pdev->dev, dma_unmap_addr(sw_buf, mapping), -		       SGE_PAGE_SIZE*PAGES_PER_SGE, DMA_FROM_DEVICE); +		       SGE_PAGES, DMA_FROM_DEVICE);  	__free_pages(page, PAGES_PER_SGE_SHIFT);  	sw_buf->page = NULL; @@ -863,7 +863,7 @@ static inline void bnx2x_del_all_napi(struct bnx2x *bp)  		netif_napi_del(&bnx2x_fp(bp, i, napi));  } -void bnx2x_set_int_mode(struct bnx2x *bp); +int bnx2x_set_int_mode(struct bnx2x *bp);  static inline void bnx2x_disable_msi(struct bnx2x *bp)  { @@ -973,7 +973,6 @@ static inline int bnx2x_func_start(struct bnx2x *bp)  	return bnx2x_func_state_change(bp, &func_params);  } -  /**   * bnx2x_set_fw_mac_addr - fill in a MAC address in FW format   * @@ -982,8 +981,8 @@ static inline int bnx2x_func_start(struct bnx2x *bp)   * @fw_lo:	pointer to lower part   * @mac:	pointer to MAC address   */ -static inline void bnx2x_set_fw_mac_addr(u16 *fw_hi, u16 *fw_mid, u16 *fw_lo, -					 u8 *mac) +static inline void bnx2x_set_fw_mac_addr(__le16 *fw_hi, __le16 *fw_mid, +					 __le16 *fw_lo, u8 *mac)  {  	((u8 *)fw_hi)[0]  = mac[1];  	((u8 *)fw_hi)[1]  = mac[0]; @@ -1108,6 +1107,9 @@ static inline void bnx2x_init_bp_objs(struct bnx2x *bp)  	bnx2x_init_mac_credit_pool(bp, &bp->macs_pool, BP_FUNC(bp),  				   bnx2x_get_path_func_num(bp)); +	bnx2x_init_vlan_credit_pool(bp, &bp->vlans_pool, BP_ABS_FUNC(bp)>>1, +				    bnx2x_get_path_func_num(bp)); +  	/* RSS configuration object */  	bnx2x_init_rss_config_obj(bp, &bp->rss_conf_obj, bp->fp->cl_id,  				  bp->fp->cid, BP_FUNC(bp), BP_FUNC(bp), @@ -1125,15 +1127,7 @@ static inline u8 bnx2x_fp_qzone_id(struct bnx2x_fastpath *fp)  		return fp->cl_id;  } -static inline u32 bnx2x_rx_ustorm_prods_offset(struct bnx2x_fastpath *fp) -{ -	struct bnx2x *bp = fp->bp; - -	if (!CHIP_IS_E1x(bp)) -		return USTORM_RX_PRODS_E2_OFFSET(fp->cl_qzone_id); -	else -		return USTORM_RX_PRODS_E1X_OFFSET(BP_PORT(bp), fp->cl_id); -} +u32 bnx2x_rx_ustorm_prods_offset(struct bnx2x_fastpath *fp);  static inline void bnx2x_init_txdata(struct bnx2x *bp,  				     struct bnx2x_fp_txdata *txdata, u32 cid, @@ -1228,7 +1222,7 @@ static inline int bnx2x_clean_tx_queue(struct bnx2x *bp,  #endif  		}  		cnt--; -		usleep_range(1000, 1000); +		usleep_range(1000, 2000);  	}  	return 0; @@ -1263,7 +1257,7 @@ static inline bool bnx2x_wait_sp_comp(struct bnx2x *bp, unsigned long mask)  		}  		netif_addr_unlock_bh(bp->dev); -		usleep_range(1000, 1000); +		usleep_range(1000, 2000);  	}  	smp_mb(); @@ -1393,4 +1387,13 @@ static inline bool bnx2x_is_valid_ether_addr(struct bnx2x *bp, u8 *addr)  	return false;  } +/** + * bnx2x_fill_fw_str - Fill buffer with FW version string + * + * @bp:        driver handle + * @buf:       character buffer to fill with the fw name + * @buf_len:   length of the above buffer + * + */ +void bnx2x_fill_fw_str(struct bnx2x *bp, char *buf, size_t buf_len);  #endif /* BNX2X_CMN_H */  |