mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
Merge branch 'net-don-t-write-directly-to-netdev-dev_addr'
Don't write directly to netdev->dev_addr. More conversions, mostly in usb/net. v2: leave out catc (patch 4) Link: https://lore.kernel.org/r/20211021131214.2032925-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
07591ebec3
30 changed files with 99 additions and 61 deletions
|
@ -1117,7 +1117,7 @@ static int dfx_driver_init(struct net_device *dev, const char *print_name,
|
||||||
* dfx_ctl_set_mac_address.
|
* dfx_ctl_set_mac_address.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
memcpy(dev->dev_addr, bp->factory_mac_addr, FDDI_K_ALEN);
|
dev_addr_set(dev, bp->factory_mac_addr);
|
||||||
if (dfx_bus_tc)
|
if (dfx_bus_tc)
|
||||||
board_name = "DEFTA";
|
board_name = "DEFTA";
|
||||||
if (dfx_bus_eisa)
|
if (dfx_bus_eisa)
|
||||||
|
@ -1474,7 +1474,7 @@ static int dfx_open(struct net_device *dev)
|
||||||
* address.
|
* address.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
memcpy(dev->dev_addr, bp->factory_mac_addr, FDDI_K_ALEN);
|
dev_addr_set(dev, bp->factory_mac_addr);
|
||||||
|
|
||||||
/* Clear local unicast/multicast address tables and counts */
|
/* Clear local unicast/multicast address tables and counts */
|
||||||
|
|
||||||
|
@ -2379,7 +2379,7 @@ static int dfx_ctl_set_mac_address(struct net_device *dev, void *addr)
|
||||||
|
|
||||||
/* Copy unicast address to driver-maintained structs and update count */
|
/* Copy unicast address to driver-maintained structs and update count */
|
||||||
|
|
||||||
memcpy(dev->dev_addr, p_sockaddr->sa_data, FDDI_K_ALEN); /* update device struct */
|
dev_addr_set(dev, p_sockaddr->sa_data); /* update device struct */
|
||||||
memcpy(&bp->uc_table[0], p_sockaddr->sa_data, FDDI_K_ALEN); /* update driver struct */
|
memcpy(&bp->uc_table[0], p_sockaddr->sa_data, FDDI_K_ALEN); /* update driver struct */
|
||||||
bp->uc_count = 1;
|
bp->uc_count = 1;
|
||||||
|
|
||||||
|
|
|
@ -1380,7 +1380,7 @@ static int fza_probe(struct device *bdev)
|
||||||
goto err_out_irq;
|
goto err_out_irq;
|
||||||
|
|
||||||
fza_reads(&init->hw_addr, &hw_addr, sizeof(hw_addr));
|
fza_reads(&init->hw_addr, &hw_addr, sizeof(hw_addr));
|
||||||
memcpy(dev->dev_addr, &hw_addr, FDDI_K_ALEN);
|
dev_addr_set(dev, &hw_addr);
|
||||||
|
|
||||||
fza_reads(&init->rom_rev, &rom_rev, sizeof(rom_rev));
|
fza_reads(&init->rom_rev, &rom_rev, sizeof(rom_rev));
|
||||||
fza_reads(&init->fw_rev, &fw_rev, sizeof(fw_rev));
|
fza_reads(&init->fw_rev, &fw_rev, sizeof(fw_rev));
|
||||||
|
|
|
@ -470,7 +470,7 @@ void card_stop(struct s_smc *smc);
|
||||||
void init_board(struct s_smc *smc, u_char *mac_addr);
|
void init_board(struct s_smc *smc, u_char *mac_addr);
|
||||||
int init_fplus(struct s_smc *smc);
|
int init_fplus(struct s_smc *smc);
|
||||||
void init_plc(struct s_smc *smc);
|
void init_plc(struct s_smc *smc);
|
||||||
int init_smt(struct s_smc *smc, u_char *mac_addr);
|
int init_smt(struct s_smc *smc, const u_char *mac_addr);
|
||||||
void mac1_irq(struct s_smc *smc, u_short stu, u_short stl);
|
void mac1_irq(struct s_smc *smc, u_short stu, u_short stl);
|
||||||
void mac2_irq(struct s_smc *smc, u_short code_s2u, u_short code_s2l);
|
void mac2_irq(struct s_smc *smc, u_short code_s2u, u_short code_s2l);
|
||||||
void mac3_irq(struct s_smc *smc, u_short code_s3u, u_short code_s3l);
|
void mac3_irq(struct s_smc *smc, u_short code_s3u, u_short code_s3l);
|
||||||
|
|
|
@ -925,7 +925,7 @@ static int skfp_ctl_set_mac_address(struct net_device *dev, void *addr)
|
||||||
unsigned long Flags;
|
unsigned long Flags;
|
||||||
|
|
||||||
|
|
||||||
memcpy(dev->dev_addr, p_sockaddr->sa_data, FDDI_K_ALEN);
|
dev_addr_set(dev, p_sockaddr->sa_data);
|
||||||
spin_lock_irqsave(&bp->DriverLock, Flags);
|
spin_lock_irqsave(&bp->DriverLock, Flags);
|
||||||
ResetAdapter(smc);
|
ResetAdapter(smc);
|
||||||
spin_unlock_irqrestore(&bp->DriverLock, Flags);
|
spin_unlock_irqrestore(&bp->DriverLock, Flags);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#include "h/fddi.h"
|
#include "h/fddi.h"
|
||||||
#include "h/smc.h"
|
#include "h/smc.h"
|
||||||
|
|
||||||
void init_fddi_driver(struct s_smc *smc, u_char *mac_addr);
|
void init_fddi_driver(struct s_smc *smc, const u_char *mac_addr);
|
||||||
|
|
||||||
/* define global debug variable */
|
/* define global debug variable */
|
||||||
#if defined(DEBUG) && !defined(DEBUG_BRD)
|
#if defined(DEBUG) && !defined(DEBUG_BRD)
|
||||||
|
@ -57,7 +57,7 @@ static void set_oem_spec_val(struct s_smc *smc)
|
||||||
/*
|
/*
|
||||||
* Init SMT
|
* Init SMT
|
||||||
*/
|
*/
|
||||||
int init_smt(struct s_smc *smc, u_char *mac_addr)
|
int init_smt(struct s_smc *smc, const u_char *mac_addr)
|
||||||
/* u_char *mac_addr; canonical address or NULL */
|
/* u_char *mac_addr; canonical address or NULL */
|
||||||
{
|
{
|
||||||
int p ;
|
int p ;
|
||||||
|
|
|
@ -137,7 +137,8 @@ static void fjes_hw_free_epbuf(struct epbuf_handler *epbh)
|
||||||
epbh->ring = NULL;
|
epbh->ring = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fjes_hw_setup_epbuf(struct epbuf_handler *epbh, u8 *mac_addr, u32 mtu)
|
void fjes_hw_setup_epbuf(struct epbuf_handler *epbh, const u8 *mac_addr,
|
||||||
|
u32 mtu)
|
||||||
{
|
{
|
||||||
union ep_buffer_info *info = epbh->info;
|
union ep_buffer_info *info = epbh->info;
|
||||||
u16 vlan_id[EP_BUFFER_SUPPORT_VLAN_MAX];
|
u16 vlan_id[EP_BUFFER_SUPPORT_VLAN_MAX];
|
||||||
|
|
|
@ -330,7 +330,7 @@ int fjes_hw_register_buff_addr(struct fjes_hw *, int,
|
||||||
int fjes_hw_unregister_buff_addr(struct fjes_hw *, int);
|
int fjes_hw_unregister_buff_addr(struct fjes_hw *, int);
|
||||||
void fjes_hw_init_command_registers(struct fjes_hw *,
|
void fjes_hw_init_command_registers(struct fjes_hw *,
|
||||||
struct fjes_device_command_param *);
|
struct fjes_device_command_param *);
|
||||||
void fjes_hw_setup_epbuf(struct epbuf_handler *, u8 *, u32);
|
void fjes_hw_setup_epbuf(struct epbuf_handler *, const u8 *, u32);
|
||||||
int fjes_hw_raise_interrupt(struct fjes_hw *, int, enum REG_ICTL_MASK);
|
int fjes_hw_raise_interrupt(struct fjes_hw *, int, enum REG_ICTL_MASK);
|
||||||
void fjes_hw_set_irqmask(struct fjes_hw *, enum REG_ICTL_MASK, bool);
|
void fjes_hw_set_irqmask(struct fjes_hw *, enum REG_ICTL_MASK, bool);
|
||||||
u32 fjes_hw_capture_interrupt_status(struct fjes_hw *);
|
u32 fjes_hw_capture_interrupt_status(struct fjes_hw *);
|
||||||
|
|
|
@ -1203,6 +1203,7 @@ static int fjes_probe(struct platform_device *plat_dev)
|
||||||
struct net_device *netdev;
|
struct net_device *netdev;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct fjes_hw *hw;
|
struct fjes_hw *hw;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
@ -1266,12 +1267,13 @@ static int fjes_probe(struct platform_device *plat_dev)
|
||||||
goto err_free_control_wq;
|
goto err_free_control_wq;
|
||||||
|
|
||||||
/* setup MAC address (02:00:00:00:00:[epid])*/
|
/* setup MAC address (02:00:00:00:00:[epid])*/
|
||||||
netdev->dev_addr[0] = 2;
|
addr[0] = 2;
|
||||||
netdev->dev_addr[1] = 0;
|
addr[1] = 0;
|
||||||
netdev->dev_addr[2] = 0;
|
addr[2] = 0;
|
||||||
netdev->dev_addr[3] = 0;
|
addr[3] = 0;
|
||||||
netdev->dev_addr[4] = 0;
|
addr[4] = 0;
|
||||||
netdev->dev_addr[5] = hw->my_epid; /* EPID */
|
addr[5] = hw->my_epid; /* EPID */
|
||||||
|
eth_hw_addr_set(netdev, addr);
|
||||||
|
|
||||||
err = register_netdev(netdev);
|
err = register_netdev(netdev);
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -502,6 +502,7 @@ static unsigned int write_eeprom(struct rr_private *rrpriv,
|
||||||
|
|
||||||
static int rr_init(struct net_device *dev)
|
static int rr_init(struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
u8 addr[HIPPI_ALEN] __aligned(4);
|
||||||
struct rr_private *rrpriv;
|
struct rr_private *rrpriv;
|
||||||
struct rr_regs __iomem *regs;
|
struct rr_regs __iomem *regs;
|
||||||
u32 sram_size, rev;
|
u32 sram_size, rev;
|
||||||
|
@ -537,10 +538,11 @@ static int rr_init(struct net_device *dev)
|
||||||
* other method I've seen. -VAL
|
* other method I've seen. -VAL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
*(__be16 *)(dev->dev_addr) =
|
*(__be16 *)(addr) =
|
||||||
htons(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA)));
|
htons(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA)));
|
||||||
*(__be32 *)(dev->dev_addr+2) =
|
*(__be32 *)(addr+2) =
|
||||||
htonl(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA[4])));
|
htonl(rr_read_eeprom_word(rrpriv, offsetof(struct eeprom, manf.BoardULA[4])));
|
||||||
|
dev_addr_set(dev, addr);
|
||||||
|
|
||||||
printk(" MAC: %pM\n", dev->dev_addr);
|
printk(" MAC: %pM\n", dev->dev_addr);
|
||||||
|
|
||||||
|
|
|
@ -284,12 +284,16 @@ static const struct net_device_ops plip_netdev_ops = {
|
||||||
static void
|
static void
|
||||||
plip_init_netdev(struct net_device *dev)
|
plip_init_netdev(struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
static const u8 addr_init[ETH_ALEN] = {
|
||||||
|
0xfc, 0xfc, 0xfc,
|
||||||
|
0xfc, 0xfc, 0xfc,
|
||||||
|
};
|
||||||
struct net_local *nl = netdev_priv(dev);
|
struct net_local *nl = netdev_priv(dev);
|
||||||
|
|
||||||
/* Then, override parts of it */
|
/* Then, override parts of it */
|
||||||
dev->tx_queue_len = 10;
|
dev->tx_queue_len = 10;
|
||||||
dev->flags = IFF_POINTOPOINT|IFF_NOARP;
|
dev->flags = IFF_POINTOPOINT|IFF_NOARP;
|
||||||
memset(dev->dev_addr, 0xfc, ETH_ALEN);
|
eth_hw_addr_set(dev, addr_init);
|
||||||
|
|
||||||
dev->netdev_ops = &plip_netdev_ops;
|
dev->netdev_ops = &plip_netdev_ops;
|
||||||
dev->header_ops = &plip_header_ops;
|
dev->header_ops = &plip_header_ops;
|
||||||
|
@ -1109,7 +1113,7 @@ plip_open(struct net_device *dev)
|
||||||
plip_init_dev(). */
|
plip_init_dev(). */
|
||||||
const struct in_ifaddr *ifa = rcu_dereference(in_dev->ifa_list);
|
const struct in_ifaddr *ifa = rcu_dereference(in_dev->ifa_list);
|
||||||
if (ifa != NULL) {
|
if (ifa != NULL) {
|
||||||
memcpy(dev->dev_addr+2, &ifa->ifa_local, 4);
|
dev_addr_mod(dev, 2, &ifa->ifa_local, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -482,6 +482,7 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
struct rionet_private *rnet;
|
struct rionet_private *rnet;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
u16 device_id;
|
u16 device_id;
|
||||||
const size_t rionet_active_bytes = sizeof(void *) *
|
const size_t rionet_active_bytes = sizeof(void *) *
|
||||||
RIO_MAX_ROUTE_ENTRIES(mport->sys_size);
|
RIO_MAX_ROUTE_ENTRIES(mport->sys_size);
|
||||||
|
@ -501,12 +502,13 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
|
||||||
|
|
||||||
/* Set the default MAC address */
|
/* Set the default MAC address */
|
||||||
device_id = rio_local_get_device_id(mport);
|
device_id = rio_local_get_device_id(mport);
|
||||||
ndev->dev_addr[0] = 0x00;
|
addr[0] = 0x00;
|
||||||
ndev->dev_addr[1] = 0x01;
|
addr[1] = 0x01;
|
||||||
ndev->dev_addr[2] = 0x00;
|
addr[2] = 0x00;
|
||||||
ndev->dev_addr[3] = 0x01;
|
addr[3] = 0x01;
|
||||||
ndev->dev_addr[4] = device_id >> 8;
|
addr[4] = device_id >> 8;
|
||||||
ndev->dev_addr[5] = device_id & 0xff;
|
addr[5] = device_id & 0xff;
|
||||||
|
eth_hw_addr_set(ndev, addr);
|
||||||
|
|
||||||
ndev->netdev_ops = &rionet_netdev_ops;
|
ndev->netdev_ops = &rionet_netdev_ops;
|
||||||
ndev->mtu = RIONET_MAX_MTU;
|
ndev->mtu = RIONET_MAX_MTU;
|
||||||
|
|
|
@ -149,6 +149,7 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
|
||||||
unsigned short ioaddr[2], irq;
|
unsigned short ioaddr[2], irq;
|
||||||
unsigned int serial_number;
|
unsigned int serial_number;
|
||||||
int error = -ENODEV;
|
int error = -ENODEV;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
if (pnp_device_attach(pdev) < 0)
|
if (pnp_device_attach(pdev) < 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -203,10 +204,13 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
|
||||||
dev->netdev_ops = &sb1000_netdev_ops;
|
dev->netdev_ops = &sb1000_netdev_ops;
|
||||||
|
|
||||||
/* hardware address is 0:0:serial_number */
|
/* hardware address is 0:0:serial_number */
|
||||||
dev->dev_addr[2] = serial_number >> 24 & 0xff;
|
addr[0] = 0;
|
||||||
dev->dev_addr[3] = serial_number >> 16 & 0xff;
|
addr[1] = 0;
|
||||||
dev->dev_addr[4] = serial_number >> 8 & 0xff;
|
addr[2] = serial_number >> 24 & 0xff;
|
||||||
dev->dev_addr[5] = serial_number >> 0 & 0xff;
|
addr[3] = serial_number >> 16 & 0xff;
|
||||||
|
addr[4] = serial_number >> 8 & 0xff;
|
||||||
|
addr[5] = serial_number >> 0 & 0xff;
|
||||||
|
eth_hw_addr_set(dev, addr);
|
||||||
|
|
||||||
pnp_set_drvdata(pdev, dev);
|
pnp_set_drvdata(pdev, dev);
|
||||||
|
|
||||||
|
|
|
@ -336,6 +336,7 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
unsigned char data[2];
|
unsigned char data[2];
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
retval = usbnet_get_endpoints(dev, intf);
|
retval = usbnet_get_endpoints(dev, intf);
|
||||||
if (retval)
|
if (retval)
|
||||||
|
@ -383,7 +384,8 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_CTRL, data, 0x02,
|
retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_CTRL, data, 0x02,
|
||||||
CONTROL_TIMEOUT_MS);
|
CONTROL_TIMEOUT_MS);
|
||||||
|
|
||||||
retval = get_mac_address(dev, dev->net->dev_addr);
|
retval = get_mac_address(dev, addr);
|
||||||
|
eth_hw_addr_set(dev->net, addr);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,7 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
u8 link[3];
|
u8 link[3];
|
||||||
int timeout = 50;
|
int timeout = 50;
|
||||||
struct cx82310_priv *priv;
|
struct cx82310_priv *priv;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
/* avoid ADSL modems - continue only if iProduct is "USB NET CARD" */
|
/* avoid ADSL modems - continue only if iProduct is "USB NET CARD" */
|
||||||
if (usb_string(udev, udev->descriptor.iProduct, buf, sizeof(buf)) > 0
|
if (usb_string(udev, udev->descriptor.iProduct, buf, sizeof(buf)) > 0
|
||||||
|
@ -202,12 +203,12 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* get the MAC address */
|
/* get the MAC address */
|
||||||
ret = cx82310_cmd(dev, CMD_GET_MAC_ADDR, true, NULL, 0,
|
ret = cx82310_cmd(dev, CMD_GET_MAC_ADDR, true, NULL, 0, addr, ETH_ALEN);
|
||||||
dev->net->dev_addr, ETH_ALEN);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
netdev_err(dev->net, "unable to read MAC address: %d\n", ret);
|
netdev_err(dev->net, "unable to read MAC address: %d\n", ret);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(dev->net, addr);
|
||||||
|
|
||||||
/* start (does not seem to have any effect?) */
|
/* start (does not seem to have any effect?) */
|
||||||
ret = cx82310_cmd(dev, CMD_START, false, NULL, 0, NULL, 0);
|
ret = cx82310_cmd(dev, CMD_START, false, NULL, 0, NULL, 0);
|
||||||
|
|
|
@ -1044,8 +1044,7 @@ err_fw:
|
||||||
goto err_all_but_rxbuf;
|
goto err_all_but_rxbuf;
|
||||||
|
|
||||||
memcpy(netdev->broadcast, &bcast_addr, sizeof(bcast_addr));
|
memcpy(netdev->broadcast, &bcast_addr, sizeof(bcast_addr));
|
||||||
memcpy(netdev->dev_addr, &kaweth->configuration.hw_addr,
|
eth_hw_addr_set(netdev, (u8 *)&kaweth->configuration.hw_addr);
|
||||||
sizeof(kaweth->configuration.hw_addr));
|
|
||||||
|
|
||||||
netdev->netdev_ops = &kaweth_netdev_ops;
|
netdev->netdev_ops = &kaweth_netdev_ops;
|
||||||
netdev->watchdog_timeo = KAWETH_TX_TIMEOUT;
|
netdev->watchdog_timeo = KAWETH_TX_TIMEOUT;
|
||||||
|
|
|
@ -473,17 +473,19 @@ static const struct net_device_ops mcs7830_netdev_ops = {
|
||||||
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
||||||
{
|
{
|
||||||
struct net_device *net = dev->net;
|
struct net_device *net = dev->net;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
int ret;
|
int ret;
|
||||||
int retry;
|
int retry;
|
||||||
|
|
||||||
/* Initial startup: Gather MAC address setting from EEPROM */
|
/* Initial startup: Gather MAC address setting from EEPROM */
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
for (retry = 0; retry < 5 && ret; retry++)
|
for (retry = 0; retry < 5 && ret; retry++)
|
||||||
ret = mcs7830_hif_get_mac_address(dev, net->dev_addr);
|
ret = mcs7830_hif_get_mac_address(dev, addr);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_warn(&dev->udev->dev, "Cannot read MAC address\n");
|
dev_warn(&dev->udev->dev, "Cannot read MAC address\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(net, addr);
|
||||||
|
|
||||||
mcs7830_data_set_multicast(net);
|
mcs7830_data_set_multicast(net);
|
||||||
|
|
||||||
|
|
|
@ -835,8 +835,11 @@ static int qmi_wwan_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
|
|
||||||
/* make MAC addr easily distinguishable from an IP header */
|
/* make MAC addr easily distinguishable from an IP header */
|
||||||
if (possibly_iphdr(dev->net->dev_addr)) {
|
if (possibly_iphdr(dev->net->dev_addr)) {
|
||||||
dev->net->dev_addr[0] |= 0x02; /* set local assignment bit */
|
u8 addr = dev->net->dev_addr[0];
|
||||||
dev->net->dev_addr[0] &= 0xbf; /* clear "IP" bit */
|
|
||||||
|
addr |= 0x02; /* set local assignment bit */
|
||||||
|
addr &= 0xbf; /* clear "IP" bit */
|
||||||
|
dev_addr_mod(dev->net, 0, &addr, 1);
|
||||||
}
|
}
|
||||||
dev->net->netdev_ops = &qmi_wwan_netdev_ops;
|
dev->net->netdev_ops = &qmi_wwan_netdev_ops;
|
||||||
dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
|
dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
|
||||||
|
|
|
@ -669,6 +669,7 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
0x00, 0x00, SIERRA_NET_HIP_MSYNC_ID, 0x00};
|
0x00, 0x00, SIERRA_NET_HIP_MSYNC_ID, 0x00};
|
||||||
static const u8 shdwn_tmplate[sizeof(priv->shdwn_msg)] = {
|
static const u8 shdwn_tmplate[sizeof(priv->shdwn_msg)] = {
|
||||||
0x00, 0x00, SIERRA_NET_HIP_SHUTD_ID, 0x00};
|
0x00, 0x00, SIERRA_NET_HIP_SHUTD_ID, 0x00};
|
||||||
|
u8 mod[2];
|
||||||
|
|
||||||
dev_dbg(&dev->udev->dev, "%s", __func__);
|
dev_dbg(&dev->udev->dev, "%s", __func__);
|
||||||
|
|
||||||
|
@ -698,8 +699,9 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
dev->net->netdev_ops = &sierra_net_device_ops;
|
dev->net->netdev_ops = &sierra_net_device_ops;
|
||||||
|
|
||||||
/* change MAC addr to include, ifacenum, and to be unique */
|
/* change MAC addr to include, ifacenum, and to be unique */
|
||||||
dev->net->dev_addr[ETH_ALEN-2] = atomic_inc_return(&iface_counter);
|
mod[0] = atomic_inc_return(&iface_counter);
|
||||||
dev->net->dev_addr[ETH_ALEN-1] = ifacenum;
|
mod[1] = ifacenum;
|
||||||
|
dev_addr_mod(dev->net, ETH_ALEN - 2, mod, 2);
|
||||||
|
|
||||||
/* prepare shutdown message template */
|
/* prepare shutdown message template */
|
||||||
memcpy(priv->shdwn_msg, shdwn_tmplate, sizeof(priv->shdwn_msg));
|
memcpy(priv->shdwn_msg, shdwn_tmplate, sizeof(priv->shdwn_msg));
|
||||||
|
|
|
@ -757,6 +757,8 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
||||||
|
|
||||||
static void smsc75xx_init_mac_address(struct usbnet *dev)
|
static void smsc75xx_init_mac_address(struct usbnet *dev)
|
||||||
{
|
{
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
/* maybe the boot loader passed the MAC address in devicetree */
|
/* maybe the boot loader passed the MAC address in devicetree */
|
||||||
if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) {
|
if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) {
|
||||||
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
||||||
|
@ -767,8 +769,8 @@ static void smsc75xx_init_mac_address(struct usbnet *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try reading mac address from EEPROM */
|
/* try reading mac address from EEPROM */
|
||||||
if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, addr) == 0) {
|
||||||
dev->net->dev_addr) == 0) {
|
eth_hw_addr_set(dev->net, addr);
|
||||||
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
||||||
/* eeprom values are valid so use them */
|
/* eeprom values are valid so use them */
|
||||||
netif_dbg(dev, ifup, dev->net,
|
netif_dbg(dev, ifup, dev->net,
|
||||||
|
|
|
@ -755,6 +755,8 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
||||||
|
|
||||||
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||||
{
|
{
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
/* maybe the boot loader passed the MAC address in devicetree */
|
/* maybe the boot loader passed the MAC address in devicetree */
|
||||||
if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) {
|
if (!platform_get_ethdev_address(&dev->udev->dev, dev->net)) {
|
||||||
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
||||||
|
@ -765,8 +767,8 @@ static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try reading mac address from EEPROM */
|
/* try reading mac address from EEPROM */
|
||||||
if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, addr) == 0) {
|
||||||
dev->net->dev_addr) == 0) {
|
eth_hw_addr_set(dev->net, addr);
|
||||||
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
if (is_valid_ether_addr(dev->net->dev_addr)) {
|
||||||
/* eeprom values are valid so use them */
|
/* eeprom values are valid so use them */
|
||||||
netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n");
|
netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n");
|
||||||
|
|
|
@ -320,6 +320,7 @@ static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct net_device *netdev;
|
struct net_device *netdev;
|
||||||
struct mii_if_info *mii;
|
struct mii_if_info *mii;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = usbnet_get_endpoints(dev, intf);
|
ret = usbnet_get_endpoints(dev, intf);
|
||||||
|
@ -350,11 +351,12 @@ static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
* EEPROM automatically to PAR. In case there is no EEPROM externally,
|
* EEPROM automatically to PAR. In case there is no EEPROM externally,
|
||||||
* a default MAC address is stored in PAR for making chip work properly.
|
* a default MAC address is stored in PAR for making chip work properly.
|
||||||
*/
|
*/
|
||||||
if (sr_read(dev, SR_PAR, ETH_ALEN, netdev->dev_addr) < 0) {
|
if (sr_read(dev, SR_PAR, ETH_ALEN, addr) < 0) {
|
||||||
netdev_err(netdev, "Error reading MAC address\n");
|
netdev_err(netdev, "Error reading MAC address\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(netdev, addr);
|
||||||
|
|
||||||
/* power up and reset phy */
|
/* power up and reset phy */
|
||||||
sr_write_reg(dev, SR_PRR, PRR_PHY_RST);
|
sr_write_reg(dev, SR_PRR, PRR_PHY_RST);
|
||||||
|
|
|
@ -731,6 +731,7 @@ static int sr9800_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
struct sr_data *data = (struct sr_data *)&dev->data;
|
struct sr_data *data = (struct sr_data *)&dev->data;
|
||||||
u16 led01_mux, led23_mux;
|
u16 led01_mux, led23_mux;
|
||||||
int ret, embd_phy;
|
int ret, embd_phy;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
u32 phyid;
|
u32 phyid;
|
||||||
u16 rx_ctl;
|
u16 rx_ctl;
|
||||||
|
|
||||||
|
@ -754,12 +755,12 @@ static int sr9800_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the MAC address */
|
/* Get the MAC address */
|
||||||
ret = sr_read_cmd(dev, SR_CMD_READ_NODE_ID, 0, 0, ETH_ALEN,
|
ret = sr_read_cmd(dev, SR_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, addr);
|
||||||
dev->net->dev_addr);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
netdev_dbg(dev->net, "Failed to read MAC address: %d\n", ret);
|
netdev_dbg(dev->net, "Failed to read MAC address: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(dev->net, addr);
|
||||||
netdev_dbg(dev->net, "mac addr : %pM\n", dev->net->dev_addr);
|
netdev_dbg(dev->net, "mac addr : %pM\n", dev->net->dev_addr);
|
||||||
|
|
||||||
/* Initialize MII structure */
|
/* Initialize MII structure */
|
||||||
|
|
|
@ -165,12 +165,13 @@ EXPORT_SYMBOL_GPL(usbnet_get_endpoints);
|
||||||
|
|
||||||
int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
||||||
{
|
{
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
int tmp = -1, ret;
|
int tmp = -1, ret;
|
||||||
unsigned char buf [13];
|
unsigned char buf [13];
|
||||||
|
|
||||||
ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
|
ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
|
||||||
if (ret == 12)
|
if (ret == 12)
|
||||||
tmp = hex2bin(dev->net->dev_addr, buf, 6);
|
tmp = hex2bin(addr, buf, 6);
|
||||||
if (tmp < 0) {
|
if (tmp < 0) {
|
||||||
dev_dbg(&dev->udev->dev,
|
dev_dbg(&dev->udev->dev,
|
||||||
"bad MAC string %d fetch, %d\n", iMACAddress, tmp);
|
"bad MAC string %d fetch, %d\n", iMACAddress, tmp);
|
||||||
|
@ -178,6 +179,7 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(dev->net, addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
|
EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
|
||||||
|
@ -1726,7 +1728,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||||
|
|
||||||
dev->net = net;
|
dev->net = net;
|
||||||
strscpy(net->name, "usb%d", sizeof(net->name));
|
strscpy(net->name, "usb%d", sizeof(net->name));
|
||||||
memcpy (net->dev_addr, node_id, sizeof node_id);
|
eth_hw_addr_set(net, node_id);
|
||||||
|
|
||||||
/* rx and tx sides can use different message sizes;
|
/* rx and tx sides can use different message sizes;
|
||||||
* bind() should set rx_urb_size in that case.
|
* bind() should set rx_urb_size in that case.
|
||||||
|
|
|
@ -1093,7 +1093,9 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
|
||||||
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||||
eth_hw_addr_random(dev);
|
eth_hw_addr_random(dev);
|
||||||
} else {
|
} else {
|
||||||
*(__be16 *)dev->dev_addr = htons(dlci);
|
__be16 addr = htons(dlci);
|
||||||
|
|
||||||
|
dev_addr_set(dev, (u8 *)&addr);
|
||||||
dlci_to_q922(dev->broadcast, dlci);
|
dlci_to_q922(dev->broadcast, dlci);
|
||||||
}
|
}
|
||||||
dev->netdev_ops = &pvc_ops;
|
dev->netdev_ops = &pvc_ops;
|
||||||
|
|
|
@ -494,6 +494,9 @@ static const struct net_device_ops xenvif_netdev_ops = {
|
||||||
struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
|
struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
|
||||||
unsigned int handle)
|
unsigned int handle)
|
||||||
{
|
{
|
||||||
|
static const u8 dummy_addr[ETH_ALEN] = {
|
||||||
|
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
};
|
||||||
int err;
|
int err;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
struct xenvif *vif;
|
struct xenvif *vif;
|
||||||
|
@ -551,8 +554,7 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
|
||||||
* stolen by an Ethernet bridge for STP purposes.
|
* stolen by an Ethernet bridge for STP purposes.
|
||||||
* (FE:FF:FF:FF:FF:FF)
|
* (FE:FF:FF:FF:FF:FF)
|
||||||
*/
|
*/
|
||||||
eth_broadcast_addr(dev->dev_addr);
|
eth_hw_addr_set(dev, dummy_addr);
|
||||||
dev->dev_addr[0] &= ~0x01;
|
|
||||||
|
|
||||||
netif_carrier_off(dev);
|
netif_carrier_off(dev);
|
||||||
|
|
||||||
|
|
|
@ -2157,6 +2157,7 @@ static int talk_to_netback(struct xenbus_device *dev,
|
||||||
unsigned int max_queues = 0;
|
unsigned int max_queues = 0;
|
||||||
struct netfront_queue *queue = NULL;
|
struct netfront_queue *queue = NULL;
|
||||||
unsigned int num_queues = 1;
|
unsigned int num_queues = 1;
|
||||||
|
u8 addr[ETH_ALEN];
|
||||||
|
|
||||||
info->netdev->irq = 0;
|
info->netdev->irq = 0;
|
||||||
|
|
||||||
|
@ -2170,11 +2171,12 @@ static int talk_to_netback(struct xenbus_device *dev,
|
||||||
"feature-split-event-channels", 0);
|
"feature-split-event-channels", 0);
|
||||||
|
|
||||||
/* Read mac addr. */
|
/* Read mac addr. */
|
||||||
err = xen_net_read_mac(dev, info->netdev->dev_addr);
|
err = xen_net_read_mac(dev, addr);
|
||||||
if (err) {
|
if (err) {
|
||||||
xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
|
xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
|
||||||
goto out_unlocked;
|
goto out_unlocked;
|
||||||
}
|
}
|
||||||
|
eth_hw_addr_set(info->netdev, addr);
|
||||||
|
|
||||||
info->netback_has_xdp_headroom = xenbus_read_unsigned(info->xbdev->otherend,
|
info->netback_has_xdp_headroom = xenbus_read_unsigned(info->xbdev->otherend,
|
||||||
"feature-xdp-headroom", 0);
|
"feature-xdp-headroom", 0);
|
||||||
|
|
|
@ -2162,7 +2162,7 @@ lcs_new_device(struct ccwgroup_device *ccwgdev)
|
||||||
card->dev->ml_priv = card;
|
card->dev->ml_priv = card;
|
||||||
card->dev->netdev_ops = &lcs_netdev_ops;
|
card->dev->netdev_ops = &lcs_netdev_ops;
|
||||||
card->dev->dev_port = card->portno;
|
card->dev->dev_port = card->portno;
|
||||||
memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH);
|
eth_hw_addr_set(card->dev, card->mac);
|
||||||
#ifdef CONFIG_IP_MULTICAST
|
#ifdef CONFIG_IP_MULTICAST
|
||||||
if (!lcs_check_multicast_support(card))
|
if (!lcs_check_multicast_support(card))
|
||||||
card->dev->netdev_ops = &lcs_mc_netdev_ops;
|
card->dev->netdev_ops = &lcs_mc_netdev_ops;
|
||||||
|
|
|
@ -4375,7 +4375,7 @@ static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
|
||||||
!(adp_cmd->hdr.flags & QETH_SETADP_FLAGS_VIRTUAL_MAC))
|
!(adp_cmd->hdr.flags & QETH_SETADP_FLAGS_VIRTUAL_MAC))
|
||||||
return -EADDRNOTAVAIL;
|
return -EADDRNOTAVAIL;
|
||||||
|
|
||||||
ether_addr_copy(card->dev->dev_addr, adp_cmd->data.change_addr.addr);
|
eth_hw_addr_set(card->dev, adp_cmd->data.change_addr.addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5046,7 +5046,7 @@ int qeth_vm_request_mac(struct qeth_card *card)
|
||||||
QETH_CARD_TEXT(card, 2, "badmac");
|
QETH_CARD_TEXT(card, 2, "badmac");
|
||||||
QETH_CARD_HEX(card, 2, response->mac, ETH_ALEN);
|
QETH_CARD_HEX(card, 2, response->mac, ETH_ALEN);
|
||||||
} else {
|
} else {
|
||||||
ether_addr_copy(card->dev->dev_addr, response->mac);
|
eth_hw_addr_set(card->dev, response->mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -71,7 +71,7 @@ static int qeth_l2_send_setdelmac_cb(struct qeth_card *card,
|
||||||
return qeth_l2_setdelmac_makerc(card, cmd->hdr.return_code);
|
return qeth_l2_setdelmac_makerc(card, cmd->hdr.return_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qeth_l2_send_setdelmac(struct qeth_card *card, __u8 *mac,
|
static int qeth_l2_send_setdelmac(struct qeth_card *card, const __u8 *mac,
|
||||||
enum qeth_ipa_cmds ipacmd)
|
enum qeth_ipa_cmds ipacmd)
|
||||||
{
|
{
|
||||||
struct qeth_ipa_cmd *cmd;
|
struct qeth_ipa_cmd *cmd;
|
||||||
|
@ -88,7 +88,7 @@ static int qeth_l2_send_setdelmac(struct qeth_card *card, __u8 *mac,
|
||||||
return qeth_send_ipa_cmd(card, iob, qeth_l2_send_setdelmac_cb, NULL);
|
return qeth_send_ipa_cmd(card, iob, qeth_l2_send_setdelmac_cb, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qeth_l2_send_setmac(struct qeth_card *card, __u8 *mac)
|
static int qeth_l2_send_setmac(struct qeth_card *card, const __u8 *mac)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
ether_addr_copy(old_addr, dev->dev_addr);
|
ether_addr_copy(old_addr, dev->dev_addr);
|
||||||
ether_addr_copy(dev->dev_addr, addr->sa_data);
|
eth_hw_addr_set(dev, addr->sa_data);
|
||||||
|
|
||||||
if (card->info.dev_addr_is_registered)
|
if (card->info.dev_addr_is_registered)
|
||||||
qeth_l2_remove_mac(card, old_addr);
|
qeth_l2_remove_mac(card, old_addr);
|
||||||
|
|
|
@ -913,8 +913,7 @@ static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card,
|
||||||
if (!is_valid_ether_addr(cmd->data.create_destroy_addr.mac_addr))
|
if (!is_valid_ether_addr(cmd->data.create_destroy_addr.mac_addr))
|
||||||
return -EADDRNOTAVAIL;
|
return -EADDRNOTAVAIL;
|
||||||
|
|
||||||
ether_addr_copy(card->dev->dev_addr,
|
eth_hw_addr_set(card->dev, cmd->data.create_destroy_addr.mac_addr);
|
||||||
cmd->data.create_destroy_addr.mac_addr);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue