Lines Matching refs:pool
676 static void kdesc_fill_pool(struct knav_pool *pool) in kdesc_fill_pool() argument
681 region = pool->region; in kdesc_fill_pool()
682 pool->desc_size = region->desc_size; in kdesc_fill_pool()
683 for (i = 0; i < pool->num_desc; i++) { in kdesc_fill_pool()
684 int index = pool->region_offset + i; in kdesc_fill_pool()
688 dma_size = ALIGN(pool->desc_size, SMP_CACHE_BYTES); in kdesc_fill_pool()
689 dma_sync_single_for_device(pool->dev, dma_addr, dma_size, in kdesc_fill_pool()
691 knav_queue_push(pool->queue, dma_addr, dma_size, 0); in kdesc_fill_pool()
696 static void kdesc_empty_pool(struct knav_pool *pool) in kdesc_empty_pool() argument
703 if (!pool->queue) in kdesc_empty_pool()
707 dma = knav_queue_pop(pool->queue, &size); in kdesc_empty_pool()
710 desc = knav_pool_desc_dma_to_virt(pool, dma); in kdesc_empty_pool()
712 dev_dbg(pool->kdev->dev, in kdesc_empty_pool()
717 WARN_ON(i != pool->num_desc); in kdesc_empty_pool()
718 knav_queue_close(pool->queue); in kdesc_empty_pool()
725 struct knav_pool *pool = ph; in knav_pool_desc_virt_to_dma() local
726 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
732 struct knav_pool *pool = ph; in knav_pool_desc_dma_to_virt() local
733 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
751 struct knav_pool *pool, *pi; in knav_pool_create() local
760 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_pool_create()
761 if (!pool) { in knav_pool_create()
779 pool->queue = knav_queue_open(name, KNAV_QUEUE_GP, 0); in knav_pool_create()
780 if (IS_ERR_OR_NULL(pool->queue)) { in knav_pool_create()
783 name, PTR_ERR(pool->queue)); in knav_pool_create()
784 ret = PTR_ERR(pool->queue); in knav_pool_create()
788 pool->name = kstrndup(name, KNAV_NAME_SIZE, GFP_KERNEL); in knav_pool_create()
789 pool->kdev = kdev; in knav_pool_create()
790 pool->dev = kdev->dev; in knav_pool_create()
818 pool->region = region; in knav_pool_create()
819 pool->num_desc = num_desc; in knav_pool_create()
820 pool->region_offset = last_offset; in knav_pool_create()
822 list_add_tail(&pool->list, &kdev->pools); in knav_pool_create()
823 list_add_tail(&pool->region_inst, node); in knav_pool_create()
832 kdesc_fill_pool(pool); in knav_pool_create()
833 return pool; in knav_pool_create()
838 kfree(pool->name); in knav_pool_create()
839 devm_kfree(kdev->dev, pool); in knav_pool_create()
850 struct knav_pool *pool = ph; in knav_pool_destroy() local
852 if (!pool) in knav_pool_destroy()
855 if (!pool->region) in knav_pool_destroy()
858 kdesc_empty_pool(pool); in knav_pool_destroy()
861 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
862 list_del(&pool->region_inst); in knav_pool_destroy()
863 list_del(&pool->list); in knav_pool_destroy()
866 kfree(pool->name); in knav_pool_destroy()
867 devm_kfree(kdev->dev, pool); in knav_pool_destroy()
880 struct knav_pool *pool = ph; in knav_pool_desc_get() local
885 dma = knav_queue_pop(pool->queue, &size); in knav_pool_desc_get()
888 data = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_get()
899 struct knav_pool *pool = ph; in knav_pool_desc_put() local
901 dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_put()
902 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
919 struct knav_pool *pool = ph; in knav_pool_desc_map() local
920 *dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_map()
921 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
924 dma_sync_single_for_device(pool->dev, *dma, size, DMA_TO_DEVICE); in knav_pool_desc_map()
944 struct knav_pool *pool = ph; in knav_pool_desc_unmap() local
948 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
949 desc = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_unmap()
950 dma_sync_single_for_cpu(pool->dev, dma, desc_sz, DMA_FROM_DEVICE); in knav_pool_desc_unmap()
963 struct knav_pool *pool = ph; in knav_pool_count() local
964 return knav_queue_get_count(pool->queue); in knav_pool_count()
974 struct knav_pool *pool; in knav_queue_setup_region() local
1016 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_queue_setup_region()
1017 if (!pool) { in knav_queue_setup_region()
1021 pool->num_desc = 0; in knav_queue_setup_region()
1022 pool->region_offset = region->num_desc; in knav_queue_setup_region()
1023 list_add(&pool->region_inst, ®ion->pools); in knav_queue_setup_region()
1324 struct knav_pool *pool, *tmp; in knav_queue_free_regions() local
1331 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1332 knav_pool_destroy(pool); in knav_queue_free_regions()