You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (92 commits) gianfar: Revive VLAN support vlan: Export symbols as non GPL symbols. bnx2x: tx_has_work should not wait for FW netxen: reduce memory footprint netxen: fix vlan tso/checksum offload net: Fix linux/if_frad.h's suitability for userspace. net: Move config NET_NS to from net/Kconfig to init/Kconfig isdn: Fix missing ifdef in isdn_ppp networking: document "nc" in addition to "netcat" in netconsole.txt e1000e: workaround hw errata af_key: initialize xfrm encap_oa virtio_net: Fix MAX_PACKET_LEN to support 802.1Q VLANs lcs: fix compilation for !CONFIG_IP_MULTICAST rtl8187: Add termination packet to prevent stall iwlwifi: fix rs_get_rate WARN_ON() p54usb: fix packet loss with first generation devices sctp: Fix another socket race during accept/peeloff sctp: Properly timestamp outgoing data chunks for rtx purposes sctp: Correctly start rtx timer on new packet transmissions. sctp: Fix crc32c calculations on big-endian arhes. ...
This commit is contained in:
@@ -51,7 +51,8 @@ Built-in netconsole starts immediately after the TCP stack is
|
||||
initialized and attempts to bring up the supplied dev at the supplied
|
||||
address.
|
||||
|
||||
The remote host can run either 'netcat -u -l -p <port>' or syslogd.
|
||||
The remote host can run either 'netcat -u -l -p <port>',
|
||||
'nc -l -u <port>' or syslogd.
|
||||
|
||||
Dynamic reconfiguration:
|
||||
========================
|
||||
|
||||
@@ -431,6 +431,7 @@ set_arg(void __user *b, void *val,int len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPPP_FILTER
|
||||
static int get_filter(void __user *arg, struct sock_filter **p)
|
||||
{
|
||||
struct sock_fprog uprog;
|
||||
@@ -465,6 +466,7 @@ static int get_filter(void __user *arg, struct sock_filter **p)
|
||||
*p = code;
|
||||
return uprog.len;
|
||||
}
|
||||
#endif /* CONFIG_IPPP_FILTER */
|
||||
|
||||
/*
|
||||
* ippp device ioctl
|
||||
|
||||
+2
-9
@@ -1,6 +1,6 @@
|
||||
/* bnx2x.h: Broadcom Everest network driver.
|
||||
*
|
||||
* Copyright (c) 2007-2008 Broadcom Corporation
|
||||
* Copyright (c) 2007-2009 Broadcom Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -271,14 +271,7 @@ struct bnx2x_fastpath {
|
||||
|
||||
#define bnx2x_fp(bp, nr, var) (bp->fp[nr].var)
|
||||
|
||||
#define BNX2X_HAS_TX_WORK(fp) \
|
||||
((fp->tx_pkt_prod != le16_to_cpu(*fp->tx_cons_sb)) || \
|
||||
(fp->tx_pkt_prod != fp->tx_pkt_cons))
|
||||
|
||||
#define BNX2X_HAS_RX_WORK(fp) \
|
||||
(fp->rx_comp_cons != rx_cons_sb)
|
||||
|
||||
#define BNX2X_HAS_WORK(fp) (BNX2X_HAS_RX_WORK(fp) || BNX2X_HAS_TX_WORK(fp))
|
||||
#define BNX2X_HAS_WORK(fp) (bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))
|
||||
|
||||
|
||||
/* MC hsi */
|
||||
|
||||
+46
-18
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2008 Broadcom Corporation
|
||||
/* Copyright 2008-2009 Broadcom Corporation
|
||||
*
|
||||
* Unless you and Broadcom execute a separate written software license
|
||||
* agreement governing use of this software, this software is licensed to you
|
||||
@@ -317,6 +317,9 @@ static u8 bnx2x_emac_enable(struct link_params *params,
|
||||
val &= ~0x810;
|
||||
EMAC_WR(bp, EMAC_REG_EMAC_MODE, val);
|
||||
|
||||
/* enable emac */
|
||||
REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 1);
|
||||
|
||||
/* enable emac for jumbo packets */
|
||||
EMAC_WR(bp, EMAC_REG_EMAC_RX_MTU_SIZE,
|
||||
(EMAC_RX_MTU_SIZE_JUMBO_ENA |
|
||||
@@ -1609,7 +1612,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
u32 gp_status)
|
||||
{
|
||||
struct bnx2x *bp = params->bp;
|
||||
|
||||
u16 new_line_speed;
|
||||
u8 rc = 0;
|
||||
vars->link_status = 0;
|
||||
|
||||
@@ -1629,7 +1632,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
|
||||
switch (gp_status & GP_STATUS_SPEED_MASK) {
|
||||
case GP_STATUS_10M:
|
||||
vars->line_speed = SPEED_10;
|
||||
new_line_speed = SPEED_10;
|
||||
if (vars->duplex == DUPLEX_FULL)
|
||||
vars->link_status |= LINK_10TFD;
|
||||
else
|
||||
@@ -1637,7 +1640,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
break;
|
||||
|
||||
case GP_STATUS_100M:
|
||||
vars->line_speed = SPEED_100;
|
||||
new_line_speed = SPEED_100;
|
||||
if (vars->duplex == DUPLEX_FULL)
|
||||
vars->link_status |= LINK_100TXFD;
|
||||
else
|
||||
@@ -1646,7 +1649,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
|
||||
case GP_STATUS_1G:
|
||||
case GP_STATUS_1G_KX:
|
||||
vars->line_speed = SPEED_1000;
|
||||
new_line_speed = SPEED_1000;
|
||||
if (vars->duplex == DUPLEX_FULL)
|
||||
vars->link_status |= LINK_1000TFD;
|
||||
else
|
||||
@@ -1654,7 +1657,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
break;
|
||||
|
||||
case GP_STATUS_2_5G:
|
||||
vars->line_speed = SPEED_2500;
|
||||
new_line_speed = SPEED_2500;
|
||||
if (vars->duplex == DUPLEX_FULL)
|
||||
vars->link_status |= LINK_2500TFD;
|
||||
else
|
||||
@@ -1671,32 +1674,32 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
case GP_STATUS_10G_KX4:
|
||||
case GP_STATUS_10G_HIG:
|
||||
case GP_STATUS_10G_CX4:
|
||||
vars->line_speed = SPEED_10000;
|
||||
new_line_speed = SPEED_10000;
|
||||
vars->link_status |= LINK_10GTFD;
|
||||
break;
|
||||
|
||||
case GP_STATUS_12G_HIG:
|
||||
vars->line_speed = SPEED_12000;
|
||||
new_line_speed = SPEED_12000;
|
||||
vars->link_status |= LINK_12GTFD;
|
||||
break;
|
||||
|
||||
case GP_STATUS_12_5G:
|
||||
vars->line_speed = SPEED_12500;
|
||||
new_line_speed = SPEED_12500;
|
||||
vars->link_status |= LINK_12_5GTFD;
|
||||
break;
|
||||
|
||||
case GP_STATUS_13G:
|
||||
vars->line_speed = SPEED_13000;
|
||||
new_line_speed = SPEED_13000;
|
||||
vars->link_status |= LINK_13GTFD;
|
||||
break;
|
||||
|
||||
case GP_STATUS_15G:
|
||||
vars->line_speed = SPEED_15000;
|
||||
new_line_speed = SPEED_15000;
|
||||
vars->link_status |= LINK_15GTFD;
|
||||
break;
|
||||
|
||||
case GP_STATUS_16G:
|
||||
vars->line_speed = SPEED_16000;
|
||||
new_line_speed = SPEED_16000;
|
||||
vars->link_status |= LINK_16GTFD;
|
||||
break;
|
||||
|
||||
@@ -1708,6 +1711,15 @@ static u8 bnx2x_link_settings_status(struct link_params *params,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Upon link speed change set the NIG into drain mode.
|
||||
Comes to deals with possible FIFO glitch due to clk change
|
||||
when speed is decreased without link down indicator */
|
||||
if (new_line_speed != vars->line_speed) {
|
||||
REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE
|
||||
+ params->port*4, 0);
|
||||
msleep(1);
|
||||
}
|
||||
vars->line_speed = new_line_speed;
|
||||
vars->link_status |= LINK_STATUS_SERDES_LINK;
|
||||
|
||||
if ((params->req_line_speed == SPEED_AUTO_NEG) &&
|
||||
@@ -3571,7 +3583,7 @@ static void bnx2x_set_xgxs_loopback(struct link_params *params,
|
||||
(MDIO_REG_BANK_CL73_IEEEB0 +
|
||||
(MDIO_CL73_IEEEB0_CL73_AN_CONTROL & 0xf)),
|
||||
0x6041);
|
||||
|
||||
msleep(200);
|
||||
/* set aer mmd back */
|
||||
bnx2x_set_aer_mmd(params, vars);
|
||||
|
||||
@@ -3870,9 +3882,15 @@ static u8 bnx2x_link_initialize(struct link_params *params,
|
||||
}
|
||||
|
||||
if (vars->phy_flags & PHY_XGXS_FLAG) {
|
||||
if (params->req_line_speed &&
|
||||
if ((params->req_line_speed &&
|
||||
((params->req_line_speed == SPEED_100) ||
|
||||
(params->req_line_speed == SPEED_10))) {
|
||||
(params->req_line_speed == SPEED_10))) ||
|
||||
(!params->req_line_speed &&
|
||||
(params->speed_cap_mask >=
|
||||
PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL) &&
|
||||
(params->speed_cap_mask <
|
||||
PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)
|
||||
)) {
|
||||
vars->phy_flags |= PHY_SGMII_FLAG;
|
||||
} else {
|
||||
vars->phy_flags &= ~PHY_SGMII_FLAG;
|
||||
@@ -4194,6 +4212,11 @@ static u8 bnx2x_update_link_down(struct link_params *params,
|
||||
/* activate nig drain */
|
||||
REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1);
|
||||
|
||||
/* disable emac */
|
||||
REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0);
|
||||
|
||||
msleep(10);
|
||||
|
||||
/* reset BigMac */
|
||||
bnx2x_bmac_rx_disable(bp, params->port);
|
||||
REG_WR(bp, GRCBASE_MISC +
|
||||
@@ -4238,6 +4261,7 @@ static u8 bnx2x_update_link_up(struct link_params *params,
|
||||
|
||||
/* update shared memory */
|
||||
bnx2x_update_mng(params, vars->link_status);
|
||||
msleep(20);
|
||||
return rc;
|
||||
}
|
||||
/* This function should called upon link interrupt */
|
||||
@@ -4276,6 +4300,9 @@ u8 bnx2x_link_update(struct link_params *params, struct link_vars *vars)
|
||||
REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK10G + port*0x68),
|
||||
REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK_STATUS + port*0x68));
|
||||
|
||||
/* disable emac */
|
||||
REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0);
|
||||
|
||||
ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config);
|
||||
|
||||
/* Check external link change only for non-direct */
|
||||
@@ -4377,10 +4404,11 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp, u32 shmem_base)
|
||||
ext_phy_addr[port],
|
||||
MDIO_PMA_DEVAD,
|
||||
MDIO_PMA_REG_ROM_VER1, &fw_ver1);
|
||||
if (fw_ver1 == 0) {
|
||||
if (fw_ver1 == 0 || fw_ver1 == 0x4321) {
|
||||
DP(NETIF_MSG_LINK,
|
||||
"bnx2x_8073_common_init_phy port %x "
|
||||
"fw Download failed\n", port);
|
||||
"bnx2x_8073_common_init_phy port %x:"
|
||||
"Download failed. fw version = 0x%x\n",
|
||||
port, fw_ver1);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
+191
-127
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
/* bnx2x_reg.h: Broadcom Everest network driver.
|
||||
*
|
||||
* Copyright (c) 2007-2008 Broadcom Corporation
|
||||
* Copyright (c) 2007-2009 Broadcom Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -2104,6 +2104,7 @@ static void init_lro_mgr(struct sge_qset *qs, struct net_lro_mgr *lro_mgr)
|
||||
{
|
||||
lro_mgr->dev = qs->netdev;
|
||||
lro_mgr->features = LRO_F_NAPI;
|
||||
lro_mgr->frag_align_pad = NET_IP_ALIGN;
|
||||
lro_mgr->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
lro_mgr->ip_summed_aggr = CHECKSUM_UNNECESSARY;
|
||||
lro_mgr->max_desc = T3_MAX_LRO_SES;
|
||||
|
||||
@@ -981,11 +981,15 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
|
||||
ew32(PBA_ECC, reg);
|
||||
}
|
||||
|
||||
/* PCI-Ex Control Register */
|
||||
/* PCI-Ex Control Registers */
|
||||
if (hw->mac.type == e1000_82574) {
|
||||
reg = er32(GCR);
|
||||
reg |= (1 << 22);
|
||||
ew32(GCR, reg);
|
||||
|
||||
reg = er32(GCR2);
|
||||
reg |= 1;
|
||||
ew32(GCR2, reg);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -206,6 +206,7 @@ enum e1e_registers {
|
||||
E1000_MANC2H = 0x05860, /* Management Control To Host - RW */
|
||||
E1000_SW_FW_SYNC = 0x05B5C, /* Software-Firmware Synchronization - RW */
|
||||
E1000_GCR = 0x05B00, /* PCI-Ex Control */
|
||||
E1000_GCR2 = 0x05B64, /* PCI-Ex Control #2 */
|
||||
E1000_FACTPS = 0x05B30, /* Function Active and Power State to MNG */
|
||||
E1000_SWSM = 0x05B50, /* SW Semaphore */
|
||||
E1000_FWSM = 0x05B54, /* FW Semaphore */
|
||||
|
||||
@@ -1423,15 +1423,11 @@ static void gfar_vlan_rx_register(struct net_device *dev,
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
struct vlan_group *old_grp;
|
||||
u32 tempval;
|
||||
|
||||
spin_lock_irqsave(&priv->rxlock, flags);
|
||||
|
||||
old_grp = priv->vlgrp;
|
||||
|
||||
if (old_grp == grp)
|
||||
return;
|
||||
priv->vlgrp = grp;
|
||||
|
||||
if (grp) {
|
||||
/* Enable VLAN tag insertion */
|
||||
|
||||
@@ -318,6 +318,9 @@ static void ixgbe_update_rx_dca(struct ixgbe_adapter *adapter,
|
||||
rxctrl |= dca3_get_tag(&adapter->pdev->dev, cpu);
|
||||
rxctrl |= IXGBE_DCA_RXCTRL_DESC_DCA_EN;
|
||||
rxctrl |= IXGBE_DCA_RXCTRL_HEAD_DCA_EN;
|
||||
rxctrl &= ~(IXGBE_DCA_RXCTRL_DESC_RRO_EN);
|
||||
rxctrl &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
|
||||
IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_DCA_RXCTRL(q), rxctrl);
|
||||
rx_ring->cpu = cpu;
|
||||
}
|
||||
@@ -1741,38 +1744,6 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
||||
IXGBE_WRITE_REG(hw, IXGBE_RXCSUM, rxcsum);
|
||||
}
|
||||
|
||||
static void ixgbe_vlan_rx_register(struct net_device *netdev,
|
||||
struct vlan_group *grp)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
u32 ctrl;
|
||||
|
||||
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
||||
ixgbe_irq_disable(adapter);
|
||||
adapter->vlgrp = grp;
|
||||
|
||||
/*
|
||||
* For a DCB driver, always enable VLAN tag stripping so we can
|
||||
* still receive traffic from a DCB-enabled host even if we're
|
||||
* not in DCB mode.
|
||||
*/
|
||||
ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
|
||||
ctrl |= IXGBE_VLNCTRL_VME;
|
||||
ctrl &= ~IXGBE_VLNCTRL_CFIEN;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
|
||||
|
||||
if (grp) {
|
||||
/* enable VLAN tag insert/strip */
|
||||
ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
|
||||
ctrl |= IXGBE_VLNCTRL_VME;
|
||||
ctrl &= ~IXGBE_VLNCTRL_CFIEN;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
|
||||
}
|
||||
|
||||
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
||||
ixgbe_irq_enable(adapter);
|
||||
}
|
||||
|
||||
static void ixgbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
@@ -1799,6 +1770,39 @@ static void ixgbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
|
||||
hw->mac.ops.set_vfta(&adapter->hw, vid, 0, false);
|
||||
}
|
||||
|
||||
static void ixgbe_vlan_rx_register(struct net_device *netdev,
|
||||
struct vlan_group *grp)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
u32 ctrl;
|
||||
|
||||
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
||||
ixgbe_irq_disable(adapter);
|
||||
adapter->vlgrp = grp;
|
||||
|
||||
/*
|
||||
* For a DCB driver, always enable VLAN tag stripping so we can
|
||||
* still receive traffic from a DCB-enabled host even if we're
|
||||
* not in DCB mode.
|
||||
*/
|
||||
ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
|
||||
ctrl |= IXGBE_VLNCTRL_VME;
|
||||
ctrl &= ~IXGBE_VLNCTRL_CFIEN;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
|
||||
ixgbe_vlan_rx_add_vid(netdev, 0);
|
||||
|
||||
if (grp) {
|
||||
/* enable VLAN tag insert/strip */
|
||||
ctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_VLNCTRL);
|
||||
ctrl |= IXGBE_VLNCTRL_VME;
|
||||
ctrl &= ~IXGBE_VLNCTRL_CFIEN;
|
||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_VLNCTRL, ctrl);
|
||||
}
|
||||
|
||||
if (!test_bit(__IXGBE_DOWN, &adapter->state))
|
||||
ixgbe_irq_enable(adapter);
|
||||
}
|
||||
|
||||
static void ixgbe_restore_vlan(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
ixgbe_vlan_rx_register(adapter->netdev, adapter->vlgrp);
|
||||
@@ -2074,6 +2078,9 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
|
||||
|
||||
ixgbe_irq_enable(adapter);
|
||||
|
||||
/* enable transmits */
|
||||
netif_tx_start_all_queues(netdev);
|
||||
|
||||
/* bring the link up in the watchdog, this could race with our first
|
||||
* link up interrupt but shouldn't be a problem */
|
||||
adapter->flags |= IXGBE_FLAG_NEED_LINK_UPDATE;
|
||||
@@ -3475,7 +3482,6 @@ static void ixgbe_watchdog_task(struct work_struct *work)
|
||||
(FLOW_TX ? "TX" : "None"))));
|
||||
|
||||
netif_carrier_on(netdev);
|
||||
netif_tx_wake_all_queues(netdev);
|
||||
} else {
|
||||
/* Force detection of hung controller */
|
||||
adapter->detect_tx_hung = true;
|
||||
@@ -3487,7 +3493,6 @@ static void ixgbe_watchdog_task(struct work_struct *work)
|
||||
printk(KERN_INFO "ixgbe: %s NIC Link is Down\n",
|
||||
netdev->name);
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4218,7 +4223,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
||||
}
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
|
||||
strcpy(netdev->name, "eth%d");
|
||||
err = register_netdev(netdev);
|
||||
|
||||
@@ -404,6 +404,9 @@
|
||||
#define IXGBE_DCA_RXCTRL_DESC_DCA_EN (1 << 5) /* DCA Rx Desc enable */
|
||||
#define IXGBE_DCA_RXCTRL_HEAD_DCA_EN (1 << 6) /* DCA Rx Desc header enable */
|
||||
#define IXGBE_DCA_RXCTRL_DATA_DCA_EN (1 << 7) /* DCA Rx Desc payload enable */
|
||||
#define IXGBE_DCA_RXCTRL_DESC_RRO_EN (1 << 9) /* DCA Rx rd Desc Relax Order */
|
||||
#define IXGBE_DCA_RXCTRL_DESC_WRO_EN (1 << 13) /* DCA Rx wr Desc Relax Order */
|
||||
#define IXGBE_DCA_RXCTRL_DESC_HSRO_EN (1 << 15) /* DCA Rx Split Header RO */
|
||||
|
||||
#define IXGBE_DCA_TXCTRL_CPUID_MASK 0x0000001F /* Tx CPUID Mask */
|
||||
#define IXGBE_DCA_TXCTRL_DESC_DCA_EN (1 << 5) /* DCA Tx Desc enable */
|
||||
|
||||
@@ -416,6 +416,9 @@ static int korina_rx(struct net_device *dev, int limit)
|
||||
if (devcs & ETH_RX_MP)
|
||||
dev->stats.multicast++;
|
||||
|
||||
/* 16 bit align */
|
||||
skb_reserve(skb_new, 2);
|
||||
|
||||
lp->rx_skb[lp->rx_next_done] = skb_new;
|
||||
}
|
||||
|
||||
@@ -740,6 +743,7 @@ static struct ethtool_ops netdev_ethtool_ops = {
|
||||
static void korina_alloc_ring(struct net_device *dev)
|
||||
{
|
||||
struct korina_private *lp = netdev_priv(dev);
|
||||
struct sk_buff *skb;
|
||||
int i;
|
||||
|
||||
/* Initialize the transmit descriptors */
|
||||
@@ -755,8 +759,6 @@ static void korina_alloc_ring(struct net_device *dev)
|
||||
|
||||
/* Initialize the receive descriptors */
|
||||
for (i = 0; i < KORINA_NUM_RDS; i++) {
|
||||
struct sk_buff *skb = lp->rx_skb[i];
|
||||
|
||||
skb = dev_alloc_skb(KORINA_RBSIZE + 2);
|
||||
if (!skb)
|
||||
break;
|
||||
@@ -769,11 +771,12 @@ static void korina_alloc_ring(struct net_device *dev)
|
||||
lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[i+1]);
|
||||
}
|
||||
|
||||
/* loop back */
|
||||
lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[0]);
|
||||
lp->rx_next_done = 0;
|
||||
/* loop back receive descriptors, so the last
|
||||
* descriptor points to the first one */
|
||||
lp->rd_ring[i - 1].link = CPHYSADDR(&lp->rd_ring[0]);
|
||||
lp->rd_ring[i - 1].control |= DMA_DESC_COD;
|
||||
|
||||
lp->rd_ring[i].control |= DMA_DESC_COD;
|
||||
lp->rx_next_done = 0;
|
||||
lp->rx_chain_head = 0;
|
||||
lp->rx_chain_tail = 0;
|
||||
lp->rx_chain_status = desc_empty;
|
||||
|
||||
@@ -321,6 +321,10 @@ static void macb_tx(struct macb *bp)
|
||||
printk(KERN_ERR "%s: TX underrun, resetting buffers\n",
|
||||
bp->dev->name);
|
||||
|
||||
/* Transfer ongoing, disable transmitter, to avoid confusion */
|
||||
if (status & MACB_BIT(TGO))
|
||||
macb_writel(bp, NCR, macb_readl(bp, NCR) & ~MACB_BIT(TE));
|
||||
|
||||
head = bp->tx_head;
|
||||
|
||||
/*Mark all the buffer as used to avoid sending a lost buffer*/
|
||||
@@ -343,6 +347,10 @@ static void macb_tx(struct macb *bp)
|
||||
}
|
||||
|
||||
bp->tx_head = bp->tx_tail = 0;
|
||||
|
||||
/* Enable the transmitter again */
|
||||
if (status & MACB_BIT(TGO))
|
||||
macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TE));
|
||||
}
|
||||
|
||||
if (!(status & MACB_BIT(COMP)))
|
||||
|
||||
@@ -136,21 +136,23 @@ static char mv643xx_eth_driver_version[] = "1.4";
|
||||
/*
|
||||
* SDMA configuration register.
|
||||
*/
|
||||
#define RX_BURST_SIZE_4_64BIT (2 << 1)
|
||||
#define RX_BURST_SIZE_16_64BIT (4 << 1)
|
||||
#define BLM_RX_NO_SWAP (1 << 4)
|
||||
#define BLM_TX_NO_SWAP (1 << 5)
|
||||
#define TX_BURST_SIZE_4_64BIT (2 << 22)
|
||||
#define TX_BURST_SIZE_16_64BIT (4 << 22)
|
||||
|
||||
#if defined(__BIG_ENDIAN)
|
||||
#define PORT_SDMA_CONFIG_DEFAULT_VALUE \
|
||||
(RX_BURST_SIZE_16_64BIT | \
|
||||
TX_BURST_SIZE_16_64BIT)
|
||||
(RX_BURST_SIZE_4_64BIT | \
|
||||
TX_BURST_SIZE_4_64BIT)
|
||||
#elif defined(__LITTLE_ENDIAN)
|
||||
#define PORT_SDMA_CONFIG_DEFAULT_VALUE \
|
||||
(RX_BURST_SIZE_16_64BIT | \
|
||||
BLM_RX_NO_SWAP | \
|
||||
BLM_TX_NO_SWAP | \
|
||||
TX_BURST_SIZE_16_64BIT)
|
||||
(RX_BURST_SIZE_4_64BIT | \
|
||||
BLM_RX_NO_SWAP | \
|
||||
BLM_TX_NO_SWAP | \
|
||||
TX_BURST_SIZE_4_64BIT)
|
||||
#else
|
||||
#error One of __BIG_ENDIAN or __LITTLE_ENDIAN must be defined
|
||||
#endif
|
||||
@@ -1594,7 +1596,7 @@ oom:
|
||||
entry = addr_crc(a);
|
||||
}
|
||||
|
||||
table[entry >> 2] |= 1 << (entry & 3);
|
||||
table[entry >> 2] |= 1 << (8 * (entry & 3));
|
||||
}
|
||||
|
||||
for (i = 0; i < 0x100; i += 4) {
|
||||
@@ -2210,6 +2212,7 @@ static int mv643xx_eth_stop(struct net_device *dev)
|
||||
struct mv643xx_eth_private *mp = netdev_priv(dev);
|
||||
int i;
|
||||
|
||||
wrlp(mp, INT_MASK_EXT, 0x00000000);
|
||||
wrlp(mp, INT_MASK, 0x00000000);
|
||||
rdlp(mp, INT_MASK);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*************************************************************************
|
||||
* myri10ge.c: Myricom Myri-10G Ethernet driver.
|
||||
*
|
||||
* Copyright (C) 2005 - 2007 Myricom, Inc.
|
||||
* Copyright (C) 2005 - 2009 Myricom, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -75,7 +75,7 @@
|
||||
#include "myri10ge_mcp.h"
|
||||
#include "myri10ge_mcp_gen_header.h"
|
||||
|
||||
#define MYRI10GE_VERSION_STR "1.4.4-1.398"
|
||||
#define MYRI10GE_VERSION_STR "1.4.4-1.401"
|
||||
|
||||
MODULE_DESCRIPTION("Myricom 10G driver (10GbE)");
|
||||
MODULE_AUTHOR("Maintainer: help@myri.com");
|
||||
@@ -3786,7 +3786,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (status != 0) {
|
||||
dev_err(&pdev->dev, "Error %d writing PCI_EXP_DEVCTL\n",
|
||||
status);
|
||||
goto abort_with_netdev;
|
||||
goto abort_with_enabled;
|
||||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
@@ -3801,13 +3801,13 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
}
|
||||
if (status != 0) {
|
||||
dev_err(&pdev->dev, "Error %d setting DMA mask\n", status);
|
||||
goto abort_with_netdev;
|
||||
goto abort_with_enabled;
|
||||
}
|
||||
(void)pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
|
||||
mgp->cmd = dma_alloc_coherent(&pdev->dev, sizeof(*mgp->cmd),
|
||||
&mgp->cmd_bus, GFP_KERNEL);
|
||||
if (mgp->cmd == NULL)
|
||||
goto abort_with_netdev;
|
||||
goto abort_with_enabled;
|
||||
|
||||
mgp->board_span = pci_resource_len(pdev, 0);
|
||||
mgp->iomem_base = pci_resource_start(pdev, 0);
|
||||
@@ -3943,8 +3943,10 @@ abort_with_mtrr:
|
||||
dma_free_coherent(&pdev->dev, sizeof(*mgp->cmd),
|
||||
mgp->cmd, mgp->cmd_bus);
|
||||
|
||||
abort_with_netdev:
|
||||
abort_with_enabled:
|
||||
pci_disable_device(pdev);
|
||||
|
||||
abort_with_netdev:
|
||||
free_netdev(netdev);
|
||||
return status;
|
||||
}
|
||||
@@ -3990,6 +3992,7 @@ static void myri10ge_remove(struct pci_dev *pdev)
|
||||
mgp->cmd, mgp->cmd_bus);
|
||||
|
||||
free_netdev(netdev);
|
||||
pci_disable_device(pdev);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
#define MAX_RX_BUFFER_LENGTH 1760
|
||||
#define MAX_RX_JUMBO_BUFFER_LENGTH 8062
|
||||
#define MAX_RX_LRO_BUFFER_LENGTH ((48*1024)-512)
|
||||
#define MAX_RX_LRO_BUFFER_LENGTH (8062)
|
||||
#define RX_DMA_MAP_LEN (MAX_RX_BUFFER_LENGTH - 2)
|
||||
#define RX_JUMBO_DMA_MAP_LEN \
|
||||
(MAX_RX_JUMBO_BUFFER_LENGTH - 2)
|
||||
@@ -207,11 +207,11 @@
|
||||
|
||||
#define MAX_CMD_DESCRIPTORS 4096
|
||||
#define MAX_RCV_DESCRIPTORS 16384
|
||||
#define MAX_CMD_DESCRIPTORS_HOST (MAX_CMD_DESCRIPTORS / 4)
|
||||
#define MAX_RCV_DESCRIPTORS_1G (MAX_RCV_DESCRIPTORS / 4)
|
||||
#define MAX_RCV_DESCRIPTORS_10G 8192
|
||||
#define MAX_JUMBO_RCV_DESCRIPTORS 1024
|
||||
#define MAX_LRO_RCV_DESCRIPTORS 64
|
||||
#define MAX_CMD_DESCRIPTORS_HOST 1024
|
||||
#define MAX_RCV_DESCRIPTORS_1G 2048
|
||||
#define MAX_RCV_DESCRIPTORS_10G 4096
|
||||
#define MAX_JUMBO_RCV_DESCRIPTORS 512
|
||||
#define MAX_LRO_RCV_DESCRIPTORS 8
|
||||
#define MAX_RCVSTATUS_DESCRIPTORS MAX_RCV_DESCRIPTORS
|
||||
#define MAX_JUMBO_RCV_DESC MAX_JUMBO_RCV_DESCRIPTORS
|
||||
#define MAX_RCV_DESC MAX_RCV_DESCRIPTORS
|
||||
|
||||
@@ -561,7 +561,10 @@ netxen_nic_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
|
||||
}
|
||||
ring->tx_pending = adapter->max_tx_desc_count;
|
||||
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS;
|
||||
if (adapter->ahw.board_type == NETXEN_NIC_GBE)
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS_1G;
|
||||
else
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS_10G;
|
||||
ring->tx_max_pending = MAX_CMD_DESCRIPTORS_HOST;
|
||||
ring->rx_jumbo_max_pending = MAX_JUMBO_RCV_DESCRIPTORS;
|
||||
ring->rx_mini_max_pending = 0;
|
||||
|
||||
@@ -735,17 +735,18 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
SET_ETHTOOL_OPS(netdev, &netxen_nic_ethtool_ops);
|
||||
|
||||
/* ScatterGather support */
|
||||
netdev->features = NETIF_F_SG;
|
||||
netdev->features |= NETIF_F_IP_CSUM;
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
|
||||
netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
|
||||
|
||||
if (NX_IS_REVISION_P3(revision_id)) {
|
||||
netdev->features |= NETIF_F_IPV6_CSUM;
|
||||
netdev->features |= NETIF_F_TSO6;
|
||||
netdev->features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
|
||||
netdev->vlan_features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
|
||||
}
|
||||
|
||||
if (adapter->pci_using_dac)
|
||||
if (adapter->pci_using_dac) {
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
netdev->vlan_features |= NETIF_F_HIGHDMA;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the CRB window to invalid. If any register in window 0 is
|
||||
@@ -1166,6 +1167,14 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
{
|
||||
bool tso = false;
|
||||
u8 opcode = TX_ETHER_PKT;
|
||||
__be16 protocol = skb->protocol;
|
||||
u16 flags = 0;
|
||||
|
||||
if (protocol == __constant_htons(ETH_P_8021Q)) {
|
||||
struct vlan_ethhdr *vh = (struct vlan_ethhdr *)skb->data;
|
||||
protocol = vh->h_vlan_encapsulated_proto;
|
||||
flags = FLAGS_VLAN_TAGGED;
|
||||
}
|
||||
|
||||
if ((netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
|
||||
skb_shinfo(skb)->gso_size > 0) {
|
||||
@@ -1174,21 +1183,21 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
desc->total_hdr_length =
|
||||
skb_transport_offset(skb) + tcp_hdrlen(skb);
|
||||
|
||||
opcode = (skb->protocol == htons(ETH_P_IPV6)) ?
|
||||
opcode = (protocol == __constant_htons(ETH_P_IPV6)) ?
|
||||
TX_TCP_LSO6 : TX_TCP_LSO;
|
||||
tso = true;
|
||||
|
||||
} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
u8 l4proto;
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
if (protocol == __constant_htons(ETH_P_IP)) {
|
||||
l4proto = ip_hdr(skb)->protocol;
|
||||
|
||||
if (l4proto == IPPROTO_TCP)
|
||||
opcode = TX_TCP_PKT;
|
||||
else if(l4proto == IPPROTO_UDP)
|
||||
opcode = TX_UDP_PKT;
|
||||
} else if (skb->protocol == htons(ETH_P_IPV6)) {
|
||||
} else if (protocol == __constant_htons(ETH_P_IPV6)) {
|
||||
l4proto = ipv6_hdr(skb)->nexthdr;
|
||||
|
||||
if (l4proto == IPPROTO_TCP)
|
||||
@@ -1199,7 +1208,7 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
}
|
||||
desc->tcp_hdr_offset = skb_transport_offset(skb);
|
||||
desc->ip_hdr_offset = skb_network_offset(skb);
|
||||
netxen_set_tx_flags_opcode(desc, 0, opcode);
|
||||
netxen_set_tx_flags_opcode(desc, flags, opcode);
|
||||
return tso;
|
||||
}
|
||||
|
||||
|
||||
@@ -296,9 +296,8 @@ static int mdio_bus_suspend(struct device * dev, pm_message_t state)
|
||||
struct phy_driver *phydrv = to_phy_driver(drv);
|
||||
struct phy_device *phydev = to_phy_device(dev);
|
||||
|
||||
if ((!device_may_wakeup(phydev->dev.parent)) &&
|
||||
(phydrv && phydrv->suspend))
|
||||
ret = phydrv->suspend(phydev);
|
||||
if (drv && phydrv->suspend && !device_may_wakeup(phydev->dev.parent))
|
||||
ret = phydrv->suspend(phydev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -310,8 +309,7 @@ static int mdio_bus_resume(struct device * dev)
|
||||
struct phy_driver *phydrv = to_phy_driver(drv);
|
||||
struct phy_device *phydev = to_phy_device(dev);
|
||||
|
||||
if ((!device_may_wakeup(phydev->dev.parent)) &&
|
||||
(phydrv && phydrv->resume))
|
||||
if (drv && phydrv->resume && !device_may_wakeup(phydev->dev.parent))
|
||||
ret = phydrv->resume(phydev);
|
||||
|
||||
return ret;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user