diff options
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmveth.c')
| -rw-r--r-- | drivers/net/ethernet/ibm/ibmveth.c | 46 | 
1 files changed, 14 insertions, 32 deletions
| diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 3d9b4f99d357..45ba40cf4d07 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -483,17 +483,6 @@ 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); @@ -553,7 +542,7 @@ static int ibmveth_open(struct net_device *netdev)  	adapter->rx_queue.num_slots = rxq_entries;  	adapter->rx_queue.toggle = 1; -	mac_address = ibmveth_encode_mac_addr(netdev->dev_addr); +	mac_address = ether_addr_to_u64(netdev->dev_addr);  	rxq_desc.fields.flags_len = IBMVETH_BUF_VALID |  					adapter->rx_queue.queue_len; @@ -605,17 +594,13 @@ static int ibmveth_open(struct net_device *netdev)  	}  	rc = -ENOMEM; -	adapter->bounce_buffer = -	    kmalloc(netdev->mtu + IBMVETH_BUFF_OH, GFP_KERNEL); -	if (!adapter->bounce_buffer) -		goto out_free_irq; -	adapter->bounce_buffer_dma = -	    dma_map_single(&adapter->vdev->dev, adapter->bounce_buffer, -			   netdev->mtu + IBMVETH_BUFF_OH, DMA_BIDIRECTIONAL); -	if (dma_mapping_error(dev, adapter->bounce_buffer_dma)) { -		netdev_err(netdev, "unable to map bounce buffer\n"); -		goto out_free_bounce_buffer; +	adapter->bounce_buffer = dma_alloc_coherent(&adapter->vdev->dev, +						    netdev->mtu + IBMVETH_BUFF_OH, +						    &adapter->bounce_buffer_dma, GFP_KERNEL); +	if (!adapter->bounce_buffer) { +		netdev_err(netdev, "unable to alloc bounce buffer\n"); +		goto out_free_irq;  	}  	netdev_dbg(netdev, "initial replenish cycle\n"); @@ -627,8 +612,6 @@ static int ibmveth_open(struct net_device *netdev)  	return 0; -out_free_bounce_buffer: -	kfree(adapter->bounce_buffer);  out_free_irq:  	free_irq(netdev->irq, netdev);  out_free_buffer_pools: @@ -702,10 +685,9 @@ static int ibmveth_close(struct net_device *netdev)  			ibmveth_free_buffer_pool(adapter,  						 &adapter->rx_buff_pool[i]); -	dma_unmap_single(&adapter->vdev->dev, adapter->bounce_buffer_dma, -			 adapter->netdev->mtu + IBMVETH_BUFF_OH, -			 DMA_BIDIRECTIONAL); -	kfree(adapter->bounce_buffer); +	dma_free_coherent(&adapter->vdev->dev, +			  adapter->netdev->mtu + IBMVETH_BUFF_OH, +			  adapter->bounce_buffer, adapter->bounce_buffer_dma);  	netdev_dbg(netdev, "close complete\n"); @@ -1483,7 +1465,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)  		netdev_for_each_mc_addr(ha, netdev) {  			/* add the multicast address to the filter table */  			u64 mcast_addr; -			mcast_addr = ibmveth_encode_mac_addr(ha->addr); +			mcast_addr = ether_addr_to_u64(ha->addr);  			lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,  						   IbmVethMcastAddFilter,  						   mcast_addr); @@ -1613,14 +1595,14 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)  	if (!is_valid_ether_addr(addr->sa_data))  		return -EADDRNOTAVAIL; -	mac_address = ibmveth_encode_mac_addr(addr->sa_data); +	mac_address = ether_addr_to_u64(addr->sa_data);  	rc = h_change_logical_lan_mac(adapter->vdev->unit_address, mac_address);  	if (rc) {  		netdev_err(adapter->netdev, "h_change_logical_lan_mac failed with rc=%d\n", rc);  		return rc;  	} -	ether_addr_copy(dev->dev_addr, addr->sa_data); +	eth_hw_addr_set(dev, addr->sa_data);  	return 0;  } @@ -1727,7 +1709,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)  	netdev->min_mtu = IBMVETH_MIN_MTU;  	netdev->max_mtu = ETH_MAX_MTU - IBMVETH_BUFF_OH; -	memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN); +	eth_hw_addr_set(netdev, mac_addr_p);  	if (firmware_has_feature(FW_FEATURE_CMO))  		memcpy(pool_count, pool_count_cmo, sizeof(pool_count)); |