aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-07-20 20:43:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-20 20:43:29 -0400
commitdb6d8c7a4027b48d797b369a53f8470aaeed7063 (patch)
treee140c104a89abc2154e1f41a7db8ebecbb6fa0b4 /drivers/net/e1000e/netdev.c
parent3a533374283aea50eab3976d8a6d30532175f009 (diff)
parentfb65a7c091529bfffb1262515252c0d0f6241c5c (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (1232 commits) iucv: Fix bad merging. net_sched: Add size table for qdiscs net_sched: Add accessor function for packet length for qdiscs net_sched: Add qdisc_enqueue wrapper highmem: Export totalhigh_pages. ipv6 mcast: Omit redundant address family checks in ip6_mc_source(). net: Use standard structures for generic socket address structures. ipv6 netns: Make several "global" sysctl variables namespace aware. netns: Use net_eq() to compare net-namespaces for optimization. ipv6: remove unused macros from net/ipv6.h ipv6: remove unused parameter from ip6_ra_control tcp: fix kernel panic with listening_get_next tcp: Remove redundant checks when setting eff_sacks tcp: options clean up tcp: Fix MD5 signatures for non-linear skbs sctp: Update sctp global memory limit allocations. sctp: remove unnecessary byteshifting, calculate directly in big-endian sctp: Allow only 1 listening socket with SO_REUSEADDR sctp: Do not leak memory on multiple listen() calls sctp: Support ipv6only AF_INET6 sockets. ...
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r--drivers/net/e1000e/netdev.c84
1 files changed, 63 insertions, 21 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 648a87bbf467..869544b8c05c 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -98,8 +98,7 @@ static void e1000_receive_skb(struct e1000_adapter *adapter,
98 98
99 if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) 99 if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
100 vlan_hwaccel_receive_skb(skb, adapter->vlgrp, 100 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
101 le16_to_cpu(vlan) & 101 le16_to_cpu(vlan));
102 E1000_RXD_SPC_VLAN_MASK);
103 else 102 else
104 netif_receive_skb(skb); 103 netif_receive_skb(skb);
105 104
@@ -1793,7 +1792,6 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
1793 if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) { 1792 if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
1794 /* enable VLAN receive filtering */ 1793 /* enable VLAN receive filtering */
1795 rctl = er32(RCTL); 1794 rctl = er32(RCTL);
1796 rctl |= E1000_RCTL_VFE;
1797 rctl &= ~E1000_RCTL_CFIEN; 1795 rctl &= ~E1000_RCTL_CFIEN;
1798 ew32(RCTL, rctl); 1796 ew32(RCTL, rctl);
1799 e1000_update_mng_vlan(adapter); 1797 e1000_update_mng_vlan(adapter);
@@ -1805,10 +1803,6 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
1805 ew32(CTRL, ctrl); 1803 ew32(CTRL, ctrl);
1806 1804
1807 if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) { 1805 if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
1808 /* disable VLAN filtering */
1809 rctl = er32(RCTL);
1810 rctl &= ~E1000_RCTL_VFE;
1811 ew32(RCTL, rctl);
1812 if (adapter->mng_vlan_id != 1806 if (adapter->mng_vlan_id !=
1813 (u16)E1000_MNG_VLAN_NONE) { 1807 (u16)E1000_MNG_VLAN_NONE) {
1814 e1000_vlan_rx_kill_vid(netdev, 1808 e1000_vlan_rx_kill_vid(netdev,
@@ -2231,11 +2225,16 @@ static void e1000_set_multi(struct net_device *netdev)
2231 2225
2232 if (netdev->flags & IFF_PROMISC) { 2226 if (netdev->flags & IFF_PROMISC) {
2233 rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); 2227 rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
2234 } else if (netdev->flags & IFF_ALLMULTI) { 2228 rctl &= ~E1000_RCTL_VFE;
2235 rctl |= E1000_RCTL_MPE;
2236 rctl &= ~E1000_RCTL_UPE;
2237 } else { 2229 } else {
2238 rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE); 2230 if (netdev->flags & IFF_ALLMULTI) {
2231 rctl |= E1000_RCTL_MPE;
2232 rctl &= ~E1000_RCTL_UPE;
2233 } else {
2234 rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
2235 }
2236 if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER)
2237 rctl |= E1000_RCTL_VFE;
2239 } 2238 }
2240 2239
2241 ew32(RCTL, rctl); 2240 ew32(RCTL, rctl);
@@ -2514,7 +2513,7 @@ void e1000e_down(struct e1000_adapter *adapter)
2514 ew32(RCTL, rctl & ~E1000_RCTL_EN); 2513 ew32(RCTL, rctl & ~E1000_RCTL_EN);
2515 /* flush and sleep below */ 2514 /* flush and sleep below */
2516 2515
2517 netif_stop_queue(netdev); 2516 netif_tx_stop_all_queues(netdev);
2518 2517
2519 /* disable transmits in the hardware */ 2518 /* disable transmits in the hardware */
2520 tctl = er32(TCTL); 2519 tctl = er32(TCTL);
@@ -2664,6 +2663,8 @@ static int e1000_open(struct net_device *netdev)
2664 2663
2665 e1000_irq_enable(adapter); 2664 e1000_irq_enable(adapter);
2666 2665
2666 netif_tx_start_all_queues(netdev);
2667
2667 /* fire a link status change interrupt to start the watchdog */ 2668 /* fire a link status change interrupt to start the watchdog */
2668 ew32(ICS, E1000_ICS_LSC); 2669 ew32(ICS, E1000_ICS_LSC);
2669 2670
@@ -3119,7 +3120,7 @@ static void e1000_watchdog_task(struct work_struct *work)
3119 ew32(TCTL, tctl); 3120 ew32(TCTL, tctl);
3120 3121
3121 netif_carrier_on(netdev); 3122 netif_carrier_on(netdev);
3122 netif_wake_queue(netdev); 3123 netif_tx_wake_all_queues(netdev);
3123 3124
3124 if (!test_bit(__E1000_DOWN, &adapter->state)) 3125 if (!test_bit(__E1000_DOWN, &adapter->state))
3125 mod_timer(&adapter->phy_info_timer, 3126 mod_timer(&adapter->phy_info_timer,
@@ -3131,7 +3132,7 @@ static void e1000_watchdog_task(struct work_struct *work)
3131 adapter->link_duplex = 0; 3132 adapter->link_duplex = 0;
3132 ndev_info(netdev, "Link is Down\n"); 3133 ndev_info(netdev, "Link is Down\n");
3133 netif_carrier_off(netdev); 3134 netif_carrier_off(netdev);
3134 netif_stop_queue(netdev); 3135 netif_tx_stop_all_queues(netdev);
3135 if (!test_bit(__E1000_DOWN, &adapter->state)) 3136 if (!test_bit(__E1000_DOWN, &adapter->state))
3136 mod_timer(&adapter->phy_info_timer, 3137 mod_timer(&adapter->phy_info_timer,
3137 round_jiffies(jiffies + 2 * HZ)); 3138 round_jiffies(jiffies + 2 * HZ));
@@ -4003,7 +4004,11 @@ static int e1000_resume(struct pci_dev *pdev)
4003 pci_set_power_state(pdev, PCI_D0); 4004 pci_set_power_state(pdev, PCI_D0);
4004 pci_restore_state(pdev); 4005 pci_restore_state(pdev);
4005 e1000e_disable_l1aspm(pdev); 4006 e1000e_disable_l1aspm(pdev);
4006 err = pci_enable_device(pdev); 4007
4008 if (adapter->need_ioport)
4009 err = pci_enable_device(pdev);
4010 else
4011 err = pci_enable_device_mem(pdev);
4007 if (err) { 4012 if (err) {
4008 dev_err(&pdev->dev, 4013 dev_err(&pdev->dev,
4009 "Cannot enable PCI device from suspend\n"); 4014 "Cannot enable PCI device from suspend\n");
@@ -4104,9 +4109,14 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
4104 struct net_device *netdev = pci_get_drvdata(pdev); 4109 struct net_device *netdev = pci_get_drvdata(pdev);
4105 struct e1000_adapter *adapter = netdev_priv(netdev); 4110 struct e1000_adapter *adapter = netdev_priv(netdev);
4106 struct e1000_hw *hw = &adapter->hw; 4111 struct e1000_hw *hw = &adapter->hw;
4112 int err;
4107 4113
4108 e1000e_disable_l1aspm(pdev); 4114 e1000e_disable_l1aspm(pdev);
4109 if (pci_enable_device(pdev)) { 4115 if (adapter->need_ioport)
4116 err = pci_enable_device(pdev);
4117 else
4118 err = pci_enable_device_mem(pdev);
4119 if (err) {
4110 dev_err(&pdev->dev, 4120 dev_err(&pdev->dev,
4111 "Cannot re-enable PCI device after reset.\n"); 4121 "Cannot re-enable PCI device after reset.\n");
4112 return PCI_ERS_RESULT_DISCONNECT; 4122 return PCI_ERS_RESULT_DISCONNECT;
@@ -4185,6 +4195,21 @@ static void e1000_print_device_info(struct e1000_adapter *adapter)
4185} 4195}
4186 4196
4187/** 4197/**
4198 * e1000e_is_need_ioport - determine if an adapter needs ioport resources or not
4199 * @pdev: PCI device information struct
4200 *
4201 * Returns true if an adapters needs ioport resources
4202 **/
4203static int e1000e_is_need_ioport(struct pci_dev *pdev)
4204{
4205 switch (pdev->device) {
4206 /* Currently there are no adapters that need ioport resources */
4207 default:
4208 return false;
4209 }
4210}
4211
4212/**
4188 * e1000_probe - Device Initialization Routine 4213 * e1000_probe - Device Initialization Routine
4189 * @pdev: PCI device information struct 4214 * @pdev: PCI device information struct
4190 * @ent: entry in e1000_pci_tbl 4215 * @ent: entry in e1000_pci_tbl
@@ -4209,9 +4234,19 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4209 int i, err, pci_using_dac; 4234 int i, err, pci_using_dac;
4210 u16 eeprom_data = 0; 4235 u16 eeprom_data = 0;
4211 u16 eeprom_apme_mask = E1000_EEPROM_APME; 4236 u16 eeprom_apme_mask = E1000_EEPROM_APME;
4237 int bars, need_ioport;
4212 4238
4213 e1000e_disable_l1aspm(pdev); 4239 e1000e_disable_l1aspm(pdev);
4214 err = pci_enable_device(pdev); 4240
4241 /* do not allocate ioport bars when not needed */
4242 need_ioport = e1000e_is_need_ioport(pdev);
4243 if (need_ioport) {
4244 bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO);
4245 err = pci_enable_device(pdev);
4246 } else {
4247 bars = pci_select_bars(pdev, IORESOURCE_MEM);
4248 err = pci_enable_device_mem(pdev);
4249 }
4215 if (err) 4250 if (err)
4216 return err; 4251 return err;
4217 4252
@@ -4234,7 +4269,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4234 } 4269 }
4235 } 4270 }
4236 4271
4237 err = pci_request_regions(pdev, e1000e_driver_name); 4272 err = pci_request_selected_regions(pdev, bars, e1000e_driver_name);
4238 if (err) 4273 if (err)
4239 goto err_pci_reg; 4274 goto err_pci_reg;
4240 4275
@@ -4259,6 +4294,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4259 adapter->hw.adapter = adapter; 4294 adapter->hw.adapter = adapter;
4260 adapter->hw.mac.type = ei->mac; 4295 adapter->hw.mac.type = ei->mac;
4261 adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1; 4296 adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1;
4297 adapter->bars = bars;
4298 adapter->need_ioport = need_ioport;
4262 4299
4263 mmio_start = pci_resource_start(pdev, 0); 4300 mmio_start = pci_resource_start(pdev, 0);
4264 mmio_len = pci_resource_len(pdev, 0); 4301 mmio_len = pci_resource_len(pdev, 0);
@@ -4344,6 +4381,11 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4344 netdev->features |= NETIF_F_TSO; 4381 netdev->features |= NETIF_F_TSO;
4345 netdev->features |= NETIF_F_TSO6; 4382 netdev->features |= NETIF_F_TSO6;
4346 4383
4384 netdev->vlan_features |= NETIF_F_TSO;
4385 netdev->vlan_features |= NETIF_F_TSO6;
4386 netdev->vlan_features |= NETIF_F_HW_CSUM;
4387 netdev->vlan_features |= NETIF_F_SG;
4388
4347 if (pci_using_dac) 4389 if (pci_using_dac)
4348 netdev->features |= NETIF_F_HIGHDMA; 4390 netdev->features |= NETIF_F_HIGHDMA;
4349 4391
@@ -4464,7 +4506,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4464 4506
4465 /* tell the stack to leave us alone until e1000_open() is called */ 4507 /* tell the stack to leave us alone until e1000_open() is called */
4466 netif_carrier_off(netdev); 4508 netif_carrier_off(netdev);
4467 netif_stop_queue(netdev); 4509 netif_tx_stop_all_queues(netdev);
4468 4510
4469 strcpy(netdev->name, "eth%d"); 4511 strcpy(netdev->name, "eth%d");
4470 err = register_netdev(netdev); 4512 err = register_netdev(netdev);
@@ -4493,7 +4535,7 @@ err_sw_init:
4493err_ioremap: 4535err_ioremap:
4494 free_netdev(netdev); 4536 free_netdev(netdev);
4495err_alloc_etherdev: 4537err_alloc_etherdev:
4496 pci_release_regions(pdev); 4538 pci_release_selected_regions(pdev, bars);
4497err_pci_reg: 4539err_pci_reg:
4498err_dma: 4540err_dma:
4499 pci_disable_device(pdev); 4541 pci_disable_device(pdev);
@@ -4541,7 +4583,7 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
4541 iounmap(adapter->hw.hw_addr); 4583 iounmap(adapter->hw.hw_addr);
4542 if (adapter->hw.flash_address) 4584 if (adapter->hw.flash_address)
4543 iounmap(adapter->hw.flash_address); 4585 iounmap(adapter->hw.flash_address);
4544 pci_release_regions(pdev); 4586 pci_release_selected_regions(pdev, adapter->bars);
4545 4587
4546 free_netdev(netdev); 4588 free_netdev(netdev);
4547 4589