Commit 23193668 authored by David S. Miller's avatar David S. Miller

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next

Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates

This series contains updates to igb only.

Carolyn provides a number of cleanups to fix checkpatch warnings/errors
and two minor issues found by coccicheck.

v2: update patch indentation for patch 07 of the series based on feedback
    from David Miller.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 851bdd11 a1f63473
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
/* e1000_82575 /* e1000_82575
* e1000_82576 * e1000_82576
...@@ -525,7 +522,7 @@ static s32 igb_set_sfp_media_type_82575(struct e1000_hw *hw) ...@@ -525,7 +522,7 @@ static s32 igb_set_sfp_media_type_82575(struct e1000_hw *hw)
static s32 igb_get_invariants_82575(struct e1000_hw *hw) static s32 igb_get_invariants_82575(struct e1000_hw *hw)
{ {
struct e1000_mac_info *mac = &hw->mac; struct e1000_mac_info *mac = &hw->mac;
struct e1000_dev_spec_82575 * dev_spec = &hw->dev_spec._82575; struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
s32 ret_val; s32 ret_val;
u32 ctrl_ext = 0; u32 ctrl_ext = 0;
u32 link_mode = 0; u32 link_mode = 0;
...@@ -1179,8 +1176,8 @@ static void igb_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask) ...@@ -1179,8 +1176,8 @@ static void igb_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
{ {
u32 swfw_sync; u32 swfw_sync;
while (igb_get_hw_semaphore(hw) != 0); while (igb_get_hw_semaphore(hw) != 0)
/* Empty */ ; /* Empty */
swfw_sync = rd32(E1000_SW_FW_SYNC); swfw_sync = rd32(E1000_SW_FW_SYNC);
swfw_sync &= ~mask; swfw_sync &= ~mask;
...@@ -1215,7 +1212,7 @@ static s32 igb_get_cfg_done_82575(struct e1000_hw *hw) ...@@ -1215,7 +1212,7 @@ static s32 igb_get_cfg_done_82575(struct e1000_hw *hw)
while (timeout) { while (timeout) {
if (rd32(E1000_EEMNGCTL) & mask) if (rd32(E1000_EEMNGCTL) & mask)
break; break;
msleep(1); usleep_range(1000, 2000);
timeout--; timeout--;
} }
if (!timeout) if (!timeout)
...@@ -1315,7 +1312,7 @@ void igb_power_up_serdes_link_82575(struct e1000_hw *hw) ...@@ -1315,7 +1312,7 @@ void igb_power_up_serdes_link_82575(struct e1000_hw *hw)
/* flush the write to verify completion */ /* flush the write to verify completion */
wrfl(); wrfl();
msleep(1); usleep_range(1000, 2000);
} }
/** /**
...@@ -1410,7 +1407,7 @@ void igb_shutdown_serdes_link_82575(struct e1000_hw *hw) ...@@ -1410,7 +1407,7 @@ void igb_shutdown_serdes_link_82575(struct e1000_hw *hw)
/* flush the write to verify completion */ /* flush the write to verify completion */
wrfl(); wrfl();
msleep(1); usleep_range(1000, 2000);
} }
} }
...@@ -1445,7 +1442,7 @@ static s32 igb_reset_hw_82575(struct e1000_hw *hw) ...@@ -1445,7 +1442,7 @@ static s32 igb_reset_hw_82575(struct e1000_hw *hw)
wr32(E1000_TCTL, E1000_TCTL_PSP); wr32(E1000_TCTL, E1000_TCTL_PSP);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 20000);
ctrl = rd32(E1000_CTRL); ctrl = rd32(E1000_CTRL);
...@@ -1923,7 +1920,7 @@ void igb_rx_fifo_flush_82575(struct e1000_hw *hw) ...@@ -1923,7 +1920,7 @@ void igb_rx_fifo_flush_82575(struct e1000_hw *hw)
} }
/* Poll all queues to verify they have shut down */ /* Poll all queues to verify they have shut down */
for (ms_wait = 0; ms_wait < 10; ms_wait++) { for (ms_wait = 0; ms_wait < 10; ms_wait++) {
msleep(1); usleep_range(1000, 2000);
rx_enabled = 0; rx_enabled = 0;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
rx_enabled |= rd32(E1000_RXDCTL(i)); rx_enabled |= rd32(E1000_RXDCTL(i));
...@@ -1951,7 +1948,7 @@ void igb_rx_fifo_flush_82575(struct e1000_hw *hw) ...@@ -1951,7 +1948,7 @@ void igb_rx_fifo_flush_82575(struct e1000_hw *hw)
wr32(E1000_RCTL, temp_rctl); wr32(E1000_RCTL, temp_rctl);
wr32(E1000_RCTL, temp_rctl | E1000_RCTL_EN); wr32(E1000_RCTL, temp_rctl | E1000_RCTL_EN);
wrfl(); wrfl();
msleep(2); usleep_range(2000, 3000);
/* Enable RX queues that were previously enabled and restore our /* Enable RX queues that were previously enabled and restore our
* previous state * previous state
...@@ -2239,7 +2236,7 @@ static s32 igb_reset_hw_82580(struct e1000_hw *hw) ...@@ -2239,7 +2236,7 @@ static s32 igb_reset_hw_82580(struct e1000_hw *hw)
wr32(E1000_TCTL, E1000_TCTL_PSP); wr32(E1000_TCTL, E1000_TCTL_PSP);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
/* Determine whether or not a global dev reset is requested */ /* Determine whether or not a global dev reset is requested */
if (global_device_reset && if (global_device_reset &&
...@@ -2257,7 +2254,7 @@ static s32 igb_reset_hw_82580(struct e1000_hw *hw) ...@@ -2257,7 +2254,7 @@ static s32 igb_reset_hw_82580(struct e1000_hw *hw)
/* Add delay to insure DEV_RST has time to complete */ /* Add delay to insure DEV_RST has time to complete */
if (global_device_reset) if (global_device_reset)
msleep(5); usleep_range(5000, 6000);
ret_val = igb_get_auto_rd_done(hw); ret_val = igb_get_auto_rd_done(hw);
if (ret_val) { if (ret_val) {
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_82575_H_ #ifndef _E1000_82575_H_
#define _E1000_82575_H_ #define _E1000_82575_H_
...@@ -92,8 +89,7 @@ union e1000_adv_rx_desc { ...@@ -92,8 +89,7 @@ union e1000_adv_rx_desc {
struct { struct {
struct { struct {
__le16 pkt_info; /* RSS type, Packet type */ __le16 pkt_info; /* RSS type, Packet type */
__le16 hdr_info; /* Split Header, __le16 hdr_info; /* Split Head, buf len */
* header buffer length */
} lo_dword; } lo_dword;
union { union {
__le32 rss; /* RSS Hash */ __le32 rss; /* RSS Hash */
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_DEFINES_H_ #ifndef _E1000_DEFINES_H_
#define _E1000_DEFINES_H_ #define _E1000_DEFINES_H_
...@@ -307,33 +304,25 @@ ...@@ -307,33 +304,25 @@
#define E1000_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */ #define E1000_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */
/* DMA Coalescing register fields */ /* DMA Coalescing register fields */
#define E1000_DMACR_DMACWT_MASK 0x00003FFF /* DMA Coalescing #define E1000_DMACR_DMACWT_MASK 0x00003FFF /* DMA Coal Watchdog Timer */
* Watchdog Timer */ #define E1000_DMACR_DMACTHR_MASK 0x00FF0000 /* DMA Coal Rx Threshold */
#define E1000_DMACR_DMACTHR_MASK 0x00FF0000 /* DMA Coalescing Receive
* Threshold */
#define E1000_DMACR_DMACTHR_SHIFT 16 #define E1000_DMACR_DMACTHR_SHIFT 16
#define E1000_DMACR_DMAC_LX_MASK 0x30000000 /* Lx when no PCIe #define E1000_DMACR_DMAC_LX_MASK 0x30000000 /* Lx when no PCIe trans */
* transactions */
#define E1000_DMACR_DMAC_LX_SHIFT 28 #define E1000_DMACR_DMAC_LX_SHIFT 28
#define E1000_DMACR_DMAC_EN 0x80000000 /* Enable DMA Coalescing */ #define E1000_DMACR_DMAC_EN 0x80000000 /* Enable DMA Coalescing */
/* DMA Coalescing BMC-to-OS Watchdog Enable */ /* DMA Coalescing BMC-to-OS Watchdog Enable */
#define E1000_DMACR_DC_BMC2OSW_EN 0x00008000 #define E1000_DMACR_DC_BMC2OSW_EN 0x00008000
#define E1000_DMCTXTH_DMCTTHR_MASK 0x00000FFF /* DMA Coalescing Transmit #define E1000_DMCTXTH_DMCTTHR_MASK 0x00000FFF /* DMA Coal Tx Threshold */
* Threshold */
#define E1000_DMCTLX_TTLX_MASK 0x00000FFF /* Time to LX request */ #define E1000_DMCTLX_TTLX_MASK 0x00000FFF /* Time to LX request */
#define E1000_DMCRTRH_UTRESH_MASK 0x0007FFFF /* Receive Traffic Rate #define E1000_DMCRTRH_UTRESH_MASK 0x0007FFFF /* Rx Traffic Rate Thresh */
* Threshold */ #define E1000_DMCRTRH_LRPRCW 0x80000000 /* Rx pkt rate curr window */
#define E1000_DMCRTRH_LRPRCW 0x80000000 /* Rcv packet rate in
* current window */
#define E1000_DMCCNT_CCOUNT_MASK 0x01FFFFFF /* DMA Coal Rcv Traffic #define E1000_DMCCNT_CCOUNT_MASK 0x01FFFFFF /* DMA Coal Rx Current Cnt */
* Current Cnt */
#define E1000_FCRTC_RTH_COAL_MASK 0x0003FFF0 /* Flow ctrl Rcv Threshold #define E1000_FCRTC_RTH_COAL_MASK 0x0003FFF0 /* FC Rx Thresh High val */
* High val */
#define E1000_FCRTC_RTH_COAL_SHIFT 4 #define E1000_FCRTC_RTH_COAL_SHIFT 4
#define E1000_PCIEMISC_LX_DECISION 0x00000080 /* Lx power decision */ #define E1000_PCIEMISC_LX_DECISION 0x00000080 /* Lx power decision */
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it *
under the terms and conditions of the GNU General Public License, * This program is distributed in the hope it will be useful, but WITHOUT
version 2, as published by the Free Software Foundation. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
This program is distributed in the hope it will be useful, but WITHOUT * more details.
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * You should have received a copy of the GNU General Public License along with
more details. * this program; if not, see <http://www.gnu.org/licenses/>.
*
You should have received a copy of the GNU General Public License along with * The full GNU General Public License is included in this distribution in
this program; if not, see <http://www.gnu.org/licenses/>. * the file called "COPYING".
*
The full GNU General Public License is included in this distribution in * Contact Information:
the file called "COPYING". * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
Contact Information: */
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_HW_H_ #ifndef _E1000_HW_H_
#define _E1000_HW_H_ #define _E1000_HW_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
******************************************************************************/
/* e1000_i210 /* e1000_i210
* e1000_i211 * e1000_i211
...@@ -435,6 +432,7 @@ static s32 igb_read_invm_i210(struct e1000_hw *hw, u16 offset, ...@@ -435,6 +432,7 @@ static s32 igb_read_invm_i210(struct e1000_hw *hw, u16 offset,
*data = ID_LED_RESERVED_FFFF; *data = ID_LED_RESERVED_FFFF;
ret_val = E1000_SUCCESS; ret_val = E1000_SUCCESS;
} }
break;
case NVM_SUB_DEV_ID: case NVM_SUB_DEV_ID:
*data = hw->subsystem_device_id; *data = hw->subsystem_device_id;
break; break;
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_I210_H_ #ifndef _E1000_I210_H_
#define _E1000_I210_H_ #define _E1000_I210_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/delay.h> #include <linux/delay.h>
...@@ -1264,7 +1261,7 @@ s32 igb_get_auto_rd_done(struct e1000_hw *hw) ...@@ -1264,7 +1261,7 @@ s32 igb_get_auto_rd_done(struct e1000_hw *hw)
while (i < AUTO_READ_DONE_TIMEOUT) { while (i < AUTO_READ_DONE_TIMEOUT) {
if (rd32(E1000_EECD) & E1000_EECD_AUTO_RD) if (rd32(E1000_EECD) & E1000_EECD_AUTO_RD)
break; break;
msleep(1); usleep_range(1000, 2000);
i++; i++;
} }
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_MAC_H_ #ifndef _E1000_MAC_H_
#define _E1000_MAC_H_ #define _E1000_MAC_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#include "e1000_mbx.h" #include "e1000_mbx.h"
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_MBX_H_ #ifndef _E1000_MBX_H_
#define _E1000_MBX_H_ #define _E1000_MBX_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver * This program is free software; you can redistribute it and/or modify it
Copyright(c) 2007-2014 Intel Corporation. * under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
This program is free software; you can redistribute it and/or modify it *
under the terms and conditions of the GNU General Public License, * This program is distributed in the hope it will be useful, but WITHOUT
version 2, as published by the Free Software Foundation. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
This program is distributed in the hope it will be useful, but WITHOUT * more details.
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * You should have received a copy of the GNU General Public License along with
more details. * this program; if not, see <http://www.gnu.org/licenses/>.
*
You should have received a copy of the GNU General Public License along with * The full GNU General Public License is included in this distribution in
this program; if not, see <http://www.gnu.org/licenses/>. * the file called "COPYING".
*
The full GNU General Public License is included in this distribution in * Contact Information:
the file called "COPYING". * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
Contact Information: */
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/delay.h> #include <linux/delay.h>
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_NVM_H_ #ifndef _E1000_NVM_H_
#define _E1000_NVM_H_ #define _E1000_NVM_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#include <linux/if_ether.h> #include <linux/if_ether.h>
#include <linux/delay.h> #include <linux/delay.h>
...@@ -2243,7 +2240,7 @@ void igb_power_down_phy_copper(struct e1000_hw *hw) ...@@ -2243,7 +2240,7 @@ void igb_power_down_phy_copper(struct e1000_hw *hw)
hw->phy.ops.write_reg(hw, GS40G_COPPER_SPEC, power_reg); hw->phy.ops.write_reg(hw, GS40G_COPPER_SPEC, power_reg);
} }
hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
msleep(1); usleep_range(1000, 2000);
} }
/** /**
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_PHY_H_ #ifndef _E1000_PHY_H_
#define _E1000_PHY_H_ #define _E1000_PHY_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#ifndef _E1000_REGS_H_ #ifndef _E1000_REGS_H_
#define _E1000_REGS_H_ #define _E1000_REGS_H_
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
/* Linux PRO/1000 Ethernet Driver main header file */ /* Linux PRO/1000 Ethernet Driver main header file */
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
/* ethtool support for igb */ /* ethtool support for igb */
...@@ -286,7 +283,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) ...@@ -286,7 +283,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
} }
while (test_and_set_bit(__IGB_RESETTING, &adapter->state)) while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
msleep(1); usleep_range(1000, 2000);
if (ecmd->autoneg == AUTONEG_ENABLE) { if (ecmd->autoneg == AUTONEG_ENABLE) {
hw->mac.autoneg = 1; hw->mac.autoneg = 1;
...@@ -399,7 +396,7 @@ static int igb_set_pauseparam(struct net_device *netdev, ...@@ -399,7 +396,7 @@ static int igb_set_pauseparam(struct net_device *netdev,
adapter->fc_autoneg = pause->autoneg; adapter->fc_autoneg = pause->autoneg;
while (test_and_set_bit(__IGB_RESETTING, &adapter->state)) while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
msleep(1); usleep_range(1000, 2000);
if (adapter->fc_autoneg == AUTONEG_ENABLE) { if (adapter->fc_autoneg == AUTONEG_ENABLE) {
hw->fc.requested_mode = e1000_fc_default; hw->fc.requested_mode = e1000_fc_default;
...@@ -886,7 +883,7 @@ static int igb_set_ringparam(struct net_device *netdev, ...@@ -886,7 +883,7 @@ static int igb_set_ringparam(struct net_device *netdev,
} }
while (test_and_set_bit(__IGB_RESETTING, &adapter->state)) while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
msleep(1); usleep_range(1000, 2000);
if (!netif_running(adapter->netdev)) { if (!netif_running(adapter->netdev)) {
for (i = 0; i < adapter->num_tx_queues; i++) for (i = 0; i < adapter->num_tx_queues; i++)
...@@ -1132,8 +1129,10 @@ static struct igb_reg_test reg_test_82576[] = { ...@@ -1132,8 +1129,10 @@ static struct igb_reg_test reg_test_82576[] = {
{ E1000_RDBAH(4), 0x40, 12, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, { E1000_RDBAH(4), 0x40, 12, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF },
{ E1000_RDLEN(4), 0x40, 12, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF }, { E1000_RDLEN(4), 0x40, 12, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF },
/* Enable all RX queues before testing. */ /* Enable all RX queues before testing. */
{ E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0, E1000_RXDCTL_QUEUE_ENABLE }, { E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0,
{ E1000_RXDCTL(4), 0x40, 12, WRITE_NO_TEST, 0, E1000_RXDCTL_QUEUE_ENABLE }, E1000_RXDCTL_QUEUE_ENABLE },
{ E1000_RXDCTL(4), 0x40, 12, WRITE_NO_TEST, 0,
E1000_RXDCTL_QUEUE_ENABLE },
/* RDH is read-only for 82576, only test RDT. */ /* RDH is read-only for 82576, only test RDT. */
{ E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, { E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF },
{ E1000_RDT(4), 0x40, 12, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, { E1000_RDT(4), 0x40, 12, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF },
...@@ -1170,7 +1169,8 @@ static struct igb_reg_test reg_test_82575[] = { ...@@ -1170,7 +1169,8 @@ static struct igb_reg_test reg_test_82575[] = {
{ E1000_RDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, { E1000_RDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF },
{ E1000_RDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF }, { E1000_RDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF },
/* Enable all four RX queues before testing. */ /* Enable all four RX queues before testing. */
{ E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0, E1000_RXDCTL_QUEUE_ENABLE }, { E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0,
E1000_RXDCTL_QUEUE_ENABLE },
/* RDH is read-only for 82575, only test RDT. */ /* RDH is read-only for 82575, only test RDT. */
{ E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, { E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF },
{ E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0, 0 }, { E1000_RXDCTL(0), 0x100, 4, WRITE_NO_TEST, 0, 0 },
...@@ -1206,11 +1206,11 @@ static bool reg_pattern_test(struct igb_adapter *adapter, u64 *data, ...@@ -1206,11 +1206,11 @@ static bool reg_pattern_test(struct igb_adapter *adapter, u64 *data,
"pattern test reg %04X failed: got 0x%08X expected 0x%08X\n", "pattern test reg %04X failed: got 0x%08X expected 0x%08X\n",
reg, val, (_test[pat] & write & mask)); reg, val, (_test[pat] & write & mask));
*data = reg; *data = reg;
return 1; return true;
} }
} }
return 0; return false;
} }
static bool reg_set_and_check(struct igb_adapter *adapter, u64 *data, static bool reg_set_and_check(struct igb_adapter *adapter, u64 *data,
...@@ -1223,13 +1223,13 @@ static bool reg_set_and_check(struct igb_adapter *adapter, u64 *data, ...@@ -1223,13 +1223,13 @@ static bool reg_set_and_check(struct igb_adapter *adapter, u64 *data,
val = rd32(reg); val = rd32(reg);
if ((write & mask) != (val & mask)) { if ((write & mask) != (val & mask)) {
dev_err(&adapter->pdev->dev, dev_err(&adapter->pdev->dev,
"set/check reg %04X test failed: got 0x%08X expected 0x%08X\n", reg, "set/check reg %04X test failed: got 0x%08X expected 0x%08X\n",
(val & mask), (write & mask)); reg, (val & mask), (write & mask));
*data = reg; *data = reg;
return 1; return true;
} }
return 0; return false;
} }
#define REG_PATTERN_TEST(reg, mask, write) \ #define REG_PATTERN_TEST(reg, mask, write) \
...@@ -1413,7 +1413,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) ...@@ -1413,7 +1413,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data)
/* Disable all the interrupts */ /* Disable all the interrupts */
wr32(E1000_IMC, ~0); wr32(E1000_IMC, ~0);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
/* Define all writable bits for ICS */ /* Define all writable bits for ICS */
switch (hw->mac.type) { switch (hw->mac.type) {
...@@ -1460,7 +1460,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) ...@@ -1460,7 +1460,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data)
wr32(E1000_IMC, mask); wr32(E1000_IMC, mask);
wr32(E1000_ICS, mask); wr32(E1000_ICS, mask);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
if (adapter->test_icr & mask) { if (adapter->test_icr & mask) {
*data = 3; *data = 3;
...@@ -1482,7 +1482,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) ...@@ -1482,7 +1482,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data)
wr32(E1000_IMS, mask); wr32(E1000_IMS, mask);
wr32(E1000_ICS, mask); wr32(E1000_ICS, mask);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
if (!(adapter->test_icr & mask)) { if (!(adapter->test_icr & mask)) {
*data = 4; *data = 4;
...@@ -1504,7 +1504,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) ...@@ -1504,7 +1504,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data)
wr32(E1000_IMC, ~mask); wr32(E1000_IMC, ~mask);
wr32(E1000_ICS, ~mask); wr32(E1000_ICS, ~mask);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
if (adapter->test_icr & mask) { if (adapter->test_icr & mask) {
*data = 5; *data = 5;
...@@ -1516,7 +1516,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) ...@@ -1516,7 +1516,7 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data)
/* Disable all the interrupts */ /* Disable all the interrupts */
wr32(E1000_IMC, ~0); wr32(E1000_IMC, ~0);
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
/* Unhook test interrupt handler */ /* Unhook test interrupt handler */
if (adapter->flags & IGB_FLAG_HAS_MSIX) if (adapter->flags & IGB_FLAG_HAS_MSIX)
...@@ -2415,9 +2415,11 @@ static int igb_get_rss_hash_opts(struct igb_adapter *adapter, ...@@ -2415,9 +2415,11 @@ static int igb_get_rss_hash_opts(struct igb_adapter *adapter,
switch (cmd->flow_type) { switch (cmd->flow_type) {
case TCP_V4_FLOW: case TCP_V4_FLOW:
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
/* Fall through */
case UDP_V4_FLOW: case UDP_V4_FLOW:
if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP) if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP)
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
/* Fall through */
case SCTP_V4_FLOW: case SCTP_V4_FLOW:
case AH_ESP_V4_FLOW: case AH_ESP_V4_FLOW:
case AH_V4_FLOW: case AH_V4_FLOW:
...@@ -2427,9 +2429,11 @@ static int igb_get_rss_hash_opts(struct igb_adapter *adapter, ...@@ -2427,9 +2429,11 @@ static int igb_get_rss_hash_opts(struct igb_adapter *adapter,
break; break;
case TCP_V6_FLOW: case TCP_V6_FLOW:
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
/* Fall through */
case UDP_V6_FLOW: case UDP_V6_FLOW:
if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP) if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP)
cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
/* Fall through */
case SCTP_V6_FLOW: case SCTP_V6_FLOW:
case AH_ESP_V6_FLOW: case AH_ESP_V6_FLOW:
case AH_V6_FLOW: case AH_V6_FLOW:
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#include "igb.h" #include "igb.h"
#include "e1000_82575.h" #include "e1000_82575.h"
......
/******************************************************************************* /* Intel(R) Gigabit Ethernet Linux driver
* Copyright(c) 2007-2014 Intel Corporation.
Intel(R) Gigabit Ethernet Linux driver *
Copyright(c) 2007-2014 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,
This program is free software; you can redistribute it and/or modify it * version 2, as published by the Free Software Foundation.
under the terms and conditions of the GNU General Public License, *
version 2, as published by the Free Software Foundation. * This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
This program is distributed in the hope it will be useful, but WITHOUT * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * more details.
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
more details. * You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along with *
this program; if not, see <http://www.gnu.org/licenses/>. * The full GNU General Public License is included in this distribution in
* the file called "COPYING".
The full GNU General Public License is included in this distribution in *
the file called "COPYING". * Contact Information:
* e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Contact Information: * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> */
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
...@@ -75,7 +72,7 @@ static const struct e1000_info *igb_info_tbl[] = { ...@@ -75,7 +72,7 @@ static const struct e1000_info *igb_info_tbl[] = {
[board_82575] = &e1000_82575_info, [board_82575] = &e1000_82575_info,
}; };
static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { static const struct pci_device_id igb_pci_tbl[] = {
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_1GBPS) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_1GBPS) },
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_SGMII) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_SGMII) },
{ PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS) },
...@@ -117,7 +114,6 @@ static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { ...@@ -117,7 +114,6 @@ static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = {
MODULE_DEVICE_TABLE(pci, igb_pci_tbl); MODULE_DEVICE_TABLE(pci, igb_pci_tbl);
void igb_reset(struct igb_adapter *);
static int igb_setup_all_tx_resources(struct igb_adapter *); static int igb_setup_all_tx_resources(struct igb_adapter *);
static int igb_setup_all_rx_resources(struct igb_adapter *); static int igb_setup_all_rx_resources(struct igb_adapter *);
static void igb_free_all_tx_resources(struct igb_adapter *); static void igb_free_all_tx_resources(struct igb_adapter *);
...@@ -141,7 +137,7 @@ static void igb_watchdog(unsigned long); ...@@ -141,7 +137,7 @@ static void igb_watchdog(unsigned long);
static void igb_watchdog_task(struct work_struct *); static void igb_watchdog_task(struct work_struct *);
static netdev_tx_t igb_xmit_frame(struct sk_buff *skb, struct net_device *); static netdev_tx_t igb_xmit_frame(struct sk_buff *skb, struct net_device *);
static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *dev, static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *dev,
struct rtnl_link_stats64 *stats); struct rtnl_link_stats64 *stats);
static int igb_change_mtu(struct net_device *, int); static int igb_change_mtu(struct net_device *, int);
static int igb_set_mac(struct net_device *, void *); static int igb_set_mac(struct net_device *, void *);
static void igb_set_uta(struct igb_adapter *adapter); static void igb_set_uta(struct igb_adapter *adapter);
...@@ -159,7 +155,8 @@ static bool igb_clean_rx_irq(struct igb_q_vector *, int); ...@@ -159,7 +155,8 @@ static bool igb_clean_rx_irq(struct igb_q_vector *, int);
static int igb_ioctl(struct net_device *, struct ifreq *, int cmd); static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);
static void igb_tx_timeout(struct net_device *); static void igb_tx_timeout(struct net_device *);
static void igb_reset_task(struct work_struct *); static void igb_reset_task(struct work_struct *);
static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features); static void igb_vlan_mode(struct net_device *netdev,
netdev_features_t features);
static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16); static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16); static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
static void igb_restore_vlan(struct igb_adapter *); static void igb_restore_vlan(struct igb_adapter *);
...@@ -215,7 +212,7 @@ static struct notifier_block dca_notifier = { ...@@ -215,7 +212,7 @@ static struct notifier_block dca_notifier = {
static void igb_netpoll(struct net_device *); static void igb_netpoll(struct net_device *);
#endif #endif
#ifdef CONFIG_PCI_IOV #ifdef CONFIG_PCI_IOV
static unsigned int max_vfs = 0; static unsigned int max_vfs;
module_param(max_vfs, uint, 0); module_param(max_vfs, uint, 0);
MODULE_PARM_DESC(max_vfs, "Maximum number of virtual functions to allocate per physical function"); MODULE_PARM_DESC(max_vfs, "Maximum number of virtual functions to allocate per physical function");
#endif /* CONFIG_PCI_IOV */ #endif /* CONFIG_PCI_IOV */
...@@ -577,7 +574,7 @@ static int igb_get_i2c_data(void *data) ...@@ -577,7 +574,7 @@ static int igb_get_i2c_data(void *data)
struct e1000_hw *hw = &adapter->hw; struct e1000_hw *hw = &adapter->hw;
s32 i2cctl = rd32(E1000_I2CPARAMS); s32 i2cctl = rd32(E1000_I2CPARAMS);
return ((i2cctl & E1000_I2C_DATA_IN) != 0); return !!(i2cctl & E1000_I2C_DATA_IN);
} }
/** /**
...@@ -641,7 +638,7 @@ static int igb_get_i2c_clk(void *data) ...@@ -641,7 +638,7 @@ static int igb_get_i2c_clk(void *data)
struct e1000_hw *hw = &adapter->hw; struct e1000_hw *hw = &adapter->hw;
s32 i2cctl = rd32(E1000_I2CPARAMS); s32 i2cctl = rd32(E1000_I2CPARAMS);
return ((i2cctl & E1000_I2C_CLK_IN) != 0); return !!(i2cctl & E1000_I2C_CLK_IN);
} }
static const struct i2c_algo_bit_data igb_i2c_algo = { static const struct i2c_algo_bit_data igb_i2c_algo = {
...@@ -729,12 +726,14 @@ static void igb_cache_ring_register(struct igb_adapter *adapter) ...@@ -729,12 +726,14 @@ static void igb_cache_ring_register(struct igb_adapter *adapter)
adapter->rx_ring[i]->reg_idx = rbase_offset + adapter->rx_ring[i]->reg_idx = rbase_offset +
Q_IDX_82576(i); Q_IDX_82576(i);
} }
/* Fall through */
case e1000_82575: case e1000_82575:
case e1000_82580: case e1000_82580:
case e1000_i350: case e1000_i350:
case e1000_i354: case e1000_i354:
case e1000_i210: case e1000_i210:
case e1000_i211: case e1000_i211:
/* Fall through */
default: default:
for (; i < adapter->num_rx_queues; i++) for (; i < adapter->num_rx_queues; i++)
adapter->rx_ring[i]->reg_idx = rbase_offset + i; adapter->rx_ring[i]->reg_idx = rbase_offset + i;
...@@ -1285,8 +1284,7 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter, ...@@ -1285,8 +1284,7 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
if (adapter->hw.mac.type >= e1000_82576) if (adapter->hw.mac.type >= e1000_82576)
set_bit(IGB_RING_FLAG_RX_SCTP_CSUM, &ring->flags); set_bit(IGB_RING_FLAG_RX_SCTP_CSUM, &ring->flags);
/* /* On i350, i354, i210, and i211, loopback VLAN packets
* On i350, i354, i210, and i211, loopback VLAN packets
* have the tag byte-swapped. * have the tag byte-swapped.
*/ */
if (adapter->hw.mac.type >= e1000_i350) if (adapter->hw.mac.type >= e1000_i350)
...@@ -1785,7 +1783,7 @@ void igb_down(struct igb_adapter *adapter) ...@@ -1785,7 +1783,7 @@ void igb_down(struct igb_adapter *adapter)
wr32(E1000_TCTL, tctl); wr32(E1000_TCTL, tctl);
/* flush both disables and wait for them to finish */ /* flush both disables and wait for them to finish */
wrfl(); wrfl();
msleep(10); usleep_range(10000, 11000);
igb_irq_disable(adapter); igb_irq_disable(adapter);
...@@ -1825,7 +1823,7 @@ void igb_reinit_locked(struct igb_adapter *adapter) ...@@ -1825,7 +1823,7 @@ void igb_reinit_locked(struct igb_adapter *adapter)
{ {
WARN_ON(in_interrupt()); WARN_ON(in_interrupt());
while (test_and_set_bit(__IGB_RESETTING, &adapter->state)) while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
msleep(1); usleep_range(1000, 2000);
igb_down(adapter); igb_down(adapter);
igb_up(adapter); igb_up(adapter);
clear_bit(__IGB_RESETTING, &adapter->state); clear_bit(__IGB_RESETTING, &adapter->state);
...@@ -2528,7 +2526,8 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2528,7 +2526,8 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
} }
/* let the f/w know that the h/w is now under the control of the /* let the f/w know that the h/w is now under the control of the
* driver. */ * driver.
*/
igb_get_hw_control(adapter); igb_get_hw_control(adapter);
strcpy(netdev->name, "eth%d"); strcpy(netdev->name, "eth%d");
...@@ -3389,7 +3388,8 @@ static void igb_setup_mrqc(struct igb_adapter *adapter) ...@@ -3389,7 +3388,8 @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
if (adapter->rss_indir_tbl_init != num_rx_queues) { if (adapter->rss_indir_tbl_init != num_rx_queues) {
for (j = 0; j < IGB_RETA_SIZE; j++) for (j = 0; j < IGB_RETA_SIZE; j++)
adapter->rss_indir_tbl[j] = (j * num_rx_queues) / IGB_RETA_SIZE; adapter->rss_indir_tbl[j] =
(j * num_rx_queues) / IGB_RETA_SIZE;
adapter->rss_indir_tbl_init = num_rx_queues; adapter->rss_indir_tbl_init = num_rx_queues;
} }
igb_write_rss_indir_tbl(adapter); igb_write_rss_indir_tbl(adapter);
...@@ -4059,7 +4059,8 @@ static void igb_check_wvbr(struct igb_adapter *adapter) ...@@ -4059,7 +4059,8 @@ static void igb_check_wvbr(struct igb_adapter *adapter)
switch (hw->mac.type) { switch (hw->mac.type) {
case e1000_82576: case e1000_82576:
case e1000_i350: case e1000_i350:
if (!(wvbr = rd32(E1000_WVBR))) wvbr = rd32(E1000_WVBR);
if (!wvbr)
return; return;
break; break;
default: default:
...@@ -5140,7 +5141,7 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu) ...@@ -5140,7 +5141,7 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu)
max_frame = ETH_FRAME_LEN + ETH_FCS_LEN; max_frame = ETH_FRAME_LEN + ETH_FCS_LEN;
while (test_and_set_bit(__IGB_RESETTING, &adapter->state)) while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
msleep(1); usleep_range(1000, 2000);
/* igb_down has a dependency on max_frame_size */ /* igb_down has a dependency on max_frame_size */
adapter->max_frame_size = max_frame; adapter->max_frame_size = max_frame;
...@@ -6498,7 +6499,7 @@ static void igb_reuse_rx_page(struct igb_ring *rx_ring, ...@@ -6498,7 +6499,7 @@ static void igb_reuse_rx_page(struct igb_ring *rx_ring,
rx_ring->next_to_alloc = (nta < rx_ring->count) ? nta : 0; rx_ring->next_to_alloc = (nta < rx_ring->count) ? nta : 0;
/* transfer page from old buffer to new buffer */ /* transfer page from old buffer to new buffer */
memcpy(new_buff, old_buff, sizeof(struct igb_rx_buffer)); *new_buff = *old_buff;
/* sync the buffer for use by the device */ /* sync the buffer for use by the device */
dma_sync_single_range_for_device(rx_ring->dev, old_buff->dma, dma_sync_single_range_for_device(rx_ring->dev, old_buff->dma,
...@@ -7056,7 +7057,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget) ...@@ -7056,7 +7057,7 @@ static bool igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
if (cleaned_count) if (cleaned_count)
igb_alloc_rx_buffers(rx_ring, cleaned_count); igb_alloc_rx_buffers(rx_ring, cleaned_count);
return (total_packets < budget); return total_packets < budget;
} }
static bool igb_alloc_mapped_page(struct igb_ring *rx_ring, static bool igb_alloc_mapped_page(struct igb_ring *rx_ring,
...@@ -7960,11 +7961,13 @@ static void igb_vmm_control(struct igb_adapter *adapter) ...@@ -7960,11 +7961,13 @@ static void igb_vmm_control(struct igb_adapter *adapter)
reg = rd32(E1000_DTXCTL); reg = rd32(E1000_DTXCTL);
reg |= E1000_DTXCTL_VLAN_ADDED; reg |= E1000_DTXCTL_VLAN_ADDED;
wr32(E1000_DTXCTL, reg); wr32(E1000_DTXCTL, reg);
/* Fall through */
case e1000_82580: case e1000_82580:
/* enable replication vlan tag stripping */ /* enable replication vlan tag stripping */
reg = rd32(E1000_RPLOLR); reg = rd32(E1000_RPLOLR);
reg |= E1000_RPLOLR_STRVLAN; reg |= E1000_RPLOLR_STRVLAN;
wr32(E1000_RPLOLR, reg); wr32(E1000_RPLOLR, reg);
/* Fall through */
case e1000_i350: case e1000_i350:
/* none of the above registers are supported by i350 */ /* none of the above registers are supported by i350 */
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment