diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-20 13:43:21 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-20 13:43:21 -0700 | 
| commit | 06f4e926d256d902dd9a53dcb400fd74974ce087 (patch) | |
| tree | 0b438b67f5f0eff6fd617bc497a9dace6164a488 /drivers/net/e100.c | |
| parent | 8e7bfcbab3825d1b404d615cb1b54f44ff81f981 (diff) | |
| parent | d93515611bbc70c2fe4db232e5feb448ed8e4cc9 (diff) | |
| download | olio-linux-3.10-06f4e926d256d902dd9a53dcb400fd74974ce087.tar.xz olio-linux-3.10-06f4e926d256d902dd9a53dcb400fd74974ce087.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1446 commits)
  macvlan: fix panic if lowerdev in a bond
  tg3: Add braces around 5906 workaround.
  tg3: Fix NETIF_F_LOOPBACK error
  macvlan: remove one synchronize_rcu() call
  networking: NET_CLS_ROUTE4 depends on INET
  irda: Fix error propagation in ircomm_lmp_connect_response()
  irda: Kill set but unused variable 'bytes' in irlan_check_command_param()
  irda: Kill set but unused variable 'clen' in ircomm_connect_indication()
  rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport()
  be2net: Kill set but unused variable 'req' in lancer_fw_download()
  irda: Kill set but unused vars 'saddr' and 'daddr' in irlan_provider_connect_indication()
  atl1c: atl1c_resume() is only used when CONFIG_PM_SLEEP is defined.
  rxrpc: Fix set but unused variable 'usage' in rxrpc_get_peer().
  rxrpc: Kill set but unused variable 'local' in rxrpc_UDP_error_handler()
  rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection()
  rxrpc: Kill set but unused variable 'sp' in rxrpc_rotate_tx_window()
  pkt_sched: Kill set but unused variable 'protocol' in tc_classify()
  isdn: capi: Use pr_debug() instead of ifdefs.
  tg3: Update version to 3.119
  tg3: Apply rx_discards fix to 5719/5720
  ...
