Lines Matching full:lp

148 #define SMC_ENABLE_INT(lp, x) do {			\  argument
150 __mask = SMC_GET_INT_EN((lp)); \
152 SMC_SET_INT_EN((lp), __mask); \
156 #define SMC_DISABLE_INT(lp, x) do { \ argument
158 __mask = SMC_GET_INT_EN((lp)); \
160 SMC_SET_INT_EN((lp), __mask); \
168 struct smc911x_local *lp = netdev_priv(dev); in smc911x_reset() local
175 if ((SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_) == 0) { in smc911x_reset()
177 SMC_SET_BYTE_TEST(lp, 0); in smc911x_reset()
181 reg = SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_; in smc911x_reset()
190 spin_lock_irqsave(&lp->lock, flags); in smc911x_reset()
191 SMC_SET_INT_EN(lp, 0); in smc911x_reset()
192 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_reset()
195 SMC_SET_HW_CFG(lp, HW_CFG_SRST_); in smc911x_reset()
199 reg = SMC_GET_HW_CFG(lp); in smc911x_reset()
215 while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_)) in smc911x_reset()
224 SMC_SET_INT_EN(lp, 0); in smc911x_reset()
225 SMC_ACK_INT(lp, -1); in smc911x_reset()
228 SMC_SET_HW_CFG(lp, (lp->tx_fifo_kb & 0xF) << 16); in smc911x_reset()
230 SMC_SET_FLOW(lp, FLOW_FCPT_ | FLOW_FCEN_); in smc911x_reset()
231 SMC_SET_AFC_CFG(lp, lp->afc_cfg); in smc911x_reset()
235 SMC_SET_GPIO_CFG(lp, 0x70070000); in smc911x_reset()
243 if (lp->cfg.irq_polarity) in smc911x_reset()
246 SMC_SET_IRQ_CFG(lp, irq_cfg); in smc911x_reset()
249 if (lp->pending_tx_skb != NULL) { in smc911x_reset()
250 dev_kfree_skb (lp->pending_tx_skb); in smc911x_reset()
251 lp->pending_tx_skb = NULL; in smc911x_reset()
262 struct smc911x_local *lp = netdev_priv(dev); in smc911x_enable() local
268 spin_lock_irqsave(&lp->lock, flags); in smc911x_enable()
270 SMC_SET_MAC_ADDR(lp, dev->dev_addr); in smc911x_enable()
273 cfg = SMC_GET_HW_CFG(lp); in smc911x_enable()
276 SMC_SET_HW_CFG(lp, cfg); in smc911x_enable()
277 SMC_SET_FIFO_TDA(lp, 0xFF); in smc911x_enable()
279 SMC_SET_FIFO_TSL(lp, 64); in smc911x_enable()
280 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_enable()
282 SMC_GET_MAC_CR(lp, cr); in smc911x_enable()
284 SMC_SET_MAC_CR(lp, cr); in smc911x_enable()
285 SMC_SET_TX_CFG(lp, TX_CFG_TX_ON_); in smc911x_enable()
288 SMC_SET_RX_CFG(lp, (2<<8) & RX_CFG_RXDOFF_); in smc911x_enable()
294 SMC_SET_MAC_CR(lp, cr | MAC_CR_RXEN_); in smc911x_enable()
297 SMC_SET_FIFO_RSA(lp, 0x01); in smc911x_enable()
298 SMC_SET_FIFO_RSL(lp, 0x00); in smc911x_enable()
304 if (IS_REV_A(lp->revision)) in smc911x_enable()
309 SMC_ENABLE_INT(lp, mask); in smc911x_enable()
311 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_enable()
319 struct smc911x_local *lp = netdev_priv(dev); in smc911x_shutdown() local
326 SMC_SET_INT_EN(lp, 0); in smc911x_shutdown()
329 spin_lock_irqsave(&lp->lock, flags); in smc911x_shutdown()
330 SMC_GET_MAC_CR(lp, cr); in smc911x_shutdown()
332 SMC_SET_MAC_CR(lp, cr); in smc911x_shutdown()
333 SMC_SET_TX_CFG(lp, TX_CFG_STOP_TX_); in smc911x_shutdown()
334 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_shutdown()
339 struct smc911x_local *lp = netdev_priv(dev); in smc911x_drop_pkt() local
344 fifo_count = SMC_GET_RX_FIFO_INF(lp) & 0xFFFF; in smc911x_drop_pkt()
348 SMC_GET_RX_FIFO(lp); in smc911x_drop_pkt()
351 SMC_SET_RX_DP_CTRL(lp, RX_DP_CTRL_FFWD_BUSY_); in smc911x_drop_pkt()
355 reg = SMC_GET_RX_DP_CTRL(lp) & RX_DP_CTRL_FFWD_BUSY_; in smc911x_drop_pkt()
371 struct smc911x_local *lp = netdev_priv(dev); in smc911x_rcv() local
378 status = SMC_GET_RX_STS_FIFO(lp); in smc911x_rcv()
416 fifo = SMC_GET_FIFO_INT(lp); in smc911x_rcv()
420 SMC_SET_FIFO_INT(lp, fifo); in smc911x_rcv()
422 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN16_ | ((2<<8) & RX_CFG_RXDOFF_)); in smc911x_rcv()
423 lp->rxdma_active = 1; in smc911x_rcv()
424 lp->current_rx_skb = skb; in smc911x_rcv()
425 SMC_PULL_DATA(lp, data, (pkt_len+2+15) & ~15); in smc911x_rcv()
429 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_)); in smc911x_rcv()
430 SMC_PULL_DATA(lp, data, pkt_len+2+3); in smc911x_rcv()
447 struct smc911x_local *lp = netdev_priv(dev); in smc911x_hardware_send_pkt() local
453 BUG_ON(lp->pending_tx_skb == NULL); in smc911x_hardware_send_pkt()
455 skb = lp->pending_tx_skb; in smc911x_hardware_send_pkt()
456 lp->pending_tx_skb = NULL; in smc911x_hardware_send_pkt()
479 SMC_SET_TX_FIFO(lp, cmdA); in smc911x_hardware_send_pkt()
480 SMC_SET_TX_FIFO(lp, cmdB); in smc911x_hardware_send_pkt()
487 lp->current_tx_skb = skb; in smc911x_hardware_send_pkt()
488 SMC_PUSH_DATA(lp, buf, len); in smc911x_hardware_send_pkt()
491 SMC_PUSH_DATA(lp, buf, len); in smc911x_hardware_send_pkt()
495 if (!lp->tx_throttle) { in smc911x_hardware_send_pkt()
498 SMC_ENABLE_INT(lp, INT_EN_TDFA_EN_ | INT_EN_TSFL_EN_); in smc911x_hardware_send_pkt()
510 struct smc911x_local *lp = netdev_priv(dev); in smc911x_hard_start_xmit() local
517 spin_lock_irqsave(&lp->lock, flags); in smc911x_hard_start_xmit()
519 BUG_ON(lp->pending_tx_skb != NULL); in smc911x_hard_start_xmit()
521 free = SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TDFREE_; in smc911x_hard_start_xmit()
529 SMC_SET_FIFO_TDA(lp, (SMC911X_TX_FIFO_LOW_THRESHOLD)/64); in smc911x_hard_start_xmit()
530 lp->tx_throttle = 1; in smc911x_hard_start_xmit()
544 lp->pending_tx_skb = NULL; in smc911x_hard_start_xmit()
547 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
557 if (lp->txdma_active) { in smc911x_hard_start_xmit()
559 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
561 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
565 lp->txdma_active = 1; in smc911x_hard_start_xmit()
569 lp->pending_tx_skb = skb; in smc911x_hard_start_xmit()
571 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_hard_start_xmit()
583 struct smc911x_local *lp = netdev_priv(dev); in smc911x_tx() local
590 while (((SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16) != 0) { in smc911x_tx()
592 (SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16); in smc911x_tx()
593 tx_status = SMC_GET_TX_STS_FIFO(lp); in smc911x_tx()
601 if ((tx_status & TX_STS_ES_) && !(lp->ctl_rfduplx && in smc911x_tx()
613 !lp->ctl_rfduplx) { in smc911x_tx()
631 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_read() local
634 SMC_GET_MII(lp, phyreg, phyaddr, phydata); in smc911x_phy_read()
648 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_write() local
653 SMC_SET_MII(lp, phyreg, phyaddr, phydata); in smc911x_phy_write()
662 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_detect() local
668 lp->phy_type = 0; in smc911x_phy_detect()
674 switch(lp->version) { in smc911x_phy_detect()
679 cfg = SMC_GET_HW_CFG(lp); in smc911x_phy_detect()
683 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
687 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
692 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
696 SMC_SET_HW_CFG(lp, cfg); in smc911x_phy_detect()
701 SMC_GET_PHY_ID1(lp, phyaddr & 31, id1); in smc911x_phy_detect()
702 SMC_GET_PHY_ID2(lp, phyaddr & 31, id2); in smc911x_phy_detect()
709 lp->mii.phy_id = phyaddr & 31; in smc911x_phy_detect()
710 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
721 SMC_GET_PHY_ID1(lp, 1, id1); in smc911x_phy_detect()
722 SMC_GET_PHY_ID2(lp, 1, id2); in smc911x_phy_detect()
724 lp->mii.phy_id = 1; in smc911x_phy_detect()
725 lp->phy_type = id1 << 16 | id2; in smc911x_phy_detect()
729 id1, id2, lp->mii.phy_id); in smc911x_phy_detect()
738 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_fixed() local
739 int phyaddr = lp->mii.phy_id; in smc911x_phy_fixed()
745 SMC_GET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
747 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
754 if (lp->ctl_rfduplx) in smc911x_phy_fixed()
757 if (lp->ctl_rspeed == 100) in smc911x_phy_fixed()
761 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
765 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_fixed()
784 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_reset() local
791 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
792 reg = SMC_GET_PMT_CTRL(lp); in smc911x_phy_reset()
795 SMC_SET_PMT_CTRL(lp, reg); in smc911x_phy_reset()
796 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
799 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_reset()
800 reg = SMC_GET_PMT_CTRL(lp); in smc911x_phy_reset()
801 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_reset()
825 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_powerdown() local
829 SMC_GET_PHY_BMCR(lp, phy, bmcr); in smc911x_phy_powerdown()
831 SMC_SET_PHY_BMCR(lp, phy, bmcr); in smc911x_phy_powerdown()
844 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_check_media() local
845 int phyaddr = lp->mii.phy_id; in smc911x_phy_check_media()
850 if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) { in smc911x_phy_check_media()
852 SMC_GET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_check_media()
853 SMC_GET_MAC_CR(lp, cr); in smc911x_phy_check_media()
854 if (lp->mii.full_duplex) { in smc911x_phy_check_media()
863 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr); in smc911x_phy_check_media()
864 SMC_SET_MAC_CR(lp, cr); in smc911x_phy_check_media()
879 struct smc911x_local *lp = container_of(work, struct smc911x_local, in smc911x_phy_configure() local
881 struct net_device *dev = lp->netdev; in smc911x_phy_configure()
882 int phyaddr = lp->mii.phy_id; in smc911x_phy_configure()
893 if (lp->phy_type == 0) in smc911x_phy_configure()
900 spin_lock_irqsave(&lp->lock, flags); in smc911x_phy_configure()
906 SMC_SET_PHY_INT_MASK(lp, phyaddr, PHY_INT_MASK_ENERGY_ON_ | in smc911x_phy_configure()
911 if (lp->mii.force_media) { in smc911x_phy_configure()
917 SMC_GET_PHY_BMSR(lp, phyaddr, my_phy_caps); in smc911x_phy_configure()
939 if (lp->ctl_rspeed != 100) in smc911x_phy_configure()
942 if (!lp->ctl_rfduplx) in smc911x_phy_configure()
946 SMC_SET_PHY_MII_ADV(lp, phyaddr, my_ad_caps); in smc911x_phy_configure()
947 lp->mii.advertising = my_ad_caps; in smc911x_phy_configure()
955 SMC_GET_PHY_MII_ADV(lp, phyaddr, status); in smc911x_phy_configure()
961 SMC_SET_PHY_BMCR(lp, phyaddr, BMCR_ANENABLE | BMCR_ANRESTART); in smc911x_phy_configure()
966 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_phy_configure()
977 struct smc911x_local *lp = netdev_priv(dev); in smc911x_phy_interrupt() local
978 int phyaddr = lp->mii.phy_id; in smc911x_phy_interrupt()
983 if (lp->phy_type == 0) in smc911x_phy_interrupt()
988 SMC_GET_PHY_INT_SRC(lp, phyaddr,status); in smc911x_phy_interrupt()
992 SMC_GET_AFC_CFG(lp)); in smc911x_phy_interrupt()
1004 struct smc911x_local *lp = netdev_priv(dev); in smc911x_interrupt() local
1011 spin_lock_irqsave(&lp->lock, flags); in smc911x_interrupt()
1014 if ((SMC_GET_IRQ_CFG(lp) & (INT_CFG_IRQ_INT_ | INT_CFG_IRQ_EN_)) != in smc911x_interrupt()
1016 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1020 mask = SMC_GET_INT_EN(lp); in smc911x_interrupt()
1021 SMC_SET_INT_EN(lp, 0); in smc911x_interrupt()
1028 status = SMC_GET_INT(lp); in smc911x_interrupt()
1039 SMC_ACK_INT(lp, INT_STS_SW_INT_); in smc911x_interrupt()
1044 SMC_ACK_INT(lp, INT_STS_RXE_); in smc911x_interrupt()
1048 SMC_ACK_INT(lp, INT_STS_RXDFH_INT_); in smc911x_interrupt()
1049 dev->stats.rx_dropped+=SMC_GET_RX_DROP(lp); in smc911x_interrupt()
1053 SMC_ACK_INT(lp, INT_STS_RXDF_INT_); in smc911x_interrupt()
1058 if (IS_REV_A(lp->revision)) { in smc911x_interrupt()
1060 SMC_GET_MAC_CR(lp, cr); in smc911x_interrupt()
1062 SMC_SET_MAC_CR(lp, cr); in smc911x_interrupt()
1067 SMC_ACK_INT(lp, INT_STS_RDFL_); in smc911x_interrupt()
1070 if (!IS_REV_A(lp->revision)) { in smc911x_interrupt()
1071 SMC_GET_MAC_CR(lp, cr); in smc911x_interrupt()
1073 SMC_SET_MAC_CR(lp, cr); in smc911x_interrupt()
1079 SMC_ACK_INT(lp, INT_STS_RDFO_); in smc911x_interrupt()
1085 fifo = SMC_GET_RX_FIFO_INF(lp); in smc911x_interrupt()
1092 if (lp->rxdma_active){ in smc911x_interrupt()
1096 fifo = SMC_GET_FIFO_INT(lp) & ~0xFF; in smc911x_interrupt()
1101 SMC_SET_FIFO_INT(lp, fifo); in smc911x_interrupt()
1106 SMC_ACK_INT(lp, INT_STS_RSFL_); in smc911x_interrupt()
1111 SMC_SET_FIFO_TDA(lp, 0xFF); in smc911x_interrupt()
1112 lp->tx_throttle = 0; in smc911x_interrupt()
1114 if (!lp->txdma_active) in smc911x_interrupt()
1117 SMC_ACK_INT(lp, INT_STS_TDFA_); in smc911x_interrupt()
1124 (SMC_GET_FIFO_INT(lp) & 0x00ff0000) >> 16); in smc911x_interrupt()
1126 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_interrupt()
1127 SMC_ACK_INT(lp, INT_STS_TSFL_); in smc911x_interrupt()
1128 SMC_ACK_INT(lp, INT_STS_TSFL_ | INT_STS_GPT_INT_); in smc911x_interrupt()
1134 SMC_ACK_INT(lp, INT_STS_TSFL_); in smc911x_interrupt()
1139 SMC_GET_IRQ_CFG(lp), in smc911x_interrupt()
1140 SMC_GET_FIFO_INT(lp), in smc911x_interrupt()
1141 SMC_GET_RX_CFG(lp)); in smc911x_interrupt()
1143 (SMC_GET_RX_FIFO_INF(lp) & 0x00ff0000) >> 16, in smc911x_interrupt()
1144 SMC_GET_RX_FIFO_INF(lp) & 0xffff, in smc911x_interrupt()
1145 SMC_GET_RX_STS_FIFO_PEEK(lp)); in smc911x_interrupt()
1146 SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000); in smc911x_interrupt()
1147 SMC_ACK_INT(lp, INT_STS_GPT_INT_); in smc911x_interrupt()
1155 SMC_ACK_INT(lp, INT_STS_PHY_INT_); in smc911x_interrupt()
1160 SMC_SET_INT_EN(lp, mask); in smc911x_interrupt()
1165 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_interrupt()
1174 struct smc911x_local *lp = data; in smc911x_tx_dma_irq() local
1175 struct net_device *dev = lp->netdev; in smc911x_tx_dma_irq()
1176 struct sk_buff *skb = lp->current_tx_skb; in smc911x_tx_dma_irq()
1183 dma_unmap_single(lp->dev, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE); in smc911x_tx_dma_irq()
1186 lp->current_tx_skb = NULL; in smc911x_tx_dma_irq()
1187 if (lp->pending_tx_skb != NULL) in smc911x_tx_dma_irq()
1192 spin_lock_irqsave(&lp->lock, flags); in smc911x_tx_dma_irq()
1193 lp->txdma_active = 0; in smc911x_tx_dma_irq()
1194 if (!lp->tx_throttle) { in smc911x_tx_dma_irq()
1197 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_tx_dma_irq()
1206 struct smc911x_local *lp = data; in smc911x_rx_dma_irq() local
1207 struct net_device *dev = lp->netdev; in smc911x_rx_dma_irq()
1208 struct sk_buff *skb = lp->current_rx_skb; in smc911x_rx_dma_irq()
1214 dma_unmap_single(lp->dev, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE); in smc911x_rx_dma_irq()
1216 lp->current_rx_skb = NULL; in smc911x_rx_dma_irq()
1223 spin_lock_irqsave(&lp->lock, flags); in smc911x_rx_dma_irq()
1224 pkts = (SMC_GET_RX_FIFO_INF(lp) & RX_FIFO_INF_RXSUSED_) >> 16; in smc911x_rx_dma_irq()
1228 lp->rxdma_active = 0; in smc911x_rx_dma_irq()
1230 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_rx_dma_irq()
1253 struct smc911x_local *lp = netdev_priv(dev); in smc911x_timeout() local
1259 spin_lock_irqsave(&lp->lock, flags); in smc911x_timeout()
1260 status = SMC_GET_INT(lp); in smc911x_timeout()
1261 mask = SMC_GET_INT_EN(lp); in smc911x_timeout()
1262 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_timeout()
1267 mask = SMC_GET_TX_CFG(lp); in smc911x_timeout()
1268 SMC_SET_TX_CFG(lp, mask | TX_CFG_TXS_DUMP_ | TX_CFG_TXD_DUMP_); in smc911x_timeout()
1274 if (lp->phy_type != 0) in smc911x_timeout()
1275 schedule_work(&lp->phy_configure); in smc911x_timeout()
1290 struct smc911x_local *lp = netdev_priv(dev); in smc911x_set_multicast_list() local
1297 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1298 SMC_GET_MAC_CR(lp, mcr); in smc911x_set_multicast_list()
1299 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1363 spin_lock_irqsave(&lp->lock, flags); in smc911x_set_multicast_list()
1364 SMC_SET_MAC_CR(lp, mcr); in smc911x_set_multicast_list()
1369 SMC_SET_HASHL(lp, multicast_table[0]); in smc911x_set_multicast_list()
1370 SMC_SET_HASHH(lp, multicast_table[1]); in smc911x_set_multicast_list()
1372 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_set_multicast_list()
1384 struct smc911x_local *lp = netdev_priv(dev); in smc911x_open() local
1392 smc911x_phy_configure(&lp->phy_configure); in smc911x_open()
1411 struct smc911x_local *lp = netdev_priv(dev); in smc911x_close() local
1421 if (lp->phy_type != 0) { in smc911x_close()
1425 cancel_work_sync(&lp->phy_configure); in smc911x_close()
1426 smc911x_phy_powerdown(dev, lp->mii.phy_id); in smc911x_close()
1429 if (lp->pending_tx_skb) { in smc911x_close()
1430 dev_kfree_skb(lp->pending_tx_skb); in smc911x_close()
1431 lp->pending_tx_skb = NULL; in smc911x_close()
1444 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_get_link_ksettings() local
1451 if (lp->phy_type != 0) { in smc911x_ethtool_get_link_ksettings()
1452 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1453 mii_ethtool_get_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_get_link_ksettings()
1454 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_get_link_ksettings()
1460 if (lp->ctl_rspeed == 10) in smc911x_ethtool_get_link_ksettings()
1462 else if (lp->ctl_rspeed == 100) in smc911x_ethtool_get_link_ksettings()
1467 SMC_GET_PHY_SPECIAL(lp, lp->mii.phy_id, status); in smc911x_ethtool_get_link_ksettings()
1484 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_set_link_ksettings() local
1488 if (lp->phy_type != 0) { in smc911x_ethtool_set_link_ksettings()
1489 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1490 ret = mii_ethtool_set_link_ksettings(&lp->mii, cmd); in smc911x_ethtool_set_link_ksettings()
1491 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_set_link_ksettings()
1501 lp->ctl_rfduplx = cmd->base.duplex == DUPLEX_FULL; in smc911x_ethtool_set_link_ksettings()
1520 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_nwayreset() local
1524 if (lp->phy_type != 0) { in smc911x_ethtool_nwayreset()
1525 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1526 ret = mii_nway_restart(&lp->mii); in smc911x_ethtool_nwayreset()
1527 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_nwayreset()
1535 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_getmsglevel() local
1536 return lp->msg_enable; in smc911x_ethtool_getmsglevel()
1541 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_setmsglevel() local
1542 lp->msg_enable = level; in smc911x_ethtool_setmsglevel()
1555 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_getregs() local
1560 regs->version = lp->version; in smc911x_ethtool_getregs()
1562 data[j++] = SMC_inl(lp, i); in smc911x_ethtool_getregs()
1565 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1566 SMC_GET_MAC_CSR(lp, i, reg); in smc911x_ethtool_getregs()
1567 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1571 spin_lock_irqsave(&lp->lock, flags); in smc911x_ethtool_getregs()
1572 SMC_GET_MII(lp, i, lp->mii.phy_id, reg); in smc911x_ethtool_getregs()
1573 spin_unlock_irqrestore(&lp->lock, flags); in smc911x_ethtool_getregs()
1580 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_wait_eeprom_ready() local
1584 e2p_cmd = SMC_GET_E2P_CMD(lp); in smc911x_ethtool_wait_eeprom_ready()
1592 e2p_cmd = SMC_GET_E2P_CMD(lp); in smc911x_ethtool_wait_eeprom_ready()
1605 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_write_eeprom_cmd() local
1610 SMC_SET_E2P_CMD(lp, E2P_CMD_EPC_BUSY_ | in smc911x_ethtool_write_eeprom_cmd()
1619 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_read_eeprom_byte() local
1624 *data = SMC_GET_E2P_DATA(lp); in smc911x_ethtool_read_eeprom_byte()
1631 struct smc911x_local *lp = netdev_priv(dev); in smc911x_ethtool_write_eeprom_byte() local
1636 SMC_SET_E2P_DATA(lp, data); in smc911x_ethtool_write_eeprom_byte()
1705 struct smc911x_local *lp = netdev_priv(dev); in smc911x_findirq() local
1717 SMC_SET_INT_EN(lp, INT_EN_SW_INT_EN_); in smc911x_findirq()
1725 int_status = SMC_GET_INT_EN(lp); in smc911x_findirq()
1738 SMC_SET_INT_EN(lp, 0); in smc911x_findirq()
1782 struct smc911x_local *lp = netdev_priv(dev); in smc911x_probe() local
1795 val = SMC_GET_BYTE_TEST(lp); in smc911x_probe()
1809 chip_id = SMC_GET_PN(lp); in smc911x_probe()
1822 revision = SMC_GET_REV(lp); in smc911x_probe()
1838 lp->version = chip_ids[i].id; in smc911x_probe()
1839 lp->revision = revision; in smc911x_probe()
1840 lp->tx_fifo_kb = tx_fifo_kb; in smc911x_probe()
1842 lp->tx_fifo_size=(lp->tx_fifo_kb<<10) - 512; in smc911x_probe()
1843 lp->rx_fifo_size= ((0x4000 - 512 - lp->tx_fifo_size) / 16) * 15; in smc911x_probe()
1846 switch(lp->tx_fifo_kb) { in smc911x_probe()
1853 lp->afc_cfg=0x008C46AF;break; in smc911x_probe()
1855 lp->afc_cfg=0x0082419F;break; in smc911x_probe()
1857 lp->afc_cfg=0x00783C9F;break; in smc911x_probe()
1859 lp->afc_cfg=0x006E374F;break; in smc911x_probe()
1861 lp->afc_cfg=0x0064328F;break; in smc911x_probe()
1863 lp->afc_cfg=0x005A2D7F;break; in smc911x_probe()
1865 lp->afc_cfg=0x0050287F;break; in smc911x_probe()
1867 lp->afc_cfg=0x0046236F;break; in smc911x_probe()
1869 lp->afc_cfg=0x003C1E6F;break; in smc911x_probe()
1871 lp->afc_cfg=0x0032195F;break; in smc911x_probe()
1878 lp->afc_cfg=0x0024124F;break; in smc911x_probe()
1880 lp->afc_cfg=0x0015073F;break; in smc911x_probe()
1882 lp->afc_cfg=0x0006032F;break; in smc911x_probe()
1890 lp->tx_fifo_size, lp->rx_fifo_size, lp->afc_cfg); in smc911x_probe()
1892 spin_lock_init(&lp->lock); in smc911x_probe()
1895 SMC_GET_MAC_ADDR(lp, dev->dev_addr); in smc911x_probe()
1930 INIT_WORK(&lp->phy_configure, smc911x_phy_configure); in smc911x_probe()
1931 lp->mii.phy_id_mask = 0x1f; in smc911x_probe()
1932 lp->mii.reg_num_mask = 0x1f; in smc911x_probe()
1933 lp->mii.force_media = 0; in smc911x_probe()
1934 lp->mii.full_duplex = 0; in smc911x_probe()
1935 lp->mii.dev = dev; in smc911x_probe()
1936 lp->mii.mdio_read = smc911x_phy_read; in smc911x_probe()
1937 lp->mii.mdio_write = smc911x_phy_write; in smc911x_probe()
1945 lp->msg_enable = NETIF_MSG_LINK; in smc911x_probe()
1946 lp->ctl_rfduplx = 1; in smc911x_probe()
1947 lp->ctl_rspeed = 100; in smc911x_probe()
1950 irq_flags = lp->cfg.irq_flags; in smc911x_probe()
1965 lp->rxdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1966 lp->txdma = dma_request_channel(mask, NULL, NULL); in smc911x_probe()
1967 lp->rxdma_active = 0; in smc911x_probe()
1968 lp->txdma_active = 0; in smc911x_probe()
1973 config.src_addr = lp->physaddr + RX_DATA_FIFO; in smc911x_probe()
1974 config.dst_addr = lp->physaddr + TX_DATA_FIFO; in smc911x_probe()
1977 retval = dmaengine_slave_config(lp->rxdma, &config); in smc911x_probe()
1979 dev_err(lp->dev, "dma rx channel configuration failed: %d\n", in smc911x_probe()
1983 retval = dmaengine_slave_config(lp->txdma, &config); in smc911x_probe()
1985 dev_err(lp->dev, "dma tx channel configuration failed: %d\n", in smc911x_probe()
1995 version_string, lp->revision, in smc911x_probe()
1999 if (lp->rxdma) in smc911x_probe()
2000 pr_cont(" RXDMA %p", lp->rxdma); in smc911x_probe()
2002 if (lp->txdma) in smc911x_probe()
2003 pr_cont(" TXDMA %p", lp->txdma); in smc911x_probe()
2014 if (lp->phy_type == 0) { in smc911x_probe()
2016 } else if ((lp->phy_type & ~0xff) == LAN911X_INTERNAL_PHY_ID) { in smc911x_probe()
2019 PRINTK(dev, "External PHY 0x%08x\n", lp->phy_type); in smc911x_probe()
2026 if (lp->rxdma) in smc911x_probe()
2027 dma_release_channel(lp->rxdma); in smc911x_probe()
2028 if (lp->txdma) in smc911x_probe()
2029 dma_release_channel(lp->txdma); in smc911x_probe()
2046 struct smc911x_local *lp; in smc911x_drv_probe() local
2073 lp = netdev_priv(ndev); in smc911x_drv_probe()
2074 lp->netdev = ndev; in smc911x_drv_probe()
2082 memcpy(&lp->cfg, pd, sizeof(lp->cfg)); in smc911x_drv_probe()
2093 lp->base = addr; in smc911x_drv_probe()
2107 lp->physaddr = res->start; in smc911x_drv_probe()
2108 lp->dev = &pdev->dev; in smc911x_drv_probe()
2118 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_remove() local
2129 if (lp->rxdma) in smc911x_drv_remove()
2130 dma_release_channel(lp->rxdma); in smc911x_drv_remove()
2131 if (lp->txdma) in smc911x_drv_remove()
2132 dma_release_channel(lp->txdma); in smc911x_drv_remove()
2135 iounmap(lp->base); in smc911x_drv_remove()
2146 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_suspend() local
2155 SMC_SET_PMT_CTRL(lp, 2<<12); in smc911x_drv_suspend()
2168 struct smc911x_local *lp = netdev_priv(ndev); in smc911x_drv_resume() local
2172 if (lp->phy_type != 0) in smc911x_drv_resume()
2173 smc911x_phy_configure(&lp->phy_configure); in smc911x_drv_resume()