Lines Matching defs:rbdr

259 nicvf_alloc_rcv_buffer(struct nicvf *nic, struct rbdr *rbdr,
278 err = bus_dmamap_load_mbuf_sg(rbdr->rbdr_buff_dmat, dmap, mbuf, segs,
285 bus_dmamap_destroy(rbdr->rbdr_buff_dmat, dmap);
297 rinfo->dmat = rbdr->rbdr_buff_dmat;
336 nicvf_init_rbdr(struct nicvf *nic, struct rbdr *rbdr, int ring_len,
345 /* Allocate rbdr descriptors ring */
346 err = nicvf_alloc_q_desc_mem(nic, &rbdr->dmem, ring_len,
354 rbdr->desc = rbdr->dmem.base;
359 rbdr->dma_size = buf_size - NICVF_RCV_BUF_ALIGN_BYTES;
360 rbdr->enable = TRUE;
361 rbdr->thresh = RBDR_THRESH;
362 rbdr->nic = nic;
363 rbdr->idx = qidx;
389 &rbdr->rbdr_buff_dmat); /* dmat */
397 rbdr->rbdr_buff_dmaps = malloc(sizeof(*rbdr->rbdr_buff_dmaps) *
401 err = bus_dmamap_create(rbdr->rbdr_buff_dmat, 0, &dmap);
407 rbdr->rbdr_buff_dmaps[idx] = dmap;
409 err = nicvf_alloc_rcv_buffer(nic, rbdr, dmap, M_WAITOK,
414 desc = GET_RBDR_DESC(rbdr, idx);
419 TASK_INIT(&rbdr->rbdr_task, 0, nicvf_rbdr_task, rbdr);
420 TASK_INIT(&rbdr->rbdr_task_nowait, 0, nicvf_rbdr_task_nowait, rbdr);
421 rbdr->rbdr_taskq = taskqueue_create_fast("nicvf_rbdr_taskq", M_WAITOK,
422 taskqueue_thread_enqueue, &rbdr->rbdr_taskq);
423 taskqueue_start_threads(&rbdr->rbdr_taskq, 1, PI_NET, "%s: rbdr_taskq",
431 nicvf_free_rbdr(struct nicvf *nic, struct rbdr *rbdr)
443 if ((qs == NULL) || (rbdr == NULL))
446 rbdr->enable = FALSE;
447 if (rbdr->rbdr_taskq != NULL) {
449 while (taskqueue_cancel(rbdr->rbdr_taskq,
450 &rbdr->rbdr_task_nowait, NULL) != 0) {
452 taskqueue_drain(rbdr->rbdr_taskq,
453 &rbdr->rbdr_task_nowait);
455 taskqueue_free(rbdr->rbdr_taskq);
456 rbdr->rbdr_taskq = NULL;
459 &rbdr->rbdr_task, NULL) != 0) {
461 taskqueue_drain(taskqueue_thread, &rbdr->rbdr_task);
475 if (rbdr->rbdr_buff_dmat != NULL) {
476 head = rbdr->head;
477 tail = rbdr->tail;
479 desc = GET_RBDR_DESC(rbdr, head);
482 bus_dmamap_unload(rbdr->rbdr_buff_dmat, rinfo->dmap);
487 head &= (rbdr->dmem.q_len - 1);
490 desc = GET_RBDR_DESC(rbdr, tail);
493 bus_dmamap_unload(rbdr->rbdr_buff_dmat, rinfo->dmap);
500 if (rbdr->rbdr_buff_dmaps[idx] == NULL)
502 err = bus_dmamap_destroy(rbdr->rbdr_buff_dmat,
503 rbdr->rbdr_buff_dmaps[idx]);
507 rbdr->rbdr_buff_dmaps[idx] = NULL;
511 err = bus_dma_tag_destroy(rbdr->rbdr_buff_dmat);
515 rbdr->head = 0;
516 rbdr->tail = 0;
520 nicvf_free_q_desc_mem(nic, &rbdr->dmem);
527 nicvf_refill_rbdr(struct rbdr *rbdr, int mflags)
542 nic = rbdr->nic;
544 rbdr_idx = rbdr->idx;
547 if (!rbdr->enable)
564 tail &= (rbdr->dmem.q_len - 1);
566 dmap = rbdr->rbdr_buff_dmaps[tail];
567 if (nicvf_alloc_rcv_buffer(nic, rbdr, dmap, mflags,
572 desc = GET_RBDR_DESC(rbdr, tail);
606 struct rbdr *rbdr;
609 rbdr = (struct rbdr *)arg;
611 err = nicvf_refill_rbdr(rbdr, M_WAITOK);
622 struct rbdr *rbdr;
625 rbdr = (struct rbdr *)arg;
627 err = nicvf_refill_rbdr(rbdr, M_NOWAIT);
633 taskqueue_enqueue(taskqueue_thread, &rbdr->rbdr_task);
1235 nicvf_reclaim_rbdr(struct nicvf *nic, struct rbdr *rbdr, int qidx)
1241 rbdr->head =
1243 rbdr->tail =
1454 struct rbdr *rbdr;
1457 rbdr = &qs->rbdr[qidx];
1458 nicvf_reclaim_rbdr(nic, rbdr, qidx);
1464 (uint64_t)(rbdr->dmem.phys_base));
1473 rbdr_cfg.lines = rbdr->dma_size / 128;
1483 rbdr->thresh - 1);
1540 nicvf_free_rbdr(nic, &qs->rbdr[qidx]);
1559 if (nicvf_init_rbdr(nic, &qs->rbdr[qidx], qs->rbdr_len,