pasemi_mac: Add support for changing mac address
Straightforward. It used to be hardcoded and impossible to override with ifconfig. Signed-off-by: Olof Johansson <olof@lixom.net> Signed-off-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c88559539b
commit
5cea73b0f7
@ -221,6 +221,33 @@ static int pasemi_get_mac_addr(struct pasemi_mac *mac)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pasemi_mac_set_mac_addr(struct net_device *dev, void *p)
|
||||
{
|
||||
struct pasemi_mac *mac = netdev_priv(dev);
|
||||
struct sockaddr *addr = p;
|
||||
unsigned int adr0, adr1;
|
||||
|
||||
if (!is_valid_ether_addr(addr->sa_data))
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
|
||||
|
||||
adr0 = dev->dev_addr[2] << 24 |
|
||||
dev->dev_addr[3] << 16 |
|
||||
dev->dev_addr[4] << 8 |
|
||||
dev->dev_addr[5];
|
||||
adr1 = read_mac_reg(mac, PAS_MAC_CFG_ADR1);
|
||||
adr1 &= ~0xffff;
|
||||
adr1 |= dev->dev_addr[0] << 8 | dev->dev_addr[1];
|
||||
|
||||
pasemi_mac_intf_disable(mac);
|
||||
write_mac_reg(mac, PAS_MAC_CFG_ADR0, adr0);
|
||||
write_mac_reg(mac, PAS_MAC_CFG_ADR1, adr1);
|
||||
pasemi_mac_intf_enable(mac);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_skb_hdr(struct sk_buff *skb, void **iphdr,
|
||||
void **tcph, u64 *hdr_flags, void *data)
|
||||
{
|
||||
@ -1475,6 +1502,7 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
dev->stop = pasemi_mac_close;
|
||||
dev->hard_start_xmit = pasemi_mac_start_tx;
|
||||
dev->set_multicast_list = pasemi_mac_set_rx_mode;
|
||||
dev->set_mac_address = pasemi_mac_set_mac_addr;
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
|
@ -96,6 +96,8 @@ struct pasemi_mac_buffer {
|
||||
/* MAC CFG register offsets */
|
||||
enum {
|
||||
PAS_MAC_CFG_PCFG = 0x80,
|
||||
PAS_MAC_CFG_ADR0 = 0x8c,
|
||||
PAS_MAC_CFG_ADR1 = 0x90,
|
||||
PAS_MAC_CFG_TXP = 0x98,
|
||||
PAS_MAC_IPC_CHNL = 0x208,
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user