Lines Matching refs:elem
116 struct c2_element *elem; in c2_tx_ring_alloc() local
119 tx_ring->start = kmalloc(sizeof(*elem) * tx_ring->count, GFP_KERNEL); in c2_tx_ring_alloc()
123 elem = tx_ring->start; in c2_tx_ring_alloc()
126 for (i = 0; i < tx_ring->count; i++, elem++, tx_desc++, txp_desc++) { in c2_tx_ring_alloc()
137 elem->skb = NULL; in c2_tx_ring_alloc()
138 elem->ht_desc = tx_desc; in c2_tx_ring_alloc()
139 elem->hw_desc = txp_desc; in c2_tx_ring_alloc()
142 elem->next = tx_ring->start; in c2_tx_ring_alloc()
145 elem->next = elem + 1; in c2_tx_ring_alloc()
165 struct c2_element *elem; in c2_rx_ring_alloc() local
168 rx_ring->start = kmalloc(sizeof(*elem) * rx_ring->count, GFP_KERNEL); in c2_rx_ring_alloc()
172 elem = rx_ring->start; in c2_rx_ring_alloc()
175 for (i = 0; i < rx_ring->count; i++, elem++, rx_desc++, rxp_desc++) { in c2_rx_ring_alloc()
189 elem->skb = NULL; in c2_rx_ring_alloc()
190 elem->ht_desc = rx_desc; in c2_rx_ring_alloc()
191 elem->hw_desc = rxp_desc; in c2_rx_ring_alloc()
194 elem->next = rx_ring->start; in c2_rx_ring_alloc()
197 elem->next = elem + 1; in c2_rx_ring_alloc()
209 static inline int c2_rx_alloc(struct c2_port *c2_port, struct c2_element *elem) in c2_rx_alloc() argument
212 struct c2_rx_desc *rx_desc = elem->ht_desc; in c2_rx_alloc()
239 __raw_writew(0, elem->hw_desc + C2_RXP_STATUS); in c2_rx_alloc()
241 elem->hw_desc + C2_RXP_LEN); in c2_rx_alloc()
242 __raw_writeq((__force u64) cpu_to_be64(mapaddr), elem->hw_desc + C2_RXP_ADDR); in c2_rx_alloc()
244 elem->hw_desc + C2_RXP_FLAGS); in c2_rx_alloc()
246 elem->skb = skb; in c2_rx_alloc()
247 elem->mapaddr = mapaddr; in c2_rx_alloc()
248 elem->maplen = maplen; in c2_rx_alloc()
261 struct c2_element *elem; in c2_rx_fill() local
264 elem = rx_ring->start; in c2_rx_fill()
266 if (c2_rx_alloc(c2_port, elem)) { in c2_rx_fill()
270 } while ((elem = elem->next) != rx_ring->start); in c2_rx_fill()
281 struct c2_element *elem; in c2_rx_clean() local
284 elem = rx_ring->start; in c2_rx_clean()
286 rx_desc = elem->ht_desc; in c2_rx_clean()
289 __raw_writew(0, elem->hw_desc + C2_RXP_STATUS); in c2_rx_clean()
290 __raw_writew(0, elem->hw_desc + C2_RXP_COUNT); in c2_rx_clean()
291 __raw_writew(0, elem->hw_desc + C2_RXP_LEN); in c2_rx_clean()
293 elem->hw_desc + C2_RXP_ADDR); in c2_rx_clean()
295 elem->hw_desc + C2_RXP_FLAGS); in c2_rx_clean()
297 if (elem->skb) { in c2_rx_clean()
298 pci_unmap_single(c2dev->pcidev, elem->mapaddr, in c2_rx_clean()
299 elem->maplen, PCI_DMA_FROMDEVICE); in c2_rx_clean()
300 dev_kfree_skb(elem->skb); in c2_rx_clean()
301 elem->skb = NULL; in c2_rx_clean()
303 } while ((elem = elem->next) != rx_ring->start); in c2_rx_clean()
306 static inline int c2_tx_free(struct c2_dev *c2dev, struct c2_element *elem) in c2_tx_free() argument
308 struct c2_tx_desc *tx_desc = elem->ht_desc; in c2_tx_free()
312 pci_unmap_single(c2dev->pcidev, elem->mapaddr, elem->maplen, in c2_tx_free()
315 if (elem->skb) { in c2_tx_free()
316 dev_kfree_skb_any(elem->skb); in c2_tx_free()
317 elem->skb = NULL; in c2_tx_free()
327 struct c2_element *elem; in c2_tx_clean() local
334 elem = tx_ring->start; in c2_tx_clean()
340 readw(elem->hw_desc + C2_TXP_FLAGS); in c2_tx_clean()
345 elem->hw_desc + C2_TXP_LEN); in c2_tx_clean()
347 elem->hw_desc + C2_TXP_ADDR); in c2_tx_clean()
349 elem->hw_desc + C2_TXP_FLAGS); in c2_tx_clean()
354 elem->hw_desc + C2_TXP_LEN); in c2_tx_clean()
356 elem->hw_desc + C2_TXP_ADDR); in c2_tx_clean()
358 elem->hw_desc + C2_TXP_FLAGS); in c2_tx_clean()
361 c2_tx_free(c2_port->c2dev, elem); in c2_tx_clean()
363 } while ((elem = elem->next) != tx_ring->start); in c2_tx_clean()
384 struct c2_element *elem; in c2_tx_interrupt() local
389 for (elem = tx_ring->to_clean; elem != tx_ring->to_use; in c2_tx_interrupt()
390 elem = elem->next) { in c2_tx_interrupt()
392 be16_to_cpu((__force __be16) readw(elem->hw_desc + C2_TXP_FLAGS)); in c2_tx_interrupt()
400 be16_to_cpu((__force __be16) readw(elem->hw_desc + C2_TXP_LEN)); in c2_tx_interrupt()
403 netdev->name, elem - tx_ring->start, in c2_tx_interrupt()
407 c2_tx_free(c2dev, elem); in c2_tx_interrupt()
411 tx_ring->to_clean = elem; in c2_tx_interrupt()
420 static void c2_rx_error(struct c2_port *c2_port, struct c2_element *elem) in c2_rx_error() argument
422 struct c2_rx_desc *rx_desc = elem->ht_desc; in c2_rx_error()
423 struct c2_rxp_hdr *rxp_hdr = (struct c2_rxp_hdr *) elem->skb->data; in c2_rx_error()
430 elem - c2_port->rx_ring.start); in c2_rx_error()
441 elem->skb->data = elem->skb->head; in c2_rx_error()
442 skb_reset_tail_pointer(elem->skb); in c2_rx_error()
445 memset(elem->skb->data, 0, sizeof(*rxp_hdr)); in c2_rx_error()
448 __raw_writew(0, elem->hw_desc + C2_RXP_STATUS); in c2_rx_error()
449 __raw_writew(0, elem->hw_desc + C2_RXP_COUNT); in c2_rx_error()
450 __raw_writew((__force u16) cpu_to_be16((u16) elem->maplen - sizeof(*rxp_hdr)), in c2_rx_error()
451 elem->hw_desc + C2_RXP_LEN); in c2_rx_error()
452 __raw_writeq((__force u64) cpu_to_be64(elem->mapaddr), in c2_rx_error()
453 elem->hw_desc + C2_RXP_ADDR); in c2_rx_error()
455 elem->hw_desc + C2_RXP_FLAGS); in c2_rx_error()
466 struct c2_element *elem; in c2_rx_interrupt() local
479 for (elem = rx_ring->to_clean; elem->next != rx_ring->to_clean; in c2_rx_interrupt()
480 elem = elem->next) { in c2_rx_interrupt()
481 rx_desc = elem->ht_desc; in c2_rx_interrupt()
482 mapaddr = elem->mapaddr; in c2_rx_interrupt()
483 maplen = elem->maplen; in c2_rx_interrupt()
484 skb = elem->skb; in c2_rx_interrupt()
494 c2_rx_error(c2_port, elem); in c2_rx_interrupt()
502 if (c2_rx_alloc(c2_port, elem)) { in c2_rx_interrupt()
503 c2_rx_error(c2_port, elem); in c2_rx_interrupt()
537 rx_ring->to_clean = elem; in c2_rx_interrupt()
538 c2dev->cur_rx = elem - rx_ring->start; in c2_rx_interrupt()
589 struct c2_element *elem; in c2_up() local
650 for (i = 0, elem = c2_port->rx_ring.start; i < c2_port->rx_ring.count; in c2_up()
651 i++, elem++) { in c2_up()
652 rxp_hdr = (struct c2_rxp_hdr *) elem->skb->data; in c2_up()
655 elem->hw_desc + C2_RXP_FLAGS); in c2_up()
761 struct c2_element *elem; in c2_xmit_frame() local
782 elem = tx_ring->to_use; in c2_xmit_frame()
783 elem->skb = skb; in c2_xmit_frame()
784 elem->mapaddr = mapaddr; in c2_xmit_frame()
785 elem->maplen = maplen; in c2_xmit_frame()
789 elem->hw_desc + C2_TXP_ADDR); in c2_xmit_frame()
791 elem->hw_desc + C2_TXP_LEN); in c2_xmit_frame()
793 elem->hw_desc + C2_TXP_FLAGS); in c2_xmit_frame()
805 elem = elem->next; in c2_xmit_frame()
806 elem->skb = NULL; in c2_xmit_frame()
807 elem->mapaddr = mapaddr; in c2_xmit_frame()
808 elem->maplen = maplen; in c2_xmit_frame()
812 elem->hw_desc + C2_TXP_ADDR); in c2_xmit_frame()
814 elem->hw_desc + C2_TXP_LEN); in c2_xmit_frame()
816 elem->hw_desc + C2_TXP_FLAGS); in c2_xmit_frame()
823 tx_ring->to_use = elem->next; in c2_xmit_frame()