static int sb_eth_raw_read_rom_hwaddr(struct udevice *dev) { struct eth_pdata *pdata = dev_get_platdata(dev); net_random_ethaddr(pdata->enetaddr); return 0; }
int misc_init_r(void) { uchar enetaddr[6]; if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { puts("Warning: Generating 'random' MAC address\n"); net_random_ethaddr(enetaddr); eth_setenv_enetaddr("ethaddr", enetaddr); } return 0; }
static void board_init_enetaddr(char *var) { uchar enetaddr[6]; if (eth_getenv_enetaddr(var, enetaddr)) return; printf("Warning: %s: generating 'random' MAC address\n", var); net_random_ethaddr(enetaddr); eth_setenv_enetaddr(var, enetaddr); }
static void rescue_mode(void) { uchar enetaddr[6]; printf("Entering rescue mode..\n"); #ifdef CONFIG_RANDOM_MACADDR if (!eth_getenv_enetaddr("ethaddr", enetaddr)) { net_random_ethaddr(enetaddr); if (eth_setenv_enetaddr("ethaddr", enetaddr)) { printf("Failed to set ethernet address\n"); set_led(LED_ALARM_BLINKING); return; } } #endif setenv("bootsource", "rescue"); }
static int eth_post_probe(struct udevice *dev) { struct eth_device_priv *priv = dev->uclass_priv; struct eth_pdata *pdata = dev->platdata; unsigned char env_enetaddr[ARP_HLEN]; #if defined(CONFIG_NEEDS_MANUAL_RELOC) struct eth_ops *ops = eth_get_ops(dev); static int reloc_done; if (!reloc_done) { if (ops->start) ops->start += gd->reloc_off; if (ops->send) ops->send += gd->reloc_off; if (ops->recv) ops->recv += gd->reloc_off; if (ops->free_pkt) ops->free_pkt += gd->reloc_off; if (ops->stop) ops->stop += gd->reloc_off; #ifdef CONFIG_MCAST_TFTP if (ops->mcast) ops->mcast += gd->reloc_off; #endif if (ops->write_hwaddr) ops->write_hwaddr += gd->reloc_off; if (ops->read_rom_hwaddr) ops->read_rom_hwaddr += gd->reloc_off; reloc_done++; } #endif priv->state = ETH_STATE_INIT; /* Check if the device has a MAC address in ROM */ if (eth_get_ops(dev)->read_rom_hwaddr) eth_get_ops(dev)->read_rom_hwaddr(dev); eth_getenv_enetaddr_by_index("eth", dev->seq, env_enetaddr); if (!is_zero_ethaddr(env_enetaddr)) { if (!is_zero_ethaddr(pdata->enetaddr) && memcmp(pdata->enetaddr, env_enetaddr, ARP_HLEN)) { printf("\nWarning: %s MAC addresses don't match:\n", dev->name); printf("Address in ROM is %pM\n", pdata->enetaddr); printf("Address in environment is %pM\n", env_enetaddr); } /* Override the ROM MAC address */ memcpy(pdata->enetaddr, env_enetaddr, ARP_HLEN); } else if (is_valid_ethaddr(pdata->enetaddr)) { eth_setenv_enetaddr_by_index("eth", dev->seq, pdata->enetaddr); printf("\nWarning: %s using MAC address from ROM\n", dev->name); } else if (is_zero_ethaddr(pdata->enetaddr) || !is_valid_ethaddr(pdata->enetaddr)) { #ifdef CONFIG_NET_RANDOM_ETHADDR net_random_ethaddr(pdata->enetaddr); printf("\nWarning: %s (eth%d) using random MAC address - %pM\n", dev->name, dev->seq, pdata->enetaddr); #else printf("\nError: %s address not set.\n", dev->name); return -EINVAL; #endif } return 0; }