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

Commit 4162cf64 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (67 commits)
  cxgb4vf: recover from failure in cxgb4vf_open()
  netfilter: ebtables: make broute table work again
  netfilter: fix race in conntrack between dump_table and destroy
  ah: reload pointers to skb data after calling skb_cow_data()
  ah: update maximum truncated ICV length
  xfrm: check trunc_len in XFRMA_ALG_AUTH_TRUNC
  ehea: Increase the skb array usage
  net/fec: remove config FEC2 as it's used nowhere
  pcnet_cs: add new_id
  tcp: disallow bind() to reuse addr/port
  net/r8169: Update the function of parsing firmware
  net: ppp: use {get,put}_unaligned_be{16,32}
  CAIF: Fix IPv6 support in receive path for GPRS/3G
  arp: allow to invalidate specific ARP entries
  net_sched: factorize qdisc stats handling
  mlx4: Call alloc_etherdev to allocate RX and TX queues
  net: Add alloc_netdev_mqs function
  caif: don't set connection request param size before copying data
  cxgb4vf: fix mailbox data/control coherency domain race
  qlcnic: change module parameter permissions
  ...
parents fb7b5a95 343a8d13
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -167,6 +167,7 @@ rx_ccid = 2
seq_window = 100
seq_window = 100
	The initial sequence window (sec. 7.5.2) of the sender. This influences
	The initial sequence window (sec. 7.5.2) of the sender. This influences
	the local ackno validity and the remote seqno validity windows (7.5.1).
	the local ackno validity and the remote seqno validity windows (7.5.1).
	Values in the range Wmin = 32 (RFC 4340, 7.5.2) up to 2^32-1 can be set.


tx_qlen = 5
tx_qlen = 5
	The size of the transmit buffer in packets. A value of 0 corresponds
	The size of the transmit buffer in packets. A value of 0 corresponds
+12 −7
Original line number Original line Diff line number Diff line
@@ -1926,6 +1926,7 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) {
  const struct firmware *fw;
  const struct firmware *fw;
  unsigned long start_address;
  unsigned long start_address;
  const struct ihex_binrec *rec;
  const struct ihex_binrec *rec;
  const char *errmsg = 0;
  int res;
  int res;


  res = request_ihex_firmware(&fw, "atmsar11.fw", &dev->pci_dev->dev);
  res = request_ihex_firmware(&fw, "atmsar11.fw", &dev->pci_dev->dev);
@@ -1937,8 +1938,8 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) {
  /* First record contains just the start address */
  /* First record contains just the start address */
  rec = (const struct ihex_binrec *)fw->data;
  rec = (const struct ihex_binrec *)fw->data;
  if (be16_to_cpu(rec->len) != sizeof(__be32) || be32_to_cpu(rec->addr)) {
  if (be16_to_cpu(rec->len) != sizeof(__be32) || be32_to_cpu(rec->addr)) {
    PRINTK (KERN_ERR, "Bad microcode data (no start record)");
    errmsg = "no start record";
    return -EINVAL;
    goto fail;
  }
  }
  start_address = be32_to_cpup((__be32 *)rec->data);
  start_address = be32_to_cpup((__be32 *)rec->data);


@@ -1950,12 +1951,12 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) {
    PRINTD (DBG_LOAD, "starting region (%x, %u)", be32_to_cpu(rec->addr),
    PRINTD (DBG_LOAD, "starting region (%x, %u)", be32_to_cpu(rec->addr),
	    be16_to_cpu(rec->len));
	    be16_to_cpu(rec->len));
    if (be16_to_cpu(rec->len) > 4 * MAX_TRANSFER_DATA) {
    if (be16_to_cpu(rec->len) > 4 * MAX_TRANSFER_DATA) {
	    PRINTK (KERN_ERR, "Bad microcode data (record too long)");
	    errmsg = "record too long";
	    return -EINVAL;
	    goto fail;
    }
    }
    if (be16_to_cpu(rec->len) & 3) {
    if (be16_to_cpu(rec->len) & 3) {
	    PRINTK (KERN_ERR, "Bad microcode data (odd number of bytes)");
	    errmsg = "odd number of bytes";
	    return -EINVAL;
	    goto fail;
    }
    }
    res = loader_write(lb, dev, rec);
    res = loader_write(lb, dev, rec);
    if (res)
    if (res)
@@ -1970,6 +1971,10 @@ static int __devinit ucode_init (loader_block * lb, amb_dev * dev) {
    res = loader_start(lb, dev, start_address);
    res = loader_start(lb, dev, start_address);


  return res;
  return res;
fail:
  release_firmware(fw);
  PRINTK(KERN_ERR, "Bad microcode data (%s)", errmsg);
  return -EINVAL;
}
}


