Lines Matching full:lp
98 static int amd8111e_read_phy(struct amd8111e_priv *lp, in amd8111e_read_phy() argument
101 void __iomem *mmio = lp->mmio; in amd8111e_read_phy()
127 static int amd8111e_write_phy(struct amd8111e_priv *lp, in amd8111e_write_phy() argument
131 void __iomem *mmio = lp->mmio; in amd8111e_write_phy()
159 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_mdio_read() local
162 amd8111e_read_phy(lp, phy_id, reg_num, ®_val); in amd8111e_mdio_read()
171 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_mdio_write() local
173 amd8111e_write_phy(lp, phy_id, reg_num, val); in amd8111e_mdio_write()
181 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_ext_phy() local
185 advert = amd8111e_mdio_read(dev, lp->ext_phy_addr, MII_ADVERTISE); in amd8111e_set_ext_phy()
187 switch (lp->ext_phy_option) { in amd8111e_set_ext_phy()
209 amd8111e_mdio_write(dev, lp->ext_phy_addr, MII_ADVERTISE, tmp); in amd8111e_set_ext_phy()
211 bmcr = amd8111e_mdio_read(dev, lp->ext_phy_addr, MII_BMCR); in amd8111e_set_ext_phy()
213 amd8111e_mdio_write(dev, lp->ext_phy_addr, MII_BMCR, bmcr); in amd8111e_set_ext_phy()
222 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_free_skbs() local
228 if (lp->tx_skbuff[i]) { in amd8111e_free_skbs()
229 dma_unmap_single(&lp->pci_dev->dev, in amd8111e_free_skbs()
230 lp->tx_dma_addr[i], in amd8111e_free_skbs()
231 lp->tx_skbuff[i]->len, DMA_TO_DEVICE); in amd8111e_free_skbs()
232 dev_kfree_skb(lp->tx_skbuff[i]); in amd8111e_free_skbs()
233 lp->tx_skbuff[i] = NULL; in amd8111e_free_skbs()
234 lp->tx_dma_addr[i] = 0; in amd8111e_free_skbs()
239 rx_skbuff = lp->rx_skbuff[i]; in amd8111e_free_skbs()
241 dma_unmap_single(&lp->pci_dev->dev, in amd8111e_free_skbs()
242 lp->rx_dma_addr[i], in amd8111e_free_skbs()
243 lp->rx_buff_len - 2, DMA_FROM_DEVICE); in amd8111e_free_skbs()
244 dev_kfree_skb(lp->rx_skbuff[i]); in amd8111e_free_skbs()
245 lp->rx_skbuff[i] = NULL; in amd8111e_free_skbs()
246 lp->rx_dma_addr[i] = 0; in amd8111e_free_skbs()
258 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_rx_buff_len() local
265 lp->rx_buff_len = mtu + ETH_HLEN + 10; in amd8111e_set_rx_buff_len()
266 lp->options |= OPTION_JUMBO_ENABLE; in amd8111e_set_rx_buff_len()
268 lp->rx_buff_len = PKT_BUFF_SZ; in amd8111e_set_rx_buff_len()
269 lp->options &= ~OPTION_JUMBO_ENABLE; in amd8111e_set_rx_buff_len()
280 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_init_ring() local
283 lp->rx_idx = lp->tx_idx = 0; in amd8111e_init_ring()
284 lp->tx_complete_idx = 0; in amd8111e_init_ring()
285 lp->tx_ring_idx = 0; in amd8111e_init_ring()
288 if (lp->opened) in amd8111e_init_ring()
294 lp->tx_ring = dma_alloc_coherent(&lp->pci_dev->dev, in amd8111e_init_ring()
296 &lp->tx_ring_dma_addr, GFP_ATOMIC); in amd8111e_init_ring()
297 if (!lp->tx_ring) in amd8111e_init_ring()
300 lp->rx_ring = dma_alloc_coherent(&lp->pci_dev->dev, in amd8111e_init_ring()
302 &lp->rx_ring_dma_addr, GFP_ATOMIC); in amd8111e_init_ring()
303 if (!lp->rx_ring) in amd8111e_init_ring()
313 lp->rx_skbuff[i] = netdev_alloc_skb(dev, lp->rx_buff_len); in amd8111e_init_ring()
314 if (!lp->rx_skbuff[i]) { in amd8111e_init_ring()
317 dev_kfree_skb(lp->rx_skbuff[i]); in amd8111e_init_ring()
320 skb_reserve(lp->rx_skbuff[i], 2); in amd8111e_init_ring()
324 lp->rx_dma_addr[i] = dma_map_single(&lp->pci_dev->dev, in amd8111e_init_ring()
325 lp->rx_skbuff[i]->data, in amd8111e_init_ring()
326 lp->rx_buff_len - 2, in amd8111e_init_ring()
329 lp->rx_ring[i].buff_phy_addr = cpu_to_le32(lp->rx_dma_addr[i]); in amd8111e_init_ring()
330 lp->rx_ring[i].buff_count = cpu_to_le16(lp->rx_buff_len-2); in amd8111e_init_ring()
332 lp->rx_ring[i].rx_flags = cpu_to_le16(OWN_BIT); in amd8111e_init_ring()
337 lp->tx_ring[i].buff_phy_addr = 0; in amd8111e_init_ring()
338 lp->tx_ring[i].tx_flags = 0; in amd8111e_init_ring()
339 lp->tx_ring[i].buff_count = 0; in amd8111e_init_ring()
346 dma_free_coherent(&lp->pci_dev->dev, in amd8111e_init_ring()
348 lp->rx_ring, lp->rx_ring_dma_addr); in amd8111e_init_ring()
352 dma_free_coherent(&lp->pci_dev->dev, in amd8111e_init_ring()
354 lp->tx_ring, lp->tx_ring_dma_addr); in amd8111e_init_ring()
368 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_coalesce() local
369 void __iomem *mmio = lp->mmio; in amd8111e_set_coalesce()
370 struct amd8111e_coalesce_conf *coal_conf = &lp->coal_conf; in amd8111e_set_coalesce()
424 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_restart() local
425 void __iomem *mmio = lp->mmio; in amd8111e_restart()
453 writel((u32)lp->tx_ring_dma_addr, mmio + XMT_RING_BASE_ADDR0); in amd8111e_restart()
454 writel((u32)lp->rx_ring_dma_addr, mmio + RCV_RING_BASE_ADDR0); in amd8111e_restart()
463 if (lp->options & OPTION_JUMBO_ENABLE) { in amd8111e_restart()
484 if (lp->options & OPTION_INTR_COAL_ENABLE) { in amd8111e_restart()
499 static void amd8111e_init_hw_default(struct amd8111e_priv *lp) in amd8111e_init_hw_default() argument
503 void __iomem *mmio = lp->mmio; in amd8111e_init_hw_default()
510 writew( 0x8100 | lp->ext_phy_addr, mmio + AUTOPOLL0); in amd8111e_init_hw_default()
574 if (lp->options & OPTION_JUMBO_ENABLE) in amd8111e_init_hw_default()
590 static void amd8111e_disable_interrupt(struct amd8111e_priv *lp) in amd8111e_disable_interrupt() argument
595 writel(INTREN, lp->mmio + CMD0); in amd8111e_disable_interrupt()
598 intr0 = readl(lp->mmio + INT0); in amd8111e_disable_interrupt()
599 writel(intr0, lp->mmio + INT0); in amd8111e_disable_interrupt()
602 readl(lp->mmio + INT0); in amd8111e_disable_interrupt()
607 static void amd8111e_stop_chip(struct amd8111e_priv *lp) in amd8111e_stop_chip() argument
609 writel(RUN, lp->mmio + CMD0); in amd8111e_stop_chip()
612 readl(lp->mmio + CMD0); in amd8111e_stop_chip()
616 static void amd8111e_free_ring(struct amd8111e_priv *lp) in amd8111e_free_ring() argument
619 if (lp->rx_ring) { in amd8111e_free_ring()
620 dma_free_coherent(&lp->pci_dev->dev, in amd8111e_free_ring()
622 lp->rx_ring, lp->rx_ring_dma_addr); in amd8111e_free_ring()
623 lp->rx_ring = NULL; in amd8111e_free_ring()
626 if (lp->tx_ring) { in amd8111e_free_ring()
627 dma_free_coherent(&lp->pci_dev->dev, in amd8111e_free_ring()
629 lp->tx_ring, lp->tx_ring_dma_addr); in amd8111e_free_ring()
631 lp->tx_ring = NULL; in amd8111e_free_ring()
642 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_tx() local
646 while (lp->tx_complete_idx != lp->tx_idx) { in amd8111e_tx()
647 tx_index = lp->tx_complete_idx & TX_RING_DR_MOD_MASK; in amd8111e_tx()
648 status = le16_to_cpu(lp->tx_ring[tx_index].tx_flags); in amd8111e_tx()
653 lp->tx_ring[tx_index].buff_phy_addr = 0; in amd8111e_tx()
656 if (lp->tx_skbuff[tx_index]) { in amd8111e_tx()
657 dma_unmap_single(&lp->pci_dev->dev, in amd8111e_tx()
658 lp->tx_dma_addr[tx_index], in amd8111e_tx()
659 lp->tx_skbuff[tx_index]->len, in amd8111e_tx()
661 dev_consume_skb_irq(lp->tx_skbuff[tx_index]); in amd8111e_tx()
662 lp->tx_skbuff[tx_index] = NULL; in amd8111e_tx()
663 lp->tx_dma_addr[tx_index] = 0; in amd8111e_tx()
665 lp->tx_complete_idx++; in amd8111e_tx()
667 lp->coal_conf.tx_packets++; in amd8111e_tx()
668 lp->coal_conf.tx_bytes += in amd8111e_tx()
669 le16_to_cpu(lp->tx_ring[tx_index].buff_count); in amd8111e_tx()
672 lp->tx_complete_idx > lp->tx_idx - NUM_TX_BUFFERS + 2) { in amd8111e_tx()
674 /* lp->tx_full = 0; */ in amd8111e_tx()
684 struct amd8111e_priv *lp = container_of(napi, struct amd8111e_priv, napi); in amd8111e_rx_poll() local
685 struct net_device *dev = lp->amd8111e_net_dev; in amd8111e_rx_poll()
686 int rx_index = lp->rx_idx & RX_RING_DR_MOD_MASK; in amd8111e_rx_poll()
687 void __iomem *mmio = lp->mmio; in amd8111e_rx_poll()
697 status = le16_to_cpu(lp->rx_ring[rx_index].rx_flags); in amd8111e_rx_poll()
709 lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS; in amd8111e_rx_poll()
715 lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS; in amd8111e_rx_poll()
718 pkt_len = le16_to_cpu(lp->rx_ring[rx_index].msg_count) - 4; in amd8111e_rx_poll()
730 lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS; in amd8111e_rx_poll()
731 lp->drv_rx_errors++; in amd8111e_rx_poll()
734 new_skb = netdev_alloc_skb(dev, lp->rx_buff_len); in amd8111e_rx_poll()
739 lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS; in amd8111e_rx_poll()
740 lp->drv_rx_errors++; in amd8111e_rx_poll()
745 skb = lp->rx_skbuff[rx_index]; in amd8111e_rx_poll()
746 dma_unmap_single(&lp->pci_dev->dev, lp->rx_dma_addr[rx_index], in amd8111e_rx_poll()
747 lp->rx_buff_len - 2, DMA_FROM_DEVICE); in amd8111e_rx_poll()
749 lp->rx_skbuff[rx_index] = new_skb; in amd8111e_rx_poll()
750 lp->rx_dma_addr[rx_index] = dma_map_single(&lp->pci_dev->dev, in amd8111e_rx_poll()
752 lp->rx_buff_len - 2, in amd8111e_rx_poll()
759 u16 vlan_tag = le16_to_cpu(lp->rx_ring[rx_index].tag_ctrl_info); in amd8111e_rx_poll()
765 lp->coal_conf.rx_packets++; in amd8111e_rx_poll()
766 lp->coal_conf.rx_bytes += pkt_len; in amd8111e_rx_poll()
770 lp->rx_ring[rx_index].buff_phy_addr in amd8111e_rx_poll()
771 = cpu_to_le32(lp->rx_dma_addr[rx_index]); in amd8111e_rx_poll()
772 lp->rx_ring[rx_index].buff_count = in amd8111e_rx_poll()
773 cpu_to_le16(lp->rx_buff_len-2); in amd8111e_rx_poll()
775 lp->rx_ring[rx_index].rx_flags |= cpu_to_le16(OWN_BIT); in amd8111e_rx_poll()
776 rx_index = (++lp->rx_idx) & RX_RING_DR_MOD_MASK; in amd8111e_rx_poll()
783 spin_lock_irqsave(&lp->lock, flags); in amd8111e_rx_poll()
786 spin_unlock_irqrestore(&lp->lock, flags); in amd8111e_rx_poll()
795 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_link_change() local
799 status0 = readl(lp->mmio + STAT0); in amd8111e_link_change()
803 lp->link_config.autoneg = AUTONEG_ENABLE; in amd8111e_link_change()
805 lp->link_config.autoneg = AUTONEG_DISABLE; in amd8111e_link_change()
808 lp->link_config.duplex = DUPLEX_FULL; in amd8111e_link_change()
810 lp->link_config.duplex = DUPLEX_HALF; in amd8111e_link_change()
813 lp->link_config.speed = SPEED_10; in amd8111e_link_change()
815 lp->link_config.speed = SPEED_100; in amd8111e_link_change()
818 (lp->link_config.speed == SPEED_100) ? in amd8111e_link_change()
820 (lp->link_config.duplex == DUPLEX_FULL) ? in amd8111e_link_change()
825 lp->link_config.speed = SPEED_INVALID; in amd8111e_link_change()
826 lp->link_config.duplex = DUPLEX_INVALID; in amd8111e_link_change()
827 lp->link_config.autoneg = AUTONEG_INVALID; in amd8111e_link_change()
858 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_stats() local
859 void __iomem *mmio = lp->mmio; in amd8111e_get_stats()
863 if (!lp->opened) in amd8111e_get_stats()
865 spin_lock_irqsave(&lp->lock, flags); in amd8111e_get_stats()
889 lp->drv_rx_errors; in amd8111e_get_stats()
945 spin_unlock_irqrestore(&lp->lock, flags); in amd8111e_get_stats()
955 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_calc_coalesce() local
956 struct amd8111e_coalesce_conf *coal_conf = &lp->coal_conf; in amd8111e_calc_coalesce()
1082 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_interrupt() local
1083 void __iomem *mmio = lp->mmio; in amd8111e_interrupt()
1090 spin_lock(&lp->lock); in amd8111e_interrupt()
1111 if (napi_schedule_prep(&lp->napi)) { in amd8111e_interrupt()
1115 __napi_schedule(&lp->napi); in amd8111e_interrupt()
1138 spin_unlock(&lp->lock); in amd8111e_interrupt()
1160 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_close() local
1163 napi_disable(&lp->napi); in amd8111e_close()
1165 spin_lock_irq(&lp->lock); in amd8111e_close()
1167 amd8111e_disable_interrupt(lp); in amd8111e_close()
1168 amd8111e_stop_chip(lp); in amd8111e_close()
1171 amd8111e_free_skbs(lp->amd8111e_net_dev); in amd8111e_close()
1173 netif_carrier_off(lp->amd8111e_net_dev); in amd8111e_close()
1176 if (lp->options & OPTION_DYN_IPG_ENABLE) in amd8111e_close()
1177 del_timer_sync(&lp->ipg_data.ipg_timer); in amd8111e_close()
1179 spin_unlock_irq(&lp->lock); in amd8111e_close()
1181 amd8111e_free_ring(lp); in amd8111e_close()
1185 lp->opened = 0; in amd8111e_close()
1194 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_open() local
1200 napi_enable(&lp->napi); in amd8111e_open()
1202 spin_lock_irq(&lp->lock); in amd8111e_open()
1204 amd8111e_init_hw_default(lp); in amd8111e_open()
1207 spin_unlock_irq(&lp->lock); in amd8111e_open()
1208 napi_disable(&lp->napi); in amd8111e_open()
1214 if (lp->options & OPTION_DYN_IPG_ENABLE) { in amd8111e_open()
1215 add_timer(&lp->ipg_data.ipg_timer); in amd8111e_open()
1219 lp->opened = 1; in amd8111e_open()
1221 spin_unlock_irq(&lp->lock); in amd8111e_open()
1231 static int amd8111e_tx_queue_avail(struct amd8111e_priv *lp) in amd8111e_tx_queue_avail() argument
1233 int tx_index = lp->tx_idx & TX_BUFF_MOD_MASK; in amd8111e_tx_queue_avail()
1234 if (lp->tx_skbuff[tx_index]) in amd8111e_tx_queue_avail()
1249 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_start_xmit() local
1253 spin_lock_irqsave(&lp->lock, flags); in amd8111e_start_xmit()
1255 tx_index = lp->tx_idx & TX_RING_DR_MOD_MASK; in amd8111e_start_xmit()
1257 lp->tx_ring[tx_index].buff_count = cpu_to_le16(skb->len); in amd8111e_start_xmit()
1259 lp->tx_skbuff[tx_index] = skb; in amd8111e_start_xmit()
1260 lp->tx_ring[tx_index].tx_flags = 0; in amd8111e_start_xmit()
1264 lp->tx_ring[tx_index].tag_ctrl_cmd |= in amd8111e_start_xmit()
1266 lp->tx_ring[tx_index].tag_ctrl_info = in amd8111e_start_xmit()
1271 lp->tx_dma_addr[tx_index] = in amd8111e_start_xmit()
1272 dma_map_single(&lp->pci_dev->dev, skb->data, skb->len, in amd8111e_start_xmit()
1274 lp->tx_ring[tx_index].buff_phy_addr = in amd8111e_start_xmit()
1275 cpu_to_le32(lp->tx_dma_addr[tx_index]); in amd8111e_start_xmit()
1279 lp->tx_ring[tx_index].tx_flags |= in amd8111e_start_xmit()
1282 lp->tx_idx++; in amd8111e_start_xmit()
1285 writel(VAL1 | TDMD0, lp->mmio + CMD0); in amd8111e_start_xmit()
1286 writel(VAL2 | RDMD0, lp->mmio + CMD0); in amd8111e_start_xmit()
1288 if (amd8111e_tx_queue_avail(lp) < 0) { in amd8111e_start_xmit()
1291 spin_unlock_irqrestore(&lp->lock, flags); in amd8111e_start_xmit()
1295 static void amd8111e_read_regs(struct amd8111e_priv *lp, u32 *buf) in amd8111e_read_regs() argument
1297 void __iomem *mmio = lp->mmio; in amd8111e_read_regs()
1321 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_multicast_list() local
1326 writel(VAL2 | PROM, lp->mmio + CMD2); in amd8111e_set_multicast_list()
1330 writel(PROM, lp->mmio + CMD2); in amd8111e_set_multicast_list()
1335 lp->options |= OPTION_MULTICAST_ENABLE; in amd8111e_set_multicast_list()
1336 amd8111e_writeq(*(u64 *)mc_filter, lp->mmio + LADRF); in amd8111e_set_multicast_list()
1342 lp->options &= ~OPTION_MULTICAST_ENABLE; in amd8111e_set_multicast_list()
1343 amd8111e_writeq(*(u64 *)mc_filter, lp->mmio + LADRF); in amd8111e_set_multicast_list()
1345 writel(PROM, lp->mmio + CMD2); in amd8111e_set_multicast_list()
1349 lp->options |= OPTION_MULTICAST_ENABLE; in amd8111e_set_multicast_list()
1355 amd8111e_writeq(*(u64 *)mc_filter, lp->mmio + LADRF); in amd8111e_set_multicast_list()
1358 readl(lp->mmio + CMD2); in amd8111e_set_multicast_list()
1365 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_drvinfo() local
1366 struct pci_dev *pci_dev = lp->pci_dev; in amd8111e_get_drvinfo()
1380 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_regs() local
1382 amd8111e_read_regs(lp, buf); in amd8111e_get_regs()
1388 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_link_ksettings() local
1389 spin_lock_irq(&lp->lock); in amd8111e_get_link_ksettings()
1390 mii_ethtool_get_link_ksettings(&lp->mii_if, cmd); in amd8111e_get_link_ksettings()
1391 spin_unlock_irq(&lp->lock); in amd8111e_get_link_ksettings()
1398 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_link_ksettings() local
1400 spin_lock_irq(&lp->lock); in amd8111e_set_link_ksettings()
1401 res = mii_ethtool_set_link_ksettings(&lp->mii_if, cmd); in amd8111e_set_link_ksettings()
1402 spin_unlock_irq(&lp->lock); in amd8111e_set_link_ksettings()
1408 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_nway_reset() local
1409 return mii_nway_restart(&lp->mii_if); in amd8111e_nway_reset()
1414 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_link() local
1415 return mii_link_ok(&lp->mii_if); in amd8111e_get_link()
1420 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_get_wol() local
1422 if (lp->options & OPTION_WOL_ENABLE) in amd8111e_get_wol()
1428 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_wol() local
1431 spin_lock_irq(&lp->lock); in amd8111e_set_wol()
1433 lp->options |= in amd8111e_set_wol()
1436 lp->options |= in amd8111e_set_wol()
1439 lp->options &= ~OPTION_WOL_ENABLE; in amd8111e_set_wol()
1440 spin_unlock_irq(&lp->lock); in amd8111e_set_wol()
1463 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_ioctl() local
1469 data->phy_id = lp->ext_phy_addr; in amd8111e_ioctl()
1474 spin_lock_irq(&lp->lock); in amd8111e_ioctl()
1475 err = amd8111e_read_phy(lp, data->phy_id, in amd8111e_ioctl()
1477 spin_unlock_irq(&lp->lock); in amd8111e_ioctl()
1484 spin_lock_irq(&lp->lock); in amd8111e_ioctl()
1485 err = amd8111e_write_phy(lp, data->phy_id, in amd8111e_ioctl()
1487 spin_unlock_irq(&lp->lock); in amd8111e_ioctl()
1499 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_set_mac_address() local
1504 spin_lock_irq(&lp->lock); in amd8111e_set_mac_address()
1507 writeb(dev->dev_addr[i], lp->mmio + PADR + i); in amd8111e_set_mac_address()
1509 spin_unlock_irq(&lp->lock); in amd8111e_set_mac_address()
1519 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_change_mtu() local
1530 spin_lock_irq(&lp->lock); in amd8111e_change_mtu()
1533 writel(RUN, lp->mmio + CMD0); in amd8111e_change_mtu()
1538 spin_unlock_irq(&lp->lock); in amd8111e_change_mtu()
1544 static int amd8111e_enable_magicpkt(struct amd8111e_priv *lp) in amd8111e_enable_magicpkt() argument
1546 writel(VAL1 | MPPLBA, lp->mmio + CMD3); in amd8111e_enable_magicpkt()
1547 writel(VAL0 | MPEN_SW, lp->mmio + CMD7); in amd8111e_enable_magicpkt()
1550 readl(lp->mmio + CMD7); in amd8111e_enable_magicpkt()
1554 static int amd8111e_enable_link_change(struct amd8111e_priv *lp) in amd8111e_enable_link_change() argument
1558 writel(VAL0 | LCMODE_SW, lp->mmio + CMD7); in amd8111e_enable_link_change()
1561 readl(lp->mmio + CMD7); in amd8111e_enable_link_change()
1572 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_tx_timeout() local
1577 spin_lock_irq(&lp->lock); in amd8111e_tx_timeout()
1579 spin_unlock_irq(&lp->lock); in amd8111e_tx_timeout()
1587 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_suspend() local
1593 spin_lock_irq(&lp->lock); in amd8111e_suspend()
1594 amd8111e_disable_interrupt(lp); in amd8111e_suspend()
1595 spin_unlock_irq(&lp->lock); in amd8111e_suspend()
1600 spin_lock_irq(&lp->lock); in amd8111e_suspend()
1601 if (lp->options & OPTION_DYN_IPG_ENABLE) in amd8111e_suspend()
1602 del_timer_sync(&lp->ipg_data.ipg_timer); in amd8111e_suspend()
1603 amd8111e_stop_chip(lp); in amd8111e_suspend()
1604 spin_unlock_irq(&lp->lock); in amd8111e_suspend()
1606 if (lp->options & OPTION_WOL_ENABLE) { in amd8111e_suspend()
1608 if (lp->options & OPTION_WAKE_MAGIC_ENABLE) in amd8111e_suspend()
1609 amd8111e_enable_magicpkt(lp); in amd8111e_suspend()
1610 if (lp->options & OPTION_WAKE_PHY_ENABLE) in amd8111e_suspend()
1611 amd8111e_enable_link_change(lp); in amd8111e_suspend()
1625 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_resume() local
1632 spin_lock_irq(&lp->lock); in amd8111e_resume()
1635 if (lp->options & OPTION_DYN_IPG_ENABLE) in amd8111e_resume()
1636 mod_timer(&lp->ipg_data.ipg_timer, in amd8111e_resume()
1638 spin_unlock_irq(&lp->lock); in amd8111e_resume()
1645 struct amd8111e_priv *lp = from_timer(lp, t, ipg_data.ipg_timer); in amd8111e_config_ipg() local
1646 struct ipg_info *ipg_data = &lp->ipg_data; in amd8111e_config_ipg()
1647 void __iomem *mmio = lp->mmio; in amd8111e_config_ipg()
1652 if (lp->link_config.duplex == DUPLEX_FULL) { in amd8111e_config_ipg()
1698 mod_timer(&lp->ipg_data.ipg_timer, jiffies + IPG_CONVERGE_JIFFIES); in amd8111e_config_ipg()
1705 struct amd8111e_priv *lp = netdev_priv(dev); in amd8111e_probe_ext_phy() local
1711 if (amd8111e_read_phy(lp, i, MII_PHYSID1, &id1)) in amd8111e_probe_ext_phy()
1713 if (amd8111e_read_phy(lp, i, MII_PHYSID2, &id2)) in amd8111e_probe_ext_phy()
1715 lp->ext_phy_id = (id1 << 16) | id2; in amd8111e_probe_ext_phy()
1716 lp->ext_phy_addr = i; in amd8111e_probe_ext_phy()
1719 lp->ext_phy_id = 0; in amd8111e_probe_ext_phy()
1720 lp->ext_phy_addr = 1; in amd8111e_probe_ext_phy()
1744 struct amd8111e_priv *lp; in amd8111e_probe_one() local
1796 lp = netdev_priv(dev); in amd8111e_probe_one()
1797 lp->pci_dev = pdev; in amd8111e_probe_one()
1798 lp->amd8111e_net_dev = dev; in amd8111e_probe_one()
1799 lp->pm_cap = pdev->pm_cap; in amd8111e_probe_one()
1801 spin_lock_init(&lp->lock); in amd8111e_probe_one()
1803 lp->mmio = devm_ioremap(&pdev->dev, reg_addr, reg_len); in amd8111e_probe_one()
1804 if (!lp->mmio) { in amd8111e_probe_one()
1812 dev->dev_addr[i] = readb(lp->mmio + PADR + i); in amd8111e_probe_one()
1815 lp->ext_phy_option = speed_duplex[card_idx]; in amd8111e_probe_one()
1817 lp->options |= OPTION_INTR_COAL_ENABLE; in amd8111e_probe_one()
1819 lp->options |= OPTION_DYN_IPG_ENABLE; in amd8111e_probe_one()
1829 netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32); in amd8111e_probe_one()
1838 lp->mii_if.dev = dev; in amd8111e_probe_one()
1839 lp->mii_if.mdio_read = amd8111e_mdio_read; in amd8111e_probe_one()
1840 lp->mii_if.mdio_write = amd8111e_mdio_write; in amd8111e_probe_one()
1841 lp->mii_if.phy_id = lp->ext_phy_addr; in amd8111e_probe_one()
1856 if (lp->options & OPTION_DYN_IPG_ENABLE) { in amd8111e_probe_one()
1857 timer_setup(&lp->ipg_data.ipg_timer, amd8111e_config_ipg, 0); in amd8111e_probe_one()
1858 lp->ipg_data.ipg_timer.expires = jiffies + in amd8111e_probe_one()
1860 lp->ipg_data.ipg = DEFAULT_IPG; in amd8111e_probe_one()
1861 lp->ipg_data.ipg_state = CSTATE; in amd8111e_probe_one()
1865 chip_version = (readl(lp->mmio + CHIPID) & 0xf0000000) >> 28; in amd8111e_probe_one()
1868 if (lp->ext_phy_id) in amd8111e_probe_one()
1870 lp->ext_phy_id, lp->ext_phy_addr); in amd8111e_probe_one()