Lines Matching refs:priv

88 spi_read_buf(struct enc28j60_net *priv, int len, u8 *data)  in spi_read_buf()  argument
90 u8 *rx_buf = priv->spi_transfer_buf + 4; in spi_read_buf()
91 u8 *tx_buf = priv->spi_transfer_buf; in spi_read_buf()
105 ret = spi_sync(priv->spi, &msg); in spi_read_buf()
110 if (ret && netif_msg_drv(priv)) in spi_read_buf()
120 static int spi_write_buf(struct enc28j60_net *priv, int len, in spi_write_buf() argument
128 priv->spi_transfer_buf[0] = ENC28J60_WRITE_BUF_MEM; in spi_write_buf()
129 memcpy(&priv->spi_transfer_buf[1], data, len); in spi_write_buf()
130 ret = spi_write(priv->spi, priv->spi_transfer_buf, len + 1); in spi_write_buf()
131 if (ret && netif_msg_drv(priv)) in spi_write_buf()
141 static u8 spi_read_op(struct enc28j60_net *priv, u8 op, in spi_read_op() argument
155 ret = spi_write_then_read(priv->spi, tx_buf, 1, rx_buf, slen); in spi_read_op()
168 static int spi_write_op(struct enc28j60_net *priv, u8 op, in spi_write_op() argument
173 priv->spi_transfer_buf[0] = op | (addr & ADDR_MASK); in spi_write_op()
174 priv->spi_transfer_buf[1] = val; in spi_write_op()
175 ret = spi_write(priv->spi, priv->spi_transfer_buf, 2); in spi_write_op()
176 if (ret && netif_msg_drv(priv)) in spi_write_op()
182 static void enc28j60_soft_reset(struct enc28j60_net *priv) in enc28j60_soft_reset() argument
184 if (netif_msg_hw(priv)) in enc28j60_soft_reset()
187 spi_write_op(priv, ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET); in enc28j60_soft_reset()
196 static void enc28j60_set_bank(struct enc28j60_net *priv, u8 addr) in enc28j60_set_bank() argument
207 if ((b & ECON1_BSEL0) != (priv->bank & ECON1_BSEL0)) { in enc28j60_set_bank()
209 spi_write_op(priv, ENC28J60_BIT_FIELD_SET, ECON1, in enc28j60_set_bank()
212 spi_write_op(priv, ENC28J60_BIT_FIELD_CLR, ECON1, in enc28j60_set_bank()
215 if ((b & ECON1_BSEL1) != (priv->bank & ECON1_BSEL1)) { in enc28j60_set_bank()
217 spi_write_op(priv, ENC28J60_BIT_FIELD_SET, ECON1, in enc28j60_set_bank()
220 spi_write_op(priv, ENC28J60_BIT_FIELD_CLR, ECON1, in enc28j60_set_bank()
223 priv->bank = b; in enc28j60_set_bank()
240 static void nolock_reg_bfset(struct enc28j60_net *priv, in nolock_reg_bfset() argument
243 enc28j60_set_bank(priv, addr); in nolock_reg_bfset()
244 spi_write_op(priv, ENC28J60_BIT_FIELD_SET, addr, mask); in nolock_reg_bfset()
247 static void locked_reg_bfset(struct enc28j60_net *priv, in locked_reg_bfset() argument
250 mutex_lock(&priv->lock); in locked_reg_bfset()
251 nolock_reg_bfset(priv, addr, mask); in locked_reg_bfset()
252 mutex_unlock(&priv->lock); in locked_reg_bfset()
258 static void nolock_reg_bfclr(struct enc28j60_net *priv, in nolock_reg_bfclr() argument
261 enc28j60_set_bank(priv, addr); in nolock_reg_bfclr()
262 spi_write_op(priv, ENC28J60_BIT_FIELD_CLR, addr, mask); in nolock_reg_bfclr()
265 static void locked_reg_bfclr(struct enc28j60_net *priv, in locked_reg_bfclr() argument
268 mutex_lock(&priv->lock); in locked_reg_bfclr()
269 nolock_reg_bfclr(priv, addr, mask); in locked_reg_bfclr()
270 mutex_unlock(&priv->lock); in locked_reg_bfclr()
276 static int nolock_regb_read(struct enc28j60_net *priv, in nolock_regb_read() argument
279 enc28j60_set_bank(priv, address); in nolock_regb_read()
280 return spi_read_op(priv, ENC28J60_READ_CTRL_REG, address); in nolock_regb_read()
283 static int locked_regb_read(struct enc28j60_net *priv, in locked_regb_read() argument
288 mutex_lock(&priv->lock); in locked_regb_read()
289 ret = nolock_regb_read(priv, address); in locked_regb_read()
290 mutex_unlock(&priv->lock); in locked_regb_read()
298 static int nolock_regw_read(struct enc28j60_net *priv, in nolock_regw_read() argument
303 enc28j60_set_bank(priv, address); in nolock_regw_read()
304 rl = spi_read_op(priv, ENC28J60_READ_CTRL_REG, address); in nolock_regw_read()
305 rh = spi_read_op(priv, ENC28J60_READ_CTRL_REG, address + 1); in nolock_regw_read()
310 static int locked_regw_read(struct enc28j60_net *priv, in locked_regw_read() argument
315 mutex_lock(&priv->lock); in locked_regw_read()
316 ret = nolock_regw_read(priv, address); in locked_regw_read()
317 mutex_unlock(&priv->lock); in locked_regw_read()
325 static void nolock_regb_write(struct enc28j60_net *priv, in nolock_regb_write() argument
328 enc28j60_set_bank(priv, address); in nolock_regb_write()
329 spi_write_op(priv, ENC28J60_WRITE_CTRL_REG, address, data); in nolock_regb_write()
332 static void locked_regb_write(struct enc28j60_net *priv, in locked_regb_write() argument
335 mutex_lock(&priv->lock); in locked_regb_write()
336 nolock_regb_write(priv, address, data); in locked_regb_write()
337 mutex_unlock(&priv->lock); in locked_regb_write()
343 static void nolock_regw_write(struct enc28j60_net *priv, in nolock_regw_write() argument
346 enc28j60_set_bank(priv, address); in nolock_regw_write()
347 spi_write_op(priv, ENC28J60_WRITE_CTRL_REG, address, (u8) data); in nolock_regw_write()
348 spi_write_op(priv, ENC28J60_WRITE_CTRL_REG, address + 1, in nolock_regw_write()
352 static void locked_regw_write(struct enc28j60_net *priv, in locked_regw_write() argument
355 mutex_lock(&priv->lock); in locked_regw_write()
356 nolock_regw_write(priv, address, data); in locked_regw_write()
357 mutex_unlock(&priv->lock); in locked_regw_write()
364 static void enc28j60_mem_read(struct enc28j60_net *priv, in enc28j60_mem_read() argument
367 mutex_lock(&priv->lock); in enc28j60_mem_read()
368 nolock_regw_write(priv, ERDPTL, addr); in enc28j60_mem_read()
370 if (netif_msg_drv(priv)) { in enc28j60_mem_read()
372 reg = nolock_regw_read(priv, ERDPTL); in enc28j60_mem_read()
378 spi_read_buf(priv, len, data); in enc28j60_mem_read()
379 mutex_unlock(&priv->lock); in enc28j60_mem_read()
386 enc28j60_packet_write(struct enc28j60_net *priv, int len, const u8 *data) in enc28j60_packet_write() argument
388 mutex_lock(&priv->lock); in enc28j60_packet_write()
390 nolock_regw_write(priv, EWRPTL, TXSTART_INIT); in enc28j60_packet_write()
392 if (netif_msg_drv(priv)) { in enc28j60_packet_write()
394 reg = nolock_regw_read(priv, EWRPTL); in enc28j60_packet_write()
402 nolock_regw_write(priv, ETXNDL, TXSTART_INIT + len); in enc28j60_packet_write()
404 spi_write_op(priv, ENC28J60_WRITE_BUF_MEM, 0, 0x00); in enc28j60_packet_write()
405 if (netif_msg_hw(priv)) in enc28j60_packet_write()
408 __func__, nolock_regw_read(priv, EWRPTL)); in enc28j60_packet_write()
410 spi_write_buf(priv, len, data); in enc28j60_packet_write()
411 if (netif_msg_hw(priv)) in enc28j60_packet_write()
414 __func__, nolock_regw_read(priv, EWRPTL), len); in enc28j60_packet_write()
415 mutex_unlock(&priv->lock); in enc28j60_packet_write()
420 static int poll_ready(struct enc28j60_net *priv, u8 reg, u8 mask, u8 val) in poll_ready() argument
425 while ((nolock_regb_read(priv, reg) & mask) != val) { in poll_ready()
427 if (netif_msg_drv(priv)) in poll_ready()
428 dev_dbg(&priv->spi->dev, in poll_ready()
440 static int wait_phy_ready(struct enc28j60_net *priv) in wait_phy_ready() argument
442 return poll_ready(priv, MISTAT, MISTAT_BUSY, 0) ? 0 : 1; in wait_phy_ready()
449 static u16 enc28j60_phy_read(struct enc28j60_net *priv, u8 address) in enc28j60_phy_read() argument
453 mutex_lock(&priv->lock); in enc28j60_phy_read()
455 nolock_regb_write(priv, MIREGADR, address); in enc28j60_phy_read()
457 nolock_regb_write(priv, MICMD, MICMD_MIIRD); in enc28j60_phy_read()
459 wait_phy_ready(priv); in enc28j60_phy_read()
461 nolock_regb_write(priv, MICMD, 0x00); in enc28j60_phy_read()
463 ret = nolock_regw_read(priv, MIRDL); in enc28j60_phy_read()
464 mutex_unlock(&priv->lock); in enc28j60_phy_read()
469 static int enc28j60_phy_write(struct enc28j60_net *priv, u8 address, u16 data) in enc28j60_phy_write() argument
473 mutex_lock(&priv->lock); in enc28j60_phy_write()
475 nolock_regb_write(priv, MIREGADR, address); in enc28j60_phy_write()
477 nolock_regw_write(priv, MIWRL, data); in enc28j60_phy_write()
479 ret = wait_phy_ready(priv); in enc28j60_phy_write()
480 mutex_unlock(&priv->lock); in enc28j60_phy_write()
491 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_set_hw_macaddr() local
493 mutex_lock(&priv->lock); in enc28j60_set_hw_macaddr()
494 if (!priv->hw_enable) { in enc28j60_set_hw_macaddr()
495 if (netif_msg_drv(priv)) in enc28j60_set_hw_macaddr()
500 nolock_regb_write(priv, MAADR5, ndev->dev_addr[0]); in enc28j60_set_hw_macaddr()
501 nolock_regb_write(priv, MAADR4, ndev->dev_addr[1]); in enc28j60_set_hw_macaddr()
502 nolock_regb_write(priv, MAADR3, ndev->dev_addr[2]); in enc28j60_set_hw_macaddr()
503 nolock_regb_write(priv, MAADR2, ndev->dev_addr[3]); in enc28j60_set_hw_macaddr()
504 nolock_regb_write(priv, MAADR1, ndev->dev_addr[4]); in enc28j60_set_hw_macaddr()
505 nolock_regb_write(priv, MAADR0, ndev->dev_addr[5]); in enc28j60_set_hw_macaddr()
508 if (netif_msg_drv(priv)) in enc28j60_set_hw_macaddr()
514 mutex_unlock(&priv->lock); in enc28j60_set_hw_macaddr()
537 static void enc28j60_dump_regs(struct enc28j60_net *priv, const char *msg) in enc28j60_dump_regs() argument
539 mutex_lock(&priv->lock); in enc28j60_dump_regs()
551 msg, nolock_regb_read(priv, EREVID), in enc28j60_dump_regs()
552 nolock_regb_read(priv, ECON1), nolock_regb_read(priv, ECON2), in enc28j60_dump_regs()
553 nolock_regb_read(priv, ESTAT), nolock_regb_read(priv, EIR), in enc28j60_dump_regs()
554 nolock_regb_read(priv, EIE), nolock_regb_read(priv, MACON1), in enc28j60_dump_regs()
555 nolock_regb_read(priv, MACON3), nolock_regb_read(priv, MACON4), in enc28j60_dump_regs()
556 nolock_regw_read(priv, ERXSTL), nolock_regw_read(priv, ERXNDL), in enc28j60_dump_regs()
557 nolock_regw_read(priv, ERXWRPTL), in enc28j60_dump_regs()
558 nolock_regw_read(priv, ERXRDPTL), in enc28j60_dump_regs()
559 nolock_regb_read(priv, ERXFCON), in enc28j60_dump_regs()
560 nolock_regb_read(priv, EPKTCNT), in enc28j60_dump_regs()
561 nolock_regw_read(priv, MAMXFLL), nolock_regw_read(priv, ETXSTL), in enc28j60_dump_regs()
562 nolock_regw_read(priv, ETXNDL), in enc28j60_dump_regs()
563 nolock_regb_read(priv, MACLCON1), in enc28j60_dump_regs()
564 nolock_regb_read(priv, MACLCON2), in enc28j60_dump_regs()
565 nolock_regb_read(priv, MAPHSUP)); in enc28j60_dump_regs()
566 mutex_unlock(&priv->lock); in enc28j60_dump_regs()
595 static void nolock_rxfifo_init(struct enc28j60_net *priv, u16 start, u16 end) in nolock_rxfifo_init() argument
600 if (netif_msg_drv(priv)) in nolock_rxfifo_init()
606 priv->next_pk_ptr = start; in nolock_rxfifo_init()
607 nolock_regw_write(priv, ERXSTL, start); in nolock_rxfifo_init()
608 erxrdpt = erxrdpt_workaround(priv->next_pk_ptr, start, end); in nolock_rxfifo_init()
609 nolock_regw_write(priv, ERXRDPTL, erxrdpt); in nolock_rxfifo_init()
610 nolock_regw_write(priv, ERXNDL, end); in nolock_rxfifo_init()
613 static void nolock_txfifo_init(struct enc28j60_net *priv, u16 start, u16 end) in nolock_txfifo_init() argument
616 if (netif_msg_drv(priv)) in nolock_txfifo_init()
622 nolock_regw_write(priv, ETXSTL, start); in nolock_txfifo_init()
623 nolock_regw_write(priv, ETXNDL, end); in nolock_txfifo_init()
631 static void enc28j60_lowpower(struct enc28j60_net *priv, bool is_low) in enc28j60_lowpower() argument
633 if (netif_msg_drv(priv)) in enc28j60_lowpower()
634 dev_dbg(&priv->spi->dev, "%s power...\n", in enc28j60_lowpower()
637 mutex_lock(&priv->lock); in enc28j60_lowpower()
639 nolock_reg_bfclr(priv, ECON1, ECON1_RXEN); in enc28j60_lowpower()
640 poll_ready(priv, ESTAT, ESTAT_RXBUSY, 0); in enc28j60_lowpower()
641 poll_ready(priv, ECON1, ECON1_TXRTS, 0); in enc28j60_lowpower()
643 nolock_reg_bfset(priv, ECON2, ECON2_PWRSV); in enc28j60_lowpower()
645 nolock_reg_bfclr(priv, ECON2, ECON2_PWRSV); in enc28j60_lowpower()
646 poll_ready(priv, ESTAT, ESTAT_CLKRDY, ESTAT_CLKRDY); in enc28j60_lowpower()
649 mutex_unlock(&priv->lock); in enc28j60_lowpower()
652 static int enc28j60_hw_init(struct enc28j60_net *priv) in enc28j60_hw_init() argument
656 if (netif_msg_drv(priv)) in enc28j60_hw_init()
658 priv->full_duplex ? "FullDuplex" : "HalfDuplex"); in enc28j60_hw_init()
660 mutex_lock(&priv->lock); in enc28j60_hw_init()
662 enc28j60_soft_reset(priv); in enc28j60_hw_init()
664 spi_write_op(priv, ENC28J60_WRITE_CTRL_REG, ECON1, 0x00); in enc28j60_hw_init()
665 priv->bank = 0; in enc28j60_hw_init()
666 priv->hw_enable = false; in enc28j60_hw_init()
667 priv->tx_retry_count = 0; in enc28j60_hw_init()
668 priv->max_pk_counter = 0; in enc28j60_hw_init()
669 priv->rxfilter = RXFILTER_NORMAL; in enc28j60_hw_init()
671 nolock_regb_write(priv, ECON2, ECON2_AUTOINC | ECON2_VRPS); in enc28j60_hw_init()
673 nolock_rxfifo_init(priv, RXSTART_INIT, RXEND_INIT); in enc28j60_hw_init()
674 nolock_txfifo_init(priv, TXSTART_INIT, TXEND_INIT); in enc28j60_hw_init()
675 mutex_unlock(&priv->lock); in enc28j60_hw_init()
682 reg = locked_regb_read(priv, EREVID); in enc28j60_hw_init()
683 if (netif_msg_drv(priv)) in enc28j60_hw_init()
686 if (netif_msg_drv(priv)) in enc28j60_hw_init()
693 locked_regb_write(priv, ERXFCON, in enc28j60_hw_init()
697 locked_regb_write(priv, MACON1, in enc28j60_hw_init()
700 if (priv->full_duplex) { in enc28j60_hw_init()
701 locked_regb_write(priv, MACON3, in enc28j60_hw_init()
705 locked_regb_write(priv, MAIPGL, 0x12); in enc28j60_hw_init()
707 locked_regb_write(priv, MABBIPG, 0x15); in enc28j60_hw_init()
709 locked_regb_write(priv, MACON3, in enc28j60_hw_init()
712 locked_regb_write(priv, MACON4, 1 << 6); /* DEFER bit */ in enc28j60_hw_init()
714 locked_regw_write(priv, MAIPGL, 0x0C12); in enc28j60_hw_init()
716 locked_regb_write(priv, MABBIPG, 0x12); in enc28j60_hw_init()
723 locked_regw_write(priv, MAMXFLL, MAX_FRAMELEN); in enc28j60_hw_init()
726 if (!enc28j60_phy_write(priv, PHLCON, ENC28J60_LAMPS_MODE)) in enc28j60_hw_init()
729 if (priv->full_duplex) { in enc28j60_hw_init()
730 if (!enc28j60_phy_write(priv, PHCON1, PHCON1_PDPXMD)) in enc28j60_hw_init()
732 if (!enc28j60_phy_write(priv, PHCON2, 0x00)) in enc28j60_hw_init()
735 if (!enc28j60_phy_write(priv, PHCON1, 0x00)) in enc28j60_hw_init()
737 if (!enc28j60_phy_write(priv, PHCON2, PHCON2_HDLDIS)) in enc28j60_hw_init()
740 if (netif_msg_hw(priv)) in enc28j60_hw_init()
741 enc28j60_dump_regs(priv, "Hw initialized."); in enc28j60_hw_init()
746 static void enc28j60_hw_enable(struct enc28j60_net *priv) in enc28j60_hw_enable() argument
749 if (netif_msg_hw(priv)) in enc28j60_hw_enable()
753 enc28j60_phy_write(priv, PHIE, PHIE_PGEIE | PHIE_PLNKIE); in enc28j60_hw_enable()
755 mutex_lock(&priv->lock); in enc28j60_hw_enable()
756 nolock_reg_bfclr(priv, EIR, EIR_DMAIF | EIR_LINKIF | in enc28j60_hw_enable()
758 nolock_regb_write(priv, EIE, EIE_INTIE | EIE_PKTIE | EIE_LINKIE | in enc28j60_hw_enable()
762 nolock_reg_bfset(priv, ECON1, ECON1_RXEN); in enc28j60_hw_enable()
763 priv->hw_enable = true; in enc28j60_hw_enable()
764 mutex_unlock(&priv->lock); in enc28j60_hw_enable()
767 static void enc28j60_hw_disable(struct enc28j60_net *priv) in enc28j60_hw_disable() argument
769 mutex_lock(&priv->lock); in enc28j60_hw_disable()
771 nolock_regb_write(priv, EIE, 0x00); in enc28j60_hw_disable()
772 nolock_reg_bfclr(priv, ECON1, ECON1_RXEN); in enc28j60_hw_disable()
773 priv->hw_enable = false; in enc28j60_hw_disable()
774 mutex_unlock(&priv->lock); in enc28j60_hw_disable()
780 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_setlink() local
783 if (!priv->hw_enable) { in enc28j60_setlink()
788 priv->full_duplex = (duplex == DUPLEX_FULL); in enc28j60_setlink()
790 if (netif_msg_link(priv)) in enc28j60_setlink()
796 if (netif_msg_link(priv)) in enc28j60_setlink()
807 static void enc28j60_read_tsv(struct enc28j60_net *priv, u8 tsv[TSV_SIZE]) in enc28j60_read_tsv() argument
811 endptr = locked_regw_read(priv, ETXNDL); in enc28j60_read_tsv()
812 if (netif_msg_hw(priv)) in enc28j60_read_tsv()
815 enc28j60_mem_read(priv, endptr + 1, TSV_SIZE, tsv); in enc28j60_read_tsv()
818 static void enc28j60_dump_tsv(struct enc28j60_net *priv, const char *msg, in enc28j60_dump_tsv() argument
861 static void enc28j60_dump_rsv(struct enc28j60_net *priv, const char *msg, in enc28j60_dump_rsv() argument
901 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_hw_rx() local
907 if (netif_msg_rx_status(priv)) in enc28j60_hw_rx()
909 priv->next_pk_ptr); in enc28j60_hw_rx()
911 if (unlikely(priv->next_pk_ptr > RXEND_INIT)) { in enc28j60_hw_rx()
912 if (netif_msg_rx_err(priv)) in enc28j60_hw_rx()
915 __func__, priv->next_pk_ptr); in enc28j60_hw_rx()
917 mutex_lock(&priv->lock); in enc28j60_hw_rx()
918 nolock_reg_bfclr(priv, ECON1, ECON1_RXEN); in enc28j60_hw_rx()
919 nolock_reg_bfset(priv, ECON1, ECON1_RXRST); in enc28j60_hw_rx()
920 nolock_reg_bfclr(priv, ECON1, ECON1_RXRST); in enc28j60_hw_rx()
921 nolock_rxfifo_init(priv, RXSTART_INIT, RXEND_INIT); in enc28j60_hw_rx()
922 nolock_reg_bfclr(priv, EIR, EIR_RXERIF); in enc28j60_hw_rx()
923 nolock_reg_bfset(priv, ECON1, ECON1_RXEN); in enc28j60_hw_rx()
924 mutex_unlock(&priv->lock); in enc28j60_hw_rx()
929 enc28j60_mem_read(priv, priv->next_pk_ptr, sizeof(rsv), rsv); in enc28j60_hw_rx()
943 if (netif_msg_rx_status(priv)) in enc28j60_hw_rx()
944 enc28j60_dump_rsv(priv, __func__, next_packet, len, rxstat); in enc28j60_hw_rx()
947 if (netif_msg_rx_err(priv)) in enc28j60_hw_rx()
959 if (netif_msg_rx_err(priv)) in enc28j60_hw_rx()
966 enc28j60_mem_read(priv, in enc28j60_hw_rx()
967 rx_packet_start(priv->next_pk_ptr), in enc28j60_hw_rx()
969 if (netif_msg_pktdata(priv)) in enc28j60_hw_rx()
984 if (netif_msg_hw(priv)) in enc28j60_hw_rx()
988 mutex_lock(&priv->lock); in enc28j60_hw_rx()
989 nolock_regw_write(priv, ERXRDPTL, erxrdpt); in enc28j60_hw_rx()
991 if (netif_msg_drv(priv)) { in enc28j60_hw_rx()
993 reg = nolock_regw_read(priv, ERXRDPTL); in enc28j60_hw_rx()
1000 priv->next_pk_ptr = next_packet; in enc28j60_hw_rx()
1002 nolock_reg_bfset(priv, ECON2, ECON2_PKTDEC); in enc28j60_hw_rx()
1003 mutex_unlock(&priv->lock); in enc28j60_hw_rx()
1009 static int enc28j60_get_free_rxfifo(struct enc28j60_net *priv) in enc28j60_get_free_rxfifo() argument
1014 mutex_lock(&priv->lock); in enc28j60_get_free_rxfifo()
1015 epkcnt = nolock_regb_read(priv, EPKTCNT); in enc28j60_get_free_rxfifo()
1019 erxst = nolock_regw_read(priv, ERXSTL); in enc28j60_get_free_rxfifo()
1020 erxnd = nolock_regw_read(priv, ERXNDL); in enc28j60_get_free_rxfifo()
1021 erxwr = nolock_regw_read(priv, ERXWRPTL); in enc28j60_get_free_rxfifo()
1022 erxrd = nolock_regw_read(priv, ERXRDPTL); in enc28j60_get_free_rxfifo()
1031 mutex_unlock(&priv->lock); in enc28j60_get_free_rxfifo()
1032 if (netif_msg_rx_status(priv)) in enc28j60_get_free_rxfifo()
1043 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_check_link_status() local
1047 reg = enc28j60_phy_read(priv, PHSTAT2); in enc28j60_check_link_status()
1048 if (netif_msg_hw(priv)) in enc28j60_check_link_status()
1051 enc28j60_phy_read(priv, PHSTAT1), reg); in enc28j60_check_link_status()
1056 if (netif_msg_ifup(priv)) in enc28j60_check_link_status()
1060 if (netif_msg_ifdown(priv)) in enc28j60_check_link_status()
1068 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_tx_clear() local
1075 if (priv->tx_skb) { in enc28j60_tx_clear()
1077 ndev->stats.tx_bytes += priv->tx_skb->len; in enc28j60_tx_clear()
1078 dev_kfree_skb(priv->tx_skb); in enc28j60_tx_clear()
1079 priv->tx_skb = NULL; in enc28j60_tx_clear()
1081 locked_reg_bfclr(priv, ECON1, ECON1_TXRTS); in enc28j60_tx_clear()
1095 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_rx_interrupt() local
1098 pk_counter = locked_regb_read(priv, EPKTCNT); in enc28j60_rx_interrupt()
1099 if (pk_counter && netif_msg_intr(priv)) in enc28j60_rx_interrupt()
1101 if (pk_counter > priv->max_pk_counter) { in enc28j60_rx_interrupt()
1103 priv->max_pk_counter = pk_counter; in enc28j60_rx_interrupt()
1104 if (netif_msg_rx_status(priv) && priv->max_pk_counter > 1) in enc28j60_rx_interrupt()
1106 priv->max_pk_counter); in enc28j60_rx_interrupt()
1117 struct enc28j60_net *priv = in enc28j60_irq_work_handler() local
1119 struct net_device *ndev = priv->netdev; in enc28j60_irq_work_handler()
1122 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1125 locked_reg_bfclr(priv, EIE, EIE_INTIE); in enc28j60_irq_work_handler()
1129 intflags = locked_regb_read(priv, EIR); in enc28j60_irq_work_handler()
1133 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1136 locked_reg_bfclr(priv, EIR, EIR_DMAIF); in enc28j60_irq_work_handler()
1141 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1146 enc28j60_phy_read(priv, PHIR); in enc28j60_irq_work_handler()
1152 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1155 priv->tx_retry_count = 0; in enc28j60_irq_work_handler()
1156 if (locked_regb_read(priv, ESTAT) & ESTAT_TXABRT) { in enc28j60_irq_work_handler()
1157 if (netif_msg_tx_err(priv)) in enc28j60_irq_work_handler()
1162 if (netif_msg_tx_done(priv)) { in enc28j60_irq_work_handler()
1164 enc28j60_read_tsv(priv, tsv); in enc28j60_irq_work_handler()
1165 enc28j60_dump_tsv(priv, "Tx Done", tsv); in enc28j60_irq_work_handler()
1168 locked_reg_bfclr(priv, EIR, EIR_TXIF); in enc28j60_irq_work_handler()
1175 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1178 locked_reg_bfclr(priv, ECON1, ECON1_TXRTS); in enc28j60_irq_work_handler()
1179 enc28j60_read_tsv(priv, tsv); in enc28j60_irq_work_handler()
1180 if (netif_msg_tx_err(priv)) in enc28j60_irq_work_handler()
1181 enc28j60_dump_tsv(priv, "Tx Error", tsv); in enc28j60_irq_work_handler()
1183 mutex_lock(&priv->lock); in enc28j60_irq_work_handler()
1184 nolock_reg_bfset(priv, ECON1, ECON1_TXRST); in enc28j60_irq_work_handler()
1185 nolock_reg_bfclr(priv, ECON1, ECON1_TXRST); in enc28j60_irq_work_handler()
1186 nolock_txfifo_init(priv, TXSTART_INIT, TXEND_INIT); in enc28j60_irq_work_handler()
1187 mutex_unlock(&priv->lock); in enc28j60_irq_work_handler()
1190 if (netif_msg_tx_err(priv)) in enc28j60_irq_work_handler()
1193 priv->tx_retry_count); in enc28j60_irq_work_handler()
1194 if (priv->tx_retry_count++ < MAX_TX_RETRYCOUNT) in enc28j60_irq_work_handler()
1195 locked_reg_bfset(priv, ECON1, in enc28j60_irq_work_handler()
1201 locked_reg_bfclr(priv, EIR, EIR_TXERIF); in enc28j60_irq_work_handler()
1206 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1210 if (enc28j60_get_free_rxfifo(priv) <= 0) { in enc28j60_irq_work_handler()
1211 if (netif_msg_rx_err(priv)) in enc28j60_irq_work_handler()
1216 locked_reg_bfclr(priv, EIR, EIR_RXERIF); in enc28j60_irq_work_handler()
1224 locked_reg_bfset(priv, EIE, EIE_INTIE); in enc28j60_irq_work_handler()
1225 if (netif_msg_intr(priv)) in enc28j60_irq_work_handler()
1234 static void enc28j60_hw_tx(struct enc28j60_net *priv) in enc28j60_hw_tx() argument
1236 if (netif_msg_tx_queued(priv)) in enc28j60_hw_tx()
1238 ": Tx Packet Len:%d\n", priv->tx_skb->len); in enc28j60_hw_tx()
1240 if (netif_msg_pktdata(priv)) in enc28j60_hw_tx()
1242 priv->tx_skb->len, priv->tx_skb->data); in enc28j60_hw_tx()
1243 enc28j60_packet_write(priv, priv->tx_skb->len, priv->tx_skb->data); in enc28j60_hw_tx()
1247 if (netif_msg_drv(priv)) { in enc28j60_hw_tx()
1252 test_len = priv->tx_skb->len; in enc28j60_hw_tx()
1257 enc28j60_mem_read(priv, TXSTART_INIT + 1, test_len, test_buf); in enc28j60_hw_tx()
1260 if (priv->tx_skb->data[k] != test_buf[k]) { in enc28j60_hw_tx()
1264 priv->tx_skb->data[k], test_buf[k]); in enc28j60_hw_tx()
1274 locked_reg_bfset(priv, ECON1, ECON1_TXRTS); in enc28j60_hw_tx()
1280 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_send_packet() local
1282 if (netif_msg_tx_queued(priv)) in enc28j60_send_packet()
1296 priv->tx_skb = skb; in enc28j60_send_packet()
1297 schedule_work(&priv->tx_work); in enc28j60_send_packet()
1304 struct enc28j60_net *priv = in enc28j60_tx_work_handler() local
1308 enc28j60_hw_tx(priv); in enc28j60_tx_work_handler()
1313 struct enc28j60_net *priv = dev_id; in enc28j60_irq() local
1322 schedule_work(&priv->irq_work); in enc28j60_irq()
1329 struct enc28j60_net *priv = netdev_priv(ndev); in enc28j60_tx_timeout() local
1331 if (netif_msg_timer(priv)) in enc28j60_tx_timeout()
1336 schedule_work(&priv->restart_work); in enc28j60_tx_timeout()
1349 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_net_open() local
1351 if (netif_msg_drv(priv)) in enc28j60_net_open()
1355 if (netif_msg_ifup(priv)) in enc28j60_net_open()
1361 enc28j60_lowpower(priv, false); in enc28j60_net_open()
1362 enc28j60_hw_disable(priv); in enc28j60_net_open()
1363 if (!enc28j60_hw_init(priv)) { in enc28j60_net_open()
1364 if (netif_msg_ifup(priv)) in enc28j60_net_open()
1371 enc28j60_hw_enable(priv); in enc28j60_net_open()
1385 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_net_close() local
1387 if (netif_msg_drv(priv)) in enc28j60_net_close()
1390 enc28j60_hw_disable(priv); in enc28j60_net_close()
1391 enc28j60_lowpower(priv, true); in enc28j60_net_close()
1405 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_set_multicast_list() local
1406 int oldfilter = priv->rxfilter; in enc28j60_set_multicast_list()
1409 if (netif_msg_link(priv)) in enc28j60_set_multicast_list()
1411 priv->rxfilter = RXFILTER_PROMISC; in enc28j60_set_multicast_list()
1413 if (netif_msg_link(priv)) in enc28j60_set_multicast_list()
1416 priv->rxfilter = RXFILTER_MULTI; in enc28j60_set_multicast_list()
1418 if (netif_msg_link(priv)) in enc28j60_set_multicast_list()
1420 priv->rxfilter = RXFILTER_NORMAL; in enc28j60_set_multicast_list()
1423 if (oldfilter != priv->rxfilter) in enc28j60_set_multicast_list()
1424 schedule_work(&priv->setrx_work); in enc28j60_set_multicast_list()
1429 struct enc28j60_net *priv = in enc28j60_setrx_work_handler() local
1432 if (priv->rxfilter == RXFILTER_PROMISC) { in enc28j60_setrx_work_handler()
1433 if (netif_msg_drv(priv)) in enc28j60_setrx_work_handler()
1435 locked_regb_write(priv, ERXFCON, 0x00); in enc28j60_setrx_work_handler()
1436 } else if (priv->rxfilter == RXFILTER_MULTI) { in enc28j60_setrx_work_handler()
1437 if (netif_msg_drv(priv)) in enc28j60_setrx_work_handler()
1439 locked_regb_write(priv, ERXFCON, in enc28j60_setrx_work_handler()
1443 if (netif_msg_drv(priv)) in enc28j60_setrx_work_handler()
1445 locked_regb_write(priv, ERXFCON, in enc28j60_setrx_work_handler()
1453 struct enc28j60_net *priv = in enc28j60_restart_work_handler() local
1455 struct net_device *ndev = priv->netdev; in enc28j60_restart_work_handler()
1484 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_get_settings() local
1491 cmd->duplex = priv->full_duplex ? DUPLEX_FULL : DUPLEX_HALF; in enc28j60_get_settings()
1507 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_get_msglevel() local
1508 return priv->msg_enable; in enc28j60_get_msglevel()
1513 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_set_msglevel() local
1514 priv->msg_enable = val; in enc28j60_set_msglevel()
1527 struct enc28j60_net *priv = netdev_priv(dev); in enc28j60_chipset_init() local
1529 return enc28j60_hw_init(priv); in enc28j60_chipset_init()
1546 struct enc28j60_net *priv; in enc28j60_probe() local
1558 priv = netdev_priv(dev); in enc28j60_probe()
1560 priv->netdev = dev; /* priv to netdev reference */ in enc28j60_probe()
1561 priv->spi = spi; /* priv to spi reference */ in enc28j60_probe()
1562 priv->msg_enable = netif_msg_init(debug.msg_enable, in enc28j60_probe()
1564 mutex_init(&priv->lock); in enc28j60_probe()
1565 INIT_WORK(&priv->tx_work, enc28j60_tx_work_handler); in enc28j60_probe()
1566 INIT_WORK(&priv->setrx_work, enc28j60_setrx_work_handler); in enc28j60_probe()
1567 INIT_WORK(&priv->irq_work, enc28j60_irq_work_handler); in enc28j60_probe()
1568 INIT_WORK(&priv->restart_work, enc28j60_restart_work_handler); in enc28j60_probe()
1569 spi_set_drvdata(spi, priv); /* spi to priv reference */ in enc28j60_probe()
1573 if (netif_msg_probe(priv)) in enc28j60_probe()
1584 ret = request_irq(spi->irq, enc28j60_irq, 0, DRV_NAME, priv); in enc28j60_probe()
1586 if (netif_msg_probe(priv)) in enc28j60_probe()
1598 enc28j60_lowpower(priv, true); in enc28j60_probe()
1602 if (netif_msg_probe(priv)) in enc28j60_probe()
1612 free_irq(spi->irq, priv); in enc28j60_probe()
1621 struct enc28j60_net *priv = spi_get_drvdata(spi); in enc28j60_remove() local
1623 if (netif_msg_drv(priv)) in enc28j60_remove()
1626 unregister_netdev(priv->netdev); in enc28j60_remove()
1627 free_irq(spi->irq, priv); in enc28j60_remove()
1628 free_netdev(priv->netdev); in enc28j60_remove()