/********** give adapter parameters **********/
/********** give adapter parameters **********/
+1 −8
Original line number Original line Diff line number Diff line
@@ -1944,19 +1944,12 @@ config 68360_ENET
config FEC
config FEC
	bool "FEC ethernet controller (of ColdFire and some i.MX CPUs)"
	bool "FEC ethernet controller (of ColdFire and some i.MX CPUs)"
	depends on M523x || M527x || M5272 || M528x || M520x || M532x || \
	depends on M523x || M527x || M5272 || M528x || M520x || M532x || \
		MACH_MX27 || ARCH_MX35 || ARCH_MX25 || ARCH_MX5
		MACH_MX27 || ARCH_MX35 || ARCH_MX25 || ARCH_MX5 || SOC_IMX28
	select PHYLIB
	select PHYLIB
	help
	help
	  Say Y here if you want to use the built-in 10/100 Fast ethernet
	  Say Y here if you want to use the built-in 10/100 Fast ethernet
	  controller on some Motorola ColdFire and Freescale i.MX processors.
	  controller on some Motorola ColdFire and Freescale i.MX processors.


config FEC2
	bool "Second FEC ethernet controller (on some ColdFire CPUs)"
	depends on FEC
	help
	  Say Y here if you want to use the second built-in 10/100 Fast
	  ethernet controller on some Motorola ColdFire processors.

config FEC_MPC52xx
config FEC_MPC52xx
	tristate "MPC52xx FEC driver"
	tristate "MPC52xx FEC driver"
	depends on PPC_MPC52xx && PPC_BESTCOMM
	depends on PPC_MPC52xx && PPC_BESTCOMM
+37 −37
Original line number Original line Diff line number Diff line
@@ -8,6 +8,11 @@
 * Licensed under the GPL-2 or later.
 * Licensed under the GPL-2 or later.
 */
 */


#define DRV_VERSION	"1.1"
#define DRV_DESC	"Blackfin on-chip Ethernet MAC driver"

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
@@ -41,12 +46,7 @@


#include "bfin_mac.h"
#include "bfin_mac.h"


#define DRV_NAME	"bfin_mac"
MODULE_AUTHOR("Bryan Wu, Luke Yang");
#define DRV_VERSION	"1.1"
#define DRV_AUTHOR	"Bryan Wu, Luke Yang"
#define DRV_DESC	"Blackfin on-chip Ethernet MAC driver"

MODULE_AUTHOR(DRV_AUTHOR);
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION(DRV_DESC);
MODULE_DESCRIPTION(DRV_DESC);
MODULE_ALIAS("platform:bfin_mac");
MODULE_ALIAS("platform:bfin_mac");
@@ -189,8 +189,7 @@ static int desc_list_init(void)
		/* allocate a new skb for next time receive */
		/* allocate a new skb for next time receive */
		new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
		new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
		if (!new_skb) {
		if (!new_skb) {
			printk(KERN_NOTICE DRV_NAME
			pr_notice("init: low on mem - packet dropped\n");
			       ": init: low on mem - packet dropped\n");
			goto init_error;
			goto init_error;
		}
		}
		skb_reserve(new_skb, NET_IP_ALIGN);
		skb_reserve(new_skb, NET_IP_ALIGN);
@@ -240,7 +239,7 @@ static int desc_list_init(void)


init_error:
init_error:
	desc_list_free();
	desc_list_free();
	printk(KERN_ERR DRV_NAME ": kmalloc failed\n");
	pr_err("kmalloc failed\n");
	return -ENOMEM;
	return -ENOMEM;
}
}


