Lines Matching refs:dev

155 static int	tlan_open(struct net_device *dev);
161 static int tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
164 static void tlan_tx_timeout(struct net_device *dev, unsigned int txqueue);
249 tlan_set_timer(struct net_device *dev, u32 ticks, u32 type) in tlan_set_timer() argument
251 struct tlan_priv *priv = netdev_priv(dev); in tlan_set_timer()
302 struct net_device *dev = pci_get_drvdata(pdev); in tlan_remove_one() local
303 struct tlan_priv *priv = netdev_priv(dev); in tlan_remove_one()
305 unregister_netdev(dev); in tlan_remove_one()
308 dma_free_coherent(&priv->pci_dev->dev, priv->dma_size, in tlan_remove_one()
317 free_netdev(dev); in tlan_remove_one()
320 static void tlan_start(struct net_device *dev) in tlan_start() argument
322 tlan_reset_lists(dev); in tlan_start()
326 tlan_read_and_clear_stats(dev, TLAN_IGNORE); in tlan_start()
327 tlan_reset_adapter(dev); in tlan_start()
328 netif_wake_queue(dev); in tlan_start()
331 static void tlan_stop(struct net_device *dev) in tlan_stop() argument
333 struct tlan_priv *priv = netdev_priv(dev); in tlan_stop()
336 tlan_read_and_clear_stats(dev, TLAN_RECORD); in tlan_stop()
337 outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD); in tlan_stop()
339 tlan_reset_adapter(dev); in tlan_stop()
348 struct net_device *dev = dev_get_drvdata(dev_d); in tlan_suspend() local
350 if (netif_running(dev)) in tlan_suspend()
351 tlan_stop(dev); in tlan_suspend()
353 netif_device_detach(dev); in tlan_suspend()
360 struct net_device *dev = dev_get_drvdata(dev_d); in tlan_resume() local
361 netif_device_attach(dev); in tlan_resume()
363 if (netif_running(dev)) in tlan_resume()
364 tlan_start(dev); in tlan_resume()
446 struct net_device *dev; in tlan_probe1() local
465 dev = alloc_etherdev(sizeof(struct tlan_priv)); in tlan_probe1()
466 if (dev == NULL) { in tlan_probe1()
470 SET_NETDEV_DEV(dev, &pdev->dev); in tlan_probe1()
472 priv = netdev_priv(dev); in tlan_probe1()
475 priv->dev = dev; in tlan_probe1()
483 rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); in tlan_probe1()
504 dev->base_addr = pci_io_base; in tlan_probe1()
505 dev->irq = pdev->irq; in tlan_probe1()
508 pci_set_drvdata(pdev, dev); in tlan_probe1()
521 dev->base_addr = ioaddr; in tlan_probe1()
522 dev->irq = irq; in tlan_probe1()
526 if (dev->mem_start) { in tlan_probe1()
527 priv->aui = dev->mem_start & 0x01; in tlan_probe1()
528 priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 in tlan_probe1()
529 : (dev->mem_start & 0x06) >> 1; in tlan_probe1()
530 priv->speed = ((dev->mem_start & 0x18) == 0x18) ? 0 in tlan_probe1()
531 : (dev->mem_start & 0x18) >> 3; in tlan_probe1()
538 debug = priv->debug = dev->mem_end; in tlan_probe1()
552 rc = tlan_init(dev); in tlan_probe1()
558 rc = register_netdev(dev); in tlan_probe1()
573 tlan_eisa_devices = dev; in tlan_probe1()
577 netdev_info(dev, "irq=%2d, io=%04x, %s, Rev. %d\n", in tlan_probe1()
578 (int)dev->irq, in tlan_probe1()
579 (int)dev->base_addr, in tlan_probe1()
585 dma_free_coherent(&priv->pci_dev->dev, priv->dma_size, in tlan_probe1()
588 free_netdev(dev); in tlan_probe1()
603 struct net_device *dev; in tlan_eisa_cleanup() local
607 dev = tlan_eisa_devices; in tlan_eisa_cleanup()
608 priv = netdev_priv(dev); in tlan_eisa_cleanup()
610 dma_free_coherent(&priv->pci_dev->dev, priv->dma_size, in tlan_eisa_cleanup()
614 release_region(dev->base_addr, 0x10); in tlan_eisa_cleanup()
615 unregister_netdev(dev); in tlan_eisa_cleanup()
617 free_netdev(dev); in tlan_eisa_cleanup()
737 static void tlan_poll(struct net_device *dev) in tlan_poll() argument
739 disable_irq(dev->irq); in tlan_poll()
740 tlan_handle_interrupt(dev->irq, dev); in tlan_poll()
741 enable_irq(dev->irq); in tlan_poll()
760 static void tlan_get_drvinfo(struct net_device *dev, in tlan_get_drvinfo() argument
763 struct tlan_priv *priv = netdev_priv(dev); in tlan_get_drvinfo()
773 static int tlan_get_eeprom_len(struct net_device *dev) in tlan_get_eeprom_len() argument
778 static int tlan_get_eeprom(struct net_device *dev, in tlan_get_eeprom() argument
784 if (tlan_ee_read_byte(dev, i, &data[i])) in tlan_get_eeprom()
814 static int tlan_init(struct net_device *dev) in tlan_init() argument
822 priv = netdev_priv(dev); in tlan_init()
826 priv->dma_storage = dma_alloc_coherent(&priv->pci_dev->dev, dma_size, in tlan_init()
832 dev->name); in tlan_init()
844 err |= tlan_ee_read_byte(dev, in tlan_init()
849 dev->name, err); in tlan_init()
859 eth_hw_addr_set(dev, addr); in tlan_init()
861 netif_carrier_off(dev); in tlan_init()
864 dev->netdev_ops = &tlan_netdev_ops; in tlan_init()
865 dev->ethtool_ops = &tlan_ethtool_ops; in tlan_init()
866 dev->watchdog_timeo = TX_TIMEOUT; in tlan_init()
892 static int tlan_open(struct net_device *dev) in tlan_open() argument
894 struct tlan_priv *priv = netdev_priv(dev); in tlan_open()
897 priv->tlan_rev = tlan_dio_read8(dev->base_addr, TLAN_DEF_REVISION); in tlan_open()
898 err = request_irq(dev->irq, tlan_handle_interrupt, IRQF_SHARED, in tlan_open()
899 dev->name, dev); in tlan_open()
902 netdev_err(dev, "Cannot open because IRQ %d is already in use\n", in tlan_open()
903 dev->irq); in tlan_open()
910 tlan_start(dev); in tlan_open()
913 dev->name, priv->tlan_rev); in tlan_open()
936 static int tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) in tlan_ioctl() argument
938 struct tlan_priv *priv = netdev_priv(dev); in tlan_ioctl()
952 tlan_mii_read_reg(dev, data->phy_id & 0x1f, in tlan_ioctl()
958 tlan_mii_write_reg(dev, data->phy_id & 0x1f, in tlan_ioctl()
978 static void tlan_tx_timeout(struct net_device *dev, unsigned int txqueue) in tlan_tx_timeout() argument
981 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name); in tlan_tx_timeout()
984 tlan_free_lists(dev); in tlan_tx_timeout()
985 tlan_reset_lists(dev); in tlan_tx_timeout()
986 tlan_read_and_clear_stats(dev, TLAN_IGNORE); in tlan_tx_timeout()
987 tlan_reset_adapter(dev); in tlan_tx_timeout()
988 netif_trans_update(dev); /* prevent tx timeout */ in tlan_tx_timeout()
989 netif_wake_queue(dev); in tlan_tx_timeout()
1009 tlan_tx_timeout(priv->dev, UINT_MAX); in tlan_tx_timeout_work()
1035 static netdev_tx_t tlan_start_tx(struct sk_buff *skb, struct net_device *dev) in tlan_start_tx() argument
1037 struct tlan_priv *priv = netdev_priv(dev); in tlan_start_tx()
1045 dev->name); in tlan_start_tx()
1061 dev->name, priv->tx_head, priv->tx_tail); in tlan_start_tx()
1062 netif_stop_queue(dev); in tlan_start_tx()
1069 tail_list->buffer[0].address = dma_map_single(&priv->pci_dev->dev, in tlan_start_tx()
1086 outl(tail_list_phys, dev->base_addr + TLAN_CH_PARM); in tlan_start_tx()
1087 outl(TLAN_HC_GO, dev->base_addr + TLAN_HOST_CMD); in tlan_start_tx()
1133 struct net_device *dev = dev_id; in tlan_handle_interrupt() local
1134 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_interrupt()
1140 host_int = inw(dev->base_addr + TLAN_HOST_INT); in tlan_handle_interrupt()
1146 outw(host_int, dev->base_addr + TLAN_HOST_INT); in tlan_handle_interrupt()
1147 ack = tlan_int_vector[type](dev, host_int); in tlan_handle_interrupt()
1151 outl(host_cmd, dev->base_addr + TLAN_HOST_CMD); in tlan_handle_interrupt()
1178 static int tlan_close(struct net_device *dev) in tlan_close() argument
1180 tlan_stop(dev); in tlan_close()
1182 free_irq(dev->irq, dev); in tlan_close()
1183 tlan_free_lists(dev); in tlan_close()
1184 TLAN_DBG(TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name); in tlan_close()
1208 static struct net_device_stats *tlan_get_stats(struct net_device *dev) in tlan_get_stats() argument
1210 struct tlan_priv *priv = netdev_priv(dev); in tlan_get_stats()
1214 tlan_read_and_clear_stats(dev, TLAN_RECORD); in tlan_get_stats()
1216 TLAN_DBG(TLAN_DEBUG_RX, "RECEIVE: %s EOC count = %d\n", dev->name, in tlan_get_stats()
1218 TLAN_DBG(TLAN_DEBUG_TX, "TRANSMIT: %s Busy count = %d\n", dev->name, in tlan_get_stats()
1221 tlan_print_dio(dev->base_addr); in tlan_get_stats()
1222 tlan_phy_print(dev); in tlan_get_stats()
1231 return &dev->stats; in tlan_get_stats()
1258 static void tlan_set_multicast_list(struct net_device *dev) in tlan_set_multicast_list() argument
1267 if (dev->flags & IFF_PROMISC) { in tlan_set_multicast_list()
1268 tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD); in tlan_set_multicast_list()
1269 tlan_dio_write8(dev->base_addr, in tlan_set_multicast_list()
1272 tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD); in tlan_set_multicast_list()
1273 tlan_dio_write8(dev->base_addr, in tlan_set_multicast_list()
1275 if (dev->flags & IFF_ALLMULTI) { in tlan_set_multicast_list()
1277 tlan_set_mac(dev, i + 1, NULL); in tlan_set_multicast_list()
1278 tlan_dio_write32(dev->base_addr, TLAN_HASH_1, in tlan_set_multicast_list()
1280 tlan_dio_write32(dev->base_addr, TLAN_HASH_2, in tlan_set_multicast_list()
1284 netdev_for_each_mc_addr(ha, dev) { in tlan_set_multicast_list()
1286 tlan_set_mac(dev, i + 1, in tlan_set_multicast_list()
1299 tlan_set_mac(dev, i + 1, NULL); in tlan_set_multicast_list()
1300 tlan_dio_write32(dev->base_addr, TLAN_HASH_1, hash1); in tlan_set_multicast_list()
1301 tlan_dio_write32(dev->base_addr, TLAN_HASH_2, hash2); in tlan_set_multicast_list()
1346 static u32 tlan_handle_tx_eof(struct net_device *dev, u16 host_int) in tlan_handle_tx_eof() argument
1348 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_tx_eof()
1365 dma_unmap_single(&priv->pci_dev->dev, in tlan_handle_tx_eof()
1376 dev->stats.tx_bytes += head_list->frame_size; in tlan_handle_tx_eof()
1379 netif_start_queue(dev); in tlan_handle_tx_eof()
1385 netdev_info(dev, in tlan_handle_tx_eof()
1397 outl(head_list_phys, dev->base_addr + TLAN_CH_PARM); in tlan_handle_tx_eof()
1405 tlan_dio_write8(dev->base_addr, in tlan_handle_tx_eof()
1442 static u32 tlan_handle_stat_overflow(struct net_device *dev, u16 host_int) in tlan_handle_stat_overflow() argument
1444 tlan_read_and_clear_stats(dev, TLAN_RECORD); in tlan_handle_stat_overflow()
1478 static u32 tlan_handle_rx_eof(struct net_device *dev, u16 host_int) in tlan_handle_rx_eof() argument
1480 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_rx_eof()
1505 new_skb = netdev_alloc_skb_ip_align(dev, in tlan_handle_rx_eof()
1511 dma_unmap_single(&priv->pci_dev->dev, frame_dma, in tlan_handle_rx_eof()
1515 dev->stats.rx_bytes += frame_size; in tlan_handle_rx_eof()
1517 skb->protocol = eth_type_trans(skb, dev); in tlan_handle_rx_eof()
1521 dma_map_single(&priv->pci_dev->dev, new_skb->data, in tlan_handle_rx_eof()
1539 netdev_info(dev, in tlan_handle_rx_eof()
1550 outl(head_list_phys, dev->base_addr + TLAN_CH_PARM); in tlan_handle_rx_eof()
1556 tlan_dio_write8(dev->base_addr, in tlan_handle_rx_eof()
1593 static u32 tlan_handle_dummy(struct net_device *dev, u16 host_int) in tlan_handle_dummy() argument
1595 netdev_info(dev, "Test interrupt\n"); in tlan_handle_dummy()
1623 static u32 tlan_handle_tx_eoc(struct net_device *dev, u16 host_int) in tlan_handle_tx_eoc() argument
1625 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_tx_eoc()
1639 netif_stop_queue(dev); in tlan_handle_tx_eoc()
1640 outl(head_list_phys, dev->base_addr + TLAN_CH_PARM); in tlan_handle_tx_eoc()
1674 static u32 tlan_handle_status_check(struct net_device *dev, u16 host_int) in tlan_handle_status_check() argument
1676 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_status_check()
1686 netif_stop_queue(dev); in tlan_handle_status_check()
1687 error = inl(dev->base_addr + TLAN_CH_PARM); in tlan_handle_status_check()
1688 netdev_info(dev, "Adaptor Error = 0x%x\n", error); in tlan_handle_status_check()
1689 tlan_read_and_clear_stats(dev, TLAN_RECORD); in tlan_handle_status_check()
1690 outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD); in tlan_handle_status_check()
1694 netif_wake_queue(dev); in tlan_handle_status_check()
1697 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name); in tlan_handle_status_check()
1700 net_sts = tlan_dio_read8(dev->base_addr, TLAN_NET_STS); in tlan_handle_status_check()
1702 tlan_dio_write8(dev->base_addr, TLAN_NET_STS, net_sts); in tlan_handle_status_check()
1704 dev->name, (unsigned) net_sts); in tlan_handle_status_check()
1707 __tlan_mii_read_reg(dev, phy, TLAN_TLPHY_STS, &tlphy_sts); in tlan_handle_status_check()
1708 __tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl); in tlan_handle_status_check()
1712 __tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, in tlan_handle_status_check()
1717 __tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, in tlan_handle_status_check()
1722 __tlan_phy_print(dev); in tlan_handle_status_check()
1753 static u32 tlan_handle_rx_eoc(struct net_device *dev, u16 host_int) in tlan_handle_rx_eoc() argument
1755 struct tlan_priv *priv = netdev_priv(dev); in tlan_handle_rx_eoc()
1765 outl(head_list_phys, dev->base_addr + TLAN_CH_PARM); in tlan_handle_rx_eoc()
1819 struct net_device *dev = priv->dev; in tlan_timer() local
1827 tlan_phy_power_down(dev); in tlan_timer()
1830 tlan_phy_power_up(dev); in tlan_timer()
1833 tlan_phy_reset(dev); in tlan_timer()
1836 tlan_phy_start_link(dev); in tlan_timer()
1839 tlan_phy_finish_auto_neg(dev); in tlan_timer()
1842 tlan_finish_reset(dev); in tlan_timer()
1849 tlan_dio_write8(dev->base_addr, in tlan_timer()
1891 static void tlan_reset_lists(struct net_device *dev) in tlan_reset_lists() argument
1893 struct tlan_priv *priv = netdev_priv(dev); in tlan_reset_lists()
1919 skb = netdev_alloc_skb_ip_align(dev, TLAN_MAX_FRAME_SIZE + 5); in tlan_reset_lists()
1923 list->buffer[0].address = dma_map_single(&priv->pci_dev->dev, in tlan_reset_lists()
1943 static void tlan_free_lists(struct net_device *dev) in tlan_free_lists() argument
1945 struct tlan_priv *priv = netdev_priv(dev); in tlan_free_lists()
1954 dma_unmap_single(&priv->pci_dev->dev, in tlan_free_lists()
1968 dma_unmap_single(&priv->pci_dev->dev, in tlan_free_lists()
2068 static void tlan_read_and_clear_stats(struct net_device *dev, int record) in tlan_read_and_clear_stats() argument
2076 outw(TLAN_GOOD_TX_FRMS, dev->base_addr + TLAN_DIO_ADR); in tlan_read_and_clear_stats()
2077 tx_good = inb(dev->base_addr + TLAN_DIO_DATA); in tlan_read_and_clear_stats()
2078 tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8; in tlan_read_and_clear_stats()
2079 tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16; in tlan_read_and_clear_stats()
2080 tx_under = inb(dev->base_addr + TLAN_DIO_DATA + 3); in tlan_read_and_clear_stats()
2082 outw(TLAN_GOOD_RX_FRMS, dev->base_addr + TLAN_DIO_ADR); in tlan_read_and_clear_stats()
2083 rx_good = inb(dev->base_addr + TLAN_DIO_DATA); in tlan_read_and_clear_stats()
2084 rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8; in tlan_read_and_clear_stats()
2085 rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16; in tlan_read_and_clear_stats()
2086 rx_over = inb(dev->base_addr + TLAN_DIO_DATA + 3); in tlan_read_and_clear_stats()
2088 outw(TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR); in tlan_read_and_clear_stats()
2089 def_tx = inb(dev->base_addr + TLAN_DIO_DATA); in tlan_read_and_clear_stats()
2090 def_tx += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8; in tlan_read_and_clear_stats()
2091 crc = inb(dev->base_addr + TLAN_DIO_DATA + 2); in tlan_read_and_clear_stats()
2092 code = inb(dev->base_addr + TLAN_DIO_DATA + 3); in tlan_read_and_clear_stats()
2094 outw(TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR); in tlan_read_and_clear_stats()
2095 multi_col = inb(dev->base_addr + TLAN_DIO_DATA); in tlan_read_and_clear_stats()
2096 multi_col += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8; in tlan_read_and_clear_stats()
2097 single_col = inb(dev->base_addr + TLAN_DIO_DATA + 2); in tlan_read_and_clear_stats()
2098 single_col += inb(dev->base_addr + TLAN_DIO_DATA + 3) << 8; in tlan_read_and_clear_stats()
2100 outw(TLAN_EXCESSCOL_FRMS, dev->base_addr + TLAN_DIO_ADR); in tlan_read_and_clear_stats()
2101 excess_col = inb(dev->base_addr + TLAN_DIO_DATA); in tlan_read_and_clear_stats()
2102 late_col = inb(dev->base_addr + TLAN_DIO_DATA + 1); in tlan_read_and_clear_stats()
2103 loss = inb(dev->base_addr + TLAN_DIO_DATA + 2); in tlan_read_and_clear_stats()
2106 dev->stats.rx_packets += rx_good; in tlan_read_and_clear_stats()
2107 dev->stats.rx_errors += rx_over + crc + code; in tlan_read_and_clear_stats()
2108 dev->stats.tx_packets += tx_good; in tlan_read_and_clear_stats()
2109 dev->stats.tx_errors += tx_under + loss; in tlan_read_and_clear_stats()
2110 dev->stats.collisions += multi_col in tlan_read_and_clear_stats()
2113 dev->stats.rx_over_errors += rx_over; in tlan_read_and_clear_stats()
2114 dev->stats.rx_crc_errors += crc; in tlan_read_and_clear_stats()
2115 dev->stats.rx_frame_errors += code; in tlan_read_and_clear_stats()
2117 dev->stats.tx_aborted_errors += tx_under; in tlan_read_and_clear_stats()
2118 dev->stats.tx_carrier_errors += loss; in tlan_read_and_clear_stats()
2144 tlan_reset_adapter(struct net_device *dev) in tlan_reset_adapter() argument
2146 struct tlan_priv *priv = netdev_priv(dev); in tlan_reset_adapter()
2154 netif_carrier_off(dev); in tlan_reset_adapter()
2158 data = inl(dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2160 outl(data, dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2166 data = inl(dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2168 outl(data, dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2173 tlan_dio_write32(dev->base_addr, (u16) i, 0); in tlan_reset_adapter()
2178 tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data); in tlan_reset_adapter()
2182 outl(TLAN_HC_LD_TMR | 0x3f, dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2183 outl(TLAN_HC_LD_THR | 0x9, dev->base_addr + TLAN_HOST_CMD); in tlan_reset_adapter()
2187 outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); in tlan_reset_adapter()
2188 addr = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; in tlan_reset_adapter()
2195 tlan_dio_write8(dev->base_addr, TLAN_INT_DIS, data8); in tlan_reset_adapter()
2197 tlan_phy_detect(dev); in tlan_reset_adapter()
2203 tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x0a); in tlan_reset_adapter()
2205 tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x00); in tlan_reset_adapter()
2208 tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x08); in tlan_reset_adapter()
2216 tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data); in tlan_reset_adapter()
2219 tlan_finish_reset(dev); in tlan_reset_adapter()
2221 tlan_phy_power_down(dev); in tlan_reset_adapter()
2229 tlan_finish_reset(struct net_device *dev) in tlan_finish_reset() argument
2231 struct tlan_priv *priv = netdev_priv(dev); in tlan_finish_reset()
2247 tlan_dio_write8(dev->base_addr, TLAN_NET_CMD, data); in tlan_finish_reset()
2251 tlan_dio_write8(dev->base_addr, TLAN_NET_MASK, data); in tlan_finish_reset()
2252 tlan_dio_write16(dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7); in tlan_finish_reset()
2253 tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &tlphy_id1); in tlan_finish_reset()
2254 tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &tlphy_id2); in tlan_finish_reset()
2259 netdev_info(dev, "Link forced\n"); in tlan_finish_reset()
2261 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status); in tlan_finish_reset()
2263 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status); in tlan_finish_reset()
2268 tlan_mii_read_reg(dev, phy, MII_AN_LPA, in tlan_finish_reset()
2270 tlan_mii_read_reg(dev, phy, TLAN_TLPHY_PAR, in tlan_finish_reset()
2273 netdev_info(dev, in tlan_finish_reset()
2283 netdev_info(dev, "Partner capability:"); in tlan_finish_reset()
2291 netdev_info(dev, "Link active\n"); in tlan_finish_reset()
2299 tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl); in tlan_finish_reset()
2301 tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tlphy_ctl); in tlan_finish_reset()
2302 sio = tlan_dio_read8(dev->base_addr, TLAN_NET_SIO); in tlan_finish_reset()
2304 tlan_dio_write8(dev->base_addr, TLAN_NET_SIO, sio); in tlan_finish_reset()
2308 tlan_set_mac(dev, 0, dev->dev_addr); in tlan_finish_reset()
2310 outb((TLAN_HC_INT_ON >> 8), dev->base_addr + TLAN_HOST_CMD + 1); in tlan_finish_reset()
2313 dev->base_addr + TLAN_HOST_CMD + 1); in tlan_finish_reset()
2314 outl(priv->rx_list_dma, dev->base_addr + TLAN_CH_PARM); in tlan_finish_reset()
2315 outl(TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD); in tlan_finish_reset()
2316 tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK); in tlan_finish_reset()
2317 netif_carrier_on(dev); in tlan_finish_reset()
2319 netdev_info(dev, "Link inactive, will retry in 10 secs...\n"); in tlan_finish_reset()
2320 tlan_set_timer(dev, (10*HZ), TLAN_TIMER_FINISH_RESET); in tlan_finish_reset()
2323 tlan_set_multicast_list(dev); in tlan_finish_reset()
2351 static void tlan_set_mac(struct net_device *dev, int areg, const char *mac) in tlan_set_mac() argument
2359 tlan_dio_write8(dev->base_addr, in tlan_set_mac()
2363 tlan_dio_write8(dev->base_addr, in tlan_set_mac()
2395 static void __tlan_phy_print(struct net_device *dev) in __tlan_phy_print() argument
2397 struct tlan_priv *priv = netdev_priv(dev); in __tlan_phy_print()
2405 netdev_info(dev, "Unmanaged PHY\n"); in __tlan_phy_print()
2407 netdev_info(dev, "PHY 0x%02x\n", phy); in __tlan_phy_print()
2410 __tlan_mii_read_reg(dev, phy, i, &data0); in __tlan_phy_print()
2411 __tlan_mii_read_reg(dev, phy, i + 1, &data1); in __tlan_phy_print()
2412 __tlan_mii_read_reg(dev, phy, i + 2, &data2); in __tlan_phy_print()
2413 __tlan_mii_read_reg(dev, phy, i + 3, &data3); in __tlan_phy_print()
2418 netdev_info(dev, "Invalid PHY\n"); in __tlan_phy_print()
2423 static void tlan_phy_print(struct net_device *dev) in tlan_phy_print() argument
2425 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_print()
2429 __tlan_phy_print(dev); in tlan_phy_print()
2451 static void tlan_phy_detect(struct net_device *dev) in tlan_phy_detect() argument
2453 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_detect()
2464 tlan_mii_read_reg(dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi); in tlan_phy_detect()
2473 tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &control); in tlan_phy_detect()
2474 tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &hi); in tlan_phy_detect()
2475 tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &lo); in tlan_phy_detect()
2493 netdev_info(dev, "Cannot initialize device, no PHY was found!\n"); in tlan_phy_detect()
2500 static void tlan_phy_power_down(struct net_device *dev) in tlan_phy_power_down() argument
2502 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_power_down()
2505 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering down PHY(s).\n", dev->name); in tlan_phy_power_down()
2507 tlan_mii_sync(dev->base_addr); in tlan_phy_power_down()
2508 tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value); in tlan_phy_power_down()
2513 tlan_mii_sync(dev->base_addr); in tlan_phy_power_down()
2514 tlan_mii_write_reg(dev, priv->phy[1], MII_GEN_CTL, value); in tlan_phy_power_down()
2521 tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_PUP); in tlan_phy_power_down()
2528 static void tlan_phy_power_up(struct net_device *dev) in tlan_phy_power_up() argument
2530 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_power_up()
2533 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering up PHY.\n", dev->name); in tlan_phy_power_up()
2534 tlan_mii_sync(dev->base_addr); in tlan_phy_power_up()
2536 tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value); in tlan_phy_power_up()
2537 tlan_mii_sync(dev->base_addr); in tlan_phy_power_up()
2542 tlan_set_timer(dev, msecs_to_jiffies(500), TLAN_TIMER_PHY_RESET); in tlan_phy_power_up()
2549 static void tlan_phy_reset(struct net_device *dev) in tlan_phy_reset() argument
2551 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_reset()
2558 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Resetting PHY.\n", dev->name); in tlan_phy_reset()
2559 tlan_mii_sync(dev->base_addr); in tlan_phy_reset()
2561 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, value); in tlan_phy_reset()
2563 tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &value); in tlan_phy_reset()
2565 netdev_err(dev, "PHY reset timeout\n"); in tlan_phy_reset()
2574 tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_START_LINK); in tlan_phy_reset()
2581 static void tlan_phy_start_link(struct net_device *dev) in tlan_phy_start_link() argument
2583 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_start_link()
2592 TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name); in tlan_phy_start_link()
2593 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status); in tlan_phy_start_link()
2594 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &ability); in tlan_phy_start_link()
2601 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0000); in tlan_phy_start_link()
2605 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0100); in tlan_phy_start_link()
2608 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2000); in tlan_phy_start_link()
2612 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2100); in tlan_phy_start_link()
2616 tlan_mii_write_reg(dev, phy, MII_AN_ADV, in tlan_phy_start_link()
2619 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1000); in tlan_phy_start_link()
2621 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1200); in tlan_phy_start_link()
2627 netdev_info(dev, "Starting autonegotiation\n"); in tlan_phy_start_link()
2628 tlan_set_timer(dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN); in tlan_phy_start_link()
2638 tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, data); in tlan_phy_start_link()
2639 tlan_set_timer(dev, msecs_to_jiffies(40), TLAN_TIMER_PHY_PDOWN); in tlan_phy_start_link()
2643 tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tctl); in tlan_phy_start_link()
2655 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, control); in tlan_phy_start_link()
2656 tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tctl); in tlan_phy_start_link()
2662 tlan_set_timer(dev, (4*HZ), TLAN_TIMER_FINISH_RESET); in tlan_phy_start_link()
2669 static void tlan_phy_finish_auto_neg(struct net_device *dev) in tlan_phy_finish_auto_neg() argument
2671 struct tlan_priv *priv = netdev_priv(dev); in tlan_phy_finish_auto_neg()
2680 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status); in tlan_phy_finish_auto_neg()
2682 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status); in tlan_phy_finish_auto_neg()
2688 tlan_set_timer(dev, 2 * HZ, TLAN_TIMER_PHY_FINISH_AN); in tlan_phy_finish_auto_neg()
2692 netdev_info(dev, "Autonegotiation complete\n"); in tlan_phy_finish_auto_neg()
2693 tlan_mii_read_reg(dev, phy, MII_AN_ADV, &an_adv); in tlan_phy_finish_auto_neg()
2694 tlan_mii_read_reg(dev, phy, MII_AN_LPA, &an_lpa); in tlan_phy_finish_auto_neg()
2706 tlan_set_timer(dev, msecs_to_jiffies(400), TLAN_TIMER_PHY_PDOWN); in tlan_phy_finish_auto_neg()
2713 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, in tlan_phy_finish_auto_neg()
2715 netdev_info(dev, "Starting internal PHY with FULL-DUPLEX\n"); in tlan_phy_finish_auto_neg()
2717 tlan_mii_write_reg(dev, phy, MII_GEN_CTL, in tlan_phy_finish_auto_neg()
2719 netdev_info(dev, "Starting internal PHY with HALF-DUPLEX\n"); in tlan_phy_finish_auto_neg()
2725 tlan_set_timer(dev, msecs_to_jiffies(100), TLAN_TIMER_FINISH_RESET); in tlan_phy_finish_auto_neg()
2750 struct net_device *dev = priv->dev; in tlan_phy_monitor() local
2757 tlan_mii_read_reg(dev, phy, MII_GEN_STS, &phy_status); in tlan_phy_monitor()
2761 if (netif_carrier_ok(dev)) { in tlan_phy_monitor()
2763 dev->name); in tlan_phy_monitor()
2764 tlan_dio_write8(dev->base_addr, TLAN_LED_REG, 0); in tlan_phy_monitor()
2765 netif_carrier_off(dev); in tlan_phy_monitor()
2771 tlan_mii_sync(dev->base_addr); in tlan_phy_monitor()
2772 tlan_mii_write_reg(dev, priv->phy[0], in tlan_phy_monitor()
2777 tlan_set_timer(dev, msecs_to_jiffies(400), in tlan_phy_monitor()
2785 if ((phy_status & MII_GS_LINK) && !netif_carrier_ok(dev)) { in tlan_phy_monitor()
2786 tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK); in tlan_phy_monitor()
2788 dev->name); in tlan_phy_monitor()
2789 netif_carrier_on(dev); in tlan_phy_monitor()
2833 __tlan_mii_read_reg(struct net_device *dev, u16 phy, u16 reg, u16 *val) in __tlan_mii_read_reg() argument
2840 struct tlan_priv *priv = netdev_priv(dev); in __tlan_mii_read_reg()
2845 outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); in __tlan_mii_read_reg()
2846 sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; in __tlan_mii_read_reg()
2848 tlan_mii_sync(dev->base_addr); in __tlan_mii_read_reg()
2854 tlan_mii_send_data(dev->base_addr, 0x1, 2); /* start (01b) */ in __tlan_mii_read_reg()
2855 tlan_mii_send_data(dev->base_addr, 0x2, 2); /* read (10b) */ in __tlan_mii_read_reg()
2856 tlan_mii_send_data(dev->base_addr, phy, 5); /* device # */ in __tlan_mii_read_reg()
2857 tlan_mii_send_data(dev->base_addr, reg, 5); /* register # */ in __tlan_mii_read_reg()
2896 static void tlan_mii_read_reg(struct net_device *dev, u16 phy, u16 reg, in tlan_mii_read_reg() argument
2899 struct tlan_priv *priv = netdev_priv(dev); in tlan_mii_read_reg()
2903 __tlan_mii_read_reg(dev, phy, reg, val); in tlan_mii_read_reg()
3007 __tlan_mii_write_reg(struct net_device *dev, u16 phy, u16 reg, u16 val) in __tlan_mii_write_reg() argument
3011 struct tlan_priv *priv = netdev_priv(dev); in __tlan_mii_write_reg()
3015 outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); in __tlan_mii_write_reg()
3016 sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; in __tlan_mii_write_reg()
3018 tlan_mii_sync(dev->base_addr); in __tlan_mii_write_reg()
3024 tlan_mii_send_data(dev->base_addr, 0x1, 2); /* start (01b) */ in __tlan_mii_write_reg()
3025 tlan_mii_send_data(dev->base_addr, 0x1, 2); /* write (01b) */ in __tlan_mii_write_reg()
3026 tlan_mii_send_data(dev->base_addr, phy, 5); /* device # */ in __tlan_mii_write_reg()
3027 tlan_mii_send_data(dev->base_addr, reg, 5); /* register # */ in __tlan_mii_write_reg()
3029 tlan_mii_send_data(dev->base_addr, 0x2, 2); /* send ACK */ in __tlan_mii_write_reg()
3030 tlan_mii_send_data(dev->base_addr, val, 16); /* send data */ in __tlan_mii_write_reg()
3041 tlan_mii_write_reg(struct net_device *dev, u16 phy, u16 reg, u16 val) in tlan_mii_write_reg() argument
3043 struct tlan_priv *priv = netdev_priv(dev); in tlan_mii_write_reg()
3047 __tlan_mii_write_reg(dev, phy, reg, val); in tlan_mii_write_reg()
3242 static int tlan_ee_read_byte(struct net_device *dev, u8 ee_addr, u8 *data) in tlan_ee_read_byte() argument
3245 struct tlan_priv *priv = netdev_priv(dev); in tlan_ee_read_byte()
3251 tlan_ee_send_start(dev->base_addr); in tlan_ee_read_byte()
3252 err = tlan_ee_send_byte(dev->base_addr, 0xa0, TLAN_EEPROM_ACK); in tlan_ee_read_byte()
3257 err = tlan_ee_send_byte(dev->base_addr, ee_addr, TLAN_EEPROM_ACK); in tlan_ee_read_byte()
3262 tlan_ee_send_start(dev->base_addr); in tlan_ee_read_byte()
3263 err = tlan_ee_send_byte(dev->base_addr, 0xa1, TLAN_EEPROM_ACK); in tlan_ee_read_byte()
3268 tlan_ee_receive_byte(dev->base_addr, data, TLAN_EEPROM_STOP); in tlan_ee_read_byte()