/** * cvm_oct_common_set_mac_address - set the hardware MAC address for a device * @dev: The device in question. * @addr: Socket address. * * Returns Zero on success */ static int cvm_oct_common_set_mac_address(struct net_device *dev, void *addr) { int r = eth_mac_addr(dev, addr); if (r) return r; return cvm_oct_set_mac_filter(dev); }
/** * cvm_oct_common_init - per network device initialization * @dev: Device to initialize * * Returns Zero on success */ int cvm_oct_common_init(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); const u8 *mac = NULL; if (priv->of_node) mac = of_get_mac_address(priv->of_node); if (mac && is_valid_ether_addr(mac)) { memcpy(dev->dev_addr, mac, ETH_ALEN); dev->addr_assign_type &= ~NET_ADDR_RANDOM; } else { eth_hw_addr_random(dev); } /* * Force the interface to use the POW send if always_use_pow * was specified or it is in the pow send list. */ if ((pow_send_group != -1) && (always_use_pow || strstr(pow_send_list, dev->name))) priv->queue = -1; if (priv->queue != -1) { dev->features |= NETIF_F_SG; if (USE_HW_TCPUDP_CHECKSUM) dev->features |= NETIF_F_IP_CSUM; } /* We do our own locking, Linux doesn't need to */ dev->features |= NETIF_F_LLTX; SET_ETHTOOL_OPS(dev, &cvm_oct_ethtool_ops); cvm_oct_phy_setup_device(dev); cvm_oct_set_mac_filter(dev); dev->netdev_ops->ndo_change_mtu(dev, dev->mtu); /* * Zero out stats for port so we won't mistakenly show * counters from the bootloader. */ memset(dev->netdev_ops->ndo_get_stats(dev), 0, sizeof(struct net_device_stats)); return 0; }
/** * cvm_oct_common_init - per network device initialization * @dev: Device to initialize * * Returns Zero on success */ int cvm_oct_common_init(struct net_device *dev) { struct octeon_ethernet *priv = netdev_priv(dev); const u8 *mac = NULL; if (priv->of_node) mac = of_get_mac_address(priv->of_node); if (mac) ether_addr_copy(dev->dev_addr, mac); else eth_hw_addr_random(dev); /* * Force the interface to use the POW send if always_use_pow * was specified or it is in the pow send list. */ if ((pow_send_group != -1) && (always_use_pow || strstr(pow_send_list, dev->name))) priv->queue = -1; if (priv->queue != -1) dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; /* We do our own locking, Linux doesn't need to */ dev->features |= NETIF_F_LLTX; dev->ethtool_ops = &cvm_oct_ethtool_ops; cvm_oct_set_mac_filter(dev); dev->netdev_ops->ndo_change_mtu(dev, dev->mtu); /* * Zero out stats for port so we won't mistakenly show * counters from the bootloader. */ memset(dev->netdev_ops->ndo_get_stats(dev), 0, sizeof(struct net_device_stats)); if (dev->netdev_ops->ndo_stop) dev->netdev_ops->ndo_stop(dev); return 0; }