aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bnx2.c')
-rw-r--r--drivers/net/bnx2.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 7d824cf8ee2d..ada5e9b9988c 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -57,8 +57,8 @@
57 57
58#define DRV_MODULE_NAME "bnx2" 58#define DRV_MODULE_NAME "bnx2"
59#define PFX DRV_MODULE_NAME ": " 59#define PFX DRV_MODULE_NAME ": "
60#define DRV_MODULE_VERSION "1.5.1" 60#define DRV_MODULE_VERSION "1.5.2"
61#define DRV_MODULE_RELDATE "November 15, 2006" 61#define DRV_MODULE_RELDATE "December 13, 2006"
62 62
63#define RUN_AT(x) (jiffies + (x)) 63#define RUN_AT(x) (jiffies + (x))
64 64
@@ -217,9 +217,16 @@ static inline u32 bnx2_tx_avail(struct bnx2 *bp)
217 u32 diff; 217 u32 diff;
218 218
219 smp_mb(); 219 smp_mb();
220 diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons); 220
221 if (diff > MAX_TX_DESC_CNT) 221 /* The ring uses 256 indices for 255 entries, one of them
222 diff = (diff & MAX_TX_DESC_CNT) - 1; 222 * needs to be skipped.
223 */
224 diff = bp->tx_prod - bp->tx_cons;
225 if (unlikely(diff >= TX_DESC_CNT)) {
226 diff &= 0xffff;
227 if (diff == TX_DESC_CNT)
228 diff = MAX_TX_DESC_CNT;
229 }
223 return (bp->tx_ring_size - diff); 230 return (bp->tx_ring_size - diff);
224} 231}
225 232
@@ -3089,7 +3096,7 @@ bnx2_nvram_write(struct bnx2 *bp, u32 offset, u8 *data_buf,
3089 3096
3090 if ((align_start = (offset32 & 3))) { 3097 if ((align_start = (offset32 & 3))) {
3091 offset32 &= ~3; 3098 offset32 &= ~3;
3092 len32 += align_start; 3099 len32 += (4 - align_start);
3093 if ((rc = bnx2_nvram_read(bp, offset32, start, 4))) 3100 if ((rc = bnx2_nvram_read(bp, offset32, start, 4)))
3094 return rc; 3101 return rc;
3095 } 3102 }
@@ -3107,7 +3114,7 @@ bnx2_nvram_write(struct bnx2 *bp, u32 offset, u8 *data_buf,
3107 3114
3108 if (align_start || align_end) { 3115 if (align_start || align_end) {
3109 buf = kmalloc(len32, GFP_KERNEL); 3116 buf = kmalloc(len32, GFP_KERNEL);
3110 if (buf == 0) 3117 if (buf == NULL)
3111 return -ENOMEM; 3118 return -ENOMEM;
3112 if (align_start) { 3119 if (align_start) {
3113 memcpy(buf, start, 4); 3120 memcpy(buf, start, 4);
@@ -3998,7 +4005,7 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode)
3998 if (!skb) 4005 if (!skb)
3999 return -ENOMEM; 4006 return -ENOMEM;
4000 packet = skb_put(skb, pkt_size); 4007 packet = skb_put(skb, pkt_size);
4001 memcpy(packet, bp->mac_addr, 6); 4008 memcpy(packet, bp->dev->dev_addr, 6);
4002 memset(packet + 6, 0x0, 8); 4009 memset(packet + 6, 0x0, 8);
4003 for (i = 14; i < pkt_size; i++) 4010 for (i = 14; i < pkt_size; i++)
4004 packet[i] = (unsigned char) (i & 0xff); 4011 packet[i] = (unsigned char) (i & 0xff);