Lines Matching refs:lp

145 #define SMC_ENABLE_INT(lp, x) do {			\  argument
147 __mask = SMC_GET_INT_EN((lp)); \
149 SMC_SET_INT_EN((lp), __mask); \
153 #define SMC_DISABLE_INT(lp, x) do { \ argument
155 __mask = SMC_GET_INT_EN((lp)); \
157 SMC_SET_INT_EN((lp), __mask); \
165 struct smc911x_local *lp = netdev_priv(dev); in smc911x_reset() local
172 if ((SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_) == 0) { in smc911x_reset()
174 SMC_SET_BYTE_TEST(lp, 0); in smc911x_reset()
178 reg = SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_; in smc911x_reset()
187 spin_lock_irqsave(&lp->lock, flags); in smc911x_reset()
188 SMC_SET_INT_EN(lp, 0); in smc911x_reset()
189 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_reset()
192 SMC_SET_HW_CFG(lp, HW_CFG_SRST_); in smc911x_reset()
196 reg = SMC_GET_HW_CFG(lp); in smc911x_reset()
212 while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_)) in smc911x_reset()
221 SMC_SET_INT_EN(lp, 0); in smc911x_reset()
222 SMC_ACK_INT(lp, -1); in smc911x_reset()
225 SMC_SET_HW_CFG(lp, (lp->tx_fifo_kb & 0xF) << 16); in smc911x_reset()
227 SMC_SET_FLOW(lp, FLOW_FCPT_ | FLOW_FCEN_); in smc911x_reset()
228 SMC_SET_AFC_CFG(lp, lp->afc_cfg); in smc911x_reset()
232 SMC_SET_GPIO_CFG(lp, 0x70070000); in smc911x_reset()
240 if (lp->cfg.irq_polarity) in smc911x_reset()
243 SMC_SET_IRQ_CFG(lp, irq_cfg); in smc911x_reset()
246 if (lp->pending_tx_skb != NULL) { in smc911x_reset()
247 dev_kfree_skb (lp->pending_tx_skb); in smc911x_reset()
248 lp->pending_tx_skb = NULL; in smc911x_reset()
259 struct smc911x_local *lp = netdev_priv(dev); in smc911x_enable() local
265 spin_lock_irqsave(&lp->lock, flags); in smc911x_enable()
267 SMC_SET_MAC_ADDR(lp, dev->dev_addr); in smc911x_enable()
270 cfg = SMC_GET_HW_CFG(lp); in smc911x_enable()
273 SMC_SET_HW_CFG(lp, cfg); in smc911x_enable()
274 SMC_SET_FIFO_TDA(lp, 0xFF); in smc911x_enable()
276 SMC_SET_FIFO_TSL(lp, 64); in smc911x_enable()
277 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_enable()
279 SMC_GET_MAC_CR(lp, cr); in smc911x_enable()
281 SMC_SET_MAC_CR(lp, cr); in smc911x_enable()
282 SMC_SET_TX_CFG(lp, TX_CFG_TX_ON_); in smc911x_enable()
285 SMC_SET_RX_CFG(lp, (2<<8) & RX_CFG_RXDOFF_); in smc911x_enable()
291 SMC_SET_MAC_CR(lp, cr | MAC_CR_RXEN_); in smc911x_enable()
294 SMC_SET_FIFO_RSA(lp, 0x01); in smc911x_enable()
295 SMC_SET_FIFO_RSL(lp, 0x00); in smc911x_enable()
301 if (IS_REV_A(lp->revision)) in smc911x_enable()
306 SMC_ENABLE_INT(lp, mask); in smc911x_enable()
308 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_enable()
316 struct smc911x_local *lp = netdev_priv(dev); in smc911x_shutdown() local
323 SMC_SET_INT_EN(lp, 0); in smc911x_shutdown()
326 spin_lock_irqsave(&lp->lock, flags); in smc911x_shutdown()
327 SMC_GET_MAC_CR(lp, cr); in smc911x_shutdown()
329 SMC_SET_MAC_CR(lp, cr); in smc911x_shutdown()
330 SMC_SET_TX_CFG(lp, TX_CFG_STOP_TX_); in smc911x_shutdown()
331 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_shutdown()
336 struct smc911x_local *lp = netdev_priv(dev); in smc911x_drop_pkt() local
341 fifo_count = SMC_GET_RX_FIFO_INF(lp) & 0xFFFF; in smc911x_drop_pkt()
345 SMC_GET_RX_FIFO(lp); in smc911x_drop_pkt()
348 SMC_SET_RX_DP_CTRL(lp, RX_DP_CTRL_FFWD_BUSY_); in smc911x_drop_pkt()
352 reg = SMC_GET_RX_DP_CTRL(lp) & RX_DP_CTRL_FFWD_BUSY_; in smc911x_drop_pkt()
368 struct smc911x_local *lp = netdev_priv(dev); in smc911x_rcv() local
375 status = SMC_GET_RX_STS_FIFO(lp); in smc911x_rcv()
413 fifo = SMC_GET_FIFO_INT(lp); in smc911x_rcv()
417 SMC_SET_FIFO_INT(lp, fifo); in smc911x_rcv()
419 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN16_ | ((2<<8) & RX_CFG_RXDOFF_)); in smc911x_rcv()
420 lp->rxdma_active = 1; in smc911x_rcv()
421 lp->current_rx_skb = skb; in smc911x_rcv()
422 SMC_PULL_DATA(lp, data, (pkt_len+2+15) & ~15); in smc911x_rcv()
426 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_)); in smc911x_rcv()
427 SMC_PULL_DATA(lp, data, pkt_len+2+3); in smc911x_rcv()
444 struct smc911x_local *lp = netdev_priv(dev); in smc911x_hardware_send_pkt() local
450 BUG_ON(lp->pending_tx_skb == NULL); in smc911x_hardware_send_pkt()
452 skb = lp->pending_tx_skb; in smc911x_hardware_send_pkt()
453 lp->pending_tx_skb = NULL; in smc911x_hardware_send_pkt()
476 SMC_SET_TX_FIFO(lp, cmdA); in smc911x_hardware_send_pkt()
477 SMC_SET_TX_FIFO(lp, cmdB); in smc911x_hardware_send_pkt()
484 lp->current_tx_skb = skb; in smc911x_hardware_send_pkt()
485 SMC_PUSH_DATA(lp, buf, len); in smc911x_hardware_send_pkt()
488 SMC_PUSH_DATA(lp, buf, len); in smc911x_hardware_send_pkt()
492 if (!lp->tx_throttle) { in smc911x_hardware_send_pkt()
495 SMC_ENABLE_INT(lp, INT_EN_TDFA_EN_ | INT_EN_TSFL_EN_); in smc911x_hardware_send_pkt()
507 struct smc911x_local *lp = netdev_priv(dev); in smc911x_hard_start_xmit() local
514 spin_lock_irqsave(&lp->lock, flags); in smc911x_hard_start_xmit()
516 BUG_ON(lp->pending_tx_skb != NULL); in smc911x_hard_start_xmit()
518 free = SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TDFREE_; in smc911x_hard_start_xmit()
526 SMC_SET_FIFO_TDA(lp, (SMC911X_TX_FIFO_LOW_THRESHOLD)/64); in smc911x_hard_start_xmit()
527 lp->tx_throttle = 1; in smc911x_hard_start_xmit()
541 lp->pending_tx_skb = NULL; in smc911x_hard_start_xmit()
544 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
554 if (lp->txdma_active) { in smc911x_hard_start_xmit()
556 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
558 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
562 lp->txdma_active = 1; in smc911x_hard_start_xmit()
566 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
568 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
580 struct smc911x_local *lp = netdev_priv(dev); in smc911x_tx() local
587 while (((SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16) != 0) { in smc911x_tx()
589 (SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16); in smc911x_tx()
590 tx_status = SMC_GET_TX_STS_FIFO(lp); in smc911x_tx()
598 if ((tx_status & TX_STS_ES_) && !(lp->ctl_rfduplx && in smc911x_tx()
610 !lp->ctl_rfduplx) { in smc911x_tx()
628 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_read() local
631 SMC_GET_MII(lp, phyreg, phyaddr, phydata); in smc911x_phy_read()
645 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_write() local
650 SMC_SET_MII(lp, phyreg, phyaddr, phydata); in smc911x_phy_write()
659 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_detect() local
665 lp->phy_type = 0; in smc911x_phy_detect()
671 switch(lp->version) { in smc911x_phy_detect()
676 cfg = SMC_GET_HW_CFG(lp); in smc911x_phy_detect()
680 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
684 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
689 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
693 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
698 SMC_GET_PHY_ID1(lp, phyaddr & 31, id1); in smc911x_phy_detect()
699 SMC_GET_PHY_ID2(lp, phyaddr & 31, id2); in smc911x_phy_detect()
706 lp->mii.phy_id = phyaddr & 31; in smc911x_phy_detect()
707 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
718 SMC_GET_PHY_ID1(lp, 1, id1); in smc911x_phy_detect()
719 SMC_GET_PHY_ID2(lp, 1, id2); in smc911x_phy_detect()
721 lp->mii.phy_id = 1; in smc911x_phy_detect()
722 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
726 id1, id2, lp->mii.phy_id); in smc911x_phy_detect()
735 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_fixed() local
736 int phyaddr = lp->mii.phy_id; in smc911x_phy_fixed()
742 SMC_GET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
744 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
751 if (lp->ctl_rfduplx) in smc911x_phy_fixed()
754 if (lp->ctl_rspeed == 100) in smc911x_phy_fixed()
758 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
762 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
781 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_reset() local
788 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
789 reg = SMC_GET_PMT_CTRL(lp); in smc911x_phy_reset()
792 SMC_SET_PMT_CTRL(lp, reg); in smc911x_phy_reset()
793 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
796 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
797 reg = SMC_GET_PMT_CTRL(lp); in smc911x_phy_reset()
798 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
822 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_powerdown() local
826 SMC_GET_PHY_BMCR(lp, phy, bmcr); in smc911x_phy_powerdown()
828 SMC_SET_PHY_BMCR(lp, phy, bmcr); in smc911x_phy_powerdown()
841 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_check_media() local
842 int phyaddr = lp->mii.phy_id; in smc911x_phy_check_media()
847 if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { in smc911x_phy_check_media()
849 SMC_GET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_check_media()
850 SMC_GET_MAC_CR(lp, cr); in smc911x_phy_check_media()
851 if (lp->mii.full_duplex) { in smc911x_phy_check_media()
860 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_check_media()
861 SMC_SET_MAC_CR(lp, cr); in smc911x_phy_check_media()
876 struct smc911x_local *lp = container_of(work, struct smc911x_local, in smc911x_phy_configure() local
878 struct net_device *dev = lp->netdev; in smc911x_phy_configure()
879 int phyaddr = lp->mii.phy_id; in smc911x_phy_configure()
890 if (lp->phy_type == 0) in smc911x_phy_configure()
897 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_configure()
903 SMC_SET_PHY_INT_MASK(lp, phyaddr, PHY_INT_MASK_ENERGY_ON_ | in smc911x_phy_configure()
908 if (lp->mii.force_media) { in smc911x_phy_configure()
914 SMC_GET_PHY_BMSR(lp, phyaddr, my_phy_caps); in smc911x_phy_configure()
936 if (lp->ctl_rspeed != 100) in smc911x_phy_configure()
939 if (!lp->ctl_rfduplx) in smc911x_phy_configure()
943 SMC_SET_PHY_MII_ADV(lp, phyaddr, my_ad_caps); in smc911x_phy_configure()
944 lp->mii.advertising = my_ad_caps; in smc911x_phy_configure()
952 SMC_GET_PHY_MII_ADV(lp, phyaddr, status); in smc911x_phy_configure()
958 SMC_SET_PHY_BMCR(lp, phyaddr, BMCR_ANENABLE | BMCR_ANRESTART); in smc911x_phy_configure()
963 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_configure()
974 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_interrupt() local
975 int phyaddr = lp->mii.phy_id; in smc911x_phy_interrupt()
980 if (lp->phy_type == 0) in smc911x_phy_interrupt()
985 SMC_GET_PHY_INT_SRC(lp, phyaddr,status); in smc911x_phy_interrupt()
989 SMC_GET_AFC_CFG(lp)); in smc911x_phy_interrupt()
1001 struct smc911x_local *lp = netdev_priv(dev); in smc911x_interrupt() local
1008 spin_lock_irqsave(&lp->lock, flags); in smc911x_interrupt()
1011 if ((SMC_GET_IRQ_CFG(lp) & (INT_CFG_IRQ_INT_ | INT_CFG_IRQ_EN_)) != in smc911x_interrupt()
1013 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1017 mask = SMC_GET_INT_EN(lp); in smc911x_interrupt()
1018 SMC_SET_INT_EN(lp, 0); in smc911x_interrupt()
1025 status = SMC_GET_INT(lp); in smc911x_interrupt()
1036 SMC_ACK_INT(lp, INT_STS_SW_INT_); in smc911x_interrupt()
1041 SMC_ACK_INT(lp, INT_STS_RXE_); in smc911x_interrupt()
1045 SMC_ACK_INT(lp, INT_STS_RXDFH_INT_); in smc911x_interrupt()
1046 dev->stats.rx_dropped+=SMC_GET_RX_DROP(lp); in smc911x_interrupt()
1050 SMC_ACK_INT(lp, INT_STS_RXDF_INT_); in smc911x_interrupt()
1055 if (IS_REV_A(lp->revision)) { in smc911x_interrupt()
1057 SMC_GET_MAC_CR(lp, cr); in smc911x_interrupt()
1059 SMC_SET_MAC_CR(lp, cr); in smc911x_interrupt()
1064 SMC_ACK_INT(lp, INT_STS_RDFL_); in smc911x_interrupt()
1067 if (!IS_REV_A(lp->revision)) { in smc911x_interrupt()
1068 SMC_GET_MAC_CR(lp, cr); in smc911x_interrupt()
1070 SMC_SET_MAC_CR(lp, cr); in smc911x_interrupt()
1076 SMC_ACK_INT(lp, INT_STS_RDFO_); in smc911x_interrupt()
1082 fifo = SMC_GET_RX_FIFO_INF(lp); in smc911x_interrupt()
1089 if (lp->rxdma_active){ in smc911x_interrupt()
1093 fifo = SMC_GET_FIFO_INT(lp) & ~0xFF; in smc911x_interrupt()
1098 SMC_SET_FIFO_INT(lp, fifo); in smc911x_interrupt()
1103 SMC_ACK_INT(lp, INT_STS_RSFL_); in smc911x_interrupt()
1108 SMC_SET_FIFO_TDA(lp, 0xFF); in smc911x_interrupt()
1109 lp->tx_throttle = 0; in smc911x_interrupt()
1111 if (!lp->txdma_active) in smc911x_interrupt()
1114 SMC_ACK_INT(lp, INT_STS_TDFA_); in smc911x_interrupt()
1121 (SMC_GET_FIFO_INT(lp) & 0x00ff0000) >> 16); in smc911x_interrupt()
1123 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_interrupt()
1124 SMC_ACK_INT(lp, INT_STS_TSFL_); in smc911x_interrupt()
1125 SMC_ACK_INT(lp, INT_STS_TSFL_ | INT_STS_GPT_INT_); in smc911x_interrupt()
1131 SMC_ACK_INT(lp, INT_STS_TSFL_); in smc911x_interrupt()
1136 SMC_GET_IRQ_CFG(lp), in smc911x_interrupt()
1137 SMC_GET_FIFO_INT(lp), in smc911x_interrupt()
1138 SMC_GET_RX_CFG(lp)); in smc911x_interrupt()
1140 (SMC_GET_RX_FIFO_INF(lp) & 0x00ff0000) >> 16, in smc911x_interrupt()
1141 SMC_GET_RX_FIFO_INF(lp) & 0xffff, in smc911x_interrupt()
1142 SMC_GET_RX_STS_FIFO_PEEK(lp)); in smc911x_interrupt()
1143 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_interrupt()
1144 SMC_ACK_INT(lp, INT_STS_GPT_INT_); in smc911x_interrupt()
1152 SMC_ACK_INT(lp, INT_STS_PHY_INT_); in smc911x_interrupt()
1157 SMC_SET_INT_EN(lp, mask); in smc911x_interrupt()
1162 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1171 struct smc911x_local *lp = data; in smc911x_tx_dma_irq() local
1172 struct net_device *dev = lp->netdev; in smc911x_tx_dma_irq()
1173 struct sk_buff *skb = lp->current_tx_skb; in smc911x_tx_dma_irq()
1180 dma_unmap_single(lp->dev, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE); in smc911x_tx_dma_irq()
1183 lp->current_tx_skb = NULL; in smc911x_tx_dma_irq()
1184 if (lp->pending_tx_skb != NULL) in smc911x_tx_dma_irq()
1189 spin_lock_irqsave(&lp->lock, flags); in smc911x_tx_dma_irq()
1190 lp->txdma_active = 0; in smc911x_tx_dma_irq()
1191 if (!lp->tx_throttle) { in smc911x_tx_dma_irq()
1194 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_tx_dma_irq()
1203 struct smc911x_local *lp = data; in smc911x_rx_dma_irq() local
1204 struct net_device *dev = lp->netdev; in smc911x_rx_dma_irq()
1205 struct sk_buff *skb = lp->current_rx_skb; in smc911x_rx_dma_irq()
1211 dma_unmap_single(lp->dev, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE); in smc911x_rx_dma_irq()
1213 lp->current_rx_skb = NULL; in smc911x_rx_dma_irq()
1220 spin_lock_irqsave(&lp->lock, flags); in smc911x_rx_dma_irq()
1221 pkts = (SMC_GET_RX_FIFO_INF(lp) & RX_FIFO_INF_RXSUSED_) >> 16; in smc911x_rx_dma_irq()
1225 lp->rxdma_active = 0; in smc911x_rx_dma_irq()
1227 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_rx_dma_irq()
1250 struct smc911x_local *lp = netdev_priv(dev); in smc911x_timeout() local
1256 spin_lock_irqsave(&lp->lock, flags); in smc911x_timeout()
1257 status = SMC_GET_INT(lp); in smc911x_timeout()
1258 mask = SMC_GET_INT_EN(lp); in smc911x_timeout()
1259 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_timeout()
1264 mask = SMC_GET_TX_CFG(lp); in smc911x_timeout()
1265 SMC_SET_TX_CFG(lp, mask | TX_CFG_TXS_DUMP_ | TX_CFG_TXD_DUMP_); in smc911x_timeout()
1271 if (lp->phy_type != 0) in smc911x_timeout()
1272 schedule_work(&lp->phy_configure); in smc911x_timeout()
1287 struct smc911x_local *lp = netdev_priv(dev); in smc911x_set_multicast_list() local
1294 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1295 SMC_GET_MAC_CR(lp, mcr); in smc911x_set_multicast_list()
1296 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1360 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1361 SMC_SET_MAC_CR(lp, mcr); in smc911x_set_multicast_list()
1366 SMC_SET_HASHL(lp, multicast_table[0]); in smc911x_set_multicast_list()
1367 SMC_SET_HASHH(lp, multicast_table[1]); in smc911x_set_multicast_list()
1369 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1381 struct smc911x_local *lp = netdev_priv(dev); in smc911x_open() local
1389 smc911x_phy_configure(&lp->phy_configure); in smc911x_open()
1408 struct smc911x_local *lp = netdev_priv(dev); in smc911x_close() local
1418 if (lp->phy_type != 0) { in smc911x_close()
1422 cancel_work_sync(&lp->phy_configure); in smc911x_close()
1423 smc911x_phy_powerdown(dev, lp->mii.phy_id); in smc911x_close()
1426 if (lp->pending_tx_skb) { in smc911x_close()
1427 dev_kfree_skb(lp->pending_tx_skb); in smc911x_close()
1428 lp->pending_tx_skb = NULL; in smc911x_close()
1441 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_get_link_ksettings() local
1448 if (lp->phy_type != 0) { in smc911x_ethtool_get_link_ksettings()
1449 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1450 mii_ethtool_get_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_get_link_ksettings()
1451 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1457 if (lp->ctl_rspeed == 10) in smc911x_ethtool_get_link_ksettings()
1459 else if (lp->ctl_rspeed == 100) in smc911x_ethtool_get_link_ksettings()
1464 SMC_GET_PHY_SPECIAL(lp, lp->mii.phy_id, status); in smc911x_ethtool_get_link_ksettings()
1481 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_set_link_ksettings() local
1485 if (lp->phy_type != 0) { in smc911x_ethtool_set_link_ksettings()
1486 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1487 ret = mii_ethtool_set_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_set_link_ksettings()
1488 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1498 lp->ctl_rfduplx = cmd->base.duplex == DUPLEX_FULL; in smc911x_ethtool_set_link_ksettings()
1517 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_nwayreset() local
1521 if (lp->phy_type != 0) { in smc911x_ethtool_nwayreset()
1522 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1523 ret = mii_nway_restart(&lp->mii); in smc911x_ethtool_nwayreset()
1524 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1532 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_getmsglevel() local
1533 return lp->msg_enable; in smc911x_ethtool_getmsglevel()
1538 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_setmsglevel() local
1539 lp->msg_enable = level; in smc911x_ethtool_setmsglevel()
1552 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_getregs() local
1557 regs->version = lp->version; in smc911x_ethtool_getregs()
1559 data[j++] = SMC_inl(lp, i); in smc911x_ethtool_getregs()
1562 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1563 SMC_GET_MAC_CSR(lp, i, reg); in smc911x_ethtool_getregs()
1564 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1568 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1569 SMC_GET_MII(lp, i, lp->mii.phy_id, reg); in smc911x_ethtool_getregs()
1570 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1577 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_wait_eeprom_ready() local
1581 e2p_cmd = SMC_GET_E2P_CMD(lp); in smc911x_ethtool_wait_eeprom_ready()
1589 e2p_cmd = SMC_GET_E2P_CMD(lp); in smc911x_ethtool_wait_eeprom_ready()
1602 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_write_eeprom_cmd() local
1607 SMC_SET_E2P_CMD(lp, E2P_CMD_EPC_BUSY_ | in smc911x_ethtool_write_eeprom_cmd()
1616 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_read_eeprom_byte() local
1621 *data = SMC_GET_E2P_DATA(lp); in smc911x_ethtool_read_eeprom_byte()
1628 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_write_eeprom_byte() local
1633 SMC_SET_E2P_DATA(lp, data); in smc911x_ethtool_write_eeprom_byte()
1702 struct smc911x_local *lp = netdev_priv(dev); in smc911x_findirq() local
1714 SMC_SET_INT_EN(lp, INT_EN_SW_INT_EN_); in smc911x_findirq()
1722 int_status = SMC_GET_INT_EN(lp); in smc911x_findirq()
1735 SMC_SET_INT_EN(lp, 0); in smc911x_findirq()
1779 struct smc911x_local *lp = netdev_priv(dev); in smc911x_probe() local
1792 val = SMC_GET_BYTE_TEST(lp); in smc911x_probe()
1806 chip_id = SMC_GET_PN(lp); in smc911x_probe()
1819 revision = SMC_GET_REV(lp); in smc911x_probe()
1835 lp->version = chip_ids[i].id; in smc911x_probe()
1836 lp->revision = revision; in smc911x_probe()
1837 lp->tx_fifo_kb = tx_fifo_kb; in smc911x_probe()
1839 lp->tx_fifo_size=(lp->tx_fifo_kb<<10) - 512; in smc911x_probe()
1840 lp->rx_fifo_size= ((0x4000 - 512 - lp->tx_fifo_size) / 16) * 15; in smc911x_probe()
1843 switch(lp->tx_fifo_kb) { in smc911x_probe()
1850 lp->afc_cfg=0x008C46AF;break; in smc911x_probe()
1852 lp->afc_cfg=0x0082419F;break; in smc911x_probe()
1854 lp->afc_cfg=0x00783C9F;break; in smc911x_probe()
1856 lp->afc_cfg=0x006E374F;break; in smc911x_probe()
1858 lp->afc_cfg=0x0064328F;break; in smc911x_probe()
1860 lp->afc_cfg=0x005A2D7F;break; in smc911x_probe()
1862 lp->afc_cfg=0x0050287F;break; in smc911x_probe()
1864 lp->afc_cfg=0x0046236F;break; in smc911x_probe()
1866 lp->afc_cfg=0x003C1E6F;break; in smc911x_probe()
1868 lp->afc_cfg=0x0032195F;break; in smc911x_probe()
1875 lp->afc_cfg=0x0024124F;break; in smc911x_probe()
1877 lp->afc_cfg=0x0015073F;break; in smc911x_probe()
1879 lp->afc_cfg=0x0006032F;break; in smc911x_probe()
1887 lp->tx_fifo_size, lp->rx_fifo_size, lp->afc_cfg); in smc911x_probe()
1889 spin_lock_init(&lp->lock); in smc911x_probe()
1892 SMC_GET_MAC_ADDR(lp, dev->dev_addr); in smc911x_probe()
1927 INIT_WORK(&lp->phy_configure, smc911x_phy_configure); in smc911x_probe()
1928 lp->mii.phy_id_mask = 0x1f; in smc911x_probe()
1929 lp->mii.reg_num_mask = 0x1f; in smc911x_probe()
1930 lp->mii.force_media = 0; in smc911x_probe()
1931 lp->mii.full_duplex = 0; in smc911x_probe()
1932 lp->mii.dev = dev; in smc911x_probe()
1933 lp->mii.mdio_read = smc911x_phy_read; in smc911x_probe()
1934 lp->mii.mdio_write = smc911x_phy_write; in smc911x_probe()
1942 lp->msg_enable = NETIF_MSG_LINK; in smc911x_probe()
1943 lp->ctl_rfduplx = 1; in smc911x_probe()
1944 lp->ctl_rspeed = 100; in smc911x_probe()
1947 irq_flags = lp->cfg.irq_flags; in smc911x_probe()
1962 lp->rxdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1963 lp->txdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1964 lp->rxdma_active = 0; in smc911x_probe()
1965 lp->txdma_active = 0; in smc911x_probe()
1970 config.src_addr = lp->physaddr + RX_DATA_FIFO; in smc911x_probe()
1971 config.dst_addr = lp->physaddr + TX_DATA_FIFO; in smc911x_probe()
1974 retval = dmaengine_slave_config(lp->rxdma, &config); in smc911x_probe()
1976 dev_err(lp->dev, "dma rx channel configuration failed: %d\n", in smc911x_probe()
1980 retval = dmaengine_slave_config(lp->txdma, &config); in smc911x_probe()
1982 dev_err(lp->dev, "dma tx channel configuration failed: %d\n", in smc911x_probe()
1992 version_string, lp->revision, in smc911x_probe()
1996 if (lp->rxdma) in smc911x_probe()
1997 pr_cont(" RXDMA %p", lp->rxdma); in smc911x_probe()
1999 if (lp->txdma) in smc911x_probe()
2000 pr_cont(" TXDMA %p", lp->txdma); in smc911x_probe()
2011 if (lp->phy_type == 0) { in smc911x_probe()
2013 } else if ((lp->phy_type & ~0xff) == LAN911X_INTERNAL_PHY_ID) { in smc911x_probe()
2016 PRINTK(dev, "External PHY 0x%08x\n", lp->phy_type); in smc911x_probe()
2023 if (lp->rxdma) in smc911x_probe()
2024 dma_release_channel(lp->rxdma); in smc911x_probe()
2025 if (lp->txdma) in smc911x_probe()
2026 dma_release_channel(lp->txdma); in smc911x_probe()
2043 struct smc911x_local *lp; in smc911x_drv_probe() local
2077 lp = netdev_priv(ndev); in smc911x_drv_probe()
2078 lp->netdev = ndev; in smc911x_drv_probe()
2086 memcpy(&lp->cfg, pd, sizeof(lp->cfg)); in smc911x_drv_probe()
2097 lp->base = addr; in smc911x_drv_probe()
2111 lp->physaddr = res->start; in smc911x_drv_probe()
2112 lp->dev = &pdev->dev; in smc911x_drv_probe()
2122 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_remove() local
2133 if (lp->rxdma) in smc911x_drv_remove()
2134 dma_release_channel(lp->rxdma); in smc911x_drv_remove()
2135 if (lp->txdma) in smc911x_drv_remove()
2136 dma_release_channel(lp->txdma); in smc911x_drv_remove()
2139 iounmap(lp->base); in smc911x_drv_remove()
2150 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_suspend() local
2159 SMC_SET_PMT_CTRL(lp, 2<<12); in smc911x_drv_suspend()
2172 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_resume() local
2176 if (lp->phy_type != 0) in smc911x_drv_resume()
2177 smc911x_phy_configure(&lp->phy_configure); in smc911x_drv_resume()