Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e87cb5db authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (48 commits)
  LIB82596: correct data types for hardware addresses
  via-velocity: don't oops on MTU change (resend)
  Stop phy code from returning success to unknown ioctls.
  SET_NETDEV_DEV() in fec_mpc52xx.c
  net: smc911x: only enable for mpr2 on sh.
  e1000: Fix NAPI state bug when Rx complete
  sky2: turn of dynamic Tx watermark workaround (FE+ only)
  sky2: don't use AER routines
  sky2: revert to access PCI config via device space
  cxgb - fix stats
  cxgb - fix NAPI
  cxgb - fix T2 GSO
  ucc_geth: handle passing of RX-only and TX-only internal delay PHY connection type parameters
  phylib: marvell: add support for TX-only and RX-only Internal Delay
  phylib: add PHY interface modes for internal delay for tx and rx only
  skge: MTU changing fix
  skge: serial mode register values
  skge version 1.13
  skge: increase TX threshold for Jumbo
  skge: fiber link up/down fix
  ...
parents d894f451 9ec46c6d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -888,7 +888,7 @@ config SMC91X
	tristate "SMC 91C9x/91C1xxx support"
	select CRC32
	select MII
	depends on ARM || REDWOOD_5 || REDWOOD_6 || M32R || SUPERH || SOC_AU1X00 || BFIN
	depends on ARM || REDWOOD_5 || REDWOOD_6 || M32R || SUPERH || SOC_AU1X00 || BLACKFIN
	help
	  This is a driver for SMC's 91x series of Ethernet chipsets,
	  including the SMC91C94 and the SMC91C111. Say Y if you want it
@@ -926,7 +926,7 @@ config SMC911X
	tristate "SMSC LAN911[5678] support"
	select CRC32
	select MII
	depends on ARCH_PXA || SUPERH
	depends on ARCH_PXA || SH_MAGIC_PANEL_R2
	help
	  This is a driver for SMSC's LAN911x series of Ethernet chipsets
	  including the new LAN9115, LAN9116, LAN9117, and LAN9118.
+6 −0
Original line number Diff line number Diff line
@@ -1340,7 +1340,9 @@ static int amd8111e_close(struct net_device * dev)
	struct amd8111e_priv *lp = netdev_priv(dev);
	netif_stop_queue(dev);

#ifdef CONFIG_AMD8111E_NAPI
	napi_disable(&lp->napi);
#endif

	spin_lock_irq(&lp->lock);

@@ -1372,7 +1374,9 @@ static int amd8111e_open(struct net_device * dev )
					 dev->name, dev))
		return -EAGAIN;

#ifdef CONFIG_AMD8111E_NAPI
	napi_enable(&lp->napi);
#endif

	spin_lock_irq(&lp->lock);

