Lines Matching refs:rbdr
257 nicvf_alloc_rcv_buffer(struct nicvf *nic, struct rbdr *rbdr, in nicvf_alloc_rcv_buffer() argument
276 err = bus_dmamap_load_mbuf_sg(rbdr->rbdr_buff_dmat, dmap, mbuf, segs, in nicvf_alloc_rcv_buffer()
283 bus_dmamap_destroy(rbdr->rbdr_buff_dmat, dmap); in nicvf_alloc_rcv_buffer()
295 rinfo->dmat = rbdr->rbdr_buff_dmat; in nicvf_alloc_rcv_buffer()
334 nicvf_init_rbdr(struct nicvf *nic, struct rbdr *rbdr, int ring_len, in nicvf_init_rbdr() argument
344 err = nicvf_alloc_q_desc_mem(nic, &rbdr->dmem, ring_len, in nicvf_init_rbdr()
352 rbdr->desc = rbdr->dmem.base; in nicvf_init_rbdr()
357 rbdr->dma_size = buf_size - NICVF_RCV_BUF_ALIGN_BYTES; in nicvf_init_rbdr()
358 rbdr->enable = TRUE; in nicvf_init_rbdr()
359 rbdr->thresh = RBDR_THRESH; in nicvf_init_rbdr()
360 rbdr->nic = nic; in nicvf_init_rbdr()
361 rbdr->idx = qidx; in nicvf_init_rbdr()
387 &rbdr->rbdr_buff_dmat); /* dmat */ in nicvf_init_rbdr()
395 rbdr->rbdr_buff_dmaps = malloc(sizeof(*rbdr->rbdr_buff_dmaps) * in nicvf_init_rbdr()
399 err = bus_dmamap_create(rbdr->rbdr_buff_dmat, 0, &dmap); in nicvf_init_rbdr()
405 rbdr->rbdr_buff_dmaps[idx] = dmap; in nicvf_init_rbdr()
407 err = nicvf_alloc_rcv_buffer(nic, rbdr, dmap, M_WAITOK, in nicvf_init_rbdr()
412 desc = GET_RBDR_DESC(rbdr, idx); in nicvf_init_rbdr()
417 TASK_INIT(&rbdr->rbdr_task, 0, nicvf_rbdr_task, rbdr); in nicvf_init_rbdr()
418 TASK_INIT(&rbdr->rbdr_task_nowait, 0, nicvf_rbdr_task_nowait, rbdr); in nicvf_init_rbdr()
419 rbdr->rbdr_taskq = taskqueue_create_fast("nicvf_rbdr_taskq", M_WAITOK, in nicvf_init_rbdr()
420 taskqueue_thread_enqueue, &rbdr->rbdr_taskq); in nicvf_init_rbdr()
421 taskqueue_start_threads(&rbdr->rbdr_taskq, 1, PI_NET, "%s: rbdr_taskq", in nicvf_init_rbdr()
429 nicvf_free_rbdr(struct nicvf *nic, struct rbdr *rbdr) in nicvf_free_rbdr() argument
441 if ((qs == NULL) || (rbdr == NULL)) in nicvf_free_rbdr()
444 rbdr->enable = FALSE; in nicvf_free_rbdr()
445 if (rbdr->rbdr_taskq != NULL) { in nicvf_free_rbdr()
447 while (taskqueue_cancel(rbdr->rbdr_taskq, in nicvf_free_rbdr()
448 &rbdr->rbdr_task_nowait, NULL) != 0) { in nicvf_free_rbdr()
450 taskqueue_drain(rbdr->rbdr_taskq, in nicvf_free_rbdr()
451 &rbdr->rbdr_task_nowait); in nicvf_free_rbdr()
453 taskqueue_free(rbdr->rbdr_taskq); in nicvf_free_rbdr()
454 rbdr->rbdr_taskq = NULL; in nicvf_free_rbdr()
457 &rbdr->rbdr_task, NULL) != 0) { in nicvf_free_rbdr()
459 taskqueue_drain(taskqueue_thread, &rbdr->rbdr_task); in nicvf_free_rbdr()
473 if (rbdr->rbdr_buff_dmat != NULL) { in nicvf_free_rbdr()
474 head = rbdr->head; in nicvf_free_rbdr()
475 tail = rbdr->tail; in nicvf_free_rbdr()
477 desc = GET_RBDR_DESC(rbdr, head); in nicvf_free_rbdr()
480 bus_dmamap_unload(rbdr->rbdr_buff_dmat, rinfo->dmap); in nicvf_free_rbdr()
485 head &= (rbdr->dmem.q_len - 1); in nicvf_free_rbdr()
488 desc = GET_RBDR_DESC(rbdr, tail); in nicvf_free_rbdr()
491 bus_dmamap_unload(rbdr->rbdr_buff_dmat, rinfo->dmap); in nicvf_free_rbdr()
498 if (rbdr->rbdr_buff_dmaps[idx] == NULL) in nicvf_free_rbdr()
500 err = bus_dmamap_destroy(rbdr->rbdr_buff_dmat, in nicvf_free_rbdr()
501 rbdr->rbdr_buff_dmaps[idx]); in nicvf_free_rbdr()
505 rbdr->rbdr_buff_dmaps[idx] = NULL; in nicvf_free_rbdr()
509 err = bus_dma_tag_destroy(rbdr->rbdr_buff_dmat); in nicvf_free_rbdr()
513 rbdr->head = 0; in nicvf_free_rbdr()
514 rbdr->tail = 0; in nicvf_free_rbdr()
518 nicvf_free_q_desc_mem(nic, &rbdr->dmem); in nicvf_free_rbdr()
525 nicvf_refill_rbdr(struct rbdr *rbdr, int mflags) in nicvf_refill_rbdr() argument
540 nic = rbdr->nic; in nicvf_refill_rbdr()
542 rbdr_idx = rbdr->idx; in nicvf_refill_rbdr()
545 if (!rbdr->enable) in nicvf_refill_rbdr()
562 tail &= (rbdr->dmem.q_len - 1); in nicvf_refill_rbdr()
564 dmap = rbdr->rbdr_buff_dmaps[tail]; in nicvf_refill_rbdr()
565 if (nicvf_alloc_rcv_buffer(nic, rbdr, dmap, mflags, in nicvf_refill_rbdr()
570 desc = GET_RBDR_DESC(rbdr, tail); in nicvf_refill_rbdr()
604 struct rbdr *rbdr; in nicvf_rbdr_task() local
607 rbdr = (struct rbdr *)arg; in nicvf_rbdr_task()
609 err = nicvf_refill_rbdr(rbdr, M_WAITOK); in nicvf_rbdr_task()
620 struct rbdr *rbdr; in nicvf_rbdr_task_nowait() local
623 rbdr = (struct rbdr *)arg; in nicvf_rbdr_task_nowait()
625 err = nicvf_refill_rbdr(rbdr, M_NOWAIT); in nicvf_rbdr_task_nowait()
631 taskqueue_enqueue(taskqueue_thread, &rbdr->rbdr_task); in nicvf_rbdr_task_nowait()
1238 nicvf_reclaim_rbdr(struct nicvf *nic, struct rbdr *rbdr, int qidx) in nicvf_reclaim_rbdr() argument
1244 rbdr->head = in nicvf_reclaim_rbdr()
1246 rbdr->tail = in nicvf_reclaim_rbdr()
1457 struct rbdr *rbdr; in nicvf_rbdr_config() local
1460 rbdr = &qs->rbdr[qidx]; in nicvf_rbdr_config()
1461 nicvf_reclaim_rbdr(nic, rbdr, qidx); in nicvf_rbdr_config()
1467 (uint64_t)(rbdr->dmem.phys_base)); in nicvf_rbdr_config()
1476 rbdr_cfg.lines = rbdr->dma_size / 128; in nicvf_rbdr_config()
1486 rbdr->thresh - 1); in nicvf_rbdr_config()
1542 nicvf_free_rbdr(nic, &qs->rbdr[qidx]); in nicvf_free_resources()
1561 if (nicvf_init_rbdr(nic, &qs->rbdr[qidx], qs->rbdr_len, in nicvf_alloc_resources()