Lines Matching +full:bit +full:- +full:banged
3 * This is a driver for SMSC's LAN911{5,6,7,8} single-chip Ethernet devices.
30 "smc911x.c: v1.0 04-16-2005 by Dustin McIntire <dustin@sensoria.com>\n";
104 * Use power-down feature of the chip
181 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_reset()
191 } while (--timeout && !reg); in smc911x_reset()
199 spin_lock_irqsave(&lp->lock, flags); in smc911x_reset()
201 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_reset()
203 while (resets--) { in smc911x_reset()
215 } while (--timeout && (reg & HW_CFG_SRST_)); in smc911x_reset()
224 while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_)) in smc911x_reset()
234 SMC_ACK_INT(lp, -1); in smc911x_reset()
237 SMC_SET_HW_CFG(lp, (lp->tx_fifo_kb & 0xF) << 16); in smc911x_reset()
240 SMC_SET_AFC_CFG(lp, lp->afc_cfg); in smc911x_reset()
248 * and drive IRQ pin push-pull in smc911x_reset()
252 if (lp->cfg.irq_polarity) in smc911x_reset()
258 if (lp->pending_tx_skb != NULL) { in smc911x_reset()
259 dev_kfree_skb (lp->pending_tx_skb); in smc911x_reset()
260 lp->pending_tx_skb = NULL; in smc911x_reset()
261 dev->stats.tx_errors++; in smc911x_reset()
262 dev->stats.tx_aborted_errors++; in smc911x_reset()
275 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_enable()
277 spin_lock_irqsave(&lp->lock, flags); in smc911x_enable()
279 SMC_SET_MAC_ADDR(lp, dev->dev_addr); in smc911x_enable()
313 if (IS_REV_A(lp->revision)) in smc911x_enable()
320 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_enable()
332 DBG(SMC_DEBUG_FUNC, dev, "%s: --> %s\n", CARDNAME, __func__); in smc911x_shutdown()
338 spin_lock_irqsave(&lp->lock, flags); in smc911x_shutdown()
343 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_shutdown()
351 DBG(SMC_DEBUG_FUNC | SMC_DEBUG_RX, dev, "%s: --> %s\n", in smc911x_drop_pkt()
356 while (fifo_count--) in smc911x_drop_pkt()
365 } while (--timeout && reg); in smc911x_drop_pkt()
385 DBG(SMC_DEBUG_FUNC | SMC_DEBUG_RX, dev, "--> %s\n", in smc911x_rcv()
393 dev->stats.rx_errors++; in smc911x_rcv()
395 dev->stats.rx_crc_errors++; in smc911x_rcv()
398 dev->stats.rx_length_errors++; in smc911x_rcv()
400 dev->stats.multicast++; in smc911x_rcv()
410 dev->stats.rx_dropped++; in smc911x_rcv()
418 data = skb->data; in smc911x_rcv()
420 skb_put(skb,pkt_len-4); in smc911x_rcv()
426 if (fifo & 0xFF) fifo--; in smc911x_rcv()
432 lp->rxdma_active = 1; in smc911x_rcv()
433 lp->current_rx_skb = skb; in smc911x_rcv()
442 PRINT_PKT(data, ((pkt_len - 4) <= 64) ? pkt_len - 4 : 64); in smc911x_rcv()
443 skb->protocol = eth_type_trans(skb, dev); in smc911x_rcv()
445 dev->stats.rx_packets++; in smc911x_rcv()
446 dev->stats.rx_bytes += pkt_len-4; in smc911x_rcv()
461 DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n", __func__); in smc911x_hardware_send_pkt()
462 BUG_ON(lp->pending_tx_skb == NULL); in smc911x_hardware_send_pkt()
464 skb = lp->pending_tx_skb; in smc911x_hardware_send_pkt()
465 lp->pending_tx_skb = NULL; in smc911x_hardware_send_pkt()
471 buf = (char*)((u32)(skb->data) & ~0xF); in smc911x_hardware_send_pkt()
472 len = (skb->len + 0xF + ((u32)skb->data & 0xF)) & ~0xF; in smc911x_hardware_send_pkt()
473 cmdA = (1<<24) | (((u32)skb->data & 0xF)<<16) | in smc911x_hardware_send_pkt()
475 skb->len; in smc911x_hardware_send_pkt()
477 buf = (char*)((u32)skb->data & ~0x3); in smc911x_hardware_send_pkt()
478 len = (skb->len + 3 + ((u32)skb->data & 3)) & ~0x3; in smc911x_hardware_send_pkt()
479 cmdA = (((u32)skb->data & 0x3) << 16) | in smc911x_hardware_send_pkt()
481 skb->len; in smc911x_hardware_send_pkt()
484 cmdB = (skb->len << 16) | (skb->len & 0x7FF); in smc911x_hardware_send_pkt()
496 lp->current_tx_skb = skb; in smc911x_hardware_send_pkt()
504 if (!lp->tx_throttle) { in smc911x_hardware_send_pkt()
523 DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n", in smc911x_hard_start_xmit()
526 spin_lock_irqsave(&lp->lock, flags); in smc911x_hard_start_xmit()
528 BUG_ON(lp->pending_tx_skb != NULL); in smc911x_hard_start_xmit()
539 lp->tx_throttle = 1; in smc911x_hard_start_xmit()
550 if (unlikely(free < (skb->len + 8 + 15 + 15))) { in smc911x_hard_start_xmit()
552 free, skb->len); in smc911x_hard_start_xmit()
553 lp->pending_tx_skb = NULL; in smc911x_hard_start_xmit()
554 dev->stats.tx_errors++; in smc911x_hard_start_xmit()
555 dev->stats.tx_dropped++; in smc911x_hard_start_xmit()
556 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
566 if (lp->txdma_active) { in smc911x_hard_start_xmit()
568 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
570 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
574 lp->txdma_active = 1; in smc911x_hard_start_xmit()
578 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
580 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
587 * - a TX error occurred, or
588 * - TX of a packet completed.
595 DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n", in smc911x_tx()
603 dev->stats.tx_packets++; in smc911x_tx()
604 dev->stats.tx_bytes+=tx_status>>16; in smc911x_tx()
609 * full-duplex mode */ in smc911x_tx()
610 if ((tx_status & TX_STS_ES_) && !(lp->ctl_rfduplx && in smc911x_tx()
612 dev->stats.tx_errors++; in smc911x_tx()
615 dev->stats.collisions+=16; in smc911x_tx()
616 dev->stats.tx_aborted_errors++; in smc911x_tx()
618 dev->stats.collisions+=(tx_status & TX_STS_COLL_CNT_) >> 3; in smc911x_tx()
620 /* carrier error only has meaning for half-duplex communication */ in smc911x_tx()
622 !lp->ctl_rfduplx) { in smc911x_tx()
623 dev->stats.tx_carrier_errors++; in smc911x_tx()
626 dev->stats.collisions++; in smc911x_tx()
627 dev->stats.tx_aborted_errors++; in smc911x_tx()
633 /*---PHY CONTROL AND CONFIGURATION-----------------------------------------*/
675 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_phy_detect()
677 lp->phy_type = 0; in smc911x_phy_detect()
683 switch(lp->version) { in smc911x_phy_detect()
718 lp->mii.phy_id = phyaddr & 31; in smc911x_phy_detect()
719 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
732 lp->mii.phy_id = 1; in smc911x_phy_detect()
733 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
737 id1, id2, lp->mii.phy_id); in smc911x_phy_detect()
747 int phyaddr = lp->mii.phy_id; in smc911x_phy_fixed()
750 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_phy_fixed()
759 * Disable auto-negotiation in smc911x_phy_fixed()
762 if (lp->ctl_rfduplx) in smc911x_phy_fixed()
765 if (lp->ctl_rspeed == 100) in smc911x_phy_fixed()
771 /* Re-Configure the Receive/Phy Control register */ in smc911x_phy_fixed()
779 * smc911x_phy_reset - reset the phy
797 DBG(SMC_DEBUG_FUNC, dev, "--> %s()\n", __func__); in smc911x_phy_reset()
799 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
804 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
805 for (timeout = 2; timeout; timeout--) { in smc911x_phy_reset()
807 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
809 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
825 * smc911x_phy_powerdown - powerdown phy
843 * smc911x_phy_check_media - check the media status and adjust BMCR
853 int phyaddr = lp->mii.phy_id; in smc911x_phy_check_media()
856 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_phy_check_media()
858 if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { in smc911x_phy_check_media()
862 if (lp->mii.full_duplex) { in smc911x_phy_check_media()
863 DBG(SMC_DEBUG_MISC, dev, "Configuring for full-duplex mode\n"); in smc911x_phy_check_media()
867 DBG(SMC_DEBUG_MISC, dev, "Configuring for half-duplex mode\n"); in smc911x_phy_check_media()
880 * If RPC ANEG bit is set, the media selection is dependent purely on
882 * of autonegotiation.) If the RPC ANEG bit is cleared, the selection
889 struct net_device *dev = lp->netdev; in smc911x_phy_configure()
890 int phyaddr = lp->mii.phy_id; in smc911x_phy_configure()
896 DBG(SMC_DEBUG_FUNC, dev, "--> %s()\n", __func__); in smc911x_phy_configure()
901 if (lp->phy_type == 0) in smc911x_phy_configure()
908 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_configure()
919 if (lp->mii.force_media) { in smc911x_phy_configure()
947 if (lp->ctl_rspeed != 100) in smc911x_phy_configure()
950 if (!lp->ctl_rfduplx) in smc911x_phy_configure()
953 /* Update our Auto-Neg Advertisement Register */ in smc911x_phy_configure()
955 lp->mii.advertising = my_ad_caps; in smc911x_phy_configure()
959 * auto-negotiation is restarted, sometimes it isn't ready and in smc911x_phy_configure()
968 /* Restart auto-negotiation process in order to advertise my caps */ in smc911x_phy_configure()
974 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_configure()
986 int phyaddr = lp->mii.phy_id; in smc911x_phy_interrupt()
989 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_phy_interrupt()
991 if (lp->phy_type == 0) in smc911x_phy_interrupt()
1003 /*--- END PHY CONTROL AND CONFIGURATION-------------------------------------*/
1017 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_interrupt()
1019 spin_lock_irqsave(&lp->lock, flags); in smc911x_interrupt()
1024 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1053 dev->stats.rx_errors++; in smc911x_interrupt()
1057 dev->stats.rx_dropped+=SMC_GET_RX_DROP(lp); in smc911x_interrupt()
1059 /* Undocumented interrupt-what is the right thing to do here? */ in smc911x_interrupt()
1066 if (IS_REV_A(lp->revision)) { in smc911x_interrupt()
1072 dev->stats.rx_errors++; in smc911x_interrupt()
1073 dev->stats.rx_fifo_errors++; in smc911x_interrupt()
1078 if (!IS_REV_A(lp->revision)) { in smc911x_interrupt()
1084 dev->stats.rx_errors++; in smc911x_interrupt()
1085 dev->stats.rx_fifo_errors++; in smc911x_interrupt()
1100 if (lp->rxdma_active){ in smc911x_interrupt()
1120 lp->tx_throttle = 0; in smc911x_interrupt()
1122 if (!lp->txdma_active) in smc911x_interrupt()
1165 } while (--timeout); in smc911x_interrupt()
1171 8-timeout); in smc911x_interrupt()
1173 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1183 struct net_device *dev = lp->netdev; in smc911x_tx_dma_irq()
1184 struct sk_buff *skb = lp->current_tx_skb; in smc911x_tx_dma_irq()
1187 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_tx_dma_irq()
1194 lp->current_tx_skb = NULL; in smc911x_tx_dma_irq()
1195 if (lp->pending_tx_skb != NULL) in smc911x_tx_dma_irq()
1200 spin_lock_irqsave(&lp->lock, flags); in smc911x_tx_dma_irq()
1201 lp->txdma_active = 0; in smc911x_tx_dma_irq()
1202 if (!lp->tx_throttle) { in smc911x_tx_dma_irq()
1205 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_tx_dma_irq()
1215 struct net_device *dev = lp->netdev; in smc911x_rx_dma_irq()
1216 struct sk_buff *skb = lp->current_rx_skb; in smc911x_rx_dma_irq()
1220 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_rx_dma_irq()
1224 lp->current_rx_skb = NULL; in smc911x_rx_dma_irq()
1225 PRINT_PKT(skb->data, skb->len); in smc911x_rx_dma_irq()
1226 skb->protocol = eth_type_trans(skb, dev); in smc911x_rx_dma_irq()
1227 dev->stats.rx_packets++; in smc911x_rx_dma_irq()
1228 dev->stats.rx_bytes += skb->len; in smc911x_rx_dma_irq()
1231 spin_lock_irqsave(&lp->lock, flags); in smc911x_rx_dma_irq()
1236 lp->rxdma_active = 0; in smc911x_rx_dma_irq()
1238 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_rx_dma_irq()
1247 * Polling receive - used by netconsole and other diagnostic tools
1252 disable_irq(dev->irq); in smc911x_poll_controller()
1253 smc911x_interrupt(dev->irq, dev); in smc911x_poll_controller()
1254 enable_irq(dev->irq); in smc911x_poll_controller()
1265 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_timeout()
1267 spin_lock_irqsave(&lp->lock, flags); in smc911x_timeout()
1270 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_timeout()
1282 if (lp->phy_type != 0) in smc911x_timeout()
1283 schedule_work(&lp->phy_configure); in smc911x_timeout()
1303 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_set_multicast_list()
1305 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1307 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1309 if (dev->flags & IFF_PROMISC) { in smc911x_set_multicast_list()
1319 else if (dev->flags & IFF_ALLMULTI || netdev_mc_count(dev) > 16) { in smc911x_set_multicast_list()
1329 * address are the offset into the table. If that bit is 1, then the in smc911x_set_multicast_list()
1332 * To use the 6 bits as an offset into the table, the high 1 bit is in smc911x_set_multicast_list()
1333 * the number of the 32 bit register, while the low 5 bits are the bit in smc911x_set_multicast_list()
1349 position = ether_crc(ETH_ALEN, ha->addr)>>26; in smc911x_set_multicast_list()
1371 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1380 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1394 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_open()
1400 smc911x_phy_configure(&lp->phy_configure); in smc911x_open()
1421 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_close()
1429 if (lp->phy_type != 0) { in smc911x_close()
1433 cancel_work_sync(&lp->phy_configure); in smc911x_close()
1434 smc911x_phy_powerdown(dev, lp->mii.phy_id); in smc911x_close()
1437 if (lp->pending_tx_skb) { in smc911x_close()
1438 dev_kfree_skb(lp->pending_tx_skb); in smc911x_close()
1439 lp->pending_tx_skb = NULL; in smc911x_close()
1457 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_ethtool_get_link_ksettings()
1459 if (lp->phy_type != 0) { in smc911x_ethtool_get_link_ksettings()
1460 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1461 mii_ethtool_get_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_get_link_ksettings()
1462 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1468 if (lp->ctl_rspeed == 10) in smc911x_ethtool_get_link_ksettings()
1469 cmd->base.speed = SPEED_10; in smc911x_ethtool_get_link_ksettings()
1470 else if (lp->ctl_rspeed == 100) in smc911x_ethtool_get_link_ksettings()
1471 cmd->base.speed = SPEED_100; in smc911x_ethtool_get_link_ksettings()
1473 cmd->base.autoneg = AUTONEG_DISABLE; in smc911x_ethtool_get_link_ksettings()
1474 cmd->base.port = 0; in smc911x_ethtool_get_link_ksettings()
1475 SMC_GET_PHY_SPECIAL(lp, lp->mii.phy_id, status); in smc911x_ethtool_get_link_ksettings()
1476 cmd->base.duplex = in smc911x_ethtool_get_link_ksettings()
1481 cmd->link_modes.supported, supported); in smc911x_ethtool_get_link_ksettings()
1496 if (lp->phy_type != 0) { in smc911x_ethtool_set_link_ksettings()
1497 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1498 ret = mii_ethtool_set_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_set_link_ksettings()
1499 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1501 if (cmd->base.autoneg != AUTONEG_DISABLE || in smc911x_ethtool_set_link_ksettings()
1502 cmd->base.speed != SPEED_10 || in smc911x_ethtool_set_link_ksettings()
1503 (cmd->base.duplex != DUPLEX_HALF && in smc911x_ethtool_set_link_ksettings()
1504 cmd->base.duplex != DUPLEX_FULL) || in smc911x_ethtool_set_link_ksettings()
1505 (cmd->base.port != PORT_TP && in smc911x_ethtool_set_link_ksettings()
1506 cmd->base.port != PORT_AUI)) in smc911x_ethtool_set_link_ksettings()
1507 return -EINVAL; in smc911x_ethtool_set_link_ksettings()
1509 lp->ctl_rfduplx = cmd->base.duplex == DUPLEX_FULL; in smc911x_ethtool_set_link_ksettings()
1520 strlcpy(info->driver, CARDNAME, sizeof(info->driver)); in smc911x_ethtool_getdrvinfo()
1521 strlcpy(info->version, version, sizeof(info->version)); in smc911x_ethtool_getdrvinfo()
1522 strlcpy(info->bus_info, dev_name(dev->dev.parent), in smc911x_ethtool_getdrvinfo()
1523 sizeof(info->bus_info)); in smc911x_ethtool_getdrvinfo()
1529 int ret = -EINVAL; in smc911x_ethtool_nwayreset()
1532 if (lp->phy_type != 0) { in smc911x_ethtool_nwayreset()
1533 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1534 ret = mii_nway_restart(&lp->mii); in smc911x_ethtool_nwayreset()
1535 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1544 return lp->msg_enable; in smc911x_ethtool_getmsglevel()
1550 lp->msg_enable = level; in smc911x_ethtool_setmsglevel()
1556 return (((E2P_CMD - ID_REV)/4 + 1) + in smc911x_ethtool_getregslen()
1557 (WUCSR - MAC_CR)+1 + 32) * sizeof(u32); in smc911x_ethtool_getregslen()
1568 regs->version = lp->version; in smc911x_ethtool_getregs()
1573 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1575 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1579 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1580 SMC_GET_MII(lp, i, lp->mii.phy_id, reg); in smc911x_ethtool_getregs()
1581 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1593 for(timeout=10;(e2p_cmd & E2P_CMD_EPC_BUSY_) && timeout; timeout--) { in smc911x_ethtool_wait_eeprom_ready()
1597 return -EFAULT; in smc911x_ethtool_wait_eeprom_ready()
1605 return -ETIMEDOUT; in smc911x_ethtool_wait_eeprom_ready()
1660 memcpy(data, eebuf+eeprom->offset, eeprom->len); in smc911x_ethtool_geteeprom()
1672 for(i=eeprom->offset;i<(eeprom->offset+eeprom->len);i++) { in smc911x_ethtool_seteeprom()
1708 * This routine has a simple purpose -- make the SMC chip generate an
1709 * interrupt, so an auto-detect routine can detect it, and find the IRQ,
1717 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_findirq()
1736 } while (--timeout); in smc911x_findirq()
1800 DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__); in smc911x_probe()
1808 retval = -ENODEV; in smc911x_probe()
1825 retval = -ENODEV; in smc911x_probe()
1841 retval = -EINVAL; in smc911x_probe()
1846 lp->version = chip_ids[i].id; in smc911x_probe()
1847 lp->revision = revision; in smc911x_probe()
1848 lp->tx_fifo_kb = tx_fifo_kb; in smc911x_probe()
1850 lp->tx_fifo_size=(lp->tx_fifo_kb<<10) - 512; in smc911x_probe()
1851 lp->rx_fifo_size= ((0x4000 - 512 - lp->tx_fifo_size) / 16) * 15; in smc911x_probe()
1854 switch(lp->tx_fifo_kb) { in smc911x_probe()
1861 lp->afc_cfg=0x008C46AF;break; in smc911x_probe()
1863 lp->afc_cfg=0x0082419F;break; in smc911x_probe()
1865 lp->afc_cfg=0x00783C9F;break; in smc911x_probe()
1867 lp->afc_cfg=0x006E374F;break; in smc911x_probe()
1869 lp->afc_cfg=0x0064328F;break; in smc911x_probe()
1871 lp->afc_cfg=0x005A2D7F;break; in smc911x_probe()
1873 lp->afc_cfg=0x0050287F;break; in smc911x_probe()
1875 lp->afc_cfg=0x0046236F;break; in smc911x_probe()
1877 lp->afc_cfg=0x003C1E6F;break; in smc911x_probe()
1879 lp->afc_cfg=0x0032195F;break; in smc911x_probe()
1886 lp->afc_cfg=0x0024124F;break; in smc911x_probe()
1888 lp->afc_cfg=0x0015073F;break; in smc911x_probe()
1890 lp->afc_cfg=0x0006032F;break; in smc911x_probe()
1892 PRINTK(dev, "ERROR -- no AFC_CFG setting found"); in smc911x_probe()
1898 lp->tx_fifo_size, lp->rx_fifo_size, lp->afc_cfg); in smc911x_probe()
1900 spin_lock_init(&lp->lock); in smc911x_probe()
1903 SMC_GET_MAC_ADDR(lp, dev->dev_addr); in smc911x_probe()
1909 * If dev->irq is 0, then the device has to be banged on to see in smc911x_probe()
1915 if (dev->irq < 1) { in smc911x_probe()
1919 while (trials--) { in smc911x_probe()
1920 dev->irq = smc911x_findirq(dev); in smc911x_probe()
1921 if (dev->irq) in smc911x_probe()
1927 if (dev->irq == 0) { in smc911x_probe()
1929 retval = -ENODEV; in smc911x_probe()
1932 dev->irq = irq_canonicalize(dev->irq); in smc911x_probe()
1934 dev->netdev_ops = &smc911x_netdev_ops; in smc911x_probe()
1935 dev->watchdog_timeo = msecs_to_jiffies(watchdog); in smc911x_probe()
1936 dev->ethtool_ops = &smc911x_ethtool_ops; in smc911x_probe()
1938 INIT_WORK(&lp->phy_configure, smc911x_phy_configure); in smc911x_probe()
1939 lp->mii.phy_id_mask = 0x1f; in smc911x_probe()
1940 lp->mii.reg_num_mask = 0x1f; in smc911x_probe()
1941 lp->mii.force_media = 0; in smc911x_probe()
1942 lp->mii.full_duplex = 0; in smc911x_probe()
1943 lp->mii.dev = dev; in smc911x_probe()
1944 lp->mii.mdio_read = smc911x_phy_read; in smc911x_probe()
1945 lp->mii.mdio_write = smc911x_phy_write; in smc911x_probe()
1953 lp->msg_enable = NETIF_MSG_LINK; in smc911x_probe()
1954 lp->ctl_rfduplx = 1; in smc911x_probe()
1955 lp->ctl_rspeed = 100; in smc911x_probe()
1958 irq_flags = lp->cfg.irq_flags; in smc911x_probe()
1964 retval = request_irq(dev->irq, smc911x_interrupt, in smc911x_probe()
1965 irq_flags, dev->name, dev); in smc911x_probe()
1973 lp->rxdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1974 lp->txdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1975 lp->rxdma_active = 0; in smc911x_probe()
1976 lp->txdma_active = 0; in smc911x_probe()
1981 config.src_addr = lp->physaddr + RX_DATA_FIFO; in smc911x_probe()
1982 config.dst_addr = lp->physaddr + TX_DATA_FIFO; in smc911x_probe()
1985 retval = dmaengine_slave_config(lp->rxdma, &config); in smc911x_probe()
1987 dev_err(lp->dev, "dma rx channel configuration failed: %d\n", in smc911x_probe()
1991 retval = dmaengine_slave_config(lp->txdma, &config); in smc911x_probe()
1993 dev_err(lp->dev, "dma tx channel configuration failed: %d\n", in smc911x_probe()
2003 version_string, lp->revision, in smc911x_probe()
2004 dev->base_addr, dev->irq); in smc911x_probe()
2007 if (lp->rxdma) in smc911x_probe()
2008 pr_cont(" RXDMA %p", lp->rxdma); in smc911x_probe()
2010 if (lp->txdma) in smc911x_probe()
2011 pr_cont(" TXDMA %p", lp->txdma); in smc911x_probe()
2014 if (!is_valid_ether_addr(dev->dev_addr)) { in smc911x_probe()
2019 dev->dev_addr); in smc911x_probe()
2022 if (lp->phy_type == 0) { in smc911x_probe()
2024 } else if ((lp->phy_type & ~0xff) == LAN911X_INTERNAL_PHY_ID) { in smc911x_probe()
2027 PRINTK(dev, "External PHY 0x%08x\n", lp->phy_type); in smc911x_probe()
2034 if (lp->rxdma) in smc911x_probe()
2035 dma_release_channel(lp->rxdma); in smc911x_probe()
2036 if (lp->txdma) in smc911x_probe()
2037 dma_release_channel(lp->txdma); in smc911x_probe()
2047 * 0 --> there is a device
2059 DBG(SMC_DEBUG_FUNC, "--> %s\n", __func__); in smc911x_drv_probe()
2062 ret = -ENODEV; in smc911x_drv_probe()
2069 if (!request_mem_region(res->start, SMC911X_IO_EXTENT, CARDNAME)) { in smc911x_drv_probe()
2070 ret = -EBUSY; in smc911x_drv_probe()
2076 ret = -ENOMEM; in smc911x_drv_probe()
2079 SET_NETDEV_DEV(ndev, &pdev->dev); in smc911x_drv_probe()
2081 ndev->dma = (unsigned char)-1; in smc911x_drv_probe()
2082 ndev->irq = platform_get_irq(pdev, 0); in smc911x_drv_probe()
2084 lp->netdev = ndev; in smc911x_drv_probe()
2087 struct smc911x_platdata *pd = dev_get_platdata(&pdev->dev); in smc911x_drv_probe()
2089 ret = -EINVAL; in smc911x_drv_probe()
2092 memcpy(&lp->cfg, pd, sizeof(lp->cfg)); in smc911x_drv_probe()
2096 addr = ioremap(res->start, SMC911X_IO_EXTENT); in smc911x_drv_probe()
2098 ret = -ENOMEM; in smc911x_drv_probe()
2103 lp->base = addr; in smc911x_drv_probe()
2104 ndev->base_addr = res->start; in smc911x_drv_probe()
2111 release_mem_region(res->start, SMC911X_IO_EXTENT); in smc911x_drv_probe()
2117 lp->physaddr = res->start; in smc911x_drv_probe()
2118 lp->dev = &pdev->dev; in smc911x_drv_probe()
2131 DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__); in smc911x_drv_remove()
2135 free_irq(ndev->irq, ndev); in smc911x_drv_remove()
2139 if (lp->rxdma) in smc911x_drv_remove()
2140 dma_release_channel(lp->rxdma); in smc911x_drv_remove()
2141 if (lp->txdma) in smc911x_drv_remove()
2142 dma_release_channel(lp->txdma); in smc911x_drv_remove()
2145 iounmap(lp->base); in smc911x_drv_remove()
2147 release_mem_region(res->start, SMC911X_IO_EXTENT); in smc911x_drv_remove()
2158 DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__); in smc911x_drv_suspend()
2164 /* Set D2 - Energy detect only setting */ in smc911x_drv_suspend()
2176 DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__); in smc911x_drv_resume()
2182 if (lp->phy_type != 0) in smc911x_drv_resume()
2183 smc911x_phy_configure(&lp->phy_configure); in smc911x_drv_resume()