Lines Matching refs:tb
262 vioif_txbuf_t *tb; in vioif_txbuf_alloc() local
266 if ((tb = list_remove_head(&vif->vif_txbufs)) != NULL) { in vioif_txbuf_alloc()
270 return (tb); in vioif_txbuf_alloc()
274 vioif_txbuf_free(vioif_t *vif, vioif_txbuf_t *tb) in vioif_txbuf_free() argument
281 virtio_chain_clear(tb->tb_chain); in vioif_txbuf_free()
282 list_insert_head(&vif->vif_txbufs, tb); in vioif_txbuf_free()
371 vioif_txbuf_t *tb = &vif->vif_txbufs_mem[i]; in vioif_free_bufs() local
376 VERIFY(list_link_active(&tb->tb_link)); in vioif_free_bufs()
377 list_remove(&vif->vif_txbufs, tb); in vioif_free_bufs()
382 VERIFY3P(tb->tb_mp, ==, NULL); in vioif_free_bufs()
384 if (tb->tb_dma != NULL) { in vioif_free_bufs()
385 virtio_dma_free(tb->tb_dma); in vioif_free_bufs()
386 tb->tb_dma = NULL; in vioif_free_bufs()
389 if (tb->tb_chain != NULL) { in vioif_free_bufs()
390 virtio_chain_free(tb->tb_chain); in vioif_free_bufs()
391 tb->tb_chain = NULL; in vioif_free_bufs()
394 if (tb->tb_dmaext != NULL) { in vioif_free_bufs()
395 for (uint_t j = 0; j < tb->tb_dmaext_capacity; j++) { in vioif_free_bufs()
396 if (tb->tb_dmaext[j] != NULL) { in vioif_free_bufs()
398 tb->tb_dmaext[j]); in vioif_free_bufs()
399 tb->tb_dmaext[j] = NULL; in vioif_free_bufs()
403 kmem_free(tb->tb_dmaext, in vioif_free_bufs()
404 sizeof (virtio_dma_t *) * tb->tb_dmaext_capacity); in vioif_free_bufs()
405 tb->tb_dmaext = NULL; in vioif_free_bufs()
406 tb->tb_dmaext_capacity = 0; in vioif_free_bufs()
544 for (vioif_txbuf_t *tb = list_head(&vif->vif_txbufs); tb != NULL; in vioif_alloc_bufs() local
545 tb = list_next(&vif->vif_txbufs, tb)) { in vioif_alloc_bufs()
546 if ((tb->tb_dma = virtio_dma_alloc(vif->vif_virtio, in vioif_alloc_bufs()
551 VERIFY3U(virtio_dma_ncookies(tb->tb_dma), ==, 1); in vioif_alloc_bufs()
553 if ((tb->tb_chain = virtio_chain_alloc(vif->vif_tx_vq, in vioif_alloc_bufs()
557 virtio_chain_data_set(tb->tb_chain, tb); in vioif_alloc_bufs()
559 tb->tb_dmaext_capacity = VIOIF_MAX_SEGS - 1; in vioif_alloc_bufs()
560 tb->tb_dmaext = kmem_zalloc( in vioif_alloc_bufs()
561 sizeof (virtio_dma_t *) * tb->tb_dmaext_capacity, in vioif_alloc_bufs()
986 vioif_txbuf_t *tb = virtio_chain_data(vic); in vioif_reclaim_used_tx() local
988 if (tb->tb_mp != NULL) { in vioif_reclaim_used_tx()
992 for (uint_t i = 0; i < tb->tb_dmaext_capacity; i++) { in vioif_reclaim_used_tx()
993 if (tb->tb_dmaext[i] == NULL) { in vioif_reclaim_used_tx()
997 virtio_dma_unbind(tb->tb_dmaext[i]); in vioif_reclaim_used_tx()
1000 freemsg(tb->tb_mp); in vioif_reclaim_used_tx()
1001 tb->tb_mp = NULL; in vioif_reclaim_used_tx()
1008 vioif_txbuf_free(vif, tb); in vioif_reclaim_used_tx()
1118 vioif_tx_inline(vioif_t *vif, vioif_txbuf_t *tb, mblk_t *mp, size_t msg_size) in vioif_tx_inline() argument
1122 VERIFY3U(msg_size, <=, virtio_dma_size(tb->tb_dma) - VIOIF_HEADER_SKIP); in vioif_tx_inline()
1127 mcopymsg(mp, virtio_dma_va(tb->tb_dma, VIOIF_HEADER_SKIP)); in vioif_tx_inline()
1129 if (virtio_chain_append(tb->tb_chain, in vioif_tx_inline()
1130 virtio_dma_cookie_pa(tb->tb_dma, 0) + VIOIF_HEADER_SKIP, in vioif_tx_inline()
1139 vioif_tx_external(vioif_t *vif, vioif_txbuf_t *tb, mblk_t *mp, size_t msg_size) in vioif_tx_external() argument
1144 tb->tb_ndmaext = 0; in vioif_tx_external()
1157 if (tb->tb_ndmaext >= tb->tb_dmaext_capacity) { in vioif_tx_external()
1165 if (tb->tb_dmaext[tb->tb_ndmaext] == NULL) { in vioif_tx_external()
1169 if ((tb->tb_dmaext[tb->tb_ndmaext] = in vioif_tx_external()
1178 virtio_dma_t *extdma = tb->tb_dmaext[tb->tb_ndmaext++]; in vioif_tx_external()
1193 if (virtio_chain_append(tb->tb_chain, pa, sz, in vioif_tx_external()
1210 tb->tb_mp = mp; in vioif_tx_external()
1215 for (uint_t n = 0; n < tb->tb_ndmaext; n++) { in vioif_tx_external()
1216 if (tb->tb_dmaext[n] != NULL) { in vioif_tx_external()
1217 virtio_dma_unbind(tb->tb_dmaext[n]); in vioif_tx_external()
1220 tb->tb_ndmaext = 0; in vioif_tx_external()
1232 vioif_txbuf_t *tb = NULL; in vioif_send() local
1254 if ((tb = vioif_txbuf_alloc(vif)) == NULL) { in vioif_send()
1264 vnh = virtio_dma_va(tb->tb_dma, 0); in vioif_send()
1272 if (virtio_chain_append(tb->tb_chain, in vioif_send()
1273 virtio_dma_cookie_pa(tb->tb_dma, 0), sizeof (struct virtio_net_hdr), in vioif_send()
1398 ret = vioif_tx_inline(vif, tb, mp, msg_size); in vioif_send()
1400 ret = vioif_tx_external(vif, tb, mp, msg_size); in vioif_send()
1414 virtio_dma_sync(tb->tb_dma, DDI_DMA_SYNC_FORDEV); in vioif_send()
1415 virtio_chain_submit(tb->tb_chain, B_TRUE); in vioif_send()
1421 if (tb != NULL) { in vioif_send()
1422 vioif_txbuf_free(vif, tb); in vioif_send()