Lines Matching refs:jme
63 struct jme_adapter *jme = netdev_priv(netdev); in jme_mdio_read() local
67 jwrite32(jme, JME_SMI, SMI_OP_REQ | in jme_mdio_read()
74 val = jread32(jme, JME_SMI); in jme_mdio_read()
94 struct jme_adapter *jme = netdev_priv(netdev); in jme_mdio_write() local
97 jwrite32(jme, JME_SMI, SMI_OP_WRITE | SMI_OP_REQ | in jme_mdio_write()
104 if ((jread32(jme, JME_SMI) & SMI_OP_REQ) == 0) in jme_mdio_write()
113 jme_reset_phy_processor(struct jme_adapter *jme) in jme_reset_phy_processor() argument
117 jme_mdio_write(jme->dev, in jme_reset_phy_processor()
118 jme->mii_if.phy_id, in jme_reset_phy_processor()
122 if (jme->pdev->device == PCI_DEVICE_ID_JMICRON_JMC250) in jme_reset_phy_processor()
123 jme_mdio_write(jme->dev, in jme_reset_phy_processor()
124 jme->mii_if.phy_id, in jme_reset_phy_processor()
128 val = jme_mdio_read(jme->dev, in jme_reset_phy_processor()
129 jme->mii_if.phy_id, in jme_reset_phy_processor()
132 jme_mdio_write(jme->dev, in jme_reset_phy_processor()
133 jme->mii_if.phy_id, in jme_reset_phy_processor()
138 jme_setup_wakeup_frame(struct jme_adapter *jme, in jme_setup_wakeup_frame() argument
146 jwrite32(jme, JME_WFOI, WFOI_CRC_SEL | (fnr & WFOI_FRAME_SEL)); in jme_setup_wakeup_frame()
148 jwrite32(jme, JME_WFODP, crc); in jme_setup_wakeup_frame()
155 jwrite32(jme, JME_WFOI, in jme_setup_wakeup_frame()
159 jwrite32(jme, JME_WFODP, mask[i]); in jme_setup_wakeup_frame()
165 jme_mac_rxclk_off(struct jme_adapter *jme) in jme_mac_rxclk_off() argument
167 jme->reg_gpreg1 |= GPREG1_RXCLKOFF; in jme_mac_rxclk_off()
168 jwrite32f(jme, JME_GPREG1, jme->reg_gpreg1); in jme_mac_rxclk_off()
172 jme_mac_rxclk_on(struct jme_adapter *jme) in jme_mac_rxclk_on() argument
174 jme->reg_gpreg1 &= ~GPREG1_RXCLKOFF; in jme_mac_rxclk_on()
175 jwrite32f(jme, JME_GPREG1, jme->reg_gpreg1); in jme_mac_rxclk_on()
179 jme_mac_txclk_off(struct jme_adapter *jme) in jme_mac_txclk_off() argument
181 jme->reg_ghc &= ~(GHC_TO_CLK_SRC | GHC_TXMAC_CLK_SRC); in jme_mac_txclk_off()
182 jwrite32f(jme, JME_GHC, jme->reg_ghc); in jme_mac_txclk_off()
186 jme_mac_txclk_on(struct jme_adapter *jme) in jme_mac_txclk_on() argument
188 u32 speed = jme->reg_ghc & GHC_SPEED; in jme_mac_txclk_on()
190 jme->reg_ghc |= GHC_TO_CLK_GPHY | GHC_TXMAC_CLK_GPHY; in jme_mac_txclk_on()
192 jme->reg_ghc |= GHC_TO_CLK_PCIE | GHC_TXMAC_CLK_PCIE; in jme_mac_txclk_on()
193 jwrite32f(jme, JME_GHC, jme->reg_ghc); in jme_mac_txclk_on()
197 jme_reset_ghc_speed(struct jme_adapter *jme) in jme_reset_ghc_speed() argument
199 jme->reg_ghc &= ~(GHC_SPEED | GHC_DPX); in jme_reset_ghc_speed()
200 jwrite32f(jme, JME_GHC, jme->reg_ghc); in jme_reset_ghc_speed()
204 jme_reset_250A2_workaround(struct jme_adapter *jme) in jme_reset_250A2_workaround() argument
206 jme->reg_gpreg1 &= ~(GPREG1_HALFMODEPATCH | in jme_reset_250A2_workaround()
208 jwrite32(jme, JME_GPREG1, jme->reg_gpreg1); in jme_reset_250A2_workaround()
212 jme_assert_ghc_reset(struct jme_adapter *jme) in jme_assert_ghc_reset() argument
214 jme->reg_ghc |= GHC_SWRST; in jme_assert_ghc_reset()
215 jwrite32f(jme, JME_GHC, jme->reg_ghc); in jme_assert_ghc_reset()
219 jme_clear_ghc_reset(struct jme_adapter *jme) in jme_clear_ghc_reset() argument
221 jme->reg_ghc &= ~GHC_SWRST; in jme_clear_ghc_reset()
222 jwrite32f(jme, JME_GHC, jme->reg_ghc); in jme_clear_ghc_reset()
226 jme_reset_mac_processor(struct jme_adapter *jme) in jme_reset_mac_processor() argument
233 jme_reset_ghc_speed(jme); in jme_reset_mac_processor()
234 jme_reset_250A2_workaround(jme); in jme_reset_mac_processor()
236 jme_mac_rxclk_on(jme); in jme_reset_mac_processor()
237 jme_mac_txclk_on(jme); in jme_reset_mac_processor()
239 jme_assert_ghc_reset(jme); in jme_reset_mac_processor()
241 jme_mac_rxclk_off(jme); in jme_reset_mac_processor()
242 jme_mac_txclk_off(jme); in jme_reset_mac_processor()
244 jme_clear_ghc_reset(jme); in jme_reset_mac_processor()
246 jme_mac_rxclk_on(jme); in jme_reset_mac_processor()
247 jme_mac_txclk_on(jme); in jme_reset_mac_processor()
249 jme_mac_rxclk_off(jme); in jme_reset_mac_processor()
250 jme_mac_txclk_off(jme); in jme_reset_mac_processor()
252 jwrite32(jme, JME_RXDBA_LO, 0x00000000); in jme_reset_mac_processor()
253 jwrite32(jme, JME_RXDBA_HI, 0x00000000); in jme_reset_mac_processor()
254 jwrite32(jme, JME_RXQDC, 0x00000000); in jme_reset_mac_processor()
255 jwrite32(jme, JME_RXNDA, 0x00000000); in jme_reset_mac_processor()
256 jwrite32(jme, JME_TXDBA_LO, 0x00000000); in jme_reset_mac_processor()
257 jwrite32(jme, JME_TXDBA_HI, 0x00000000); in jme_reset_mac_processor()
258 jwrite32(jme, JME_TXQDC, 0x00000000); in jme_reset_mac_processor()
259 jwrite32(jme, JME_TXNDA, 0x00000000); in jme_reset_mac_processor()
261 jwrite32(jme, JME_RXMCHT_LO, 0x00000000); in jme_reset_mac_processor()
262 jwrite32(jme, JME_RXMCHT_HI, 0x00000000); in jme_reset_mac_processor()
264 jme_setup_wakeup_frame(jme, mask, crc, i); in jme_reset_mac_processor()
265 if (jme->fpgaver) in jme_reset_mac_processor()
269 jwrite32(jme, JME_GPREG0, gpreg0); in jme_reset_mac_processor()
273 jme_clear_pm(struct jme_adapter *jme) in jme_clear_pm() argument
275 jwrite32(jme, JME_PMCS, PMCS_STMASK | jme->reg_pmcs); in jme_clear_pm()
279 jme_reload_eeprom(struct jme_adapter *jme) in jme_reload_eeprom() argument
284 val = jread32(jme, JME_SMBCSR); in jme_reload_eeprom()
288 jwrite32(jme, JME_SMBCSR, val); in jme_reload_eeprom()
290 jwrite32(jme, JME_SMBCSR, val); in jme_reload_eeprom()
295 if ((jread32(jme, JME_SMBCSR) & SMBCSR_RELOAD) == 0) in jme_reload_eeprom()
311 struct jme_adapter *jme = netdev_priv(netdev); in jme_load_macaddr() local
315 spin_lock_bh(&jme->macaddr_lock); in jme_load_macaddr()
316 val = jread32(jme, JME_RXUMA_LO); in jme_load_macaddr()
321 val = jread32(jme, JME_RXUMA_HI); in jme_load_macaddr()
325 spin_unlock_bh(&jme->macaddr_lock); in jme_load_macaddr()
329 jme_set_rx_pcc(struct jme_adapter *jme, int p) in jme_set_rx_pcc() argument
333 jwrite32(jme, JME_PCCRX0, in jme_set_rx_pcc()
338 jwrite32(jme, JME_PCCRX0, in jme_set_rx_pcc()
343 jwrite32(jme, JME_PCCRX0, in jme_set_rx_pcc()
348 jwrite32(jme, JME_PCCRX0, in jme_set_rx_pcc()
357 if (!(test_bit(JME_FLAG_POLL, &jme->flags))) in jme_set_rx_pcc()
358 netif_info(jme, rx_status, jme->dev, "Switched to PCC_P%d\n", p); in jme_set_rx_pcc()
362 jme_start_irq(struct jme_adapter *jme) in jme_start_irq() argument
364 register struct dynpcc_info *dpi = &(jme->dpi); in jme_start_irq()
366 jme_set_rx_pcc(jme, PCC_P1); in jme_start_irq()
371 jwrite32(jme, JME_PCCTX, in jme_start_irq()
380 jwrite32(jme, JME_IENS, INTR_ENABLE); in jme_start_irq()
384 jme_stop_irq(struct jme_adapter *jme) in jme_stop_irq() argument
389 jwrite32f(jme, JME_IENC, INTR_ENABLE); in jme_stop_irq()
393 jme_linkstat_from_phy(struct jme_adapter *jme) in jme_linkstat_from_phy() argument
397 phylink = jme_mdio_read(jme->dev, jme->mii_if.phy_id, 17); in jme_linkstat_from_phy()
398 bmsr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMSR); in jme_linkstat_from_phy()
406 jme_set_phyfifo_5level(struct jme_adapter *jme) in jme_set_phyfifo_5level() argument
408 jme_mdio_write(jme->dev, jme->mii_if.phy_id, 27, 0x0004); in jme_set_phyfifo_5level()
412 jme_set_phyfifo_8level(struct jme_adapter *jme) in jme_set_phyfifo_8level() argument
414 jme_mdio_write(jme->dev, jme->mii_if.phy_id, 27, 0x0000); in jme_set_phyfifo_8level()
420 struct jme_adapter *jme = netdev_priv(netdev); in jme_check_link() local
427 if (jme->fpgaver) in jme_check_link()
428 phylink = jme_linkstat_from_phy(jme); in jme_check_link()
430 phylink = jread32(jme, JME_PHY_LINK); in jme_check_link()
440 bmcr = jme_mdio_read(jme->dev, in jme_check_link()
441 jme->mii_if.phy_id, in jme_check_link()
464 if (jme->fpgaver) in jme_check_link()
465 phylink = jme_linkstat_from_phy(jme); in jme_check_link()
467 phylink = jread32(jme, JME_PHY_LINK); in jme_check_link()
475 if (jme->phylink == phylink) { in jme_check_link()
482 jme->phylink = phylink; in jme_check_link()
490 jme->reg_ghc |= GHC_SPEED_10M; in jme_check_link()
494 jme->reg_ghc |= GHC_SPEED_100M; in jme_check_link()
498 jme->reg_ghc |= GHC_SPEED_1000M; in jme_check_link()
506 jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT); in jme_check_link()
507 jwrite32(jme, JME_TXTRHD, TXTRHD_FULLDUPLEX); in jme_check_link()
508 jme->reg_ghc |= GHC_DPX; in jme_check_link()
510 jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT | in jme_check_link()
514 jwrite32(jme, JME_TXTRHD, TXTRHD_HALFDUPLEX); in jme_check_link()
517 jwrite32(jme, JME_GHC, jme->reg_ghc); in jme_check_link()
519 if (is_buggy250(jme->pdev->device, jme->chiprev)) { in jme_check_link()
520 jme->reg_gpreg1 &= ~(GPREG1_HALFMODEPATCH | in jme_check_link()
523 jme->reg_gpreg1 |= GPREG1_HALFMODEPATCH; in jme_check_link()
526 jme_set_phyfifo_8level(jme); in jme_check_link()
527 jme->reg_gpreg1 |= GPREG1_RSSPATCH; in jme_check_link()
530 jme_set_phyfifo_5level(jme); in jme_check_link()
531 jme->reg_gpreg1 |= GPREG1_RSSPATCH; in jme_check_link()
534 jme_set_phyfifo_8level(jme); in jme_check_link()
540 jwrite32(jme, JME_GPREG1, jme->reg_gpreg1); in jme_check_link()
548 netif_info(jme, link, jme->dev, "Link is up at %s\n", linkmsg); in jme_check_link()
554 netif_info(jme, link, jme->dev, "Link is down\n"); in jme_check_link()
555 jme->phylink = 0; in jme_check_link()
564 jme_setup_tx_resources(struct jme_adapter *jme) in jme_setup_tx_resources() argument
566 struct jme_ring *txring = &(jme->txring[0]); in jme_setup_tx_resources()
568 txring->alloc = dma_alloc_coherent(&(jme->pdev->dev), in jme_setup_tx_resources()
569 TX_RING_ALLOC_SIZE(jme->tx_ring_size), in jme_setup_tx_resources()
584 atomic_set(&txring->nr_free, jme->tx_ring_size); in jme_setup_tx_resources()
587 jme->tx_ring_size, GFP_ATOMIC); in jme_setup_tx_resources()
594 memset(txring->alloc, 0, TX_RING_ALLOC_SIZE(jme->tx_ring_size)); in jme_setup_tx_resources()
596 sizeof(struct jme_buffer_info) * jme->tx_ring_size); in jme_setup_tx_resources()
601 dma_free_coherent(&(jme->pdev->dev), in jme_setup_tx_resources()
602 TX_RING_ALLOC_SIZE(jme->tx_ring_size), in jme_setup_tx_resources()
616 jme_free_tx_resources(struct jme_adapter *jme) in jme_free_tx_resources() argument
619 struct jme_ring *txring = &(jme->txring[0]); in jme_free_tx_resources()
624 for (i = 0 ; i < jme->tx_ring_size ; ++i) { in jme_free_tx_resources()
638 dma_free_coherent(&(jme->pdev->dev), in jme_free_tx_resources()
639 TX_RING_ALLOC_SIZE(jme->tx_ring_size), in jme_free_tx_resources()
655 jme_enable_tx_engine(struct jme_adapter *jme) in jme_enable_tx_engine() argument
660 jwrite32(jme, JME_TXCS, TXCS_DEFAULT | TXCS_SELECT_QUEUE0); in jme_enable_tx_engine()
666 jwrite32(jme, JME_TXDBA_LO, (__u64)jme->txring[0].dma & 0xFFFFFFFFUL); in jme_enable_tx_engine()
667 jwrite32(jme, JME_TXDBA_HI, (__u64)(jme->txring[0].dma) >> 32); in jme_enable_tx_engine()
668 jwrite32(jme, JME_TXNDA, (__u64)jme->txring[0].dma & 0xFFFFFFFFUL); in jme_enable_tx_engine()
673 jwrite32(jme, JME_TXQDC, jme->tx_ring_size); in jme_enable_tx_engine()
679 jwrite32f(jme, JME_TXCS, jme->reg_txcs | in jme_enable_tx_engine()
686 jme_mac_txclk_on(jme); in jme_enable_tx_engine()
690 jme_restart_tx_engine(struct jme_adapter *jme) in jme_restart_tx_engine() argument
695 jwrite32(jme, JME_TXCS, jme->reg_txcs | in jme_restart_tx_engine()
701 jme_disable_tx_engine(struct jme_adapter *jme) in jme_disable_tx_engine() argument
709 jwrite32(jme, JME_TXCS, jme->reg_txcs | TXCS_SELECT_QUEUE0); in jme_disable_tx_engine()
712 val = jread32(jme, JME_TXCS); in jme_disable_tx_engine()
715 val = jread32(jme, JME_TXCS); in jme_disable_tx_engine()
725 jme_mac_txclk_off(jme); in jme_disable_tx_engine()
729 jme_set_clean_rxdesc(struct jme_adapter *jme, int i) in jme_set_clean_rxdesc() argument
731 struct jme_ring *rxring = &(jme->rxring[0]); in jme_set_clean_rxdesc()
743 if (jme->dev->features & NETIF_F_HIGHDMA) in jme_set_clean_rxdesc()
750 jme_make_new_rx_buf(struct jme_adapter *jme, int i) in jme_make_new_rx_buf() argument
752 struct jme_ring *rxring = &(jme->rxring[0]); in jme_make_new_rx_buf()
757 skb = netdev_alloc_skb(jme->dev, in jme_make_new_rx_buf()
758 jme->dev->mtu + RX_EXTRA_LEN); in jme_make_new_rx_buf()
762 mapping = pci_map_page(jme->pdev, virt_to_page(skb->data), in jme_make_new_rx_buf()
765 if (unlikely(pci_dma_mapping_error(jme->pdev, mapping))) { in jme_make_new_rx_buf()
771 pci_unmap_page(jme->pdev, rxbi->mapping, in jme_make_new_rx_buf()
781 jme_free_rx_buf(struct jme_adapter *jme, int i) in jme_free_rx_buf() argument
783 struct jme_ring *rxring = &(jme->rxring[0]); in jme_free_rx_buf()
788 pci_unmap_page(jme->pdev, in jme_free_rx_buf()
800 jme_free_rx_resources(struct jme_adapter *jme) in jme_free_rx_resources() argument
803 struct jme_ring *rxring = &(jme->rxring[0]); in jme_free_rx_resources()
807 for (i = 0 ; i < jme->rx_ring_size ; ++i) in jme_free_rx_resources()
808 jme_free_rx_buf(jme, i); in jme_free_rx_resources()
812 dma_free_coherent(&(jme->pdev->dev), in jme_free_rx_resources()
813 RX_RING_ALLOC_SIZE(jme->rx_ring_size), in jme_free_rx_resources()
827 jme_setup_rx_resources(struct jme_adapter *jme) in jme_setup_rx_resources() argument
830 struct jme_ring *rxring = &(jme->rxring[0]); in jme_setup_rx_resources()
832 rxring->alloc = dma_alloc_coherent(&(jme->pdev->dev), in jme_setup_rx_resources()
833 RX_RING_ALLOC_SIZE(jme->rx_ring_size), in jme_setup_rx_resources()
849 jme->rx_ring_size, GFP_ATOMIC); in jme_setup_rx_resources()
857 sizeof(struct jme_buffer_info) * jme->rx_ring_size); in jme_setup_rx_resources()
858 for (i = 0 ; i < jme->rx_ring_size ; ++i) { in jme_setup_rx_resources()
859 if (unlikely(jme_make_new_rx_buf(jme, i))) { in jme_setup_rx_resources()
860 jme_free_rx_resources(jme); in jme_setup_rx_resources()
864 jme_set_clean_rxdesc(jme, i); in jme_setup_rx_resources()
870 dma_free_coherent(&(jme->pdev->dev), in jme_setup_rx_resources()
871 RX_RING_ALLOC_SIZE(jme->rx_ring_size), in jme_setup_rx_resources()
884 jme_enable_rx_engine(struct jme_adapter *jme) in jme_enable_rx_engine() argument
889 jwrite32(jme, JME_RXCS, jme->reg_rxcs | in jme_enable_rx_engine()
896 jwrite32(jme, JME_RXDBA_LO, (__u64)(jme->rxring[0].dma) & 0xFFFFFFFFUL); in jme_enable_rx_engine()
897 jwrite32(jme, JME_RXDBA_HI, (__u64)(jme->rxring[0].dma) >> 32); in jme_enable_rx_engine()
898 jwrite32(jme, JME_RXNDA, (__u64)(jme->rxring[0].dma) & 0xFFFFFFFFUL); in jme_enable_rx_engine()
903 jwrite32(jme, JME_RXQDC, jme->rx_ring_size); in jme_enable_rx_engine()
908 jme_set_unicastaddr(jme->dev); in jme_enable_rx_engine()
909 jme_set_multi(jme->dev); in jme_enable_rx_engine()
915 jwrite32f(jme, JME_RXCS, jme->reg_rxcs | in jme_enable_rx_engine()
923 jme_mac_rxclk_on(jme); in jme_enable_rx_engine()
927 jme_restart_rx_engine(struct jme_adapter *jme) in jme_restart_rx_engine() argument
932 jwrite32(jme, JME_RXCS, jme->reg_rxcs | in jme_restart_rx_engine()
939 jme_disable_rx_engine(struct jme_adapter *jme) in jme_disable_rx_engine() argument
947 jwrite32(jme, JME_RXCS, jme->reg_rxcs); in jme_disable_rx_engine()
950 val = jread32(jme, JME_RXCS); in jme_disable_rx_engine()
953 val = jread32(jme, JME_RXCS); in jme_disable_rx_engine()
963 jme_mac_rxclk_off(jme); in jme_disable_rx_engine()
993 jme_rxsum_ok(struct jme_adapter *jme, u16 flags, struct sk_buff *skb) in jme_rxsum_ok() argument
1001 netif_err(jme, rx_err, jme->dev, "TCP Checksum error\n"); in jme_rxsum_ok()
1008 netif_err(jme, rx_err, jme->dev, "UDP Checksum error\n"); in jme_rxsum_ok()
1014 netif_err(jme, rx_err, jme->dev, "IPv4 Checksum error\n"); in jme_rxsum_ok()
1022 jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) in jme_alloc_and_feed_skb() argument
1024 struct jme_ring *rxring = &(jme->rxring[0]); in jme_alloc_and_feed_skb()
1034 pci_dma_sync_single_for_cpu(jme->pdev, in jme_alloc_and_feed_skb()
1039 if (unlikely(jme_make_new_rx_buf(jme, idx))) { in jme_alloc_and_feed_skb()
1040 pci_dma_sync_single_for_device(jme->pdev, in jme_alloc_and_feed_skb()
1045 ++(NET_STAT(jme).rx_dropped); in jme_alloc_and_feed_skb()
1052 skb->protocol = eth_type_trans(skb, jme->dev); in jme_alloc_and_feed_skb()
1054 if (jme_rxsum_ok(jme, le16_to_cpu(rxdesc->descwb.flags), skb)) in jme_alloc_and_feed_skb()
1063 NET_STAT(jme).rx_bytes += 4; in jme_alloc_and_feed_skb()
1065 jme->jme_rx(skb); in jme_alloc_and_feed_skb()
1069 ++(NET_STAT(jme).multicast); in jme_alloc_and_feed_skb()
1071 NET_STAT(jme).rx_bytes += framesize; in jme_alloc_and_feed_skb()
1072 ++(NET_STAT(jme).rx_packets); in jme_alloc_and_feed_skb()
1075 jme_set_clean_rxdesc(jme, idx); in jme_alloc_and_feed_skb()
1080 jme_process_receive(struct jme_adapter *jme, int limit) in jme_process_receive() argument
1082 struct jme_ring *rxring = &(jme->rxring[0]); in jme_process_receive()
1084 int i, j, ccnt, desccnt, mask = jme->rx_ring_mask; in jme_process_receive()
1086 if (unlikely(!atomic_dec_and_test(&jme->rx_cleaning))) in jme_process_receive()
1089 if (unlikely(atomic_read(&jme->link_changing) != 1)) in jme_process_receive()
1092 if (unlikely(!netif_carrier_ok(jme->dev))) in jme_process_receive()
1112 ++(NET_STAT(jme).rx_crc_errors); in jme_process_receive()
1114 ++(NET_STAT(jme).rx_fifo_errors); in jme_process_receive()
1116 ++(NET_STAT(jme).rx_errors); in jme_process_receive()
1122 jme_set_clean_rxdesc(jme, j); in jme_process_receive()
1127 jme_alloc_and_feed_skb(jme, i); in jme_process_receive()
1137 atomic_inc(&jme->rx_cleaning); in jme_process_receive()
1161 jme_dynamic_pcc(struct jme_adapter *jme) in jme_dynamic_pcc() argument
1163 register struct dynpcc_info *dpi = &(jme->dpi); in jme_dynamic_pcc()
1165 if ((NET_STAT(jme).rx_bytes - dpi->last_bytes) > PCC_P3_THRESHOLD) in jme_dynamic_pcc()
1167 else if ((NET_STAT(jme).rx_packets - dpi->last_pkts) > PCC_P2_THRESHOLD || in jme_dynamic_pcc()
1175 tasklet_schedule(&jme->rxclean_task); in jme_dynamic_pcc()
1176 jme_set_rx_pcc(jme, dpi->attempt); in jme_dynamic_pcc()
1183 jme_start_pcc_timer(struct jme_adapter *jme) in jme_start_pcc_timer() argument
1185 struct dynpcc_info *dpi = &(jme->dpi); in jme_start_pcc_timer()
1186 dpi->last_bytes = NET_STAT(jme).rx_bytes; in jme_start_pcc_timer()
1187 dpi->last_pkts = NET_STAT(jme).rx_packets; in jme_start_pcc_timer()
1189 jwrite32(jme, JME_TMCSR, in jme_start_pcc_timer()
1194 jme_stop_pcc_timer(struct jme_adapter *jme) in jme_stop_pcc_timer() argument
1196 jwrite32(jme, JME_TMCSR, 0); in jme_stop_pcc_timer()
1200 jme_shutdown_nic(struct jme_adapter *jme) in jme_shutdown_nic() argument
1204 phylink = jme_linkstat_from_phy(jme); in jme_shutdown_nic()
1210 jme_stop_irq(jme); in jme_shutdown_nic()
1211 jwrite32(jme, JME_TIMER2, TMCSR_EN | 0xFFFFFE); in jme_shutdown_nic()
1218 struct jme_adapter *jme = (struct jme_adapter *)arg; in jme_pcc_tasklet() local
1219 struct net_device *netdev = jme->dev; in jme_pcc_tasklet()
1221 if (unlikely(test_bit(JME_FLAG_SHUTDOWN, &jme->flags))) { in jme_pcc_tasklet()
1222 jme_shutdown_nic(jme); in jme_pcc_tasklet()
1227 (atomic_read(&jme->link_changing) != 1) in jme_pcc_tasklet()
1229 jme_stop_pcc_timer(jme); in jme_pcc_tasklet()
1233 if (!(test_bit(JME_FLAG_POLL, &jme->flags))) in jme_pcc_tasklet()
1234 jme_dynamic_pcc(jme); in jme_pcc_tasklet()
1236 jme_start_pcc_timer(jme); in jme_pcc_tasklet()
1240 jme_polling_mode(struct jme_adapter *jme) in jme_polling_mode() argument
1242 jme_set_rx_pcc(jme, PCC_OFF); in jme_polling_mode()
1246 jme_interrupt_mode(struct jme_adapter *jme) in jme_interrupt_mode() argument
1248 jme_set_rx_pcc(jme, PCC_P1); in jme_interrupt_mode()
1252 jme_pseudo_hotplug_enabled(struct jme_adapter *jme) in jme_pseudo_hotplug_enabled() argument
1255 apmc = jread32(jme, JME_APMC); in jme_pseudo_hotplug_enabled()
1260 jme_start_shutdown_timer(struct jme_adapter *jme) in jme_start_shutdown_timer() argument
1264 apmc = jread32(jme, JME_APMC) | JME_APMC_PCIE_SD_EN; in jme_start_shutdown_timer()
1267 jwrite32f(jme, JME_APMC, apmc | JME_APMC_EPIEN_CTRL_EN); in jme_start_shutdown_timer()
1270 jwrite32f(jme, JME_APMC, apmc); in jme_start_shutdown_timer()
1272 jwrite32f(jme, JME_TIMER2, 0); in jme_start_shutdown_timer()
1273 set_bit(JME_FLAG_SHUTDOWN, &jme->flags); in jme_start_shutdown_timer()
1274 jwrite32(jme, JME_TMCSR, in jme_start_shutdown_timer()
1279 jme_stop_shutdown_timer(struct jme_adapter *jme) in jme_stop_shutdown_timer() argument
1283 jwrite32f(jme, JME_TMCSR, 0); in jme_stop_shutdown_timer()
1284 jwrite32f(jme, JME_TIMER2, 0); in jme_stop_shutdown_timer()
1285 clear_bit(JME_FLAG_SHUTDOWN, &jme->flags); in jme_stop_shutdown_timer()
1287 apmc = jread32(jme, JME_APMC); in jme_stop_shutdown_timer()
1289 jwrite32f(jme, JME_APMC, apmc | JME_APMC_EPIEN_CTRL_DIS); in jme_stop_shutdown_timer()
1291 jwrite32f(jme, JME_APMC, apmc); in jme_stop_shutdown_timer()
1297 struct jme_adapter *jme = (struct jme_adapter *)arg; in jme_link_change_tasklet() local
1298 struct net_device *netdev = jme->dev; in jme_link_change_tasklet()
1301 while (!atomic_dec_and_test(&jme->link_changing)) { in jme_link_change_tasklet()
1302 atomic_inc(&jme->link_changing); in jme_link_change_tasklet()
1303 netif_info(jme, intr, jme->dev, "Get link change lock failed\n"); in jme_link_change_tasklet()
1304 while (atomic_read(&jme->link_changing) != 1) in jme_link_change_tasklet()
1305 netif_info(jme, intr, jme->dev, "Waiting link change lock\n"); in jme_link_change_tasklet()
1308 if (jme_check_link(netdev, 1) && jme->old_mtu == netdev->mtu) in jme_link_change_tasklet()
1311 jme->old_mtu = netdev->mtu; in jme_link_change_tasklet()
1313 if (jme_pseudo_hotplug_enabled(jme)) in jme_link_change_tasklet()
1314 jme_stop_shutdown_timer(jme); in jme_link_change_tasklet()
1316 jme_stop_pcc_timer(jme); in jme_link_change_tasklet()
1317 tasklet_disable(&jme->txclean_task); in jme_link_change_tasklet()
1318 tasklet_disable(&jme->rxclean_task); in jme_link_change_tasklet()
1319 tasklet_disable(&jme->rxempty_task); in jme_link_change_tasklet()
1322 jme_disable_rx_engine(jme); in jme_link_change_tasklet()
1323 jme_disable_tx_engine(jme); in jme_link_change_tasklet()
1324 jme_reset_mac_processor(jme); in jme_link_change_tasklet()
1325 jme_free_rx_resources(jme); in jme_link_change_tasklet()
1326 jme_free_tx_resources(jme); in jme_link_change_tasklet()
1328 if (test_bit(JME_FLAG_POLL, &jme->flags)) in jme_link_change_tasklet()
1329 jme_polling_mode(jme); in jme_link_change_tasklet()
1336 rc = jme_setup_rx_resources(jme); in jme_link_change_tasklet()
1342 rc = jme_setup_tx_resources(jme); in jme_link_change_tasklet()
1348 jme_enable_rx_engine(jme); in jme_link_change_tasklet()
1349 jme_enable_tx_engine(jme); in jme_link_change_tasklet()
1353 if (test_bit(JME_FLAG_POLL, &jme->flags)) in jme_link_change_tasklet()
1354 jme_interrupt_mode(jme); in jme_link_change_tasklet()
1356 jme_start_pcc_timer(jme); in jme_link_change_tasklet()
1357 } else if (jme_pseudo_hotplug_enabled(jme)) { in jme_link_change_tasklet()
1358 jme_start_shutdown_timer(jme); in jme_link_change_tasklet()
1364 jme_free_rx_resources(jme); in jme_link_change_tasklet()
1366 tasklet_enable(&jme->txclean_task); in jme_link_change_tasklet()
1367 tasklet_enable(&jme->rxclean_task); in jme_link_change_tasklet()
1368 tasklet_enable(&jme->rxempty_task); in jme_link_change_tasklet()
1370 atomic_inc(&jme->link_changing); in jme_link_change_tasklet()
1376 struct jme_adapter *jme = (struct jme_adapter *)arg; in jme_rx_clean_tasklet() local
1377 struct dynpcc_info *dpi = &(jme->dpi); in jme_rx_clean_tasklet()
1379 jme_process_receive(jme, jme->rx_ring_size); in jme_rx_clean_tasklet()
1387 struct jme_adapter *jme = jme_napi_priv(holder); in jme_poll() local
1390 rest = jme_process_receive(jme, JME_NAPI_WEIGHT_VAL(budget)); in jme_poll()
1392 while (atomic_read(&jme->rx_empty) > 0) { in jme_poll()
1393 atomic_dec(&jme->rx_empty); in jme_poll()
1394 ++(NET_STAT(jme).rx_dropped); in jme_poll()
1395 jme_restart_rx_engine(jme); in jme_poll()
1397 atomic_inc(&jme->rx_empty); in jme_poll()
1401 jme_interrupt_mode(jme); in jme_poll()
1411 struct jme_adapter *jme = (struct jme_adapter *)arg; in jme_rx_empty_tasklet() local
1413 if (unlikely(atomic_read(&jme->link_changing) != 1)) in jme_rx_empty_tasklet()
1416 if (unlikely(!netif_carrier_ok(jme->dev))) in jme_rx_empty_tasklet()
1419 netif_info(jme, rx_status, jme->dev, "RX Queue Full!\n"); in jme_rx_empty_tasklet()
1423 while (atomic_read(&jme->rx_empty) > 0) { in jme_rx_empty_tasklet()
1424 atomic_dec(&jme->rx_empty); in jme_rx_empty_tasklet()
1425 ++(NET_STAT(jme).rx_dropped); in jme_rx_empty_tasklet()
1426 jme_restart_rx_engine(jme); in jme_rx_empty_tasklet()
1428 atomic_inc(&jme->rx_empty); in jme_rx_empty_tasklet()
1432 jme_wake_queue_if_stopped(struct jme_adapter *jme) in jme_wake_queue_if_stopped() argument
1434 struct jme_ring *txring = &(jme->txring[0]); in jme_wake_queue_if_stopped()
1437 if (unlikely(netif_queue_stopped(jme->dev) && in jme_wake_queue_if_stopped()
1438 atomic_read(&txring->nr_free) >= (jme->tx_wake_threshold))) { in jme_wake_queue_if_stopped()
1439 netif_info(jme, tx_done, jme->dev, "TX Queue Waked\n"); in jme_wake_queue_if_stopped()
1440 netif_wake_queue(jme->dev); in jme_wake_queue_if_stopped()
1448 struct jme_adapter *jme = (struct jme_adapter *)arg; in jme_tx_clean_tasklet() local
1449 struct jme_ring *txring = &(jme->txring[0]); in jme_tx_clean_tasklet()
1454 tx_dbg(jme, "Into txclean\n"); in jme_tx_clean_tasklet()
1456 if (unlikely(!atomic_dec_and_test(&jme->tx_cleaning))) in jme_tx_clean_tasklet()
1459 if (unlikely(atomic_read(&jme->link_changing) != 1)) in jme_tx_clean_tasklet()
1462 if (unlikely(!netif_carrier_ok(jme->dev))) in jme_tx_clean_tasklet()
1465 max = jme->tx_ring_size - atomic_read(&txring->nr_free); in jme_tx_clean_tasklet()
1466 mask = jme->tx_ring_mask; in jme_tx_clean_tasklet()
1475 tx_dbg(jme, "txclean: %d+%d@%lu\n", in jme_tx_clean_tasklet()
1484 pci_unmap_page(jme->pdev, in jme_tx_clean_tasklet()
1498 ++(NET_STAT(jme).tx_carrier_errors); in jme_tx_clean_tasklet()
1500 ++(NET_STAT(jme).tx_packets); in jme_tx_clean_tasklet()
1501 NET_STAT(jme).tx_bytes += ctxbi->len; in jme_tx_clean_tasklet()
1517 tx_dbg(jme, "txclean: done %d@%lu\n", i, jiffies); in jme_tx_clean_tasklet()
1521 jme_wake_queue_if_stopped(jme); in jme_tx_clean_tasklet()
1524 atomic_inc(&jme->tx_cleaning); in jme_tx_clean_tasklet()
1528 jme_intr_msi(struct jme_adapter *jme, u32 intrstat) in jme_intr_msi() argument
1533 jwrite32f(jme, JME_IENC, INTR_ENABLE); in jme_intr_msi()
1540 jwrite32(jme, JME_IEVE, intrstat); in jme_intr_msi()
1541 tasklet_schedule(&jme->linkch_task); in jme_intr_msi()
1546 jwrite32(jme, JME_IEVE, INTR_TMINTR); in jme_intr_msi()
1547 tasklet_schedule(&jme->pcc_task); in jme_intr_msi()
1551 jwrite32(jme, JME_IEVE, INTR_PCCTXTO | INTR_PCCTX | INTR_TX0); in jme_intr_msi()
1552 tasklet_schedule(&jme->txclean_task); in jme_intr_msi()
1556 jwrite32(jme, JME_IEVE, (intrstat & (INTR_PCCRX0TO | in jme_intr_msi()
1562 if (test_bit(JME_FLAG_POLL, &jme->flags)) { in jme_intr_msi()
1564 atomic_inc(&jme->rx_empty); in jme_intr_msi()
1567 if (likely(JME_RX_SCHEDULE_PREP(jme))) { in jme_intr_msi()
1568 jme_polling_mode(jme); in jme_intr_msi()
1569 JME_RX_SCHEDULE(jme); in jme_intr_msi()
1574 atomic_inc(&jme->rx_empty); in jme_intr_msi()
1575 tasklet_hi_schedule(&jme->rxempty_task); in jme_intr_msi()
1577 tasklet_hi_schedule(&jme->rxclean_task); in jme_intr_msi()
1585 jwrite32f(jme, JME_IENS, INTR_ENABLE); in jme_intr_msi()
1592 struct jme_adapter *jme = netdev_priv(netdev); in jme_intr() local
1595 intrstat = jread32(jme, JME_IEVE); in jme_intr()
1609 jme_intr_msi(jme, intrstat); in jme_intr()
1618 struct jme_adapter *jme = netdev_priv(netdev); in jme_msi() local
1621 intrstat = jread32(jme, JME_IEVE); in jme_msi()
1623 jme_intr_msi(jme, intrstat); in jme_msi()
1629 jme_reset_link(struct jme_adapter *jme) in jme_reset_link() argument
1631 jwrite32(jme, JME_TMCSR, TMCSR_SWIT); in jme_reset_link()
1635 jme_restart_an(struct jme_adapter *jme) in jme_restart_an() argument
1639 spin_lock_bh(&jme->phy_lock); in jme_restart_an()
1640 bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR); in jme_restart_an()
1642 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr); in jme_restart_an()
1643 spin_unlock_bh(&jme->phy_lock); in jme_restart_an()
1647 jme_request_irq(struct jme_adapter *jme) in jme_request_irq() argument
1650 struct net_device *netdev = jme->dev; in jme_request_irq()
1654 if (!pci_enable_msi(jme->pdev)) { in jme_request_irq()
1655 set_bit(JME_FLAG_MSI, &jme->flags); in jme_request_irq()
1660 rc = request_irq(jme->pdev->irq, handler, irq_flags, netdev->name, in jme_request_irq()
1665 test_bit(JME_FLAG_MSI, &jme->flags) ? "MSI" : "INTx", in jme_request_irq()
1668 if (test_bit(JME_FLAG_MSI, &jme->flags)) { in jme_request_irq()
1669 pci_disable_msi(jme->pdev); in jme_request_irq()
1670 clear_bit(JME_FLAG_MSI, &jme->flags); in jme_request_irq()
1673 netdev->irq = jme->pdev->irq; in jme_request_irq()
1680 jme_free_irq(struct jme_adapter *jme) in jme_free_irq() argument
1682 free_irq(jme->pdev->irq, jme->dev); in jme_free_irq()
1683 if (test_bit(JME_FLAG_MSI, &jme->flags)) { in jme_free_irq()
1684 pci_disable_msi(jme->pdev); in jme_free_irq()
1685 clear_bit(JME_FLAG_MSI, &jme->flags); in jme_free_irq()
1686 jme->dev->irq = jme->pdev->irq; in jme_free_irq()
1691 jme_new_phy_on(struct jme_adapter *jme) in jme_new_phy_on() argument
1695 reg = jread32(jme, JME_PHY_PWR); in jme_new_phy_on()
1698 jwrite32(jme, JME_PHY_PWR, reg); in jme_new_phy_on()
1700 pci_read_config_dword(jme->pdev, PCI_PRIV_PE1, ®); in jme_new_phy_on()
1703 pci_write_config_dword(jme->pdev, PCI_PRIV_PE1, reg); in jme_new_phy_on()
1707 jme_new_phy_off(struct jme_adapter *jme) in jme_new_phy_off() argument
1711 reg = jread32(jme, JME_PHY_PWR); in jme_new_phy_off()
1714 jwrite32(jme, JME_PHY_PWR, reg); in jme_new_phy_off()
1716 pci_read_config_dword(jme->pdev, PCI_PRIV_PE1, ®); in jme_new_phy_off()
1719 pci_write_config_dword(jme->pdev, PCI_PRIV_PE1, reg); in jme_new_phy_off()
1723 jme_phy_on(struct jme_adapter *jme) in jme_phy_on() argument
1727 bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR); in jme_phy_on()
1729 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr); in jme_phy_on()
1731 if (new_phy_power_ctrl(jme->chip_main_rev)) in jme_phy_on()
1732 jme_new_phy_on(jme); in jme_phy_on()
1736 jme_phy_off(struct jme_adapter *jme) in jme_phy_off() argument
1740 bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR); in jme_phy_off()
1742 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr); in jme_phy_off()
1744 if (new_phy_power_ctrl(jme->chip_main_rev)) in jme_phy_off()
1745 jme_new_phy_off(jme); in jme_phy_off()
1749 jme_phy_specreg_read(struct jme_adapter *jme, u32 specreg) in jme_phy_specreg_read() argument
1754 jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_ADDR_REG, in jme_phy_specreg_read()
1756 return jme_mdio_read(jme->dev, jme->mii_if.phy_id, in jme_phy_specreg_read()
1761 jme_phy_specreg_write(struct jme_adapter *jme, u32 ext_reg, u32 phy_data) in jme_phy_specreg_write() argument
1766 jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_DATA_REG, in jme_phy_specreg_write()
1768 jme_mdio_write(jme->dev, jme->mii_if.phy_id, JM_PHY_SPEC_ADDR_REG, in jme_phy_specreg_write()
1773 jme_phy_calibration(struct jme_adapter *jme) in jme_phy_calibration() argument
1777 jme_phy_off(jme); in jme_phy_calibration()
1778 jme_phy_on(jme); in jme_phy_calibration()
1780 ctrl1000 = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_CTRL1000); in jme_phy_calibration()
1783 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_CTRL1000, ctrl1000); in jme_phy_calibration()
1785 phy_data = jme_phy_specreg_read(jme, JM_PHY_EXT_COMM_2_REG); in jme_phy_calibration()
1789 jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_2_REG, phy_data); in jme_phy_calibration()
1791 phy_data = jme_phy_specreg_read(jme, JM_PHY_EXT_COMM_2_REG); in jme_phy_calibration()
1795 jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_2_REG, phy_data); in jme_phy_calibration()
1798 ctrl1000 = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_CTRL1000); in jme_phy_calibration()
1800 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_CTRL1000, ctrl1000); in jme_phy_calibration()
1805 jme_phy_setEA(struct jme_adapter *jme) in jme_phy_setEA() argument
1810 pci_read_config_byte(jme->pdev, PCI_PRIV_SHARE_NICCTRL, &nic_ctrl); in jme_phy_setEA()
1814 switch (jme->pdev->device) { in jme_phy_setEA()
1816 if (((jme->chip_main_rev == 5) && in jme_phy_setEA()
1817 ((jme->chip_sub_rev == 0) || (jme->chip_sub_rev == 1) || in jme_phy_setEA()
1818 (jme->chip_sub_rev == 3))) || in jme_phy_setEA()
1819 (jme->chip_main_rev >= 6)) { in jme_phy_setEA()
1823 if ((jme->chip_main_rev == 3) && in jme_phy_setEA()
1824 ((jme->chip_sub_rev == 1) || (jme->chip_sub_rev == 2))) in jme_phy_setEA()
1828 if (((jme->chip_main_rev == 5) && in jme_phy_setEA()
1829 ((jme->chip_sub_rev == 0) || (jme->chip_sub_rev == 1) || in jme_phy_setEA()
1830 (jme->chip_sub_rev == 3))) || in jme_phy_setEA()
1831 (jme->chip_main_rev >= 6)) { in jme_phy_setEA()
1835 if ((jme->chip_main_rev == 3) && in jme_phy_setEA()
1836 ((jme->chip_sub_rev == 1) || (jme->chip_sub_rev == 2))) in jme_phy_setEA()
1838 if ((jme->chip_main_rev == 2) && (jme->chip_sub_rev == 0)) in jme_phy_setEA()
1840 if ((jme->chip_main_rev == 2) && (jme->chip_sub_rev == 2)) in jme_phy_setEA()
1847 jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_0_REG, phy_comm0); in jme_phy_setEA()
1849 jme_phy_specreg_write(jme, JM_PHY_EXT_COMM_1_REG, phy_comm1); in jme_phy_setEA()
1857 struct jme_adapter *jme = netdev_priv(netdev); in jme_open() local
1860 jme_clear_pm(jme); in jme_open()
1861 JME_NAPI_ENABLE(jme); in jme_open()
1863 tasklet_init(&jme->linkch_task, jme_link_change_tasklet, in jme_open()
1864 (unsigned long) jme); in jme_open()
1865 tasklet_init(&jme->txclean_task, jme_tx_clean_tasklet, in jme_open()
1866 (unsigned long) jme); in jme_open()
1867 tasklet_init(&jme->rxclean_task, jme_rx_clean_tasklet, in jme_open()
1868 (unsigned long) jme); in jme_open()
1869 tasklet_init(&jme->rxempty_task, jme_rx_empty_tasklet, in jme_open()
1870 (unsigned long) jme); in jme_open()
1872 rc = jme_request_irq(jme); in jme_open()
1876 jme_start_irq(jme); in jme_open()
1878 jme_phy_on(jme); in jme_open()
1879 if (test_bit(JME_FLAG_SSET, &jme->flags)) in jme_open()
1880 jme_set_settings(netdev, &jme->old_ecmd); in jme_open()
1882 jme_reset_phy_processor(jme); in jme_open()
1883 jme_phy_calibration(jme); in jme_open()
1884 jme_phy_setEA(jme); in jme_open()
1885 jme_reset_link(jme); in jme_open()
1896 jme_set_100m_half(struct jme_adapter *jme) in jme_set_100m_half() argument
1900 jme_phy_on(jme); in jme_set_100m_half()
1901 bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR); in jme_set_100m_half()
1907 jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, tmp); in jme_set_100m_half()
1909 if (jme->fpgaver) in jme_set_100m_half()
1910 jwrite32(jme, JME_GHC, GHC_SPEED_100M | GHC_LINK_POLL); in jme_set_100m_half()
1912 jwrite32(jme, JME_GHC, GHC_SPEED_100M); in jme_set_100m_half()
1917 jme_wait_link(struct jme_adapter *jme) in jme_wait_link() argument
1922 phylink = jme_linkstat_from_phy(jme); in jme_wait_link()
1925 phylink = jme_linkstat_from_phy(jme); in jme_wait_link()
1930 jme_powersave_phy(struct jme_adapter *jme) in jme_powersave_phy() argument
1932 if (jme->reg_pmcs) { in jme_powersave_phy()
1933 jme_set_100m_half(jme); in jme_powersave_phy()
1934 if (jme->reg_pmcs & (PMCS_LFEN | PMCS_LREN)) in jme_powersave_phy()
1935 jme_wait_link(jme); in jme_powersave_phy()
1936 jme_clear_pm(jme); in jme_powersave_phy()
1938 jme_phy_off(jme); in jme_powersave_phy()
1945 struct jme_adapter *jme = netdev_priv(netdev); in jme_close() local
1950 jme_stop_irq(jme); in jme_close()
1951 jme_free_irq(jme); in jme_close()
1953 JME_NAPI_DISABLE(jme); in jme_close()
1955 tasklet_kill(&jme->linkch_task); in jme_close()
1956 tasklet_kill(&jme->txclean_task); in jme_close()
1957 tasklet_kill(&jme->rxclean_task); in jme_close()
1958 tasklet_kill(&jme->rxempty_task); in jme_close()
1960 jme_disable_rx_engine(jme); in jme_close()
1961 jme_disable_tx_engine(jme); in jme_close()
1962 jme_reset_mac_processor(jme); in jme_close()
1963 jme_free_rx_resources(jme); in jme_close()
1964 jme_free_tx_resources(jme); in jme_close()
1965 jme->phylink = 0; in jme_close()
1966 jme_phy_off(jme); in jme_close()
1972 jme_alloc_txdesc(struct jme_adapter *jme, in jme_alloc_txdesc() argument
1975 struct jme_ring *txring = &(jme->txring[0]); in jme_alloc_txdesc()
1976 int idx, nr_alloc, mask = jme->tx_ring_mask; in jme_alloc_txdesc()
2030 static void jme_drop_tx_map(struct jme_adapter *jme, int startidx, int count) in jme_drop_tx_map() argument
2032 struct jme_ring *txring = &(jme->txring[0]); in jme_drop_tx_map()
2034 int mask = jme->tx_ring_mask; in jme_drop_tx_map()
2039 pci_unmap_page(jme->pdev, in jme_drop_tx_map()
2051 jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) in jme_map_tx_skb() argument
2053 struct jme_ring *txring = &(jme->txring[0]); in jme_map_tx_skb()
2056 bool hidma = jme->dev->features & NETIF_F_HIGHDMA; in jme_map_tx_skb()
2058 int mask = jme->tx_ring_mask; in jme_map_tx_skb()
2068 ret = jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, in jme_map_tx_skb()
2072 jme_drop_tx_map(jme, idx, i); in jme_map_tx_skb()
2081 ret = jme_fill_tx_map(jme->pdev, ctxdesc, ctxbi, virt_to_page(skb->data), in jme_map_tx_skb()
2084 jme_drop_tx_map(jme, idx, i); in jme_map_tx_skb()
2123 jme_tx_csum(struct jme_adapter *jme, struct sk_buff *skb, u8 *flags) in jme_tx_csum() argument
2148 netif_err(jme, tx_err, jme->dev, "Error upper layer protocol\n"); in jme_tx_csum()
2164 jme_fill_tx_desc(struct jme_adapter *jme, struct sk_buff *skb, int idx) in jme_fill_tx_desc() argument
2166 struct jme_ring *txring = &(jme->txring[0]); in jme_fill_tx_desc()
2193 jme_tx_csum(jme, skb, &flags); in jme_fill_tx_desc()
2195 ret = jme_map_tx_skb(jme, skb, idx); in jme_fill_tx_desc()
2216 jme_stop_queue_if_full(struct jme_adapter *jme) in jme_stop_queue_if_full() argument
2218 struct jme_ring *txring = &(jme->txring[0]); in jme_stop_queue_if_full()
2226 netif_stop_queue(jme->dev); in jme_stop_queue_if_full()
2227 netif_info(jme, tx_queued, jme->dev, "TX Queue Paused\n"); in jme_stop_queue_if_full()
2230 >= (jme->tx_wake_threshold)) { in jme_stop_queue_if_full()
2231 netif_wake_queue(jme->dev); in jme_stop_queue_if_full()
2232 netif_info(jme, tx_queued, jme->dev, "TX Queue Fast Waked\n"); in jme_stop_queue_if_full()
2239 netif_stop_queue(jme->dev); in jme_stop_queue_if_full()
2240 netif_info(jme, tx_queued, jme->dev, in jme_stop_queue_if_full()
2252 struct jme_adapter *jme = netdev_priv(netdev); in jme_start_xmit() local
2257 ++(NET_STAT(jme).tx_dropped); in jme_start_xmit()
2261 idx = jme_alloc_txdesc(jme, skb); in jme_start_xmit()
2265 netif_err(jme, tx_err, jme->dev, in jme_start_xmit()
2271 if (jme_fill_tx_desc(jme, skb, idx)) in jme_start_xmit()
2274 jwrite32(jme, JME_TXCS, jme->reg_txcs | in jme_start_xmit()
2279 tx_dbg(jme, "xmit: %d+%d@%lu\n", in jme_start_xmit()
2281 jme_stop_queue_if_full(jme); in jme_start_xmit()
2289 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_unicastaddr() local
2296 jwrite32(jme, JME_RXUMA_LO, val); in jme_set_unicastaddr()
2299 jwrite32(jme, JME_RXUMA_HI, val); in jme_set_unicastaddr()
2305 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_macaddr() local
2311 spin_lock_bh(&jme->macaddr_lock); in jme_set_macaddr()
2314 spin_unlock_bh(&jme->macaddr_lock); in jme_set_macaddr()
2322 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_multi() local
2325 spin_lock_bh(&jme->rxmcs_lock); in jme_set_multi()
2327 jme->reg_rxmcs |= RXMCS_BRDFRAME | RXMCS_UNIFRAME; in jme_set_multi()
2330 jme->reg_rxmcs |= RXMCS_ALLFRAME; in jme_set_multi()
2332 jme->reg_rxmcs |= RXMCS_ALLMULFRAME; in jme_set_multi()
2337 jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED; in jme_set_multi()
2343 jwrite32(jme, JME_RXMCHT_LO, mc_hash[0]); in jme_set_multi()
2344 jwrite32(jme, JME_RXMCHT_HI, mc_hash[1]); in jme_set_multi()
2348 jwrite32(jme, JME_RXMCS, jme->reg_rxmcs); in jme_set_multi()
2350 spin_unlock_bh(&jme->rxmcs_lock); in jme_set_multi()
2356 struct jme_adapter *jme = netdev_priv(netdev); in jme_change_mtu() local
2358 if (new_mtu == jme->old_mtu) in jme_change_mtu()
2369 jme_restart_rx_engine(jme); in jme_change_mtu()
2370 jme_reset_link(jme); in jme_change_mtu()
2378 struct jme_adapter *jme = netdev_priv(netdev); in jme_tx_timeout() local
2380 jme->phylink = 0; in jme_tx_timeout()
2381 jme_reset_phy_processor(jme); in jme_tx_timeout()
2382 if (test_bit(JME_FLAG_SSET, &jme->flags)) in jme_tx_timeout()
2383 jme_set_settings(netdev, &jme->old_ecmd); in jme_tx_timeout()
2388 jme_reset_link(jme); in jme_tx_timeout()
2391 static inline void jme_pause_rx(struct jme_adapter *jme) in jme_pause_rx() argument
2393 atomic_dec(&jme->link_changing); in jme_pause_rx()
2395 jme_set_rx_pcc(jme, PCC_OFF); in jme_pause_rx()
2396 if (test_bit(JME_FLAG_POLL, &jme->flags)) { in jme_pause_rx()
2397 JME_NAPI_DISABLE(jme); in jme_pause_rx()
2399 tasklet_disable(&jme->rxclean_task); in jme_pause_rx()
2400 tasklet_disable(&jme->rxempty_task); in jme_pause_rx()
2404 static inline void jme_resume_rx(struct jme_adapter *jme) in jme_resume_rx() argument
2406 struct dynpcc_info *dpi = &(jme->dpi); in jme_resume_rx()
2408 if (test_bit(JME_FLAG_POLL, &jme->flags)) { in jme_resume_rx()
2409 JME_NAPI_ENABLE(jme); in jme_resume_rx()
2411 tasklet_enable(&jme->rxclean_task); in jme_resume_rx()
2412 tasklet_enable(&jme->rxempty_task); in jme_resume_rx()
2417 jme_set_rx_pcc(jme, PCC_P1); in jme_resume_rx()
2419 atomic_inc(&jme->link_changing); in jme_resume_rx()
2426 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_drvinfo() local
2430 strlcpy(info->bus_info, pci_name(jme->pdev), sizeof(info->bus_info)); in jme_get_drvinfo()
2440 mmapio_memcpy(struct jme_adapter *jme, u32 *p, u32 reg, int len) in mmapio_memcpy() argument
2445 p[i >> 2] = jread32(jme, reg + i); in mmapio_memcpy()
2449 mdio_memcpy(struct jme_adapter *jme, u32 *p, int reg_nr) in mdio_memcpy() argument
2455 p16[i] = jme_mdio_read(jme->dev, jme->mii_if.phy_id, i); in mdio_memcpy()
2461 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_regs() local
2467 mmapio_memcpy(jme, p32, JME_MAC, JME_MAC_LEN); in jme_get_regs()
2470 mmapio_memcpy(jme, p32, JME_PHY, JME_PHY_LEN); in jme_get_regs()
2473 mmapio_memcpy(jme, p32, JME_MISC, JME_MISC_LEN); in jme_get_regs()
2476 mmapio_memcpy(jme, p32, JME_RSS, JME_RSS_LEN); in jme_get_regs()
2479 mdio_memcpy(jme, p32, JME_PHY_REG_NR); in jme_get_regs()
2485 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_coalesce() local
2490 if (test_bit(JME_FLAG_POLL, &jme->flags)) { in jme_get_coalesce()
2499 switch (jme->dpi.cur) { in jme_get_coalesce()
2522 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_coalesce() local
2523 struct dynpcc_info *dpi = &(jme->dpi); in jme_set_coalesce()
2529 test_bit(JME_FLAG_POLL, &jme->flags)) { in jme_set_coalesce()
2530 clear_bit(JME_FLAG_POLL, &jme->flags); in jme_set_coalesce()
2531 jme->jme_rx = netif_rx; in jme_set_coalesce()
2535 jme_set_rx_pcc(jme, PCC_P1); in jme_set_coalesce()
2536 jme_interrupt_mode(jme); in jme_set_coalesce()
2538 !(test_bit(JME_FLAG_POLL, &jme->flags))) { in jme_set_coalesce()
2539 set_bit(JME_FLAG_POLL, &jme->flags); in jme_set_coalesce()
2540 jme->jme_rx = netif_receive_skb; in jme_set_coalesce()
2541 jme_interrupt_mode(jme); in jme_set_coalesce()
2551 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_pauseparam() local
2554 ecmd->tx_pause = (jme->reg_txpfc & TXPFC_PF_EN) != 0; in jme_get_pauseparam()
2555 ecmd->rx_pause = (jme->reg_rxmcs & RXMCS_FLOWCTRL) != 0; in jme_get_pauseparam()
2557 spin_lock_bh(&jme->phy_lock); in jme_get_pauseparam()
2558 val = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_ADVERTISE); in jme_get_pauseparam()
2559 spin_unlock_bh(&jme->phy_lock); in jme_get_pauseparam()
2569 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_pauseparam() local
2572 if (((jme->reg_txpfc & TXPFC_PF_EN) != 0) ^ in jme_set_pauseparam()
2576 jme->reg_txpfc |= TXPFC_PF_EN; in jme_set_pauseparam()
2578 jme->reg_txpfc &= ~TXPFC_PF_EN; in jme_set_pauseparam()
2580 jwrite32(jme, JME_TXPFC, jme->reg_txpfc); in jme_set_pauseparam()
2583 spin_lock_bh(&jme->rxmcs_lock); in jme_set_pauseparam()
2584 if (((jme->reg_rxmcs & RXMCS_FLOWCTRL) != 0) ^ in jme_set_pauseparam()
2588 jme->reg_rxmcs |= RXMCS_FLOWCTRL; in jme_set_pauseparam()
2590 jme->reg_rxmcs &= ~RXMCS_FLOWCTRL; in jme_set_pauseparam()
2592 jwrite32(jme, JME_RXMCS, jme->reg_rxmcs); in jme_set_pauseparam()
2594 spin_unlock_bh(&jme->rxmcs_lock); in jme_set_pauseparam()
2596 spin_lock_bh(&jme->phy_lock); in jme_set_pauseparam()
2597 val = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_ADVERTISE); in jme_set_pauseparam()
2606 jme_mdio_write(jme->dev, jme->mii_if.phy_id, in jme_set_pauseparam()
2609 spin_unlock_bh(&jme->phy_lock); in jme_set_pauseparam()
2618 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_wol() local
2624 if (jme->reg_pmcs & (PMCS_LFEN | PMCS_LREN)) in jme_get_wol()
2627 if (jme->reg_pmcs & PMCS_MFEN) in jme_get_wol()
2636 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_wol() local
2645 jme->reg_pmcs = 0; in jme_set_wol()
2648 jme->reg_pmcs |= PMCS_LFEN | PMCS_LREN; in jme_set_wol()
2651 jme->reg_pmcs |= PMCS_MFEN; in jme_set_wol()
2653 jwrite32(jme, JME_PMCS, jme->reg_pmcs); in jme_set_wol()
2654 device_set_wakeup_enable(&jme->pdev->dev, !!(jme->reg_pmcs)); in jme_set_wol()
2663 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_settings() local
2666 spin_lock_bh(&jme->phy_lock); in jme_get_settings()
2667 rc = mii_ethtool_gset(&(jme->mii_if), ecmd); in jme_get_settings()
2668 spin_unlock_bh(&jme->phy_lock); in jme_get_settings()
2676 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_settings() local
2687 if (jme->mii_if.force_media && in jme_set_settings()
2689 (jme->mii_if.full_duplex != ecmd->duplex)) in jme_set_settings()
2692 spin_lock_bh(&jme->phy_lock); in jme_set_settings()
2693 rc = mii_ethtool_sset(&(jme->mii_if), ecmd); in jme_set_settings()
2694 spin_unlock_bh(&jme->phy_lock); in jme_set_settings()
2698 jme_reset_link(jme); in jme_set_settings()
2699 jme->old_ecmd = *ecmd; in jme_set_settings()
2700 set_bit(JME_FLAG_SSET, &jme->flags); in jme_set_settings()
2710 struct jme_adapter *jme = netdev_priv(netdev); in jme_ioctl() local
2721 spin_lock_bh(&jme->phy_lock); in jme_ioctl()
2722 rc = generic_mii_ioctl(&jme->mii_if, mii_data, cmd, &duplex_chg); in jme_ioctl()
2723 spin_unlock_bh(&jme->phy_lock); in jme_ioctl()
2727 jme_reset_link(jme); in jme_ioctl()
2728 jme_get_settings(netdev, &jme->old_ecmd); in jme_ioctl()
2729 set_bit(JME_FLAG_SSET, &jme->flags); in jme_ioctl()
2738 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_link() local
2739 return jread32(jme, JME_PHY_LINK) & PHY_LINK_UP; in jme_get_link()
2745 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_msglevel() local
2746 return jme->msg_enable; in jme_get_msglevel()
2752 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_msglevel() local
2753 jme->msg_enable = value; in jme_set_msglevel()
2767 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_features() local
2769 spin_lock_bh(&jme->rxmcs_lock); in jme_set_features()
2771 jme->reg_rxmcs |= RXMCS_CHECKSUM; in jme_set_features()
2773 jme->reg_rxmcs &= ~RXMCS_CHECKSUM; in jme_set_features()
2774 jwrite32(jme, JME_RXMCS, jme->reg_rxmcs); in jme_set_features()
2775 spin_unlock_bh(&jme->rxmcs_lock); in jme_set_features()
2794 struct jme_adapter *jme = netdev_priv(netdev); in jme_nway_reset() local
2795 jme_restart_an(jme); in jme_nway_reset()
2800 jme_smb_read(struct jme_adapter *jme, unsigned int addr) in jme_smb_read() argument
2805 val = jread32(jme, JME_SMBCSR); in jme_smb_read()
2809 val = jread32(jme, JME_SMBCSR); in jme_smb_read()
2812 netif_err(jme, hw, jme->dev, "SMB Bus Busy\n"); in jme_smb_read()
2816 jwrite32(jme, JME_SMBINTF, in jme_smb_read()
2821 val = jread32(jme, JME_SMBINTF); in jme_smb_read()
2825 val = jread32(jme, JME_SMBINTF); in jme_smb_read()
2828 netif_err(jme, hw, jme->dev, "SMB Bus Busy\n"); in jme_smb_read()
2836 jme_smb_write(struct jme_adapter *jme, unsigned int addr, u8 data) in jme_smb_write() argument
2841 val = jread32(jme, JME_SMBCSR); in jme_smb_write()
2845 val = jread32(jme, JME_SMBCSR); in jme_smb_write()
2848 netif_err(jme, hw, jme->dev, "SMB Bus Busy\n"); in jme_smb_write()
2852 jwrite32(jme, JME_SMBINTF, in jme_smb_write()
2858 val = jread32(jme, JME_SMBINTF); in jme_smb_write()
2862 val = jread32(jme, JME_SMBINTF); in jme_smb_write()
2865 netif_err(jme, hw, jme->dev, "SMB Bus Busy\n"); in jme_smb_write()
2875 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_eeprom_len() local
2877 val = jread32(jme, JME_SMBCSR); in jme_get_eeprom_len()
2885 struct jme_adapter *jme = netdev_priv(netdev); in jme_get_eeprom() local
2893 data[i] = jme_smb_read(jme, i + offset); in jme_get_eeprom()
2902 struct jme_adapter *jme = netdev_priv(netdev); in jme_set_eeprom() local
2912 jme_smb_write(jme, i + offset, data[i]); in jme_set_eeprom()
2959 jme_phy_init(struct jme_adapter *jme) in jme_phy_init() argument
2963 reg26 = jme_mdio_read(jme->dev, jme->mii_if.phy_id, 26); in jme_phy_init()
2964 jme_mdio_write(jme->dev, jme->mii_if.phy_id, 26, reg26 | 0x1000); in jme_phy_init()
2968 jme_check_hw_ver(struct jme_adapter *jme) in jme_check_hw_ver() argument
2972 chipmode = jread32(jme, JME_CHIPMODE); in jme_check_hw_ver()
2974 jme->fpgaver = (chipmode & CM_FPGAVER_MASK) >> CM_FPGAVER_SHIFT; in jme_check_hw_ver()
2975 jme->chiprev = (chipmode & CM_CHIPREV_MASK) >> CM_CHIPREV_SHIFT; in jme_check_hw_ver()
2976 jme->chip_main_rev = jme->chiprev & 0xF; in jme_check_hw_ver()
2977 jme->chip_sub_rev = (jme->chiprev >> 4) & 0xF; in jme_check_hw_ver()
3003 struct jme_adapter *jme; in jme_init_one() local
3043 netdev = alloc_etherdev(sizeof(*jme)); in jme_init_one()
3073 jme = netdev_priv(netdev); in jme_init_one()
3074 jme->pdev = pdev; in jme_init_one()
3075 jme->dev = netdev; in jme_init_one()
3076 jme->jme_rx = netif_rx; in jme_init_one()
3077 jme->old_mtu = netdev->mtu = 1500; in jme_init_one()
3078 jme->phylink = 0; in jme_init_one()
3079 jme->tx_ring_size = 1 << 10; in jme_init_one()
3080 jme->tx_ring_mask = jme->tx_ring_size - 1; in jme_init_one()
3081 jme->tx_wake_threshold = 1 << 9; in jme_init_one()
3082 jme->rx_ring_size = 1 << 9; in jme_init_one()
3083 jme->rx_ring_mask = jme->rx_ring_size - 1; in jme_init_one()
3084 jme->msg_enable = JME_DEF_MSG_ENABLE; in jme_init_one()
3085 jme->regs = ioremap(pci_resource_start(pdev, 0), in jme_init_one()
3087 if (!(jme->regs)) { in jme_init_one()
3094 apmc = jread32(jme, JME_APMC) & ~JME_APMC_PSEUDO_HP_EN; in jme_init_one()
3095 jwrite32(jme, JME_APMC, apmc); in jme_init_one()
3097 apmc = jread32(jme, JME_APMC) | JME_APMC_PSEUDO_HP_EN; in jme_init_one()
3098 jwrite32(jme, JME_APMC, apmc); in jme_init_one()
3101 NETIF_NAPI_SET(netdev, &jme->napi, jme_poll, NAPI_POLL_WEIGHT) in jme_init_one()
3103 spin_lock_init(&jme->phy_lock); in jme_init_one()
3104 spin_lock_init(&jme->macaddr_lock); in jme_init_one()
3105 spin_lock_init(&jme->rxmcs_lock); in jme_init_one()
3107 atomic_set(&jme->link_changing, 1); in jme_init_one()
3108 atomic_set(&jme->rx_cleaning, 1); in jme_init_one()
3109 atomic_set(&jme->tx_cleaning, 1); in jme_init_one()
3110 atomic_set(&jme->rx_empty, 1); in jme_init_one()
3112 tasklet_init(&jme->pcc_task, in jme_init_one()
3114 (unsigned long) jme); in jme_init_one()
3115 jme->dpi.cur = PCC_P1; in jme_init_one()
3117 jme->reg_ghc = 0; in jme_init_one()
3118 jme->reg_rxcs = RXCS_DEFAULT; in jme_init_one()
3119 jme->reg_rxmcs = RXMCS_DEFAULT; in jme_init_one()
3120 jme->reg_txpfc = 0; in jme_init_one()
3121 jme->reg_pmcs = PMCS_MFEN; in jme_init_one()
3122 jme->reg_gpreg1 = GPREG1_DEFAULT; in jme_init_one()
3124 if (jme->reg_rxmcs & RXMCS_CHECKSUM) in jme_init_one()
3130 pci_read_config_byte(pdev, PCI_DCSR_MRRS, &jme->mrrs); in jme_init_one()
3131 jme->mrrs &= PCI_DCSR_MRRS_MASK; in jme_init_one()
3132 switch (jme->mrrs) { in jme_init_one()
3134 jme->reg_txcs = TXCS_DEFAULT | TXCS_DMASIZE_128B; in jme_init_one()
3137 jme->reg_txcs = TXCS_DEFAULT | TXCS_DMASIZE_256B; in jme_init_one()
3140 jme->reg_txcs = TXCS_DEFAULT | TXCS_DMASIZE_512B; in jme_init_one()
3147 jme_check_hw_ver(jme); in jme_init_one()
3148 jme->mii_if.dev = netdev; in jme_init_one()
3149 if (jme->fpgaver) { in jme_init_one()
3150 jme->mii_if.phy_id = 0; in jme_init_one()
3155 jme->mii_if.phy_id = i; in jme_init_one()
3160 if (!jme->mii_if.phy_id) { in jme_init_one()
3166 jme->reg_ghc |= GHC_LINK_POLL; in jme_init_one()
3168 jme->mii_if.phy_id = 1; in jme_init_one()
3171 jme->mii_if.supports_gmii = true; in jme_init_one()
3173 jme->mii_if.supports_gmii = false; in jme_init_one()
3174 jme->mii_if.phy_id_mask = 0x1F; in jme_init_one()
3175 jme->mii_if.reg_num_mask = 0x1F; in jme_init_one()
3176 jme->mii_if.mdio_read = jme_mdio_read; in jme_init_one()
3177 jme->mii_if.mdio_write = jme_mdio_write; in jme_init_one()
3179 jme_clear_pm(jme); in jme_init_one()
3182 jme_set_phyfifo_5level(jme); in jme_init_one()
3183 jme->pcirev = pdev->revision; in jme_init_one()
3184 if (!jme->fpgaver) in jme_init_one()
3185 jme_phy_init(jme); in jme_init_one()
3186 jme_phy_off(jme); in jme_init_one()
3191 jme_reset_mac_processor(jme); in jme_init_one()
3192 rc = jme_reload_eeprom(jme); in jme_init_one()
3210 netif_info(jme, probe, jme->dev, "%s%s chiprev:%x pcirev:%x macaddr:%pM\n", in jme_init_one()
3211 (jme->pdev->device == PCI_DEVICE_ID_JMICRON_JMC250) ? in jme_init_one()
3213 (jme->pdev->device == PCI_DEVICE_ID_JMICRON_JMC260) ? in jme_init_one()
3215 (jme->fpgaver != 0) ? " (FPGA)" : "", in jme_init_one()
3216 (jme->fpgaver != 0) ? jme->fpgaver : jme->chiprev, in jme_init_one()
3217 jme->pcirev, netdev->dev_addr); in jme_init_one()
3222 iounmap(jme->regs); in jme_init_one()
3237 struct jme_adapter *jme = netdev_priv(netdev); in jme_remove_one() local
3240 iounmap(jme->regs); in jme_remove_one()
3251 struct jme_adapter *jme = netdev_priv(netdev); in jme_shutdown() local
3253 jme_powersave_phy(jme); in jme_shutdown()
3263 struct jme_adapter *jme = netdev_priv(netdev); in jme_suspend() local
3268 atomic_dec(&jme->link_changing); in jme_suspend()
3272 jme_stop_irq(jme); in jme_suspend()
3274 tasklet_disable(&jme->txclean_task); in jme_suspend()
3275 tasklet_disable(&jme->rxclean_task); in jme_suspend()
3276 tasklet_disable(&jme->rxempty_task); in jme_suspend()
3279 if (test_bit(JME_FLAG_POLL, &jme->flags)) in jme_suspend()
3280 jme_polling_mode(jme); in jme_suspend()
3282 jme_stop_pcc_timer(jme); in jme_suspend()
3283 jme_disable_rx_engine(jme); in jme_suspend()
3284 jme_disable_tx_engine(jme); in jme_suspend()
3285 jme_reset_mac_processor(jme); in jme_suspend()
3286 jme_free_rx_resources(jme); in jme_suspend()
3287 jme_free_tx_resources(jme); in jme_suspend()
3289 jme->phylink = 0; in jme_suspend()
3292 tasklet_enable(&jme->txclean_task); in jme_suspend()
3293 tasklet_enable(&jme->rxclean_task); in jme_suspend()
3294 tasklet_enable(&jme->rxempty_task); in jme_suspend()
3296 jme_powersave_phy(jme); in jme_suspend()
3306 struct jme_adapter *jme = netdev_priv(netdev); in jme_resume() local
3311 jme_clear_pm(jme); in jme_resume()
3312 jme_phy_on(jme); in jme_resume()
3313 if (test_bit(JME_FLAG_SSET, &jme->flags)) in jme_resume()
3314 jme_set_settings(netdev, &jme->old_ecmd); in jme_resume()
3316 jme_reset_phy_processor(jme); in jme_resume()
3317 jme_phy_calibration(jme); in jme_resume()
3318 jme_phy_setEA(jme); in jme_resume()
3319 jme_start_irq(jme); in jme_resume()
3322 atomic_inc(&jme->link_changing); in jme_resume()
3324 jme_reset_link(jme); in jme_resume()