Lines Matching refs:lp

682     imr |= lp->irq_en;\
688 imr &= ~lp->irq_en;\
693 imr |= lp->irq_mask;\
699 imr &= ~lp->irq_mask;\
888 #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
889 lp->tx_old+lp->txRingSize-lp->tx_new-1:\
890 lp->tx_old -lp->tx_new-1)
892 #define TX_PKT_PENDING (lp->tx_old != lp->tx_new)
954 static int PCI_signature(char *name, struct de4x5_private *lp);
957 static int de4x5_bad_srom(struct de4x5_private *lp);
985 static int an_exception(struct de4x5_private *lp);
1098 struct de4x5_private *lp = netdev_priv(dev); in de4x5_hw_init() local
1105 if (lp->bus == EISA) { in de4x5_hw_init()
1122 lp->useSROM = false; in de4x5_hw_init()
1123 if (lp->bus == PCI) { in de4x5_hw_init()
1124 PCI_signature(name, lp); in de4x5_hw_init()
1143 skb_queue_head_init(&lp->cache.queue); in de4x5_hw_init()
1144 lp->cache.gepc = GEP_INIT; in de4x5_hw_init()
1145 lp->asBit = GEP_SLNK; in de4x5_hw_init()
1146 lp->asPolarity = GEP_SLNK; in de4x5_hw_init()
1147 lp->asBitValid = ~0; in de4x5_hw_init()
1148 lp->timeout = -1; in de4x5_hw_init()
1149 lp->gendev = gendev; in de4x5_hw_init()
1150 spin_lock_init(&lp->lock); in de4x5_hw_init()
1151 init_timer(&lp->timer); in de4x5_hw_init()
1152 lp->timer.function = (void (*)(unsigned long))de4x5_ast; in de4x5_hw_init()
1153 lp->timer.data = (unsigned long)dev; in de4x5_hw_init()
1159 lp->autosense = lp->params.autosense; in de4x5_hw_init()
1160 if (lp->chipset != DC21140) { in de4x5_hw_init()
1161 if ((lp->chipset==DC21040) && (lp->params.autosense&TP_NW)) { in de4x5_hw_init()
1162 lp->params.autosense = TP; in de4x5_hw_init()
1164 if ((lp->chipset==DC21041) && (lp->params.autosense&BNC_AUI)) { in de4x5_hw_init()
1165 lp->params.autosense = BNC; in de4x5_hw_init()
1168 lp->fdx = lp->params.fdx; in de4x5_hw_init()
1169 sprintf(lp->adapter_name,"%s (%s)", name, dev_name(gendev)); in de4x5_hw_init()
1171 lp->dma_size = (NUM_RX_DESC + NUM_TX_DESC) * sizeof(struct de4x5_desc); in de4x5_hw_init()
1173 lp->dma_size += RX_BUFF_SZ * NUM_RX_DESC + DE4X5_ALIGN; in de4x5_hw_init()
1175 lp->rx_ring = dma_alloc_coherent(gendev, lp->dma_size, in de4x5_hw_init()
1176 &lp->dma_rings, GFP_ATOMIC); in de4x5_hw_init()
1177 if (lp->rx_ring == NULL) { in de4x5_hw_init()
1181 lp->tx_ring = lp->rx_ring + NUM_RX_DESC; in de4x5_hw_init()
1189 lp->rx_ring[i].status = 0; in de4x5_hw_init()
1190 lp->rx_ring[i].des1 = cpu_to_le32(RX_BUFF_SZ); in de4x5_hw_init()
1191 lp->rx_ring[i].buf = 0; in de4x5_hw_init()
1192 lp->rx_ring[i].next = 0; in de4x5_hw_init()
1193 lp->rx_skb[i] = (struct sk_buff *) 1; /* Dummy entry */ in de4x5_hw_init()
1200 dma_rx_bufs = lp->dma_rings + (NUM_RX_DESC + NUM_TX_DESC) in de4x5_hw_init()
1203 lp->rx_bufs = (char *)(((long)(lp->rx_ring + NUM_RX_DESC in de4x5_hw_init()
1206 lp->rx_ring[i].status = 0; in de4x5_hw_init()
1207 lp->rx_ring[i].des1 = cpu_to_le32(RX_BUFF_SZ); in de4x5_hw_init()
1208 lp->rx_ring[i].buf = in de4x5_hw_init()
1210 lp->rx_ring[i].next = 0; in de4x5_hw_init()
1211 lp->rx_skb[i] = (struct sk_buff *) 1; /* Dummy entry */ in de4x5_hw_init()
1219 lp->rxRingSize = NUM_RX_DESC; in de4x5_hw_init()
1220 lp->txRingSize = NUM_TX_DESC; in de4x5_hw_init()
1223 lp->rx_ring[lp->rxRingSize - 1].des1 |= cpu_to_le32(RD_RER); in de4x5_hw_init()
1224 lp->tx_ring[lp->txRingSize - 1].des1 |= cpu_to_le32(TD_TER); in de4x5_hw_init()
1227 outl(lp->dma_rings, DE4X5_RRBA); in de4x5_hw_init()
1228 outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc), in de4x5_hw_init()
1232 lp->irq_mask = IMR_RIM | IMR_TIM | IMR_TUM | IMR_UNM; in de4x5_hw_init()
1233 lp->irq_en = IMR_NIM | IMR_AIM; in de4x5_hw_init()
1236 create_packet(dev, lp->frame, sizeof(lp->frame)); in de4x5_hw_init()
1239 i = lp->cfrv & 0x000000fe; in de4x5_hw_init()
1240 if ((lp->chipset == DC21140) && (i == 0x20)) { in de4x5_hw_init()
1241 lp->rx_ovf = 1; in de4x5_hw_init()
1245 if (lp->useSROM) { in de4x5_hw_init()
1246 lp->state = INITIALISED; in de4x5_hw_init()
1248 dma_free_coherent (gendev, lp->dma_size, in de4x5_hw_init()
1249 lp->rx_ring, lp->dma_rings); in de4x5_hw_init()
1255 lp->state = CLOSED; in de4x5_hw_init()
1260 if ((lp->chipset != DC21040) && (lp->chipset != DC21041)) { in de4x5_hw_init()
1265 ((lp->bus == PCI) ? "PCI BIOS" : "EISA CNFG")); in de4x5_hw_init()
1279 dma_free_coherent (gendev, lp->dma_size, in de4x5_hw_init()
1280 lp->rx_ring, lp->dma_rings); in de4x5_hw_init()
1294 struct de4x5_private *lp = netdev_priv(dev); in de4x5_open() local
1300 for (i=0; i<lp->rxRingSize; i++) { in de4x5_open()
1316 spin_lock_init(&lp->lock); in de4x5_open()
1317 lp->state = OPEN; in de4x5_open()
1321 lp->adapter_name, dev)) { in de4x5_open()
1324 lp->adapter_name, dev)) { in de4x5_open()
1330 lp->state = CLOSED; in de4x5_open()
1338 lp->interrupt = UNMASK_INTERRUPTS; in de4x5_open()
1384 struct de4x5_private *lp = netdev_priv(dev); in de4x5_sw_reset() local
1390 if (!lp->useSROM) { in de4x5_sw_reset()
1391 if (lp->phy[lp->active].id != 0) { in de4x5_sw_reset()
1392 lp->infoblock_csr6 = OMR_SDP | OMR_PS | OMR_HBD; in de4x5_sw_reset()
1394 lp->infoblock_csr6 = OMR_SDP | OMR_TTM; in de4x5_sw_reset()
1404 bmr = (lp->chipset==DC21140 ? PBL_8 : PBL_4) | DESC_SKIP_LEN | DE4X5_CACHE_ALIGN; in de4x5_sw_reset()
1405 bmr |= ((lp->chipset & ~0x00ff)==DC2114x ? BMR_RML : 0); in de4x5_sw_reset()
1409 if (lp->chipset == DC21140) { in de4x5_sw_reset()
1412 lp->setup_f = PERFECT; in de4x5_sw_reset()
1413 outl(lp->dma_rings, DE4X5_RRBA); in de4x5_sw_reset()
1414 outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc), in de4x5_sw_reset()
1417 lp->rx_new = lp->rx_old = 0; in de4x5_sw_reset()
1418 lp->tx_new = lp->tx_old = 0; in de4x5_sw_reset()
1420 for (i = 0; i < lp->rxRingSize; i++) { in de4x5_sw_reset()
1421 lp->rx_ring[i].status = cpu_to_le32(R_OWN); in de4x5_sw_reset()
1424 for (i = 0; i < lp->txRingSize; i++) { in de4x5_sw_reset()
1425 lp->tx_ring[i].status = cpu_to_le32(0); in de4x5_sw_reset()
1433 load_packet(dev, lp->setup_frame, PERFECT_F|TD_SET|SETUP_FRAME_LEN, (struct sk_buff *)1); in de4x5_sw_reset()
1440 if ((s32)le32_to_cpu(lp->tx_ring[lp->tx_new].status) >= 0) j=1; in de4x5_sw_reset()
1450 lp->tx_new = (lp->tx_new + 1) % lp->txRingSize; in de4x5_sw_reset()
1451 lp->tx_old = lp->tx_new; in de4x5_sw_reset()
1462 struct de4x5_private *lp = netdev_priv(dev); in de4x5_queue_pkt() local
1467 if (!lp->tx_enable) /* Cannot send for now */ in de4x5_queue_pkt()
1475 spin_lock_irqsave(&lp->lock, flags); in de4x5_queue_pkt()
1477 spin_unlock_irqrestore(&lp->lock, flags); in de4x5_queue_pkt()
1480 if (test_and_set_bit(0, (void *)&lp->cache.lock) && !lp->interrupt) in de4x5_queue_pkt()
1484 if (netif_queue_stopped(dev) || (u_long) lp->tx_skb[lp->tx_new] > 1) { in de4x5_queue_pkt()
1485 if (lp->interrupt) { in de4x5_queue_pkt()
1491 …, netif_queue_stopped(dev), inl(DE4X5_IMR), inl(DE4X5_OMR), ((u_long) lp->tx_skb[lp->tx_new] > 1) … in de4x5_queue_pkt()
1495 if (!skb_queue_empty(&lp->cache.queue) && !lp->interrupt) { in de4x5_queue_pkt()
1501 (u_long) lp->tx_skb[lp->tx_new] <= 1) { in de4x5_queue_pkt()
1502 spin_lock_irqsave(&lp->lock, flags); in de4x5_queue_pkt()
1505 lp->stats.tx_bytes += skb->len; in de4x5_queue_pkt()
1508 lp->tx_new = (lp->tx_new + 1) % lp->txRingSize; in de4x5_queue_pkt()
1514 spin_unlock_irqrestore(&lp->lock, flags); in de4x5_queue_pkt()
1519 lp->cache.lock = 0; in de4x5_queue_pkt()
1539 struct de4x5_private *lp; in de4x5_interrupt() local
1544 lp = netdev_priv(dev); in de4x5_interrupt()
1545 spin_lock(&lp->lock); in de4x5_interrupt()
1550 if (test_and_set_bit(MASK_INTERRUPTS, (void*) &lp->interrupt)) in de4x5_interrupt()
1559 if (!(sts & lp->irq_mask)) break;/* All done */ in de4x5_interrupt()
1569 lp->irq_mask &= ~IMR_LFM; in de4x5_interrupt()
1580 spin_unlock(&lp->lock); in de4x5_interrupt()
1586 if (!test_and_set_bit(0, (void *)&lp->cache.lock)) { in de4x5_interrupt()
1587 while (!skb_queue_empty(&lp->cache.queue) && !netif_queue_stopped(dev) && lp->tx_enable) { in de4x5_interrupt()
1590 lp->cache.lock = 0; in de4x5_interrupt()
1593 lp->interrupt = UNMASK_INTERRUPTS; in de4x5_interrupt()
1595 spin_unlock(&lp->lock); in de4x5_interrupt()
1603 struct de4x5_private *lp = netdev_priv(dev); in de4x5_rx() local
1608 for (entry=lp->rx_new; (s32)le32_to_cpu(lp->rx_ring[entry].status)>=0; in de4x5_rx()
1609 entry=lp->rx_new) { in de4x5_rx()
1610 status = (s32)le32_to_cpu(lp->rx_ring[entry].status); in de4x5_rx()
1612 if (lp->rx_ovf) { in de4x5_rx()
1620 lp->rx_old = entry; in de4x5_rx()
1624 if (lp->tx_enable) lp->linkOK++; in de4x5_rx()
1626 lp->stats.rx_errors++; /* Update the error stats. */ in de4x5_rx()
1627 if (status & (RD_RF | RD_TL)) lp->stats.rx_frame_errors++; in de4x5_rx()
1628 if (status & RD_CE) lp->stats.rx_crc_errors++; in de4x5_rx()
1629 if (status & RD_OF) lp->stats.rx_fifo_errors++; in de4x5_rx()
1630 if (status & RD_TL) lp->stats.rx_length_errors++; in de4x5_rx()
1631 if (status & RD_RF) lp->pktStats.rx_runt_frames++; in de4x5_rx()
1632 if (status & RD_CS) lp->pktStats.rx_collision++; in de4x5_rx()
1633 if (status & RD_DB) lp->pktStats.rx_dribble++; in de4x5_rx()
1634 if (status & RD_OF) lp->pktStats.rx_overflow++; in de4x5_rx()
1637 short pkt_len = (short)(le32_to_cpu(lp->rx_ring[entry].status) in de4x5_rx()
1643 lp->stats.rx_dropped++; in de4x5_rx()
1653 lp->stats.rx_packets++; in de4x5_rx()
1654 lp->stats.rx_bytes += pkt_len; in de4x5_rx()
1659 for (;lp->rx_old!=entry;lp->rx_old=(lp->rx_old + 1)%lp->rxRingSize) { in de4x5_rx()
1660 lp->rx_ring[lp->rx_old].status = cpu_to_le32(R_OWN); in de4x5_rx()
1663 lp->rx_ring[entry].status = cpu_to_le32(R_OWN); in de4x5_rx()
1670 lp->rx_new = (lp->rx_new + 1) % lp->rxRingSize; in de4x5_rx()
1677 de4x5_free_tx_buff(struct de4x5_private *lp, int entry) in de4x5_free_tx_buff() argument
1679 dma_unmap_single(lp->gendev, le32_to_cpu(lp->tx_ring[entry].buf), in de4x5_free_tx_buff()
1680 le32_to_cpu(lp->tx_ring[entry].des1) & TD_TBS1, in de4x5_free_tx_buff()
1682 if ((u_long) lp->tx_skb[entry] > 1) in de4x5_free_tx_buff()
1683 dev_kfree_skb_irq(lp->tx_skb[entry]); in de4x5_free_tx_buff()
1684 lp->tx_skb[entry] = NULL; in de4x5_free_tx_buff()
1693 struct de4x5_private *lp = netdev_priv(dev); in de4x5_tx() local
1698 for (entry = lp->tx_old; entry != lp->tx_new; entry = lp->tx_old) { in de4x5_tx()
1699 status = (s32)le32_to_cpu(lp->tx_ring[entry].status); in de4x5_tx()
1704 lp->stats.tx_errors++; in de4x5_tx()
1705 if (status & TD_NC) lp->stats.tx_carrier_errors++; in de4x5_tx()
1706 if (status & TD_LC) lp->stats.tx_window_errors++; in de4x5_tx()
1707 if (status & TD_UF) lp->stats.tx_fifo_errors++; in de4x5_tx()
1708 if (status & TD_EC) lp->pktStats.excessive_collisions++; in de4x5_tx()
1709 if (status & TD_DE) lp->stats.tx_aborted_errors++; in de4x5_tx()
1715 lp->stats.tx_packets++; in de4x5_tx()
1716 if (lp->tx_enable) lp->linkOK++; in de4x5_tx()
1719 lp->stats.collisions += ((status & TD_EC) ? 16 : in de4x5_tx()
1723 if (lp->tx_skb[entry] != NULL) in de4x5_tx()
1724 de4x5_free_tx_buff(lp, entry); in de4x5_tx()
1728 lp->tx_old = (lp->tx_old + 1) % lp->txRingSize; in de4x5_tx()
1733 if (lp->interrupt) in de4x5_tx()
1745 struct de4x5_private *lp = netdev_priv(dev); in de4x5_ast() local
1749 if (lp->useSROM) in de4x5_ast()
1751 else if (lp->chipset == DC21140) in de4x5_ast()
1753 else if (lp->chipset == DC21041) in de4x5_ast()
1755 else if (lp->chipset == DC21040) in de4x5_ast()
1757 lp->linkOK = 0; in de4x5_ast()
1764 mod_timer(&lp->timer, jiffies + dt); in de4x5_ast()
1770 struct de4x5_private *lp = netdev_priv(dev); in de4x5_txur() local
1775 if (!(omr & OMR_SF) || (lp->chipset==DC21041) || (lp->chipset==DC21040)) { in de4x5_txur()
1793 struct de4x5_private *lp = netdev_priv(dev); in de4x5_rx_ovfc() local
1801 for (; (s32)le32_to_cpu(lp->rx_ring[lp->rx_new].status)>=0;) { in de4x5_rx_ovfc()
1802 lp->rx_ring[lp->rx_new].status = cpu_to_le32(R_OWN); in de4x5_rx_ovfc()
1803 lp->rx_new = (lp->rx_new + 1) % lp->rxRingSize; in de4x5_rx_ovfc()
1814 struct de4x5_private *lp = netdev_priv(dev); in de4x5_close() local
1835 lp->state = CLOSED; in de4x5_close()
1850 struct de4x5_private *lp = netdev_priv(dev); in de4x5_get_stats() local
1853 lp->stats.rx_missed_errors = (int)(inl(DE4X5_MFC) & (MFC_OVFL | MFC_CNTR)); in de4x5_get_stats()
1855 return &lp->stats; in de4x5_get_stats()
1861 struct de4x5_private *lp = netdev_priv(dev); in de4x5_local_stats() local
1866 lp->pktStats.bins[i]++; in de4x5_local_stats()
1872 lp->pktStats.broadcast++; in de4x5_local_stats()
1874 lp->pktStats.multicast++; in de4x5_local_stats()
1877 lp->pktStats.unicast++; in de4x5_local_stats()
1880 lp->pktStats.bins[0]++; /* Duplicates stats.rx_packets */ in de4x5_local_stats()
1881 if (lp->pktStats.bins[0] == 0) { /* Reset counters */ in de4x5_local_stats()
1882 memset((char *)&lp->pktStats, 0, sizeof(lp->pktStats)); in de4x5_local_stats()
1897 struct de4x5_private *lp = netdev_priv(dev); in load_packet() local
1898 int entry = (lp->tx_new ? lp->tx_new-1 : lp->txRingSize-1); in load_packet()
1899 dma_addr_t buf_dma = dma_map_single(lp->gendev, buf, flags & TD_TBS1, DMA_TO_DEVICE); in load_packet()
1901 lp->tx_ring[lp->tx_new].buf = cpu_to_le32(buf_dma); in load_packet()
1902 lp->tx_ring[lp->tx_new].des1 &= cpu_to_le32(TD_TER); in load_packet()
1903 lp->tx_ring[lp->tx_new].des1 |= cpu_to_le32(flags); in load_packet()
1904 lp->tx_skb[lp->tx_new] = skb; in load_packet()
1905 lp->tx_ring[entry].des1 &= cpu_to_le32(~TD_IC); in load_packet()
1908 lp->tx_ring[lp->tx_new].status = cpu_to_le32(T_OWN); in load_packet()
1918 struct de4x5_private *lp = netdev_priv(dev); in set_multicast_list() local
1922 if (lp->state == OPEN) { in set_multicast_list()
1930 load_packet(dev, lp->setup_frame, TD_IC | PERFECT_F | TD_SET | in set_multicast_list()
1933 lp->tx_new = (lp->tx_new + 1) % lp->txRingSize; in set_multicast_list()
1948 struct de4x5_private *lp = netdev_priv(dev); in SetMulticastFilter() local
1963 } else if (lp->setup_f == HASH_PERF) { /* Hash Filtering */ in SetMulticastFilter()
1975 lp->setup_frame[byte] |= bit; in SetMulticastFilter()
2002 struct de4x5_private *lp; in de4x5_eisa_probe() local
2020 lp = netdev_priv(dev); in de4x5_eisa_probe()
2023 lp->cfrv = (u_short) inl(PCI_CFRV); in de4x5_eisa_probe()
2052 device = ((lp->cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143); in de4x5_eisa_probe()
2054 lp->chipset = device; in de4x5_eisa_probe()
2055 lp->bus = EISA; in de4x5_eisa_probe()
2128 struct de4x5_private *lp = netdev_priv(dev); in srom_search() local
2140 lp->device = PCI_SLOT(this_dev->devfn); in srom_search()
2141 lp->bus_num = pb; in srom_search()
2148 lp->chipset = device; in srom_search()
2164 j += (u_char) *((u_char *)&lp->srom + SROM_HWADD + i); in srom_search()
2171 last.addr[i] = (u_char)*((u_char *)&lp->srom + SROM_HWADD + i); in srom_search()
2203 struct de4x5_private *lp; in de4x5_pci_probe() local
2229 lp = netdev_priv(dev); in de4x5_pci_probe()
2230 lp->bus = PCI; in de4x5_pci_probe()
2231 lp->bus_num = 0; in de4x5_pci_probe()
2234 if (lp->bus_num != pb) { in de4x5_pci_probe()
2235 lp->bus_num = pb; in de4x5_pci_probe()
2240 lp->cfrv = pdev->revision; in de4x5_pci_probe()
2243 lp->device = dev_num; in de4x5_pci_probe()
2244 lp->bus_num = pb; in de4x5_pci_probe()
2248 device = ((lp->cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143); in de4x5_pci_probe()
2250 lp->chipset = device; in de4x5_pci_probe()
2361 struct de4x5_private *lp = netdev_priv(dev); in autoconf_media() local
2366 lp->c_media = AUTO; /* Bogus last media */ in autoconf_media()
2368 lp->media = INIT; in autoconf_media()
2369 lp->tcount = 0; in autoconf_media()
2373 return lp->media; in autoconf_media()
2391 struct de4x5_private *lp = netdev_priv(dev); in dc21040_autoconf() local
2396 switch (lp->media) { in dc21040_autoconf()
2399 lp->tx_enable = false; in dc21040_autoconf()
2400 lp->timeout = -1; in dc21040_autoconf()
2402 if ((lp->autosense == AUTO) || (lp->autosense == TP)) { in dc21040_autoconf()
2403 lp->media = TP; in dc21040_autoconf()
2404 } else if ((lp->autosense == BNC) || (lp->autosense == AUI) || (lp->autosense == BNC_AUI)) { in dc21040_autoconf()
2405 lp->media = BNC_AUI; in dc21040_autoconf()
2406 } else if (lp->autosense == EXT_SIA) { in dc21040_autoconf()
2407 lp->media = EXT_SIA; in dc21040_autoconf()
2409 lp->media = NC; in dc21040_autoconf()
2411 lp->local_state = 0; in dc21040_autoconf()
2447 if (lp->media != lp->c_media) { in dc21040_autoconf()
2449 lp->c_media = lp->media; in dc21040_autoconf()
2451 lp->media = INIT; in dc21040_autoconf()
2452 lp->tx_enable = false; in dc21040_autoconf()
2464 struct de4x5_private *lp = netdev_priv(dev); in dc21040_state() local
2468 switch (lp->local_state) { in dc21040_state()
2471 lp->local_state++; in dc21040_state()
2476 if (!lp->tx_enable) { in dc21040_state()
2481 if (linkBad && (lp->autosense == AUTO)) { in dc21040_state()
2482 lp->local_state = 0; in dc21040_state()
2483 lp->media = next_state; in dc21040_state()
2488 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21040_state()
2489 lp->media = suspect_state; in dc21040_state()
2503 struct de4x5_private *lp = netdev_priv(dev); in de4x5_suspect_state() local
2507 switch (lp->local_state) { in de4x5_suspect_state()
2509 if (lp->linkOK) { in de4x5_suspect_state()
2510 lp->media = prev_state; in de4x5_suspect_state()
2512 lp->local_state++; in de4x5_suspect_state()
2522 lp->local_state--; in de4x5_suspect_state()
2523 lp->media = prev_state; in de4x5_suspect_state()
2525 lp->media = INIT; in de4x5_suspect_state()
2526 lp->tcount++; in de4x5_suspect_state()
2545 struct de4x5_private *lp = netdev_priv(dev); in dc21041_autoconf() local
2550 switch (lp->media) { in dc21041_autoconf()
2553 lp->tx_enable = false; in dc21041_autoconf()
2554 lp->timeout = -1; in dc21041_autoconf()
2556 if ((lp->autosense == AUTO) || (lp->autosense == TP_NW)) { in dc21041_autoconf()
2557 lp->media = TP; /* On chip auto negotiation is broken */ in dc21041_autoconf()
2558 } else if (lp->autosense == TP) { in dc21041_autoconf()
2559 lp->media = TP; in dc21041_autoconf()
2560 } else if (lp->autosense == BNC) { in dc21041_autoconf()
2561 lp->media = BNC; in dc21041_autoconf()
2562 } else if (lp->autosense == AUI) { in dc21041_autoconf()
2563 lp->media = AUI; in dc21041_autoconf()
2565 lp->media = NC; in dc21041_autoconf()
2567 lp->local_state = 0; in dc21041_autoconf()
2572 if (lp->timeout < 0) { in dc21041_autoconf()
2583 lp->media = ANS; in dc21041_autoconf()
2585 lp->media = AUI; in dc21041_autoconf()
2592 if (!lp->tx_enable) { in dc21041_autoconf()
2599 if (!(sts & STS_LNP) && (lp->autosense == AUTO)) { in dc21041_autoconf()
2600 lp->media = TP; in dc21041_autoconf()
2603 lp->local_state = 1; in dc21041_autoconf()
2607 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21041_autoconf()
2608 lp->media = ANS_SUSPECT; in dc21041_autoconf()
2618 if (!lp->tx_enable) { in dc21041_autoconf()
2619 if (lp->timeout < 0) { in dc21041_autoconf()
2629 if (!(sts & STS_LNP) && (lp->autosense == AUTO)) { in dc21041_autoconf()
2631 lp->media = AUI; /* Non selected port activity */ in dc21041_autoconf()
2633 lp->media = BNC; in dc21041_autoconf()
2637 lp->local_state = 1; in dc21041_autoconf()
2641 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21041_autoconf()
2642 lp->media = TP_SUSPECT; in dc21041_autoconf()
2652 if (!lp->tx_enable) { in dc21041_autoconf()
2653 if (lp->timeout < 0) { in dc21041_autoconf()
2663 if (!(inl(DE4X5_SISR) & SISR_SRA) && (lp->autosense == AUTO)) { in dc21041_autoconf()
2664 lp->media = BNC; in dc21041_autoconf()
2667 lp->local_state = 1; in dc21041_autoconf()
2671 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21041_autoconf()
2672 lp->media = AUI_SUSPECT; in dc21041_autoconf()
2682 switch (lp->local_state) { in dc21041_autoconf()
2684 if (lp->timeout < 0) { in dc21041_autoconf()
2694 lp->local_state++; /* Ensure media connected */ in dc21041_autoconf()
2700 if (!lp->tx_enable) { in dc21041_autoconf()
2705 lp->local_state = 0; in dc21041_autoconf()
2706 lp->media = NC; in dc21041_autoconf()
2711 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21041_autoconf()
2712 lp->media = BNC_SUSPECT; in dc21041_autoconf()
2727 if (lp->media != lp->c_media) { in dc21041_autoconf()
2729 lp->c_media = lp->media; in dc21041_autoconf()
2731 lp->media = INIT; in dc21041_autoconf()
2732 lp->tx_enable = false; in dc21041_autoconf()
2747 struct de4x5_private *lp = netdev_priv(dev); in dc21140m_autoconf() local
2752 switch(lp->media) { in dc21140m_autoconf()
2754 if (lp->timeout < 0) { in dc21140m_autoconf()
2756 lp->tx_enable = false; in dc21140m_autoconf()
2757 lp->linkOK = 0; in dc21140m_autoconf()
2763 if (lp->useSROM) { in dc21140m_autoconf()
2765 lp->tcount++; in dc21140m_autoconf()
2768 srom_exec(dev, lp->phy[lp->active].gep); in dc21140m_autoconf()
2769 if (lp->infoblock_media == ANS) { in dc21140m_autoconf()
2770 ana = lp->phy[lp->active].ana | MII_ANA_CSMA; in dc21140m_autoconf()
2771 mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII); in dc21140m_autoconf()
2774 lp->tmp = MII_SR_ASSC; /* Fake out the MII speed set */ in dc21140m_autoconf()
2776 if (lp->autosense == _100Mb) { in dc21140m_autoconf()
2777 lp->media = _100Mb; in dc21140m_autoconf()
2778 } else if (lp->autosense == _10Mb) { in dc21140m_autoconf()
2779 lp->media = _10Mb; in dc21140m_autoconf()
2780 } else if ((lp->autosense == AUTO) && in dc21140m_autoconf()
2783 ana &= (lp->fdx ? ~0 : ~MII_ANA_FDAM); in dc21140m_autoconf()
2784 mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII); in dc21140m_autoconf()
2785 lp->media = ANS; in dc21140m_autoconf()
2786 } else if (lp->autosense == AUTO) { in dc21140m_autoconf()
2787 lp->media = SPD_DET; in dc21140m_autoconf()
2789 lp->media = _100Mb; in dc21140m_autoconf()
2791 lp->media = NC; in dc21140m_autoconf()
2794 lp->local_state = 0; in dc21140m_autoconf()
2800 switch (lp->local_state) { in dc21140m_autoconf()
2802 if (lp->timeout < 0) { in dc21140m_autoconf()
2803 mii_wr(MII_CR_ASSE | MII_CR_RAN, MII_CR, lp->phy[lp->active].addr, DE4X5_MII); in dc21140m_autoconf()
2810 lp->local_state = 0; in dc21140m_autoconf()
2811 lp->media = SPD_DET; in dc21140m_autoconf()
2813 lp->local_state++; in dc21140m_autoconf()
2823 lp->media = SPD_DET; in dc21140m_autoconf()
2824 lp->local_state = 0; in dc21140m_autoconf()
2826 lp->tmp = MII_SR_ASSC; in dc21140m_autoconf()
2827 anlpa = mii_rd(MII_ANLPA, lp->phy[lp->active].addr, DE4X5_MII); in dc21140m_autoconf()
2828 ana = mii_rd(MII_ANA, lp->phy[lp->active].addr, DE4X5_MII); in dc21140m_autoconf()
2832 lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_100M) != 0; in dc21140m_autoconf()
2833 lp->media = _100Mb; in dc21140m_autoconf()
2835 lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_10M) != 0; in dc21140m_autoconf()
2837 lp->media = _10Mb; in dc21140m_autoconf()
2848 if (lp->timeout < 0) { in dc21140m_autoconf()
2849 lp->tmp = (lp->phy[lp->active].id ? MII_SR_LKS : in dc21140m_autoconf()
2857 lp->media = _100Mb; in dc21140m_autoconf()
2858 } else if ((!is_spd_100(dev) && (is_10_up(dev) & lp->tmp))) { in dc21140m_autoconf()
2859 lp->media = _10Mb; in dc21140m_autoconf()
2861 lp->media = NC; in dc21140m_autoconf()
2869 if (!lp->tx_enable) { in dc21140m_autoconf()
2873 if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21140m_autoconf()
2874 if (!is_100_up(dev) || (!lp->useSROM && !is_spd_100(dev))) { in dc21140m_autoconf()
2875 lp->media = INIT; in dc21140m_autoconf()
2876 lp->tcount++; in dc21140m_autoconf()
2887 if (!lp->tx_enable) { in dc21140m_autoconf()
2891 if (!lp->linkOK && (lp->autosense == AUTO)) { in dc21140m_autoconf()
2892 if (!is_10_up(dev) || (!lp->useSROM && is_spd_100(dev))) { in dc21140m_autoconf()
2893 lp->media = INIT; in dc21140m_autoconf()
2894 lp->tcount++; in dc21140m_autoconf()
2902 if (lp->media != lp->c_media) { in dc21140m_autoconf()
2904 lp->c_media = lp->media; in dc21140m_autoconf()
2906 lp->media = INIT; in dc21140m_autoconf()
2907 lp->tx_enable = false; in dc21140m_autoconf()
2931 struct de4x5_private *lp = netdev_priv(dev); in dc2114x_autoconf() local
2936 switch (lp->media) { in dc2114x_autoconf()
2938 if (lp->timeout < 0) { in dc2114x_autoconf()
2940 lp->tx_enable = false; in dc2114x_autoconf()
2941 lp->linkOK = 0; in dc2114x_autoconf()
2942 lp->timeout = -1; in dc2114x_autoconf()
2944 if (lp->params.autosense & ~AUTO) { in dc2114x_autoconf()
2946 if (lp->media != lp->params.autosense) { in dc2114x_autoconf()
2947 lp->tcount++; in dc2114x_autoconf()
2948 lp->media = INIT; in dc2114x_autoconf()
2951 lp->media = INIT; in dc2114x_autoconf()
2957 if (lp->autosense == _100Mb) { in dc2114x_autoconf()
2958 lp->media = _100Mb; in dc2114x_autoconf()
2959 } else if (lp->autosense == _10Mb) { in dc2114x_autoconf()
2960 lp->media = _10Mb; in dc2114x_autoconf()
2961 } else if (lp->autosense == TP) { in dc2114x_autoconf()
2962 lp->media = TP; in dc2114x_autoconf()
2963 } else if (lp->autosense == BNC) { in dc2114x_autoconf()
2964 lp->media = BNC; in dc2114x_autoconf()
2965 } else if (lp->autosense == AUI) { in dc2114x_autoconf()
2966 lp->media = AUI; in dc2114x_autoconf()
2968 lp->media = SPD_DET; in dc2114x_autoconf()
2969 if ((lp->infoblock_media == ANS) && in dc2114x_autoconf()
2972 ana &= (lp->fdx ? ~0 : ~MII_ANA_FDAM); in dc2114x_autoconf()
2973 mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII); in dc2114x_autoconf()
2974 lp->media = ANS; in dc2114x_autoconf()
2977 lp->local_state = 0; in dc2114x_autoconf()
2983 switch (lp->local_state) { in dc2114x_autoconf()
2985 if (lp->timeout < 0) { in dc2114x_autoconf()
2986 mii_wr(MII_CR_ASSE | MII_CR_RAN, MII_CR, lp->phy[lp->active].addr, DE4X5_MII); in dc2114x_autoconf()
2993 lp->local_state = 0; in dc2114x_autoconf()
2994 lp->media = SPD_DET; in dc2114x_autoconf()
2996 lp->local_state++; in dc2114x_autoconf()
3007 lp->media = SPD_DET; in dc2114x_autoconf()
3008 lp->local_state = 0; in dc2114x_autoconf()
3010 lp->tmp = MII_SR_ASSC; in dc2114x_autoconf()
3011 anlpa = mii_rd(MII_ANLPA, lp->phy[lp->active].addr, DE4X5_MII); in dc2114x_autoconf()
3012 ana = mii_rd(MII_ANA, lp->phy[lp->active].addr, DE4X5_MII); in dc2114x_autoconf()
3016 lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_100M) != 0; in dc2114x_autoconf()
3017 lp->media = _100Mb; in dc2114x_autoconf()
3019 lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_10M) != 0; in dc2114x_autoconf()
3020 lp->media = _10Mb; in dc2114x_autoconf()
3031 if (!lp->tx_enable) { in dc2114x_autoconf()
3032 if (lp->timeout < 0) { in dc2114x_autoconf()
3042 if (!(inl(DE4X5_SISR) & SISR_SRA) && (lp->autosense == AUTO)) { in dc2114x_autoconf()
3043 lp->media = BNC; in dc2114x_autoconf()
3046 lp->local_state = 1; in dc2114x_autoconf()
3050 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc2114x_autoconf()
3051 lp->media = AUI_SUSPECT; in dc2114x_autoconf()
3061 switch (lp->local_state) { in dc2114x_autoconf()
3063 if (lp->timeout < 0) { in dc2114x_autoconf()
3073 lp->local_state++; /* Ensure media connected */ in dc2114x_autoconf()
3079 if (!lp->tx_enable) { in dc2114x_autoconf()
3084 lp->local_state = 0; in dc2114x_autoconf()
3085 lp->tcount++; in dc2114x_autoconf()
3086 lp->media = INIT; in dc2114x_autoconf()
3091 } else if (!lp->linkOK && (lp->autosense == AUTO)) { in dc2114x_autoconf()
3092 lp->media = BNC_SUSPECT; in dc2114x_autoconf()
3105 lp->tcount++; in dc2114x_autoconf()
3106 lp->media = INIT; in dc2114x_autoconf()
3109 if (lp->media == _100Mb) { in dc2114x_autoconf()
3111 lp->media = SPD_DET; in dc2114x_autoconf()
3116 lp->media = SPD_DET; in dc2114x_autoconf()
3120 if (lp->media == ANS) { /* Do MII parallel detection */ in dc2114x_autoconf()
3122 lp->media = _100Mb; in dc2114x_autoconf()
3124 lp->media = _10Mb; in dc2114x_autoconf()
3127 } else if (((lp->media == _100Mb) && is_100_up(dev)) || in dc2114x_autoconf()
3128 (((lp->media == _10Mb) || (lp->media == TP) || in dc2114x_autoconf()
3129 (lp->media == BNC) || (lp->media == AUI)) && in dc2114x_autoconf()
3133 lp->tcount++; in dc2114x_autoconf()
3134 lp->media = INIT; in dc2114x_autoconf()
3140 if (!lp->tx_enable) { in dc2114x_autoconf()
3144 if (!lp->linkOK && (lp->autosense == AUTO)) { in dc2114x_autoconf()
3145 if (!is_10_up(dev) || (!lp->useSROM && is_spd_100(dev))) { in dc2114x_autoconf()
3146 lp->media = INIT; in dc2114x_autoconf()
3147 lp->tcount++; in dc2114x_autoconf()
3156 if (!lp->tx_enable) { in dc2114x_autoconf()
3160 if (!lp->linkOK && (lp->autosense == AUTO)) { in dc2114x_autoconf()
3161 if (!is_100_up(dev) || (!lp->useSROM && !is_spd_100(dev))) { in dc2114x_autoconf()
3162 lp->media = INIT; in dc2114x_autoconf()
3163 lp->tcount++; in dc2114x_autoconf()
3171 lp->tcount++; in dc2114x_autoconf()
3172 printk("Huh?: media:%02x\n", lp->media); in dc2114x_autoconf()
3173 lp->media = INIT; in dc2114x_autoconf()
3183 struct de4x5_private *lp = netdev_priv(dev); in srom_autoconf() local
3185 return lp->infoleaf_fn(dev); in srom_autoconf()
3196 struct de4x5_private *lp = netdev_priv(dev); in srom_map_media() local
3198 lp->fdx = false; in srom_map_media()
3199 if (lp->infoblock_media == lp->media) in srom_map_media()
3202 switch(lp->infoblock_media) { in srom_map_media()
3204 if (!lp->params.fdx) return -1; in srom_map_media()
3205 lp->fdx = true; in srom_map_media()
3207 if (lp->params.fdx && !lp->fdx) return -1; in srom_map_media()
3208 if ((lp->chipset == DC21140) || ((lp->chipset & ~0x00ff) == DC2114x)) { in srom_map_media()
3209 lp->media = _10Mb; in srom_map_media()
3211 lp->media = TP; in srom_map_media()
3216 lp->media = BNC; in srom_map_media()
3220 lp->media = AUI; in srom_map_media()
3224 if (!lp->params.fdx) return -1; in srom_map_media()
3225 lp->fdx = true; in srom_map_media()
3227 if (lp->params.fdx && !lp->fdx) return -1; in srom_map_media()
3228 lp->media = _100Mb; in srom_map_media()
3232 lp->media = _100Mb; in srom_map_media()
3236 if (!lp->params.fdx) return -1; in srom_map_media()
3237 lp->fdx = true; in srom_map_media()
3239 if (lp->params.fdx && !lp->fdx) return -1; in srom_map_media()
3240 lp->media = _100Mb; in srom_map_media()
3244 lp->media = ANS; in srom_map_media()
3245 lp->fdx = lp->params.fdx; in srom_map_media()
3250 lp->infoblock_media); in srom_map_media()
3260 struct de4x5_private *lp = netdev_priv(dev); in de4x5_init_connection() local
3264 if (lp->media != lp->c_media) { in de4x5_init_connection()
3266 lp->c_media = lp->media; /* Stop scrolling media messages */ in de4x5_init_connection()
3269 spin_lock_irqsave(&lp->lock, flags); in de4x5_init_connection()
3272 lp->tx_enable = true; in de4x5_init_connection()
3273 spin_unlock_irqrestore(&lp->lock, flags); in de4x5_init_connection()
3287 struct de4x5_private *lp = netdev_priv(dev); in de4x5_reset_phy() local
3291 if ((lp->useSROM) || (lp->phy[lp->active].id)) { in de4x5_reset_phy()
3292 if (lp->timeout < 0) { in de4x5_reset_phy()
3293 if (lp->useSROM) { in de4x5_reset_phy()
3294 if (lp->phy[lp->active].rst) { in de4x5_reset_phy()
3295 srom_exec(dev, lp->phy[lp->active].rst); in de4x5_reset_phy()
3296 srom_exec(dev, lp->phy[lp->active].rst); in de4x5_reset_phy()
3297 } else if (lp->rst) { /* Type 5 infoblock reset */ in de4x5_reset_phy()
3298 srom_exec(dev, lp->rst); in de4x5_reset_phy()
3299 srom_exec(dev, lp->rst); in de4x5_reset_phy()
3304 if (lp->useMII) { in de4x5_reset_phy()
3305 mii_wr(MII_CR_RST, MII_CR, lp->phy[lp->active].addr, DE4X5_MII); in de4x5_reset_phy()
3308 if (lp->useMII) { in de4x5_reset_phy()
3311 } else if (lp->chipset == DC21140) { in de4x5_reset_phy()
3321 struct de4x5_private *lp = netdev_priv(dev); in test_media() local
3325 if (lp->timeout < 0) { in test_media()
3326 lp->timeout = msec/100; in test_media()
3327 if (!lp->useSROM) { /* Already done if by SROM, else dc2104[01] */ in test_media()
3339 if ((lp->chipset == DC21041) || lp->useSROM) { in test_media()
3347 if (!(sts & irqs) && --lp->timeout) { in test_media()
3350 lp->timeout = -1; in test_media()
3359 struct de4x5_private *lp = netdev_priv(dev); in test_tp() local
3363 if (lp->timeout < 0) { in test_tp()
3364 lp->timeout = msec/100; in test_tp()
3369 if (sisr && --lp->timeout) { in test_tp()
3372 lp->timeout = -1; in test_tp()
3388 struct de4x5_private *lp = netdev_priv(dev); in test_for_100Mb() local
3389 int gep = 0, ret = ((lp->chipset & ~0x00ff)==DC2114x? -1 :GEP_SLNK); in test_for_100Mb()
3391 if (lp->timeout < 0) { in test_for_100Mb()
3394 lp->timeout = (msec - SAMPLE_DELAY)/SAMPLE_INTERVAL; in test_for_100Mb()
3398 lp->timeout = msec/SAMPLE_INTERVAL; in test_for_100Mb()
3402 if (lp->phy[lp->active].id || lp->useSROM) { in test_for_100Mb()
3407 if (!(gep & ret) && --lp->timeout) { in test_for_100Mb()
3410 lp->timeout = -1; in test_for_100Mb()
3419 struct de4x5_private *lp = netdev_priv(dev); in wait_for_link() local
3421 if (lp->timeout < 0) { in wait_for_link()
3422 lp->timeout = 1; in wait_for_link()
3425 if (lp->timeout--) { in wait_for_link()
3428 lp->timeout = -1; in wait_for_link()
3441 struct de4x5_private *lp = netdev_priv(dev); in test_mii_reg() local
3445 if (lp->timeout < 0) { in test_mii_reg()
3446 lp->timeout = msec/100; in test_mii_reg()
3449 reg = mii_rd((u_char)reg, lp->phy[lp->active].addr, DE4X5_MII) & mask; in test_mii_reg()
3452 if (test && --lp->timeout) { in test_mii_reg()
3455 lp->timeout = -1; in test_mii_reg()
3464 struct de4x5_private *lp = netdev_priv(dev); in is_spd_100() local
3468 if (lp->useMII) { in is_spd_100()
3469 spd = mii_rd(lp->phy[lp->active].spd.reg, lp->phy[lp->active].addr, DE4X5_MII); in is_spd_100()
3470 spd = ~(spd ^ lp->phy[lp->active].spd.value); in is_spd_100()
3471 spd &= lp->phy[lp->active].spd.mask; in is_spd_100()
3472 } else if (!lp->useSROM) { /* de500-xa */ in is_spd_100()
3475 if ((lp->ibn == 2) || !lp->asBitValid) in is_spd_100()
3476 return (lp->chipset == DC21143) ? (~inl(DE4X5_SISR)&SISR_LS100) : 0; in is_spd_100()
3478 spd = (lp->asBitValid & (lp->asPolarity ^ (gep_rd(dev) & lp->asBit))) | in is_spd_100()
3479 (lp->linkOK & ~lp->asBitValid); in is_spd_100()
3488 struct de4x5_private *lp = netdev_priv(dev); in is_100_up() local
3491 if (lp->useMII) { in is_100_up()
3493 mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII); in is_100_up()
3494 return mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII) & MII_SR_LKS; in is_100_up()
3495 } else if (!lp->useSROM) { /* de500-xa */ in is_100_up()
3498 if ((lp->ibn == 2) || !lp->asBitValid) in is_100_up()
3499 return (lp->chipset == DC21143) ? (~inl(DE4X5_SISR)&SISR_LS100) : 0; in is_100_up()
3501 return (lp->asBitValid&(lp->asPolarity^(gep_rd(dev)&lp->asBit))) | in is_100_up()
3502 (lp->linkOK & ~lp->asBitValid); in is_100_up()
3509 struct de4x5_private *lp = netdev_priv(dev); in is_10_up() local
3512 if (lp->useMII) { in is_10_up()
3514 mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII); in is_10_up()
3515 return mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII) & MII_SR_LKS; in is_10_up()
3516 } else if (!lp->useSROM) { /* de500-xa */ in is_10_up()
3519 if ((lp->ibn == 2) || !lp->asBitValid) in is_10_up()
3520 return ((lp->chipset & ~0x00ff) == DC2114x) ? in is_10_up()
3524 return (lp->asBitValid&(lp->asPolarity^(gep_rd(dev)&lp->asBit))) | in is_10_up()
3525 (lp->linkOK & ~lp->asBitValid); in is_10_up()
3532 struct de4x5_private *lp = netdev_priv(dev); in is_anc_capable() local
3535 if (lp->phy[lp->active].id && (!lp->useSROM || lp->useMII)) { in is_anc_capable()
3536 return mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII); in is_anc_capable()
3537 } else if ((lp->chipset & ~0x00ff) == DC2114x) { in is_anc_capable()
3551 struct de4x5_private *lp = netdev_priv(dev); in ping_media() local
3555 if (lp->timeout < 0) { in ping_media()
3556 lp->timeout = msec/100; in ping_media()
3558 lp->tmp = lp->tx_new; /* Remember the ring position */ in ping_media()
3559 load_packet(dev, lp->frame, TD_LS | TD_FS | sizeof(lp->frame), (struct sk_buff *)1); in ping_media()
3560 lp->tx_new = (lp->tx_new + 1) % lp->txRingSize; in ping_media()
3567 ((s32)le32_to_cpu(lp->tx_ring[lp->tmp].status) < 0) && in ping_media()
3568 (--lp->timeout)) { in ping_media()
3572 !(le32_to_cpu(lp->tx_ring[lp->tmp].status) & (T_OWN | TD_ES)) && in ping_media()
3573 lp->timeout) { in ping_media()
3578 lp->timeout = -1; in ping_media()
3592 struct de4x5_private *lp = netdev_priv(dev); in de4x5_alloc_rx_buff() local
3605 lp->rx_ring[index].buf = cpu_to_le32(tmp + i); in de4x5_alloc_rx_buff()
3607 ret = lp->rx_skb[index]; in de4x5_alloc_rx_buff()
3608 lp->rx_skb[index] = p; in de4x5_alloc_rx_buff()
3617 if (lp->state != OPEN) return (struct sk_buff *)1; /* Fake out the open */ in de4x5_alloc_rx_buff()
3623 if (index < lp->rx_old) { /* Wrapped buffer */ in de4x5_alloc_rx_buff()
3624 short tlen = (lp->rxRingSize - lp->rx_old) * RX_BUFF_SZ; in de4x5_alloc_rx_buff()
3625 memcpy(skb_put(p,tlen),lp->rx_bufs + lp->rx_old * RX_BUFF_SZ,tlen); in de4x5_alloc_rx_buff()
3626 memcpy(skb_put(p,len-tlen),lp->rx_bufs,len-tlen); in de4x5_alloc_rx_buff()
3628 memcpy(skb_put(p,len),lp->rx_bufs + lp->rx_old * RX_BUFF_SZ,len); in de4x5_alloc_rx_buff()
3638 struct de4x5_private *lp = netdev_priv(dev); in de4x5_free_rx_buffs() local
3641 for (i=0; i<lp->rxRingSize; i++) { in de4x5_free_rx_buffs()
3642 if ((u_long) lp->rx_skb[i] > 1) { in de4x5_free_rx_buffs()
3643 dev_kfree_skb(lp->rx_skb[i]); in de4x5_free_rx_buffs()
3645 lp->rx_ring[i].status = 0; in de4x5_free_rx_buffs()
3646 lp->rx_skb[i] = (struct sk_buff *)1; /* Dummy entry */ in de4x5_free_rx_buffs()
3653 struct de4x5_private *lp = netdev_priv(dev); in de4x5_free_tx_buffs() local
3656 for (i=0; i<lp->txRingSize; i++) { in de4x5_free_tx_buffs()
3657 if (lp->tx_skb[i]) in de4x5_free_tx_buffs()
3658 de4x5_free_tx_buff(lp, i); in de4x5_free_tx_buffs()
3659 lp->tx_ring[i].status = 0; in de4x5_free_tx_buffs()
3663 __skb_queue_purge(&lp->cache.queue); in de4x5_free_tx_buffs()
3676 struct de4x5_private *lp = netdev_priv(dev); in de4x5_save_skbs() local
3680 if (!lp->cache.save_cnt) { in de4x5_save_skbs()
3687 lp->cache.save_cnt++; in de4x5_save_skbs()
3695 struct de4x5_private *lp = netdev_priv(dev); in de4x5_rst_desc_ring() local
3700 if (lp->cache.save_cnt) { in de4x5_rst_desc_ring()
3702 outl(lp->dma_rings, DE4X5_RRBA); in de4x5_rst_desc_ring()
3703 outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc), in de4x5_rst_desc_ring()
3706 lp->rx_new = lp->rx_old = 0; in de4x5_rst_desc_ring()
3707 lp->tx_new = lp->tx_old = 0; in de4x5_rst_desc_ring()
3709 for (i = 0; i < lp->rxRingSize; i++) { in de4x5_rst_desc_ring()
3710 lp->rx_ring[i].status = cpu_to_le32(R_OWN); in de4x5_rst_desc_ring()
3713 for (i = 0; i < lp->txRingSize; i++) { in de4x5_rst_desc_ring()
3714 lp->tx_ring[i].status = cpu_to_le32(0); in de4x5_rst_desc_ring()
3718 lp->cache.save_cnt--; in de4x5_rst_desc_ring()
3726 struct de4x5_private *lp = netdev_priv(dev); in de4x5_cache_state() local
3731 lp->cache.csr0 = inl(DE4X5_BMR); in de4x5_cache_state()
3732 lp->cache.csr6 = (inl(DE4X5_OMR) & ~(OMR_ST | OMR_SR)); in de4x5_cache_state()
3733 lp->cache.csr7 = inl(DE4X5_IMR); in de4x5_cache_state()
3737 outl(lp->cache.csr0, DE4X5_BMR); in de4x5_cache_state()
3738 outl(lp->cache.csr6, DE4X5_OMR); in de4x5_cache_state()
3739 outl(lp->cache.csr7, DE4X5_IMR); in de4x5_cache_state()
3740 if (lp->chipset == DC21140) { in de4x5_cache_state()
3741 gep_wr(lp->cache.gepc, dev); in de4x5_cache_state()
3742 gep_wr(lp->cache.gep, dev); in de4x5_cache_state()
3744 reset_init_sia(dev, lp->cache.csr13, lp->cache.csr14, in de4x5_cache_state()
3745 lp->cache.csr15); in de4x5_cache_state()
3754 struct de4x5_private *lp = netdev_priv(dev); in de4x5_put_cache() local
3756 __skb_queue_tail(&lp->cache.queue, skb); in de4x5_put_cache()
3762 struct de4x5_private *lp = netdev_priv(dev); in de4x5_putb_cache() local
3764 __skb_queue_head(&lp->cache.queue, skb); in de4x5_putb_cache()
3770 struct de4x5_private *lp = netdev_priv(dev); in de4x5_get_cache() local
3772 return __skb_dequeue(&lp->cache.queue); in de4x5_get_cache()
3782 struct de4x5_private *lp = netdev_priv(dev); in test_ans() local
3786 if (lp->timeout < 0) { in test_ans()
3787 lp->timeout = msec/100; in test_ans()
3798 if (!(sts & irqs) && (ans ^ ANS_NWOK) && --lp->timeout) { in test_ans()
3801 lp->timeout = -1; in test_ans()
3810 struct de4x5_private *lp = netdev_priv(dev); in de4x5_setup_intr() local
3829 struct de4x5_private *lp = netdev_priv(dev); in reset_init_sia() local
3833 if (lp->useSROM) { in reset_init_sia()
3834 if (lp->ibn == 3) { in reset_init_sia()
3835 srom_exec(dev, lp->phy[lp->active].rst); in reset_init_sia()
3836 srom_exec(dev, lp->phy[lp->active].gep); in reset_init_sia()
3840 csr15 = lp->cache.csr15; in reset_init_sia()
3841 csr14 = lp->cache.csr14; in reset_init_sia()
3842 csr13 = lp->cache.csr13; in reset_init_sia()
3843 outl(csr15 | lp->cache.gepc, DE4X5_SIGR); in reset_init_sia()
3844 outl(csr15 | lp->cache.gep, DE4X5_SIGR); in reset_init_sia()
3900 PCI_signature(char *name, struct de4x5_private *lp) in PCI_signature() argument
3904 if (lp->chipset == DC21040) { in PCI_signature()
3908 int tmp = *((char *)&lp->srom + 19) * 3; in PCI_signature()
3909 strncpy(name, (char *)&lp->srom + 26 + tmp, 8); in PCI_signature()
3919 strcpy(name, (((lp->chipset == DC21040) ? "DC21040" : in PCI_signature()
3920 ((lp->chipset == DC21041) ? "DC21041" : in PCI_signature()
3921 ((lp->chipset == DC21140) ? "DC21140" : in PCI_signature()
3922 ((lp->chipset == DC21142) ? "DC21142" : in PCI_signature()
3923 ((lp->chipset == DC21143) ? "DC21143" : "UNKNOWN" in PCI_signature()
3926 if (lp->chipset != DC21041) { in PCI_signature()
3927 lp->useSROM = true; /* card is not recognisably DEC */ in PCI_signature()
3929 } else if ((lp->chipset & ~0x00ff) == DC2114x) { in PCI_signature()
3930 lp->useSROM = true; in PCI_signature()
3948 struct de4x5_private *lp = netdev_priv(dev); in DevicePresent() local
3950 if (lp->chipset == DC21040) { in DevicePresent()
3951 if (lp->bus == EISA) { in DevicePresent()
3958 __le16 *p = (__le16 *)((char *)&lp->srom + SROM_HWADD); in DevicePresent()
3969 p = (__le16 *)&lp->srom; in DevicePresent()
3974 de4x5_dbg_srom(&lp->srom); in DevicePresent()
4027 struct de4x5_private *lp = netdev_priv(dev); in get_hw_addr() local
4029 broken = de4x5_bad_srom(lp); in get_hw_addr()
4035 if (lp->bus == PCI) { in get_hw_addr()
4036 if (lp->chipset == DC21040) { in get_hw_addr()
4044 dev->dev_addr[i] = (u_char) lp->srom.ieee_addr[i]; i++; in get_hw_addr()
4045 dev->dev_addr[i] = (u_char) lp->srom.ieee_addr[i]; i++; in get_hw_addr()
4047 dev->dev_addr[i] = *((u_char *)&lp->srom + i); i++; in get_hw_addr()
4048 dev->dev_addr[i] = *((u_char *)&lp->srom + i); i++; in get_hw_addr()
4061 if (lp->bus == PCI) { in get_hw_addr()
4062 if (lp->chipset == DC21040) { in get_hw_addr()
4107 de4x5_bad_srom(struct de4x5_private *lp) in de4x5_bad_srom() argument
4112 if (!memcmp(&lp->srom, &enet_det[i], 3) && in de4x5_bad_srom()
4113 !memcmp((char *)&lp->srom+0x10, &enet_det[i], 3)) { in de4x5_bad_srom()
4129 struct de4x5_private *lp = netdev_priv(dev); in srom_repair() local
4133 memset((char *)&lp->srom, 0, sizeof(struct de4x5_srom)); in srom_repair()
4134 memcpy(lp->srom.ieee_addr, (char *)dev->dev_addr, ETH_ALEN); in srom_repair()
4135 memcpy(lp->srom.info, (char *)&srom_repair_info[SMC-1], 100); in srom_repair()
4136 lp->useSROM = true; in srom_repair()
4148 struct de4x5_private *lp = netdev_priv(dev); in test_bad_enet() local
4153 if ((lp->chipset == last.chipset) && in test_bad_enet()
4154 (lp->bus_num == last.bus) && (lp->bus_num > 0)) { in test_bad_enet()
4161 if (!an_exception(lp)) { in test_bad_enet()
4168 last.chipset = lp->chipset; in test_bad_enet()
4169 last.bus = lp->bus_num; in test_bad_enet()
4181 an_exception(struct de4x5_private *lp) in an_exception() argument
4183 if ((*(u_short *)lp->srom.sub_vendor_id == 0x00c0) && in an_exception()
4184 (*(u_short *)lp->srom.sub_system_id == 0x95e0)) { in an_exception()
4291 struct de4x5_private *lp = netdev_priv(dev); in srom_infoleaf_info() local
4297 if (lp->chipset == infoleaf_array[i].chipset) break; in srom_infoleaf_info()
4300 lp->useSROM = false; in srom_infoleaf_info()
4306 lp->infoleaf_fn = infoleaf_array[i].fn; in srom_infoleaf_info()
4309 count = *((u_char *)&lp->srom + 19); in srom_infoleaf_info()
4310 p = (u_char *)&lp->srom + 26; in srom_infoleaf_info()
4314 if (lp->device == *p) break; in srom_infoleaf_info()
4317 lp->useSROM = false; in srom_infoleaf_info()
4319 dev->name, lp->device); in srom_infoleaf_info()
4324 lp->infoleaf_offset = get_unaligned_le16(p + 1); in srom_infoleaf_info()
4339 struct de4x5_private *lp = netdev_priv(dev); in srom_init() local
4340 u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset; in srom_init()
4344 if (lp->chipset == DC21140) { in srom_init()
4345 lp->cache.gepc = (*p++ | GEP_CTRL); in srom_init()
4346 gep_wr(lp->cache.gepc, dev); in srom_init()
4382 struct de4x5_private *lp = netdev_priv(dev); in srom_exec() local
4387 if (((lp->ibn != 1) && (lp->ibn != 3) && (lp->ibn != 5)) || !count) return; in srom_exec()
4389 if (lp->chipset != DC21140) RESET_SIA; in srom_exec()
4392 gep_wr(((lp->chipset==DC21140) && (lp->ibn!=5) ? in srom_exec()
4397 if (lp->chipset != DC21140) { in srom_exec()
4398 outl(lp->cache.csr14, DE4X5_STRR); in srom_exec()
4399 outl(lp->cache.csr13, DE4X5_SICR); in srom_exec()
4417 struct de4x5_private *lp = netdev_priv(dev); in dc21140_infoleaf() local
4419 u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset; in dc21140_infoleaf()
4426 lp->cache.gepc = (*p++ | GEP_CTRL); in dc21140_infoleaf()
4438 if (lp->tcount == count) { in dc21140_infoleaf()
4439 lp->media = NC; in dc21140_infoleaf()
4440 if (lp->media != lp->c_media) { in dc21140_infoleaf()
4442 lp->c_media = lp->media; in dc21140_infoleaf()
4444 lp->media = INIT; in dc21140_infoleaf()
4445 lp->tcount = 0; in dc21140_infoleaf()
4446 lp->tx_enable = false; in dc21140_infoleaf()
4455 struct de4x5_private *lp = netdev_priv(dev); in dc21142_infoleaf() local
4457 u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset; in dc21142_infoleaf()
4473 if (lp->tcount == count) { in dc21142_infoleaf()
4474 lp->media = NC; in dc21142_infoleaf()
4475 if (lp->media != lp->c_media) { in dc21142_infoleaf()
4477 lp->c_media = lp->media; in dc21142_infoleaf()
4479 lp->media = INIT; in dc21142_infoleaf()
4480 lp->tcount = 0; in dc21142_infoleaf()
4481 lp->tx_enable = false; in dc21142_infoleaf()
4490 struct de4x5_private *lp = netdev_priv(dev); in dc21143_infoleaf() local
4492 u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset; in dc21143_infoleaf()
4507 if (lp->tcount == count) { in dc21143_infoleaf()
4508 lp->media = NC; in dc21143_infoleaf()
4509 if (lp->media != lp->c_media) { in dc21143_infoleaf()
4511 lp->c_media = lp->media; in dc21143_infoleaf()
4513 lp->media = INIT; in dc21143_infoleaf()
4514 lp->tcount = 0; in dc21143_infoleaf()
4515 lp->tx_enable = false; in dc21143_infoleaf()
4528 struct de4x5_private *lp = netdev_priv(dev); in compact_infoblock() local
4532 if (--count > lp->tcount) { in compact_infoblock()
4540 if ((lp->media == INIT) && (lp->timeout < 0)) { in compact_infoblock()
4541 lp->ibn = COMPACT; in compact_infoblock()
4542 lp->active = 0; in compact_infoblock()
4543 gep_wr(lp->cache.gepc, dev); in compact_infoblock()
4544 lp->infoblock_media = (*p++) & COMPACT_MC; in compact_infoblock()
4545 lp->cache.gep = *p++; in compact_infoblock()
4549 lp->asBitValid = (flags & 0x80) ? 0 : -1; in compact_infoblock()
4550 lp->defMedium = (flags & 0x40) ? -1 : 0; in compact_infoblock()
4551 lp->asBit = 1 << ((csr6 >> 1) & 0x07); in compact_infoblock()
4552 lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit; in compact_infoblock()
4553 lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18); in compact_infoblock()
4554 lp->useMII = false; in compact_infoblock()
4568 struct de4x5_private *lp = netdev_priv(dev); in type0_infoblock() local
4572 if (--count > lp->tcount) { in type0_infoblock()
4580 if ((lp->media == INIT) && (lp->timeout < 0)) { in type0_infoblock()
4581 lp->ibn = 0; in type0_infoblock()
4582 lp->active = 0; in type0_infoblock()
4583 gep_wr(lp->cache.gepc, dev); in type0_infoblock()
4585 lp->infoblock_media = (*p++) & BLOCK0_MC; in type0_infoblock()
4586 lp->cache.gep = *p++; in type0_infoblock()
4590 lp->asBitValid = (flags & 0x80) ? 0 : -1; in type0_infoblock()
4591 lp->defMedium = (flags & 0x40) ? -1 : 0; in type0_infoblock()
4592 lp->asBit = 1 << ((csr6 >> 1) & 0x07); in type0_infoblock()
4593 lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit; in type0_infoblock()
4594 lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18); in type0_infoblock()
4595 lp->useMII = false; in type0_infoblock()
4608 struct de4x5_private *lp = netdev_priv(dev); in type1_infoblock() local
4612 if (--count > lp->tcount) { in type1_infoblock()
4621 if (lp->state == INITIALISED) { in type1_infoblock()
4622 lp->ibn = 1; in type1_infoblock()
4623 lp->active = *p++; in type1_infoblock()
4624 lp->phy[lp->active].gep = (*p ? p : NULL); p += (*p + 1); in type1_infoblock()
4625 lp->phy[lp->active].rst = (*p ? p : NULL); p += (*p + 1); in type1_infoblock()
4626 lp->phy[lp->active].mc = get_unaligned_le16(p); p += 2; in type1_infoblock()
4627 lp->phy[lp->active].ana = get_unaligned_le16(p); p += 2; in type1_infoblock()
4628 lp->phy[lp->active].fdx = get_unaligned_le16(p); p += 2; in type1_infoblock()
4629 lp->phy[lp->active].ttm = get_unaligned_le16(p); in type1_infoblock()
4631 } else if ((lp->media == INIT) && (lp->timeout < 0)) { in type1_infoblock()
4632 lp->ibn = 1; in type1_infoblock()
4633 lp->active = *p; in type1_infoblock()
4634 lp->infoblock_csr6 = OMR_MII_100; in type1_infoblock()
4635 lp->useMII = true; in type1_infoblock()
4636 lp->infoblock_media = ANS; in type1_infoblock()
4647 struct de4x5_private *lp = netdev_priv(dev); in type2_infoblock() local
4651 if (--count > lp->tcount) { in type2_infoblock()
4659 if ((lp->media == INIT) && (lp->timeout < 0)) { in type2_infoblock()
4660 lp->ibn = 2; in type2_infoblock()
4661 lp->active = 0; in type2_infoblock()
4663 lp->infoblock_media = (*p) & MEDIA_CODE; in type2_infoblock()
4666 lp->cache.csr13 = get_unaligned_le16(p); p += 2; in type2_infoblock()
4667 lp->cache.csr14 = get_unaligned_le16(p); p += 2; in type2_infoblock()
4668 lp->cache.csr15 = get_unaligned_le16(p); p += 2; in type2_infoblock()
4670 lp->cache.csr13 = CSR13; in type2_infoblock()
4671 lp->cache.csr14 = CSR14; in type2_infoblock()
4672 lp->cache.csr15 = CSR15; in type2_infoblock()
4674 lp->cache.gepc = ((s32)(get_unaligned_le16(p)) << 16); p += 2; in type2_infoblock()
4675 lp->cache.gep = ((s32)(get_unaligned_le16(p)) << 16); in type2_infoblock()
4676 lp->infoblock_csr6 = OMR_SIA; in type2_infoblock()
4677 lp->useMII = false; in type2_infoblock()
4688 struct de4x5_private *lp = netdev_priv(dev); in type3_infoblock() local
4692 if (--count > lp->tcount) { in type3_infoblock()
4701 if (lp->state == INITIALISED) { in type3_infoblock()
4702 lp->ibn = 3; in type3_infoblock()
4703 lp->active = *p++; in type3_infoblock()
4704 if (MOTO_SROM_BUG) lp->active = 0; in type3_infoblock()
4705 lp->phy[lp->active].gep = (*p ? p : NULL); p += (2 * (*p) + 1); in type3_infoblock()
4706 lp->phy[lp->active].rst = (*p ? p : NULL); p += (2 * (*p) + 1); in type3_infoblock()
4707 lp->phy[lp->active].mc = get_unaligned_le16(p); p += 2; in type3_infoblock()
4708 lp->phy[lp->active].ana = get_unaligned_le16(p); p += 2; in type3_infoblock()
4709 lp->phy[lp->active].fdx = get_unaligned_le16(p); p += 2; in type3_infoblock()
4710 lp->phy[lp->active].ttm = get_unaligned_le16(p); p += 2; in type3_infoblock()
4711 lp->phy[lp->active].mci = *p; in type3_infoblock()
4713 } else if ((lp->media == INIT) && (lp->timeout < 0)) { in type3_infoblock()
4714 lp->ibn = 3; in type3_infoblock()
4715 lp->active = *p; in type3_infoblock()
4716 if (MOTO_SROM_BUG) lp->active = 0; in type3_infoblock()
4717 lp->infoblock_csr6 = OMR_MII_100; in type3_infoblock()
4718 lp->useMII = true; in type3_infoblock()
4719 lp->infoblock_media = ANS; in type3_infoblock()
4730 struct de4x5_private *lp = netdev_priv(dev); in type4_infoblock() local
4734 if (--count > lp->tcount) { in type4_infoblock()
4742 if ((lp->media == INIT) && (lp->timeout < 0)) { in type4_infoblock()
4743 lp->ibn = 4; in type4_infoblock()
4744 lp->active = 0; in type4_infoblock()
4746 lp->infoblock_media = (*p++) & MEDIA_CODE; in type4_infoblock()
4747 lp->cache.csr13 = CSR13; /* Hard coded defaults */ in type4_infoblock()
4748 lp->cache.csr14 = CSR14; in type4_infoblock()
4749 lp->cache.csr15 = CSR15; in type4_infoblock()
4750 lp->cache.gepc = ((s32)(get_unaligned_le16(p)) << 16); p += 2; in type4_infoblock()
4751 lp->cache.gep = ((s32)(get_unaligned_le16(p)) << 16); p += 2; in type4_infoblock()
4755 lp->asBitValid = (flags & 0x80) ? 0 : -1; in type4_infoblock()
4756 lp->defMedium = (flags & 0x40) ? -1 : 0; in type4_infoblock()
4757 lp->asBit = 1 << ((csr6 >> 1) & 0x07); in type4_infoblock()
4758 lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit; in type4_infoblock()
4759 lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18); in type4_infoblock()
4760 lp->useMII = false; in type4_infoblock()
4775 struct de4x5_private *lp = netdev_priv(dev); in type5_infoblock() local
4779 if (--count > lp->tcount) { in type5_infoblock()
4788 if ((lp->state == INITIALISED) || (lp->media == INIT)) { in type5_infoblock()
4790 lp->rst = p; in type5_infoblock()
4791 srom_exec(dev, lp->rst); in type5_infoblock()
4965 struct de4x5_private *lp = netdev_priv(dev); in mii_get_phy() local
4970 lp->active = 0; in mii_get_phy()
4971 lp->useMII = true; in mii_get_phy()
4974 for (n=0, lp->mii_cnt=0, i=1; !((i==1) && (n==1)); i=(i+1)%DE4X5_MAX_MII) { in mii_get_phy()
4975 lp->phy[lp->active].addr = i; in mii_get_phy()
4982 for (k=0; k < DE4X5_MAX_PHY && lp->phy[k].id; k++); in mii_get_phy()
4984 memcpy((char *)&lp->phy[k], in mii_get_phy()
4986 lp->phy[k].addr = i; in mii_get_phy()
4987 lp->mii_cnt++; in mii_get_phy()
4988 lp->active++; in mii_get_phy()
4995 for (k=0; k < DE4X5_MAX_PHY && lp->phy[k].id; k++); in mii_get_phy()
4996 lp->phy[k].addr = i; in mii_get_phy()
4997 lp->phy[k].id = id; in mii_get_phy()
4998 lp->phy[k].spd.reg = GENERIC_REG; /* ANLPA register */ in mii_get_phy()
4999 lp->phy[k].spd.mask = GENERIC_MASK; /* 100Mb/s technologies */ in mii_get_phy()
5000 lp->phy[k].spd.value = GENERIC_VALUE; /* TX & T4, H/F Duplex */ in mii_get_phy()
5001 lp->mii_cnt++; in mii_get_phy()
5002 lp->active++; in mii_get_phy()
5012 lp->active = 0; in mii_get_phy()
5013 if (lp->phy[0].id) { /* Reset the PHY devices */ in mii_get_phy()
5014 for (k=0; k < DE4X5_MAX_PHY && lp->phy[k].id; k++) { /*For each PHY*/ in mii_get_phy()
5015 mii_wr(MII_CR_RST, MII_CR, lp->phy[k].addr, DE4X5_MII); in mii_get_phy()
5016 while (mii_rd(MII_CR, lp->phy[k].addr, DE4X5_MII) & MII_CR_RST); in mii_get_phy()
5021 if (!lp->mii_cnt) lp->useMII = false; in mii_get_phy()
5023 return lp->mii_cnt; in mii_get_phy()
5029 struct de4x5_private *lp = netdev_priv(dev); in build_setup_frame() local
5031 char *pa = lp->setup_frame; in build_setup_frame()
5035 memset(lp->setup_frame, 0, SETUP_FRAME_LEN); in build_setup_frame()
5038 if (lp->setup_f == HASH_PERF) { in build_setup_frame()
5039 for (pa=lp->setup_frame+IMPERF_PA_OFFSET, i=0; i<ETH_ALEN; i++) { in build_setup_frame()
5043 *(lp->setup_frame + (HASH_TABLE_LEN >> 3) - 3) = 0x80; in build_setup_frame()
5061 struct de4x5_private *lp = netdev_priv(dev); in disable_ast() local
5062 del_timer_sync(&lp->timer); in disable_ast()
5068 struct de4x5_private *lp = netdev_priv(dev); in de4x5_switch_mac_port() local
5077 omr |= lp->infoblock_csr6; in de4x5_switch_mac_port()
5085 if (lp->chipset == DC21140) { in de4x5_switch_mac_port()
5086 gep_wr(lp->cache.gepc, dev); in de4x5_switch_mac_port()
5087 gep_wr(lp->cache.gep, dev); in de4x5_switch_mac_port()
5088 } else if ((lp->chipset & ~0x0ff) == DC2114x) { in de4x5_switch_mac_port()
5089 reset_init_sia(dev, lp->cache.csr13, lp->cache.csr14, lp->cache.csr15); in de4x5_switch_mac_port()
5104 struct de4x5_private *lp = netdev_priv(dev); in gep_wr() local
5107 if (lp->chipset == DC21140) { in gep_wr()
5109 } else if ((lp->chipset & ~0x00ff) == DC2114x) { in gep_wr()
5110 outl((data<<16) | lp->cache.csr15, DE4X5_SIGR); in gep_wr()
5117 struct de4x5_private *lp = netdev_priv(dev); in gep_rd() local
5120 if (lp->chipset == DC21140) { in gep_rd()
5122 } else if ((lp->chipset & ~0x00ff) == DC2114x) { in gep_rd()
5132 struct de4x5_private *lp = netdev_priv(dev); in yawn() local
5135 if ((lp->chipset == DC21040) || (lp->chipset == DC21140)) return; in yawn()
5137 if(lp->bus == EISA) { in yawn()
5154 struct pci_dev *pdev = to_pci_dev (lp->gendev); in yawn()
5176 struct de4x5_private *lp = netdev_priv(dev); in de4x5_parse_params() local
5179 lp->params.fdx = false; in de4x5_parse_params()
5180 lp->params.autosense = AUTO; in de4x5_parse_params()
5189 if (strstr(p, "fdx") || strstr(p, "FDX")) lp->params.fdx = true; in de4x5_parse_params()
5193 lp->params.autosense = TP; in de4x5_parse_params()
5195 lp->params.autosense = TP_NW; in de4x5_parse_params()
5197 lp->params.autosense = BNC; in de4x5_parse_params()
5199 lp->params.autosense = AUI; in de4x5_parse_params()
5201 lp->params.autosense = BNC; in de4x5_parse_params()
5203 lp->params.autosense = _10Mb; in de4x5_parse_params()
5205 lp->params.autosense = _100Mb; in de4x5_parse_params()
5207 lp->params.autosense = AUTO; in de4x5_parse_params()
5217 struct de4x5_private *lp = netdev_priv(dev); in de4x5_dbg_open() local
5224 printk("\t0x%8.8lx 0x%8.8lx\n",(u_long)lp->rx_ring,(u_long)lp->tx_ring); in de4x5_dbg_open()
5226 for (i=0;i<lp->rxRingSize-1;i++){ in de4x5_dbg_open()
5228 printk("0x%8.8lx ",(u_long)&lp->rx_ring[i].status); in de4x5_dbg_open()
5231 printk("...0x%8.8lx\n",(u_long)&lp->rx_ring[i].status); in de4x5_dbg_open()
5233 for (i=0;i<lp->txRingSize-1;i++){ in de4x5_dbg_open()
5235 printk("0x%8.8lx ", (u_long)&lp->tx_ring[i].status); in de4x5_dbg_open()
5238 printk("...0x%8.8lx\n", (u_long)&lp->tx_ring[i].status); in de4x5_dbg_open()
5240 for (i=0;i<lp->rxRingSize-1;i++){ in de4x5_dbg_open()
5242 printk("0x%8.8x ",le32_to_cpu(lp->rx_ring[i].buf)); in de4x5_dbg_open()
5245 printk("...0x%8.8x\n",le32_to_cpu(lp->rx_ring[i].buf)); in de4x5_dbg_open()
5247 for (i=0;i<lp->txRingSize-1;i++){ in de4x5_dbg_open()
5249 printk("0x%8.8x ", le32_to_cpu(lp->tx_ring[i].buf)); in de4x5_dbg_open()
5252 printk("...0x%8.8x\n", le32_to_cpu(lp->tx_ring[i].buf)); in de4x5_dbg_open()
5254 (short)lp->rxRingSize, in de4x5_dbg_open()
5255 (short)lp->txRingSize); in de4x5_dbg_open()
5262 struct de4x5_private *lp = netdev_priv(dev); in de4x5_dbg_mii() local
5266 printk("\nMII device address: %d\n", lp->phy[k].addr); in de4x5_dbg_mii()
5267 printk("MII CR: %x\n",mii_rd(MII_CR,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5268 printk("MII SR: %x\n",mii_rd(MII_SR,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5269 printk("MII ID0: %x\n",mii_rd(MII_ID0,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5270 printk("MII ID1: %x\n",mii_rd(MII_ID1,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5271 if (lp->phy[k].id != BROADCOM_T4) { in de4x5_dbg_mii()
5272 printk("MII ANA: %x\n",mii_rd(0x04,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5273 printk("MII ANC: %x\n",mii_rd(0x05,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5275 printk("MII 16: %x\n",mii_rd(0x10,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5276 if (lp->phy[k].id != BROADCOM_T4) { in de4x5_dbg_mii()
5277 printk("MII 17: %x\n",mii_rd(0x11,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5278 printk("MII 18: %x\n",mii_rd(0x12,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5280 printk("MII 20: %x\n",mii_rd(0x14,lp->phy[k].addr,DE4X5_MII)); in de4x5_dbg_mii()
5288 struct de4x5_private *lp = netdev_priv(dev); in de4x5_dbg_media() local
5290 if (lp->media != lp->c_media) { in de4x5_dbg_media()
5293 (lp->media == NC ? "unconnected, link down or incompatible connection" : in de4x5_dbg_media()
5294 (lp->media == TP ? "TP" : in de4x5_dbg_media()
5295 (lp->media == ANS ? "TP/Nway" : in de4x5_dbg_media()
5296 (lp->media == BNC ? "BNC" : in de4x5_dbg_media()
5297 (lp->media == AUI ? "AUI" : in de4x5_dbg_media()
5298 (lp->media == BNC_AUI ? "BNC/AUI" : in de4x5_dbg_media()
5299 (lp->media == EXT_SIA ? "EXT SIA" : in de4x5_dbg_media()
5300 (lp->media == _100Mb ? "100Mb/s" : in de4x5_dbg_media()
5301 (lp->media == _10Mb ? "10Mb/s" : in de4x5_dbg_media()
5303 ))))))))), (lp->fdx?" full duplex.":".")); in de4x5_dbg_media()
5305 lp->c_media = lp->media; in de4x5_dbg_media()
5358 struct de4x5_private *lp = netdev_priv(dev); in de4x5_ioctl() local
5390 load_packet(dev, lp->setup_frame, TD_IC | PERFECT_F | TD_SET | in de4x5_ioctl()
5392 lp->tx_new = (lp->tx_new + 1) % lp->txRingSize; in de4x5_ioctl()
5413 spin_lock_irqsave(&lp->lock, flags); in de4x5_ioctl()
5414 memcpy(&statbuf, &lp->pktStats, ioc->len); in de4x5_ioctl()
5415 spin_unlock_irqrestore(&lp->lock, flags); in de4x5_ioctl()
5422 spin_lock_irqsave(&lp->lock, flags); in de4x5_ioctl()
5423 memset(&lp->pktStats, 0, sizeof(lp->pktStats)); in de4x5_ioctl()
5424 spin_unlock_irqrestore(&lp->lock, flags); in de4x5_ioctl()