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

Commit 73f83182 authored by Alex Landau's avatar Alex Landau Committed by David S. Miller
Browse files

Blackfin EMAC driver: add function to change the MAC address



Alex Landau writes in the forums:
 Previously, changing the MAC address (e.g. via ifconfig) resulted
 in a generic function to be called that only changed a variable in
 memory. This patch also updated the Blackfin MAC address registers
 to filter the correct new MAC.

Signed-off-by: default avatarAlex Landau <lirsb@yahoo.com>
Signed-off-by: default avatarMike Frysinger <michael.frysinger@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
Acked-by: default avatarJeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 1a7eb72b
Loading
Loading
Loading
Loading
+12 −1
Original line number Original line Diff line number Diff line
@@ -463,7 +463,7 @@ void setup_system_regs(struct net_device *dev)
	bfin_write_DMA1_Y_MODIFY(0);
	bfin_write_DMA1_Y_MODIFY(0);
}
}


void setup_mac_addr(u8 * mac_addr)
static void setup_mac_addr(u8 *mac_addr)
{
{
	u32 addr_low = le32_to_cpu(*(__le32 *) & mac_addr[0]);
	u32 addr_low = le32_to_cpu(*(__le32 *) & mac_addr[0]);
	u16 addr_hi = le16_to_cpu(*(__le16 *) & mac_addr[4]);
	u16 addr_hi = le16_to_cpu(*(__le16 *) & mac_addr[4]);
@@ -473,6 +473,16 @@ void setup_mac_addr(u8 * mac_addr)
	bfin_write_EMAC_ADDRHI(addr_hi);
	bfin_write_EMAC_ADDRHI(addr_hi);
}
}


static int bf537mac_set_mac_address(struct net_device *dev, void *p)
{
	struct sockaddr *addr = p;
	if (netif_running(dev))
		return -EBUSY;
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
	setup_mac_addr(dev->dev_addr);
	return 0;
}

static void adjust_tx_list(void)
static void adjust_tx_list(void)
{
{
	int timeout_cnt = MAX_TIMEOUT_CNT;
	int timeout_cnt = MAX_TIMEOUT_CNT;
@@ -876,6 +886,7 @@ static int __init bf537mac_probe(struct net_device *dev)
	dev->open = bf537mac_open;
	dev->open = bf537mac_open;
	dev->stop = bf537mac_close;
	dev->stop = bf537mac_close;
	dev->hard_start_xmit = bf537mac_hard_start_xmit;
	dev->hard_start_xmit = bf537mac_hard_start_xmit;
	dev->set_mac_address = bf537mac_set_mac_address;
	dev->tx_timeout = bf537mac_timeout;
	dev->tx_timeout = bf537mac_timeout;
	dev->set_multicast_list = bf537mac_set_multicast_list;
	dev->set_multicast_list = bf537mac_set_multicast_list;
#ifdef CONFIG_NET_POLL_CONTROLLER
#ifdef CONFIG_NET_POLL_CONTROLLER