@@ -259,8 +258,7 @@ static int bfin_mdio_poll(void)
	while ((bfin_read_EMAC_STAADD()) & STABUSY) {
	while ((bfin_read_EMAC_STAADD()) & STABUSY) {
		udelay(1);
		udelay(1);
		if (timeout_cnt-- < 0) {
		if (timeout_cnt-- < 0) {
			printk(KERN_ERR DRV_NAME
			pr_err("wait MDC/MDIO transaction to complete timeout\n");
			": wait MDC/MDIO transaction to complete timeout\n");
			return -ETIMEDOUT;
			return -ETIMEDOUT;
		}
		}
	}
	}
@@ -350,9 +348,9 @@ static void bfin_mac_adjust_link(struct net_device *dev)
					opmode &= ~RMII_10;
					opmode &= ~RMII_10;
					break;
					break;
				default:
				default:
					printk(KERN_WARNING
					netdev_warn(dev,
						"%s: Ack!  Speed (%d) is not 10/100!\n",
						"Ack! Speed (%d) is not 10/100!\n",
						DRV_NAME, phydev->speed);
						phydev->speed);
					break;
					break;
				}
				}
				bfin_write_EMAC_OPMODE(opmode);
				bfin_write_EMAC_OPMODE(opmode);
@@ -417,14 +415,13 @@ static int mii_probe(struct net_device *dev, int phy_mode)


	/* now we are supposed to have a proper phydev, to attach to... */
	/* now we are supposed to have a proper phydev, to attach to... */
	if (!phydev) {
	if (!phydev) {
		printk(KERN_INFO "%s: Don't found any phy device at all\n",
		netdev_err(dev, "no phy device found\n");
			dev->name);
		return -ENODEV;
		return -ENODEV;
	}
	}


	if (phy_mode != PHY_INTERFACE_MODE_RMII &&
	if (phy_mode != PHY_INTERFACE_MODE_RMII &&
		phy_mode != PHY_INTERFACE_MODE_MII) {
		phy_mode != PHY_INTERFACE_MODE_MII) {
		printk(KERN_INFO "%s: Invalid phy interface mode\n", dev->name);
		netdev_err(dev, "invalid phy interface mode\n");
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -432,7 +429,7 @@ static int mii_probe(struct net_device *dev, int phy_mode)
			0, phy_mode);
			0, phy_mode);


	if (IS_ERR(phydev)) {
	if (IS_ERR(phydev)) {
		printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
		netdev_err(dev, "could not attach PHY\n");
		return PTR_ERR(phydev);
		return PTR_ERR(phydev);
	}
	}


@@ -453,10 +450,9 @@ static int mii_probe(struct net_device *dev, int phy_mode)
	lp->old_duplex = -1;
	lp->old_duplex = -1;
	lp->phydev = phydev;
	lp->phydev = phydev;


	printk(KERN_INFO "%s: attached PHY driver [%s] "
	pr_info("attached PHY driver [%s] "
	       "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)"
	        "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)@sclk=%dMHz)\n",
	       "@sclk=%dMHz)\n",
	        phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
	       DRV_NAME, phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
	        MDC_CLK, mdc_div, sclk/1000000);
	        MDC_CLK, mdc_div, sclk/1000000);


	return 0;
	return 0;
