/*********************************************************** * eth_set_multicast_list -- * * Add multicast addresses or set promiscuous mode. * * This function should have been but was not included * * by Marvell. -bbozarth * ***********************************************************/ void mv_eth_set_multicast_list(struct net_device *dev) { mv_eth_priv *priv = MV_ETH_PRIV(dev); int queue = ETH_DEF_RXQ; struct dev_mc_list *curr_addr = dev->mc_list; int i; if (dev->flags & IFF_PROMISC) { mvEthRxFilterModeSet(priv->hal_priv, 1); } else if (dev->flags & IFF_ALLMULTI) { mvEthRxFilterModeSet(priv->hal_priv, 0); mvEthMacAddrSet(priv->hal_priv, dev->dev_addr, queue); mvEthSetSpecialMcastTable(priv->port, queue); mvEthSetOtherMcastTable(priv->port, queue); } else if (dev->mc_count) { mvEthRxFilterModeSet(priv->hal_priv, 0); mvEthMacAddrSet(priv->hal_priv, dev->dev_addr, queue); for (i=0; i<dev->mc_count; i++, curr_addr = curr_addr->next) { if (!curr_addr) break; mvEthMcastAddrSet(priv->hal_priv, curr_addr->dmi_addr, queue); } } else /* No Mcast addrs, not promisc or all multi - clear tables */ { mvEthRxFilterModeSet(priv->hal_priv, 0); mvEthMacAddrSet(priv->hal_priv, dev->dev_addr, queue); } }
/*********************************************************** * eth_set_multicast_list -- * * Add multicast addresses or set promiscuous mode. * * This function should have been but was not included * * by Marvell. -bbozarth * ***********************************************************/ void mv_eth_set_multicast_list(struct net_device *dev) { mv_eth_priv *priv = MV_ETH_PRIV(dev); int queue = ETH_DEF_RXQ; int i; if (dev->flags & IFF_PROMISC) { mvEthRxFilterModeSet(priv->hal_priv, 1); } else if (dev->flags & IFF_ALLMULTI) { mvEthRxFilterModeSet(priv->hal_priv, 0); mvEthMacAddrSet(priv->hal_priv, dev->dev_addr, queue); mvEthSetSpecialMcastTable(priv->port, queue); mvEthSetOtherMcastTable(priv->port, queue); } else if (!netdev_mc_empty(dev)) { struct netdev_hw_addr *ha; mvEthRxFilterModeSet(priv->hal_priv, 0); mvEthMacAddrSet(priv->hal_priv, dev->dev_addr, queue); netdev_for_each_mc_addr(ha, dev) { mvEthMcastAddrSet(priv->hal_priv, ha->addr, queue); } }
void ethMcastAdd(int port, char* macStr, int queue) { void* pHndl; MV_U8 macAddr[MV_MAC_ADDR_SIZE]; pHndl = mvEthPortHndlGet(port); if(pHndl != NULL) { mvMacStrToHex(macStr, macAddr); mvEthMcastAddrSet(pHndl, macAddr, queue); } }