diff options
Diffstat (limited to 'drivers/net/ethernet/ibm')
| -rw-r--r-- | drivers/net/ethernet/ibm/ehea/ehea_ethtool.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/ehea/ehea_main.c | 13 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/ehea/ehea_qmr.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/core.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/core.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/debug.h | 14 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/mal.c | 22 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/mal.h | 20 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/rgmii.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/rgmii.h | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/tah.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/tah.h | 14 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/zmii.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/zmii.h | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/ibmveth.c | 46 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/ibmveth.h | 4 | 
16 files changed, 101 insertions, 91 deletions
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c b/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c index 95837b99a46..85a3866459c 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c @@ -63,8 +63,8 @@ static int ehea_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)  		cmd->duplex = port->full_duplex == 1 ?  						     DUPLEX_FULL : DUPLEX_HALF;  	} else { -		speed = ~0; -		cmd->duplex = -1; +		speed = SPEED_UNKNOWN; +		cmd->duplex = DUPLEX_UNKNOWN;  	}  	ethtool_cmd_speed_set(cmd, speed); @@ -278,5 +278,5 @@ static const struct ethtool_ops ehea_ethtool_ops = {  void ehea_set_ethtool_ops(struct net_device *netdev)  { -	SET_ETHTOOL_OPS(netdev, &ehea_ethtool_ops); +	netdev->ethtool_ops = &ehea_ethtool_ops;  } diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c index 2d1c6bdd361..a0b418e007a 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_main.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c @@ -28,6 +28,7 @@  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include <linux/device.h>  #include <linux/in.h>  #include <linux/ip.h>  #include <linux/tcp.h> @@ -490,7 +491,7 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr,  		skb_arr[index] = skb;  		tmp_addr = ehea_map_vaddr(skb->data);  		if (tmp_addr == -1) { -			dev_kfree_skb(skb); +			dev_consume_skb_any(skb);  			q_skba->os_skbs = fill_wqes - i;  			ret = 0;  			break; @@ -856,7 +857,7 @@ static struct ehea_cqe *ehea_proc_cqes(struct ehea_port_res *pr, int my_quota)  			index = EHEA_BMASK_GET(EHEA_WR_ID_INDEX, cqe->wr_id);  			skb = pr->sq_skba.arr[index]; -			dev_kfree_skb(skb); +			dev_consume_skb_any(skb);  			pr->sq_skba.arr[index] = NULL;  		} @@ -2044,7 +2045,7 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev,  		skb_copy_bits(skb, 0, imm_data, skb->len);  	swqe->immediate_data_length = skb->len; -	dev_kfree_skb(skb); +	dev_consume_skb_any(skb);  }  static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev) @@ -3033,7 +3034,7 @@ static struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter,  	dev->hw_features = NETIF_F_SG | NETIF_F_TSO |  		      NETIF_F_IP_CSUM | NETIF_F_HW_VLAN_CTAG_TX; -	dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO | +	dev->features = NETIF_F_SG | NETIF_F_TSO |  		      NETIF_F_HIGHDMA | NETIF_F_IP_CSUM |  		      NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |  		      NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_RXCSUM; @@ -3273,7 +3274,7 @@ static int ehea_probe_adapter(struct platform_device *dev)  		return -EINVAL;  	} -	adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); +	adapter = devm_kzalloc(&dev->dev, sizeof(*adapter), GFP_KERNEL);  	if (!adapter) {  		ret = -ENOMEM;  		dev_err(&dev->dev, "no mem for ehea_adapter\n"); @@ -3359,7 +3360,6 @@ out_kill_eq:  out_free_ad:  	list_del(&adapter->list); -	kfree(adapter);  out:  	ehea_update_firmware_handles(); @@ -3386,7 +3386,6 @@ static int ehea_remove(struct platform_device *dev)  	ehea_destroy_eq(adapter->neq);  	ehea_remove_adapter_mr(adapter);  	list_del(&adapter->list); -	kfree(adapter);  	ehea_update_firmware_handles(); diff --git a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c index 9b03033bb55..a0820f72b25 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_qmr.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_qmr.c @@ -103,12 +103,14 @@ out_nomem:  static void hw_queue_dtor(struct hw_queue *queue)  { -	int pages_per_kpage = PAGE_SIZE / queue->pagesize; +	int pages_per_kpage;  	int i, nr_pages;  	if (!queue || !queue->queue_pages)  		return; +	pages_per_kpage = PAGE_SIZE / queue->pagesize; +  	nr_pages = queue->queue_length / queue->pagesize;  	for (i = 0; i < nr_pages; i += pages_per_kpage) diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 6b5c7222342..87bd953cc2e 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -39,6 +39,8 @@  #include <linux/bitops.h>  #include <linux/workqueue.h>  #include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h>  #include <linux/of_net.h>  #include <linux/slab.h> @@ -2676,7 +2678,7 @@ static int emac_init_config(struct emac_instance *dev)  		       np->full_name);  		return -ENXIO;  	} -	memcpy(dev->ndev->dev_addr, p, 6); +	memcpy(dev->ndev->dev_addr, p, ETH_ALEN);  	/* IAHT and GAHT filter parameterization */  	if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) { @@ -2877,7 +2879,7 @@ static int emac_probe(struct platform_device *ofdev)  		dev->commac.ops = &emac_commac_sg_ops;  	} else  		ndev->netdev_ops = &emac_netdev_ops; -	SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops); +	ndev->ethtool_ops = &emac_ethtool_ops;  	netif_carrier_off(ndev); diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h index 70074792bde..67f342a9f65 100644 --- a/drivers/net/ethernet/ibm/emac/core.h +++ b/drivers/net/ethernet/ibm/emac/core.h @@ -26,7 +26,6 @@  #define __IBM_NEWEMAC_CORE_H  #include <linux/module.h> -#include <linux/init.h>  #include <linux/list.h>  #include <linux/kernel.h>  #include <linux/interrupt.h> diff --git a/drivers/net/ethernet/ibm/emac/debug.h b/drivers/net/ethernet/ibm/emac/debug.h index 59a92d5870b..9c45efe4c8f 100644 --- a/drivers/net/ethernet/ibm/emac/debug.h +++ b/drivers/net/ethernet/ibm/emac/debug.h @@ -29,13 +29,13 @@  struct emac_instance;  struct mal_instance; -extern void emac_dbg_register(struct emac_instance *dev); -extern void emac_dbg_unregister(struct emac_instance *dev); -extern void mal_dbg_register(struct mal_instance *mal); -extern void mal_dbg_unregister(struct mal_instance *mal); -extern int emac_init_debug(void) __init; -extern void emac_fini_debug(void) __exit; -extern void emac_dbg_dump_all(void); +void emac_dbg_register(struct emac_instance *dev); +void emac_dbg_unregister(struct emac_instance *dev); +void mal_dbg_register(struct mal_instance *mal); +void mal_dbg_unregister(struct mal_instance *mal); +int emac_init_debug(void) __init; +void emac_fini_debug(void) __exit; +void emac_dbg_dump_all(void);  # define DBG_LEVEL		1 diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c index dac564c2544..63eb959a28a 100644 --- a/drivers/net/ethernet/ibm/emac/mal.c +++ b/drivers/net/ethernet/ibm/emac/mal.c @@ -27,6 +27,7 @@  #include <linux/delay.h>  #include <linux/slab.h> +#include <linux/of_irq.h>  #include "core.h"  #include <asm/dcr-regs.h> @@ -263,7 +264,9 @@ static inline void mal_schedule_poll(struct mal_instance *mal)  {  	if (likely(napi_schedule_prep(&mal->napi))) {  		MAL_DBG2(mal, "schedule_poll" NL); +		spin_lock(&mal->lock);  		mal_disable_eob_irq(mal); +		spin_unlock(&mal->lock);  		__napi_schedule(&mal->napi);  	} else  		MAL_DBG2(mal, "already in poll" NL); @@ -442,15 +445,13 @@ static int mal_poll(struct napi_struct *napi, int budget)  		if (unlikely(mc->ops->peek_rx(mc->dev) ||  			     test_bit(MAL_COMMAC_RX_STOPPED, &mc->flags))) {  			MAL_DBG2(mal, "rotting packet" NL); -			if (napi_reschedule(napi)) -				mal_disable_eob_irq(mal); -			else -				MAL_DBG2(mal, "already in poll list" NL); - -			if (budget > 0) -				goto again; -			else +			if (!napi_reschedule(napi))  				goto more_work; + +			spin_lock_irqsave(&mal->lock, flags); +			mal_disable_eob_irq(mal); +			spin_unlock_irqrestore(&mal->lock, flags); +			goto again;  		}  		mc->ops->poll_tx(mc->dev);  	} @@ -681,10 +682,7 @@ static int mal_probe(struct platform_device *ofdev)  		goto fail6;  	/* Enable all MAL SERR interrupt sources */ -	if (mal->version == 2) -		set_mal_dcrn(mal, MAL_IER, MAL2_IER_EVENTS); -	else -		set_mal_dcrn(mal, MAL_IER, MAL1_IER_EVENTS); +	set_mal_dcrn(mal, MAL_IER, MAL_IER_EVENTS);  	/* Enable EOB interrupt */  	mal_enable_eob_irq(mal); diff --git a/drivers/net/ethernet/ibm/emac/mal.h b/drivers/net/ethernet/ibm/emac/mal.h index e431a32e3d6..eeade2ea833 100644 --- a/drivers/net/ethernet/ibm/emac/mal.h +++ b/drivers/net/ethernet/ibm/emac/mal.h @@ -95,24 +95,20 @@  #define MAL_IER			0x02 +/* MAL IER bits */  #define   MAL_IER_DE		0x00000010  #define   MAL_IER_OTE		0x00000004  #define   MAL_IER_OE		0x00000002  #define   MAL_IER_PE		0x00000001 -/* MAL V1 IER bits */ -#define   MAL1_IER_NWE		0x00000008 -#define   MAL1_IER_SOC_EVENTS	MAL1_IER_NWE -#define   MAL1_IER_EVENTS	(MAL1_IER_SOC_EVENTS | MAL_IER_DE | \ -				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE) -/* MAL V2 IER bits */ -#define   MAL2_IER_PT		0x00000080 -#define   MAL2_IER_PRE		0x00000040 -#define   MAL2_IER_PWE		0x00000020 -#define   MAL2_IER_SOC_EVENTS	(MAL2_IER_PT | MAL2_IER_PRE | MAL2_IER_PWE) -#define   MAL2_IER_EVENTS	(MAL2_IER_SOC_EVENTS | MAL_IER_DE | \ -				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE) +/* PLB read/write/timeout errors */ +#define   MAL_IER_PTE		0x00000080 +#define   MAL_IER_PRE		0x00000040 +#define   MAL_IER_PWE		0x00000020 +#define   MAL_IER_SOC_EVENTS	(MAL_IER_PTE | MAL_IER_PRE | MAL_IER_PWE) +#define   MAL_IER_EVENTS	(MAL_IER_SOC_EVENTS | MAL_IER_DE | \ +				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE)  #define MAL_TXCASR		0x04  #define MAL_TXCARR		0x05 diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c index c47e23d6eea..a01182cce96 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.c +++ b/drivers/net/ethernet/ibm/emac/rgmii.c @@ -24,6 +24,7 @@  #include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/ethtool.h> +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" @@ -44,6 +45,7 @@  /* RGMIIx_SSR */  #define RGMII_SSR_MASK(idx)	(0x7 << ((idx) * 8)) +#define RGMII_SSR_10(idx)	(0x1 << ((idx) * 8))  #define RGMII_SSR_100(idx)	(0x2 << ((idx) * 8))  #define RGMII_SSR_1000(idx)	(0x4 << ((idx) * 8)) @@ -138,6 +140,8 @@ void rgmii_set_speed(struct platform_device *ofdev, int input, int speed)  		ssr |= RGMII_SSR_1000(input);  	else if (speed == SPEED_100)  		ssr |= RGMII_SSR_100(input); +	else if (speed == SPEED_10) +		ssr |= RGMII_SSR_10(input);  	out_be32(&p->ssr, ssr); diff --git a/drivers/net/ethernet/ibm/emac/rgmii.h b/drivers/net/ethernet/ibm/emac/rgmii.h index 668bceeff4a..d4f1374d190 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.h +++ b/drivers/net/ethernet/ibm/emac/rgmii.h @@ -56,15 +56,15 @@ struct rgmii_instance {  #ifdef CONFIG_IBM_EMAC_RGMII -extern int rgmii_init(void); -extern void rgmii_exit(void); -extern int rgmii_attach(struct platform_device *ofdev, int input, int mode); -extern void rgmii_detach(struct platform_device *ofdev, int input); -extern void rgmii_get_mdio(struct platform_device *ofdev, int input); -extern void rgmii_put_mdio(struct platform_device *ofdev, int input); -extern void rgmii_set_speed(struct platform_device *ofdev, int input, int speed); -extern int rgmii_get_regs_len(struct platform_device *ofdev); -extern void *rgmii_dump_regs(struct platform_device *ofdev, void *buf); +int rgmii_init(void); +void rgmii_exit(void); +int rgmii_attach(struct platform_device *ofdev, int input, int mode); +void rgmii_detach(struct platform_device *ofdev, int input); +void rgmii_get_mdio(struct platform_device *ofdev, int input); +void rgmii_put_mdio(struct platform_device *ofdev, int input); +void rgmii_set_speed(struct platform_device *ofdev, int input, int speed); +int rgmii_get_regs_len(struct platform_device *ofdev); +void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);  #else diff --git a/drivers/net/ethernet/ibm/emac/tah.c b/drivers/net/ethernet/ibm/emac/tah.c index c231a4a32c4..9f24769ed82 100644 --- a/drivers/net/ethernet/ibm/emac/tah.c +++ b/drivers/net/ethernet/ibm/emac/tah.c @@ -18,6 +18,7 @@   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" diff --git a/drivers/net/ethernet/ibm/emac/tah.h b/drivers/net/ethernet/ibm/emac/tah.h index 350b7096a04..4d5f336f07b 100644 --- a/drivers/net/ethernet/ibm/emac/tah.h +++ b/drivers/net/ethernet/ibm/emac/tah.h @@ -72,13 +72,13 @@ struct tah_instance {  #ifdef CONFIG_IBM_EMAC_TAH -extern int tah_init(void); -extern void tah_exit(void); -extern int tah_attach(struct platform_device *ofdev, int channel); -extern void tah_detach(struct platform_device *ofdev, int channel); -extern void tah_reset(struct platform_device *ofdev); -extern int tah_get_regs_len(struct platform_device *ofdev); -extern void *tah_dump_regs(struct platform_device *ofdev, void *buf); +int tah_init(void); +void tah_exit(void); +int tah_attach(struct platform_device *ofdev, int channel); +void tah_detach(struct platform_device *ofdev, int channel); +void tah_reset(struct platform_device *ofdev); +int tah_get_regs_len(struct platform_device *ofdev); +void *tah_dump_regs(struct platform_device *ofdev, void *buf);  #else diff --git a/drivers/net/ethernet/ibm/emac/zmii.c b/drivers/net/ethernet/ibm/emac/zmii.c index 4cdf286f7ee..9ca67a38c06 100644 --- a/drivers/net/ethernet/ibm/emac/zmii.c +++ b/drivers/net/ethernet/ibm/emac/zmii.c @@ -24,6 +24,7 @@  #include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/ethtool.h> +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" diff --git a/drivers/net/ethernet/ibm/emac/zmii.h b/drivers/net/ethernet/ibm/emac/zmii.h index 455bfb08549..0959c55b145 100644 --- a/drivers/net/ethernet/ibm/emac/zmii.h +++ b/drivers/net/ethernet/ibm/emac/zmii.h @@ -53,15 +53,15 @@ struct zmii_instance {  #ifdef CONFIG_IBM_EMAC_ZMII -extern int zmii_init(void); -extern void zmii_exit(void); -extern int zmii_attach(struct platform_device *ofdev, int input, int *mode); -extern void zmii_detach(struct platform_device *ofdev, int input); -extern void zmii_get_mdio(struct platform_device *ofdev, int input); -extern void zmii_put_mdio(struct platform_device *ofdev, int input); -extern void zmii_set_speed(struct platform_device *ofdev, int input, int speed); -extern int zmii_get_regs_len(struct platform_device *ocpdev); -extern void *zmii_dump_regs(struct platform_device *ofdev, void *buf); +int zmii_init(void); +void zmii_exit(void); +int zmii_attach(struct platform_device *ofdev, int input, int *mode); +void zmii_detach(struct platform_device *ofdev, int input); +void zmii_get_mdio(struct platform_device *ofdev, int input); +void zmii_put_mdio(struct platform_device *ofdev, int input); +void zmii_set_speed(struct platform_device *ofdev, int input, int speed); +int zmii_get_regs_len(struct platform_device *ocpdev); +void *zmii_dump_regs(struct platform_device *ofdev, void *buf);  #else  # define zmii_init()		0 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 5d41aee69d1..c9127562bd2 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -12,8 +12,7 @@   * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program; if not, see <http://www.gnu.org/licenses/>.   *   * Copyright (C) IBM Corporation, 2003, 2010   * @@ -523,10 +522,21 @@ retry:  	return rc;  } +static u64 ibmveth_encode_mac_addr(u8 *mac) +{ +	int i; +	u64 encoded = 0; + +	for (i = 0; i < ETH_ALEN; i++) +		encoded = (encoded << 8) | mac[i]; + +	return encoded; +} +  static int ibmveth_open(struct net_device *netdev)  {  	struct ibmveth_adapter *adapter = netdev_priv(netdev); -	u64 mac_address = 0; +	u64 mac_address;  	int rxq_entries = 1;  	unsigned long lpar_rc;  	int rc; @@ -580,8 +590,7 @@ static int ibmveth_open(struct net_device *netdev)  	adapter->rx_queue.num_slots = rxq_entries;  	adapter->rx_queue.toggle = 1; -	memcpy(&mac_address, netdev->dev_addr, netdev->addr_len); -	mac_address = mac_address >> 16; +	mac_address = ibmveth_encode_mac_addr(netdev->dev_addr);  	rxq_desc.fields.flags_len = IBMVETH_BUF_VALID |  					adapter->rx_queue.queue_len; @@ -1035,7 +1044,7 @@ retry_bounce:  			       DMA_TO_DEVICE);  out: -	dev_kfree_skb(skb); +	dev_consume_skb_any(skb);  	return NETDEV_TX_OK;  map_failed_frags: @@ -1063,7 +1072,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)  	unsigned long lpar_rc;  restart_poll: -	do { +	while (frames_processed < budget) {  		if (!ibmveth_rxq_pending_buffer(adapter))  			break; @@ -1112,7 +1121,7 @@ restart_poll:  			netdev->stats.rx_bytes += length;  			frames_processed++;  		} -	} while (frames_processed < budget); +	}  	ibmveth_replenish_task(adapter); @@ -1184,8 +1193,8 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)  		/* add the addresses to the filter table */  		netdev_for_each_mc_addr(ha, netdev) {  			/* add the multicast address to the filter table */ -			unsigned long mcast_addr = 0; -			memcpy(((char *)&mcast_addr)+2, ha->addr, 6); +			u64 mcast_addr; +			mcast_addr = ibmveth_encode_mac_addr(ha->addr);  			lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,  						   IbmVethMcastAddFilter,  						   mcast_addr); @@ -1276,18 +1285,21 @@ static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev)  {  	struct net_device *netdev = dev_get_drvdata(&vdev->dev);  	struct ibmveth_adapter *adapter; +	struct iommu_table *tbl;  	unsigned long ret;  	int i;  	int rxqentries = 1; +	tbl = get_iommu_table_base(&vdev->dev); +  	/* netdev inits at probe time along with the structures we need below*/  	if (netdev == NULL) -		return IOMMU_PAGE_ALIGN(IBMVETH_IO_ENTITLEMENT_DEFAULT); +		return IOMMU_PAGE_ALIGN(IBMVETH_IO_ENTITLEMENT_DEFAULT, tbl);  	adapter = netdev_priv(netdev);  	ret = IBMVETH_BUFF_LIST_SIZE + IBMVETH_FILT_LIST_SIZE; -	ret += IOMMU_PAGE_ALIGN(netdev->mtu); +	ret += IOMMU_PAGE_ALIGN(netdev->mtu, tbl);  	for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {  		/* add the size of the active receive buffers */ @@ -1295,11 +1307,12 @@ static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev)  			ret +=  			    adapter->rx_buff_pool[i].size *  			    IOMMU_PAGE_ALIGN(adapter->rx_buff_pool[i]. -			            buff_size); +					     buff_size, tbl);  		rxqentries += adapter->rx_buff_pool[i].size;  	}  	/* add the size of the receive queue entries */ -	ret += IOMMU_PAGE_ALIGN(rxqentries * sizeof(struct ibmveth_rx_q_entry)); +	ret += IOMMU_PAGE_ALIGN( +		rxqentries * sizeof(struct ibmveth_rx_q_entry), tbl);  	return ret;  } @@ -1369,9 +1382,6 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)  	netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16); -	adapter->mac_addr = 0; -	memcpy(&adapter->mac_addr, mac_addr_p, 6); -  	netdev->irq = dev->irq;  	netdev->netdev_ops = &ibmveth_netdev_ops;  	netdev->ethtool_ops = &netdev_ethtool_ops; @@ -1380,7 +1390,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)  		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;  	netdev->features |= netdev->hw_features; -	memcpy(netdev->dev_addr, &adapter->mac_addr, netdev->addr_len); +	memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN);  	for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {  		struct kobject *kobj = &adapter->rx_buff_pool[i].kobj; diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h index 84066bafe05..1f37499d439 100644 --- a/drivers/net/ethernet/ibm/ibmveth.h +++ b/drivers/net/ethernet/ibm/ibmveth.h @@ -12,8 +12,7 @@   * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program; if not, see <http://www.gnu.org/licenses/>.   *   * Copyright (C) IBM Corporation, 2003, 2010   * @@ -139,7 +138,6 @@ struct ibmveth_adapter {      struct napi_struct napi;      struct net_device_stats stats;      unsigned int mcastFilterSize; -    unsigned long mac_addr;      void * buffer_list_addr;      void * filter_list_addr;      dma_addr_t buffer_list_dma;  | 
