Lines Matching refs:rspq
1570 struct adapter *adapter = rxq->rspq.adapter;
1576 skb = napi_get_frags(&rxq->rspq.napi);
1588 skb_record_rx_queue(skb, rxq->rspq.idx);
1596 ret = napi_gro_frags(&rxq->rspq.napi);
1608 * @rspq: the response queue that received the packet
1614 int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
1620 (rspq->netdev->features & NETIF_F_RXCSUM);
1621 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
1622 struct adapter *adapter = rspq->adapter;
1631 (rspq->netdev->features & NETIF_F_GRO) && csum_ok &&
1647 skb->protocol = eth_type_trans(skb, rspq->netdev);
1648 skb_record_rx_queue(skb, rspq->idx);
1680 * @rspq: the response queue
1686 const struct sge_rspq *rspq)
1688 return ((rc->type_gen >> RSPD_GEN_S) & 0x1) == rspq->gen;
1730 * @rspq: the queue
1734 static inline void rspq_next(struct sge_rspq *rspq)
1736 rspq->cur_desc = (void *)rspq->cur_desc + rspq->iqe_len;
1737 if (unlikely(++rspq->cidx == rspq->size)) {
1738 rspq->cidx = 0;
1739 rspq->gen ^= 1;
1740 rspq->cur_desc = rspq->desc;
1746 * @rspq: the ingress response queue to process
1757 static int process_responses(struct sge_rspq *rspq, int budget)
1759 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
1760 struct adapter *adapter = rspq->adapter;
1768 rc = (void *)rspq->cur_desc + (rspq->iqe_len - sizeof(*rc));
1769 if (!is_new_response(rc, rspq))
1795 if (likely(rspq->offset > 0)) {
1796 free_rx_bufs(rspq->adapter, &rxq->fl,
1798 rspq->offset = 0;
1813 fp->offset = rspq->offset;
1818 unmap_rx_buf(rspq->adapter, &rxq->fl);
1827 dma_sync_single_for_cpu(rspq->adapter->pdev_dev,
1838 ret = rspq->handler(rspq, rspq->cur_desc, &gl);
1840 rspq->offset += ALIGN(fp->size, s->fl_align);
1844 ret = rspq->handler(rspq, rspq->cur_desc, NULL);
1857 rspq->next_intr_params =
1862 rspq_next(rspq);
1871 if (rspq->offset >= 0 &&
1873 __refill_fl(rspq->adapter, &rxq->fl);
1891 struct sge_rspq *rspq = container_of(napi, struct sge_rspq, napi);
1892 int work_done = process_responses(rspq, budget);
1897 intr_params = rspq->next_intr_params;
1898 rspq->next_intr_params = rspq->intr_params;
1903 rspq->unhandled_irqs++;
1909 if (unlikely(!rspq->bar2_addr)) {
1910 t4_write_reg(rspq->adapter,
1912 val | INGRESSQID_V((u32)rspq->cntxt_id));
1914 writel(val | INGRESSQID_V(rspq->bar2_qid),
1915 rspq->bar2_addr + SGE_UDB_GTS);
1927 struct sge_rspq *rspq = cookie;
1929 napi_schedule(&rspq->napi);
1948 struct sge_rspq *rspq;
1986 rspq = s->ingr_map[iq_idx];
1987 if (unlikely(rspq == NULL)) {
1992 if (unlikely(rspq->abs_id != qid)) {
1995 qid, rspq->abs_id);
2004 napi_schedule(&rspq->napi);
2100 if (napi_reschedule(&rxq->rspq.napi))
2197 * @rspq: pointer to to the new rxq's Response Queue to be filled in
2198 * @iqasynch: if 0, a normal rspq; if 1, an asynchronous event queue
2199 * @dev: the network device associated with the new rspq
2202 * @hnd: the interrupt handler to invoke for the rspq
2204 int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
2223 rspq != &adapter->sge.intrq) {
2235 rspq->size = roundup(rspq->size, 16);
2236 rspq->desc = alloc_ring(adapter->pdev_dev, rspq->size, rspq->iqe_len,
2237 0, &rspq->phys_addr, NULL, 0);
2238 if (!rspq->desc)
2267 FW_IQ_CMD_IQINTCNTTHRESH_V(rspq->pktcnt_idx) |
2268 FW_IQ_CMD_IQESIZE_V(ilog2(rspq->iqe_len) - 4));
2269 cmd.iqsize = cpu_to_be16(rspq->size);
2270 cmd.iqaddr = cpu_to_be64(rspq->phys_addr);
2342 netif_napi_add(dev, &rspq->napi, napi_rx_handler, 64);
2343 rspq->cur_desc = rspq->desc;
2344 rspq->cidx = 0;
2345 rspq->gen = 1;
2346 rspq->next_intr_params = rspq->intr_params;
2347 rspq->cntxt_id = be16_to_cpu(rpl.iqid);
2348 rspq->bar2_addr = bar2_address(adapter,
2349 rspq->cntxt_id,
2351 &rspq->bar2_qid);
2352 rspq->abs_id = be16_to_cpu(rpl.physiqid);
2353 rspq->size--; /* subtract status entry */
2354 rspq->adapter = adapter;
2355 rspq->netdev = dev;
2356 rspq->handler = hnd;
2359 rspq->offset = fl ? 0 : -1;
2389 if (rspq->desc) {
2390 dma_free_coherent(adapter->pdev_dev, rspq->size * rspq->iqe_len,
2391 rspq->desc, rspq->phys_addr);
2392 rspq->desc = NULL;
2530 static void free_rspq_fl(struct adapter *adapter, struct sge_rspq *rspq,
2537 rspq->cntxt_id, flid, 0xffff);
2538 dma_free_coherent(adapter->pdev_dev, (rspq->size + 1) * rspq->iqe_len,
2539 rspq->desc, rspq->phys_addr);
2540 netif_napi_del(&rspq->napi);
2541 rspq->netdev = NULL;
2542 rspq->cntxt_id = 0;
2543 rspq->abs_id = 0;
2544 rspq->desc = NULL;
2574 if (rxq->rspq.desc)
2575 free_rspq_fl(adapter, &rxq->rspq, &rxq->fl);