Lines Matching refs:qep

84 static inline int qe_stop(struct sunqe *qep)  in qe_stop()  argument
86 void __iomem *cregs = qep->qcregs; in qe_stop()
87 void __iomem *mregs = qep->mregs; in qe_stop()
123 static void qe_init_rings(struct sunqe *qep) in qe_init_rings() argument
125 struct qe_init_block *qb = qep->qe_block; in qe_init_rings()
126 struct sunqe_buffers *qbufs = qep->buffers; in qe_init_rings()
127 __u32 qbufs_dvma = qep->buffers_dvma; in qe_init_rings()
130 qep->rx_new = qep->rx_old = qep->tx_new = qep->tx_old = 0; in qe_init_rings()
140 static int qe_init(struct sunqe *qep, int from_irq) in qe_init() argument
142 struct sunqec *qecp = qep->parent; in qe_init()
143 void __iomem *cregs = qep->qcregs; in qe_init()
144 void __iomem *mregs = qep->mregs; in qe_init()
146 unsigned char *e = &qep->dev->dev_addr[0]; in qe_init()
151 if (qe_stop(qep)) in qe_init()
155 sbus_writel(qep->qblock_dvma + qib_offset(qe_rxd, 0), cregs + CREG_RXDS); in qe_init()
156 sbus_writel(qep->qblock_dvma + qib_offset(qe_txd, 0), cregs + CREG_TXDS); in qe_init()
166 tmp = qep->channel * sbus_readl(gregs + GLOB_MSIZE); in qe_init()
222 qe_init_rings(qep); in qe_init()
239 printk(KERN_NOTICE "%s: Warning, link state is down.\n", qep->dev->name); in qe_init()
248 qe_set_multicast(qep->dev); in qe_init()
257 static int qe_is_bolixed(struct sunqe *qep, u32 qe_status) in qe_is_bolixed() argument
259 struct net_device *dev = qep->dev; in qe_is_bolixed()
403 qe_init(qep, 1); in qe_is_bolixed()
410 static void qe_rx(struct sunqe *qep) in qe_rx() argument
412 struct qe_rxd *rxbase = &qep->qe_block->qe_rxd[0]; in qe_rx()
413 struct net_device *dev = qep->dev; in qe_rx()
415 struct sunqe_buffers *qbufs = qep->buffers; in qe_rx()
416 __u32 qbufs_dvma = qep->buffers_dvma; in qe_rx()
417 int elem = qep->rx_new; in qe_rx()
445 skb->protocol = eth_type_trans(skb, qep->dev); in qe_rx()
457 qep->rx_new = elem; in qe_rx()
460 static void qe_tx_reclaim(struct sunqe *qep);
476 struct sunqe *qep = qecp->qes[channel]; in qec_interrupt() local
479 qe_status = sbus_readl(qep->qcregs + CREG_STAT); in qec_interrupt()
481 if (qe_is_bolixed(qep, qe_status)) in qec_interrupt()
485 qe_rx(qep); in qec_interrupt()
486 if (netif_queue_stopped(qep->dev) && in qec_interrupt()
488 spin_lock(&qep->lock); in qec_interrupt()
489 qe_tx_reclaim(qep); in qec_interrupt()
490 if (TX_BUFFS_AVAIL(qep) > 0) { in qec_interrupt()
494 netif_wake_queue(qep->dev); in qec_interrupt()
495 sbus_writel(1, qep->qcregs + CREG_TIMASK); in qec_interrupt()
497 spin_unlock(&qep->lock); in qec_interrupt()
511 struct sunqe *qep = netdev_priv(dev); in qe_open() local
513 qep->mconfig = (MREGS_MCONFIG_TXENAB | in qe_open()
516 return qe_init(qep, 0); in qe_open()
521 struct sunqe *qep = netdev_priv(dev); in qe_close() local
523 qe_stop(qep); in qe_close()
530 static void qe_tx_reclaim(struct sunqe *qep) in qe_tx_reclaim() argument
532 struct qe_txd *txbase = &qep->qe_block->qe_txd[0]; in qe_tx_reclaim()
533 int elem = qep->tx_old; in qe_tx_reclaim()
535 while (elem != qep->tx_new) { in qe_tx_reclaim()
542 qep->tx_old = elem; in qe_tx_reclaim()
547 struct sunqe *qep = netdev_priv(dev); in qe_tx_timeout() local
550 spin_lock_irq(&qep->lock); in qe_tx_timeout()
555 qe_tx_reclaim(qep); in qe_tx_timeout()
556 tx_full = TX_BUFFS_AVAIL(qep) <= 0; in qe_tx_timeout()
558 spin_unlock_irq(&qep->lock); in qe_tx_timeout()
564 qe_init(qep, 1); in qe_tx_timeout()
573 struct sunqe *qep = netdev_priv(dev); in qe_start_xmit() local
574 struct sunqe_buffers *qbufs = qep->buffers; in qe_start_xmit()
575 __u32 txbuf_dvma, qbufs_dvma = qep->buffers_dvma; in qe_start_xmit()
579 spin_lock_irq(&qep->lock); in qe_start_xmit()
581 qe_tx_reclaim(qep); in qe_start_xmit()
584 entry = qep->tx_new; in qe_start_xmit()
591 qep->qe_block->qe_txd[entry].tx_flags = TXD_UPDATE; in qe_start_xmit()
595 qep->qe_block->qe_txd[entry].tx_addr = txbuf_dvma; in qe_start_xmit()
596 qep->qe_block->qe_txd[entry].tx_flags = in qe_start_xmit()
598 qep->tx_new = NEXT_TX(entry); in qe_start_xmit()
601 sbus_writel(CREG_CTRL_TWAKEUP, qep->qcregs + CREG_CTRL); in qe_start_xmit()
606 if (TX_BUFFS_AVAIL(qep) <= 0) { in qe_start_xmit()
613 sbus_writel(0, qep->qcregs + CREG_TIMASK); in qe_start_xmit()
615 spin_unlock_irq(&qep->lock); in qe_start_xmit()
624 struct sunqe *qep = netdev_priv(dev); in qe_set_multicast() local
626 u8 new_mconfig = qep->mconfig; in qe_set_multicast()
635 qep->mregs + MREGS_IACONFIG); in qe_set_multicast()
636 while ((sbus_readb(qep->mregs + MREGS_IACONFIG) & MREGS_IACONFIG_ACHNGE) != 0) in qe_set_multicast()
639 sbus_writeb(0xff, qep->mregs + MREGS_FILTER); in qe_set_multicast()
640 sbus_writeb(0, qep->mregs + MREGS_IACONFIG); in qe_set_multicast()
655 qep->mregs + MREGS_IACONFIG); in qe_set_multicast()
656 while ((sbus_readb(qep->mregs + MREGS_IACONFIG) & MREGS_IACONFIG_ACHNGE) != 0) in qe_set_multicast()
660 sbus_writeb(tmp, qep->mregs + MREGS_FILTER); in qe_set_multicast()
662 sbus_writeb(0, qep->mregs + MREGS_IACONFIG); in qe_set_multicast()
671 qep->mconfig = new_mconfig; in qe_set_multicast()
672 sbus_writeb(qep->mconfig, qep->mregs + MREGS_MCONFIG); in qe_set_multicast()
682 struct sunqe *qep = netdev_priv(dev); in qe_get_drvinfo() local
688 op = qep->op; in qe_get_drvinfo()
698 struct sunqe *qep = netdev_priv(dev); in qe_get_link() local
699 void __iomem *mregs = qep->mregs; in qe_get_link()
702 spin_lock_irq(&qep->lock); in qe_get_link()
704 spin_unlock_irq(&qep->lock); in qe_get_link()