diff options
| -rw-r--r-- | drivers/net/pcmcia/xirc2ps_cs.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index d041f831a18d..f6c4698ce738 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
| @@ -1461,22 +1461,25 @@ static void | |||
| 1461 | set_multicast_list(struct net_device *dev) | 1461 | set_multicast_list(struct net_device *dev) |
| 1462 | { | 1462 | { |
| 1463 | unsigned int ioaddr = dev->base_addr; | 1463 | unsigned int ioaddr = dev->base_addr; |
| 1464 | unsigned value; | ||
| 1464 | 1465 | ||
| 1465 | SelectPage(0x42); | 1466 | SelectPage(0x42); |
| 1467 | value = GetByte(XIRCREG42_SWC1) & 0xC0; | ||
| 1468 | |||
| 1466 | if (dev->flags & IFF_PROMISC) { /* snoop */ | 1469 | if (dev->flags & IFF_PROMISC) { /* snoop */ |
| 1467 | PutByte(XIRCREG42_SWC1, 0x06); /* set MPE and PME */ | 1470 | PutByte(XIRCREG42_SWC1, value | 0x06); /* set MPE and PME */ |
| 1468 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { | 1471 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { |
| 1469 | PutByte(XIRCREG42_SWC1, 0x02); /* set MPE */ | 1472 | PutByte(XIRCREG42_SWC1, value | 0x02); /* set MPE */ |
| 1470 | } else if (dev->mc_count) { | 1473 | } else if (dev->mc_count) { |
| 1471 | /* the chip can filter 9 addresses perfectly */ | 1474 | /* the chip can filter 9 addresses perfectly */ |
| 1472 | PutByte(XIRCREG42_SWC1, 0x01); | 1475 | PutByte(XIRCREG42_SWC1, value | 0x01); |
| 1473 | SelectPage(0x40); | 1476 | SelectPage(0x40); |
| 1474 | PutByte(XIRCREG40_CMD0, Offline); | 1477 | PutByte(XIRCREG40_CMD0, Offline); |
| 1475 | set_addresses(dev); | 1478 | set_addresses(dev); |
| 1476 | SelectPage(0x40); | 1479 | SelectPage(0x40); |
| 1477 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1480 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1478 | } else { /* standard usage */ | 1481 | } else { /* standard usage */ |
| 1479 | PutByte(XIRCREG42_SWC1, 0x00); | 1482 | PutByte(XIRCREG42_SWC1, value | 0x00); |
| 1480 | } | 1483 | } |
| 1481 | SelectPage(0); | 1484 | SelectPage(0); |
| 1482 | } | 1485 | } |
| @@ -1722,6 +1725,7 @@ do_reset(struct net_device *dev, int full) | |||
| 1722 | 1725 | ||
| 1723 | /* enable receiver and put the mac online */ | 1726 | /* enable receiver and put the mac online */ |
| 1724 | if (full) { | 1727 | if (full) { |
| 1728 | set_multicast_list(dev); | ||
| 1725 | SelectPage(0x40); | 1729 | SelectPage(0x40); |
| 1726 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1730 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1727 | } | 1731 | } |
