Loading drivers/net/r8169.c +38 −0 Original line number Diff line number Diff line Loading @@ -1382,6 +1382,41 @@ static void rtl8169_netpoll(struct net_device *dev) } #endif static void __rtl8169_set_mac_addr(struct net_device *dev, void __iomem *ioaddr) { unsigned int i, j; RTL_W8(Cfg9346, Cfg9346_Unlock); for (i = 0; i < 2; i++) { __le32 l = 0; for (j = 0; j < 4; j++) { l <<= 8; l |= dev->dev_addr[4*i + j]; } RTL_W32(MAC0 + 4*i, cpu_to_be32(l)); } RTL_W8(Cfg9346, Cfg9346_Lock); } static int rtl8169_set_mac_addr(struct net_device *dev, void *p) { struct rtl8169_private *tp = netdev_priv(dev); struct sockaddr *addr = p; if (!is_valid_ether_addr(addr->sa_data)) return -EINVAL; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); if (netif_running(dev)) { spin_lock_irq(&tp->lock); __rtl8169_set_mac_addr(dev, tp->mmio_addr); spin_unlock_irq(&tp->lock); } return 0; } static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev, void __iomem *ioaddr) { Loading Loading @@ -1609,6 +1644,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) dev->stop = rtl8169_close; dev->tx_timeout = rtl8169_tx_timeout; dev->set_multicast_list = rtl8169_set_rx_mode; dev->set_mac_address = rtl8169_set_mac_addr; dev->watchdog_timeo = RTL8169_TX_TIMEOUT; dev->irq = pdev->irq; dev->base_addr = (unsigned long) ioaddr; Loading Loading @@ -1842,6 +1878,8 @@ rtl8169_hw_start(struct net_device *dev) /* Enable all known interrupts by setting the interrupt mask. */ RTL_W16(IntrMask, rtl8169_intr_mask); __rtl8169_set_mac_addr(dev, ioaddr); netif_start_queue(dev); } Loading Loading
drivers/net/r8169.c +38 −0 Original line number Diff line number Diff line Loading @@ -1382,6 +1382,41 @@ static void rtl8169_netpoll(struct net_device *dev) } #endif static void __rtl8169_set_mac_addr(struct net_device *dev, void __iomem *ioaddr) { unsigned int i, j; RTL_W8(Cfg9346, Cfg9346_Unlock); for (i = 0; i < 2; i++) { __le32 l = 0; for (j = 0; j < 4; j++) { l <<= 8; l |= dev->dev_addr[4*i + j]; } RTL_W32(MAC0 + 4*i, cpu_to_be32(l)); } RTL_W8(Cfg9346, Cfg9346_Lock); } static int rtl8169_set_mac_addr(struct net_device *dev, void *p) { struct rtl8169_private *tp = netdev_priv(dev); struct sockaddr *addr = p; if (!is_valid_ether_addr(addr->sa_data)) return -EINVAL; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); if (netif_running(dev)) { spin_lock_irq(&tp->lock); __rtl8169_set_mac_addr(dev, tp->mmio_addr); spin_unlock_irq(&tp->lock); } return 0; } static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev, void __iomem *ioaddr) { Loading Loading @@ -1609,6 +1644,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) dev->stop = rtl8169_close; dev->tx_timeout = rtl8169_tx_timeout; dev->set_multicast_list = rtl8169_set_rx_mode; dev->set_mac_address = rtl8169_set_mac_addr; dev->watchdog_timeo = RTL8169_TX_TIMEOUT; dev->irq = pdev->irq; dev->base_addr = (unsigned long) ioaddr; Loading Loading @@ -1842,6 +1878,8 @@ rtl8169_hw_start(struct net_device *dev) /* Enable all known interrupts by setting the interrupt mask. */ RTL_W16(IntrMask, rtl8169_intr_mask); __rtl8169_set_mac_addr(dev, ioaddr); netif_start_queue(dev); } Loading