diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 45 | 
1 files changed, 36 insertions, 9 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 623e30b9964..95b245310f1 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -2159,7 +2159,7 @@ void e1000e_release_hw_control(struct e1000_adapter *adapter)  }  /** - * @e1000_alloc_ring - allocate memory for a ring structure + * e1000_alloc_ring_dma - allocate memory for a ring structure   **/  static int e1000_alloc_ring_dma(struct e1000_adapter *adapter,  				struct e1000_ring *ring) @@ -2474,6 +2474,30 @@ set_itr_now:  }  /** + * e1000e_write_itr - write the ITR value to the appropriate registers + * @adapter: address of board private structure + * @itr: new ITR value to program + * + * e1000e_write_itr determines if the adapter is in MSI-X mode + * and, if so, writes the EITR registers with the ITR value. + * Otherwise, it writes the ITR value into the ITR register. + **/ +void e1000e_write_itr(struct e1000_adapter *adapter, u32 itr) +{ +	struct e1000_hw *hw = &adapter->hw; +	u32 new_itr = itr ? 1000000000 / (itr * 256) : 0; + +	if (adapter->msix_entries) { +		int vector; + +		for (vector = 0; vector < adapter->num_vectors; vector++) +			writel(new_itr, hw->hw_addr + E1000_EITR_82574(vector)); +	} else { +		ew32(ITR, new_itr); +	} +} + +/**   * e1000_alloc_queues - Allocate memory for all rings   * @adapter: board private structure to initialize   **/ @@ -3059,7 +3083,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)  	/* irq moderation */  	ew32(RADV, adapter->rx_abs_int_delay);  	if ((adapter->itr_setting != 0) && (adapter->itr != 0)) -		ew32(ITR, 1000000000 / (adapter->itr * 256)); +		e1000e_write_itr(adapter, adapter->itr);  	ctrl_ext = er32(CTRL_EXT);  	/* Auto-Mask interrupts upon ICR access */ @@ -3486,14 +3510,14 @@ void e1000e_reset(struct e1000_adapter *adapter)  				dev_info(&adapter->pdev->dev,  					"Interrupt Throttle Rate turned off\n");  				adapter->flags2 |= FLAG2_DISABLE_AIM; -				ew32(ITR, 0); +				e1000e_write_itr(adapter, 0);  			}  		} else if (adapter->flags2 & FLAG2_DISABLE_AIM) {  			dev_info(&adapter->pdev->dev,  				 "Interrupt Throttle Rate turned on\n");  			adapter->flags2 &= ~FLAG2_DISABLE_AIM;  			adapter->itr = 20000; -			ew32(ITR, 1000000000 / (adapter->itr * 256)); +			e1000e_write_itr(adapter, adapter->itr);  		}  	} @@ -4576,7 +4600,7 @@ link_up:  			    adapter->gorc - adapter->gotc) / 10000;  		u32 itr = goc > 0 ? (dif * 6000 / goc + 2000) : 8000; -		ew32(ITR, 1000000000 / (itr * 256)); +		e1000e_write_itr(adapter, itr);  	}  	/* Cause software interrupt to ensure Rx ring is cleaned */ @@ -6191,7 +6215,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  	}  	if (hw->phy.ops.check_reset_block && hw->phy.ops.check_reset_block(hw)) -		e_info("PHY reset is blocked due to SOL/IDER session.\n"); +		dev_info(&pdev->dev, +			 "PHY reset is blocked due to SOL/IDER session.\n");  	/* Set initial default active device features */  	netdev->features = (NETIF_F_SG | @@ -6241,7 +6266,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  		if (e1000_validate_nvm_checksum(&adapter->hw) >= 0)  			break;  		if (i == 2) { -			e_err("The NVM Checksum Is Not Valid\n"); +			dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n");  			err = -EIO;  			goto err_eeprom;  		} @@ -6251,13 +6276,15 @@ static int __devinit e1000_probe(struct pci_dev *pdev,  	/* copy the MAC address */  	if (e1000e_read_mac_addr(&adapter->hw)) -		e_err("NVM Read Error while reading MAC address\n"); +		dev_err(&pdev->dev, +			"NVM Read Error while reading MAC address\n");  	memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);  	memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);  	if (!is_valid_ether_addr(netdev->perm_addr)) { -		e_err("Invalid MAC Address: %pM\n", netdev->perm_addr); +		dev_err(&pdev->dev, "Invalid MAC Address: %pM\n", +			netdev->perm_addr);  		err = -EIO;  		goto err_eeprom;  	}  | 