@@ -1380,7 +1384,9 @@ static int amd8111e_open(struct net_device * dev )

	if(amd8111e_restart(dev)){
		spin_unlock_irq(&lp->lock);
#ifdef CONFIG_AMD8111E_NAPI
		napi_disable(&lp->napi);
#endif
		if (dev->irq)
			free_irq(dev->irq, dev);
		return -ENOMEM;
+1 −1
Original line number Diff line number Diff line
@@ -676,7 +676,7 @@ static void bf537mac_rx(struct net_device *dev)
	skb->protocol = eth_type_trans(skb, dev);
#if defined(BFIN_MAC_CSUM_OFFLOAD)
	skb->csum = current_rx_ptr->status.ip_payload_csum;
	skb->ip_summed = CHECKSUM_PARTIAL;
	skb->ip_summed = CHECKSUM_COMPLETE;
#endif

	netif_rx(skb);

drivers/net/chelsio/cxgb2.c

100644 → 100755
+53 −17
Original line number Diff line number Diff line
@@ -374,6 +374,8 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
	"TxInternalMACXmitError",
	"TxFramesWithExcessiveDeferral",
	"TxFCSErrors",
	"TxJumboFramesOk",
	"TxJumboOctetsOk",
	
	"RxOctetsOK",
	"RxOctetsBad",
@@ -392,15 +394,16 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
	"RxInRangeLengthErrors",
	"RxOutOfRangeLengthField",
	"RxFrameTooLongErrors",
	"RxJumboFramesOk",
	"RxJumboOctetsOk",

	/* Port stats */
	"RxPackets",
	"RxCsumGood",
	"TxPackets",
	"TxCsumOffload",
	"TxTso",
	"RxVlan",
	"TxVlan",
	"TxNeedHeadroom", 
	
	/* Interrupt stats */
	"rx drops",
@@ -463,23 +466,56 @@ static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
	const struct cmac_statistics *s;
	const struct sge_intr_counts *t;
	struct sge_port_stats ss;
	unsigned int len;

	s = mac->ops->statistics_update(mac, MAC_STATS_UPDATE_FULL);

	len = sizeof(u64)*(&s->TxFCSErrors + 1 - &s->TxOctetsOK);
	memcpy(data, &s->TxOctetsOK, len);
	data += len;

	len = sizeof(u64)*(&s->RxFrameTooLongErrors + 1 - &s->RxOctetsOK);
	memcpy(data, &s->RxOctetsOK, len);
	data += len;

	t = t1_sge_get_intr_counts(adapter->sge);
	t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss);
	memcpy(data, &ss, sizeof(ss));
	data += sizeof(ss);

	t = t1_sge_get_intr_counts(adapter->sge);
	*data++ = s->TxOctetsOK;
	*data++ = s->TxOctetsBad;
	*data++ = s->TxUnicastFramesOK;
	*data++ = s->TxMulticastFramesOK;
	*data++ = s->TxBroadcastFramesOK;
	*data++ = s->TxPauseFrames;
	*data++ = s->TxFramesWithDeferredXmissions;
	*data++ = s->TxLateCollisions;
	*data++ = s->TxTotalCollisions;
	*data++ = s->TxFramesAbortedDueToXSCollisions;
	*data++ = s->TxUnderrun;
	*data++ = s->TxLengthErrors;
	*data++ = s->TxInternalMACXmitError;
	*data++ = s->TxFramesWithExcessiveDeferral;
	*data++ = s->TxFCSErrors;
	*data++ = s->TxJumboFramesOK;
	*data++ = s->TxJumboOctetsOK;

	*data++ = s->RxOctetsOK;
	*data++ = s->RxOctetsBad;
	*data++ = s->RxUnicastFramesOK;
	*data++ = s->RxMulticastFramesOK;
	*data++ = s->RxBroadcastFramesOK;
	*data++ = s->RxPauseFrames;
	*data++ = s->RxFCSErrors;
	*data++ = s->RxAlignErrors;
	*data++ = s->RxSymbolErrors;
	*data++ = s->RxDataErrors;
	*data++ = s->RxSequenceErrors;
	*data++ = s->RxRuntErrors;
	*data++ = s->RxJabberErrors;
	*data++ = s->RxInternalMACRcvError;
	*data++ = s->RxInRangeLengthErrors;
	*data++ = s->RxOutOfRangeLengthField;
	*data++ = s->RxFrameTooLongErrors;
	*data++ = s->RxJumboFramesOK;
	*data++ = s->RxJumboOctetsOK;

	*data++ = ss.rx_cso_good;
	*data++ = ss.tx_cso;
	*data++ = ss.tx_tso;
	*data++ = ss.vlan_xtract;
	*data++ = ss.vlan_insert;
	*data++ = ss.tx_need_hdrroom;
	
	*data++ = t->rx_drops;
	*data++ = t->pure_rsps;
	*data++ = t->unhandled_irqs;

drivers/net/chelsio/pm3393.c

100644 → 100755
+45 −67
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@

#include <linux/crc32.h>

