Lines Matching refs:tp
400 struct sis190_private *tp = netdev_priv(dev); in __mdio_write() local
402 mdio_write(tp->mmio_addr, phy_id, reg, val); in __mdio_write()
407 struct sis190_private *tp = netdev_priv(dev); in __mdio_read() local
409 return mdio_read(tp->mmio_addr, phy_id, reg); in __mdio_read()
487 static struct sk_buff *sis190_alloc_rx_skb(struct sis190_private *tp, in sis190_alloc_rx_skb() argument
490 u32 rx_buf_sz = tp->rx_buf_sz; in sis190_alloc_rx_skb()
494 skb = netdev_alloc_skb(tp->dev, rx_buf_sz); in sis190_alloc_rx_skb()
497 mapping = pci_map_single(tp->pci_dev, skb->data, tp->rx_buf_sz, in sis190_alloc_rx_skb()
499 if (pci_dma_mapping_error(tp->pci_dev, mapping)) in sis190_alloc_rx_skb()
512 static u32 sis190_rx_fill(struct sis190_private *tp, struct net_device *dev, in sis190_rx_fill() argument
520 if (tp->Rx_skbuff[i]) in sis190_rx_fill()
523 tp->Rx_skbuff[i] = sis190_alloc_rx_skb(tp, tp->RxDescRing + i); in sis190_rx_fill()
525 if (!tp->Rx_skbuff[i]) in sis190_rx_fill()
531 static bool sis190_try_rx_copy(struct sis190_private *tp, in sis190_try_rx_copy() argument
541 skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size); in sis190_try_rx_copy()
545 pci_dma_sync_single_for_cpu(tp->pci_dev, addr, tp->rx_buf_sz, in sis190_try_rx_copy()
575 struct sis190_private *tp, void __iomem *ioaddr) in sis190_rx_interrupt() argument
578 u32 rx_left, cur_rx = tp->cur_rx; in sis190_rx_interrupt()
581 rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx; in sis190_rx_interrupt()
586 struct RxDesc *desc = tp->RxDescRing + entry; in sis190_rx_interrupt()
597 sis190_give_to_asic(desc, tp->rx_buf_sz); in sis190_rx_interrupt()
599 struct sk_buff *skb = tp->Rx_skbuff[entry]; in sis190_rx_interrupt()
602 struct pci_dev *pdev = tp->pci_dev; in sis190_rx_interrupt()
604 if (unlikely(pkt_size > tp->rx_buf_sz)) { in sis190_rx_interrupt()
605 netif_info(tp, intr, dev, in sis190_rx_interrupt()
609 sis190_give_to_asic(desc, tp->rx_buf_sz); in sis190_rx_interrupt()
614 if (sis190_try_rx_copy(tp, &skb, pkt_size, addr)) { in sis190_rx_interrupt()
616 tp->rx_buf_sz, PCI_DMA_FROMDEVICE); in sis190_rx_interrupt()
617 sis190_give_to_asic(desc, tp->rx_buf_sz); in sis190_rx_interrupt()
619 pci_unmap_single(pdev, addr, tp->rx_buf_sz, in sis190_rx_interrupt()
621 tp->Rx_skbuff[entry] = NULL; in sis190_rx_interrupt()
636 count = cur_rx - tp->cur_rx; in sis190_rx_interrupt()
637 tp->cur_rx = cur_rx; in sis190_rx_interrupt()
639 delta = sis190_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx); in sis190_rx_interrupt()
641 netif_info(tp, intr, dev, "no Rx buffer allocated\n"); in sis190_rx_interrupt()
642 tp->dirty_rx += delta; in sis190_rx_interrupt()
644 if ((tp->dirty_rx + NUM_RX_DESC) == tp->cur_rx) in sis190_rx_interrupt()
645 netif_emerg(tp, intr, dev, "Rx buffers exhausted\n"); in sis190_rx_interrupt()
684 struct sis190_private *tp, void __iomem *ioaddr) in sis190_tx_interrupt() argument
687 u32 pending, dirty_tx = tp->dirty_tx; in sis190_tx_interrupt()
695 pending = tp->cur_tx - dirty_tx; in sis190_tx_interrupt()
700 struct TxDesc *txd = tp->TxDescRing + entry; in sis190_tx_interrupt()
707 skb = tp->Tx_skbuff[entry]; in sis190_tx_interrupt()
715 sis190_unmap_tx_skb(tp->pci_dev, skb, txd); in sis190_tx_interrupt()
716 tp->Tx_skbuff[entry] = NULL; in sis190_tx_interrupt()
720 if (tp->dirty_tx != dirty_tx) { in sis190_tx_interrupt()
721 tp->dirty_tx = dirty_tx; in sis190_tx_interrupt()
735 struct sis190_private *tp = netdev_priv(dev); in sis190_irq() local
736 void __iomem *ioaddr = tp->mmio_addr; in sis190_irq()
757 netif_info(tp, intr, dev, "link change\n"); in sis190_irq()
758 del_timer(&tp->timer); in sis190_irq()
759 schedule_work(&tp->phy_task); in sis190_irq()
763 sis190_rx_interrupt(dev, tp, ioaddr); in sis190_irq()
766 sis190_tx_interrupt(dev, tp, ioaddr); in sis190_irq()
774 struct sis190_private *tp = netdev_priv(dev); in sis190_netpoll() local
775 const int irq = tp->pci_dev->irq; in sis190_netpoll()
783 static void sis190_free_rx_skb(struct sis190_private *tp, in sis190_free_rx_skb() argument
786 struct pci_dev *pdev = tp->pci_dev; in sis190_free_rx_skb()
788 pci_unmap_single(pdev, le32_to_cpu(desc->addr), tp->rx_buf_sz, in sis190_free_rx_skb()
795 static void sis190_rx_clear(struct sis190_private *tp) in sis190_rx_clear() argument
800 if (!tp->Rx_skbuff[i]) in sis190_rx_clear()
802 sis190_free_rx_skb(tp, tp->Rx_skbuff + i, tp->RxDescRing + i); in sis190_rx_clear()
806 static void sis190_init_ring_indexes(struct sis190_private *tp) in sis190_init_ring_indexes() argument
808 tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0; in sis190_init_ring_indexes()
813 struct sis190_private *tp = netdev_priv(dev); in sis190_init_ring() local
815 sis190_init_ring_indexes(tp); in sis190_init_ring()
817 memset(tp->Tx_skbuff, 0x0, NUM_TX_DESC * sizeof(struct sk_buff *)); in sis190_init_ring()
818 memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *)); in sis190_init_ring()
820 if (sis190_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC) in sis190_init_ring()
823 sis190_mark_as_last_descriptor(tp->RxDescRing + NUM_RX_DESC - 1); in sis190_init_ring()
828 sis190_rx_clear(tp); in sis190_init_ring()
834 struct sis190_private *tp = netdev_priv(dev); in sis190_set_rx_mode() local
835 void __iomem *ioaddr = tp->mmio_addr; in sis190_set_rx_mode()
863 spin_lock_irqsave(&tp->lock, flags); in sis190_set_rx_mode()
869 spin_unlock_irqrestore(&tp->lock, flags); in sis190_set_rx_mode()
882 struct sis190_private *tp = netdev_priv(dev); in sis190_hw_start() local
883 void __iomem *ioaddr = tp->mmio_addr; in sis190_hw_start()
887 SIS_W32(TxDescStartAddr, tp->tx_dma); in sis190_hw_start()
888 SIS_W32(RxDescStartAddr, tp->rx_dma); in sis190_hw_start()
915 struct sis190_private *tp = in sis190_phy_task() local
917 struct net_device *dev = tp->dev; in sis190_phy_task()
918 void __iomem *ioaddr = tp->mmio_addr; in sis190_phy_task()
919 int phy_id = tp->mii_if.phy_id; in sis190_phy_task()
930 mod_timer(&tp->timer, jiffies + HZ/10); in sis190_phy_task()
935 if (!(val & BMSR_ANEGCOMPLETE) && tp->link_status != LNK_AUTONEG) { in sis190_phy_task()
937 netif_warn(tp, link, dev, "auto-negotiating...\n"); in sis190_phy_task()
938 tp->link_status = LNK_AUTONEG; in sis190_phy_task()
939 } else if ((val & BMSR_LSTATUS) && tp->link_status != LNK_ON) { in sis190_phy_task()
963 netif_info(tp, link, dev, "mii ext = %04x\n", val); in sis190_phy_task()
968 netif_info(tp, link, dev, "mii lpa=%04x adv=%04x exp=%04x\n", in sis190_phy_task()
992 if ((tp->features & F_HAS_RGMII) && in sis190_phy_task()
993 (tp->features & F_PHY_BCM5461)) { in sis190_phy_task()
1003 if (tp->features & F_HAS_RGMII) { in sis190_phy_task()
1008 tp->negotiated_lpa = p->val; in sis190_phy_task()
1010 netif_info(tp, link, dev, "link on %s mode\n", p->msg); in sis190_phy_task()
1012 tp->link_status = LNK_ON; in sis190_phy_task()
1013 } else if (!(val & BMSR_LSTATUS) && tp->link_status != LNK_AUTONEG) in sis190_phy_task()
1014 tp->link_status = LNK_OFF; in sis190_phy_task()
1015 mod_timer(&tp->timer, jiffies + SIS190_PHY_TIMEOUT); in sis190_phy_task()
1024 struct sis190_private *tp = netdev_priv(dev); in sis190_phy_timer() local
1027 schedule_work(&tp->phy_task); in sis190_phy_timer()
1032 struct sis190_private *tp = netdev_priv(dev); in sis190_delete_timer() local
1034 del_timer_sync(&tp->timer); in sis190_delete_timer()
1039 struct sis190_private *tp = netdev_priv(dev); in sis190_request_timer() local
1040 struct timer_list *timer = &tp->timer; in sis190_request_timer()
1049 static void sis190_set_rxbufsize(struct sis190_private *tp, in sis190_set_rxbufsize() argument
1054 tp->rx_buf_sz = (mtu > RX_BUF_SIZE) ? mtu + ETH_HLEN + 8 : RX_BUF_SIZE; in sis190_set_rxbufsize()
1056 if (tp->rx_buf_sz & 0x07) { in sis190_set_rxbufsize()
1057 tp->rx_buf_sz += 8; in sis190_set_rxbufsize()
1058 tp->rx_buf_sz &= RX_BUF_MASK; in sis190_set_rxbufsize()
1064 struct sis190_private *tp = netdev_priv(dev); in sis190_open() local
1065 struct pci_dev *pdev = tp->pci_dev; in sis190_open()
1068 sis190_set_rxbufsize(tp, dev); in sis190_open()
1074 tp->TxDescRing = pci_alloc_consistent(pdev, TX_RING_BYTES, &tp->tx_dma); in sis190_open()
1075 if (!tp->TxDescRing) in sis190_open()
1078 tp->RxDescRing = pci_alloc_consistent(pdev, RX_RING_BYTES, &tp->rx_dma); in sis190_open()
1079 if (!tp->RxDescRing) in sis190_open()
1098 sis190_rx_clear(tp); in sis190_open()
1100 pci_free_consistent(pdev, RX_RING_BYTES, tp->RxDescRing, tp->rx_dma); in sis190_open()
1102 pci_free_consistent(pdev, TX_RING_BYTES, tp->TxDescRing, tp->tx_dma); in sis190_open()
1106 static void sis190_tx_clear(struct sis190_private *tp) in sis190_tx_clear() argument
1111 struct sk_buff *skb = tp->Tx_skbuff[i]; in sis190_tx_clear()
1116 sis190_unmap_tx_skb(tp->pci_dev, skb, tp->TxDescRing + i); in sis190_tx_clear()
1117 tp->Tx_skbuff[i] = NULL; in sis190_tx_clear()
1120 tp->dev->stats.tx_dropped++; in sis190_tx_clear()
1122 tp->cur_tx = tp->dirty_tx = 0; in sis190_tx_clear()
1127 struct sis190_private *tp = netdev_priv(dev); in sis190_down() local
1128 void __iomem *ioaddr = tp->mmio_addr; in sis190_down()
1136 spin_lock_irq(&tp->lock); in sis190_down()
1140 spin_unlock_irq(&tp->lock); in sis190_down()
1142 synchronize_irq(tp->pci_dev->irq); in sis190_down()
1151 sis190_tx_clear(tp); in sis190_down()
1152 sis190_rx_clear(tp); in sis190_down()
1157 struct sis190_private *tp = netdev_priv(dev); in sis190_close() local
1158 struct pci_dev *pdev = tp->pci_dev; in sis190_close()
1164 pci_free_consistent(pdev, TX_RING_BYTES, tp->TxDescRing, tp->tx_dma); in sis190_close()
1165 pci_free_consistent(pdev, RX_RING_BYTES, tp->RxDescRing, tp->rx_dma); in sis190_close()
1167 tp->TxDescRing = NULL; in sis190_close()
1168 tp->RxDescRing = NULL; in sis190_close()
1176 struct sis190_private *tp = netdev_priv(dev); in sis190_start_xmit() local
1177 void __iomem *ioaddr = tp->mmio_addr; in sis190_start_xmit()
1192 entry = tp->cur_tx % NUM_TX_DESC; in sis190_start_xmit()
1193 desc = tp->TxDescRing + entry; in sis190_start_xmit()
1197 netif_err(tp, tx_err, dev, in sis190_start_xmit()
1202 mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE); in sis190_start_xmit()
1203 if (pci_dma_mapping_error(tp->pci_dev, mapping)) { in sis190_start_xmit()
1204 netif_err(tp, tx_err, dev, in sis190_start_xmit()
1209 tp->Tx_skbuff[entry] = skb; in sis190_start_xmit()
1221 if (tp->negotiated_lpa & (LPA_1000HALF | LPA_100HALF | LPA_10HALF)) { in sis190_start_xmit()
1224 if (tp->negotiated_lpa & (LPA_1000HALF | LPA_1000FULL)) in sis190_start_xmit()
1228 tp->cur_tx++; in sis190_start_xmit()
1234 dirty_tx = tp->dirty_tx; in sis190_start_xmit()
1235 if ((tp->cur_tx - NUM_TX_DESC) == dirty_tx) { in sis190_start_xmit()
1238 if (dirty_tx != tp->dirty_tx) in sis190_start_xmit()
1265 struct sis190_private *tp = netdev_priv(dev); in sis190_default_phy() local
1266 struct mii_if_info *mii_if = &tp->mii_if; in sis190_default_phy()
1267 void __iomem *ioaddr = tp->mmio_addr; in sis190_default_phy()
1272 list_for_each_entry(phy, &tp->first_phy, list) { in sis190_default_phy()
1297 phy_default = list_first_entry(&tp->first_phy, in sis190_default_phy()
1303 if (netif_msg_probe(tp)) in sis190_default_phy()
1305 pci_name(tp->pci_dev), mii_if->phy_id); in sis190_default_phy()
1317 static void sis190_init_phy(struct net_device *dev, struct sis190_private *tp, in sis190_init_phy() argument
1321 void __iomem *ioaddr = tp->mmio_addr; in sis190_init_phy()
1342 tp->features |= p->feature; in sis190_init_phy()
1343 if (netif_msg_probe(tp)) in sis190_init_phy()
1345 pci_name(tp->pci_dev), p->name, phy_id); in sis190_init_phy()
1348 if (netif_msg_probe(tp)) in sis190_init_phy()
1350 pci_name(tp->pci_dev), in sis190_init_phy()
1355 static void sis190_mii_probe_88e1111_fixup(struct sis190_private *tp) in sis190_mii_probe_88e1111_fixup() argument
1357 if (tp->features & F_PHY_88E1111) { in sis190_mii_probe_88e1111_fixup()
1358 void __iomem *ioaddr = tp->mmio_addr; in sis190_mii_probe_88e1111_fixup()
1359 int phy_id = tp->mii_if.phy_id; in sis190_mii_probe_88e1111_fixup()
1365 p = (tp->features & F_HAS_RGMII) ? reg[0] : reg[1]; in sis190_mii_probe_88e1111_fixup()
1384 struct sis190_private *tp = netdev_priv(dev); in sis190_mii_probe() local
1385 struct mii_if_info *mii_if = &tp->mii_if; in sis190_mii_probe()
1386 void __iomem *ioaddr = tp->mmio_addr; in sis190_mii_probe()
1390 INIT_LIST_HEAD(&tp->first_phy); in sis190_mii_probe()
1404 sis190_free_phy(&tp->first_phy); in sis190_mii_probe()
1409 sis190_init_phy(dev, tp, phy, phy_id, status); in sis190_mii_probe()
1411 list_add(&tp->first_phy, &phy->list); in sis190_mii_probe()
1414 if (list_empty(&tp->first_phy)) { in sis190_mii_probe()
1415 if (netif_msg_probe(tp)) in sis190_mii_probe()
1417 pci_name(tp->pci_dev)); in sis190_mii_probe()
1425 sis190_mii_probe_88e1111_fixup(tp); in sis190_mii_probe()
1438 struct sis190_private *tp = netdev_priv(dev); in sis190_mii_remove() local
1440 sis190_free_phy(&tp->first_phy); in sis190_mii_remove()
1446 struct sis190_private *tp = netdev_priv(dev); in sis190_release_board() local
1448 iounmap(tp->mmio_addr); in sis190_release_board()
1456 struct sis190_private *tp; in sis190_init_board() local
1461 dev = alloc_etherdev(sizeof(*tp)); in sis190_init_board()
1469 tp = netdev_priv(dev); in sis190_init_board()
1470 tp->dev = dev; in sis190_init_board()
1471 tp->msg_enable = netif_msg_init(debug.msg_enable, SIS190_MSG_DEFAULT); in sis190_init_board()
1475 if (netif_msg_probe(tp)) in sis190_init_board()
1483 if (netif_msg_probe(tp)) in sis190_init_board()
1489 if (netif_msg_probe(tp)) in sis190_init_board()
1497 if (netif_msg_probe(tp)) in sis190_init_board()
1505 if (netif_msg_probe(tp)) in sis190_init_board()
1515 if (netif_msg_probe(tp)) in sis190_init_board()
1522 tp->pci_dev = pdev; in sis190_init_board()
1523 tp->mmio_addr = ioaddr; in sis190_init_board()
1524 tp->link_status = LNK_OFF; in sis190_init_board()
1545 struct sis190_private *tp = netdev_priv(dev); in sis190_tx_timeout() local
1546 void __iomem *ioaddr = tp->mmio_addr; in sis190_tx_timeout()
1554 netif_info(tp, tx_err, dev, "Transmit timeout, status %08x %08x\n", in sis190_tx_timeout()
1561 spin_lock_irq(&tp->lock); in sis190_tx_timeout()
1562 sis190_tx_clear(tp); in sis190_tx_timeout()
1563 spin_unlock_irq(&tp->lock); in sis190_tx_timeout()
1571 static void sis190_set_rgmii(struct sis190_private *tp, u8 reg) in sis190_set_rgmii() argument
1573 tp->features |= (reg & 0x80) ? F_HAS_RGMII : 0; in sis190_set_rgmii()
1579 struct sis190_private *tp = netdev_priv(dev); in sis190_get_mac_addr_from_eeprom() local
1580 void __iomem *ioaddr = tp->mmio_addr; in sis190_get_mac_addr_from_eeprom()
1584 if (netif_msg_probe(tp)) in sis190_get_mac_addr_from_eeprom()
1591 if (netif_msg_probe(tp)) in sis190_get_mac_addr_from_eeprom()
1604 sis190_set_rgmii(tp, sis190_read_eeprom(ioaddr, EEPROMInfo)); in sis190_get_mac_addr_from_eeprom()
1622 struct sis190_private *tp = netdev_priv(dev); in sis190_get_mac_addr_from_apc() local
1627 if (netif_msg_probe(tp)) in sis190_get_mac_addr_from_apc()
1637 if (netif_msg_probe(tp)) in sis190_get_mac_addr_from_apc()
1658 sis190_set_rgmii(tp, reg); in sis190_get_mac_addr_from_apc()
1676 struct sis190_private *tp = netdev_priv(dev); in sis190_init_rxfilter() local
1677 void __iomem *ioaddr = tp->mmio_addr; in sis190_init_rxfilter()
1714 struct sis190_private *tp = netdev_priv(dev); in sis190_set_speed_auto() local
1715 void __iomem *ioaddr = tp->mmio_addr; in sis190_set_speed_auto()
1716 int phy_id = tp->mii_if.phy_id; in sis190_set_speed_auto()
1719 netif_info(tp, link, dev, "Enabling Auto-negotiation\n"); in sis190_set_speed_auto()
1739 struct sis190_private *tp = netdev_priv(dev); in sis190_get_settings() local
1741 return mii_ethtool_gset(&tp->mii_if, cmd); in sis190_get_settings()
1746 struct sis190_private *tp = netdev_priv(dev); in sis190_set_settings() local
1748 return mii_ethtool_sset(&tp->mii_if, cmd); in sis190_set_settings()
1754 struct sis190_private *tp = netdev_priv(dev); in sis190_get_drvinfo() local
1758 strlcpy(info->bus_info, pci_name(tp->pci_dev), in sis190_get_drvinfo()
1770 struct sis190_private *tp = netdev_priv(dev); in sis190_get_regs() local
1773 spin_lock_irqsave(&tp->lock, flags); in sis190_get_regs()
1774 memcpy_fromio(p, tp->mmio_addr, regs->len); in sis190_get_regs()
1775 spin_unlock_irqrestore(&tp->lock, flags); in sis190_get_regs()
1780 struct sis190_private *tp = netdev_priv(dev); in sis190_nway_reset() local
1782 return mii_nway_restart(&tp->mii_if); in sis190_nway_reset()
1787 struct sis190_private *tp = netdev_priv(dev); in sis190_get_msglevel() local
1789 return tp->msg_enable; in sis190_get_msglevel()
1794 struct sis190_private *tp = netdev_priv(dev); in sis190_set_msglevel() local
1796 tp->msg_enable = value; in sis190_set_msglevel()
1813 struct sis190_private *tp = netdev_priv(dev); in sis190_ioctl() local
1816 generic_mii_ioctl(&tp->mii_if, if_mii(ifr), cmd, NULL); in sis190_ioctl()
1848 struct sis190_private *tp; in sis190_init_one() local
1867 tp = netdev_priv(dev); in sis190_init_one()
1868 ioaddr = tp->mmio_addr; in sis190_init_one()
1876 INIT_WORK(&tp->phy_task, sis190_phy_task); in sis190_init_one()
1883 spin_lock_init(&tp->lock); in sis190_init_one()
1893 if (netif_msg_probe(tp)) { in sis190_init_one()
1899 (tp->features & F_HAS_RGMII) ? "RGMII" : "GMII"); in sis190_init_one()
1918 struct sis190_private *tp = netdev_priv(dev); in sis190_remove_one() local
1921 cancel_work_sync(&tp->phy_task); in sis190_remove_one()