Lines Matching defs:rq

58 static int oce_rq_create(struct oce_rq *rq, uint32_t if_id, struct oce_eq *eq);
59 static void oce_rq_free(struct oce_rq *rq);
60 static void oce_rq_del(struct oce_rq *rq);
93 struct oce_rq *rq;
105 for_all_rq_queues(sc, rq, i) {
106 sc->rq[i] = oce_rq_init(sc, sc->rx_ring_size, sc->rq_frag_size,
109 if (!sc->rq[i])
142 for_all_rq_queues(sc, rq, i) {
143 rc = oce_rq_create(rq, sc->if_id,
147 rq->queue_index = i;
172 struct oce_rq *rq;
179 for_all_rq_queues(sc, rq, i) {
180 if (rq) {
181 oce_rq_del(sc->rq[i]);
182 oce_rq_free(sc->rq[i]);
413 struct oce_rq *rq;
422 /* allocate the rq */
423 rq = malloc(sizeof(struct oce_rq), M_DEVBUF, M_NOWAIT | M_ZERO);
424 if (!rq)
428 rq->cfg.q_len = q_len;
429 rq->cfg.frag_size = frag_size;
430 rq->cfg.mtu = mtu;
431 rq->cfg.eqd = 0;
432 rq->lro_pkts_queued = 0;
433 rq->cfg.is_rss_queue = rss;
434 rq->pending = 0;
436 rq->parent = (void *)sc;
444 1, oce_rq_buf_size, 0, NULL, NULL, &rq->tag);
449 rc = bus_dmamap_create(rq->tag, 0, &rq->pckts[i].map);
455 rq->ring = oce_create_ring_buffer(sc, q_len,
457 if (!rq->ring)
460 LOCK_CREATE(&rq->rx_lock, "RX_lock");
462 return rq;
466 oce_rq_free(rq);
475 * @param rq pointer to receive queue
478 oce_rq_free(struct oce_rq *rq)
480 POCE_SOFTC sc = (POCE_SOFTC) rq->parent;
483 if (rq->ring != NULL) {
484 oce_destroy_ring_buffer(sc, rq->ring);
485 rq->ring = NULL;
488 if (rq->pckts[i].map != NULL) {
489 bus_dmamap_unload(rq->tag, rq->pckts[i].map);
490 bus_dmamap_destroy(rq->tag, rq->pckts[i].map);
491 rq->pckts[i].map = NULL;
493 if (rq->pckts[i].mbuf) {
494 m_free(rq->pckts[i].mbuf);
495 rq->pckts[i].mbuf = NULL;
499 if (rq->tag != NULL)
500 bus_dma_tag_destroy(rq->tag);
502 LOCK_DESTROY(&rq->rx_lock);
503 free(rq, M_DEVBUF);
511 * @param rq receive queue
516 oce_rq_create(struct oce_rq *rq, uint32_t if_id, struct oce_eq *eq)
518 POCE_SOFTC sc = rq->parent;
528 rq->cq = cq;
529 rq->cfg.if_id = if_id;
532 rq->qstate = 0;
533 rq->ring->cidx = 0;
534 rq->ring->pidx = 0;
537 cq->cb_arg = rq;
549 * @param rq receive queue
552 oce_rq_del(struct oce_rq *rq)
554 POCE_SOFTC sc = (POCE_SOFTC) rq->parent;
559 if (rq->qstate == QCREATED) {
561 if(!rq->islro) {
563 fwcmd->params.req.rq_id = rq->rq_id;
567 fwcmd1->params.req.rq_id = rq->rq_id;
571 rq->qstate = QDELETED;
574 if (rq->cq != NULL) {
575 oce_cq_del(sc, rq->cq);
576 rq->cq = NULL;
961 * @param rq pointer to a receive queue
964 oce_start_rq(struct oce_rq *rq)
966 POCE_SOFTC sc = (POCE_SOFTC) rq->parent;
970 rc = oce_alloc_rx_bufs(rq, 960);
972 rc = oce_alloc_rx_bufs(rq, rq->cfg.q_len - 1);
975 oce_arm_cq(rq->parent, rq->cq->cq_id, 0, TRUE);
1137 oce_drain_rq_cq(struct oce_rq *rq)
1144 sc = rq->parent;
1145 cq = rq->cq;
1162 oce_free_posted_rxbuf(struct oce_rq *rq)
1166 while (rq->pending) {
1168 pd = &rq->pckts[rq->ring->cidx];
1169 bus_dmamap_sync(rq->tag, pd->map, BUS_DMASYNC_POSTWRITE);
1170 bus_dmamap_unload(rq->tag, pd->map);
1176 RING_GET(rq->ring,1);
1177 rq->pending--;
1183 oce_rx_cq_clean_hwlro(struct oce_rq *rq)
1185 struct oce_cq *cq = rq->cq;
1186 POCE_SOFTC sc = rq->parent;
1198 /* we should not get singleton cqe after cqe1 on same rq */
1199 if(rq->cqe_firstpart != NULL) {
1203 num_frags = cqe->pkt_size / rq->cfg.frag_size;
1204 if(cqe->pkt_size % rq->cfg.frag_size)
1206 oce_discard_rx_comp(rq, num_frags);
1213 /* we should not get cqe1 after cqe1 on same rq */
1214 if(rq->cqe_firstpart != NULL) {
1218 rq->cqe_firstpart = (struct nic_hwlro_cqe_part1 *)cqe;
1223 if(rq->cqe_firstpart == NULL) {
1227 num_frags = cqe2->coalesced_size / rq->cfg.frag_size;
1228 if(cqe2->coalesced_size % rq->cfg.frag_size)
1232 oce_discard_rx_comp(rq, num_frags);
1234 rq->cqe_firstpart->valid = 0;
1236 rq->cqe_firstpart = NULL;
1261 oce_rx_cq_clean(struct oce_rq *rq)
1268 sc = rq->parent;
1269 cq = rq->cq;
1277 oce_discard_rx_comp(rq, cqe->u0.s.num_fragments);
1286 oce_rx_flush_lro(rq);
1311 struct oce_rq *rq;
1318 for_all_rq_queues(sc, rq, i) {
1319 if (rq->qstate == QCREATED) {
1321 LOCK(&rq->rx_lock);
1324 if(!rq->islro) {
1326 fwcmd->params.req.rq_id = rq->rq_id;
1330 fwcmd1->params.req.rq_id = rq->rq_id;
1335 rq->qstate = QDELETED;
1339 if(!rq->islro)
1340 oce_rx_cq_clean(rq);
1342 oce_rx_cq_clean_hwlro(rq);
1345 oce_free_posted_rxbuf(rq);
1346 UNLOCK(&rq->rx_lock);
1356 struct oce_rq *rq;
1359 for_all_rq_queues(sc, rq, i) {
1360 if (rq->qstate == QCREATED)
1363 rc = oce_mbox_create_rq(rq);
1366 rq->islro = 0;
1368 rc = oce_mbox_create_rq_v2(rq);
1371 rq->islro = 1;
1374 rq->qstate = QCREATED;
1375 rq->pending = 0;
1376 rq->ring->cidx = 0;
1377 rq->ring->pidx = 0;