1656 cmd.speed == SPEED_100 ? "100" : "10", |
1656 cmd.speed == SPEED_100 ? "100" : "10", |
1657 cmd.duplex == DUPLEX_FULL ? "full" : "half"); |
1657 cmd.duplex == DUPLEX_FULL ? "full" : "half"); |
1658 } else if(!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) { |
1658 } else if(!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) { |
1659 DPRINTK(LINK, INFO, "link down\n"); |
1659 DPRINTK(LINK, INFO, "link down\n"); |
1660 } |
1660 } |
1661 } |
1661 |
1662 |
1662 mii_check_link(&nic->mii); |
1663 mii_check_link(&nic->mii); |
1663 } |
1664 |
1664 |
1665 if (!nic->ecdev) { |
1665 if (!nic->ecdev) { |
1666 /* Software generated interrupt to recover from (rare) Rx |
1666 /* Software generated interrupt to recover from (rare) Rx |
1667 * allocation failure. |
1667 * allocation failure. |
1668 * Unfortunately have to use a spinlock to not re-enable interrupts |
1668 * Unfortunately have to use a spinlock to not re-enable interrupts |
1670 * interrupt mask bit and the SW Interrupt generation bit */ |
1670 * interrupt mask bit and the SW Interrupt generation bit */ |
1671 spin_lock_irq(&nic->cmd_lock); |
1671 spin_lock_irq(&nic->cmd_lock); |
1672 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); |
1672 iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); |
1673 e100_write_flush(nic); |
1673 e100_write_flush(nic); |
1674 spin_unlock_irq(&nic->cmd_lock); |
1674 spin_unlock_irq(&nic->cmd_lock); |
1675 } |
1675 |
1676 |
1676 e100_update_stats(nic); |
1677 e100_update_stats(nic); |
1677 e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); |
1678 e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); |
1678 |
1679 |
1679 if(nic->mac <= mac_82557_D100_C) |
1680 if(nic->mac <= mac_82557_D100_C) |
1680 /* Issue a multicast command to workaround a 557 lock up */ |
1681 /* Issue a multicast command to workaround a 557 lock up */ |
1681 e100_set_multicast_list(nic->netdev); |
1682 e100_set_multicast_list(nic->netdev); |
1682 |
1683 |
1683 if(nic->flags & ich && cmd.speed==SPEED_10 && cmd.duplex==DUPLEX_HALF) |
1684 if(nic->flags & ich && cmd.speed==SPEED_10 && cmd.duplex==DUPLEX_HALF) |
1684 /* Need SW workaround for ICH[x] 10Mbps/half duplex Tx hang. */ |
1685 /* Need SW workaround for ICH[x] 10Mbps/half duplex Tx hang. */ |
1685 nic->flags |= ich_10h_workaround; |
1686 nic->flags |= ich_10h_workaround; |
1686 else |
1687 else |
1687 nic->flags &= ~ich_10h_workaround; |
1688 nic->flags &= ~ich_10h_workaround; |
1688 |
1689 |
|
1690 if (!nic->ecdev) |
|
1691 mod_timer(&nic->watchdog, |
1689 mod_timer(&nic->watchdog, |
1692 round_jiffies(jiffies + E100_WATCHDOG_PERIOD)); |
1690 round_jiffies(jiffies + E100_WATCHDOG_PERIOD)); |
|
1691 } |
1693 } |
1692 } |
1694 |
1693 |
1695 static void e100_xmit_prepare(struct nic *nic, struct cb *cb, |
1694 static void e100_xmit_prepare(struct nic *nic, struct cb *cb, |
1696 struct sk_buff *skb) |
1695 struct sk_buff *skb) |
1697 { |
1696 { |