Lines Matching refs:rspq
1567 struct adapter *adapter = rxq->rspq.adapter;
1573 skb = napi_get_frags(&rxq->rspq.napi);
1585 skb_record_rx_queue(skb, rxq->rspq.idx);
1593 ret = napi_gro_frags(&rxq->rspq.napi);
1605 * @rspq: the response queue that received the packet
1611 int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
1617 (rspq->netdev->features & NETIF_F_RXCSUM);
1618 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
1619 struct adapter *adapter = rspq->adapter;
1628 (rspq->netdev->features & NETIF_F_GRO) && csum_ok &&
1644 skb->protocol = eth_type_trans(skb, rspq->netdev);
1645 skb_record_rx_queue(skb, rspq->idx);
1677 * @rspq: the response queue
1683 const struct sge_rspq *rspq)
1685 return ((rc->type_gen >> RSPD_GEN_S) & 0x1) == rspq->gen;
1727 * @rspq: the queue
1731 static inline void rspq_next(struct sge_rspq *rspq)
1733 rspq->cur_desc = (void *)rspq->cur_desc + rspq->iqe_len;
1734 if (unlikely(++rspq->cidx == rspq->size)) {
1735 rspq->cidx = 0;
1736 rspq->gen ^= 1;
1737 rspq->cur_desc = rspq->desc;
1743 * @rspq: the ingress response queue to process
1754 static int process_responses(struct sge_rspq *rspq, int budget)
1756 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
1757 struct adapter *adapter = rspq->adapter;
1765 rc = (void *)rspq->cur_desc + (rspq->iqe_len - sizeof(*rc));
1766 if (!is_new_response(rc, rspq))
1792 if (likely(rspq->offset > 0)) {
1793 free_rx_bufs(rspq->adapter, &rxq->fl,
1795 rspq->offset = 0;
1810 fp->offset = rspq->offset;
1815 unmap_rx_buf(rspq->adapter, &rxq->fl);
1824 dma_sync_single_for_cpu(rspq->adapter->pdev_dev,
1835 ret = rspq->handler(rspq, rspq->cur_desc, &gl);
1837 rspq->offset += ALIGN(fp->size, s->fl_align);
1841 ret = rspq->handler(rspq, rspq->cur_desc, NULL);
1854 rspq->next_intr_params =
1859 rspq_next(rspq);
1868 if (rspq->offset >= 0 &&
1870 __refill_fl(rspq->adapter, &rxq->fl);
1888 struct sge_rspq *rspq = container_of(napi, struct sge_rspq, napi);
1889 int work_done = process_responses(rspq, budget);
1894 intr_params = rspq->next_intr_params;
1895 rspq->next_intr_params = rspq->intr_params;
1900 rspq->unhandled_irqs++;
1906 if (unlikely(!rspq->bar2_addr)) {
1907 t4_write_reg(rspq->adapter,
1909 val | INGRESSQID_V((u32)rspq->cntxt_id));
1911 writel(val | INGRESSQID_V(rspq->bar2_qid),
1912 rspq->bar2_addr + SGE_UDB_GTS);
1924 struct sge_rspq *rspq = cookie;
1926 napi_schedule(&rspq->napi);
1945 struct sge_rspq *rspq;
1983 rspq = s->ingr_map[iq_idx];
1984 if (unlikely(rspq == NULL)) {
1989 if (unlikely(rspq->abs_id != qid)) {
1992 qid, rspq->abs_id);
2001 napi_schedule(&rspq->napi);
2097 if (napi_reschedule(&rxq->rspq.napi))
2194 * @rspq: pointer to to the new rxq's Response Queue to be filled in
2195 * @iqasynch: if 0, a normal rspq; if 1, an asynchronous event queue
2196 * @dev: the network device associated with the new rspq
2199 * @hnd: the interrupt handler to invoke for the rspq
2201 int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
2220 rspq != &adapter->sge.intrq) {
2232 rspq->size = roundup(rspq->size, 16);
2233 rspq->desc = alloc_ring(adapter->pdev_dev, rspq->size, rspq->iqe_len,
2234 0, &rspq->phys_addr, NULL, 0);
2235 if (!rspq->desc)
2264 FW_IQ_CMD_IQINTCNTTHRESH_V(rspq->pktcnt_idx) |
2265 FW_IQ_CMD_IQESIZE_V(ilog2(rspq->iqe_len) - 4));
2266 cmd.iqsize = cpu_to_be16(rspq->size);
2267 cmd.iqaddr = cpu_to_be64(rspq->phys_addr);
2339 netif_napi_add(dev, &rspq->napi, napi_rx_handler);
2340 rspq->cur_desc = rspq->desc;
2341 rspq->cidx = 0;
2342 rspq->gen = 1;
2343 rspq->next_intr_params = rspq->intr_params;
2344 rspq->cntxt_id = be16_to_cpu(rpl.iqid);
2345 rspq->bar2_addr = bar2_address(adapter,
2346 rspq->cntxt_id,
2348 &rspq->bar2_qid);
2349 rspq->abs_id = be16_to_cpu(rpl.physiqid);
2350 rspq->size--; /* subtract status entry */
2351 rspq->adapter = adapter;
2352 rspq->netdev = dev;
2353 rspq->handler = hnd;
2356 rspq->offset = fl ? 0 : -1;
2386 if (rspq->desc) {
2387 dma_free_coherent(adapter->pdev_dev, rspq->size * rspq->iqe_len,
2388 rspq->desc, rspq->phys_addr);
2389 rspq->desc = NULL;
2527 static void free_rspq_fl(struct adapter *adapter, struct sge_rspq *rspq,
2534 rspq->cntxt_id, flid, 0xffff);
2535 dma_free_coherent(adapter->pdev_dev, (rspq->size + 1) * rspq->iqe_len,
2536 rspq->desc, rspq->phys_addr);
2537 netif_napi_del(&rspq->napi);
2538 rspq->netdev = NULL;
2539 rspq->cntxt_id = 0;
2540 rspq->abs_id = 0;
2541 rspq->desc = NULL;
2571 if (rxq->rspq.desc)
2572 free_rspq_fl(adapter, &rxq->rspq, &rxq->fl);