• Home
  • Raw
  • Download

Lines Matching refs:card

91 spider_net_read_reg(struct spider_net_card *card, u32 reg)  in spider_net_read_reg()  argument
97 return in_be32(card->regs + reg); in spider_net_read_reg()
107 spider_net_write_reg(struct spider_net_card *card, u32 reg, u32 value) in spider_net_write_reg() argument
113 out_be32(card->regs + reg, value); in spider_net_write_reg()
131 struct spider_net_card *card = netdev_priv(netdev); in spider_net_write_phy() local
137 spider_net_write_reg(card, SPIDER_NET_GPCWOPCMD, writevalue); in spider_net_write_phy()
154 struct spider_net_card *card = netdev_priv(netdev); in spider_net_read_phy() local
158 spider_net_write_reg(card, SPIDER_NET_GPCROPCMD, readvalue); in spider_net_read_phy()
164 readvalue = spider_net_read_reg(card, SPIDER_NET_GPCROPCMD); in spider_net_read_phy()
177 spider_net_setup_aneg(struct spider_net_card *card) in spider_net_setup_aneg() argument
179 struct mii_phy *phy = &card->phy; in spider_net_setup_aneg()
183 bmsr = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); in spider_net_setup_aneg()
184 estat = spider_net_read_phy(card->netdev, phy->mii_id, MII_ESTATUS); in spider_net_setup_aneg()
212 spider_net_rx_irq_off(struct spider_net_card *card) in spider_net_rx_irq_off() argument
217 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue); in spider_net_rx_irq_off()
227 spider_net_rx_irq_on(struct spider_net_card *card) in spider_net_rx_irq_on() argument
232 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue); in spider_net_rx_irq_on()
243 spider_net_set_promisc(struct spider_net_card *card) in spider_net_set_promisc() argument
246 struct net_device *netdev = card->netdev; in spider_net_set_promisc()
250 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, 0); in spider_net_set_promisc()
251 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, 0); in spider_net_set_promisc()
252 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, in spider_net_set_promisc()
261 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, macu); in spider_net_set_promisc()
262 spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, macl); in spider_net_set_promisc()
263 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, in spider_net_set_promisc()
287 spider_net_free_chain(struct spider_net_card *card, in spider_net_free_chain() argument
299 dma_free_coherent(&card->pdev->dev, chain->num_desc, in spider_net_free_chain()
314 spider_net_init_chain(struct spider_net_card *card, in spider_net_init_chain() argument
325 chain->hwring = dma_alloc_coherent(&card->pdev->dev, alloc_size, in spider_net_init_chain()
364 spider_net_free_rx_chain_contents(struct spider_net_card *card) in spider_net_free_rx_chain_contents() argument
368 descr = card->rx_chain.head; in spider_net_free_rx_chain_contents()
371 pci_unmap_single(card->pdev, descr->hwdescr->buf_addr, in spider_net_free_rx_chain_contents()
378 } while (descr != card->rx_chain.head); in spider_net_free_rx_chain_contents()
392 spider_net_prepare_rx_descr(struct spider_net_card *card, in spider_net_prepare_rx_descr() argument
407 descr->skb = netdev_alloc_skb(card->netdev, in spider_net_prepare_rx_descr()
410 if (netif_msg_rx_err(card) && net_ratelimit()) in spider_net_prepare_rx_descr()
411 dev_err(&card->netdev->dev, in spider_net_prepare_rx_descr()
413 card->spider_stats.alloc_rx_skb_error++; in spider_net_prepare_rx_descr()
427 buf = pci_map_single(card->pdev, descr->skb->data, in spider_net_prepare_rx_descr()
429 if (pci_dma_mapping_error(card->pdev, buf)) { in spider_net_prepare_rx_descr()
432 if (netif_msg_rx_err(card) && net_ratelimit()) in spider_net_prepare_rx_descr()
433 dev_err(&card->netdev->dev, "Could not iommu-map rx buffer\n"); in spider_net_prepare_rx_descr()
434 card->spider_stats.rx_iommu_map_error++; in spider_net_prepare_rx_descr()
455 spider_net_enable_rxchtails(struct spider_net_card *card) in spider_net_enable_rxchtails() argument
458 spider_net_write_reg(card, SPIDER_NET_GDADCHA , in spider_net_enable_rxchtails()
459 card->rx_chain.tail->bus_addr); in spider_net_enable_rxchtails()
470 spider_net_enable_rxdmac(struct spider_net_card *card) in spider_net_enable_rxdmac() argument
473 spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR, in spider_net_enable_rxdmac()
485 spider_net_disable_rxdmac(struct spider_net_card *card) in spider_net_disable_rxdmac() argument
487 spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR, in spider_net_disable_rxdmac()
498 spider_net_refill_rx_chain(struct spider_net_card *card) in spider_net_refill_rx_chain() argument
500 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_refill_rx_chain()
512 if (spider_net_prepare_rx_descr(card, chain->head)) in spider_net_refill_rx_chain()
527 spider_net_alloc_rx_skbs(struct spider_net_card *card) in spider_net_alloc_rx_skbs() argument
529 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_alloc_rx_skbs()
542 if (spider_net_prepare_rx_descr(card, chain->head)) in spider_net_alloc_rx_skbs()
549 spider_net_refill_rx_chain(card); in spider_net_alloc_rx_skbs()
550 spider_net_enable_rxdmac(card); in spider_net_alloc_rx_skbs()
554 spider_net_free_rx_chain_contents(card); in spider_net_alloc_rx_skbs()
605 struct spider_net_card *card = netdev_priv(netdev); in spider_net_set_multi() local
608 spider_net_set_promisc(card); in spider_net_set_multi()
641 spider_net_write_reg(card, SPIDER_NET_GMRMHFILnR + i * 4, reg); in spider_net_set_multi()
656 spider_net_prepare_tx_descr(struct spider_net_card *card, in spider_net_prepare_tx_descr() argument
659 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_prepare_tx_descr()
665 buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
666 if (pci_dma_mapping_error(card->pdev, buf)) { in spider_net_prepare_tx_descr()
667 if (netif_msg_tx_err(card) && net_ratelimit()) in spider_net_prepare_tx_descr()
668 dev_err(&card->netdev->dev, "could not iommu-map packet (%p, %i). " in spider_net_prepare_tx_descr()
670 card->spider_stats.tx_iommu_map_error++; in spider_net_prepare_tx_descr()
675 descr = card->tx_chain.head; in spider_net_prepare_tx_descr()
678 pci_unmap_single(card->pdev, buf, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
708 netif_trans_update(card->netdev); /* set netdev watchdog timer */ in spider_net_prepare_tx_descr()
713 spider_net_set_low_watermark(struct spider_net_card *card) in spider_net_set_low_watermark() argument
715 struct spider_net_descr *descr = card->tx_chain.tail; in spider_net_set_low_watermark()
724 while (descr != card->tx_chain.head) { in spider_net_set_low_watermark()
733 if (cnt < card->tx_chain.num_desc/4) in spider_net_set_low_watermark()
737 descr = card->tx_chain.tail; in spider_net_set_low_watermark()
743 spin_lock_irqsave(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
745 if (card->low_watermark && card->low_watermark != descr) { in spider_net_set_low_watermark()
746 hwdescr = card->low_watermark->hwdescr; in spider_net_set_low_watermark()
750 card->low_watermark = descr; in spider_net_set_low_watermark()
751 spin_unlock_irqrestore(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
768 spider_net_release_tx_chain(struct spider_net_card *card, int brutal) in spider_net_release_tx_chain() argument
770 struct net_device *dev = card->netdev; in spider_net_release_tx_chain()
771 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_release_tx_chain()
808 if (netif_msg_tx_err(card)) in spider_net_release_tx_chain()
809 dev_err(&card->netdev->dev, "forcing end of tx descriptor " in spider_net_release_tx_chain()
831 pci_unmap_single(card->pdev, buf_addr, skb->len, in spider_net_release_tx_chain()
851 spider_net_kick_tx_dma(struct spider_net_card *card) in spider_net_kick_tx_dma() argument
855 if (spider_net_read_reg(card, SPIDER_NET_GDTDMACCNTR) & in spider_net_kick_tx_dma()
859 descr = card->tx_chain.tail; in spider_net_kick_tx_dma()
863 spider_net_write_reg(card, SPIDER_NET_GDTDCHA, in spider_net_kick_tx_dma()
865 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_kick_tx_dma()
869 if (descr == card->tx_chain.head) in spider_net_kick_tx_dma()
875 mod_timer(&card->tx_timer, jiffies + SPIDER_NET_TX_TIMER); in spider_net_kick_tx_dma()
889 struct spider_net_card *card = netdev_priv(netdev); in spider_net_xmit() local
891 spider_net_release_tx_chain(card, 0); in spider_net_xmit()
893 if (spider_net_prepare_tx_descr(card, skb) != 0) { in spider_net_xmit()
899 cnt = spider_net_set_low_watermark(card); in spider_net_xmit()
901 spider_net_kick_tx_dma(card); in spider_net_xmit()
915 spider_net_cleanup_tx_ring(struct spider_net_card *card) in spider_net_cleanup_tx_ring() argument
917 if ((spider_net_release_tx_chain(card, 0) != 0) && in spider_net_cleanup_tx_ring()
918 (card->netdev->flags & IFF_UP)) { in spider_net_cleanup_tx_ring()
919 spider_net_kick_tx_dma(card); in spider_net_cleanup_tx_ring()
920 netif_wake_queue(card->netdev); in spider_net_cleanup_tx_ring()
952 struct spider_net_card *card) in spider_net_pass_skb_up() argument
956 struct net_device *netdev = card->netdev; in spider_net_pass_skb_up()
989 static void show_rx_chain(struct spider_net_card *card) in show_rx_chain() argument
991 struct spider_net_descr_chain *chain = &card->rx_chain; in show_rx_chain()
995 struct device *dev = &card->netdev->dev; in show_rx_chain()
1009 curr_desc = spider_net_read_reg(card, SPIDER_NET_GDACTDPA); in show_rx_chain()
1010 next_desc = spider_net_read_reg(card, SPIDER_NET_GDACNEXTDA); in show_rx_chain()
1086 static void spider_net_resync_head_ptr(struct spider_net_card *card) in spider_net_resync_head_ptr() argument
1089 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_head_ptr()
1114 static int spider_net_resync_tail_ptr(struct spider_net_card *card) in spider_net_resync_tail_ptr() argument
1116 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_tail_ptr()
1149 spider_net_decode_one_descr(struct spider_net_card *card) in spider_net_decode_one_descr() argument
1151 struct net_device *dev = card->netdev; in spider_net_decode_one_descr()
1152 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_decode_one_descr()
1171 pci_unmap_single(card->pdev, hw_buf_addr, in spider_net_decode_one_descr()
1177 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1186 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1187 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1189 card->spider_stats.rx_desc_unk_state++; in spider_net_decode_one_descr()
1195 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1196 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1204 dev_err(&card->netdev->dev, "bad status, cmd_status=x%08x\n", in spider_net_decode_one_descr()
1213 pr_err("which=%ld\n", descr - card->rx_chain.ring); in spider_net_decode_one_descr()
1215 card->spider_stats.rx_desc_error++; in spider_net_decode_one_descr()
1220 spider_net_pass_skb_up(descr, card); in spider_net_decode_one_descr()
1226 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1227 show_rx_chain(card); in spider_net_decode_one_descr()
1248 struct spider_net_card *card = container_of(napi, struct spider_net_card, napi); in spider_net_poll() local
1252 if (!spider_net_decode_one_descr(card)) in spider_net_poll()
1258 if ((packets_done == 0) && (card->num_rx_ints != 0)) { in spider_net_poll()
1259 if (!spider_net_resync_tail_ptr(card)) in spider_net_poll()
1261 spider_net_resync_head_ptr(card); in spider_net_poll()
1263 card->num_rx_ints = 0; in spider_net_poll()
1265 spider_net_refill_rx_chain(card); in spider_net_poll()
1266 spider_net_enable_rxdmac(card); in spider_net_poll()
1268 spider_net_cleanup_tx_ring(card); in spider_net_poll()
1274 spider_net_rx_irq_on(card); in spider_net_poll()
1275 card->ignore_rx_ramfull = 0; in spider_net_poll()
1311 struct spider_net_card *card = netdev_priv(netdev); in spider_net_set_mac() local
1321 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1323 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1329 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu); in spider_net_set_mac()
1330 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl); in spider_net_set_mac()
1333 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1335 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1337 spider_net_set_promisc(card); in spider_net_set_mac()
1354 struct spider_net_card *card = netdev_priv(netdev); in spider_net_link_reset() local
1356 del_timer_sync(&card->aneg_timer); in spider_net_link_reset()
1359 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_reset()
1360 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_reset()
1361 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_link_reset()
1364 card->aneg_count = 0; in spider_net_link_reset()
1365 card->medium = BCM54XX_COPPER; in spider_net_link_reset()
1366 spider_net_setup_aneg(card); in spider_net_link_reset()
1367 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_reset()
1380 spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg, in spider_net_handle_error_irq() argument
1418 if (netif_msg_intr(card)) in spider_net_handle_error_irq()
1419 dev_err(&card->netdev->dev, "PHY write queue full\n"); in spider_net_handle_error_irq()
1490 if (card->ignore_rx_ramfull == 0) { in spider_net_handle_error_irq()
1491 card->ignore_rx_ramfull = 1; in spider_net_handle_error_irq()
1492 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1493 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1494 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1495 card->num_rx_ints ++; in spider_net_handle_error_irq()
1496 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1512 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1513 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1514 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1515 card->num_rx_ints ++; in spider_net_handle_error_irq()
1516 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1526 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1527 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1528 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1529 card->num_rx_ints ++; in spider_net_handle_error_irq()
1530 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1585 if ((show_error) && (netif_msg_intr(card)) && net_ratelimit()) in spider_net_handle_error_irq()
1586 dev_err(&card->netdev->dev, "Error interrupt, GHIINT0STS = 0x%08x, " in spider_net_handle_error_irq()
1591 spider_net_write_reg(card, SPIDER_NET_GHIINT1STS, error_reg1); in spider_net_handle_error_irq()
1592 spider_net_write_reg(card, SPIDER_NET_GHIINT2STS, error_reg2); in spider_net_handle_error_irq()
1610 struct spider_net_card *card = netdev_priv(netdev); in spider_net_interrupt() local
1613 status_reg = spider_net_read_reg(card, SPIDER_NET_GHIINT0STS); in spider_net_interrupt()
1614 error_reg1 = spider_net_read_reg(card, SPIDER_NET_GHIINT1STS); in spider_net_interrupt()
1615 error_reg2 = spider_net_read_reg(card, SPIDER_NET_GHIINT2STS); in spider_net_interrupt()
1623 spider_net_rx_irq_off(card); in spider_net_interrupt()
1624 napi_schedule(&card->napi); in spider_net_interrupt()
1625 card->num_rx_ints ++; in spider_net_interrupt()
1628 napi_schedule(&card->napi); in spider_net_interrupt()
1634 spider_net_handle_error_irq(card, status_reg, in spider_net_interrupt()
1638 spider_net_write_reg(card, SPIDER_NET_GHIINT0STS, status_reg); in spider_net_interrupt()
1666 spider_net_enable_interrupts(struct spider_net_card *card) in spider_net_enable_interrupts() argument
1668 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, in spider_net_enable_interrupts()
1670 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, in spider_net_enable_interrupts()
1672 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, in spider_net_enable_interrupts()
1683 spider_net_disable_interrupts(struct spider_net_card *card) in spider_net_disable_interrupts() argument
1685 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, 0); in spider_net_disable_interrupts()
1686 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, 0); in spider_net_disable_interrupts()
1687 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, 0); in spider_net_disable_interrupts()
1688 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_disable_interrupts()
1699 spider_net_init_card(struct spider_net_card *card) in spider_net_init_card() argument
1701 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1704 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1708 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_init_card()
1709 spider_net_read_reg(card, SPIDER_NET_GMACOPEMD) | 0x4); in spider_net_init_card()
1711 spider_net_disable_interrupts(card); in spider_net_init_card()
1721 spider_net_enable_card(struct spider_net_card *card) in spider_net_enable_card() argument
1769 spider_net_write_reg(card, regs[i][0], regs[i][1]); in spider_net_enable_card()
1775 spider_net_write_reg(card, in spider_net_enable_card()
1778 spider_net_write_reg(card, in spider_net_enable_card()
1783 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, 0x08080000); in spider_net_enable_card()
1785 spider_net_write_reg(card, SPIDER_NET_ECMODE, SPIDER_NET_ECMODE_VALUE); in spider_net_enable_card()
1789 spider_net_enable_rxchtails(card); in spider_net_enable_card()
1790 spider_net_enable_rxdmac(card); in spider_net_enable_card()
1792 spider_net_write_reg(card, SPIDER_NET_GRXDMAEN, SPIDER_NET_WOL_VALUE); in spider_net_enable_card()
1794 spider_net_write_reg(card, SPIDER_NET_GMACLENLMT, in spider_net_enable_card()
1796 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_enable_card()
1799 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_enable_card()
1812 spider_net_download_firmware(struct spider_net_card *card, in spider_net_download_firmware() argument
1819 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1824 spider_net_write_reg(card, in spider_net_download_firmware()
1827 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_download_firmware()
1833 if (spider_net_read_reg(card, SPIDER_NET_GSINIT)) in spider_net_download_firmware()
1836 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1869 spider_net_init_firmware(struct spider_net_card *card) in spider_net_init_firmware() argument
1878 SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) == 0) { in spider_net_init_firmware()
1880 netif_msg_probe(card) ) { in spider_net_init_firmware()
1881 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1886 err = spider_net_download_firmware(card, firmware->data); in spider_net_init_firmware()
1896 dn = pci_device_to_OF_node(card->pdev); in spider_net_init_firmware()
1905 netif_msg_probe(card) ) { in spider_net_init_firmware()
1906 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1911 err = spider_net_download_firmware(card, fw_prop); in spider_net_init_firmware()
1916 if (netif_msg_probe(card)) in spider_net_init_firmware()
1917 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1935 struct spider_net_card *card = netdev_priv(netdev); in spider_net_open() local
1938 result = spider_net_init_firmware(card); in spider_net_open()
1943 card->aneg_count = 0; in spider_net_open()
1944 card->medium = BCM54XX_COPPER; in spider_net_open()
1945 spider_net_setup_aneg(card); in spider_net_open()
1946 if (card->phy.def->phy_id) in spider_net_open()
1947 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_open()
1949 result = spider_net_init_chain(card, &card->tx_chain); in spider_net_open()
1952 card->low_watermark = NULL; in spider_net_open()
1954 result = spider_net_init_chain(card, &card->rx_chain); in spider_net_open()
1959 result = spider_net_alloc_rx_skbs(card); in spider_net_open()
1972 spider_net_enable_card(card); in spider_net_open()
1976 napi_enable(&card->napi); in spider_net_open()
1978 spider_net_enable_interrupts(card); in spider_net_open()
1983 spider_net_free_rx_chain_contents(card); in spider_net_open()
1985 spider_net_free_chain(card, &card->rx_chain); in spider_net_open()
1987 spider_net_free_chain(card, &card->tx_chain); in spider_net_open()
1989 del_timer_sync(&card->aneg_timer); in spider_net_open()
2001 struct spider_net_card *card = (struct spider_net_card *)data; in spider_net_link_phy() local
2002 struct mii_phy *phy = &card->phy; in spider_net_link_phy()
2005 if (card->aneg_count > SPIDER_NET_ANEG_TIMEOUT) { in spider_net_link_phy()
2008 card->netdev->name); in spider_net_link_phy()
2010 switch (card->medium) { in spider_net_link_phy()
2015 card->medium = BCM54XX_FIBER; in spider_net_link_phy()
2022 card->medium = BCM54XX_UNKNOWN; in spider_net_link_phy()
2028 spider_net_setup_aneg(card); in spider_net_link_phy()
2029 card->medium = BCM54XX_COPPER; in spider_net_link_phy()
2033 card->aneg_count = 0; in spider_net_link_phy()
2034 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2040 card->aneg_count++; in spider_net_link_phy()
2041 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2048 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_phy()
2049 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_phy()
2050 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0x4); in spider_net_link_phy()
2053 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0x00000001); in spider_net_link_phy()
2055 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0); in spider_net_link_phy()
2057 card->aneg_count = 0; in spider_net_link_phy()
2060 card->netdev->name, phy->speed, in spider_net_link_phy()
2074 spider_net_setup_phy(struct spider_net_card *card) in spider_net_setup_phy() argument
2076 struct mii_phy *phy = &card->phy; in spider_net_setup_phy()
2078 spider_net_write_reg(card, SPIDER_NET_GDTDMASEL, in spider_net_setup_phy()
2080 spider_net_write_reg(card, SPIDER_NET_GPCCTRL, in spider_net_setup_phy()
2083 phy->dev = card->netdev; in spider_net_setup_phy()
2089 id = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); in spider_net_setup_phy()
2108 spider_net_workaround_rxramfull(struct spider_net_card *card) in spider_net_workaround_rxramfull() argument
2113 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2119 spider_net_write_reg(card, SPIDER_NET_GSnPRGADR + in spider_net_workaround_rxramfull()
2122 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_workaround_rxramfull()
2128 spider_net_write_reg(card, SPIDER_NET_GSINIT, 0x000000fe); in spider_net_workaround_rxramfull()
2131 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2144 struct spider_net_card *card = netdev_priv(netdev); in spider_net_stop() local
2146 napi_disable(&card->napi); in spider_net_stop()
2149 del_timer_sync(&card->tx_timer); in spider_net_stop()
2150 del_timer_sync(&card->aneg_timer); in spider_net_stop()
2152 spider_net_disable_interrupts(card); in spider_net_stop()
2156 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_stop()
2160 spider_net_disable_rxdmac(card); in spider_net_stop()
2163 spider_net_release_tx_chain(card, 1); in spider_net_stop()
2164 spider_net_free_rx_chain_contents(card); in spider_net_stop()
2166 spider_net_free_chain(card, &card->tx_chain); in spider_net_stop()
2167 spider_net_free_chain(card, &card->rx_chain); in spider_net_stop()
2182 struct spider_net_card *card = in spider_net_tx_timeout_task() local
2184 struct net_device *netdev = card->netdev; in spider_net_tx_timeout_task()
2192 spider_net_workaround_rxramfull(card); in spider_net_tx_timeout_task()
2193 spider_net_init_card(card); in spider_net_tx_timeout_task()
2195 if (spider_net_setup_phy(card)) in spider_net_tx_timeout_task()
2199 spider_net_kick_tx_dma(card); in spider_net_tx_timeout_task()
2203 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout_task()
2215 struct spider_net_card *card; in spider_net_tx_timeout() local
2217 card = netdev_priv(netdev); in spider_net_tx_timeout()
2218 atomic_inc(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2220 schedule_work(&card->tx_timeout_task); in spider_net_tx_timeout()
2222 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2223 card->spider_stats.tx_timeouts++; in spider_net_tx_timeout()
2267 spider_net_setup_netdev(struct spider_net_card *card) in spider_net_setup_netdev() argument
2270 struct net_device *netdev = card->netdev; in spider_net_setup_netdev()
2275 SET_NETDEV_DEV(netdev, &card->pdev->dev); in spider_net_setup_netdev()
2277 pci_set_drvdata(card->pdev, netdev); in spider_net_setup_netdev()
2279 init_timer(&card->tx_timer); in spider_net_setup_netdev()
2280 card->tx_timer.function = in spider_net_setup_netdev()
2282 card->tx_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2283 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2285 card->aneg_count = 0; in spider_net_setup_netdev()
2286 init_timer(&card->aneg_timer); in spider_net_setup_netdev()
2287 card->aneg_timer.function = spider_net_link_phy; in spider_net_setup_netdev()
2288 card->aneg_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2290 netif_napi_add(netdev, &card->napi, in spider_net_setup_netdev()
2302 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2303 card->num_rx_ints = 0; in spider_net_setup_netdev()
2304 card->ignore_rx_ramfull = 0; in spider_net_setup_netdev()
2306 dn = pci_device_to_OF_node(card->pdev); in spider_net_setup_netdev()
2316 if ((result) && (netif_msg_probe(card))) in spider_net_setup_netdev()
2317 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2322 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2323 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2328 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2345 struct spider_net_card *card; in spider_net_alloc_card() local
2354 card = netdev_priv(netdev); in spider_net_alloc_card()
2355 card->netdev = netdev; in spider_net_alloc_card()
2356 card->msg_enable = SPIDER_NET_DEFAULT_MSG; in spider_net_alloc_card()
2357 INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task); in spider_net_alloc_card()
2358 init_waitqueue_head(&card->waitq); in spider_net_alloc_card()
2359 atomic_set(&card->tx_timeout_task_counter, 0); in spider_net_alloc_card()
2361 card->rx_chain.num_desc = rx_descriptors; in spider_net_alloc_card()
2362 card->rx_chain.ring = card->darray; in spider_net_alloc_card()
2363 card->tx_chain.num_desc = tx_descriptors; in spider_net_alloc_card()
2364 card->tx_chain.ring = card->darray + rx_descriptors; in spider_net_alloc_card()
2366 return card; in spider_net_alloc_card()
2376 spider_net_undo_pci_setup(struct spider_net_card *card) in spider_net_undo_pci_setup() argument
2378 iounmap(card->regs); in spider_net_undo_pci_setup()
2379 pci_release_regions(card->pdev); in spider_net_undo_pci_setup()
2397 struct spider_net_card *card; in spider_net_setup_pci_dev() local
2419 card = spider_net_alloc_card(); in spider_net_setup_pci_dev()
2420 if (!card) { in spider_net_setup_pci_dev()
2425 card->pdev = pdev; in spider_net_setup_pci_dev()
2431 card->netdev->mem_start = mmio_start; in spider_net_setup_pci_dev()
2432 card->netdev->mem_end = mmio_start + mmio_len; in spider_net_setup_pci_dev()
2433 card->regs = ioremap(mmio_start, mmio_len); in spider_net_setup_pci_dev()
2435 if (!card->regs) { in spider_net_setup_pci_dev()
2441 return card; in spider_net_setup_pci_dev()
2464 struct spider_net_card *card; in spider_net_probe() local
2466 card = spider_net_setup_pci_dev(pdev); in spider_net_probe()
2467 if (!card) in spider_net_probe()
2470 spider_net_workaround_rxramfull(card); in spider_net_probe()
2471 spider_net_init_card(card); in spider_net_probe()
2473 err = spider_net_setup_phy(card); in spider_net_probe()
2477 err = spider_net_setup_netdev(card); in spider_net_probe()
2484 spider_net_undo_pci_setup(card); in spider_net_probe()
2485 free_netdev(card->netdev); in spider_net_probe()
2503 struct spider_net_card *card; in spider_net_remove() local
2506 card = netdev_priv(netdev); in spider_net_remove()
2508 wait_event(card->waitq, in spider_net_remove()
2509 atomic_read(&card->tx_timeout_task_counter) == 0); in spider_net_remove()
2514 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2516 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2519 spider_net_undo_pci_setup(card); in spider_net_remove()