Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-2.6
This commit is contained in:
commit
3b8f5945a2
|
@ -3478,9 +3478,17 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 icr = er32(ICR);
|
||||
|
||||
if (unlikely((!icr) || test_bit(__E1000_DOWN, &adapter->flags)))
|
||||
if (unlikely((!icr)))
|
||||
return IRQ_NONE; /* Not our interrupt */
|
||||
|
||||
/*
|
||||
* we might have caused the interrupt, but the above
|
||||
* read cleared it, and just in case the driver is
|
||||
* down there is nothing to do so return handled
|
||||
*/
|
||||
if (unlikely(test_bit(__E1000_DOWN, &adapter->flags)))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) {
|
||||
hw->get_link_status = 1;
|
||||
/* guard against interrupt when we're going down */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -1310,7 +1310,7 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
|
|||
* apply workaround for hardware errata documented in errata
|
||||
* docs Fixes issue where some error prone or unreliable PCIe
|
||||
* completions are occurring, particularly with ASPM enabled.
|
||||
* Without fix, issue can cause tx timeouts.
|
||||
* Without fix, issue can cause Tx timeouts.
|
||||
*/
|
||||
reg = er32(GCR2);
|
||||
reg |= 1;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Intel PRO/1000 Linux driver
|
||||
# Copyright(c) 1999 - 2008 Intel Corporation.
|
||||
# Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -102,7 +102,7 @@ enum e1e_registers {
|
|||
E1000_RDTR = 0x02820, /* Rx Delay Timer - RW */
|
||||
E1000_RXDCTL_BASE = 0x02828, /* Rx Descriptor Control - RW */
|
||||
#define E1000_RXDCTL(_n) (E1000_RXDCTL_BASE + (_n << 8))
|
||||
E1000_RADV = 0x0282C, /* RX Interrupt Absolute Delay Timer - RW */
|
||||
E1000_RADV = 0x0282C, /* Rx Interrupt Absolute Delay Timer - RW */
|
||||
|
||||
/* Convenience macros
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -533,7 +533,7 @@ s32 e1000e_check_for_fiber_link(struct e1000_hw *hw)
|
|||
mac->autoneg_failed = 1;
|
||||
return 0;
|
||||
}
|
||||
e_dbg("NOT RXing /C/, disable AutoNeg and force link.\n");
|
||||
e_dbg("NOT Rx'ing /C/, disable AutoNeg and force link.\n");
|
||||
|
||||
/* Disable auto-negotiation in the TXCW register */
|
||||
ew32(TXCW, (mac->txcw & ~E1000_TXCW_ANE));
|
||||
|
@ -556,7 +556,7 @@ s32 e1000e_check_for_fiber_link(struct e1000_hw *hw)
|
|||
* and disable forced link in the Device Control register
|
||||
* in an attempt to auto-negotiate with our link partner.
|
||||
*/
|
||||
e_dbg("RXing /C/, enable AutoNeg and stop forcing link.\n");
|
||||
e_dbg("Rx'ing /C/, enable AutoNeg and stop forcing link.\n");
|
||||
ew32(TXCW, mac->txcw);
|
||||
ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
|
||||
|
||||
|
@ -598,7 +598,7 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw)
|
|||
mac->autoneg_failed = 1;
|
||||
return 0;
|
||||
}
|
||||
e_dbg("NOT RXing /C/, disable AutoNeg and force link.\n");
|
||||
e_dbg("NOT Rx'ing /C/, disable AutoNeg and force link.\n");
|
||||
|
||||
/* Disable auto-negotiation in the TXCW register */
|
||||
ew32(TXCW, (mac->txcw & ~E1000_TXCW_ANE));
|
||||
|
@ -621,7 +621,7 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw)
|
|||
* and disable forced link in the Device Control register
|
||||
* in an attempt to auto-negotiate with our link partner.
|
||||
*/
|
||||
e_dbg("RXing /C/, enable AutoNeg and stop forcing link.\n");
|
||||
e_dbg("Rx'ing /C/, enable AutoNeg and stop forcing link.\n");
|
||||
ew32(TXCW, mac->txcw);
|
||||
ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
|
||||
|
||||
|
@ -800,9 +800,9 @@ static s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw)
|
|||
* The possible values of the "fc" parameter are:
|
||||
* 0: Flow control is completely disabled
|
||||
* 1: Rx flow control is enabled (we can receive pause frames,
|
||||
* but not send pause frames).
|
||||
* but not send pause frames).
|
||||
* 2: Tx flow control is enabled (we can send pause frames but we
|
||||
* do not support receiving pause frames).
|
||||
* do not support receiving pause frames).
|
||||
* 3: Both Rx and Tx flow control (symmetric) are enabled.
|
||||
*/
|
||||
switch (hw->fc.current_mode) {
|
||||
|
@ -1031,9 +1031,9 @@ s32 e1000e_force_mac_fc(struct e1000_hw *hw)
|
|||
* The possible values of the "fc" parameter are:
|
||||
* 0: Flow control is completely disabled
|
||||
* 1: Rx flow control is enabled (we can receive pause
|
||||
* frames but not send pause frames).
|
||||
* frames but not send pause frames).
|
||||
* 2: Tx flow control is enabled (we can send pause frames
|
||||
* frames but we do not receive pause frames).
|
||||
* frames but we do not receive pause frames).
|
||||
* 3: Both Rx and Tx flow control (symmetric) is enabled.
|
||||
* other: No other values should be possible at this point.
|
||||
*/
|
||||
|
@ -1189,7 +1189,7 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
|
|||
} else {
|
||||
hw->fc.current_mode = e1000_fc_rx_pause;
|
||||
e_dbg("Flow Control = "
|
||||
"RX PAUSE frames only.\r\n");
|
||||
"Rx PAUSE frames only.\r\n");
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -77,17 +77,17 @@ struct e1000_reg_info {
|
|||
char *name;
|
||||
};
|
||||
|
||||
#define E1000_RDFH 0x02410 /* Rx Data FIFO Head - RW */
|
||||
#define E1000_RDFT 0x02418 /* Rx Data FIFO Tail - RW */
|
||||
#define E1000_RDFHS 0x02420 /* Rx Data FIFO Head Saved - RW */
|
||||
#define E1000_RDFTS 0x02428 /* Rx Data FIFO Tail Saved - RW */
|
||||
#define E1000_RDFPC 0x02430 /* Rx Data FIFO Packet Count - RW */
|
||||
#define E1000_RDFH 0x02410 /* Rx Data FIFO Head - RW */
|
||||
#define E1000_RDFT 0x02418 /* Rx Data FIFO Tail - RW */
|
||||
#define E1000_RDFHS 0x02420 /* Rx Data FIFO Head Saved - RW */
|
||||
#define E1000_RDFTS 0x02428 /* Rx Data FIFO Tail Saved - RW */
|
||||
#define E1000_RDFPC 0x02430 /* Rx Data FIFO Packet Count - RW */
|
||||
|
||||
#define E1000_TDFH 0x03410 /* Tx Data FIFO Head - RW */
|
||||
#define E1000_TDFT 0x03418 /* Tx Data FIFO Tail - RW */
|
||||
#define E1000_TDFHS 0x03420 /* Tx Data FIFO Head Saved - RW */
|
||||
#define E1000_TDFTS 0x03428 /* Tx Data FIFO Tail Saved - RW */
|
||||
#define E1000_TDFPC 0x03430 /* Tx Data FIFO Packet Count - RW */
|
||||
#define E1000_TDFH 0x03410 /* Tx Data FIFO Head - RW */
|
||||
#define E1000_TDFT 0x03418 /* Tx Data FIFO Tail - RW */
|
||||
#define E1000_TDFHS 0x03420 /* Tx Data FIFO Head Saved - RW */
|
||||
#define E1000_TDFTS 0x03428 /* Tx Data FIFO Tail Saved - RW */
|
||||
#define E1000_TDFPC 0x03430 /* Tx Data FIFO Packet Count - RW */
|
||||
|
||||
static const struct e1000_reg_info e1000_reg_info_tbl[] = {
|
||||
|
||||
|
@ -99,7 +99,7 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
|
|||
/* Interrupt Registers */
|
||||
{E1000_ICR, "ICR"},
|
||||
|
||||
/* RX Registers */
|
||||
/* Rx Registers */
|
||||
{E1000_RCTL, "RCTL"},
|
||||
{E1000_RDLEN, "RDLEN"},
|
||||
{E1000_RDH, "RDH"},
|
||||
|
@ -115,7 +115,7 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
|
|||
{E1000_RDFTS, "RDFTS"},
|
||||
{E1000_RDFPC, "RDFPC"},
|
||||
|
||||
/* TX Registers */
|
||||
/* Tx Registers */
|
||||
{E1000_TCTL, "TCTL"},
|
||||
{E1000_TDBAL, "TDBAL"},
|
||||
{E1000_TDBAH, "TDBAH"},
|
||||
|
@ -160,7 +160,7 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo)
|
|||
break;
|
||||
default:
|
||||
printk(KERN_INFO "%-15s %08x\n",
|
||||
reginfo->name, __er32(hw, reginfo->ofs));
|
||||
reginfo->name, __er32(hw, reginfo->ofs));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -171,9 +171,8 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo)
|
|||
printk(KERN_CONT "\n");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* e1000e_dump - Print registers, tx-ring and rx-ring
|
||||
* e1000e_dump - Print registers, Tx-ring and Rx-ring
|
||||
*/
|
||||
static void e1000e_dump(struct e1000_adapter *adapter)
|
||||
{
|
||||
|
@ -182,12 +181,20 @@ static void e1000e_dump(struct e1000_adapter *adapter)
|
|||
struct e1000_reg_info *reginfo;
|
||||
struct e1000_ring *tx_ring = adapter->tx_ring;
|
||||
struct e1000_tx_desc *tx_desc;
|
||||
struct my_u0 { u64 a; u64 b; } *u0;
|
||||
struct my_u0 {
|
||||
u64 a;
|
||||
u64 b;
|
||||
} *u0;
|
||||
struct e1000_buffer *buffer_info;
|
||||
struct e1000_ring *rx_ring = adapter->rx_ring;
|
||||
union e1000_rx_desc_packet_split *rx_desc_ps;
|
||||
struct e1000_rx_desc *rx_desc;
|
||||
struct my_u1 { u64 a; u64 b; u64 c; u64 d; } *u1;
|
||||
struct my_u1 {
|
||||
u64 a;
|
||||
u64 b;
|
||||
u64 c;
|
||||
u64 d;
|
||||
} *u1;
|
||||
u32 staterr;
|
||||
int i = 0;
|
||||
|
||||
|
@ -198,12 +205,10 @@ static void e1000e_dump(struct e1000_adapter *adapter)
|
|||
if (netdev) {
|
||||
dev_info(&adapter->pdev->dev, "Net device Info\n");
|
||||
printk(KERN_INFO "Device Name state "
|
||||
"trans_start last_rx\n");
|
||||
"trans_start last_rx\n");
|
||||
printk(KERN_INFO "%-15s %016lX %016lX %016lX\n",
|
||||
netdev->name,
|
||||
netdev->state,
|
||||
netdev->trans_start,
|
||||
netdev->last_rx);
|
||||
netdev->name, netdev->state, netdev->trans_start,
|
||||
netdev->last_rx);
|
||||
}
|
||||
|
||||
/* Print Registers */
|
||||
|
@ -214,26 +219,26 @@ static void e1000e_dump(struct e1000_adapter *adapter)
|
|||
e1000_regdump(hw, reginfo);
|
||||
}
|
||||
|
||||
/* Print TX Ring Summary */
|
||||
/* Print Tx Ring Summary */
|
||||
if (!netdev || !netif_running(netdev))
|
||||
goto exit;
|
||||
|
||||
dev_info(&adapter->pdev->dev, "TX Rings Summary\n");
|
||||
dev_info(&adapter->pdev->dev, "Tx Ring Summary\n");
|
||||
printk(KERN_INFO "Queue [NTU] [NTC] [bi(ntc)->dma ]"
|
||||
" leng ntw timestamp\n");
|
||||
" leng ntw timestamp\n");
|
||||
buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean];
|
||||
printk(KERN_INFO " %5d %5X %5X %016llX %04X %3X %016llX\n",
|
||||
0, tx_ring->next_to_use, tx_ring->next_to_clean,
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->length,
|
||||
buffer_info->next_to_watch,
|
||||
(unsigned long long)buffer_info->time_stamp);
|
||||
0, tx_ring->next_to_use, tx_ring->next_to_clean,
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->length,
|
||||
buffer_info->next_to_watch,
|
||||
(unsigned long long)buffer_info->time_stamp);
|
||||
|
||||
/* Print TX Rings */
|
||||
/* Print Tx Ring */
|
||||
if (!netif_msg_tx_done(adapter))
|
||||
goto rx_ring_summary;
|
||||
|
||||
dev_info(&adapter->pdev->dev, "TX Rings Dump\n");
|
||||
dev_info(&adapter->pdev->dev, "Tx Ring Dump\n");
|
||||
|
||||
/* Transmit Descriptor Formats - DEXT[29] is 0 (Legacy) or 1 (Extended)
|
||||
*
|
||||
|
@ -263,22 +268,22 @@ static void e1000e_dump(struct e1000_adapter *adapter)
|
|||
* 63 48 47 40 39 36 35 32 31 24 23 20 19 0
|
||||
*/
|
||||
printk(KERN_INFO "Tl[desc] [address 63:0 ] [SpeCssSCmCsLen]"
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Legacy format\n");
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Legacy format\n");
|
||||
printk(KERN_INFO "Tc[desc] [Ce CoCsIpceCoS] [MssHlRSCm0Plen]"
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Ext Context format\n");
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Ext Context format\n");
|
||||
printk(KERN_INFO "Td[desc] [address 63:0 ] [VlaPoRSCm1Dlen]"
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Ext Data format\n");
|
||||
" [bi->dma ] leng ntw timestamp bi->skb "
|
||||
"<-- Ext Data format\n");
|
||||
for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {
|
||||
tx_desc = E1000_TX_DESC(*tx_ring, i);
|
||||
buffer_info = &tx_ring->buffer_info[i];
|
||||
u0 = (struct my_u0 *)tx_desc;
|
||||
printk(KERN_INFO "T%c[0x%03X] %016llX %016llX %016llX "
|
||||
"%04X %3X %016llX %p",
|
||||
(!(le64_to_cpu(u0->b) & (1<<29)) ? 'l' :
|
||||
((le64_to_cpu(u0->b) & (1<<20)) ? 'd' : 'c')), i,
|
||||
"%04X %3X %016llX %p",
|
||||
(!(le64_to_cpu(u0->b) & (1 << 29)) ? 'l' :
|
||||
((le64_to_cpu(u0->b) & (1 << 20)) ? 'd' : 'c')), i,
|
||||
(unsigned long long)le64_to_cpu(u0->a),
|
||||
(unsigned long long)le64_to_cpu(u0->b),
|
||||
(unsigned long long)buffer_info->dma,
|
||||
|
@ -296,22 +301,22 @@ static void e1000e_dump(struct e1000_adapter *adapter)
|
|||
|
||||
if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
|
||||
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS,
|
||||
16, 1, phys_to_virt(buffer_info->dma),
|
||||
buffer_info->length, true);
|
||||
16, 1, phys_to_virt(buffer_info->dma),
|
||||
buffer_info->length, true);
|
||||
}
|
||||
|
||||
/* Print RX Rings Summary */
|
||||
/* Print Rx Ring Summary */
|
||||
rx_ring_summary:
|
||||
dev_info(&adapter->pdev->dev, "RX Rings Summary\n");
|
||||
dev_info(&adapter->pdev->dev, "Rx Ring Summary\n");
|
||||
printk(KERN_INFO "Queue [NTU] [NTC]\n");
|
||||
printk(KERN_INFO " %5d %5X %5X\n", 0,
|
||||
rx_ring->next_to_use, rx_ring->next_to_clean);
|
||||
rx_ring->next_to_use, rx_ring->next_to_clean);
|
||||
|
||||
/* Print RX Rings */
|
||||
/* Print Rx Ring */
|
||||
if (!netif_msg_rx_status(adapter))
|
||||
goto exit;
|
||||
|
||||
dev_info(&adapter->pdev->dev, "RX Rings Dump\n");
|
||||
dev_info(&adapter->pdev->dev, "Rx Ring Dump\n");
|
||||
switch (adapter->rx_ps_pages) {
|
||||
case 1:
|
||||
case 2:
|
||||
|
@ -329,7 +334,7 @@ rx_ring_summary:
|
|||
* +-----------------------------------------------------+
|
||||
*/
|
||||
printk(KERN_INFO "R [desc] [buffer 0 63:0 ] "
|
||||
"[buffer 1 63:0 ] "
|
||||
"[buffer 1 63:0 ] "
|
||||
"[buffer 2 63:0 ] [buffer 3 63:0 ] [bi->dma ] "
|
||||
"[bi->skb] <-- Ext Pkt Split format\n");
|
||||
/* [Extended] Receive Descriptor (Write-Back) Format
|
||||
|
@ -344,7 +349,7 @@ rx_ring_summary:
|
|||
* 63 48 47 32 31 20 19 0
|
||||
*/
|
||||
printk(KERN_INFO "RWB[desc] [ck ipid mrqhsh] "
|
||||
"[vl l0 ee es] "
|
||||
"[vl l0 ee es] "
|
||||
"[ l3 l2 l1 hs] [reserved ] ---------------- "
|
||||
"[bi->skb] <-- Ext Rx Write-Back format\n");
|
||||
for (i = 0; i < rx_ring->count; i++) {
|
||||
|
@ -352,26 +357,26 @@ rx_ring_summary:
|
|||
rx_desc_ps = E1000_RX_DESC_PS(*rx_ring, i);
|
||||
u1 = (struct my_u1 *)rx_desc_ps;
|
||||
staterr =
|
||||
le32_to_cpu(rx_desc_ps->wb.middle.status_error);
|
||||
le32_to_cpu(rx_desc_ps->wb.middle.status_error);
|
||||
if (staterr & E1000_RXD_STAT_DD) {
|
||||
/* Descriptor Done */
|
||||
printk(KERN_INFO "RWB[0x%03X] %016llX "
|
||||
"%016llX %016llX %016llX "
|
||||
"---------------- %p", i,
|
||||
(unsigned long long)le64_to_cpu(u1->a),
|
||||
(unsigned long long)le64_to_cpu(u1->b),
|
||||
(unsigned long long)le64_to_cpu(u1->c),
|
||||
(unsigned long long)le64_to_cpu(u1->d),
|
||||
buffer_info->skb);
|
||||
"%016llX %016llX %016llX "
|
||||
"---------------- %p", i,
|
||||
(unsigned long long)le64_to_cpu(u1->a),
|
||||
(unsigned long long)le64_to_cpu(u1->b),
|
||||
(unsigned long long)le64_to_cpu(u1->c),
|
||||
(unsigned long long)le64_to_cpu(u1->d),
|
||||
buffer_info->skb);
|
||||
} else {
|
||||
printk(KERN_INFO "R [0x%03X] %016llX "
|
||||
"%016llX %016llX %016llX %016llX %p", i,
|
||||
(unsigned long long)le64_to_cpu(u1->a),
|
||||
(unsigned long long)le64_to_cpu(u1->b),
|
||||
(unsigned long long)le64_to_cpu(u1->c),
|
||||
(unsigned long long)le64_to_cpu(u1->d),
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->skb);
|
||||
"%016llX %016llX %016llX %016llX %p", i,
|
||||
(unsigned long long)le64_to_cpu(u1->a),
|
||||
(unsigned long long)le64_to_cpu(u1->b),
|
||||
(unsigned long long)le64_to_cpu(u1->c),
|
||||
(unsigned long long)le64_to_cpu(u1->d),
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->skb);
|
||||
|
||||
if (netif_msg_pktdata(adapter))
|
||||
print_hex_dump(KERN_INFO, "",
|
||||
|
@ -400,18 +405,18 @@ rx_ring_summary:
|
|||
* 63 48 47 40 39 32 31 16 15 0
|
||||
*/
|
||||
printk(KERN_INFO "Rl[desc] [address 63:0 ] "
|
||||
"[vl er S cks ln] [bi->dma ] [bi->skb] "
|
||||
"<-- Legacy format\n");
|
||||
"[vl er S cks ln] [bi->dma ] [bi->skb] "
|
||||
"<-- Legacy format\n");
|
||||
for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {
|
||||
rx_desc = E1000_RX_DESC(*rx_ring, i);
|
||||
buffer_info = &rx_ring->buffer_info[i];
|
||||
u0 = (struct my_u0 *)rx_desc;
|
||||
printk(KERN_INFO "Rl[0x%03X] %016llX %016llX "
|
||||
"%016llX %p", i,
|
||||
(unsigned long long)le64_to_cpu(u0->a),
|
||||
(unsigned long long)le64_to_cpu(u0->b),
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->skb);
|
||||
"%016llX %p", i,
|
||||
(unsigned long long)le64_to_cpu(u0->a),
|
||||
(unsigned long long)le64_to_cpu(u0->b),
|
||||
(unsigned long long)buffer_info->dma,
|
||||
buffer_info->skb);
|
||||
if (i == rx_ring->next_to_use)
|
||||
printk(KERN_CONT " NTU\n");
|
||||
else if (i == rx_ring->next_to_clean)
|
||||
|
@ -421,9 +426,10 @@ rx_ring_summary:
|
|||
|
||||
if (netif_msg_pktdata(adapter))
|
||||
print_hex_dump(KERN_INFO, "",
|
||||
DUMP_PREFIX_ADDRESS,
|
||||
16, 1, phys_to_virt(buffer_info->dma),
|
||||
adapter->rx_buffer_len, true);
|
||||
DUMP_PREFIX_ADDRESS,
|
||||
16, 1,
|
||||
phys_to_virt(buffer_info->dma),
|
||||
adapter->rx_buffer_len, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -450,8 +456,7 @@ static int e1000_desc_unused(struct e1000_ring *ring)
|
|||
* @skb: pointer to sk_buff to be indicated to stack
|
||||
**/
|
||||
static void e1000_receive_skb(struct e1000_adapter *adapter,
|
||||
struct net_device *netdev,
|
||||
struct sk_buff *skb,
|
||||
struct net_device *netdev, struct sk_buff *skb,
|
||||
u8 status, __le16 vlan)
|
||||
{
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
|
@ -464,7 +469,7 @@ static void e1000_receive_skb(struct e1000_adapter *adapter,
|
|||
}
|
||||
|
||||
/**
|
||||
* e1000_rx_checksum - Receive Checksum Offload for 82543
|
||||
* e1000_rx_checksum - Receive Checksum Offload
|
||||
* @adapter: board private structure
|
||||
* @status_err: receive descriptor status and error fields
|
||||
* @csum: receive descriptor csum field
|
||||
|
@ -548,7 +553,7 @@ map_skb:
|
|||
adapter->rx_buffer_len,
|
||||
DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {
|
||||
dev_err(&pdev->dev, "RX DMA map failed\n");
|
||||
dev_err(&pdev->dev, "Rx DMA map failed\n");
|
||||
adapter->rx_dma_failed++;
|
||||
break;
|
||||
}
|
||||
|
@ -601,7 +606,8 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
|
|||
ps_page = &buffer_info->ps_pages[j];
|
||||
if (j >= adapter->rx_ps_pages) {
|
||||
/* all unused desc entries get hw null ptr */
|
||||
rx_desc->read.buffer_addr[j+1] = ~cpu_to_le64(0);
|
||||
rx_desc->read.buffer_addr[j + 1] =
|
||||
~cpu_to_le64(0);
|
||||
continue;
|
||||
}
|
||||
if (!ps_page->page) {
|
||||
|
@ -617,7 +623,7 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
|
|||
if (dma_mapping_error(&pdev->dev,
|
||||
ps_page->dma)) {
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"RX DMA page map failed\n");
|
||||
"Rx DMA page map failed\n");
|
||||
adapter->rx_dma_failed++;
|
||||
goto no_buffers;
|
||||
}
|
||||
|
@ -627,8 +633,8 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
|
|||
* didn't change because each write-back
|
||||
* erases this info.
|
||||
*/
|
||||
rx_desc->read.buffer_addr[j+1] =
|
||||
cpu_to_le64(ps_page->dma);
|
||||
rx_desc->read.buffer_addr[j + 1] =
|
||||
cpu_to_le64(ps_page->dma);
|
||||
}
|
||||
|
||||
skb = netdev_alloc_skb_ip_align(netdev,
|
||||
|
@ -644,7 +650,7 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
|
|||
adapter->rx_ps_bsize0,
|
||||
DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {
|
||||
dev_err(&pdev->dev, "RX DMA map failed\n");
|
||||
dev_err(&pdev->dev, "Rx DMA map failed\n");
|
||||
adapter->rx_dma_failed++;
|
||||
/* cleanup skb */
|
||||
dev_kfree_skb_any(skb);
|
||||
|
@ -662,7 +668,7 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
|
|||
* such as IA-64).
|
||||
*/
|
||||
wmb();
|
||||
writel(i<<1, adapter->hw.hw_addr + rx_ring->tail);
|
||||
writel(i << 1, adapter->hw.hw_addr + rx_ring->tail);
|
||||
}
|
||||
|
||||
i++;
|
||||
|
@ -1106,11 +1112,10 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
|
|||
cleaned = 1;
|
||||
cleaned_count++;
|
||||
dma_unmap_single(&pdev->dev, buffer_info->dma,
|
||||
adapter->rx_ps_bsize0,
|
||||
DMA_FROM_DEVICE);
|
||||
adapter->rx_ps_bsize0, DMA_FROM_DEVICE);
|
||||
buffer_info->dma = 0;
|
||||
|
||||
/* see !EOP comment in other rx routine */
|
||||
/* see !EOP comment in other Rx routine */
|
||||
if (!(staterr & E1000_RXD_STAT_EOP))
|
||||
adapter->flags2 |= FLAG2_IS_DISCARDING;
|
||||
|
||||
|
@ -2610,7 +2615,7 @@ static void e1000_init_manageability_pt(struct e1000_adapter *adapter)
|
|||
}
|
||||
|
||||
/**
|
||||
* e1000_configure_tx - Configure 8254x Transmit Unit after Reset
|
||||
* e1000_configure_tx - Configure Transmit Unit after Reset
|
||||
* @adapter: board private structure
|
||||
*
|
||||
* Configure the Tx unit of the MAC after a reset.
|
||||
|
@ -2663,7 +2668,7 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)
|
|||
* hthresh = 1 ==> prefetch when one or more available
|
||||
* pthresh = 0x1f ==> prefetch if internal cache 31 or less
|
||||
* BEWARE: this seems to work but should be considered first if
|
||||
* there are tx hangs or other tx related bugs
|
||||
* there are Tx hangs or other Tx related bugs
|
||||
*/
|
||||
txdctl |= E1000_TXDCTL_DMA_BURST_ENABLE;
|
||||
ew32(TXDCTL(0), txdctl);
|
||||
|
@ -2877,7 +2882,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|||
if (adapter->rx_ps_pages) {
|
||||
/* this is a 32 byte descriptor */
|
||||
rdlen = rx_ring->count *
|
||||
sizeof(union e1000_rx_desc_packet_split);
|
||||
sizeof(union e1000_rx_desc_packet_split);
|
||||
adapter->clean_rx = e1000_clean_rx_irq_ps;
|
||||
adapter->alloc_rx_buf = e1000_alloc_rx_buffers_ps;
|
||||
} else if (adapter->netdev->mtu > ETH_FRAME_LEN + ETH_FCS_LEN) {
|
||||
|
@ -2900,7 +2905,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|||
/*
|
||||
* set the writeback threshold (only takes effect if the RDTR
|
||||
* is set). set GRAN=1 and write back up to 0x4 worth, and
|
||||
* enable prefetching of 0x20 rx descriptors
|
||||
* enable prefetching of 0x20 Rx descriptors
|
||||
* granularity = 01
|
||||
* wthresh = 04,
|
||||
* hthresh = 04,
|
||||
|
@ -2981,12 +2986,10 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|||
* excessive C-state transition latencies result in
|
||||
* dropped transactions.
|
||||
*/
|
||||
pm_qos_update_request(
|
||||
&adapter->netdev->pm_qos_req, 55);
|
||||
pm_qos_update_request(&adapter->netdev->pm_qos_req, 55);
|
||||
} else {
|
||||
pm_qos_update_request(
|
||||
&adapter->netdev->pm_qos_req,
|
||||
PM_QOS_DEFAULT_VALUE);
|
||||
pm_qos_update_request(&adapter->netdev->pm_qos_req,
|
||||
PM_QOS_DEFAULT_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3152,7 +3155,7 @@ void e1000e_reset(struct e1000_adapter *adapter)
|
|||
/* lower 16 bits has Rx packet buffer allocation size in KB */
|
||||
pba &= 0xffff;
|
||||
/*
|
||||
* the Tx fifo also stores 16 bytes of information about the tx
|
||||
* the Tx fifo also stores 16 bytes of information about the Tx
|
||||
* but don't include ethernet FCS because hardware appends it
|
||||
*/
|
||||
min_tx_space = (adapter->max_frame_size +
|
||||
|
@ -3175,7 +3178,7 @@ void e1000e_reset(struct e1000_adapter *adapter)
|
|||
pba -= min_tx_space - tx_space;
|
||||
|
||||
/*
|
||||
* if short on Rx space, Rx wins and must trump tx
|
||||
* if short on Rx space, Rx wins and must trump Tx
|
||||
* adjustment or use Early Receive if available
|
||||
*/
|
||||
if ((pba < min_rx_space) &&
|
||||
|
@ -4039,11 +4042,11 @@ static void e1000_print_link_info(struct e1000_adapter *adapter)
|
|||
adapter->netdev->name,
|
||||
adapter->link_speed,
|
||||
(adapter->link_duplex == FULL_DUPLEX) ?
|
||||
"Full Duplex" : "Half Duplex",
|
||||
"Full Duplex" : "Half Duplex",
|
||||
((ctrl & E1000_CTRL_TFCE) && (ctrl & E1000_CTRL_RFCE)) ?
|
||||
"RX/TX" :
|
||||
((ctrl & E1000_CTRL_RFCE) ? "RX" :
|
||||
((ctrl & E1000_CTRL_TFCE) ? "TX" : "None" )));
|
||||
"Rx/Tx" :
|
||||
((ctrl & E1000_CTRL_RFCE) ? "Rx" :
|
||||
((ctrl & E1000_CTRL_TFCE) ? "Tx" : "None")));
|
||||
}
|
||||
|
||||
static bool e1000e_has_link(struct e1000_adapter *adapter)
|
||||
|
@ -4338,7 +4341,7 @@ link_up:
|
|||
/* Force detection of hung controller every watchdog period */
|
||||
adapter->detect_tx_hung = 1;
|
||||
|
||||
/* flush partial descriptors to memory before detecting tx hang */
|
||||
/* flush partial descriptors to memory before detecting Tx hang */
|
||||
if (adapter->flags2 & FLAG2_DMA_BURST) {
|
||||
ew32(TIDV, adapter->tx_int_delay | E1000_TIDV_FPD);
|
||||
ew32(RDTR, adapter->rx_int_delay | E1000_RDTR_FPD);
|
||||
|
@ -4529,7 +4532,7 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
|
|||
buffer_info->next_to_watch = i;
|
||||
buffer_info->dma = dma_map_single(&pdev->dev,
|
||||
skb->data + offset,
|
||||
size, DMA_TO_DEVICE);
|
||||
size, DMA_TO_DEVICE);
|
||||
buffer_info->mapped_as_page = false;
|
||||
if (dma_mapping_error(&pdev->dev, buffer_info->dma))
|
||||
goto dma_error;
|
||||
|
@ -4576,7 +4579,7 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
|
|||
}
|
||||
}
|
||||
|
||||
segs = skb_shinfo(skb)->gso_segs ?: 1;
|
||||
segs = skb_shinfo(skb)->gso_segs ? : 1;
|
||||
/* multiply data chunks by size of headers */
|
||||
bytecount = ((segs - 1) * skb_headlen(skb)) + skb->len;
|
||||
|
||||
|
@ -4588,13 +4591,13 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
|
|||
return count;
|
||||
|
||||
dma_error:
|
||||
dev_err(&pdev->dev, "TX DMA map failed\n");
|
||||
dev_err(&pdev->dev, "Tx DMA map failed\n");
|
||||
buffer_info->dma = 0;
|
||||
if (count)
|
||||
count--;
|
||||
|
||||
while (count--) {
|
||||
if (i==0)
|
||||
if (i == 0)
|
||||
i += tx_ring->count;
|
||||
i--;
|
||||
buffer_info = &tx_ring->buffer_info[i];
|
||||
|
@ -6193,7 +6196,7 @@ static int __init e1000_init_module(void)
|
|||
int ret;
|
||||
pr_info("Intel(R) PRO/1000 Network Driver - %s\n",
|
||||
e1000e_driver_version);
|
||||
pr_info("Copyright (c) 1999 - 2010 Intel Corporation.\n");
|
||||
pr_info("Copyright(c) 1999 - 2011 Intel Corporation.\n");
|
||||
ret = pci_register_driver(&e1000_driver);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -62,10 +62,9 @@ MODULE_PARM_DESC(copybreak,
|
|||
module_param_array_named(X, X, int, &num_##X, 0); \
|
||||
MODULE_PARM_DESC(X, desc);
|
||||
|
||||
|
||||
/*
|
||||
* Transmit Interrupt Delay in units of 1.024 microseconds
|
||||
* Tx interrupt delay needs to typically be set to something non zero
|
||||
* Tx interrupt delay needs to typically be set to something non-zero
|
||||
*
|
||||
* Valid Range: 0-65535
|
||||
*/
|
||||
|
@ -112,6 +111,7 @@ E1000_PARAM(InterruptThrottleRate, "Interrupt Throttling Rate");
|
|||
#define DEFAULT_ITR 3
|
||||
#define MAX_ITR 100000
|
||||
#define MIN_ITR 100
|
||||
|
||||
/* IntMode (Interrupt Mode)
|
||||
*
|
||||
* Valid Range: 0 - 2
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
Intel PRO/1000 Linux driver
|
||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||
Copyright(c) 1999 - 2011 Intel Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms and conditions of the GNU General Public License,
|
||||
|
@ -640,7 +640,7 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
|
|||
s32 ret_val;
|
||||
u16 phy_data;
|
||||
|
||||
/* Enable CRS on TX. This must be set for half-duplex operation. */
|
||||
/* Enable CRS on Tx. This must be set for half-duplex operation. */
|
||||
ret_val = e1e_rphy(hw, I82577_CFG_REG, &phy_data);
|
||||
if (ret_val)
|
||||
goto out;
|
||||
|
|
Loading…
Reference in New Issue