@@ -502,7 +498,7 @@ bfin_mac_ethtool_setsettings(struct net_device *dev, struct ethtool_cmd *cmd)
static void bfin_mac_ethtool_getdrvinfo(struct net_device *dev,
static void bfin_mac_ethtool_getdrvinfo(struct net_device *dev,
					struct ethtool_drvinfo *info)
					struct ethtool_drvinfo *info)
{
{
	strcpy(info->driver, DRV_NAME);
	strcpy(info->driver, KBUILD_MODNAME);
	strcpy(info->version, DRV_VERSION);
	strcpy(info->version, DRV_VERSION);
	strcpy(info->fw_version, "N/A");
	strcpy(info->fw_version, "N/A");
	strcpy(info->bus_info, dev_name(&dev->dev));
	strcpy(info->bus_info, dev_name(&dev->dev));
@@ -562,7 +558,7 @@ static const struct ethtool_ops bfin_mac_ethtool_ops = {
};
};


/**************************************************************************/
/**************************************************************************/
void setup_system_regs(struct net_device *dev)
static void setup_system_regs(struct net_device *dev)
{
{
	struct bfin_mac_local *lp = netdev_priv(dev);
	struct bfin_mac_local *lp = netdev_priv(dev);
	int i;
	int i;
@@ -592,6 +588,10 @@ void setup_system_regs(struct net_device *dev)


	bfin_write_EMAC_MMC_CTL(RSTC | CROLL);
	bfin_write_EMAC_MMC_CTL(RSTC | CROLL);


	/* Set vlan regs to let 1522 bytes long packets pass through */
	bfin_write_EMAC_VLAN1(lp->vlan1_mask);
	bfin_write_EMAC_VLAN2(lp->vlan2_mask);

	/* Initialize the TX DMA channel registers */
	/* Initialize the TX DMA channel registers */
	bfin_write_DMA2_X_COUNT(0);
	bfin_write_DMA2_X_COUNT(0);
	bfin_write_DMA2_X_MODIFY(4);
	bfin_write_DMA2_X_MODIFY(4);
@@ -827,8 +827,7 @@ static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
		while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) && (--timeout_cnt))
		while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) && (--timeout_cnt))
			udelay(1);
			udelay(1);
		if (timeout_cnt == 0)
		if (timeout_cnt == 0)
			printk(KERN_ERR DRV_NAME
			netdev_err(netdev, "timestamp the TX packet failed\n");
					": fails to timestamp the TX packet\n");
		else {
		else {
			struct skb_shared_hwtstamps shhwtstamps;
			struct skb_shared_hwtstamps shhwtstamps;
			u64 ns;
			u64 ns;
@@ -1083,8 +1082,7 @@ static void bfin_mac_rx(struct net_device *dev)
	 * we which case we simply drop the packet
	 * we which case we simply drop the packet
	 */
	 */
	if (current_rx_ptr->status.status_word & RX_ERROR_MASK) {
	if (current_rx_ptr->status.status_word & RX_ERROR_MASK) {
		printk(KERN_NOTICE DRV_NAME
		netdev_notice(dev, "rx: receive error - packet dropped\n");
		       ": rx: receive error - packet dropped\n");
		dev->stats.rx_dropped++;
		dev->stats.rx_dropped++;
		goto out;
		goto out;
	}
	}
@@ -1094,8 +1092,7 @@ static void bfin_mac_rx(struct net_device *dev)


	new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
	new_skb = dev_alloc_skb(PKT_BUF_SZ + NET_IP_ALIGN);
	if (!new_skb) {
	if (!new_skb) {
		printk(KERN_NOTICE DRV_NAME
		netdev_notice(dev, "rx: low on mem - packet dropped\n");
		       ": rx: low on mem - packet dropped\n");
		dev->stats.rx_dropped++;
		dev->stats.rx_dropped++;
		goto out;
		goto out;
	}
	}
@@ -1213,7 +1210,7 @@ static int bfin_mac_enable(struct phy_device *phydev)
	int ret;
	int ret;
	u32 opmode;
	u32 opmode;


	pr_debug("%s: %s\n", DRV_NAME, __func__);
	pr_debug("%s\n", __func__);


	/* Set RX DMA */
	/* Set RX DMA */
	bfin_write_DMA1_NEXT_DESC_PTR(&(rx_list_head->desc_a));
	bfin_write_DMA1_NEXT_DESC_PTR(&(rx_list_head->desc_a));
@@ -1323,7 +1320,7 @@ static void bfin_mac_set_multicast_list(struct net_device *dev)
	u32 sysctl;
	u32 sysctl;


	if (dev->flags & IFF_PROMISC) {
	if (dev->flags & IFF_PROMISC) {
		printk(KERN_INFO "%s: set to promisc mode\n", dev->name);
		netdev_info(dev, "set promisc mode\n");
		sysctl = bfin_read_EMAC_OPMODE();
		sysctl = bfin_read_EMAC_OPMODE();
		sysctl |= PR;
		sysctl |= PR;
		bfin_write_EMAC_OPMODE(sysctl);
		bfin_write_EMAC_OPMODE(sysctl);
@@ -1393,7 +1390,7 @@ static int bfin_mac_open(struct net_device *dev)
	 * address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
	 * address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
	 */
	 */
	if (!is_valid_ether_addr(dev->dev_addr)) {
	if (!is_valid_ether_addr(dev->dev_addr)) {
		printk(KERN_WARNING DRV_NAME ": no valid ethernet hw addr\n");
		netdev_warn(dev, "no valid ethernet hw addr\n");
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -1527,6 +1524,9 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
		goto out_err_mii_probe;
		goto out_err_mii_probe;
	}
	}


	lp->vlan1_mask = ETH_P_8021Q | mii_bus_data->vlan1_mask;
	lp->vlan2_mask = ETH_P_8021Q | mii_bus_data->vlan2_mask;

	/* Fill in the fields of the device structure with ethernet values. */
	/* Fill in the fields of the device structure with ethernet values. */
	ether_setup(ndev);
	ether_setup(ndev);


@@ -1558,7 +1558,7 @@ static int __devinit bfin_mac_probe(struct platform_device *pdev)
	bfin_mac_hwtstamp_init(ndev);
	bfin_mac_hwtstamp_init(ndev);


	/* now, print out the card info, in a short format.. */
	/* now, print out the card info, in a short format.. */
	dev_info(&pdev->dev, "%s, Version %s\n", DRV_DESC, DRV_VERSION);
	netdev_info(ndev, "%s, Version %s\n", DRV_DESC, DRV_VERSION);


	return 0;
	return 0;


@@ -1650,7 +1650,7 @@ static int __devinit bfin_mii_bus_probe(struct platform_device *pdev)
	 * so set the GPIO pins to Ethernet mode
	 * so set the GPIO pins to Ethernet mode
	 */
	 */
	pin_req = mii_bus_pd->mac_peripherals;
	pin_req = mii_bus_pd->mac_peripherals;
	rc = peripheral_request_list(pin_req, DRV_NAME);
	rc = peripheral_request_list(pin_req, KBUILD_MODNAME);
	if (rc) {
	if (rc) {
		dev_err(&pdev->dev, "Requesting peripherals failed!\n");
		dev_err(&pdev->dev, "Requesting peripherals failed!\n");
		return rc;
		return rc;
@@ -1739,7 +1739,7 @@ static struct platform_driver bfin_mac_driver = {
	.resume = bfin_mac_resume,
	.resume = bfin_mac_resume,
	.suspend = bfin_mac_suspend,
	.suspend = bfin_mac_suspend,
	.driver = {
	.driver = {
		.name = DRV_NAME,
		.name = KBUILD_MODNAME,
		.owner	= THIS_MODULE,
		.owner	= THIS_MODULE,
	},
	},
};
};
+10 −1
Original line number Original line Diff line number Diff line
@@ -17,7 +17,14 @@
#include <linux/etherdevice.h>
#include <linux/etherdevice.h>
#include <linux/bfin_mac.h>
#include <linux/bfin_mac.h>


/*
 * Disable hardware checksum for bug #5600 if writeback cache is
 * enabled. Otherwize, corrupted RX packet will be sent up stack
 * without error mark.
 */
#ifndef CONFIG_BFIN_EXTMEM_WRITEBACK
#define BFIN_MAC_CSUM_OFFLOAD
#define BFIN_MAC_CSUM_OFFLOAD
#endif


#define TX_RECLAIM_JIFFIES (HZ / 5)
#define TX_RECLAIM_JIFFIES (HZ / 5)


@@ -68,7 +75,6 @@ struct bfin_mac_local {
	 */
	 */
	struct net_device_stats stats;
	struct net_device_stats stats;


	unsigned char Mac[6];	/* MAC address of the board */
	spinlock_t lock;
	spinlock_t lock;


	int wol;		/* Wake On Lan */
	int wol;		/* Wake On Lan */
@@ -76,6 +82,9 @@ struct bfin_mac_local {
	struct timer_list tx_reclaim_timer;
	struct timer_list tx_reclaim_timer;
	struct net_device *ndev;
	struct net_device *ndev;


	/* Data for EMAC_VLAN1 regs */
	u16 vlan1_mask, vlan2_mask;

	/* MII and PHY stuffs */
	/* MII and PHY stuffs */
	int old_link;          /* used by bf537_adjust_link */
	int old_link;          /* used by bf537_adjust_link */
	int old_speed;
	int old_speed;
Loading