• Home
  • Raw
  • Download

Lines Matching full:lp

174 	struct korina_private *lp = netdev_priv(dev);  in korina_abort_tx()  local
176 korina_abort_dma(dev, lp->tx_dma_regs); in korina_abort_tx()
181 struct korina_private *lp = netdev_priv(dev); in korina_abort_rx() local
183 korina_abort_dma(dev, lp->rx_dma_regs); in korina_abort_rx()
186 static void korina_start_rx(struct korina_private *lp, in korina_start_rx() argument
189 korina_start_dma(lp->rx_dma_regs, CPHYSADDR(rd)); in korina_start_rx()
192 static void korina_chain_rx(struct korina_private *lp, in korina_chain_rx() argument
195 korina_chain_dma(lp->rx_dma_regs, CPHYSADDR(rd)); in korina_chain_rx()
201 struct korina_private *lp = netdev_priv(dev); in korina_send_packet() local
207 spin_lock_irqsave(&lp->lock, flags); in korina_send_packet()
209 td = &lp->td_ring[lp->tx_chain_tail]; in korina_send_packet()
212 if (lp->tx_count >= (KORINA_NUM_TDS - 2)) { in korina_send_packet()
213 lp->tx_full = 1; in korina_send_packet()
215 if (lp->tx_count == (KORINA_NUM_TDS - 2)) in korina_send_packet()
220 spin_unlock_irqrestore(&lp->lock, flags); in korina_send_packet()
226 lp->tx_count++; in korina_send_packet()
228 lp->tx_skb[lp->tx_chain_tail] = skb; in korina_send_packet()
236 chain_prev = (lp->tx_chain_tail - 1) & KORINA_TDS_MASK; in korina_send_packet()
237 chain_next = (lp->tx_chain_tail + 1) & KORINA_TDS_MASK; in korina_send_packet()
239 if (readl(&(lp->tx_dma_regs->dmandptr)) == 0) { in korina_send_packet()
240 if (lp->tx_chain_status == desc_empty) { in korina_send_packet()
245 lp->tx_chain_tail = chain_next; in korina_send_packet()
247 writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]), in korina_send_packet()
248 &lp->tx_dma_regs->dmandptr); in korina_send_packet()
250 lp->tx_chain_head = lp->tx_chain_tail; in korina_send_packet()
256 lp->td_ring[chain_prev].control &= in korina_send_packet()
259 lp->td_ring[chain_prev].link = CPHYSADDR(td); in korina_send_packet()
261 lp->tx_chain_tail = chain_next; in korina_send_packet()
263 writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]), in korina_send_packet()
264 &(lp->tx_dma_regs->dmandptr)); in korina_send_packet()
266 lp->tx_chain_head = lp->tx_chain_tail; in korina_send_packet()
267 lp->tx_chain_status = desc_empty; in korina_send_packet()
270 if (lp->tx_chain_status == desc_empty) { in korina_send_packet()
275 lp->tx_chain_tail = chain_next; in korina_send_packet()
276 lp->tx_chain_status = desc_filled; in korina_send_packet()
281 lp->td_ring[chain_prev].control &= in korina_send_packet()
283 lp->td_ring[chain_prev].link = CPHYSADDR(td); in korina_send_packet()
284 lp->tx_chain_tail = chain_next; in korina_send_packet()
290 spin_unlock_irqrestore(&lp->lock, flags); in korina_send_packet()
297 struct korina_private *lp = netdev_priv(dev); in mdio_read() local
300 mii_id = ((lp->rx_irq == 0x2c ? 1 : 0) << 8); in mdio_read()
302 writel(0, &lp->eth_regs->miimcfg); in mdio_read()
303 writel(0, &lp->eth_regs->miimcmd); in mdio_read()
304 writel(mii_id | reg, &lp->eth_regs->miimaddr); in mdio_read()
305 writel(ETH_MII_CMD_SCN, &lp->eth_regs->miimcmd); in mdio_read()
307 ret = (int)(readl(&lp->eth_regs->miimrdd)); in mdio_read()
313 struct korina_private *lp = netdev_priv(dev); in mdio_write() local
315 mii_id = ((lp->rx_irq == 0x2c ? 1 : 0) << 8); in mdio_write()
317 writel(0, &lp->eth_regs->miimcfg); in mdio_write()
318 writel(1, &lp->eth_regs->miimcmd); in mdio_write()
319 writel(mii_id | reg, &lp->eth_regs->miimaddr); in mdio_write()
320 writel(ETH_MII_CMD_SCN, &lp->eth_regs->miimcmd); in mdio_write()
321 writel(val, &lp->eth_regs->miimwtd); in mdio_write()
328 struct korina_private *lp = netdev_priv(dev); in korina_rx_dma_interrupt() local
332 dmas = readl(&lp->rx_dma_regs->dmas); in korina_rx_dma_interrupt()
334 dmasm = readl(&lp->rx_dma_regs->dmasm); in korina_rx_dma_interrupt()
337 &lp->rx_dma_regs->dmasm); in korina_rx_dma_interrupt()
339 napi_schedule(&lp->napi); in korina_rx_dma_interrupt()
353 struct korina_private *lp = netdev_priv(dev); in korina_rx() local
354 struct dma_desc *rd = &lp->rd_ring[lp->rx_next_done]; in korina_rx()
363 skb = lp->rx_skb[lp->rx_next_done]; in korina_rx()
399 pkt_buf = (u8 *)lp->rx_skb[lp->rx_next_done]->data; in korina_rx()
414 napi_gro_receive(&lp->napi, skb); in korina_rx()
422 lp->rx_skb[lp->rx_next_done] = skb_new; in korina_rx()
435 lp->rd_ring[(lp->rx_next_done - 1) & in korina_rx()
439 lp->rx_next_done = (lp->rx_next_done + 1) & KORINA_RDS_MASK; in korina_rx()
441 rd = &lp->rd_ring[lp->rx_next_done]; in korina_rx()
442 writel(~DMA_STAT_DONE, &lp->rx_dma_regs->dmas); in korina_rx()
445 dmas = readl(&lp->rx_dma_regs->dmas); in korina_rx()
449 &lp->rx_dma_regs->dmas); in korina_rx()
451 lp->dma_halt_cnt++; in korina_rx()
453 skb = lp->rx_skb[lp->rx_next_done]; in korina_rx()
456 korina_chain_rx(lp, rd); in korina_rx()
464 struct korina_private *lp = in korina_poll() local
466 struct net_device *dev = lp->dev; in korina_poll()
473 writel(readl(&lp->rx_dma_regs->dmasm) & in korina_poll()
475 &lp->rx_dma_regs->dmasm); in korina_poll()
485 struct korina_private *lp = netdev_priv(dev); in korina_multicast_list() local
513 &lp->eth_regs->ethhash0); in korina_multicast_list()
515 &lp->eth_regs->ethhash1); in korina_multicast_list()
518 spin_lock_irqsave(&lp->lock, flags); in korina_multicast_list()
519 writel(recognise, &lp->eth_regs->etharc); in korina_multicast_list()
520 spin_unlock_irqrestore(&lp->lock, flags); in korina_multicast_list()
525 struct korina_private *lp = netdev_priv(dev); in korina_tx() local
526 struct dma_desc *td = &lp->td_ring[lp->tx_next_done]; in korina_tx()
530 spin_lock(&lp->lock); in korina_tx()
534 if (lp->tx_full == 1) { in korina_tx()
536 lp->tx_full = 0; in korina_tx()
539 devcs = lp->td_ring[lp->tx_next_done].devcs; in korina_tx()
551 lp->tx_skb[lp->tx_next_done]->len; in korina_tx()
578 if (lp->tx_skb[lp->tx_next_done]) { in korina_tx()
579 dev_kfree_skb_any(lp->tx_skb[lp->tx_next_done]); in korina_tx()
580 lp->tx_skb[lp->tx_next_done] = NULL; in korina_tx()
583 lp->td_ring[lp->tx_next_done].control = DMA_DESC_IOF; in korina_tx()
584 lp->td_ring[lp->tx_next_done].devcs = ETH_TX_FD | ETH_TX_LD; in korina_tx()
585 lp->td_ring[lp->tx_next_done].link = 0; in korina_tx()
586 lp->td_ring[lp->tx_next_done].ca = 0; in korina_tx()
587 lp->tx_count--; in korina_tx()
590 lp->tx_next_done = (lp->tx_next_done + 1) & KORINA_TDS_MASK; in korina_tx()
591 td = &lp->td_ring[lp->tx_next_done]; in korina_tx()
596 dmas = readl(&lp->tx_dma_regs->dmas); in korina_tx()
597 writel(~dmas, &lp->tx_dma_regs->dmas); in korina_tx()
599 writel(readl(&lp->tx_dma_regs->dmasm) & in korina_tx()
601 &lp->tx_dma_regs->dmasm); in korina_tx()
603 spin_unlock(&lp->lock); in korina_tx()
610 struct korina_private *lp = netdev_priv(dev); in korina_tx_dma_interrupt() local
614 dmas = readl(&lp->tx_dma_regs->dmas); in korina_tx_dma_interrupt()
617 dmasm = readl(&lp->tx_dma_regs->dmasm); in korina_tx_dma_interrupt()
619 &lp->tx_dma_regs->dmasm); in korina_tx_dma_interrupt()
623 if (lp->tx_chain_status == desc_filled && in korina_tx_dma_interrupt()
624 (readl(&(lp->tx_dma_regs->dmandptr)) == 0)) { in korina_tx_dma_interrupt()
625 writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]), in korina_tx_dma_interrupt()
626 &(lp->tx_dma_regs->dmandptr)); in korina_tx_dma_interrupt()
627 lp->tx_chain_status = desc_empty; in korina_tx_dma_interrupt()
628 lp->tx_chain_head = lp->tx_chain_tail; in korina_tx_dma_interrupt()
644 struct korina_private *lp = netdev_priv(dev); in korina_check_media() local
646 mii_check_media(&lp->mii_if, 0, init_media); in korina_check_media()
648 if (lp->mii_if.full_duplex) in korina_check_media()
649 writel(readl(&lp->eth_regs->ethmac2) | ETH_MAC2_FD, in korina_check_media()
650 &lp->eth_regs->ethmac2); in korina_check_media()
652 writel(readl(&lp->eth_regs->ethmac2) & ~ETH_MAC2_FD, in korina_check_media()
653 &lp->eth_regs->ethmac2); in korina_check_media()
658 struct korina_private *lp = from_timer(lp, t, media_check_timer); in korina_poll_media() local
659 struct net_device *dev = lp->dev; in korina_poll_media()
662 mod_timer(&lp->media_check_timer, jiffies + HZ); in korina_poll_media()
677 struct korina_private *lp = netdev_priv(dev); in korina_ioctl() local
683 spin_lock_irq(&lp->lock); in korina_ioctl()
684 rc = generic_mii_ioctl(&lp->mii_if, data, cmd, NULL); in korina_ioctl()
685 spin_unlock_irq(&lp->lock); in korina_ioctl()
686 korina_set_carrier(&lp->mii_if); in korina_ioctl()
695 struct korina_private *lp = netdev_priv(dev); in netdev_get_drvinfo() local
699 strlcpy(info->bus_info, lp->dev->name, sizeof(info->bus_info)); in netdev_get_drvinfo()
705 struct korina_private *lp = netdev_priv(dev); in netdev_get_link_ksettings() local
707 spin_lock_irq(&lp->lock); in netdev_get_link_ksettings()
708 mii_ethtool_get_link_ksettings(&lp->mii_if, cmd); in netdev_get_link_ksettings()
709 spin_unlock_irq(&lp->lock); in netdev_get_link_ksettings()
717 struct korina_private *lp = netdev_priv(dev); in netdev_set_link_ksettings() local
720 spin_lock_irq(&lp->lock); in netdev_set_link_ksettings()
721 rc = mii_ethtool_set_link_ksettings(&lp->mii_if, cmd); in netdev_set_link_ksettings()
722 spin_unlock_irq(&lp->lock); in netdev_set_link_ksettings()
723 korina_set_carrier(&lp->mii_if); in netdev_set_link_ksettings()
730 struct korina_private *lp = netdev_priv(dev); in netdev_get_link() local
732 return mii_link_ok(&lp->mii_if); in netdev_get_link()
744 struct korina_private *lp = netdev_priv(dev); in korina_alloc_ring() local
750 lp->td_ring[i].control = DMA_DESC_IOF; in korina_alloc_ring()
751 lp->td_ring[i].devcs = ETH_TX_FD | ETH_TX_LD; in korina_alloc_ring()
752 lp->td_ring[i].ca = 0; in korina_alloc_ring()
753 lp->td_ring[i].link = 0; in korina_alloc_ring()
755 lp->tx_next_done = lp->tx_chain_head = lp->tx_chain_tail = in korina_alloc_ring()
756 lp->tx_full = lp->tx_count = 0; in korina_alloc_ring()
757 lp->tx_chain_status = desc_empty; in korina_alloc_ring()
764 lp->rx_skb[i] = skb; in korina_alloc_ring()
765 lp->rd_ring[i].control = DMA_DESC_IOD | in korina_alloc_ring()
767 lp->rd_ring[i].devcs = 0; in korina_alloc_ring()
768 lp->rd_ring[i].ca = CPHYSADDR(skb->data); in korina_alloc_ring()
769 lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[i+1]); in korina_alloc_ring()
774 lp->rd_ring[i - 1].link = CPHYSADDR(&lp->rd_ring[0]); in korina_alloc_ring()
775 lp->rd_ring[i - 1].control |= DMA_DESC_COD; in korina_alloc_ring()
777 lp->rx_next_done = 0; in korina_alloc_ring()
778 lp->rx_chain_head = 0; in korina_alloc_ring()
779 lp->rx_chain_tail = 0; in korina_alloc_ring()
780 lp->rx_chain_status = desc_empty; in korina_alloc_ring()
787 struct korina_private *lp = netdev_priv(dev); in korina_free_ring() local
791 lp->rd_ring[i].control = 0; in korina_free_ring()
792 if (lp->rx_skb[i]) in korina_free_ring()
793 dev_kfree_skb_any(lp->rx_skb[i]); in korina_free_ring()
794 lp->rx_skb[i] = NULL; in korina_free_ring()
798 lp->td_ring[i].control = 0; in korina_free_ring()
799 if (lp->tx_skb[i]) in korina_free_ring()
800 dev_kfree_skb_any(lp->tx_skb[i]); in korina_free_ring()
801 lp->tx_skb[i] = NULL; in korina_free_ring()
810 struct korina_private *lp = netdev_priv(dev); in korina_init() local
817 writel(0, &lp->eth_regs->ethintfc); in korina_init()
818 while ((readl(&lp->eth_regs->ethintfc) & ETH_INT_FC_RIP)) in korina_init()
822 writel(ETH_INT_FC_EN, &lp->eth_regs->ethintfc); in korina_init()
831 writel(0, &lp->rx_dma_regs->dmas); in korina_init()
833 korina_start_rx(lp, &lp->rd_ring[0]); in korina_init()
835 writel(readl(&lp->tx_dma_regs->dmasm) & in korina_init()
837 &lp->tx_dma_regs->dmasm); in korina_init()
838 writel(readl(&lp->rx_dma_regs->dmasm) & in korina_init()
840 &lp->rx_dma_regs->dmasm); in korina_init()
843 writel(ETH_ARC_AB, &lp->eth_regs->etharc); in korina_init()
846 writel(STATION_ADDRESS_LOW(dev), &lp->eth_regs->ethsal0); in korina_init()
847 writel(STATION_ADDRESS_HIGH(dev), &lp->eth_regs->ethsah0); in korina_init()
849 writel(STATION_ADDRESS_LOW(dev), &lp->eth_regs->ethsal1); in korina_init()
850 writel(STATION_ADDRESS_HIGH(dev), &lp->eth_regs->ethsah1); in korina_init()
852 writel(STATION_ADDRESS_LOW(dev), &lp->eth_regs->ethsal2); in korina_init()
853 writel(STATION_ADDRESS_HIGH(dev), &lp->eth_regs->ethsah2); in korina_init()
855 writel(STATION_ADDRESS_LOW(dev), &lp->eth_regs->ethsal3); in korina_init()
856 writel(STATION_ADDRESS_HIGH(dev), &lp->eth_regs->ethsah3); in korina_init()
861 &lp->eth_regs->ethmac2); in korina_init()
864 writel(0x15, &lp->eth_regs->ethipgt); in korina_init()
866 writel(0x12, &lp->eth_regs->ethipgr); in korina_init()
871 &lp->eth_regs->ethmcp); in korina_init()
874 writel(48, &lp->eth_regs->ethfifott); in korina_init()
876 writel(ETH_MAC1_RE, &lp->eth_regs->ethmac1); in korina_init()
878 napi_enable(&lp->napi); in korina_init()
889 struct korina_private *lp = container_of(work, in korina_restart_task() local
891 struct net_device *dev = lp->dev; in korina_restart_task()
896 disable_irq(lp->rx_irq); in korina_restart_task()
897 disable_irq(lp->tx_irq); in korina_restart_task()
899 writel(readl(&lp->tx_dma_regs->dmasm) | in korina_restart_task()
901 &lp->tx_dma_regs->dmasm); in korina_restart_task()
902 writel(readl(&lp->rx_dma_regs->dmasm) | in korina_restart_task()
904 &lp->rx_dma_regs->dmasm); in korina_restart_task()
906 napi_disable(&lp->napi); in korina_restart_task()
916 enable_irq(lp->tx_irq); in korina_restart_task()
917 enable_irq(lp->rx_irq); in korina_restart_task()
922 struct korina_private *lp = netdev_priv(dev); in korina_tx_timeout() local
924 schedule_work(&lp->restart_task); in korina_tx_timeout()
938 struct korina_private *lp = netdev_priv(dev); in korina_open() local
950 ret = request_irq(lp->rx_irq, korina_rx_dma_interrupt, in korina_open()
954 dev->name, lp->rx_irq); in korina_open()
957 ret = request_irq(lp->tx_irq, korina_tx_dma_interrupt, in korina_open()
961 dev->name, lp->tx_irq); in korina_open()
965 mod_timer(&lp->media_check_timer, jiffies + 1); in korina_open()
970 free_irq(lp->rx_irq, dev); in korina_open()
978 struct korina_private *lp = netdev_priv(dev); in korina_close() local
981 del_timer(&lp->media_check_timer); in korina_close()
984 disable_irq(lp->rx_irq); in korina_close()
985 disable_irq(lp->tx_irq); in korina_close()
988 tmp = readl(&lp->tx_dma_regs->dmasm); in korina_close()
990 writel(tmp, &lp->tx_dma_regs->dmasm); in korina_close()
993 tmp = readl(&lp->rx_dma_regs->dmasm); in korina_close()
995 writel(tmp, &lp->rx_dma_regs->dmasm); in korina_close()
997 napi_disable(&lp->napi); in korina_close()
999 cancel_work_sync(&lp->restart_task); in korina_close()
1003 free_irq(lp->rx_irq, dev); in korina_close()
1004 free_irq(lp->tx_irq, dev); in korina_close()
1026 struct korina_private *lp; in korina_probe() local
1036 lp = netdev_priv(dev); in korina_probe()
1041 lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx"); in korina_probe()
1042 lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx"); in korina_probe()
1046 lp->eth_regs = ioremap(r->start, resource_size(r)); in korina_probe()
1047 if (!lp->eth_regs) { in korina_probe()
1054 lp->rx_dma_regs = ioremap(r->start, resource_size(r)); in korina_probe()
1055 if (!lp->rx_dma_regs) { in korina_probe()
1062 lp->tx_dma_regs = ioremap(r->start, resource_size(r)); in korina_probe()
1063 if (!lp->tx_dma_regs) { in korina_probe()
1069 lp->td_ring = kmalloc(TD_RING_SIZE + RD_RING_SIZE, GFP_KERNEL); in korina_probe()
1070 if (!lp->td_ring) { in korina_probe()
1075 dma_cache_inv((unsigned long)(lp->td_ring), in korina_probe()
1079 lp->td_ring = (struct dma_desc *)KSEG1ADDR(lp->td_ring); in korina_probe()
1080 lp->rd_ring = &lp->td_ring[KORINA_NUM_TDS]; in korina_probe()
1082 spin_lock_init(&lp->lock); in korina_probe()
1084 dev->irq = lp->rx_irq; in korina_probe()
1085 lp->dev = dev; in korina_probe()
1090 netif_napi_add(dev, &lp->napi, korina_poll, NAPI_POLL_WEIGHT); in korina_probe()
1092 lp->phy_addr = (((lp->rx_irq == 0x2c? 1:0) << 8) | 0x05); in korina_probe()
1093 lp->mii_if.dev = dev; in korina_probe()
1094 lp->mii_if.mdio_read = mdio_read; in korina_probe()
1095 lp->mii_if.mdio_write = mdio_write; in korina_probe()
1096 lp->mii_if.phy_id = lp->phy_addr; in korina_probe()
1097 lp->mii_if.phy_id_mask = 0x1f; in korina_probe()
1098 lp->mii_if.reg_num_mask = 0x1f; in korina_probe()
1106 timer_setup(&lp->media_check_timer, korina_poll_media, 0); in korina_probe()
1108 INIT_WORK(&lp->restart_task, korina_restart_task); in korina_probe()
1116 kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring)); in korina_probe()
1118 iounmap(lp->tx_dma_regs); in korina_probe()
1120 iounmap(lp->rx_dma_regs); in korina_probe()
1122 iounmap(lp->eth_regs); in korina_probe()
1131 struct korina_private *lp = netdev_priv(bif->dev); in korina_remove() local
1133 iounmap(lp->eth_regs); in korina_remove()
1134 iounmap(lp->rx_dma_regs); in korina_remove()
1135 iounmap(lp->tx_dma_regs); in korina_remove()
1136 kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring)); in korina_remove()