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

Commit 5bcaa155 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'upstream' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

parents 1e231efe 3a48c4c2
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -397,7 +397,7 @@ config SUN3LANCE
	  If you're not building a kernel for a Sun 3, say N.

config SUN3_82586
	tristate "Sun3 on-board Intel 82586 support"
	bool "Sun3 on-board Intel 82586 support"
	depends on NET_ETHERNET && SUN3
	help
	  This driver enables support for the on-board Intel 82586 based
@@ -1924,12 +1924,15 @@ config R8169_VLAN
	  If in doubt, say Y.

config SIS190
	tristate "SiS190 gigabit ethernet support"
	tristate "SiS190/SiS191 gigabit ethernet support"
	depends on PCI
	select CRC32
	select MII
	---help---
	  Say Y here if you have a SiS 190 PCI Gigabit Ethernet adapter.
	  Say Y here if you have a SiS 190 PCI Fast Ethernet adapter or
	  a SiS 191 PCI Gigabit Ethernet adapter. Both are expected to
	  appear in lan on motherboard designs which are based on SiS 965
	  and SiS 966 south bridge.

	  To compile this driver as a module, choose M here: the module
	  will be called sis190.  This is recommended.
+2 −2
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ struct t1_rx_mode {

static inline u8 *t1_get_next_mcaddr(struct t1_rx_mode *rm)
{
	u8 *addr = 0;
	u8 *addr = NULL;

	if (rm->idx++ < rm->dev->mc_count) {
		addr = rm->list->dmi_addr;
@@ -190,7 +190,7 @@ struct sge;
struct peespi;

struct adapter {
	u8 *regs;
	u8 __iomem *regs;
	struct pci_dev *pdev;
	unsigned long registered_device_map;
	unsigned long open_device_map;
+1 −1
Original line number Diff line number Diff line
@@ -824,7 +824,7 @@ static void cxgb_proc_cleanup(struct adapter *adapter,
static int t1_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
{
        struct adapter *adapter = dev->priv;
        struct mii_ioctl_data *data = (struct mii_ioctl_data *)&req->ifr_data;
        struct mii_ioctl_data *data = if_mii(req);

	switch (cmd) {
        case SIOCGMIIPHY:
+1 −1
Original line number Diff line number Diff line
@@ -1270,7 +1270,7 @@ struct e1000_hw_stats {

/* Structure containing variables used by the shared code (e1000_hw.c) */
struct e1000_hw {
    uint8_t *hw_addr;
    uint8_t __iomem *hw_addr;
    uint8_t *flash_address;
    e1000_mac_type mac_type;
    e1000_phy_type phy_type;
+60 −79
Original line number Diff line number Diff line
@@ -58,11 +58,10 @@

#define INT_CAUSE_UNMASK_ALL		0x0007ffff
#define INT_CAUSE_UNMASK_ALL_EXT	0x0011ffff
#ifdef MV643XX_RX_QUEUE_FILL_ON_TASK
#define INT_CAUSE_MASK_ALL		0x00000000
#define INT_CAUSE_MASK_ALL_EXT		0x00000000
#define INT_CAUSE_CHECK_BITS		INT_CAUSE_UNMASK_ALL
#define INT_CAUSE_CHECK_BITS_EXT	INT_CAUSE_UNMASK_ALL_EXT
#endif

#ifdef MV643XX_CHECKSUM_OFFLOAD_TX
#define MAX_DESCS_PER_SKB	(MAX_SKB_FRAGS + 1)
@@ -259,14 +258,13 @@ static void mv643xx_eth_update_mac_address(struct net_device *dev)
static void mv643xx_eth_set_rx_mode(struct net_device *dev)
{
	struct mv643xx_private *mp = netdev_priv(dev);
	u32 config_reg;

	config_reg = ethernet_get_config_reg(mp->port_num);
	if (dev->flags & IFF_PROMISC)
		config_reg |= (u32) MV643XX_ETH_UNICAST_PROMISCUOUS_MODE;
		mp->port_config |= (u32) MV643XX_ETH_UNICAST_PROMISCUOUS_MODE;
	else
		config_reg &= ~(u32) MV643XX_ETH_UNICAST_PROMISCUOUS_MODE;
	ethernet_set_config_reg(mp->port_num, config_reg);
		mp->port_config &= ~(u32) MV643XX_ETH_UNICAST_PROMISCUOUS_MODE;

	mv_write(MV643XX_ETH_PORT_CONFIG_REG(mp->port_num), mp->port_config);
}

/*
@@ -369,15 +367,6 @@ static int mv643xx_eth_free_tx_queue(struct net_device *dev,

			dev_kfree_skb_irq(pkt_info.return_info);
			released = 0;

			/*
			 * Decrement the number of outstanding skbs counter on
			 * the TX queue.
			 */
			if (mp->tx_ring_skbs == 0)
				panic("ERROR - TX outstanding SKBs"
						" counter is corrupted");
			mp->tx_ring_skbs--;
		} else
			dma_unmap_page(NULL, pkt_info.buf_ptr,
					pkt_info.byte_cnt, DMA_TO_DEVICE);
@@ -412,15 +401,13 @@ static int mv643xx_eth_receive_queue(struct net_device *dev)
	struct pkt_info pkt_info;

#ifdef MV643XX_NAPI
	while (eth_port_receive(mp, &pkt_info) == ETH_OK && budget > 0) {
	while (budget-- > 0 && eth_port_receive(mp, &pkt_info) == ETH_OK) {
#else
	while (eth_port_receive(mp, &pkt_info) == ETH_OK) {
#endif
		mp->rx_ring_skbs--;
		received_packets++;
#ifdef MV643XX_NAPI
		budget--;
#endif

		/* Update statistics. Note byte count includes 4 byte CRC count */
		stats->rx_packets++;
		stats->rx_bytes += pkt_info.byte_cnt;
@@ -1044,9 +1031,6 @@ static void mv643xx_tx(struct net_device *dev)
						DMA_TO_DEVICE);

			dev_kfree_skb_irq(pkt_info.return_info);

			if (mp->tx_ring_skbs)
				mp->tx_ring_skbs--;
		} else
			dma_unmap_page(NULL, pkt_info.buf_ptr,
					pkt_info.byte_cnt, DMA_TO_DEVICE);
@@ -1189,7 +1173,6 @@ static int mv643xx_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
		pkt_info.buf_ptr = dma_map_single(NULL, skb->data, skb->len,
							DMA_TO_DEVICE);
		pkt_info.return_info = skb;
		mp->tx_ring_skbs++;
		status = eth_port_send(mp, &pkt_info);
		if ((status == ETH_ERROR) || (status == ETH_QUEUE_FULL))
			printk(KERN_ERR "%s: Error on transmitting packet\n",
@@ -1274,7 +1257,6 @@ static int mv643xx_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
				pkt_info.cmd_sts |= ETH_TX_ENABLE_INTERRUPT |
							ETH_TX_LAST_DESC;
				pkt_info.return_info = skb;
				mp->tx_ring_skbs++;
			} else {
				pkt_info.return_info = 0;
			}
@@ -1311,7 +1293,6 @@ static int mv643xx_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
	pkt_info.buf_ptr = dma_map_single(NULL, skb->data, skb->len,
								DMA_TO_DEVICE);
	pkt_info.return_info = skb;
	mp->tx_ring_skbs++;
	status = eth_port_send(mp, &pkt_info);
	if ((status == ETH_ERROR) || (status == ETH_QUEUE_FULL))
		printk(KERN_ERR "%s: Error on transmitting packet\n",
@@ -1356,6 +1337,43 @@ static struct net_device_stats *mv643xx_eth_get_stats(struct net_device *dev)
	return &mp->stats;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
static inline void mv643xx_enable_irq(struct mv643xx_private *mp)
{
	int port_num = mp->port_num;
	unsigned long flags;

	spin_lock_irqsave(&mp->lock, flags);
	mv_write(MV643XX_ETH_INTERRUPT_MASK_REG(port_num),
					INT_CAUSE_UNMASK_ALL);
	mv_write(MV643XX_ETH_INTERRUPT_EXTEND_MASK_REG(port_num),
					INT_CAUSE_UNMASK_ALL_EXT);
	spin_unlock_irqrestore(&mp->lock, flags);
}

static inline void mv643xx_disable_irq(struct mv643xx_private *mp)
{
	int port_num = mp->port_num;
	unsigned long flags;

	spin_lock_irqsave(&mp->lock, flags);
	mv_write(MV643XX_ETH_INTERRUPT_MASK_REG(port_num),
					INT_CAUSE_MASK_ALL);
	mv_write(MV643XX_ETH_INTERRUPT_EXTEND_MASK_REG(port_num),
					INT_CAUSE_MASK_ALL_EXT);
	spin_unlock_irqrestore(&mp->lock, flags);
}

static void mv643xx_netpoll(struct net_device *netdev)
{
	struct mv643xx_private *mp = netdev_priv(netdev);

	mv643xx_disable_irq(mp);
	mv643xx_eth_int_handler(netdev->irq, netdev, NULL);
	mv643xx_enable_irq(mp);
}
#endif

/*/
 * mv643xx_eth_probe
 *
@@ -1406,6 +1424,10 @@ static int mv643xx_eth_probe(struct device *ddev)
	dev->weight = 64;
#endif

#ifdef CONFIG_NET_POLL_CONTROLLER
	dev->poll_controller = mv643xx_netpoll;
#endif

	dev->watchdog_timeo = 2 * HZ;
	dev->tx_queue_len = mp->tx_ring_size;
	dev->base_addr = 0;
@@ -1883,6 +1905,9 @@ static void eth_port_start(struct mv643xx_private *mp)
	/* Enable port Rx. */
	mv_write(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(port_num),
						mp->port_rx_queue_command);

	/* Disable port bandwidth limits by clearing MTU register */
	mv_write(MV643XX_ETH_MAXIMUM_TRANSMIT_UNIT(port_num), 0);
}

/*
@@ -2292,34 +2317,6 @@ static void eth_port_reset(unsigned int port_num)
	mv_write(MV643XX_ETH_PORT_SERIAL_CONTROL_REG(port_num), reg_data);
}

/*
 * ethernet_set_config_reg - Set specified bits in configuration register.
 *
 * DESCRIPTION:
 *	This function sets specified bits in the given ethernet
 *	configuration register.
 *
 * INPUT:
 *	unsigned int	eth_port_num	Ethernet Port number.
 *	unsigned int	value		32 bit value.
 *
 * OUTPUT:
 *	The set bits in the value parameter are set in the configuration
 *	register.
 *
 * RETURN:
 *	None.
 *
 */
static void ethernet_set_config_reg(unsigned int eth_port_num,
							unsigned int value)
{
	unsigned int eth_config_reg;

	eth_config_reg = mv_read(MV643XX_ETH_PORT_CONFIG_REG(eth_port_num));
	eth_config_reg |= value;
	mv_write(MV643XX_ETH_PORT_CONFIG_REG(eth_port_num), eth_config_reg);
}

static int eth_port_autoneg_supported(unsigned int eth_port_num)
{
@@ -2345,31 +2342,6 @@ static int eth_port_link_is_up(unsigned int eth_port_num)
	return 0;
}

/*
 * ethernet_get_config_reg - Get the port configuration register
 *
 * DESCRIPTION:
 *	This function returns the configuration register value of the given
 *	ethernet port.
 *
 * INPUT:
 *	unsigned int	eth_port_num	Ethernet Port number.
 *
 * OUTPUT:
 *	None.
 *
 * RETURN:
 *	Port configuration register value.
 */
static unsigned int ethernet_get_config_reg(unsigned int eth_port_num)
{
	unsigned int eth_config_reg;

	eth_config_reg = mv_read(MV643XX_ETH_PORT_CONFIG_EXTEND_REG
								(eth_port_num));
	return eth_config_reg;
}

/*
 * eth_port_read_smi_reg - Read PHY registers
 *
@@ -2528,6 +2500,9 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp,
		return ETH_ERROR;
	}

	mp->tx_ring_skbs++;
	BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size);

	/* Get the Tx Desc ring indexes */
	tx_desc_curr = mp->tx_curr_desc_q;
	tx_desc_used = mp->tx_used_desc_q;
@@ -2594,6 +2569,9 @@ static ETH_FUNC_RET_STATUS eth_port_send(struct mv643xx_private *mp,
	if (mp->tx_resource_err)
		return ETH_QUEUE_FULL;

	mp->tx_ring_skbs++;
	BUG_ON(mp->tx_ring_skbs > mp->tx_ring_size);

	/* Get the Tx Desc ring indexes */
	tx_desc_curr = mp->tx_curr_desc_q;
	tx_desc_used = mp->tx_used_desc_q;
@@ -2694,6 +2672,9 @@ static ETH_FUNC_RET_STATUS eth_tx_return_desc(struct mv643xx_private *mp,
	/* Any Tx return cancels the Tx resource error status */
	mp->tx_resource_err = 0;

	BUG_ON(mp->tx_ring_skbs == 0);
	mp->tx_ring_skbs--;

	return ETH_OK;
}

Loading