Fix up trivial conflicts in arch/x86/Kconfig and net/mac80211/agg-tx.c
as per Davem.
Diffstat (limited to 'drivers/net/e100.c')
| -rw-r--r-- | drivers/net/e100.c | 78 | 
1 files changed, 35 insertions, 43 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index b0aa9e68990..e336c7937f0 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -593,7 +593,6 @@ struct nic {  	enum phy phy;  	struct params params;  	struct timer_list watchdog; -	struct timer_list blink_timer;  	struct mii_if_info mii;  	struct work_struct tx_timeout_task;  	enum loopback loopback; @@ -618,7 +617,6 @@ struct nic {  	u32 rx_tco_frames;  	u32 rx_over_length_errors; -	u16 leds;  	u16 eeprom_wc;  	__le16 eeprom[256];  	spinlock_t mdio_lock; @@ -1512,7 +1510,7 @@ static int e100_phy_init(struct nic *nic)  static int e100_hw_init(struct nic *nic)  { -	int err; +	int err = 0;  	e100_hw_reset(nic); @@ -1668,7 +1666,8 @@ static void e100_adjust_adaptive_ifs(struct nic *nic, int speed, int duplex)  static void e100_watchdog(unsigned long data)  {  	struct nic *nic = (struct nic *)data; -	struct ethtool_cmd cmd; +	struct ethtool_cmd cmd = { .cmd = ETHTOOL_GSET }; +	u32 speed;  	netif_printk(nic, timer, KERN_DEBUG, nic->netdev,  		     "right now = %ld\n", jiffies); @@ -1676,10 +1675,11 @@ static void e100_watchdog(unsigned long data)  	/* mii library handles link maintenance tasks */  	mii_ethtool_gset(&nic->mii, &cmd); +	speed = ethtool_cmd_speed(&cmd);  	if (mii_link_ok(&nic->mii) && !netif_carrier_ok(nic->netdev)) {  		netdev_info(nic->netdev, "NIC Link is Up %u Mbps %s Duplex\n", -			    cmd.speed == SPEED_100 ? 100 : 10, +			    speed == SPEED_100 ? 100 : 10,  			    cmd.duplex == DUPLEX_FULL ? "Full" : "Half");  	} else if (!mii_link_ok(&nic->mii) && netif_carrier_ok(nic->netdev)) {  		netdev_info(nic->netdev, "NIC Link is Down\n"); @@ -1698,13 +1698,13 @@ static void e100_watchdog(unsigned long data)  	spin_unlock_irq(&nic->cmd_lock);  	e100_update_stats(nic); -	e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); +	e100_adjust_adaptive_ifs(nic, speed, cmd.duplex);  	if (nic->mac <= mac_82557_D100_C)  		/* Issue a multicast command to workaround a 557 lock up */  		e100_set_multicast_list(nic->netdev); -	if (nic->flags & ich && cmd.speed==SPEED_10 && cmd.duplex==DUPLEX_HALF) +	if (nic->flags & ich && speed == SPEED_10 && cmd.duplex == DUPLEX_HALF)  		/* Need SW workaround for ICH[x] 10Mbps/half duplex Tx hang. */  		nic->flags |= ich_10h_workaround;  	else @@ -2351,30 +2351,6 @@ err_clean_rx:  #define E100_82552_LED_OVERRIDE 0x19  #define E100_82552_LED_ON       0x000F /* LEDTX and LED_RX both on */  #define E100_82552_LED_OFF      0x000A /* LEDTX and LED_RX both off */ -static void e100_blink_led(unsigned long data) -{ -	struct nic *nic = (struct nic *)data; -	enum led_state { -		led_on     = 0x01, -		led_off    = 0x04, -		led_on_559 = 0x05, -		led_on_557 = 0x07, -	}; -	u16 led_reg = MII_LED_CONTROL; - -	if (nic->phy == phy_82552_v) { -		led_reg = E100_82552_LED_OVERRIDE; - -		nic->leds = (nic->leds == E100_82552_LED_ON) ? -		            E100_82552_LED_OFF : E100_82552_LED_ON; -	} else { -		nic->leds = (nic->leds & led_on) ? led_off : -		            (nic->mac < mac_82559_D101M) ? led_on_557 : -		            led_on_559; -	} -	mdio_write(nic->netdev, nic->mii.phy_id, led_reg, nic->leds); -	mod_timer(&nic->blink_timer, jiffies + HZ / 4); -}  static int e100_get_settings(struct net_device *netdev, struct ethtool_cmd *cmd)  { @@ -2598,19 +2574,38 @@ static void e100_diag_test(struct net_device *netdev,  	msleep_interruptible(4 * 1000);  } -static int e100_phys_id(struct net_device *netdev, u32 data) +static int e100_set_phys_id(struct net_device *netdev, +			    enum ethtool_phys_id_state state)  {  	struct nic *nic = netdev_priv(netdev); +	enum led_state { +		led_on     = 0x01, +		led_off    = 0x04, +		led_on_559 = 0x05, +		led_on_557 = 0x07, +	};  	u16 led_reg = (nic->phy == phy_82552_v) ? E100_82552_LED_OVERRIDE : -	              MII_LED_CONTROL; +		MII_LED_CONTROL; +	u16 leds = 0; -	if (!data || data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ)) -		data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ); -	mod_timer(&nic->blink_timer, jiffies); -	msleep_interruptible(data * 1000); -	del_timer_sync(&nic->blink_timer); -	mdio_write(netdev, nic->mii.phy_id, led_reg, 0); +	switch (state) { +	case ETHTOOL_ID_ACTIVE: +		return 2; + +	case ETHTOOL_ID_ON: +		leds = (nic->phy == phy_82552_v) ? E100_82552_LED_ON : +		       (nic->mac < mac_82559_D101M) ? led_on_557 : led_on_559; +		break; + +	case ETHTOOL_ID_OFF: +		leds = (nic->phy == phy_82552_v) ? E100_82552_LED_OFF : led_off; +		break; + +	case ETHTOOL_ID_INACTIVE: +		break; +	} +	mdio_write(netdev, nic->mii.phy_id, led_reg, leds);  	return 0;  } @@ -2691,7 +2686,7 @@ static const struct ethtool_ops e100_ethtool_ops = {  	.set_ringparam		= e100_set_ringparam,  	.self_test		= e100_diag_test,  	.get_strings		= e100_get_strings, -	.phys_id		= e100_phys_id, +	.set_phys_id		= e100_set_phys_id,  	.get_ethtool_stats	= e100_get_ethtool_stats,  	.get_sset_count		= e100_get_sset_count,  }; @@ -2832,9 +2827,6 @@ static int __devinit e100_probe(struct pci_dev *pdev,  	init_timer(&nic->watchdog);  	nic->watchdog.function = e100_watchdog;  	nic->watchdog.data = (unsigned long)nic; -	init_timer(&nic->blink_timer); -	nic->blink_timer.function = e100_blink_led; -	nic->blink_timer.data = (unsigned long)nic;  	INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task);  |