aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r--drivers/net/e1000e/netdev.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index abd492b7336d..122539a0e1fe 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -345,7 +345,6 @@ no_buffers:
345/** 345/**
346 * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers 346 * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers
347 * @adapter: address of board private structure 347 * @adapter: address of board private structure
348 * @rx_ring: pointer to receive ring structure
349 * @cleaned_count: number of buffers to allocate this pass 348 * @cleaned_count: number of buffers to allocate this pass
350 **/ 349 **/
351 350
@@ -499,6 +498,10 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
499 goto next_desc; 498 goto next_desc;
500 } 499 }
501 500
501 /* adjust length to remove Ethernet CRC */
502 if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
503 length -= 4;
504
502 total_rx_bytes += length; 505 total_rx_bytes += length;
503 total_rx_packets++; 506 total_rx_packets++;
504 507
@@ -804,6 +807,10 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
804 pci_dma_sync_single_for_device(pdev, ps_page->dma, 807 pci_dma_sync_single_for_device(pdev, ps_page->dma,
805 PAGE_SIZE, PCI_DMA_FROMDEVICE); 808 PAGE_SIZE, PCI_DMA_FROMDEVICE);
806 809
810 /* remove the CRC */
811 if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
812 l1 -= 4;
813
807 skb_put(skb, l1); 814 skb_put(skb, l1);
808 goto copydone; 815 goto copydone;
809 } /* if */ 816 } /* if */
@@ -825,6 +832,12 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
825 skb->truesize += length; 832 skb->truesize += length;
826 } 833 }
827 834
835 /* strip the ethernet crc, problem is we're using pages now so
836 * this whole operation can get a little cpu intensive
837 */
838 if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
839 pskb_trim(skb, skb->len - 4);
840
828copydone: 841copydone:
829 total_rx_bytes += skb->len; 842 total_rx_bytes += skb->len;
830 total_rx_packets++; 843 total_rx_packets++;
@@ -2301,8 +2314,12 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
2301 else 2314 else
2302 rctl |= E1000_RCTL_LPE; 2315 rctl |= E1000_RCTL_LPE;
2303 2316
2304 /* Enable hardware CRC frame stripping */ 2317 /* Some systems expect that the CRC is included in SMBUS traffic. The
2305 rctl |= E1000_RCTL_SECRC; 2318 * hardware strips the CRC before sending to both SMBUS (BMC) and to
2319 * host memory when this is enabled
2320 */
2321 if (adapter->flags2 & FLAG2_CRC_STRIPPING)
2322 rctl |= E1000_RCTL_SECRC;
2306 2323
2307 /* Setup buffer sizes */ 2324 /* Setup buffer sizes */
2308 rctl &= ~E1000_RCTL_SZ_4096; 2325 rctl &= ~E1000_RCTL_SZ_4096;
@@ -4766,6 +4783,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4766 adapter->ei = ei; 4783 adapter->ei = ei;
4767 adapter->pba = ei->pba; 4784 adapter->pba = ei->pba;
4768 adapter->flags = ei->flags; 4785 adapter->flags = ei->flags;
4786 adapter->flags2 = ei->flags2;
4769 adapter->hw.adapter = adapter; 4787 adapter->hw.adapter = adapter;
4770 adapter->hw.mac.type = ei->mac; 4788 adapter->hw.mac.type = ei->mac;
4771 adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1; 4789 adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1;
@@ -4970,6 +4988,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4970 4988
4971 /* initialize the wol settings based on the eeprom settings */ 4989 /* initialize the wol settings based on the eeprom settings */
4972 adapter->wol = adapter->eeprom_wol; 4990 adapter->wol = adapter->eeprom_wol;
4991 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
4973 4992
4974 /* reset the hardware with the new settings */ 4993 /* reset the hardware with the new settings */
4975 e1000e_reset(adapter); 4994 e1000e_reset(adapter);
@@ -5008,6 +5027,7 @@ err_hw_init:
5008err_sw_init: 5027err_sw_init:
5009 if (adapter->hw.flash_address) 5028 if (adapter->hw.flash_address)
5010 iounmap(adapter->hw.flash_address); 5029 iounmap(adapter->hw.flash_address);
5030 e1000e_reset_interrupt_capability(adapter);
5011err_flashmap: 5031err_flashmap:
5012 iounmap(adapter->hw.hw_addr); 5032 iounmap(adapter->hw.hw_addr);
5013err_ioremap: 5033err_ioremap: