Lines Matching refs:desc
241 static void cpmac_dump_desc(struct net_device *dev, struct cpmac_desc *desc) in cpmac_dump_desc() argument
245 printk("%s: desc[%p]:", dev->name, desc); in cpmac_dump_desc()
246 for (i = 0; i < sizeof(*desc) / 4; i++) in cpmac_dump_desc()
247 printk(" %08x", ((u32 *)desc)[i]); in cpmac_dump_desc()
369 struct cpmac_desc *desc) in cpmac_rx_one() argument
374 cpmac_dump_desc(priv->dev, desc); in cpmac_rx_one()
375 cpmac_write(priv->regs, CPMAC_RX_ACK(0), (u32)desc->mapping); in cpmac_rx_one()
376 if (unlikely(!desc->datalen)) { in cpmac_rx_one()
385 skb_put(desc->skb, desc->datalen); in cpmac_rx_one()
386 desc->skb->protocol = eth_type_trans(desc->skb, priv->dev); in cpmac_rx_one()
387 skb_checksum_none_assert(desc->skb); in cpmac_rx_one()
389 priv->dev->stats.rx_bytes += desc->datalen; in cpmac_rx_one()
390 result = desc->skb; in cpmac_rx_one()
391 dma_unmap_single(&priv->dev->dev, desc->data_mapping, in cpmac_rx_one()
393 desc->skb = skb; in cpmac_rx_one()
394 desc->data_mapping = dma_map_single(&priv->dev->dev, skb->data, in cpmac_rx_one()
397 desc->hw_data = (u32)desc->data_mapping; in cpmac_rx_one()
410 desc->buflen = CPMAC_SKB_SIZE; in cpmac_rx_one()
411 desc->dataflags = CPMAC_OWN; in cpmac_rx_one()
419 struct cpmac_desc *desc, *restart; in cpmac_poll() local
433 desc = priv->rx_head; in cpmac_poll()
435 while (((desc->dataflags & CPMAC_OWN) == 0) && (received < budget)) { in cpmac_poll()
438 if ((desc->dataflags & CPMAC_EOQ) != 0) { in cpmac_poll()
448 restart, desc); in cpmac_poll()
452 restart = desc->next; in cpmac_poll()
455 skb = cpmac_rx_one(priv, desc); in cpmac_poll()
460 desc = desc->next; in cpmac_poll()
463 if (desc != priv->rx_head) { in cpmac_poll()
467 desc->prev->hw_next = (u32)0; in cpmac_poll()
507 priv->rx_head = desc; in cpmac_poll()
553 struct cpmac_desc *desc; in cpmac_start_xmit() local
566 desc = &priv->desc_ring[queue]; in cpmac_start_xmit()
567 if (unlikely(desc->dataflags & CPMAC_OWN)) { in cpmac_start_xmit()
576 desc->dataflags = CPMAC_SOP | CPMAC_EOP | CPMAC_OWN; in cpmac_start_xmit()
577 desc->skb = skb; in cpmac_start_xmit()
578 desc->data_mapping = dma_map_single(&dev->dev, skb->data, len, in cpmac_start_xmit()
580 desc->hw_data = (u32)desc->data_mapping; in cpmac_start_xmit()
581 desc->datalen = len; in cpmac_start_xmit()
582 desc->buflen = len; in cpmac_start_xmit()
586 cpmac_dump_desc(dev, desc); in cpmac_start_xmit()
589 cpmac_write(priv->regs, CPMAC_TX_PTR(queue), (u32)desc->mapping); in cpmac_start_xmit()
596 struct cpmac_desc *desc; in cpmac_end_xmit() local
599 desc = &priv->desc_ring[queue]; in cpmac_end_xmit()
600 cpmac_write(priv->regs, CPMAC_TX_ACK(queue), (u32)desc->mapping); in cpmac_end_xmit()
601 if (likely(desc->skb)) { in cpmac_end_xmit()
604 dev->stats.tx_bytes += desc->skb->len; in cpmac_end_xmit()
606 dma_unmap_single(&dev->dev, desc->data_mapping, desc->skb->len, in cpmac_end_xmit()
611 desc->skb, desc->skb->len); in cpmac_end_xmit()
613 dev_kfree_skb_irq(desc->skb); in cpmac_end_xmit()
614 desc->skb = NULL; in cpmac_end_xmit()
692 struct cpmac_desc *desc; in cpmac_clear_rx() local
697 desc = priv->rx_head; in cpmac_clear_rx()
699 if ((desc->dataflags & CPMAC_OWN) == 0) { in cpmac_clear_rx()
703 cpmac_dump_desc(dev, desc); in cpmac_clear_rx()
704 desc->dataflags = CPMAC_OWN; in cpmac_clear_rx()
707 desc->hw_next = desc->next->mapping; in cpmac_clear_rx()
708 desc = desc->next; in cpmac_clear_rx()
953 struct cpmac_desc *desc; in cpmac_open() local
985 priv->desc_ring[i].mapping = priv->dma_ring + sizeof(*desc) * i; in cpmac_open()
988 for (i = 0, desc = priv->rx_head; i < priv->ring_size; i++, desc++) { in cpmac_open()
994 desc->skb = skb; in cpmac_open()
995 desc->data_mapping = dma_map_single(&dev->dev, skb->data, in cpmac_open()
998 desc->hw_data = (u32)desc->data_mapping; in cpmac_open()
999 desc->buflen = CPMAC_SKB_SIZE; in cpmac_open()
1000 desc->dataflags = CPMAC_OWN; in cpmac_open()
1001 desc->next = &priv->rx_head[(i + 1) % priv->ring_size]; in cpmac_open()
1002 desc->next->prev = desc; in cpmac_open()
1003 desc->hw_next = (u32)desc->next->mapping; in cpmac_open()