Lines Matching refs:rx_q
315 writel(upper_32_bits(adpt->rx_q.rfd.dma_addr), in emac_mac_dma_rings_config()
318 writel(lower_32_bits(adpt->rx_q.rfd.dma_addr), in emac_mac_dma_rings_config()
320 writel(lower_32_bits(adpt->rx_q.rrd.dma_addr), in emac_mac_dma_rings_config()
323 writel(adpt->rx_q.rfd.count & RFD_RING_SIZE_BMSK, in emac_mac_dma_rings_config()
325 writel(adpt->rx_q.rrd.count & RRD_RING_SIZE_BMSK, in emac_mac_dma_rings_config()
624 struct emac_rx_queue *rx_q = &adpt->rx_q; in emac_rx_q_free_descs() local
629 if (!rx_q->rfd.rfbuff) in emac_rx_q_free_descs()
632 for (i = 0; i < rx_q->rfd.count; i++) { in emac_rx_q_free_descs()
633 struct emac_buffer *rfbuf = GET_RFD_BUFFER(rx_q, i); in emac_rx_q_free_descs()
646 size = sizeof(struct emac_buffer) * rx_q->rfd.count; in emac_rx_q_free_descs()
647 memset(rx_q->rfd.rfbuff, 0, size); in emac_rx_q_free_descs()
650 memset(rx_q->rrd.v_addr, 0, rx_q->rrd.size); in emac_rx_q_free_descs()
651 rx_q->rrd.produce_idx = 0; in emac_rx_q_free_descs()
652 rx_q->rrd.consume_idx = 0; in emac_rx_q_free_descs()
654 memset(rx_q->rfd.v_addr, 0, rx_q->rfd.size); in emac_rx_q_free_descs()
655 rx_q->rfd.produce_idx = 0; in emac_rx_q_free_descs()
656 rx_q->rfd.consume_idx = 0; in emac_rx_q_free_descs()
699 struct emac_rx_queue *rx_q = &adpt->rx_q; in emac_rx_q_bufs_free() local
703 kfree(rx_q->rfd.rfbuff); in emac_rx_q_bufs_free()
704 rx_q->rfd.rfbuff = NULL; in emac_rx_q_bufs_free()
706 rx_q->rfd.v_addr = NULL; in emac_rx_q_bufs_free()
707 rx_q->rfd.dma_addr = 0; in emac_rx_q_bufs_free()
708 rx_q->rfd.size = 0; in emac_rx_q_bufs_free()
710 rx_q->rrd.v_addr = NULL; in emac_rx_q_bufs_free()
711 rx_q->rrd.dma_addr = 0; in emac_rx_q_bufs_free()
712 rx_q->rrd.size = 0; in emac_rx_q_bufs_free()
720 struct emac_rx_queue *rx_q = &adpt->rx_q; in emac_rx_descs_alloc() local
723 size = sizeof(struct emac_buffer) * rx_q->rfd.count; in emac_rx_descs_alloc()
724 rx_q->rfd.rfbuff = kzalloc_node(size, GFP_KERNEL, node); in emac_rx_descs_alloc()
725 if (!rx_q->rfd.rfbuff) in emac_rx_descs_alloc()
728 rx_q->rrd.size = rx_q->rrd.count * (adpt->rrd_size * 4); in emac_rx_descs_alloc()
729 rx_q->rfd.size = rx_q->rfd.count * (adpt->rfd_size * 4); in emac_rx_descs_alloc()
731 rx_q->rrd.dma_addr = ring_header->dma_addr + ring_header->used; in emac_rx_descs_alloc()
732 rx_q->rrd.v_addr = ring_header->v_addr + ring_header->used; in emac_rx_descs_alloc()
733 ring_header->used += ALIGN(rx_q->rrd.size, 8); in emac_rx_descs_alloc()
735 rx_q->rfd.dma_addr = ring_header->dma_addr + ring_header->used; in emac_rx_descs_alloc()
736 rx_q->rfd.v_addr = ring_header->v_addr + ring_header->used; in emac_rx_descs_alloc()
737 ring_header->used += ALIGN(rx_q->rfd.size, 8); in emac_rx_descs_alloc()
739 rx_q->rrd.produce_idx = 0; in emac_rx_descs_alloc()
740 rx_q->rrd.consume_idx = 0; in emac_rx_descs_alloc()
742 rx_q->rfd.produce_idx = 0; in emac_rx_descs_alloc()
743 rx_q->rfd.consume_idx = 0; in emac_rx_descs_alloc()
759 adpt->rx_q.rrd.count = adpt->rx_desc_cnt; in emac_mac_rx_tx_rings_alloc_all()
760 adpt->rx_q.rfd.count = adpt->rx_desc_cnt; in emac_mac_rx_tx_rings_alloc_all()
836 adpt->rx_q.rrd.produce_idx = 0; in emac_mac_rx_tx_ring_reset_all()
837 adpt->rx_q.rrd.consume_idx = 0; in emac_mac_rx_tx_ring_reset_all()
838 adpt->rx_q.rfd.produce_idx = 0; in emac_mac_rx_tx_ring_reset_all()
839 adpt->rx_q.rfd.consume_idx = 0; in emac_mac_rx_tx_ring_reset_all()
840 for (i = 0; i < adpt->rx_q.rfd.count; i++) in emac_mac_rx_tx_ring_reset_all()
841 adpt->rx_q.rfd.rfbuff[i].dma_addr = 0; in emac_mac_rx_tx_ring_reset_all()
846 struct emac_rx_queue *rx_q, in emac_mac_rx_rfd_create() argument
849 u32 *hw_rfd = EMAC_RFD(rx_q, adpt->rfd_size, rx_q->rfd.produce_idx); in emac_mac_rx_rfd_create()
854 if (++rx_q->rfd.produce_idx == rx_q->rfd.count) in emac_mac_rx_rfd_create()
855 rx_q->rfd.produce_idx = 0; in emac_mac_rx_rfd_create()
860 struct emac_rx_queue *rx_q) in emac_mac_rx_descs_refill() argument
867 next_produce_idx = rx_q->rfd.produce_idx + 1; in emac_mac_rx_descs_refill()
868 if (next_produce_idx == rx_q->rfd.count) in emac_mac_rx_descs_refill()
871 curr_rxbuf = GET_RFD_BUFFER(rx_q, rx_q->rfd.produce_idx); in emac_mac_rx_descs_refill()
872 next_rxbuf = GET_RFD_BUFFER(rx_q, next_produce_idx); in emac_mac_rx_descs_refill()
896 emac_mac_rx_rfd_create(adpt, rx_q, curr_rxbuf->dma_addr); in emac_mac_rx_descs_refill()
897 next_produce_idx = rx_q->rfd.produce_idx + 1; in emac_mac_rx_descs_refill()
898 if (next_produce_idx == rx_q->rfd.count) in emac_mac_rx_descs_refill()
901 curr_rxbuf = GET_RFD_BUFFER(rx_q, rx_q->rfd.produce_idx); in emac_mac_rx_descs_refill()
902 next_rxbuf = GET_RFD_BUFFER(rx_q, next_produce_idx); in emac_mac_rx_descs_refill()
907 u32 prod_idx = (rx_q->rfd.produce_idx << rx_q->produce_shift) & in emac_mac_rx_descs_refill()
908 rx_q->produce_mask; in emac_mac_rx_descs_refill()
909 emac_reg_update32(adpt->base + rx_q->produce_reg, in emac_mac_rx_descs_refill()
910 rx_q->produce_mask, prod_idx); in emac_mac_rx_descs_refill()
938 emac_mac_rx_descs_refill(adpt, &adpt->rx_q); in emac_mac_up()
956 napi_enable(&adpt->rx_q.napi); in emac_mac_up()
968 napi_disable(&adpt->rx_q.napi); in emac_mac_down()
991 struct emac_rx_queue *rx_q, in emac_rx_process_rrd() argument
994 u32 *hw_rrd = EMAC_RRD(rx_q, adpt->rrd_size, rx_q->rrd.consume_idx); in emac_rx_process_rrd()
1018 if (++rx_q->rrd.consume_idx == rx_q->rrd.count) in emac_rx_process_rrd()
1019 rx_q->rrd.consume_idx = 0; in emac_rx_process_rrd()
1055 static void emac_rx_rfd_clean(struct emac_rx_queue *rx_q, struct emac_rrd *rrd) in emac_rx_rfd_clean() argument
1057 struct emac_buffer *rfbuf = rx_q->rfd.rfbuff; in emac_rx_rfd_clean()
1063 if (++consume_idx == rx_q->rfd.count) in emac_rx_rfd_clean()
1067 rx_q->rfd.consume_idx = consume_idx; in emac_rx_rfd_clean()
1068 rx_q->rfd.process_idx = consume_idx; in emac_rx_rfd_clean()
1072 static void emac_receive_skb(struct emac_rx_queue *rx_q, in emac_receive_skb() argument
1083 napi_gro_receive(&rx_q->napi, skb); in emac_receive_skb()
1087 void emac_mac_rx_process(struct emac_adapter *adpt, struct emac_rx_queue *rx_q, in emac_mac_rx_process() argument
1098 reg = readl_relaxed(adpt->base + rx_q->consume_reg); in emac_mac_rx_process()
1100 hw_consume_idx = (reg & rx_q->consume_mask) >> rx_q->consume_shift; in emac_mac_rx_process()
1101 num_consume_pkts = (hw_consume_idx >= rx_q->rrd.consume_idx) ? in emac_mac_rx_process()
1102 (hw_consume_idx - rx_q->rrd.consume_idx) : in emac_mac_rx_process()
1103 (hw_consume_idx + rx_q->rrd.count - rx_q->rrd.consume_idx); in emac_mac_rx_process()
1109 if (!emac_rx_process_rrd(adpt, rx_q, &rrd)) in emac_mac_rx_process()
1114 rfbuf = GET_RFD_BUFFER(rx_q, RRD_SI(&rrd)); in emac_mac_rx_process()
1125 emac_rx_rfd_clean(rx_q, &rrd); in emac_mac_rx_process()
1152 emac_receive_skb(rx_q, skb, (u16)RRD_CVALN_TAG(&rrd), in emac_mac_rx_process()
1159 proc_idx = (rx_q->rfd.process_idx << rx_q->process_shft) & in emac_mac_rx_process()
1160 rx_q->process_mask; in emac_mac_rx_process()
1161 emac_reg_update32(adpt->base + rx_q->process_reg, in emac_mac_rx_process()
1162 rx_q->process_mask, proc_idx); in emac_mac_rx_process()
1163 emac_mac_rx_descs_refill(adpt, rx_q); in emac_mac_rx_process()
1218 adpt->rx_q.netdev = adpt->netdev; in emac_mac_rx_tx_ring_init_all()
1220 adpt->rx_q.produce_reg = EMAC_MAILBOX_0; in emac_mac_rx_tx_ring_init_all()
1221 adpt->rx_q.produce_mask = RFD0_PROD_IDX_BMSK; in emac_mac_rx_tx_ring_init_all()
1222 adpt->rx_q.produce_shift = RFD0_PROD_IDX_SHFT; in emac_mac_rx_tx_ring_init_all()
1224 adpt->rx_q.process_reg = EMAC_MAILBOX_0; in emac_mac_rx_tx_ring_init_all()
1225 adpt->rx_q.process_mask = RFD0_PROC_IDX_BMSK; in emac_mac_rx_tx_ring_init_all()
1226 adpt->rx_q.process_shft = RFD0_PROC_IDX_SHFT; in emac_mac_rx_tx_ring_init_all()
1228 adpt->rx_q.consume_reg = EMAC_MAILBOX_3; in emac_mac_rx_tx_ring_init_all()
1229 adpt->rx_q.consume_mask = RFD0_CONS_IDX_BMSK; in emac_mac_rx_tx_ring_init_all()
1230 adpt->rx_q.consume_shift = RFD0_CONS_IDX_SHFT; in emac_mac_rx_tx_ring_init_all()
1232 adpt->rx_q.irq = &adpt->irq; in emac_mac_rx_tx_ring_init_all()
1233 adpt->rx_q.intr = adpt->irq.mask & ISR_RX_PKT; in emac_mac_rx_tx_ring_init_all()