Lines Matching refs:d40d

659 static int d40_pool_lli_alloc(struct d40_chan *d40c, struct d40_desc *d40d,  in d40_pool_lli_alloc()  argument
672 base = d40d->lli_pool.pre_alloc_lli; in d40_pool_lli_alloc()
673 d40d->lli_pool.size = sizeof(d40d->lli_pool.pre_alloc_lli); in d40_pool_lli_alloc()
674 d40d->lli_pool.base = NULL; in d40_pool_lli_alloc()
676 d40d->lli_pool.size = lli_len * 2 * align; in d40_pool_lli_alloc()
678 base = kmalloc(d40d->lli_pool.size + align, GFP_NOWAIT); in d40_pool_lli_alloc()
679 d40d->lli_pool.base = base; in d40_pool_lli_alloc()
681 if (d40d->lli_pool.base == NULL) in d40_pool_lli_alloc()
686 d40d->lli_log.src = PTR_ALIGN(base, align); in d40_pool_lli_alloc()
687 d40d->lli_log.dst = d40d->lli_log.src + lli_len; in d40_pool_lli_alloc()
689 d40d->lli_pool.dma_addr = 0; in d40_pool_lli_alloc()
691 d40d->lli_phy.src = PTR_ALIGN(base, align); in d40_pool_lli_alloc()
692 d40d->lli_phy.dst = d40d->lli_phy.src + lli_len; in d40_pool_lli_alloc()
694 d40d->lli_pool.dma_addr = dma_map_single(d40c->base->dev, in d40_pool_lli_alloc()
695 d40d->lli_phy.src, in d40_pool_lli_alloc()
696 d40d->lli_pool.size, in d40_pool_lli_alloc()
700 d40d->lli_pool.dma_addr)) { in d40_pool_lli_alloc()
701 kfree(d40d->lli_pool.base); in d40_pool_lli_alloc()
702 d40d->lli_pool.base = NULL; in d40_pool_lli_alloc()
703 d40d->lli_pool.dma_addr = 0; in d40_pool_lli_alloc()
711 static void d40_pool_lli_free(struct d40_chan *d40c, struct d40_desc *d40d) in d40_pool_lli_free() argument
713 if (d40d->lli_pool.dma_addr) in d40_pool_lli_free()
714 dma_unmap_single(d40c->base->dev, d40d->lli_pool.dma_addr, in d40_pool_lli_free()
715 d40d->lli_pool.size, DMA_TO_DEVICE); in d40_pool_lli_free()
717 kfree(d40d->lli_pool.base); in d40_pool_lli_free()
718 d40d->lli_pool.base = NULL; in d40_pool_lli_free()
719 d40d->lli_pool.size = 0; in d40_pool_lli_free()
720 d40d->lli_log.src = NULL; in d40_pool_lli_free()
721 d40d->lli_log.dst = NULL; in d40_pool_lli_free()
722 d40d->lli_phy.src = NULL; in d40_pool_lli_free()
723 d40d->lli_phy.dst = NULL; in d40_pool_lli_free()
727 struct d40_desc *d40d) in d40_lcla_alloc_one() argument
743 d40c->base->lcla_pool.alloc_map[idx] = d40d; in d40_lcla_alloc_one()
744 d40d->lcla_alloc++; in d40_lcla_alloc_one()
756 struct d40_desc *d40d) in d40_lcla_free_all() argument
770 if (d40c->base->lcla_pool.alloc_map[idx] == d40d) { in d40_lcla_free_all()
772 d40d->lcla_alloc--; in d40_lcla_free_all()
773 if (d40d->lcla_alloc == 0) { in d40_lcla_free_all()
786 static void d40_desc_remove(struct d40_desc *d40d) in d40_desc_remove() argument
788 list_del(&d40d->node); in d40_desc_remove()
818 static void d40_desc_free(struct d40_chan *d40c, struct d40_desc *d40d) in d40_desc_free() argument
821 d40_pool_lli_free(d40c, d40d); in d40_desc_free()
822 d40_lcla_free_all(d40c, d40d); in d40_desc_free()
823 kmem_cache_free(d40c->base->desc_slab, d40d); in d40_desc_free()
965 static void d40_desc_load(struct d40_chan *d40c, struct d40_desc *d40d) in d40_desc_load() argument
968 d40_phy_lli_load(d40c, d40d); in d40_desc_load()
969 d40d->lli_current = d40d->lli_len; in d40_desc_load()
971 d40_log_lli_to_lcxa(d40c, d40d); in d40_desc_load()
1135 struct d40_desc *d40d; in d40_term_all() local
1139 while ((d40d = d40_first_done(d40c))) { in d40_term_all()
1140 d40_desc_remove(d40d); in d40_term_all()
1141 d40_desc_free(d40c, d40d); in d40_term_all()
1145 while ((d40d = d40_first_active_get(d40c))) { in d40_term_all()
1146 d40_desc_remove(d40d); in d40_term_all()
1147 d40_desc_free(d40c, d40d); in d40_term_all()
1151 while ((d40d = d40_first_queued(d40c))) { in d40_term_all()
1152 d40_desc_remove(d40d); in d40_term_all()
1153 d40_desc_free(d40c, d40d); in d40_term_all()
1157 while ((d40d = d40_first_pending(d40c))) { in d40_term_all()
1158 d40_desc_remove(d40d); in d40_term_all()
1159 d40_desc_free(d40c, d40d); in d40_term_all()
1164 list_for_each_entry_safe(d40d, _d, &d40c->client, node) { in d40_term_all()
1165 d40_desc_remove(d40d); in d40_term_all()
1166 d40_desc_free(d40c, d40d); in d40_term_all()
1171 list_for_each_entry_safe(d40d, _d, in d40_term_all()
1173 d40_desc_remove(d40d); in d40_term_all()
1174 d40_desc_free(d40c, d40d); in d40_term_all()
1495 struct d40_desc *d40d = container_of(tx, struct d40_desc, txd); in d40_tx_submit() local
1501 d40_desc_queue(d40c, d40d); in d40_tx_submit()
1514 struct d40_desc *d40d; in d40_queue_start() local
1518 d40d = d40_first_queued(d40c); in d40_queue_start()
1520 if (d40d != NULL) { in d40_queue_start()
1527 d40_desc_remove(d40d); in d40_queue_start()
1530 d40_desc_submit(d40c, d40d); in d40_queue_start()
1533 d40_desc_load(d40c, d40d); in d40_queue_start()
1542 return d40d; in d40_queue_start()
1548 struct d40_desc *d40d; in dma_tc_handle() local
1551 d40d = d40_first_active_get(d40c); in dma_tc_handle()
1553 if (d40d == NULL) in dma_tc_handle()
1556 if (d40d->cyclic) { in dma_tc_handle()
1563 if (d40d->lli_current < d40d->lli_len in dma_tc_handle()
1566 d40_lcla_free_all(d40c, d40d); in dma_tc_handle()
1567 d40_desc_load(d40c, d40d); in dma_tc_handle()
1570 if (d40d->lli_current == d40d->lli_len) in dma_tc_handle()
1571 d40d->lli_current = 0; in dma_tc_handle()
1574 d40_lcla_free_all(d40c, d40d); in dma_tc_handle()
1576 if (d40d->lli_current < d40d->lli_len) { in dma_tc_handle()
1577 d40_desc_load(d40c, d40d); in dma_tc_handle()
1590 d40_desc_remove(d40d); in dma_tc_handle()
1591 d40_desc_done(d40c, d40d); in dma_tc_handle()
1602 struct d40_desc *d40d; in dma_tasklet() local
1610 d40d = d40_first_done(d40c); in dma_tasklet()
1611 if (d40d == NULL) { in dma_tasklet()
1613 d40d = d40_first_active_get(d40c); in dma_tasklet()
1614 if (d40d == NULL || !d40d->cyclic) in dma_tasklet()
1618 if (!d40d->cyclic) in dma_tasklet()
1619 dma_cookie_complete(&d40d->txd); in dma_tasklet()
1631 callback_active = !!(d40d->txd.flags & DMA_PREP_INTERRUPT); in dma_tasklet()
1632 dmaengine_desc_get_callback(&d40d->txd, &cb); in dma_tasklet()
1634 if (!d40d->cyclic) { in dma_tasklet()
1635 if (async_tx_test_ack(&d40d->txd)) { in dma_tasklet()
1636 d40_desc_remove(d40d); in dma_tasklet()
1637 d40_desc_free(d40c, d40d); in dma_tasklet()
1638 } else if (!d40d->is_in_client_list) { in dma_tasklet()
1639 d40_desc_remove(d40d); in dma_tasklet()
1640 d40_lcla_free_all(d40c, d40d); in dma_tasklet()
1641 list_add_tail(&d40d->node, &d40c->client); in dma_tasklet()
1642 d40d->is_in_client_list = true; in dma_tasklet()