diff options
author | Michael Chan <mchan@broadcom.com> | 2005-08-25 18:39:15 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-29 19:10:48 -0400 |
commit | 73eef4cddb2738c4e8c5ef157ebb1b19d6c9272f (patch) | |
tree | adb68a5d7901439a2667fb6f60bbfa28c034d177 | |
parent | c770a65cee7cc250d7bccd99fa55e742988ae4e0 (diff) |
[BNX2]: update version and minor fixes
Update version and add 4 minor fixes, the last 2 were suggested by
Jeff Garzik:
1. check for a valid ethernet address before setting it
2. zero out bp->regview if init_one encounters an error and unmaps
the IO address. This prevents remove_one from unmapping again.
3. use netif_rx_schedule() instead of hand coding the same.
4. use IRQ_HANDLED and IRQ_NONE.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/bnx2.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 418190b79f6c..7babf6af4e28 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -14,8 +14,8 @@ | |||
14 | 14 | ||
15 | #define DRV_MODULE_NAME "bnx2" | 15 | #define DRV_MODULE_NAME "bnx2" |
16 | #define PFX DRV_MODULE_NAME ": " | 16 | #define PFX DRV_MODULE_NAME ": " |
17 | #define DRV_MODULE_VERSION "1.2.19" | 17 | #define DRV_MODULE_VERSION "1.2.20" |
18 | #define DRV_MODULE_RELDATE "May 23, 2005" | 18 | #define DRV_MODULE_RELDATE "August 22, 2005" |
19 | 19 | ||
20 | #define RUN_AT(x) (jiffies + (x)) | 20 | #define RUN_AT(x) (jiffies + (x)) |
21 | 21 | ||
@@ -1538,15 +1538,12 @@ bnx2_msi(int irq, void *dev_instance, struct pt_regs *regs) | |||
1538 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT); | 1538 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT); |
1539 | 1539 | ||
1540 | /* Return here if interrupt is disabled. */ | 1540 | /* Return here if interrupt is disabled. */ |
1541 | if (unlikely(atomic_read(&bp->intr_sem) != 0)) { | 1541 | if (unlikely(atomic_read(&bp->intr_sem) != 0)) |
1542 | return IRQ_RETVAL(1); | 1542 | return IRQ_HANDLED; |
1543 | } | ||
1544 | 1543 | ||
1545 | if (netif_rx_schedule_prep(dev)) { | 1544 | netif_rx_schedule(dev); |
1546 | __netif_rx_schedule(dev); | ||
1547 | } | ||
1548 | 1545 | ||
1549 | return IRQ_RETVAL(1); | 1546 | return IRQ_HANDLED; |
1550 | } | 1547 | } |
1551 | 1548 | ||
1552 | static irqreturn_t | 1549 | static irqreturn_t |
@@ -1564,22 +1561,19 @@ bnx2_interrupt(int irq, void *dev_instance, struct pt_regs *regs) | |||
1564 | if ((bp->status_blk->status_idx == bp->last_status_idx) || | 1561 | if ((bp->status_blk->status_idx == bp->last_status_idx) || |
1565 | (REG_RD(bp, BNX2_PCICFG_MISC_STATUS) & | 1562 | (REG_RD(bp, BNX2_PCICFG_MISC_STATUS) & |
1566 | BNX2_PCICFG_MISC_STATUS_INTA_VALUE)) | 1563 | BNX2_PCICFG_MISC_STATUS_INTA_VALUE)) |
1567 | return IRQ_RETVAL(0); | 1564 | return IRQ_NONE; |
1568 | 1565 | ||
1569 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, | 1566 | REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD, |
1570 | BNX2_PCICFG_INT_ACK_CMD_USE_INT_HC_PARAM | | 1567 | BNX2_PCICFG_INT_ACK_CMD_USE_INT_HC_PARAM | |
1571 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT); | 1568 | BNX2_PCICFG_INT_ACK_CMD_MASK_INT); |
1572 | 1569 | ||
1573 | /* Return here if interrupt is shared and is disabled. */ | 1570 | /* Return here if interrupt is shared and is disabled. */ |
1574 | if (unlikely(atomic_read(&bp->intr_sem) != 0)) { | 1571 | if (unlikely(atomic_read(&bp->intr_sem) != 0)) |
1575 | return IRQ_RETVAL(1); | 1572 | return IRQ_HANDLED; |
1576 | } | ||
1577 | 1573 | ||
1578 | if (netif_rx_schedule_prep(dev)) { | 1574 | netif_rx_schedule(dev); |
1579 | __netif_rx_schedule(dev); | ||
1580 | } | ||
1581 | 1575 | ||
1582 | return IRQ_RETVAL(1); | 1576 | return IRQ_HANDLED; |
1583 | } | 1577 | } |
1584 | 1578 | ||
1585 | static int | 1579 | static int |
@@ -5071,6 +5065,9 @@ bnx2_change_mac_addr(struct net_device *dev, void *p) | |||
5071 | struct sockaddr *addr = p; | 5065 | struct sockaddr *addr = p; |
5072 | struct bnx2 *bp = dev->priv; | 5066 | struct bnx2 *bp = dev->priv; |
5073 | 5067 | ||
5068 | if (!is_valid_ether_addr(addr->sa_data)) | ||
5069 | return -EINVAL; | ||
5070 | |||
5074 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); | 5071 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); |
5075 | if (netif_running(dev)) | 5072 | if (netif_running(dev)) |
5076 | bnx2_set_mac_addr(bp); | 5073 | bnx2_set_mac_addr(bp); |
@@ -5369,6 +5366,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
5369 | err_out_unmap: | 5366 | err_out_unmap: |
5370 | if (bp->regview) { | 5367 | if (bp->regview) { |
5371 | iounmap(bp->regview); | 5368 | iounmap(bp->regview); |
5369 | bp->regview = NULL; | ||
5372 | } | 5370 | } |
5373 | 5371 | ||
5374 | err_out_release: | 5372 | err_out_release: |