• Home
  • Raw
  • Download

Lines Matching refs:d40d

626 static int d40_pool_lli_alloc(struct d40_chan *d40c, struct d40_desc *d40d,  in d40_pool_lli_alloc()  argument
639 base = d40d->lli_pool.pre_alloc_lli; in d40_pool_lli_alloc()
640 d40d->lli_pool.size = sizeof(d40d->lli_pool.pre_alloc_lli); in d40_pool_lli_alloc()
641 d40d->lli_pool.base = NULL; in d40_pool_lli_alloc()
643 d40d->lli_pool.size = lli_len * 2 * align; in d40_pool_lli_alloc()
645 base = kmalloc(d40d->lli_pool.size + align, GFP_NOWAIT); in d40_pool_lli_alloc()
646 d40d->lli_pool.base = base; in d40_pool_lli_alloc()
648 if (d40d->lli_pool.base == NULL) in d40_pool_lli_alloc()
653 d40d->lli_log.src = PTR_ALIGN(base, align); in d40_pool_lli_alloc()
654 d40d->lli_log.dst = d40d->lli_log.src + lli_len; in d40_pool_lli_alloc()
656 d40d->lli_pool.dma_addr = 0; in d40_pool_lli_alloc()
658 d40d->lli_phy.src = PTR_ALIGN(base, align); in d40_pool_lli_alloc()
659 d40d->lli_phy.dst = d40d->lli_phy.src + lli_len; in d40_pool_lli_alloc()
661 d40d->lli_pool.dma_addr = dma_map_single(d40c->base->dev, in d40_pool_lli_alloc()
662 d40d->lli_phy.src, in d40_pool_lli_alloc()
663 d40d->lli_pool.size, in d40_pool_lli_alloc()
667 d40d->lli_pool.dma_addr)) { in d40_pool_lli_alloc()
668 kfree(d40d->lli_pool.base); in d40_pool_lli_alloc()
669 d40d->lli_pool.base = NULL; in d40_pool_lli_alloc()
670 d40d->lli_pool.dma_addr = 0; in d40_pool_lli_alloc()
678 static void d40_pool_lli_free(struct d40_chan *d40c, struct d40_desc *d40d) in d40_pool_lli_free() argument
680 if (d40d->lli_pool.dma_addr) in d40_pool_lli_free()
681 dma_unmap_single(d40c->base->dev, d40d->lli_pool.dma_addr, in d40_pool_lli_free()
682 d40d->lli_pool.size, DMA_TO_DEVICE); in d40_pool_lli_free()
684 kfree(d40d->lli_pool.base); in d40_pool_lli_free()
685 d40d->lli_pool.base = NULL; in d40_pool_lli_free()
686 d40d->lli_pool.size = 0; in d40_pool_lli_free()
687 d40d->lli_log.src = NULL; in d40_pool_lli_free()
688 d40d->lli_log.dst = NULL; in d40_pool_lli_free()
689 d40d->lli_phy.src = NULL; in d40_pool_lli_free()
690 d40d->lli_phy.dst = NULL; in d40_pool_lli_free()
694 struct d40_desc *d40d) in d40_lcla_alloc_one() argument
710 d40c->base->lcla_pool.alloc_map[idx] = d40d; in d40_lcla_alloc_one()
711 d40d->lcla_alloc++; in d40_lcla_alloc_one()
723 struct d40_desc *d40d) in d40_lcla_free_all() argument
737 if (d40c->base->lcla_pool.alloc_map[idx] == d40d) { in d40_lcla_free_all()
739 d40d->lcla_alloc--; in d40_lcla_free_all()
740 if (d40d->lcla_alloc == 0) { in d40_lcla_free_all()
753 static void d40_desc_remove(struct d40_desc *d40d) in d40_desc_remove() argument
755 list_del(&d40d->node); in d40_desc_remove()
785 static void d40_desc_free(struct d40_chan *d40c, struct d40_desc *d40d) in d40_desc_free() argument
788 d40_pool_lli_free(d40c, d40d); in d40_desc_free()
789 d40_lcla_free_all(d40c, d40d); in d40_desc_free()
790 kmem_cache_free(d40c->base->desc_slab, d40d); in d40_desc_free()
933 static void d40_desc_load(struct d40_chan *d40c, struct d40_desc *d40d) in d40_desc_load() argument
936 d40_phy_lli_load(d40c, d40d); in d40_desc_load()
937 d40d->lli_current = d40d->lli_len; in d40_desc_load()
939 d40_log_lli_to_lcxa(d40c, d40d); in d40_desc_load()
1129 struct d40_desc *d40d; in d40_term_all() local
1133 while ((d40d = d40_first_done(d40c))) { in d40_term_all()
1134 d40_desc_remove(d40d); in d40_term_all()
1135 d40_desc_free(d40c, d40d); in d40_term_all()
1139 while ((d40d = d40_first_active_get(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_queued(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_pending(d40c))) { in d40_term_all()
1152 d40_desc_remove(d40d); in d40_term_all()
1153 d40_desc_free(d40c, d40d); in d40_term_all()
1158 list_for_each_entry_safe(d40d, _d, &d40c->client, node) { in d40_term_all()
1159 d40_desc_remove(d40d); in d40_term_all()
1160 d40_desc_free(d40c, d40d); in d40_term_all()
1165 list_for_each_entry_safe(d40d, _d, in d40_term_all()
1167 d40_desc_remove(d40d); in d40_term_all()
1168 d40_desc_free(d40c, d40d); in d40_term_all()
1477 struct d40_desc *d40d = container_of(tx, struct d40_desc, txd); in d40_tx_submit() local
1483 d40_desc_queue(d40c, d40d); in d40_tx_submit()
1496 struct d40_desc *d40d; in d40_queue_start() local
1500 d40d = d40_first_queued(d40c); in d40_queue_start()
1502 if (d40d != NULL) { in d40_queue_start()
1509 d40_desc_remove(d40d); in d40_queue_start()
1512 d40_desc_submit(d40c, d40d); in d40_queue_start()
1515 d40_desc_load(d40c, d40d); in d40_queue_start()
1524 return d40d; in d40_queue_start()
1530 struct d40_desc *d40d; in dma_tc_handle() local
1533 d40d = d40_first_active_get(d40c); in dma_tc_handle()
1535 if (d40d == NULL) in dma_tc_handle()
1538 if (d40d->cyclic) { in dma_tc_handle()
1545 if (d40d->lli_current < d40d->lli_len in dma_tc_handle()
1548 d40_lcla_free_all(d40c, d40d); in dma_tc_handle()
1549 d40_desc_load(d40c, d40d); in dma_tc_handle()
1552 if (d40d->lli_current == d40d->lli_len) in dma_tc_handle()
1553 d40d->lli_current = 0; in dma_tc_handle()
1556 d40_lcla_free_all(d40c, d40d); in dma_tc_handle()
1558 if (d40d->lli_current < d40d->lli_len) { in dma_tc_handle()
1559 d40_desc_load(d40c, d40d); in dma_tc_handle()
1572 d40_desc_remove(d40d); in dma_tc_handle()
1573 d40_desc_done(d40c, d40d); in dma_tc_handle()
1584 struct d40_desc *d40d; in dma_tasklet() local
1593 d40d = d40_first_done(d40c); in dma_tasklet()
1594 if (d40d == NULL) { in dma_tasklet()
1596 d40d = d40_first_active_get(d40c); in dma_tasklet()
1597 if (d40d == NULL || !d40d->cyclic) in dma_tasklet()
1601 if (!d40d->cyclic) in dma_tasklet()
1602 dma_cookie_complete(&d40d->txd); in dma_tasklet()
1614 callback_active = !!(d40d->txd.flags & DMA_PREP_INTERRUPT); in dma_tasklet()
1615 callback = d40d->txd.callback; in dma_tasklet()
1616 callback_param = d40d->txd.callback_param; in dma_tasklet()
1618 if (!d40d->cyclic) { in dma_tasklet()
1619 if (async_tx_test_ack(&d40d->txd)) { in dma_tasklet()
1620 d40_desc_remove(d40d); in dma_tasklet()
1621 d40_desc_free(d40c, d40d); in dma_tasklet()
1622 } else if (!d40d->is_in_client_list) { in dma_tasklet()
1623 d40_desc_remove(d40d); in dma_tasklet()
1624 d40_lcla_free_all(d40c, d40d); in dma_tasklet()
1625 list_add_tail(&d40d->node, &d40c->client); in dma_tasklet()
1626 d40d->is_in_client_list = true; in dma_tasklet()