Lines Matching refs:pool
665 static void kdesc_fill_pool(struct knav_pool *pool) in kdesc_fill_pool() argument
670 region = pool->region; in kdesc_fill_pool()
671 pool->desc_size = region->desc_size; in kdesc_fill_pool()
672 for (i = 0; i < pool->num_desc; i++) { in kdesc_fill_pool()
673 int index = pool->region_offset + i; in kdesc_fill_pool()
677 dma_size = ALIGN(pool->desc_size, SMP_CACHE_BYTES); in kdesc_fill_pool()
678 dma_sync_single_for_device(pool->dev, dma_addr, dma_size, in kdesc_fill_pool()
680 knav_queue_push(pool->queue, dma_addr, dma_size, 0); in kdesc_fill_pool()
685 static void kdesc_empty_pool(struct knav_pool *pool) in kdesc_empty_pool() argument
692 if (!pool->queue) in kdesc_empty_pool()
696 dma = knav_queue_pop(pool->queue, &size); in kdesc_empty_pool()
699 desc = knav_pool_desc_dma_to_virt(pool, dma); in kdesc_empty_pool()
701 dev_dbg(pool->kdev->dev, in kdesc_empty_pool()
706 WARN_ON(i != pool->num_desc); in kdesc_empty_pool()
707 knav_queue_close(pool->queue); in kdesc_empty_pool()
714 struct knav_pool *pool = ph; in knav_pool_desc_virt_to_dma() local
715 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
721 struct knav_pool *pool = ph; in knav_pool_desc_dma_to_virt() local
722 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
740 struct knav_pool *pool, *pi; in knav_pool_create() local
752 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_pool_create()
753 if (!pool) { in knav_pool_create()
771 pool->queue = knav_queue_open(name, KNAV_QUEUE_GP, 0); in knav_pool_create()
772 if (IS_ERR_OR_NULL(pool->queue)) { in knav_pool_create()
775 name, PTR_ERR(pool->queue)); in knav_pool_create()
776 ret = PTR_ERR(pool->queue); in knav_pool_create()
780 pool->name = kstrndup(name, KNAV_NAME_SIZE, GFP_KERNEL); in knav_pool_create()
781 pool->kdev = kdev; in knav_pool_create()
782 pool->dev = kdev->dev; in knav_pool_create()
810 pool->region = region; in knav_pool_create()
811 pool->num_desc = num_desc; in knav_pool_create()
812 pool->region_offset = last_offset; in knav_pool_create()
814 list_add_tail(&pool->list, &kdev->pools); in knav_pool_create()
815 list_add_tail(&pool->region_inst, node); in knav_pool_create()
824 kdesc_fill_pool(pool); in knav_pool_create()
825 return pool; in knav_pool_create()
830 kfree(pool->name); in knav_pool_create()
831 devm_kfree(kdev->dev, pool); in knav_pool_create()
842 struct knav_pool *pool = ph; in knav_pool_destroy() local
844 if (!pool) in knav_pool_destroy()
847 if (!pool->region) in knav_pool_destroy()
850 kdesc_empty_pool(pool); in knav_pool_destroy()
853 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
854 list_del(&pool->region_inst); in knav_pool_destroy()
855 list_del(&pool->list); in knav_pool_destroy()
858 kfree(pool->name); in knav_pool_destroy()
859 devm_kfree(kdev->dev, pool); in knav_pool_destroy()
872 struct knav_pool *pool = ph; in knav_pool_desc_get() local
877 dma = knav_queue_pop(pool->queue, &size); in knav_pool_desc_get()
880 data = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_get()
891 struct knav_pool *pool = ph; in knav_pool_desc_put() local
893 dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_put()
894 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
911 struct knav_pool *pool = ph; in knav_pool_desc_map() local
912 *dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_map()
913 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
916 dma_sync_single_for_device(pool->dev, *dma, size, DMA_TO_DEVICE); in knav_pool_desc_map()
936 struct knav_pool *pool = ph; in knav_pool_desc_unmap() local
940 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
941 desc = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_unmap()
942 dma_sync_single_for_cpu(pool->dev, dma, desc_sz, DMA_FROM_DEVICE); in knav_pool_desc_unmap()
955 struct knav_pool *pool = ph; in knav_pool_count() local
956 return knav_queue_get_count(pool->queue); in knav_pool_count()
966 struct knav_pool *pool; in knav_queue_setup_region() local
1008 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_queue_setup_region()
1009 if (!pool) { in knav_queue_setup_region()
1013 pool->num_desc = 0; in knav_queue_setup_region()
1014 pool->region_offset = region->num_desc; in knav_queue_setup_region()
1015 list_add(&pool->region_inst, ®ion->pools); in knav_queue_setup_region()
1326 struct knav_pool *pool, *tmp; in knav_queue_free_regions() local
1333 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1334 knav_pool_destroy(pool); in knav_queue_free_regions()