Commit 4abd7cff authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

ethernet: use eth_hw_addr_set() in unmaintained drivers

Commit 406f42fa ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0e9e7598
...@@ -1693,6 +1693,7 @@ static int xgmac_probe(struct platform_device *pdev) ...@@ -1693,6 +1693,7 @@ static int xgmac_probe(struct platform_device *pdev)
struct resource *res; struct resource *res;
struct net_device *ndev = NULL; struct net_device *ndev = NULL;
struct xgmac_priv *priv = NULL; struct xgmac_priv *priv = NULL;
u8 addr[ETH_ALEN];
u32 uid; u32 uid;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
...@@ -1785,7 +1786,8 @@ static int xgmac_probe(struct platform_device *pdev) ...@@ -1785,7 +1786,8 @@ static int xgmac_probe(struct platform_device *pdev)
ndev->max_mtu = XGMAC_MAX_MTU; ndev->max_mtu = XGMAC_MAX_MTU;
/* Get the MAC address */ /* Get the MAC address */
xgmac_get_mac_addr(priv->base, ndev->dev_addr, 0); xgmac_get_mac_addr(priv->base, addr, 0);
eth_hw_addr_set(ndev, addr);
if (!is_valid_ether_addr(ndev->dev_addr)) if (!is_valid_ether_addr(ndev->dev_addr))
netdev_warn(ndev, "MAC address %pM not valid", netdev_warn(ndev, "MAC address %pM not valid",
ndev->dev_addr); ndev->dev_addr);
......
...@@ -1314,6 +1314,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular) ...@@ -1314,6 +1314,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
int tmp; int tmp;
unsigned rev_type = 0; unsigned rev_type = 0;
int eeprom_buff[CHKSUM_LEN]; int eeprom_buff[CHKSUM_LEN];
u8 addr[ETH_ALEN];
int retval; int retval;
/* Initialize the device structure. */ /* Initialize the device structure. */
...@@ -1387,9 +1388,10 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular) ...@@ -1387,9 +1388,10 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
for (i = 0; i < ETH_ALEN / 2; i++) { for (i = 0; i < ETH_ALEN / 2; i++) {
unsigned int Addr; unsigned int Addr;
Addr = readreg(dev, PP_IA + i * 2); Addr = readreg(dev, PP_IA + i * 2);
dev->dev_addr[i * 2] = Addr & 0xFF; addr[i * 2] = Addr & 0xFF;
dev->dev_addr[i * 2 + 1] = Addr >> 8; addr[i * 2 + 1] = Addr >> 8;
} }
eth_hw_addr_set(dev, addr);
/* Load the Adapter Configuration. /* Load the Adapter Configuration.
* Note: Barring any more specific information from some * Note: Barring any more specific information from some
...@@ -1464,9 +1466,10 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular) ...@@ -1464,9 +1466,10 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
/* eeprom_buff has 32-bit ints, so we can't just memcpy it */ /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
/* store the initial memory base address */ /* store the initial memory base address */
for (i = 0; i < ETH_ALEN / 2; i++) { for (i = 0; i < ETH_ALEN / 2; i++) {
dev->dev_addr[i * 2] = eeprom_buff[i]; addr[i * 2] = eeprom_buff[i];
dev->dev_addr[i * 2 + 1] = eeprom_buff[i] >> 8; addr[i * 2 + 1] = eeprom_buff[i] >> 8;
} }
eth_hw_addr_set(dev, addr);
cs89_dbg(1, debug, "%s: new adapter_cnf: 0x%x\n", cs89_dbg(1, debug, "%s: new adapter_cnf: 0x%x\n",
dev->name, lp->adapter_cnf); dev->name, lp->adapter_cnf);
} }
......
...@@ -1425,6 +1425,7 @@ dm9000_probe(struct platform_device *pdev) ...@@ -1425,6 +1425,7 @@ dm9000_probe(struct platform_device *pdev)
enum of_gpio_flags flags; enum of_gpio_flags flags;
struct regulator *power; struct regulator *power;
bool inv_mac_addr = false; bool inv_mac_addr = false;
u8 addr[ETH_ALEN];
power = devm_regulator_get(dev, "vcc"); power = devm_regulator_get(dev, "vcc");
if (IS_ERR(power)) { if (IS_ERR(power)) {
...@@ -1666,7 +1667,8 @@ dm9000_probe(struct platform_device *pdev) ...@@ -1666,7 +1667,8 @@ dm9000_probe(struct platform_device *pdev)
/* try reading the node address from the attached EEPROM */ /* try reading the node address from the attached EEPROM */
for (i = 0; i < 6; i += 2) for (i = 0; i < 6; i += 2)
dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i); dm9000_read_eeprom(db, i / 2, addr + i);
eth_hw_addr_set(ndev, addr);
if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) { if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
mac_src = "platform data"; mac_src = "platform data";
...@@ -1678,7 +1680,8 @@ dm9000_probe(struct platform_device *pdev) ...@@ -1678,7 +1680,8 @@ dm9000_probe(struct platform_device *pdev)
mac_src = "chip"; mac_src = "chip";
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
ndev->dev_addr[i] = ior(db, i+DM9000_PAR); addr[i] = ior(db, i + DM9000_PAR);
eth_hw_addr_set(ndev, pdata->dev_addr);
} }
if (!is_valid_ether_addr(ndev->dev_addr)) { if (!is_valid_ether_addr(ndev->dev_addr)) {
......
...@@ -1154,8 +1154,12 @@ static int ethoc_probe(struct platform_device *pdev) ...@@ -1154,8 +1154,12 @@ static int ethoc_probe(struct platform_device *pdev)
/* Check that the given MAC address is valid. If it isn't, read the /* Check that the given MAC address is valid. If it isn't, read the
* current MAC from the controller. * current MAC from the controller.
*/ */
if (!is_valid_ether_addr(netdev->dev_addr)) if (!is_valid_ether_addr(netdev->dev_addr)) {
ethoc_get_mac_address(netdev, netdev->dev_addr); u8 addr[ETH_ALEN];
ethoc_get_mac_address(netdev, addr);
eth_hw_addr_set(netdev, addr);
}
/* Check the MAC again for validity, if it still isn't choose and /* Check the MAC again for validity, if it still isn't choose and
* program a random one. * program a random one.
......
...@@ -482,6 +482,7 @@ static int fealnx_init_one(struct pci_dev *pdev, ...@@ -482,6 +482,7 @@ static int fealnx_init_one(struct pci_dev *pdev,
struct net_device *dev; struct net_device *dev;
void *ring_space; void *ring_space;
dma_addr_t ring_dma; dma_addr_t ring_dma;
u8 addr[ETH_ALEN];
#ifdef USE_IO_OPS #ifdef USE_IO_OPS
int bar = 0; int bar = 0;
#else #else
...@@ -525,7 +526,8 @@ static int fealnx_init_one(struct pci_dev *pdev, ...@@ -525,7 +526,8 @@ static int fealnx_init_one(struct pci_dev *pdev,
/* read ethernet id */ /* read ethernet id */
for (i = 0; i < 6; ++i) for (i = 0; i < 6; ++i)
dev->dev_addr[i] = ioread8(ioaddr + PAR0 + i); addr[i] = ioread8(ioaddr + PAR0 + i);
eth_hw_addr_set(dev, addr);
/* Reset the chip to erase previous misconfiguration. */ /* Reset the chip to erase previous misconfiguration. */
iowrite32(0x00000001, ioaddr + BCR); iowrite32(0x00000001, ioaddr + BCR);
......
...@@ -334,6 +334,7 @@ static int fmvj18x_config(struct pcmcia_device *link) ...@@ -334,6 +334,7 @@ static int fmvj18x_config(struct pcmcia_device *link)
u8 *buf; u8 *buf;
size_t len; size_t len;
u_char buggybuf[32]; u_char buggybuf[32];
u8 addr[ETH_ALEN];
dev_dbg(&link->dev, "fmvj18x_config\n"); dev_dbg(&link->dev, "fmvj18x_config\n");
...@@ -489,7 +490,8 @@ static int fmvj18x_config(struct pcmcia_device *link) ...@@ -489,7 +490,8 @@ static int fmvj18x_config(struct pcmcia_device *link)
case UNGERMANN: case UNGERMANN:
/* Read MACID from register */ /* Read MACID from register */
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = inb(ioaddr + UNGERMANN_MAC_ID + i); addr[i] = inb(ioaddr + UNGERMANN_MAC_ID + i);
eth_hw_addr_set(dev, addr);
card_name = "Access/CARD"; card_name = "Access/CARD";
break; break;
case XXX10304: case XXX10304:
...@@ -505,7 +507,8 @@ static int fmvj18x_config(struct pcmcia_device *link) ...@@ -505,7 +507,8 @@ static int fmvj18x_config(struct pcmcia_device *link)
default: default:
/* Read MACID from register */ /* Read MACID from register */
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = inb(ioaddr + MAC_ID + i); addr[i] = inb(ioaddr + MAC_ID + i);
eth_hw_addr_set(dev, addr);
card_name = "FMV-J181"; card_name = "FMV-J181";
break; break;
} }
......
...@@ -1181,6 +1181,7 @@ static int nic_dev_init(struct pci_dev *pdev) ...@@ -1181,6 +1181,7 @@ static int nic_dev_init(struct pci_dev *pdev)
struct net_device *netdev; struct net_device *netdev;
struct hinic_hwdev *hwdev; struct hinic_hwdev *hwdev;
struct devlink *devlink; struct devlink *devlink;
u8 addr[ETH_ALEN];
int err, num_qps; int err, num_qps;
devlink = hinic_devlink_alloc(&pdev->dev); devlink = hinic_devlink_alloc(&pdev->dev);
...@@ -1259,11 +1260,12 @@ static int nic_dev_init(struct pci_dev *pdev) ...@@ -1259,11 +1260,12 @@ static int nic_dev_init(struct pci_dev *pdev)
pci_set_drvdata(pdev, netdev); pci_set_drvdata(pdev, netdev);
err = hinic_port_get_mac(nic_dev, netdev->dev_addr); err = hinic_port_get_mac(nic_dev, addr);
if (err) { if (err) {
dev_err(&pdev->dev, "Failed to get mac address\n"); dev_err(&pdev->dev, "Failed to get mac address\n");
goto err_get_mac; goto err_get_mac;
} }
eth_hw_addr_set(netdev, addr);
if (!is_valid_ether_addr(netdev->dev_addr)) { if (!is_valid_ether_addr(netdev->dev_addr)) {
if (!HINIC_IS_VF(nic_dev->hwdev->hwif)) { if (!HINIC_IS_VF(nic_dev->hwdev->hwif)) {
......
...@@ -1436,9 +1436,13 @@ static int pxa168_eth_probe(struct platform_device *pdev) ...@@ -1436,9 +1436,13 @@ static int pxa168_eth_probe(struct platform_device *pdev)
err = of_get_ethdev_address(pdev->dev.of_node, dev); err = of_get_ethdev_address(pdev->dev.of_node, dev);
if (err) { if (err) {
u8 addr[ETH_ALEN];
/* try reading the mac address, if set by the bootloader */ /* try reading the mac address, if set by the bootloader */
pxa168_eth_get_mac_address(dev, dev->dev_addr); pxa168_eth_get_mac_address(dev, addr);
if (!is_valid_ether_addr(dev->dev_addr)) { if (is_valid_ether_addr(addr)) {
eth_hw_addr_set(dev, addr);
} else {
dev_info(&pdev->dev, "Using random mac address\n"); dev_info(&pdev->dev, "Using random mac address\n");
eth_hw_addr_random(dev); eth_hw_addr_random(dev);
} }
......
...@@ -348,13 +348,15 @@ static void ks8842_reset_hw(struct ks8842_adapter *adapter) ...@@ -348,13 +348,15 @@ static void ks8842_reset_hw(struct ks8842_adapter *adapter)
ks8842_write16(adapter, 32, 0x1, REG_SW_ID_AND_ENABLE); ks8842_write16(adapter, 32, 0x1, REG_SW_ID_AND_ENABLE);
} }
static void ks8842_read_mac_addr(struct ks8842_adapter *adapter, u8 *dest) static void ks8842_init_mac_addr(struct ks8842_adapter *adapter)
{ {
u8 addr[ETH_ALEN];
int i; int i;
u16 mac; u16 mac;
for (i = 0; i < ETH_ALEN; i++) for (i = 0; i < ETH_ALEN; i++)
dest[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i); addr[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i);
eth_hw_addr_set(adapter->netdev, addr);
if (adapter->conf_flags & MICREL_KS884X) { if (adapter->conf_flags & MICREL_KS884X) {
/* /*
...@@ -1195,7 +1197,7 @@ static int ks8842_probe(struct platform_device *pdev) ...@@ -1195,7 +1197,7 @@ static int ks8842_probe(struct platform_device *pdev)
} }
if (i == netdev->addr_len) { if (i == netdev->addr_len) {
ks8842_read_mac_addr(adapter, netdev->dev_addr); ks8842_init_mac_addr(adapter);
if (!is_valid_ether_addr(netdev->dev_addr)) if (!is_valid_ether_addr(netdev->dev_addr))
eth_hw_addr_random(netdev); eth_hw_addr_random(netdev);
......
...@@ -165,6 +165,7 @@ static void ks8851_read_mac_addr(struct net_device *dev) ...@@ -165,6 +165,7 @@ static void ks8851_read_mac_addr(struct net_device *dev)
{ {
struct ks8851_net *ks = netdev_priv(dev); struct ks8851_net *ks = netdev_priv(dev);
unsigned long flags; unsigned long flags;
u8 addr[ETH_ALEN];
u16 reg; u16 reg;
int i; int i;
...@@ -172,9 +173,10 @@ static void ks8851_read_mac_addr(struct net_device *dev) ...@@ -172,9 +173,10 @@ static void ks8851_read_mac_addr(struct net_device *dev)
for (i = 0; i < ETH_ALEN; i += 2) { for (i = 0; i < ETH_ALEN; i += 2) {
reg = ks8851_rdreg16(ks, KS_MAR(i)); reg = ks8851_rdreg16(ks, KS_MAR(i));
dev->dev_addr[i] = reg >> 8; addr[i] = reg >> 8;
dev->dev_addr[i + 1] = reg & 0xff; addr[i + 1] = reg & 0xff;
} }
eth_hw_addr_set(dev, addr);
ks8851_unlock(ks, &flags); ks8851_unlock(ks, &flags);
} }
......
...@@ -7007,9 +7007,12 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -7007,9 +7007,12 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)
if (MAIN_PORT == i) if (MAIN_PORT == i)
eth_hw_addr_set(dev, hw_priv->hw.override_addr); eth_hw_addr_set(dev, hw_priv->hw.override_addr);
else { else {
eth_hw_addr_set(dev, sw->other_addr); u8 addr[ETH_ALEN];
ether_addr_copy(addr, sw->other_addr);
if (ether_addr_equal(sw->other_addr, hw->override_addr)) if (ether_addr_equal(sw->other_addr, hw->override_addr))
dev->dev_addr[5] += port->first_port; addr[5] += port->first_port;
eth_hw_addr_set(dev, addr);
} }
dev->netdev_ops = &netdev_ops; dev->netdev_ops = &netdev_ops;
......
...@@ -1001,6 +1001,7 @@ static int encx24j600_spi_probe(struct spi_device *spi) ...@@ -1001,6 +1001,7 @@ static int encx24j600_spi_probe(struct spi_device *spi)
struct net_device *ndev; struct net_device *ndev;
struct encx24j600_priv *priv; struct encx24j600_priv *priv;
u16 eidled; u16 eidled;
u8 addr[ETH_ALEN];
ndev = alloc_etherdev(sizeof(struct encx24j600_priv)); ndev = alloc_etherdev(sizeof(struct encx24j600_priv));
...@@ -1056,7 +1057,8 @@ static int encx24j600_spi_probe(struct spi_device *spi) ...@@ -1056,7 +1057,8 @@ static int encx24j600_spi_probe(struct spi_device *spi)
} }
/* Get the MAC address from the chip */ /* Get the MAC address from the chip */
encx24j600_hw_get_macaddr(priv, ndev->dev_addr); encx24j600_hw_get_macaddr(priv, addr);
eth_hw_addr_set(ndev, addr);
ndev->ethtool_ops = &encx24j600_ethtool_ops; ndev->ethtool_ops = &encx24j600_ethtool_ops;
......
...@@ -809,6 +809,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -809,6 +809,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
unsigned long iosize; unsigned long iosize;
void __iomem *ioaddr; void __iomem *ioaddr;
const int pcibar = 1; /* PCI base address register */ const int pcibar = 1; /* PCI base address register */
u8 addr[ETH_ALEN];
int prev_eedata; int prev_eedata;
u32 tmp; u32 tmp;
...@@ -859,10 +860,11 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -859,10 +860,11 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)
prev_eedata = eeprom_read(ioaddr, 6); prev_eedata = eeprom_read(ioaddr, 6);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
int eedata = eeprom_read(ioaddr, i + 7); int eedata = eeprom_read(ioaddr, i + 7);
dev->dev_addr[i*2] = (eedata << 1) + (prev_eedata >> 15); addr[i*2] = (eedata << 1) + (prev_eedata >> 15);
dev->dev_addr[i*2+1] = eedata >> 7; addr[i*2+1] = eedata >> 7;
prev_eedata = eedata; prev_eedata = eedata;
} }
eth_hw_addr_set(dev, addr);
np = netdev_priv(dev); np = netdev_priv(dev);
np->ioaddr = ioaddr; np->ioaddr = ioaddr;
......
...@@ -1649,9 +1649,11 @@ static int ns83820_open(struct net_device *ndev) ...@@ -1649,9 +1649,11 @@ static int ns83820_open(struct net_device *ndev)
return ret; return ret;
} }
static void ns83820_getmac(struct ns83820 *dev, u8 *mac) static void ns83820_getmac(struct ns83820 *dev, struct net_device *ndev)
{ {
u8 mac[ETH_ALEN];
unsigned i; unsigned i;
for (i=0; i<3; i++) { for (i=0; i<3; i++) {
u32 data; u32 data;
...@@ -1661,9 +1663,10 @@ static void ns83820_getmac(struct ns83820 *dev, u8 *mac) ...@@ -1661,9 +1663,10 @@ static void ns83820_getmac(struct ns83820 *dev, u8 *mac)
writel(i*2, dev->base + RFCR); writel(i*2, dev->base + RFCR);
data = readl(dev->base + RFDR); data = readl(dev->base + RFDR);
*mac++ = data; mac[i * 2] = data;
*mac++ = data >> 8; mac[i * 2 + 1] = data >> 8;
} }
eth_hw_addr_set(ndev, mac);
} }
static void ns83820_set_multicast(struct net_device *ndev) static void ns83820_set_multicast(struct net_device *ndev)
...@@ -2136,7 +2139,7 @@ static int ns83820_init_one(struct pci_dev *pci_dev, ...@@ -2136,7 +2139,7 @@ static int ns83820_init_one(struct pci_dev *pci_dev,
/* Disable Wake On Lan */ /* Disable Wake On Lan */
writel(0, dev->base + WCSR); writel(0, dev->base + WCSR);
ns83820_getmac(dev, ndev->dev_addr); ns83820_getmac(dev, ndev);
/* Yes, we support dumb IP checksum on transmit */ /* Yes, we support dumb IP checksum on transmit */
ndev->features |= NETIF_F_SG; ndev->features |= NETIF_F_SG;
......
...@@ -592,6 +592,7 @@ static int hamachi_init_one(struct pci_dev *pdev, ...@@ -592,6 +592,7 @@ static int hamachi_init_one(struct pci_dev *pdev,
void *ring_space; void *ring_space;
dma_addr_t ring_dma; dma_addr_t ring_dma;
int ret = -ENOMEM; int ret = -ENOMEM;
u8 addr[ETH_ALEN];
/* when built into the kernel, we only print version if device is found */ /* when built into the kernel, we only print version if device is found */
#ifndef MODULE #ifndef MODULE
...@@ -628,8 +629,8 @@ static int hamachi_init_one(struct pci_dev *pdev, ...@@ -628,8 +629,8 @@ static int hamachi_init_one(struct pci_dev *pdev,
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = 1 ? read_eeprom(ioaddr, 4 + i) addr[i] = read_eeprom(ioaddr, 4 + i);
: readb(ioaddr + StationAddr + i); eth_hw_addr_set(dev, addr);
#if ! defined(final_version) #if ! defined(final_version)
if (hamachi_debug > 4) if (hamachi_debug > 4)
......
...@@ -384,6 +384,7 @@ static int yellowfin_init_one(struct pci_dev *pdev, ...@@ -384,6 +384,7 @@ static int yellowfin_init_one(struct pci_dev *pdev,
#else #else
int bar = 1; int bar = 1;
#endif #endif
u8 addr[ETH_ALEN];
/* when built into the kernel, we only print version if device is found */ /* when built into the kernel, we only print version if device is found */
#ifndef MODULE #ifndef MODULE
...@@ -416,12 +417,13 @@ static int yellowfin_init_one(struct pci_dev *pdev, ...@@ -416,12 +417,13 @@ static int yellowfin_init_one(struct pci_dev *pdev,
if (drv_flags & DontUseEeprom) if (drv_flags & DontUseEeprom)
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = ioread8(ioaddr + StnAddr + i); addr[i] = ioread8(ioaddr + StnAddr + i);
else { else {
int ee_offset = (read_eeprom(ioaddr, 6) == 0xff ? 0x100 : 0); int ee_offset = (read_eeprom(ioaddr, 6) == 0xff ? 0x100 : 0);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
dev->dev_addr[i] = read_eeprom(ioaddr, ee_offset + i); addr[i] = read_eeprom(ioaddr, ee_offset + i);
} }
eth_hw_addr_set(dev, addr);
/* Reset the chip. */ /* Reset the chip. */
iowrite32(0x80000000, ioaddr + DMACtrl); iowrite32(0x80000000, ioaddr + DMACtrl);
......
...@@ -1400,6 +1400,7 @@ static int sc92031_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1400,6 +1400,7 @@ static int sc92031_probe(struct pci_dev *pdev, const struct pci_device_id *id)
void __iomem* port_base; void __iomem* port_base;
struct net_device *dev; struct net_device *dev;
struct sc92031_priv *priv; struct sc92031_priv *priv;
u8 addr[ETH_ALEN];
u32 mac0, mac1; u32 mac0, mac1;
err = pci_enable_device(pdev); err = pci_enable_device(pdev);
...@@ -1458,12 +1459,13 @@ static int sc92031_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1458,12 +1459,13 @@ static int sc92031_probe(struct pci_dev *pdev, const struct pci_device_id *id)
mac0 = ioread32(port_base + MAC0); mac0 = ioread32(port_base + MAC0);
mac1 = ioread32(port_base + MAC0 + 4); mac1 = ioread32(port_base + MAC0 + 4);
dev->dev_addr[0] = mac0 >> 24; addr[0] = mac0 >> 24;
dev->dev_addr[1] = mac0 >> 16; addr[1] = mac0 >> 16;
dev->dev_addr[2] = mac0 >> 8; addr[2] = mac0 >> 8;
dev->dev_addr[3] = mac0; addr[3] = mac0;
dev->dev_addr[4] = mac1 >> 8; addr[4] = mac1 >> 8;
dev->dev_addr[5] = mac1; addr[5] = mac1;
eth_hw_addr_set(dev, addr);
err = register_netdev(dev); err = register_netdev(dev);
if (err < 0) if (err < 0)
......
...@@ -347,6 +347,7 @@ static void smc91c92_detach(struct pcmcia_device *link) ...@@ -347,6 +347,7 @@ static void smc91c92_detach(struct pcmcia_device *link)
static int cvt_ascii_address(struct net_device *dev, char *s) static int cvt_ascii_address(struct net_device *dev, char *s)
{ {
u8 mac[ETH_ALEN];
int i, j, da, c; int i, j, da, c;
if (strlen(s) != 12) if (strlen(s) != 12)
...@@ -359,8 +360,9 @@ static int cvt_ascii_address(struct net_device *dev, char *s) ...@@ -359,8 +360,9 @@ static int cvt_ascii_address(struct net_device *dev, char *s)
da += ((c >= '0') && (c <= '9')) ? da += ((c >= '0') && (c <= '9')) ?
(c - '0') : ((c & 0x0f) + 9); (c - '0') : ((c & 0x0f) + 9);
} }
dev->dev_addr[i] = da; mac[i] = da;
} }
eth_hw_addr_set(dev, mac);
return 0; return 0;
} }
...@@ -539,6 +541,7 @@ static int mot_setup(struct pcmcia_device *link) ...@@ -539,6 +541,7 @@ static int mot_setup(struct pcmcia_device *link)
struct net_device *dev = link->priv; struct net_device *dev = link->priv;
unsigned int ioaddr = dev->base_addr; unsigned int ioaddr = dev->base_addr;
int i, wait, loop; int i, wait, loop;
u8 mac[ETH_ALEN];
u_int addr; u_int addr;
/* Read Ethernet address from Serial EEPROM */ /* Read Ethernet address from Serial EEPROM */
...@@ -559,9 +562,10 @@ static int mot_setup(struct pcmcia_device *link) ...@@ -559,9 +562,10 @@ static int mot_setup(struct pcmcia_device *link)
return -1; return -1;
addr = inw(ioaddr + GENERAL); addr = inw(ioaddr + GENERAL);
dev->dev_addr[2*i] = addr & 0xff; mac[2*i] = addr & 0xff;
dev->dev_addr[2*i+1] = (addr >> 8) & 0xff; mac[2*i+1] = (addr >> 8) & 0xff;
} }
eth_hw_addr_set(dev, mac);
return 0; return 0;
} }
......
...@@ -285,6 +285,7 @@ static struct vnet *vnet_new(const u64 *local_mac, ...@@ -285,6 +285,7 @@ static struct vnet *vnet_new(const u64 *local_mac,
struct vio_dev *vdev) struct vio_dev *vdev)
{ {
struct net_device *dev; struct net_device *dev;
u8 addr[ETH_ALEN];
struct vnet *vp; struct vnet *vp;
int err, i; int err, i;
...@@ -295,7 +296,8 @@ static struct vnet *vnet_new(const u64 *local_mac, ...@@ -295,7 +296,8 @@ static struct vnet *vnet_new(const u64 *local_mac,
dev->needed_tailroom = 8; dev->needed_tailroom = 8;
for (i = 0; i < ETH_ALEN; i++) for (i = 0; i < ETH_ALEN; i++)
dev->dev_addr[i] = (*local_mac >> (5 - i) * 8) & 0xff; addr[i] = (*local_mac >> (5 - i) * 8) & 0xff;
eth_hw_addr_set(dev, addr);
vp = netdev_priv(dev); vp = netdev_priv(dev);
......
...@@ -725,6 +725,7 @@ static int tc35815_init_dev_addr(struct net_device *dev) ...@@ -725,6 +725,7 @@ static int tc35815_init_dev_addr(struct net_device *dev)
{ {
struct tc35815_regs __iomem *tr = struct tc35815_regs __iomem *tr =
(struct tc35815_regs __iomem *)dev->base_addr; (struct tc35815_regs __iomem *)dev->base_addr;
u8 addr[ETH_ALEN];
int i; int i;
while (tc_readl(&tr->PROM_Ctl) & PROM_Busy) while (tc_readl(&tr->PROM_Ctl) & PROM_Busy)
...@@ -735,9 +736,10 @@ static int tc35815_init_dev_addr(struct net_device *dev) ...@@ -735,9 +736,10 @@ static int tc35815_init_dev_addr(struct net_device *dev)
while (tc_readl(&tr->PROM_Ctl) & PROM_Busy) while (tc_readl(&tr->PROM_Ctl) & PROM_Busy)
; ;
data = tc_readl(&tr->PROM_Data); data = tc_readl(&tr->PROM_Data);
dev->dev_addr[i] = data & 0xff; addr[i] = data & 0xff;
dev->dev_addr[i+1] = data >> 8; addr[i+1] = data >> 8;
} }
eth_hw_addr_set(dev, addr);
if (!is_valid_ether_addr(dev->dev_addr)) if (!is_valid_ether_addr(dev->dev_addr))
return tc35815_read_plat_dev_addr(dev); return tc35815_read_plat_dev_addr(dev);
return 0; return 0;
......
...@@ -671,7 +671,6 @@ static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev, ...@@ -671,7 +671,6 @@ static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev,
void *priv) void *priv)
{ {
struct net_device *dev = priv; struct net_device *dev = priv;
int i;
if (tuple->TupleDataLen != 13) if (tuple->TupleDataLen != 13)
return -EINVAL; return -EINVAL;
...@@ -679,8 +678,7 @@ static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev, ...@@ -679,8 +678,7 @@ static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev,
(tuple->TupleData[2] != 6)) (tuple->TupleData[2] != 6))
return -EINVAL; return -EINVAL;
/* another try (James Lehmer's CE2 version 4.1)*/ /* another try (James Lehmer's CE2 version 4.1)*/
for (i = 2; i < 6; i++) dev_addr_mod(dev, 2, &tuple->TupleData[2], 4);
dev->dev_addr[i] = tuple->TupleData[i+2];
return 0; return 0;
}; };
...@@ -742,11 +740,9 @@ xirc2ps_config(struct pcmcia_device * link) ...@@ -742,11 +740,9 @@ xirc2ps_config(struct pcmcia_device * link)
len = pcmcia_get_tuple(link, 0x89, &buf); len = pcmcia_get_tuple(link, 0x89, &buf);
/* data layout looks like tuple 0x22 */ /* data layout looks like tuple 0x22 */
if (buf && len == 8) { if (buf && len == 8) {
if (*buf == CISTPL_FUNCE_LAN_NODE_ID) { if (*buf == CISTPL_FUNCE_LAN_NODE_ID)
int i; dev_addr_mod(dev, 2, &buf[2], 4);
for (i = 2; i < 6; i++) else
dev->dev_addr[i] = buf[i+2];
} else
err = -1; err = -1;
} }
kfree(buf); kfree(buf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment