Lines Matching refs:vic

824 	virtio_chain_t *vic;  in virtio_queue_complete()  local
830 if ((vic = avl_find(&viq->viq_inflight, &search, NULL)) == NULL) { in virtio_queue_complete()
833 avl_remove(&viq->viq_inflight, vic); in virtio_queue_complete()
835 return (vic); in virtio_queue_complete()
889 virtio_chain_t *vic; in virtio_queue_poll() local
890 if ((vic = virtio_queue_complete(viq, start)) == NULL) { in virtio_queue_poll()
900 vic->vic_received_length = len; in virtio_queue_poll()
904 return (vic); in virtio_queue_poll()
926 virtio_chain_t *vic = avl_first(&viq->viq_inflight); in virtio_queue_evacuate() local
927 if (vic != NULL) { in virtio_queue_evacuate()
928 avl_remove(&viq->viq_inflight, vic); in virtio_queue_evacuate()
933 return (vic); in virtio_queue_evacuate()
947 virtio_chain_received_length(virtio_chain_t *vic) in virtio_chain_received_length() argument
949 return (vic->vic_received_length); in virtio_chain_received_length()
960 virtio_chain_t *vic; in virtio_chain_alloc() local
984 size_t vicsz = sizeof (*vic) + sizeof (uint16_t) * cap; in virtio_chain_alloc()
985 if ((vic = kmem_zalloc(vicsz, kmflags)) == NULL) { in virtio_chain_alloc()
988 vic->vic_vq = viq; in virtio_chain_alloc()
989 vic->vic_direct_capacity = cap; in virtio_chain_alloc()
996 if (virtio_dma_init(vio, &vic->vic_indirect_dma, in virtio_chain_alloc()
1010 if (virtio_chain_append_impl(vic, in virtio_chain_alloc()
1011 virtio_dma_cookie_pa(&vic->vic_indirect_dma, 0), 0, in virtio_chain_alloc()
1017 VERIFY3U(vic->vic_direct_used, ==, 1); in virtio_chain_alloc()
1024 vic->vic_indirect_capacity = viq->viq_max_segs; in virtio_chain_alloc()
1027 return (vic); in virtio_chain_alloc()
1030 virtio_dma_fini(&vic->vic_indirect_dma); in virtio_chain_alloc()
1031 kmem_free(vic, vicsz); in virtio_chain_alloc()
1036 virtio_chain_data(virtio_chain_t *vic) in virtio_chain_data() argument
1038 return (vic->vic_data); in virtio_chain_data()
1042 virtio_chain_data_set(virtio_chain_t *vic, void *data) in virtio_chain_data_set() argument
1044 vic->vic_data = data; in virtio_chain_data_set()
1048 virtio_chain_clear(virtio_chain_t *vic) in virtio_chain_clear() argument
1050 if (vic->vic_indirect_capacity != 0) { in virtio_chain_clear()
1056 VERIFY3U(vic->vic_direct_capacity, ==, 1); in virtio_chain_clear()
1058 if (vic->vic_indirect_used > 0) { in virtio_chain_clear()
1062 vic->vic_indirect_used = 0; in virtio_chain_clear()
1063 bzero(virtio_dma_va(&vic->vic_indirect_dma, 0), in virtio_chain_clear()
1064 virtio_dma_size(&vic->vic_indirect_dma)); in virtio_chain_clear()
1067 } else if (vic->vic_direct_capacity > 0) { in virtio_chain_clear()
1071 for (uint_t i = 0; i < vic->vic_direct_used; i++) { in virtio_chain_clear()
1072 id_free(vic->vic_vq->viq_descmap, vic->vic_direct[i]); in virtio_chain_clear()
1073 vic->vic_direct[i] = 0; in virtio_chain_clear()
1075 vic->vic_direct_used = 0; in virtio_chain_clear()
1080 virtio_chain_free(virtio_chain_t *vic) in virtio_chain_free() argument
1086 virtio_chain_clear(vic); in virtio_chain_free()
1088 if (vic->vic_indirect_capacity > 0) { in virtio_chain_free()
1093 VERIFY3U(vic->vic_direct_capacity, ==, 1); in virtio_chain_free()
1094 id_free(vic->vic_vq->viq_descmap, vic->vic_direct[0]); in virtio_chain_free()
1096 virtio_dma_fini(&vic->vic_indirect_dma); in virtio_chain_free()
1099 size_t vicsz = sizeof (*vic) + in virtio_chain_free()
1100 vic->vic_direct_capacity * sizeof (uint16_t); in virtio_chain_free()
1102 kmem_free(vic, vicsz); in virtio_chain_free()
1122 virtio_chain_append_impl(virtio_chain_t *vic, uint64_t pa, size_t len, in virtio_chain_append_impl() argument
1125 virtio_queue_t *viq = vic->vic_vq; in virtio_chain_append_impl()
1135 if (vic->vic_indirect_capacity != 0) { in virtio_chain_append_impl()
1139 if (vic->vic_indirect_used >= vic->vic_indirect_capacity) { in virtio_chain_append_impl()
1143 vqd = virtio_dma_va(&vic->vic_indirect_dma, 0); in virtio_chain_append_impl()
1145 if ((index = vic->vic_indirect_used++) > 0) { in virtio_chain_append_impl()
1158 if (vic->vic_direct_used >= vic->vic_direct_capacity) { in virtio_chain_append_impl()
1168 if (vic->vic_direct_used > 0) { in virtio_chain_append_impl()
1173 uint16_t p = vic->vic_direct[vic->vic_direct_used - 1]; in virtio_chain_append_impl()
1178 vic->vic_direct[vic->vic_direct_used++] = index; in virtio_chain_append_impl()
1190 virtio_chain_append(virtio_chain_t *vic, uint64_t pa, size_t len, in virtio_chain_append() argument
1193 virtio_queue_t *viq = vic->vic_vq; in virtio_chain_append()
1209 int r = virtio_chain_append_impl(vic, pa, len, flags); in virtio_chain_append()
1249 virtio_chain_submit(virtio_chain_t *vic, boolean_t flush) in virtio_chain_submit() argument
1251 virtio_queue_t *viq = vic->vic_vq; in virtio_chain_submit()
1255 if (vic->vic_indirect_capacity != 0) { in virtio_chain_submit()
1258 VERIFY3U(vic->vic_direct_used, ==, 1); in virtio_chain_submit()
1265 vqd[vic->vic_direct[0]].vqd_len = in virtio_chain_submit()
1266 sizeof (virtio_vq_desc_t) * vic->vic_indirect_used; in virtio_chain_submit()
1268 virtio_dma_sync(&vic->vic_indirect_dma, DDI_DMA_SYNC_FORDEV); in virtio_chain_submit()
1277 viq->viq_dma_driver->vqdr_ring[index] = vic->vic_direct[0]; in virtio_chain_submit()
1279 vic->vic_head = vic->vic_direct[0]; in virtio_chain_submit()
1280 avl_add(&viq->viq_inflight, vic); in virtio_chain_submit()
1283 virtio_queue_flush_locked(vic->vic_vq); in virtio_chain_submit()