#define OFFSET(REG_ADDR)    (REG_ADDR << 2)
#define OFFSET(REG_ADDR)    ((REG_ADDR) << 2)

/* Max frame size PM3393 can handle. Includes Ethernet header and CRC. */
#define MAX_FRAME_SIZE  9600
@@ -428,69 +428,26 @@ static int pm3393_set_speed_duplex_fc(struct cmac *cmac, int speed, int duplex,
	return 0;
}

static void pm3393_rmon_update(struct adapter *adapter, u32 offs, u64 *val,
			       int over)
{
	u32 val0, val1, val2;

	t1_tpi_read(adapter, offs, &val0);
	t1_tpi_read(adapter, offs + 4, &val1);
	t1_tpi_read(adapter, offs + 8, &val2);

	*val &= ~0ull << 40;
	*val |= val0 & 0xffff;
	*val |= (val1 & 0xffff) << 16;
	*val |= (u64)(val2 & 0xff) << 32;

	if (over)
		*val += 1ull << 40;
#define RMON_UPDATE(mac, name, stat_name) \
{ \
	t1_tpi_read((mac)->adapter, OFFSET(name), &val0);     \
	t1_tpi_read((mac)->adapter, OFFSET((name)+1), &val1); \
	t1_tpi_read((mac)->adapter, OFFSET((name)+2), &val2); \
	(mac)->stats.stat_name = (u64)(val0 & 0xffff) | \
				 ((u64)(val1 & 0xffff) << 16) | \
				 ((u64)(val2 & 0xff) << 32) | \
				 ((mac)->stats.stat_name & \
					0xffffff0000000000ULL); \
	if (ro & \
	    (1ULL << ((name - SUNI1x10GEXP_REG_MSTAT_COUNTER_0_LOW) >> 2))) \
		(mac)->stats.stat_name += 1ULL << 40; \
}

static const struct cmac_statistics *pm3393_update_statistics(struct cmac *mac,
							      int flag)
{
	static struct {
		unsigned int reg;
		unsigned int offset;
	} hw_stats [] = {

#define HW_STAT(name, stat_name) \
	{ name, (&((struct cmac_statistics *)NULL)->stat_name) - (u64 *)NULL }

		/* Rx stats */
		HW_STAT(RxOctetsReceivedOK, RxOctetsOK),
		HW_STAT(RxUnicastFramesReceivedOK, RxUnicastFramesOK),
		HW_STAT(RxMulticastFramesReceivedOK, RxMulticastFramesOK),
		HW_STAT(RxBroadcastFramesReceivedOK, RxBroadcastFramesOK),
		HW_STAT(RxPAUSEMACCtrlFramesReceived, RxPauseFrames),
		HW_STAT(RxFrameCheckSequenceErrors, RxFCSErrors),
		HW_STAT(RxFramesLostDueToInternalMACErrors,
				RxInternalMACRcvError),
		HW_STAT(RxSymbolErrors, RxSymbolErrors),
		HW_STAT(RxInRangeLengthErrors, RxInRangeLengthErrors),
		HW_STAT(RxFramesTooLongErrors , RxFrameTooLongErrors),
		HW_STAT(RxJabbers, RxJabberErrors),
		HW_STAT(RxFragments, RxRuntErrors),
		HW_STAT(RxUndersizedFrames, RxRuntErrors),
		HW_STAT(RxJumboFramesReceivedOK, RxJumboFramesOK),
		HW_STAT(RxJumboOctetsReceivedOK, RxJumboOctetsOK),

		/* Tx stats */
		HW_STAT(TxOctetsTransmittedOK, TxOctetsOK),
		HW_STAT(TxFramesLostDueToInternalMACTransmissionError,
				TxInternalMACXmitError),
		HW_STAT(TxTransmitSystemError, TxFCSErrors),
		HW_STAT(TxUnicastFramesTransmittedOK, TxUnicastFramesOK),
		HW_STAT(TxMulticastFramesTransmittedOK, TxMulticastFramesOK),
		HW_STAT(TxBroadcastFramesTransmittedOK, TxBroadcastFramesOK),
		HW_STAT(TxPAUSEMACCtrlFramesTransmitted, TxPauseFrames),
		HW_STAT(TxJumboFramesReceivedOK, TxJumboFramesOK),
		HW_STAT(TxJumboOctetsReceivedOK, TxJumboOctetsOK)
	}, *p = hw_stats;
	u64	ro;
	u32	val0, val1, val2, val3;
	u64 *stats = (u64 *) &mac->stats;
	unsigned int i;

	/* Snap the counters */
	pmwrite(mac, SUNI1x10GEXP_REG_MSTAT_CONTROL,
@@ -504,14 +461,35 @@ static const struct cmac_statistics *pm3393_update_statistics(struct cmac *mac,
	ro = ((u64)val0 & 0xffff) | (((u64)val1 & 0xffff) << 16) |
		(((u64)val2 & 0xffff) << 32) | (((u64)val3 & 0xffff) << 48);

	for (i = 0; i < ARRAY_SIZE(hw_stats); i++) {
		unsigned reg = p->reg - SUNI1x10GEXP_REG_MSTAT_COUNTER_0_LOW;

		pm3393_rmon_update((mac)->adapter, OFFSET(p->reg),
				   stats + p->offset, ro & (reg >> 2));
	}

	/* Rx stats */
	RMON_UPDATE(mac, RxOctetsReceivedOK, RxOctetsOK);
	RMON_UPDATE(mac, RxUnicastFramesReceivedOK, RxUnicastFramesOK);
	RMON_UPDATE(mac, RxMulticastFramesReceivedOK, RxMulticastFramesOK);
	RMON_UPDATE(mac, RxBroadcastFramesReceivedOK, RxBroadcastFramesOK);
	RMON_UPDATE(mac, RxPAUSEMACCtrlFramesReceived, RxPauseFrames);
	RMON_UPDATE(mac, RxFrameCheckSequenceErrors, RxFCSErrors);
	RMON_UPDATE(mac, RxFramesLostDueToInternalMACErrors,
				RxInternalMACRcvError);
	RMON_UPDATE(mac, RxSymbolErrors, RxSymbolErrors);
	RMON_UPDATE(mac, RxInRangeLengthErrors, RxInRangeLengthErrors);
	RMON_UPDATE(mac, RxFramesTooLongErrors , RxFrameTooLongErrors);
	RMON_UPDATE(mac, RxJabbers, RxJabberErrors);
	RMON_UPDATE(mac, RxFragments, RxRuntErrors);
	RMON_UPDATE(mac, RxUndersizedFrames, RxRuntErrors);
	RMON_UPDATE(mac, RxJumboFramesReceivedOK, RxJumboFramesOK);
	RMON_UPDATE(mac, RxJumboOctetsReceivedOK, RxJumboOctetsOK);

	/* Tx stats */
	RMON_UPDATE(mac, TxOctetsTransmittedOK, TxOctetsOK);
	RMON_UPDATE(mac, TxFramesLostDueToInternalMACTransmissionError,
				TxInternalMACXmitError);
	RMON_UPDATE(mac, TxTransmitSystemError, TxFCSErrors);
	RMON_UPDATE(mac, TxUnicastFramesTransmittedOK, TxUnicastFramesOK);
	RMON_UPDATE(mac, TxMulticastFramesTransmittedOK, TxMulticastFramesOK);
	RMON_UPDATE(mac, TxBroadcastFramesTransmittedOK, TxBroadcastFramesOK);
	RMON_UPDATE(mac, TxPAUSEMACCtrlFramesTransmitted, TxPauseFrames);
	RMON_UPDATE(mac, TxJumboFramesReceivedOK, TxJumboFramesOK);
	RMON_UPDATE(mac, TxJumboOctetsReceivedOK, TxJumboOctetsOK);

	return &mac->stats;
}
Loading