Lines Matching refs:xchan
74 xdma_get_iommu_fdt(xdma_controller_t *xdma, xdma_channel_t *xchan) in xdma_get_iommu_fdt() argument
92 xio = &xchan->xio; in xdma_get_iommu_fdt()
111 xdma_channel_t *xchan; in xdma_channel_alloc() local
114 xchan = malloc(sizeof(xdma_channel_t), M_XDMA, M_WAITOK | M_ZERO); in xdma_channel_alloc()
115 xchan->xdma = xdma; in xdma_channel_alloc()
119 if (xdma_get_iommu_fdt(xdma, xchan)) in xdma_channel_alloc()
123 xchan->caps = caps; in xdma_channel_alloc()
128 ret = XDMA_CHANNEL_ALLOC(xdma->dma_dev, xchan); in xdma_channel_alloc()
133 free(xchan, M_XDMA); in xdma_channel_alloc()
138 TAILQ_INIT(&xchan->ie_handlers); in xdma_channel_alloc()
140 mtx_init(&xchan->mtx_lock, "xDMA chan", NULL, MTX_DEF); in xdma_channel_alloc()
141 mtx_init(&xchan->mtx_qin_lock, "xDMA qin", NULL, MTX_DEF); in xdma_channel_alloc()
142 mtx_init(&xchan->mtx_qout_lock, "xDMA qout", NULL, MTX_DEF); in xdma_channel_alloc()
143 mtx_init(&xchan->mtx_bank_lock, "xDMA bank", NULL, MTX_DEF); in xdma_channel_alloc()
144 mtx_init(&xchan->mtx_proc_lock, "xDMA proc", NULL, MTX_DEF); in xdma_channel_alloc()
146 TAILQ_INIT(&xchan->bank); in xdma_channel_alloc()
147 TAILQ_INIT(&xchan->queue_in); in xdma_channel_alloc()
148 TAILQ_INIT(&xchan->queue_out); in xdma_channel_alloc()
149 TAILQ_INIT(&xchan->processing); in xdma_channel_alloc()
151 if (xchan->caps & XCHAN_CAP_IOMMU) in xdma_channel_alloc()
152 xdma_iommu_init(&xchan->xio); in xdma_channel_alloc()
154 TAILQ_INSERT_TAIL(&xdma->channels, xchan, xchan_next); in xdma_channel_alloc()
158 return (xchan); in xdma_channel_alloc()
162 xdma_channel_free(xdma_channel_t *xchan) in xdma_channel_free() argument
167 xdma = xchan->xdma; in xdma_channel_free()
173 err = XDMA_CHANNEL_FREE(xdma->dma_dev, xchan); in xdma_channel_free()
181 if (xchan->flags & XCHAN_TYPE_SG) in xdma_channel_free()
182 xdma_channel_free_sg(xchan); in xdma_channel_free()
184 if (xchan->caps & XCHAN_CAP_IOMMU) in xdma_channel_free()
185 xdma_iommu_release(&xchan->xio); in xdma_channel_free()
187 xdma_teardown_all_intr(xchan); in xdma_channel_free()
189 mtx_destroy(&xchan->mtx_lock); in xdma_channel_free()
190 mtx_destroy(&xchan->mtx_qin_lock); in xdma_channel_free()
191 mtx_destroy(&xchan->mtx_qout_lock); in xdma_channel_free()
192 mtx_destroy(&xchan->mtx_bank_lock); in xdma_channel_free()
193 mtx_destroy(&xchan->mtx_proc_lock); in xdma_channel_free()
195 TAILQ_REMOVE(&xdma->channels, xchan, xchan_next); in xdma_channel_free()
197 free(xchan, M_XDMA); in xdma_channel_free()
205 xdma_setup_intr(xdma_channel_t *xchan, int flags, in xdma_setup_intr() argument
212 xdma = xchan->xdma; in xdma_setup_intr()
230 XCHAN_LOCK(xchan); in xdma_setup_intr()
231 TAILQ_INSERT_TAIL(&xchan->ie_handlers, ih, ih_next); in xdma_setup_intr()
232 XCHAN_UNLOCK(xchan); in xdma_setup_intr()
241 xdma_teardown_intr(xdma_channel_t *xchan, struct xdma_intr_handler *ih) in xdma_teardown_intr() argument
245 xdma = xchan->xdma; in xdma_teardown_intr()
255 TAILQ_REMOVE(&xchan->ie_handlers, ih, ih_next); in xdma_teardown_intr()
262 xdma_teardown_all_intr(xdma_channel_t *xchan) in xdma_teardown_all_intr() argument
267 KASSERT(xchan->xdma != NULL, ("xdma is NULL")); in xdma_teardown_all_intr()
269 TAILQ_FOREACH_SAFE(ih, &xchan->ie_handlers, ih_next, ih_tmp) { in xdma_teardown_all_intr()
270 TAILQ_REMOVE(&xchan->ie_handlers, ih, ih_next); in xdma_teardown_all_intr()
278 xdma_request(xdma_channel_t *xchan, struct xdma_request *req) in xdma_request() argument
283 xdma = xchan->xdma; in xdma_request()
287 XCHAN_LOCK(xchan); in xdma_request()
288 ret = XDMA_CHANNEL_REQUEST(xdma->dma_dev, xchan, req); in xdma_request()
292 XCHAN_UNLOCK(xchan); in xdma_request()
296 XCHAN_UNLOCK(xchan); in xdma_request()
302 xdma_control(xdma_channel_t *xchan, enum xdma_command cmd) in xdma_control() argument
307 xdma = xchan->xdma; in xdma_control()
310 ret = XDMA_CHANNEL_CONTROL(xdma->dma_dev, xchan, cmd); in xdma_control()
321 xdma_callback(xdma_channel_t *xchan, xdma_transfer_status_t *status) in xdma_callback() argument
327 KASSERT(xchan->xdma != NULL, ("xdma is NULL")); in xdma_callback()
329 TAILQ_FOREACH_SAFE(ih, &xchan->ie_handlers, ih_next, ih_tmp) { in xdma_callback()
339 if (xchan->flags & XCHAN_TYPE_SG) in xdma_callback()
340 xdma_queue_submit(xchan); in xdma_callback()
440 xchan_set_memory(xdma_channel_t *xchan, vmem_t *vmem) in xchan_set_memory() argument
443 xchan->vmem = vmem; in xchan_set_memory()