Lines Matching refs:rx_buf

76 efx_rx_buf_next(struct efx_rx_queue *rx_queue, struct efx_rx_buffer *rx_buf)  in efx_rx_buf_next()  argument
78 if (unlikely(rx_buf == efx_rx_buffer(rx_queue, rx_queue->ptr_mask))) in efx_rx_buf_next()
81 return rx_buf + 1; in efx_rx_buf_next()
85 struct efx_rx_buffer *rx_buf, in efx_sync_rx_buffer() argument
88 dma_sync_single_for_cpu(&efx->pci_dev->dev, rx_buf->dma_addr, len, in efx_sync_rx_buffer()
152 struct efx_rx_buffer *rx_buf; in efx_init_rx_buffers() local
189 rx_buf = efx_rx_buffer(rx_queue, index); in efx_init_rx_buffers()
190 rx_buf->dma_addr = dma_addr + efx->rx_ip_align; in efx_init_rx_buffers()
191 rx_buf->page = page; in efx_init_rx_buffers()
192 rx_buf->page_offset = page_offset + efx->rx_ip_align; in efx_init_rx_buffers()
193 rx_buf->len = efx->rx_dma_len; in efx_init_rx_buffers()
194 rx_buf->flags = 0; in efx_init_rx_buffers()
201 rx_buf->flags = EFX_RX_BUF_LAST_IN_PAGE; in efx_init_rx_buffers()
211 struct efx_rx_buffer *rx_buf) in efx_unmap_rx_buffer() argument
213 struct page *page = rx_buf->page; in efx_unmap_rx_buffer()
225 struct efx_rx_buffer *rx_buf, in efx_free_rx_buffers() argument
229 if (rx_buf->page) { in efx_free_rx_buffers()
230 put_page(rx_buf->page); in efx_free_rx_buffers()
231 rx_buf->page = NULL; in efx_free_rx_buffers()
233 rx_buf = efx_rx_buf_next(rx_queue, rx_buf); in efx_free_rx_buffers()
242 struct efx_rx_buffer *rx_buf) in efx_recycle_rx_page() argument
244 struct page *page = rx_buf->page; in efx_recycle_rx_page()
250 if (!(rx_buf->flags & EFX_RX_BUF_LAST_IN_PAGE)) in efx_recycle_rx_page()
269 efx_unmap_rx_buffer(efx, rx_buf); in efx_recycle_rx_page()
270 put_page(rx_buf->page); in efx_recycle_rx_page()
274 struct efx_rx_buffer *rx_buf) in efx_fini_rx_buffer() argument
277 if (rx_buf->page) in efx_fini_rx_buffer()
278 put_page(rx_buf->page); in efx_fini_rx_buffer()
281 if (rx_buf->flags & EFX_RX_BUF_LAST_IN_PAGE) { in efx_fini_rx_buffer()
282 efx_unmap_rx_buffer(rx_queue->efx, rx_buf); in efx_fini_rx_buffer()
283 efx_free_rx_buffers(rx_queue, rx_buf, 1); in efx_fini_rx_buffer()
285 rx_buf->page = NULL; in efx_fini_rx_buffer()
290 struct efx_rx_buffer *rx_buf, in efx_recycle_rx_pages() argument
296 efx_recycle_rx_page(channel, rx_buf); in efx_recycle_rx_pages()
297 rx_buf = efx_rx_buf_next(rx_queue, rx_buf); in efx_recycle_rx_pages()
302 struct efx_rx_buffer *rx_buf, in efx_discard_rx_packet() argument
307 efx_recycle_rx_pages(channel, rx_buf, n_frags); in efx_discard_rx_packet()
309 efx_free_rx_buffers(rx_queue, rx_buf, n_frags); in efx_discard_rx_packet()
385 struct efx_rx_buffer *rx_buf, in efx_rx_packet__check_len() argument
389 unsigned max_len = rx_buf->len - efx->type->rx_buffer_padding; in efx_rx_packet__check_len()
397 rx_buf->flags |= EFX_RX_PKT_DISCARD; in efx_rx_packet__check_len()
411 efx_rx_packet_gro(struct efx_channel *channel, struct efx_rx_buffer *rx_buf, in efx_rx_packet_gro() argument
423 efx_free_rx_buffers(rx_queue, rx_buf, n_frags); in efx_rx_packet_gro()
430 skb->ip_summed = ((rx_buf->flags & EFX_RX_PKT_CSUMMED) ? in efx_rx_packet_gro()
432 skb->csum_level = !!(rx_buf->flags & EFX_RX_PKT_CSUM_LEVEL); in efx_rx_packet_gro()
436 rx_buf->page, rx_buf->page_offset, in efx_rx_packet_gro()
437 rx_buf->len); in efx_rx_packet_gro()
438 rx_buf->page = NULL; in efx_rx_packet_gro()
439 skb->len += rx_buf->len; in efx_rx_packet_gro()
443 rx_buf = efx_rx_buf_next(&channel->rx_queue, rx_buf); in efx_rx_packet_gro()
456 struct efx_rx_buffer *rx_buf, in efx_rx_mk_skb() argument
472 EFX_WARN_ON_ONCE_PARANOID(rx_buf->len < hdr_len); in efx_rx_mk_skb()
480 if (rx_buf->len > hdr_len) { in efx_rx_mk_skb()
481 rx_buf->page_offset += hdr_len; in efx_rx_mk_skb()
482 rx_buf->len -= hdr_len; in efx_rx_mk_skb()
486 rx_buf->page, rx_buf->page_offset, in efx_rx_mk_skb()
487 rx_buf->len); in efx_rx_mk_skb()
488 rx_buf->page = NULL; in efx_rx_mk_skb()
489 skb->len += rx_buf->len; in efx_rx_mk_skb()
490 skb->data_len += rx_buf->len; in efx_rx_mk_skb()
494 rx_buf = efx_rx_buf_next(&channel->rx_queue, rx_buf); in efx_rx_mk_skb()
497 __free_pages(rx_buf->page, efx->rx_buffer_order); in efx_rx_mk_skb()
498 rx_buf->page = NULL; in efx_rx_mk_skb()
517 struct efx_rx_buffer *rx_buf; in efx_rx_packet() local
521 rx_buf = efx_rx_buffer(rx_queue, index); in efx_rx_packet()
522 rx_buf->flags |= flags; in efx_rx_packet()
527 efx_rx_packet__check_len(rx_queue, rx_buf, len); in efx_rx_packet()
535 WARN_ON(!(len == 0 && rx_buf->flags & EFX_RX_PKT_DISCARD)); in efx_rx_packet()
536 rx_buf->flags |= EFX_RX_PKT_DISCARD; in efx_rx_packet()
543 (rx_buf->flags & EFX_RX_PKT_CSUMMED) ? " [SUMMED]" : "", in efx_rx_packet()
544 (rx_buf->flags & EFX_RX_PKT_DISCARD) ? " [DISCARD]" : ""); in efx_rx_packet()
549 if (unlikely(rx_buf->flags & EFX_RX_PKT_DISCARD)) { in efx_rx_packet()
551 efx_discard_rx_packet(channel, rx_buf, n_frags); in efx_rx_packet()
556 rx_buf->len = len; in efx_rx_packet()
561 efx_sync_rx_buffer(efx, rx_buf, rx_buf->len); in efx_rx_packet()
566 prefetch(efx_rx_buf_va(rx_buf)); in efx_rx_packet()
568 rx_buf->page_offset += efx->rx_prefix_size; in efx_rx_packet()
569 rx_buf->len -= efx->rx_prefix_size; in efx_rx_packet()
578 rx_buf = efx_rx_buf_next(rx_queue, rx_buf); in efx_rx_packet()
581 efx_sync_rx_buffer(efx, rx_buf, efx->rx_dma_len); in efx_rx_packet()
583 rx_buf->len = len - (n_frags - 1) * efx->rx_dma_len; in efx_rx_packet()
584 efx_sync_rx_buffer(efx, rx_buf, rx_buf->len); in efx_rx_packet()
588 rx_buf = efx_rx_buffer(rx_queue, index); in efx_rx_packet()
589 efx_recycle_rx_pages(channel, rx_buf, n_frags); in efx_rx_packet()
600 struct efx_rx_buffer *rx_buf, in efx_rx_deliver() argument
604 u16 hdr_len = min_t(u16, rx_buf->len, EFX_SKB_HEADERS); in efx_rx_deliver()
606 skb = efx_rx_mk_skb(channel, rx_buf, n_frags, eh, hdr_len); in efx_rx_deliver()
611 efx_free_rx_buffers(rx_queue, rx_buf, n_frags); in efx_rx_deliver()
618 if (likely(rx_buf->flags & EFX_RX_PKT_CSUMMED)) { in efx_rx_deliver()
620 skb->csum_level = !!(rx_buf->flags & EFX_RX_PKT_CSUM_LEVEL); in efx_rx_deliver()
642 struct efx_rx_buffer *rx_buf = in __efx_rx_packet() local
644 u8 *eh = efx_rx_buf_va(rx_buf); in __efx_rx_packet()
649 if (rx_buf->flags & EFX_RX_PKT_PREFIX_LEN) in __efx_rx_packet()
650 rx_buf->len = le16_to_cpup((__le16 *) in __efx_rx_packet()
659 efx_loopback_rx_packet(efx, eh, rx_buf->len); in __efx_rx_packet()
661 efx_free_rx_buffers(rx_queue, rx_buf, in __efx_rx_packet()
667 rx_buf->flags &= ~EFX_RX_PKT_CSUMMED; in __efx_rx_packet()
669 if ((rx_buf->flags & EFX_RX_PKT_TCP) && !channel->type->receive_skb) in __efx_rx_packet()
670 efx_rx_packet_gro(channel, rx_buf, channel->rx_pkt_n_frags, eh); in __efx_rx_packet()
672 efx_rx_deliver(channel, eh, rx_buf, channel->rx_pkt_n_frags); in __efx_rx_packet()
775 struct efx_rx_buffer *rx_buf; in efx_fini_rx_queue() local
787 rx_buf = efx_rx_buffer(rx_queue, index); in efx_fini_rx_queue()
788 efx_fini_rx_buffer(rx_queue, rx_buf); in efx_fini_rx_queue()