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
610 spider_net_set_promisc(card); in spider_net_set_multi()
643 spider_net_write_reg(card, SPIDER_NET_GMRMHFILnR + i * 4, reg); in spider_net_set_multi()
658 spider_net_prepare_tx_descr(struct spider_net_card *card, in spider_net_prepare_tx_descr() argument
661 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_prepare_tx_descr()
667 buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
668 if (pci_dma_mapping_error(card->pdev, buf)) { in spider_net_prepare_tx_descr()
669 if (netif_msg_tx_err(card) && net_ratelimit()) in spider_net_prepare_tx_descr()
670 dev_err(&card->netdev->dev, "could not iommu-map packet (%p, %i). " in spider_net_prepare_tx_descr()
672 card->spider_stats.tx_iommu_map_error++; in spider_net_prepare_tx_descr()
677 descr = card->tx_chain.head; in spider_net_prepare_tx_descr()
680 pci_unmap_single(card->pdev, buf, skb->len, PCI_DMA_TODEVICE); in spider_net_prepare_tx_descr()
710 card->netdev->trans_start = jiffies; /* set netdev watchdog timer */ in spider_net_prepare_tx_descr()
715 spider_net_set_low_watermark(struct spider_net_card *card) in spider_net_set_low_watermark() argument
717 struct spider_net_descr *descr = card->tx_chain.tail; in spider_net_set_low_watermark()
726 while (descr != card->tx_chain.head) { in spider_net_set_low_watermark()
735 if (cnt < card->tx_chain.num_desc/4) in spider_net_set_low_watermark()
739 descr = card->tx_chain.tail; in spider_net_set_low_watermark()
745 spin_lock_irqsave(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
747 if (card->low_watermark && card->low_watermark != descr) { in spider_net_set_low_watermark()
748 hwdescr = card->low_watermark->hwdescr; in spider_net_set_low_watermark()
752 card->low_watermark = descr; in spider_net_set_low_watermark()
753 spin_unlock_irqrestore(&card->tx_chain.lock, flags); in spider_net_set_low_watermark()
770 spider_net_release_tx_chain(struct spider_net_card *card, int brutal) in spider_net_release_tx_chain() argument
772 struct net_device *dev = card->netdev; in spider_net_release_tx_chain()
773 struct spider_net_descr_chain *chain = &card->tx_chain; in spider_net_release_tx_chain()
810 if (netif_msg_tx_err(card)) in spider_net_release_tx_chain()
811 dev_err(&card->netdev->dev, "forcing end of tx descriptor " in spider_net_release_tx_chain()
833 pci_unmap_single(card->pdev, buf_addr, skb->len, in spider_net_release_tx_chain()
853 spider_net_kick_tx_dma(struct spider_net_card *card) in spider_net_kick_tx_dma() argument
857 if (spider_net_read_reg(card, SPIDER_NET_GDTDMACCNTR) & in spider_net_kick_tx_dma()
861 descr = card->tx_chain.tail; in spider_net_kick_tx_dma()
865 spider_net_write_reg(card, SPIDER_NET_GDTDCHA, in spider_net_kick_tx_dma()
867 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_kick_tx_dma()
871 if (descr == card->tx_chain.head) in spider_net_kick_tx_dma()
877 mod_timer(&card->tx_timer, jiffies + SPIDER_NET_TX_TIMER); in spider_net_kick_tx_dma()
891 struct spider_net_card *card = netdev_priv(netdev); in spider_net_xmit() local
893 spider_net_release_tx_chain(card, 0); in spider_net_xmit()
895 if (spider_net_prepare_tx_descr(card, skb) != 0) { in spider_net_xmit()
901 cnt = spider_net_set_low_watermark(card); in spider_net_xmit()
903 spider_net_kick_tx_dma(card); in spider_net_xmit()
917 spider_net_cleanup_tx_ring(struct spider_net_card *card) in spider_net_cleanup_tx_ring() argument
919 if ((spider_net_release_tx_chain(card, 0) != 0) && in spider_net_cleanup_tx_ring()
920 (card->netdev->flags & IFF_UP)) { in spider_net_cleanup_tx_ring()
921 spider_net_kick_tx_dma(card); in spider_net_cleanup_tx_ring()
922 netif_wake_queue(card->netdev); in spider_net_cleanup_tx_ring()
954 struct spider_net_card *card) in spider_net_pass_skb_up() argument
958 struct net_device *netdev = card->netdev; in spider_net_pass_skb_up()
991 static void show_rx_chain(struct spider_net_card *card) in show_rx_chain() argument
993 struct spider_net_descr_chain *chain = &card->rx_chain; in show_rx_chain()
997 struct device *dev = &card->netdev->dev; in show_rx_chain()
1011 curr_desc = spider_net_read_reg(card, SPIDER_NET_GDACTDPA); in show_rx_chain()
1012 next_desc = spider_net_read_reg(card, SPIDER_NET_GDACNEXTDA); in show_rx_chain()
1088 static void spider_net_resync_head_ptr(struct spider_net_card *card) in spider_net_resync_head_ptr() argument
1091 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_head_ptr()
1116 static int spider_net_resync_tail_ptr(struct spider_net_card *card) in spider_net_resync_tail_ptr() argument
1118 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_resync_tail_ptr()
1151 spider_net_decode_one_descr(struct spider_net_card *card) in spider_net_decode_one_descr() argument
1153 struct net_device *dev = card->netdev; in spider_net_decode_one_descr()
1154 struct spider_net_descr_chain *chain = &card->rx_chain; in spider_net_decode_one_descr()
1173 pci_unmap_single(card->pdev, hw_buf_addr, in spider_net_decode_one_descr()
1179 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1188 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1189 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1191 card->spider_stats.rx_desc_unk_state++; in spider_net_decode_one_descr()
1197 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1198 dev_err(&card->netdev->dev, in spider_net_decode_one_descr()
1206 dev_err(&card->netdev->dev, "bad status, cmd_status=x%08x\n", in spider_net_decode_one_descr()
1215 pr_err("which=%ld\n", descr - card->rx_chain.ring); in spider_net_decode_one_descr()
1217 card->spider_stats.rx_desc_error++; in spider_net_decode_one_descr()
1222 spider_net_pass_skb_up(descr, card); in spider_net_decode_one_descr()
1228 if (netif_msg_rx_err(card)) in spider_net_decode_one_descr()
1229 show_rx_chain(card); in spider_net_decode_one_descr()
1250 struct spider_net_card *card = container_of(napi, struct spider_net_card, napi); in spider_net_poll() local
1254 if (!spider_net_decode_one_descr(card)) in spider_net_poll()
1260 if ((packets_done == 0) && (card->num_rx_ints != 0)) { in spider_net_poll()
1261 if (!spider_net_resync_tail_ptr(card)) in spider_net_poll()
1263 spider_net_resync_head_ptr(card); in spider_net_poll()
1265 card->num_rx_ints = 0; in spider_net_poll()
1267 spider_net_refill_rx_chain(card); in spider_net_poll()
1268 spider_net_enable_rxdmac(card); in spider_net_poll()
1270 spider_net_cleanup_tx_ring(card); in spider_net_poll()
1276 spider_net_rx_irq_on(card); in spider_net_poll()
1277 card->ignore_rx_ramfull = 0; in spider_net_poll()
1313 struct spider_net_card *card = netdev_priv(netdev); in spider_net_set_mac() local
1323 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1325 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1331 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu); in spider_net_set_mac()
1332 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl); in spider_net_set_mac()
1335 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); in spider_net_set_mac()
1337 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); in spider_net_set_mac()
1339 spider_net_set_promisc(card); in spider_net_set_mac()
1356 struct spider_net_card *card = netdev_priv(netdev); in spider_net_link_reset() local
1358 del_timer_sync(&card->aneg_timer); in spider_net_link_reset()
1361 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_reset()
1362 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_reset()
1363 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_link_reset()
1366 card->aneg_count = 0; in spider_net_link_reset()
1367 card->medium = BCM54XX_COPPER; in spider_net_link_reset()
1368 spider_net_setup_aneg(card); in spider_net_link_reset()
1369 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_reset()
1382 spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg, in spider_net_handle_error_irq() argument
1420 if (netif_msg_intr(card)) in spider_net_handle_error_irq()
1421 dev_err(&card->netdev->dev, "PHY write queue full\n"); in spider_net_handle_error_irq()
1492 if (card->ignore_rx_ramfull == 0) { in spider_net_handle_error_irq()
1493 card->ignore_rx_ramfull = 1; in spider_net_handle_error_irq()
1494 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1495 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1496 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1497 card->num_rx_ints ++; in spider_net_handle_error_irq()
1498 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1514 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1515 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1516 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1517 card->num_rx_ints ++; in spider_net_handle_error_irq()
1518 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1528 spider_net_resync_head_ptr(card); in spider_net_handle_error_irq()
1529 spider_net_refill_rx_chain(card); in spider_net_handle_error_irq()
1530 spider_net_enable_rxdmac(card); in spider_net_handle_error_irq()
1531 card->num_rx_ints ++; in spider_net_handle_error_irq()
1532 napi_schedule(&card->napi); in spider_net_handle_error_irq()
1587 if ((show_error) && (netif_msg_intr(card)) && net_ratelimit()) in spider_net_handle_error_irq()
1588 dev_err(&card->netdev->dev, "Error interrupt, GHIINT0STS = 0x%08x, " in spider_net_handle_error_irq()
1593 spider_net_write_reg(card, SPIDER_NET_GHIINT1STS, error_reg1); in spider_net_handle_error_irq()
1594 spider_net_write_reg(card, SPIDER_NET_GHIINT2STS, error_reg2); in spider_net_handle_error_irq()
1612 struct spider_net_card *card = netdev_priv(netdev); in spider_net_interrupt() local
1615 status_reg = spider_net_read_reg(card, SPIDER_NET_GHIINT0STS); in spider_net_interrupt()
1616 error_reg1 = spider_net_read_reg(card, SPIDER_NET_GHIINT1STS); in spider_net_interrupt()
1617 error_reg2 = spider_net_read_reg(card, SPIDER_NET_GHIINT2STS); in spider_net_interrupt()
1625 spider_net_rx_irq_off(card); in spider_net_interrupt()
1626 napi_schedule(&card->napi); in spider_net_interrupt()
1627 card->num_rx_ints ++; in spider_net_interrupt()
1630 napi_schedule(&card->napi); in spider_net_interrupt()
1636 spider_net_handle_error_irq(card, status_reg, in spider_net_interrupt()
1640 spider_net_write_reg(card, SPIDER_NET_GHIINT0STS, status_reg); in spider_net_interrupt()
1668 spider_net_enable_interrupts(struct spider_net_card *card) in spider_net_enable_interrupts() argument
1670 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, in spider_net_enable_interrupts()
1672 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, in spider_net_enable_interrupts()
1674 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, in spider_net_enable_interrupts()
1685 spider_net_disable_interrupts(struct spider_net_card *card) in spider_net_disable_interrupts() argument
1687 spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, 0); in spider_net_disable_interrupts()
1688 spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, 0); in spider_net_disable_interrupts()
1689 spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, 0); in spider_net_disable_interrupts()
1690 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0); in spider_net_disable_interrupts()
1701 spider_net_init_card(struct spider_net_card *card) in spider_net_init_card() argument
1703 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1706 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_init_card()
1710 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_init_card()
1711 spider_net_read_reg(card, SPIDER_NET_GMACOPEMD) | 0x4); in spider_net_init_card()
1713 spider_net_disable_interrupts(card); in spider_net_init_card()
1723 spider_net_enable_card(struct spider_net_card *card) in spider_net_enable_card() argument
1771 spider_net_write_reg(card, regs[i][0], regs[i][1]); in spider_net_enable_card()
1777 spider_net_write_reg(card, in spider_net_enable_card()
1780 spider_net_write_reg(card, in spider_net_enable_card()
1785 spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, 0x08080000); in spider_net_enable_card()
1787 spider_net_write_reg(card, SPIDER_NET_ECMODE, SPIDER_NET_ECMODE_VALUE); in spider_net_enable_card()
1791 spider_net_enable_rxchtails(card); in spider_net_enable_card()
1792 spider_net_enable_rxdmac(card); in spider_net_enable_card()
1794 spider_net_write_reg(card, SPIDER_NET_GRXDMAEN, SPIDER_NET_WOL_VALUE); in spider_net_enable_card()
1796 spider_net_write_reg(card, SPIDER_NET_GMACLENLMT, in spider_net_enable_card()
1798 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, in spider_net_enable_card()
1801 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_enable_card()
1814 spider_net_download_firmware(struct spider_net_card *card, in spider_net_download_firmware() argument
1821 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1826 spider_net_write_reg(card, in spider_net_download_firmware()
1829 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_download_firmware()
1835 if (spider_net_read_reg(card, SPIDER_NET_GSINIT)) in spider_net_download_firmware()
1838 spider_net_write_reg(card, SPIDER_NET_GSINIT, in spider_net_download_firmware()
1871 spider_net_init_firmware(struct spider_net_card *card) in spider_net_init_firmware() argument
1880 SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) == 0) { in spider_net_init_firmware()
1882 netif_msg_probe(card) ) { in spider_net_init_firmware()
1883 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1888 err = spider_net_download_firmware(card, firmware->data); in spider_net_init_firmware()
1898 dn = pci_device_to_OF_node(card->pdev); in spider_net_init_firmware()
1907 netif_msg_probe(card) ) { in spider_net_init_firmware()
1908 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1913 err = spider_net_download_firmware(card, fw_prop); in spider_net_init_firmware()
1918 if (netif_msg_probe(card)) in spider_net_init_firmware()
1919 dev_err(&card->netdev->dev, in spider_net_init_firmware()
1937 struct spider_net_card *card = netdev_priv(netdev); in spider_net_open() local
1940 result = spider_net_init_firmware(card); in spider_net_open()
1945 card->aneg_count = 0; in spider_net_open()
1946 card->medium = BCM54XX_COPPER; in spider_net_open()
1947 spider_net_setup_aneg(card); in spider_net_open()
1948 if (card->phy.def->phy_id) in spider_net_open()
1949 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_open()
1951 result = spider_net_init_chain(card, &card->tx_chain); in spider_net_open()
1954 card->low_watermark = NULL; in spider_net_open()
1956 result = spider_net_init_chain(card, &card->rx_chain); in spider_net_open()
1961 result = spider_net_alloc_rx_skbs(card); in spider_net_open()
1974 spider_net_enable_card(card); in spider_net_open()
1978 napi_enable(&card->napi); in spider_net_open()
1980 spider_net_enable_interrupts(card); in spider_net_open()
1985 spider_net_free_rx_chain_contents(card); in spider_net_open()
1987 spider_net_free_chain(card, &card->rx_chain); in spider_net_open()
1989 spider_net_free_chain(card, &card->tx_chain); in spider_net_open()
1991 del_timer_sync(&card->aneg_timer); in spider_net_open()
2003 struct spider_net_card *card = (struct spider_net_card *)data; in spider_net_link_phy() local
2004 struct mii_phy *phy = &card->phy; in spider_net_link_phy()
2007 if (card->aneg_count > SPIDER_NET_ANEG_TIMEOUT) { in spider_net_link_phy()
2010 card->netdev->name); in spider_net_link_phy()
2012 switch (card->medium) { in spider_net_link_phy()
2017 card->medium = BCM54XX_FIBER; in spider_net_link_phy()
2024 card->medium = BCM54XX_UNKNOWN; in spider_net_link_phy()
2030 spider_net_setup_aneg(card); in spider_net_link_phy()
2031 card->medium = BCM54XX_COPPER; in spider_net_link_phy()
2035 card->aneg_count = 0; in spider_net_link_phy()
2036 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2042 card->aneg_count++; in spider_net_link_phy()
2043 mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER); in spider_net_link_phy()
2050 spider_net_write_reg(card, SPIDER_NET_GMACST, in spider_net_link_phy()
2051 spider_net_read_reg(card, SPIDER_NET_GMACST)); in spider_net_link_phy()
2052 spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0x4); in spider_net_link_phy()
2055 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0x00000001); in spider_net_link_phy()
2057 spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0); in spider_net_link_phy()
2059 card->aneg_count = 0; in spider_net_link_phy()
2062 card->netdev->name, phy->speed, in spider_net_link_phy()
2076 spider_net_setup_phy(struct spider_net_card *card) in spider_net_setup_phy() argument
2078 struct mii_phy *phy = &card->phy; in spider_net_setup_phy()
2080 spider_net_write_reg(card, SPIDER_NET_GDTDMASEL, in spider_net_setup_phy()
2082 spider_net_write_reg(card, SPIDER_NET_GPCCTRL, in spider_net_setup_phy()
2085 phy->dev = card->netdev; in spider_net_setup_phy()
2091 id = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); in spider_net_setup_phy()
2110 spider_net_workaround_rxramfull(struct spider_net_card *card) in spider_net_workaround_rxramfull() argument
2115 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2121 spider_net_write_reg(card, SPIDER_NET_GSnPRGADR + in spider_net_workaround_rxramfull()
2124 spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT + in spider_net_workaround_rxramfull()
2130 spider_net_write_reg(card, SPIDER_NET_GSINIT, 0x000000fe); in spider_net_workaround_rxramfull()
2133 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_workaround_rxramfull()
2146 struct spider_net_card *card = netdev_priv(netdev); in spider_net_stop() local
2148 napi_disable(&card->napi); in spider_net_stop()
2151 del_timer_sync(&card->tx_timer); in spider_net_stop()
2152 del_timer_sync(&card->aneg_timer); in spider_net_stop()
2154 spider_net_disable_interrupts(card); in spider_net_stop()
2158 spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR, in spider_net_stop()
2162 spider_net_disable_rxdmac(card); in spider_net_stop()
2165 spider_net_release_tx_chain(card, 1); in spider_net_stop()
2166 spider_net_free_rx_chain_contents(card); in spider_net_stop()
2168 spider_net_free_chain(card, &card->tx_chain); in spider_net_stop()
2169 spider_net_free_chain(card, &card->rx_chain); in spider_net_stop()
2184 struct spider_net_card *card = in spider_net_tx_timeout_task() local
2186 struct net_device *netdev = card->netdev; in spider_net_tx_timeout_task()
2194 spider_net_workaround_rxramfull(card); in spider_net_tx_timeout_task()
2195 spider_net_init_card(card); in spider_net_tx_timeout_task()
2197 if (spider_net_setup_phy(card)) in spider_net_tx_timeout_task()
2201 spider_net_kick_tx_dma(card); in spider_net_tx_timeout_task()
2205 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout_task()
2217 struct spider_net_card *card; in spider_net_tx_timeout() local
2219 card = netdev_priv(netdev); in spider_net_tx_timeout()
2220 atomic_inc(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2222 schedule_work(&card->tx_timeout_task); in spider_net_tx_timeout()
2224 atomic_dec(&card->tx_timeout_task_counter); in spider_net_tx_timeout()
2225 card->spider_stats.tx_timeouts++; in spider_net_tx_timeout()
2269 spider_net_setup_netdev(struct spider_net_card *card) in spider_net_setup_netdev() argument
2272 struct net_device *netdev = card->netdev; in spider_net_setup_netdev()
2277 SET_NETDEV_DEV(netdev, &card->pdev->dev); in spider_net_setup_netdev()
2279 pci_set_drvdata(card->pdev, netdev); in spider_net_setup_netdev()
2281 init_timer(&card->tx_timer); in spider_net_setup_netdev()
2282 card->tx_timer.function = in spider_net_setup_netdev()
2284 card->tx_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2285 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2287 card->aneg_count = 0; in spider_net_setup_netdev()
2288 init_timer(&card->aneg_timer); in spider_net_setup_netdev()
2289 card->aneg_timer.function = spider_net_link_phy; in spider_net_setup_netdev()
2290 card->aneg_timer.data = (unsigned long) card; in spider_net_setup_netdev()
2292 netif_napi_add(netdev, &card->napi, in spider_net_setup_netdev()
2304 netdev->irq = card->pdev->irq; in spider_net_setup_netdev()
2305 card->num_rx_ints = 0; in spider_net_setup_netdev()
2306 card->ignore_rx_ramfull = 0; in spider_net_setup_netdev()
2308 dn = pci_device_to_OF_node(card->pdev); in spider_net_setup_netdev()
2318 if ((result) && (netif_msg_probe(card))) in spider_net_setup_netdev()
2319 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2324 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2325 dev_err(&card->netdev->dev, in spider_net_setup_netdev()
2330 if (netif_msg_probe(card)) in spider_net_setup_netdev()
2347 struct spider_net_card *card; in spider_net_alloc_card() local
2356 card = netdev_priv(netdev); in spider_net_alloc_card()
2357 card->netdev = netdev; in spider_net_alloc_card()
2358 card->msg_enable = SPIDER_NET_DEFAULT_MSG; in spider_net_alloc_card()
2359 INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task); in spider_net_alloc_card()
2360 init_waitqueue_head(&card->waitq); in spider_net_alloc_card()
2361 atomic_set(&card->tx_timeout_task_counter, 0); in spider_net_alloc_card()
2363 card->rx_chain.num_desc = rx_descriptors; in spider_net_alloc_card()
2364 card->rx_chain.ring = card->darray; in spider_net_alloc_card()
2365 card->tx_chain.num_desc = tx_descriptors; in spider_net_alloc_card()
2366 card->tx_chain.ring = card->darray + rx_descriptors; in spider_net_alloc_card()
2368 return card; in spider_net_alloc_card()
2378 spider_net_undo_pci_setup(struct spider_net_card *card) in spider_net_undo_pci_setup() argument
2380 iounmap(card->regs); in spider_net_undo_pci_setup()
2381 pci_release_regions(card->pdev); in spider_net_undo_pci_setup()
2399 struct spider_net_card *card; in spider_net_setup_pci_dev() local
2421 card = spider_net_alloc_card(); in spider_net_setup_pci_dev()
2422 if (!card) { in spider_net_setup_pci_dev()
2427 card->pdev = pdev; in spider_net_setup_pci_dev()
2433 card->netdev->mem_start = mmio_start; in spider_net_setup_pci_dev()
2434 card->netdev->mem_end = mmio_start + mmio_len; in spider_net_setup_pci_dev()
2435 card->regs = ioremap(mmio_start, mmio_len); in spider_net_setup_pci_dev()
2437 if (!card->regs) { in spider_net_setup_pci_dev()
2443 return card; in spider_net_setup_pci_dev()
2466 struct spider_net_card *card; in spider_net_probe() local
2468 card = spider_net_setup_pci_dev(pdev); in spider_net_probe()
2469 if (!card) in spider_net_probe()
2472 spider_net_workaround_rxramfull(card); in spider_net_probe()
2473 spider_net_init_card(card); in spider_net_probe()
2475 err = spider_net_setup_phy(card); in spider_net_probe()
2479 err = spider_net_setup_netdev(card); in spider_net_probe()
2486 spider_net_undo_pci_setup(card); in spider_net_probe()
2487 free_netdev(card->netdev); in spider_net_probe()
2505 struct spider_net_card *card; in spider_net_remove() local
2508 card = netdev_priv(netdev); in spider_net_remove()
2510 wait_event(card->waitq, in spider_net_remove()
2511 atomic_read(&card->tx_timeout_task_counter) == 0); in spider_net_remove()
2516 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2518 spider_net_write_reg(card, SPIDER_NET_CKRCTRL, in spider_net_remove()
2521 spider_net_undo_pci_setup(card); in spider_net_remove()