Lines Matching refs:card
92 spider_net_read_reg(struct spider_net_card *card, u32 reg) in spider_net_read_reg() argument
98 return in_be32(card->regs + reg); in spider_net_read_reg()
108 spider_net_write_reg(struct spider_net_card *card, u32 reg, u32 value) in spider_net_write_reg() argument
114 out_be32(card->regs + reg, value); in spider_net_write_reg()
132 struct spider_net_card *card = netdev_priv(netdev); in spider_net_write_phy() local
138 spider_net_write_reg(card, SPIDER_NET_GPCWOPCMD, writevalue); in spider_net_write_phy()
155 struct spider_net_card *card = netdev_priv(netdev); in spider_net_read_phy() local
159 spider_net_write_reg(card, SPIDER_NET_GPCROPCMD, readvalue); in spider_net_read_phy()
165 readvalue = spider_net_read_reg(card, SPIDER_NET_GPCROPCMD); in spider_net_read_phy()
178 spider_net_setup_aneg(struct spider_net_card *card) in spider_net_setup_aneg() argument
180 struct mii_phy *phy = &card->phy; in spider_net_setup_aneg()
184 bmsr = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); in spider_net_setup_aneg()
185 estat = spider_net_read_phy(card->netdev, phy->mii_id, MII_ESTATUS); in spider_net_setup_aneg()
213 spider_net_rx_irq_off(struct spider_net_card *card) in spider_net_rx_irq_off() argument
218 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue); in spider_net_rx_irq_off()
228 spider_net_rx_irq_on(struct spider_net_card *card) in spider_net_rx_irq_on() argument
233 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue); in spider_net_rx_irq_on()
244 spider_net_set_promisc(struct spider_net_card *card) in spider_net_set_promisc() argument
247 struct net_device *netdev = card->netdev; in spider_net_set_promisc()
251 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, 0); in spider_net_set_promisc()
252 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, 0); in spider_net_set_promisc()
253 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, in spider_net_set_promisc()
262 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, macu); in spider_net_set_promisc()
263 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, macl); in spider_net_set_promisc()
264 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, in spider_net_set_promisc()
288 spider_net_free_chain(struct spider_net_card *card, in spider_net_free_chain() argument
300 dma_free_coherent(&card->pdev->dev, chain->num_desc, in spider_net_free_chain()
315 spider_net_init_chain(struct spider_net_card *card, in spider_net_init_chain() argument
326 chain->hwring = dma_alloc_coherent(&card->pdev->dev, alloc_size, in spider_net_init_chain()
365 spider_net_free_rx_chain_contents(struct spider_net_card *card) in spider_net_free_rx_chain_contents() argument
369 descr = card->rx_chain.head; in spider_net_free_rx_chain_contents()
372 pci_unmap_single(card->pdev, descr->hwdescr->buf_addr, in spider_net_free_rx_chain_contents()
379 } while (descr != card->rx_chain.head); in spider_net_free_rx_chain_contents()
393 spider_net_prepare_rx_descr(struct spider_net_card *card, in spider_net_prepare_rx_descr() argument
408 descr->skb = netdev_alloc_skb(card->netdev, in spider_net_prepare_rx_descr()
411 if (netif_msg_rx_err(card) && net_ratelimit()) in spider_net_prepare_rx_descr()
412 dev_err(&card->netdev->dev, in spider_net_prepare_rx_descr()
414 card->spider_stats.alloc_rx_skb_error++; in spider_net_prepare_rx_descr()
428 buf = pci_map_single(card->pdev, descr->skb->data, in spider_net_prepare_rx_descr()
430 if (pci_dma_mapping_error(card->pdev, buf)) { in spider_net_prepare_rx_descr()
433 if (netif_msg_rx_err(card) && net_ratelimit()) in spider_net_prepare_rx_descr()
434 dev_err(&card->netdev->dev, "Could not iommu-map rx buffer\n"); in spider_net_prepare_rx_descr()
435 card->spider_stats.rx_iommu_map_error++; in spider_net_prepare_rx_descr()
456 spider_net_enable_rxchtails(struct spider_net_card *card) in spider_net_enable_rxchtails() argument
459 spider_net_write_reg(card, SPIDER_NET_GDADCHA , in spider_net_enable_rxchtails()
460 card->rx_chain.tail->bus_addr); in spider_net_enable_rxchtails()
471 spider_net_enable_rxdmac(struct spider_net_card *card) in spider_net_enable_rxdmac() argument
474 spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR, in spider_net_enable_rxdmac()
486 spider_net_disable_rxdmac(struct spider_net_card *card) in spider_net_disable_rxdmac() argument
488 spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR, in spider_net_disable_rxdmac()
499 spider_net_refill_rx_chain(struct spider_net_card *card) in spider_net_refill_rx_chain() argument
501 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_refill_rx_chain()
513 if (spider_net_prepare_rx_descr(card, chain->head)) in spider_net_refill_rx_chain()
528 spider_net_alloc_rx_skbs(struct spider_net_card *card) in spider_net_alloc_rx_skbs() argument
530 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_alloc_rx_skbs()
543 if (spider_net_prepare_rx_descr(card, chain->head)) in spider_net_alloc_rx_skbs()
550 spider_net_refill_rx_chain(card); in spider_net_alloc_rx_skbs()
551 spider_net_enable_rxdmac(card); in spider_net_alloc_rx_skbs()
555 spider_net_free_rx_chain_contents(card); in spider_net_alloc_rx_skbs()
606 struct spider_net_card *card = netdev_priv(netdev); in spider_net_set_multi() local
609 spider_net_set_promisc(card); in spider_net_set_multi()
642 spider_net_write_reg(card, SPIDER_NET_GMRMHFILnR + i * 4, reg); in spider_net_set_multi()
657 spider_net_prepare_tx_descr(struct spider_net_card *card, in spider_net_prepare_tx_descr() argument
660 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_prepare_tx_descr()
666 buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
667 if (pci_dma_mapping_error(card->pdev, buf)) { in spider_net_prepare_tx_descr()
668 if (netif_msg_tx_err(card) && net_ratelimit()) in spider_net_prepare_tx_descr()
669 dev_err(&card->netdev->dev, "could not iommu-map packet (%p, %i). " in spider_net_prepare_tx_descr()
671 card->spider_stats.tx_iommu_map_error++; in spider_net_prepare_tx_descr()
676 descr = card->tx_chain.head; in spider_net_prepare_tx_descr()
679 pci_unmap_single(card->pdev, buf, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
709 card->netdev->trans_start = jiffies; /* set netdev watchdog timer */ in spider_net_prepare_tx_descr()
714 spider_net_set_low_watermark(struct spider_net_card *card) in spider_net_set_low_watermark() argument
716 struct spider_net_descr *descr = card->tx_chain.tail; in spider_net_set_low_watermark()
725 while (descr != card->tx_chain.head) { in spider_net_set_low_watermark()
734 if (cnt < card->tx_chain.num_desc/4) in spider_net_set_low_watermark()
738 descr = card->tx_chain.tail; in spider_net_set_low_watermark()
744 spin_lock_irqsave(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
746 if (card->low_watermark && card->low_watermark != descr) { in spider_net_set_low_watermark()
747 hwdescr = card->low_watermark->hwdescr; in spider_net_set_low_watermark()
751 card->low_watermark = descr; in spider_net_set_low_watermark()
752 spin_unlock_irqrestore(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
769 spider_net_release_tx_chain(struct spider_net_card *card, int brutal) in spider_net_release_tx_chain() argument
771 struct net_device *dev = card->netdev; in spider_net_release_tx_chain()
772 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_release_tx_chain()
809 if (netif_msg_tx_err(card)) in spider_net_release_tx_chain()
810 dev_err(&card->netdev->dev, "forcing end of tx descriptor " in spider_net_release_tx_chain()
832 pci_unmap_single(card->pdev, buf_addr, skb->len, in spider_net_release_tx_chain()
852 spider_net_kick_tx_dma(struct spider_net_card *card) in spider_net_kick_tx_dma() argument
856 if (spider_net_read_reg(card, SPIDER_NET_GDTDMACCNTR) & in spider_net_kick_tx_dma()
860 descr = card->tx_chain.tail; in spider_net_kick_tx_dma()
864 spider_net_write_reg(card, SPIDER_NET_GDTDCHA, in spider_net_kick_tx_dma()
866 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_kick_tx_dma()
870 if (descr == card->tx_chain.head) in spider_net_kick_tx_dma()
876 mod_timer(&card->tx_timer, jiffies + SPIDER_NET_TX_TIMER); in spider_net_kick_tx_dma()
890 struct spider_net_card *card = netdev_priv(netdev); in spider_net_xmit() local
892 spider_net_release_tx_chain(card, 0); in spider_net_xmit()
894 if (spider_net_prepare_tx_descr(card, skb) != 0) { in spider_net_xmit()
900 cnt = spider_net_set_low_watermark(card); in spider_net_xmit()
902 spider_net_kick_tx_dma(card); in spider_net_xmit()
916 spider_net_cleanup_tx_ring(struct spider_net_card *card) in spider_net_cleanup_tx_ring() argument
918 if ((spider_net_release_tx_chain(card, 0) != 0) && in spider_net_cleanup_tx_ring()
919 (card->netdev->flags & IFF_UP)) { in spider_net_cleanup_tx_ring()
920 spider_net_kick_tx_dma(card); in spider_net_cleanup_tx_ring()
921 netif_wake_queue(card->netdev); in spider_net_cleanup_tx_ring()
953 struct spider_net_card *card) in spider_net_pass_skb_up() argument
957 struct net_device *netdev = card->netdev; in spider_net_pass_skb_up()
990 static void show_rx_chain(struct spider_net_card *card) in show_rx_chain() argument
992 struct spider_net_descr_chain *chain = &card->rx_chain; in show_rx_chain()
996 struct device *dev = &card->netdev->dev; in show_rx_chain()
1010 curr_desc = spider_net_read_reg(card, SPIDER_NET_GDACTDPA); in show_rx_chain()
1011 next_desc = spider_net_read_reg(card, SPIDER_NET_GDACNEXTDA); in show_rx_chain()
1087 static void spider_net_resync_head_ptr(struct spider_net_card *card) in spider_net_resync_head_ptr() argument
1090 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_head_ptr()
1115 static int spider_net_resync_tail_ptr(struct spider_net_card *card) in spider_net_resync_tail_ptr() argument
1117 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_tail_ptr()
1150 spider_net_decode_one_descr(struct spider_net_card *card) in spider_net_decode_one_descr() argument
1152 struct net_device *dev = card->netdev; in spider_net_decode_one_descr()
1153 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_decode_one_descr()
1172 pci_unmap_single(card->pdev, hw_buf_addr, in spider_net_decode_one_descr()
1178 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1187 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1188 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1190 card->spider_stats.rx_desc_unk_state++; in spider_net_decode_one_descr()
1196 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1197 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1205 dev_err(&card->netdev->dev, "bad status, cmd_status=x%08x\n", in spider_net_decode_one_descr()
1214 pr_err("which=%ld\n", descr - card->rx_chain.ring); in spider_net_decode_one_descr()
1216 card->spider_stats.rx_desc_error++; in spider_net_decode_one_descr()
1221 spider_net_pass_skb_up(descr, card); in spider_net_decode_one_descr()
1227 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1228 show_rx_chain(card); in spider_net_decode_one_descr()
1249 struct spider_net_card *card = container_of(napi, struct spider_net_card, napi); in spider_net_poll() local
1253 if (!spider_net_decode_one_descr(card)) in spider_net_poll()
1259 if ((packets_done == 0) && (card->num_rx_ints != 0)) { in spider_net_poll()
1260 if (!spider_net_resync_tail_ptr(card)) in spider_net_poll()
1262 spider_net_resync_head_ptr(card); in spider_net_poll()
1264 card->num_rx_ints = 0; in spider_net_poll()
1266 spider_net_refill_rx_chain(card); in spider_net_poll()
1267 spider_net_enable_rxdmac(card); in spider_net_poll()
1269 spider_net_cleanup_tx_ring(card); in spider_net_poll()
1275 spider_net_rx_irq_on(card); in spider_net_poll()
1276 card->ignore_rx_ramfull = 0; in spider_net_poll()
1312 struct spider_net_card *card = netdev_priv(netdev); in spider_net_set_mac() local
1322 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1324 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1330 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu); in spider_net_set_mac()
1331 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl); in spider_net_set_mac()
1334 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1336 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1338 spider_net_set_promisc(card); in spider_net_set_mac()
1355 struct spider_net_card *card = netdev_priv(netdev); in spider_net_link_reset() local
1357 del_timer_sync(&card->aneg_timer); in spider_net_link_reset()
1360 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_reset()
1361 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_reset()
1362 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_link_reset()
1365 card->aneg_count = 0; in spider_net_link_reset()
1366 card->medium = BCM54XX_COPPER; in spider_net_link_reset()
1367 spider_net_setup_aneg(card); in spider_net_link_reset()
1368 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_reset()
1381 spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg, in spider_net_handle_error_irq() argument
1419 if (netif_msg_intr(card)) in spider_net_handle_error_irq()
1420 dev_err(&card->netdev->dev, "PHY write queue full\n"); in spider_net_handle_error_irq()
1491 if (card->ignore_rx_ramfull == 0) { in spider_net_handle_error_irq()
1492 card->ignore_rx_ramfull = 1; in spider_net_handle_error_irq()
1493 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1494 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1495 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1496 card->num_rx_ints ++; in spider_net_handle_error_irq()
1497 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1513 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1514 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1515 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1516 card->num_rx_ints ++; in spider_net_handle_error_irq()
1517 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1527 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1528 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1529 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1530 card->num_rx_ints ++; in spider_net_handle_error_irq()
1531 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1586 if ((show_error) && (netif_msg_intr(card)) && net_ratelimit()) in spider_net_handle_error_irq()
1587 dev_err(&card->netdev->dev, "Error interrupt, GHIINT0STS = 0x%08x, " in spider_net_handle_error_irq()
1592 spider_net_write_reg(card, SPIDER_NET_GHIINT1STS, error_reg1); in spider_net_handle_error_irq()
1593 spider_net_write_reg(card, SPIDER_NET_GHIINT2STS, error_reg2); in spider_net_handle_error_irq()
1611 struct spider_net_card *card = netdev_priv(netdev); in spider_net_interrupt() local
1614 status_reg = spider_net_read_reg(card, SPIDER_NET_GHIINT0STS); in spider_net_interrupt()
1615 error_reg1 = spider_net_read_reg(card, SPIDER_NET_GHIINT1STS); in spider_net_interrupt()
1616 error_reg2 = spider_net_read_reg(card, SPIDER_NET_GHIINT2STS); in spider_net_interrupt()
1624 spider_net_rx_irq_off(card); in spider_net_interrupt()
1625 napi_schedule(&card->napi); in spider_net_interrupt()
1626 card->num_rx_ints ++; in spider_net_interrupt()
1629 napi_schedule(&card->napi); in spider_net_interrupt()
1635 spider_net_handle_error_irq(card, status_reg, in spider_net_interrupt()
1639 spider_net_write_reg(card, SPIDER_NET_GHIINT0STS, status_reg); in spider_net_interrupt()
1667 spider_net_enable_interrupts(struct spider_net_card *card) in spider_net_enable_interrupts() argument
1669 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, in spider_net_enable_interrupts()
1671 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, in spider_net_enable_interrupts()
1673 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, in spider_net_enable_interrupts()
1684 spider_net_disable_interrupts(struct spider_net_card *card) in spider_net_disable_interrupts() argument
1686 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, 0); in spider_net_disable_interrupts()
1687 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, 0); in spider_net_disable_interrupts()
1688 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, 0); in spider_net_disable_interrupts()
1689 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_disable_interrupts()
1700 spider_net_init_card(struct spider_net_card *card) in spider_net_init_card() argument
1702 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1705 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1709 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_init_card()
1710 spider_net_read_reg(card, SPIDER_NET_GMACOPEMD) | 0x4); in spider_net_init_card()
1712 spider_net_disable_interrupts(card); in spider_net_init_card()
1722 spider_net_enable_card(struct spider_net_card *card) in spider_net_enable_card() argument
1770 spider_net_write_reg(card, regs[i][0], regs[i][1]); in spider_net_enable_card()
1776 spider_net_write_reg(card, in spider_net_enable_card()
1779 spider_net_write_reg(card, in spider_net_enable_card()
1784 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, 0x08080000); in spider_net_enable_card()
1786 spider_net_write_reg(card, SPIDER_NET_ECMODE, SPIDER_NET_ECMODE_VALUE); in spider_net_enable_card()
1790 spider_net_enable_rxchtails(card); in spider_net_enable_card()
1791 spider_net_enable_rxdmac(card); in spider_net_enable_card()
1793 spider_net_write_reg(card, SPIDER_NET_GRXDMAEN, SPIDER_NET_WOL_VALUE); in spider_net_enable_card()
1795 spider_net_write_reg(card, SPIDER_NET_GMACLENLMT, in spider_net_enable_card()
1797 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_enable_card()
1800 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_enable_card()
1813 spider_net_download_firmware(struct spider_net_card *card, in spider_net_download_firmware() argument
1820 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1825 spider_net_write_reg(card, in spider_net_download_firmware()
1828 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_download_firmware()
1834 if (spider_net_read_reg(card, SPIDER_NET_GSINIT)) in spider_net_download_firmware()
1837 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1870 spider_net_init_firmware(struct spider_net_card *card) in spider_net_init_firmware() argument
1879 SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) == 0) { in spider_net_init_firmware()
1881 netif_msg_probe(card) ) { in spider_net_init_firmware()
1882 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1887 err = spider_net_download_firmware(card, firmware->data); in spider_net_init_firmware()
1897 dn = pci_device_to_OF_node(card->pdev); in spider_net_init_firmware()
1906 netif_msg_probe(card) ) { in spider_net_init_firmware()
1907 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1912 err = spider_net_download_firmware(card, fw_prop); in spider_net_init_firmware()
1917 if (netif_msg_probe(card)) in spider_net_init_firmware()
1918 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1936 struct spider_net_card *card = netdev_priv(netdev); in spider_net_open() local
1939 result = spider_net_init_firmware(card); in spider_net_open()
1944 card->aneg_count = 0; in spider_net_open()
1945 card->medium = BCM54XX_COPPER; in spider_net_open()
1946 spider_net_setup_aneg(card); in spider_net_open()
1947 if (card->phy.def->phy_id) in spider_net_open()
1948 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_open()
1950 result = spider_net_init_chain(card, &card->tx_chain); in spider_net_open()
1953 card->low_watermark = NULL; in spider_net_open()
1955 result = spider_net_init_chain(card, &card->rx_chain); in spider_net_open()
1960 result = spider_net_alloc_rx_skbs(card); in spider_net_open()
1973 spider_net_enable_card(card); in spider_net_open()
1977 napi_enable(&card->napi); in spider_net_open()
1979 spider_net_enable_interrupts(card); in spider_net_open()
1984 spider_net_free_rx_chain_contents(card); in spider_net_open()
1986 spider_net_free_chain(card, &card->rx_chain); in spider_net_open()
1988 spider_net_free_chain(card, &card->tx_chain); in spider_net_open()
1990 del_timer_sync(&card->aneg_timer); in spider_net_open()
2002 struct spider_net_card *card = (struct spider_net_card *)data; in spider_net_link_phy() local
2003 struct mii_phy *phy = &card->phy; in spider_net_link_phy()
2006 if (card->aneg_count > SPIDER_NET_ANEG_TIMEOUT) { in spider_net_link_phy()
2009 card->netdev->name); in spider_net_link_phy()
2011 switch (card->medium) { in spider_net_link_phy()
2016 card->medium = BCM54XX_FIBER; in spider_net_link_phy()
2023 card->medium = BCM54XX_UNKNOWN; in spider_net_link_phy()
2029 spider_net_setup_aneg(card); in spider_net_link_phy()
2030 card->medium = BCM54XX_COPPER; in spider_net_link_phy()
2034 card->aneg_count = 0; in spider_net_link_phy()
2035 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2041 card->aneg_count++; in spider_net_link_phy()
2042 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2049 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_phy()
2050 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_phy()
2051 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0x4); in spider_net_link_phy()
2054 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0x00000001); in spider_net_link_phy()
2056 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0); in spider_net_link_phy()
2058 card->aneg_count = 0; in spider_net_link_phy()
2061 card->netdev->name, phy->speed, in spider_net_link_phy()
2075 spider_net_setup_phy(struct spider_net_card *card) in spider_net_setup_phy() argument
2077 struct mii_phy *phy = &card->phy; in spider_net_setup_phy()
2079 spider_net_write_reg(card, SPIDER_NET_GDTDMASEL, in spider_net_setup_phy()
2081 spider_net_write_reg(card, SPIDER_NET_GPCCTRL, in spider_net_setup_phy()
2084 phy->dev = card->netdev; in spider_net_setup_phy()
2090 id = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); in spider_net_setup_phy()
2109 spider_net_workaround_rxramfull(struct spider_net_card *card) in spider_net_workaround_rxramfull() argument
2114 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2120 spider_net_write_reg(card, SPIDER_NET_GSnPRGADR + in spider_net_workaround_rxramfull()
2123 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_workaround_rxramfull()
2129 spider_net_write_reg(card, SPIDER_NET_GSINIT, 0x000000fe); in spider_net_workaround_rxramfull()
2132 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2145 struct spider_net_card *card = netdev_priv(netdev); in spider_net_stop() local
2147 napi_disable(&card->napi); in spider_net_stop()
2150 del_timer_sync(&card->tx_timer); in spider_net_stop()
2151 del_timer_sync(&card->aneg_timer); in spider_net_stop()
2153 spider_net_disable_interrupts(card); in spider_net_stop()
2157 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_stop()
2161 spider_net_disable_rxdmac(card); in spider_net_stop()
2164 spider_net_release_tx_chain(card, 1); in spider_net_stop()
2165 spider_net_free_rx_chain_contents(card); in spider_net_stop()
2167 spider_net_free_chain(card, &card->tx_chain); in spider_net_stop()
2168 spider_net_free_chain(card, &card->rx_chain); in spider_net_stop()
2183 struct spider_net_card *card = in spider_net_tx_timeout_task() local
2185 struct net_device *netdev = card->netdev; in spider_net_tx_timeout_task()
2193 spider_net_workaround_rxramfull(card); in spider_net_tx_timeout_task()
2194 spider_net_init_card(card); in spider_net_tx_timeout_task()
2196 if (spider_net_setup_phy(card)) in spider_net_tx_timeout_task()
2200 spider_net_kick_tx_dma(card); in spider_net_tx_timeout_task()
2204 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout_task()
2216 struct spider_net_card *card; in spider_net_tx_timeout() local
2218 card = netdev_priv(netdev); in spider_net_tx_timeout()
2219 atomic_inc(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2221 schedule_work(&card->tx_timeout_task); in spider_net_tx_timeout()
2223 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2224 card->spider_stats.tx_timeouts++; in spider_net_tx_timeout()
2268 spider_net_setup_netdev(struct spider_net_card *card) in spider_net_setup_netdev() argument
2271 struct net_device *netdev = card->netdev; in spider_net_setup_netdev()
2276 SET_NETDEV_DEV(netdev, &card->pdev->dev); in spider_net_setup_netdev()
2278 pci_set_drvdata(card->pdev, netdev); in spider_net_setup_netdev()
2280 init_timer(&card->tx_timer); in spider_net_setup_netdev()
2281 card->tx_timer.function = in spider_net_setup_netdev()
2283 card->tx_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2284 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2286 card->aneg_count = 0; in spider_net_setup_netdev()
2287 init_timer(&card->aneg_timer); in spider_net_setup_netdev()
2288 card->aneg_timer.function = spider_net_link_phy; in spider_net_setup_netdev()
2289 card->aneg_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2291 netif_napi_add(netdev, &card->napi, in spider_net_setup_netdev()
2303 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2304 card->num_rx_ints = 0; in spider_net_setup_netdev()
2305 card->ignore_rx_ramfull = 0; in spider_net_setup_netdev()
2307 dn = pci_device_to_OF_node(card->pdev); in spider_net_setup_netdev()
2317 if ((result) && (netif_msg_probe(card))) in spider_net_setup_netdev()
2318 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2323 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2324 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2329 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2346 struct spider_net_card *card; in spider_net_alloc_card() local
2355 card = netdev_priv(netdev); in spider_net_alloc_card()
2356 card->netdev = netdev; in spider_net_alloc_card()
2357 card->msg_enable = SPIDER_NET_DEFAULT_MSG; in spider_net_alloc_card()
2358 INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task); in spider_net_alloc_card()
2359 init_waitqueue_head(&card->waitq); in spider_net_alloc_card()
2360 atomic_set(&card->tx_timeout_task_counter, 0); in spider_net_alloc_card()
2362 card->rx_chain.num_desc = rx_descriptors; in spider_net_alloc_card()
2363 card->rx_chain.ring = card->darray; in spider_net_alloc_card()
2364 card->tx_chain.num_desc = tx_descriptors; in spider_net_alloc_card()
2365 card->tx_chain.ring = card->darray + rx_descriptors; in spider_net_alloc_card()
2367 return card; in spider_net_alloc_card()
2377 spider_net_undo_pci_setup(struct spider_net_card *card) in spider_net_undo_pci_setup() argument
2379 iounmap(card->regs); in spider_net_undo_pci_setup()
2380 pci_release_regions(card->pdev); in spider_net_undo_pci_setup()
2398 struct spider_net_card *card; in spider_net_setup_pci_dev() local
2420 card = spider_net_alloc_card(); in spider_net_setup_pci_dev()
2421 if (!card) { in spider_net_setup_pci_dev()
2426 card->pdev = pdev; in spider_net_setup_pci_dev()
2432 card->netdev->mem_start = mmio_start; in spider_net_setup_pci_dev()
2433 card->netdev->mem_end = mmio_start + mmio_len; in spider_net_setup_pci_dev()
2434 card->regs = ioremap(mmio_start, mmio_len); in spider_net_setup_pci_dev()
2436 if (!card->regs) { in spider_net_setup_pci_dev()
2442 return card; in spider_net_setup_pci_dev()
2465 struct spider_net_card *card; in spider_net_probe() local
2467 card = spider_net_setup_pci_dev(pdev); in spider_net_probe()
2468 if (!card) in spider_net_probe()
2471 spider_net_workaround_rxramfull(card); in spider_net_probe()
2472 spider_net_init_card(card); in spider_net_probe()
2474 err = spider_net_setup_phy(card); in spider_net_probe()
2478 err = spider_net_setup_netdev(card); in spider_net_probe()
2485 spider_net_undo_pci_setup(card); in spider_net_probe()
2486 free_netdev(card->netdev); in spider_net_probe()
2504 struct spider_net_card *card; in spider_net_remove() local
2507 card = netdev_priv(netdev); in spider_net_remove()
2509 wait_event(card->waitq, in spider_net_remove()
2510 atomic_read(&card->tx_timeout_task_counter) == 0); in spider_net_remove()
2515 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2517 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2520 spider_net_undo_pci_setup(card); in spider_net_remove()