Lines Matching defs:rxq
133 static int qlnx_alloc_rx_buffer(qlnx_host_t *ha, struct qlnx_rx_queue *rxq);
134 static void qlnx_reuse_rx_data(struct qlnx_rx_queue *rxq);
136 struct qlnx_rx_queue *rxq);
1462 if (fp->rxq->handle != NULL) {
1464 0, fp->rxq->handle);
3851 struct qlnx_rx_queue *rxq;
3854 rxq = fp->rxq;
3858 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
3860 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
3866 rxq->sw_rx_cons =
3867 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
3877 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
3881 qlnx_reuse_rx_data(rxq);
3889 ecore_chain_consume(&rxq->rx_bd_ring);
3891 if (len > rxq->rx_buf_size)
3892 len_in_buffer = rxq->rx_buf_size;
3919 struct qlnx_rx_queue *rxq,
3964 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
3973 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
3981 rxq->sw_rx_cons, le16toh(cqe->pars_flags.flags));
3985 qlnx_reuse_rx_data(rxq);
3992 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
4008 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_prod];
4010 sw_rx_data->data = rxq->tpa_info[agg_index].rx_buf.data;
4011 sw_rx_data->dma_addr = rxq->tpa_info[agg_index].rx_buf.dma_addr;
4012 sw_rx_data->map = rxq->tpa_info[agg_index].rx_buf.map;
4014 rxq->tpa_info[agg_index].rx_buf.data = mp;
4015 rxq->tpa_info[agg_index].rx_buf.dma_addr = addr;
4016 rxq->tpa_info[agg_index].rx_buf.map = map;
4019 ecore_chain_produce(&rxq->rx_bd_ring);
4027 rxq->sw_rx_prod = (rxq->sw_rx_prod + 1) & (RX_RING_SIZE - 1);
4028 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4030 ecore_chain_consume(&rxq->rx_bd_ring);
4037 qlnx_reuse_rx_data(rxq);
4040 rxq->tpa_info[agg_index].agg_state = QLNX_AGG_STATE_ERROR;
4044 if (rxq->tpa_info[agg_index].agg_state != QLNX_AGG_STATE_NONE) {
4052 if (rxq->tpa_info[agg_index].mpf) {
4053 m_freem(rxq->tpa_info[agg_index].mpf);
4054 rxq->tpa_info[agg_index].mpl = NULL;
4056 rxq->tpa_info[agg_index].mpf = mp;
4057 rxq->tpa_info[agg_index].mpl = NULL;
4059 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4060 ecore_chain_consume(&rxq->rx_bd_ring);
4067 qlnx_reuse_rx_data(rxq);
4069 rxq->tpa_info[agg_index].agg_state = QLNX_AGG_STATE_ERROR;
4078 ecore_chain_consume(&rxq->rx_bd_ring);
4079 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4087 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
4099 rxq->tpa_info[agg_index].agg_state =
4101 ecore_chain_consume(&rxq->rx_bd_ring);
4102 rxq->sw_rx_cons =
4103 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4107 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
4112 qlnx_reuse_rx_data(rxq);
4118 rxq->tpa_info[agg_index].agg_state =
4121 ecore_chain_consume(&rxq->rx_bd_ring);
4122 rxq->sw_rx_cons =
4123 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4140 ecore_chain_consume(&rxq->rx_bd_ring);
4141 rxq->sw_rx_cons =
4142 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4145 if (rxq->tpa_info[agg_index].agg_state != QLNX_AGG_STATE_NONE) {
4152 rxq->tpa_info[agg_index].mpf = mp;
4153 rxq->tpa_info[agg_index].mpl = NULL;
4158 rxq->tpa_info[agg_index].placement_offset = cqe->placement_offset;
4163 rxq->tpa_info[agg_index].mpf = mp;
4164 rxq->tpa_info[agg_index].mpl = mpl;
4167 rxq->tpa_info[agg_index].mpf = mp;
4168 rxq->tpa_info[agg_index].mpl = mp;
4219 rxq->tpa_info[agg_index].agg_state = QLNX_AGG_STATE_START;
4222 fp->rss_id, rxq->tpa_info[agg_index].agg_state,
4223 rxq->tpa_info[agg_index].mpf, rxq->tpa_info[agg_index].mpl);
4230 struct qlnx_rx_queue *rxq,
4266 if (rxq->tpa_info[agg_index].agg_state !=
4268 qlnx_reuse_rx_data(rxq);
4272 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
4285 rxq->tpa_info[agg_index].agg_state =
4287 ecore_chain_consume(&rxq->rx_bd_ring);
4288 rxq->sw_rx_cons =
4289 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4293 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
4298 qlnx_reuse_rx_data(rxq);
4304 rxq->tpa_info[agg_index].agg_state =
4307 ecore_chain_consume(&rxq->rx_bd_ring);
4308 rxq->sw_rx_cons =
4309 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4326 ecore_chain_consume(&rxq->rx_bd_ring);
4327 rxq->sw_rx_cons =
4328 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4335 mp = rxq->tpa_info[agg_index].mpl;
4338 rxq->tpa_info[agg_index].mpl = mpl;
4346 struct qlnx_rx_queue *rxq,
4390 if (rxq->tpa_info[agg_index].agg_state !=
4394 qlnx_reuse_rx_data(rxq);
4398 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
4411 rxq->tpa_info[agg_index].agg_state =
4413 ecore_chain_consume(&rxq->rx_bd_ring);
4414 rxq->sw_rx_cons =
4415 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4419 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
4424 qlnx_reuse_rx_data(rxq);
4430 rxq->tpa_info[agg_index].agg_state =
4433 ecore_chain_consume(&rxq->rx_bd_ring);
4434 rxq->sw_rx_cons =
4435 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4452 ecore_chain_consume(&rxq->rx_bd_ring);
4453 rxq->sw_rx_cons =
4454 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4462 mp = rxq->tpa_info[agg_index].mpl;
4467 if (rxq->tpa_info[agg_index].agg_state != QLNX_AGG_STATE_START) {
4470 if (rxq->tpa_info[agg_index].mpf != NULL)
4471 m_freem(rxq->tpa_info[agg_index].mpf);
4472 rxq->tpa_info[agg_index].mpf = NULL;
4473 rxq->tpa_info[agg_index].mpl = NULL;
4474 rxq->tpa_info[agg_index].agg_state = QLNX_AGG_STATE_NONE;
4478 mp = rxq->tpa_info[agg_index].mpf;
4479 m_adj(mp, rxq->tpa_info[agg_index].placement_offset);
4493 mpl = rxq->tpa_info[agg_index].mpl;
4508 rxq->tpa_info[agg_index].mpf = NULL;
4509 rxq->tpa_info[agg_index].mpl = NULL;
4510 rxq->tpa_info[agg_index].agg_state = QLNX_AGG_STATE_NONE;
4521 struct qlnx_rx_queue *rxq = fp->rxq;
4529 lro = &rxq->lro;
4532 hw_comp_cons = le16toh(*rxq->hw_cons_ptr);
4533 sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
4556 ecore_chain_consume(&rxq->rx_comp_ring);
4570 qlnx_tpa_start(ha, fp, rxq,
4576 qlnx_tpa_cont(ha, fp, rxq,
4582 rx_pkt += qlnx_tpa_end(ha, fp, rxq,
4595 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_cons];
4601 rxq->sw_rx_cons =
4602 (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4639 qlnx_reuse_rx_data(rxq);
4646 if (qlnx_alloc_rx_buffer(ha, rxq) != 0) {
4649 qlnx_reuse_rx_data(rxq);
4658 ecore_chain_consume(&rxq->rx_bd_ring);
4753 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
4756 ecore_chain_recycle_consumed(&rxq->rx_comp_ring);
4757 sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
4766 qlnx_update_rx_prod(p_hwfn, rxq);
4861 lro = &fp->rxq->lro;
5834 fp->rxq = &ha->rxq_array[rss_id];
5835 fp->rxq->rxq_id = rss_id;
5950 qlnx_free_rx_buffers(qlnx_host_t *ha, struct qlnx_rx_queue *rxq)
5955 for (i = 0; i < rxq->num_rx_buffers; i++) {
5956 rx_buf = &rxq->sw_rx_ring[i];
5972 qlnx_free_mem_rxq(qlnx_host_t *ha, struct qlnx_rx_queue *rxq)
5979 qlnx_free_rx_buffers(ha, rxq);
5982 qlnx_free_tpa_mbuf(ha, &rxq->tpa_info[i]);
5983 if (rxq->tpa_info[i].mpf != NULL)
5984 m_freem(rxq->tpa_info[i].mpf);
5987 bzero((void *)&rxq->sw_rx_ring[0],
5991 if (rxq->rx_bd_ring.p_virt_addr) {
5992 ecore_chain_free(cdev, &rxq->rx_bd_ring);
5993 rxq->rx_bd_ring.p_virt_addr = NULL;
5997 if (rxq->rx_comp_ring.p_virt_addr &&
5998 rxq->rx_comp_ring.pbl_sp.p_virt_table) {
5999 ecore_chain_free(cdev, &rxq->rx_comp_ring);
6000 rxq->rx_comp_ring.p_virt_addr = NULL;
6001 rxq->rx_comp_ring.pbl_sp.p_virt_table = NULL;
6008 lro = &rxq->lro;
6017 qlnx_alloc_rx_buffer(qlnx_host_t *ha, struct qlnx_rx_queue *rxq)
6029 rx_buf_size = rxq->rx_buf_size;
6053 sw_rx_data = &rxq->sw_rx_ring[rxq->sw_rx_prod];
6059 rx_bd = (struct eth_rx_bd *)ecore_chain_produce(&rxq->rx_bd_ring);
6064 rxq->sw_rx_prod = (rxq->sw_rx_prod + 1) & (RX_RING_SIZE - 1);
6137 qlnx_alloc_mem_rxq(qlnx_host_t *ha, struct qlnx_rx_queue *rxq)
6144 rxq->num_rx_buffers = RX_RING_SIZE;
6146 rxq->rx_buf_size = ha->rx_buf_size;
6149 bzero((void *)&rxq->sw_rx_ring[0],
6160 &rxq->rx_bd_ring, NULL);
6172 &rxq->rx_comp_ring, NULL);
6180 rc = qlnx_alloc_tpa_mbuf(ha, rxq->rx_buf_size,
6181 &rxq->tpa_info[i]);
6186 for (i = 0; i < rxq->num_rx_buffers; i++) {
6187 rc = qlnx_alloc_rx_buffer(ha, rxq);
6195 } else if (num_allocated < rxq->num_rx_buffers) {
6205 lro = &rxq->lro;
6207 if (tcp_lro_init_args(lro, ifp, 0, rxq->num_rx_buffers)) {
6209 rxq->rxq_id);
6219 qlnx_free_mem_rxq(ha, rxq);
6310 qlnx_free_mem_rxq(ha, fp->rxq);
6361 rc = qlnx_alloc_mem_rxq(ha, fp->rxq);
6508 rss->rss_ind_table[j] = fp->rxq->handle;
6548 qlnx_reuse_rx_data(struct qlnx_rx_queue *rxq)
6551 ecore_chain_consume(&rxq->rx_bd_ring);
6553 ecore_chain_produce(&rxq->rx_bd_ring);
6555 &rxq->sw_rx_ring[rxq->sw_rx_cons];
6557 &rxq->sw_rx_ring[rxq->sw_rx_prod];
6562 rxq->sw_rx_cons = (rxq->sw_rx_cons + 1) & (RX_RING_SIZE - 1);
6563 rxq->sw_rx_prod = (rxq->sw_rx_prod + 1) & (RX_RING_SIZE - 1);
6569 qlnx_update_rx_prod(struct ecore_hwfn *p_hwfn, struct qlnx_rx_queue *rxq)
6579 bd_prod = ecore_chain_get_prod_idx(&rxq->rx_bd_ring);
6580 cqe_prod = ecore_chain_get_prod_idx(&rxq->rx_comp_ring);
6593 internal_ram_wr(p_hwfn, rxq->hw_rxq_prod_addr,
6596 internal_ram_wr(rxq->hw_rxq_prod_addr,
6685 fp->rxq->rx_buf_size, /* bd_max_bytes */
6687 fp->rxq->rx_bd_ring.p_phys_addr,
6689 ecore_chain_get_pbl_phys(&fp->rxq->rx_comp_ring),
6691 ecore_chain_get_page_cnt(&fp->rxq->rx_comp_ring),
6699 fp->rxq->hw_rxq_prod_addr = rx_ret_params.p_prod;
6700 fp->rxq->handle = rx_ret_params.p_handle;
6701 fp->rxq->hw_cons_ptr =
6704 qlnx_update_rx_prod(p_hwfn, fp->rxq);
6764 rss_params->rss_ind_table[i] = fp->rxq->handle;
6912 rc = ecore_eth_rx_queue_stop(p_hwfn, fp->rxq->handle, false,
7308 lro = &fp->rxq->lro;