aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2011-11-28 07:31:49 -0500
committerDavid S. Miller <davem@davemloft.net>2011-11-29 19:02:57 -0500
commit614c76df1d1224dc2eee8678fab6e0b95b49b7da (patch)
treefc69e019e8d5c833ddfe1188ea94fc774707411d /drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
parent7e02e5433e004713a89f5f865a243133b55dcc88 (diff)
bnx2x: handle iSCSI SD mode
in iSCSI SD mode to bnx2x device assigned single mac address which is supposted to be iscsi mac. If this mode is recognized bnx2x will disable LRO, decrease number of queues to 1 and rx ring size to the minumum allowed by FW, this in order minimize memory use. It will tranfer mac for iscsi usage and zero primary mac of the netdev. Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 42ce56617042..79695bb034d6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1441,6 +1441,11 @@ void bnx2x_set_num_queues(struct bnx2x *bp)
1441 break; 1441 break;
1442 } 1442 }
1443 1443
1444#ifdef BCM_CNIC
1445 /* override in ISCSI SD mod */
1446 if (IS_MF_ISCSI_SD(bp))
1447 bp->num_queues = 1;
1448#endif
1444 /* Add special queues */ 1449 /* Add special queues */
1445 bp->num_queues += NON_ETH_CONTEXT_USE; 1450 bp->num_queues += NON_ETH_CONTEXT_USE;
1446} 1451}
@@ -2988,8 +2993,13 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
2988 struct bnx2x *bp = netdev_priv(dev); 2993 struct bnx2x *bp = netdev_priv(dev);
2989 int rc = 0; 2994 int rc = 0;
2990 2995
2991 if (!is_valid_ether_addr((u8 *)(addr->sa_data))) 2996 if (!bnx2x_is_valid_ether_addr(bp, addr->sa_data))
2997 return -EINVAL;
2998
2999#ifdef BCM_CNIC
3000 if (IS_MF_ISCSI_SD(bp) && !is_zero_ether_addr(addr->sa_data))
2992 return -EINVAL; 3001 return -EINVAL;
3002#endif
2993 3003
2994 if (netif_running(dev)) { 3004 if (netif_running(dev)) {
2995 rc = bnx2x_set_eth_mac(bp, false); 3005 rc = bnx2x_set_eth_mac(bp, false);
@@ -3105,7 +3115,12 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
3105 u8 cos; 3115 u8 cos;
3106 int rx_ring_size = 0; 3116 int rx_ring_size = 0;
3107 3117
3108 /* if rx_ring_size specified - use it */ 3118#ifdef BCM_CNIC
3119 if (IS_MF_ISCSI_SD(bp)) {
3120 rx_ring_size = MIN_RX_SIZE_NONTPA;
3121 bp->rx_ring_size = rx_ring_size;
3122 } else
3123#endif
3109 if (!bp->rx_ring_size) { 3124 if (!bp->rx_ring_size) {
3110 3125
3111 rx_ring_size = MAX_RX_AVAIL/BNX2X_NUM_RX_QUEUES(bp); 3126 rx_ring_size = MAX_RX_AVAIL/BNX2X_NUM_RX_QUEUES(bp);
@@ -3115,7 +3130,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
3115 MIN_RX_SIZE_TPA, rx_ring_size); 3130 MIN_RX_SIZE_TPA, rx_ring_size);
3116 3131
3117 bp->rx_ring_size = rx_ring_size; 3132 bp->rx_ring_size = rx_ring_size;
3118 } else 3133 } else /* if rx_ring_size specified - use it */
3119 rx_ring_size = bp->rx_ring_size; 3134 rx_ring_size = bp->rx_ring_size;
3120 3135
3121 /* Common */ 3136 /* Common */