devices/e100-2.6.28-ethercat.c
changeset 1502 9715a5599590
parent 1477 76a463df511b
child 1504 e02f3344a748
equal deleted inserted replaced
1501:59990318c95b 1502:9715a5599590
  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 {