Lines Matching refs:pool
670 static void kdesc_fill_pool(struct knav_pool *pool) in kdesc_fill_pool() argument
675 region = pool->region; in kdesc_fill_pool()
676 pool->desc_size = region->desc_size; in kdesc_fill_pool()
677 for (i = 0; i < pool->num_desc; i++) { in kdesc_fill_pool()
678 int index = pool->region_offset + i; in kdesc_fill_pool()
682 dma_size = ALIGN(pool->desc_size, SMP_CACHE_BYTES); in kdesc_fill_pool()
683 dma_sync_single_for_device(pool->dev, dma_addr, dma_size, in kdesc_fill_pool()
685 knav_queue_push(pool->queue, dma_addr, dma_size, 0); in kdesc_fill_pool()
690 static void kdesc_empty_pool(struct knav_pool *pool) in kdesc_empty_pool() argument
697 if (!pool->queue) in kdesc_empty_pool()
701 dma = knav_queue_pop(pool->queue, &size); in kdesc_empty_pool()
704 desc = knav_pool_desc_dma_to_virt(pool, dma); in kdesc_empty_pool()
706 dev_dbg(pool->kdev->dev, in kdesc_empty_pool()
711 WARN_ON(i != pool->num_desc); in kdesc_empty_pool()
712 knav_queue_close(pool->queue); in kdesc_empty_pool()
719 struct knav_pool *pool = ph; in knav_pool_desc_virt_to_dma() local
720 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
726 struct knav_pool *pool = ph; in knav_pool_desc_dma_to_virt() local
727 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
745 struct knav_pool *pool, *pi; in knav_pool_create() local
754 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_pool_create()
755 if (!pool) { in knav_pool_create()
773 pool->queue = knav_queue_open(name, KNAV_QUEUE_GP, 0); in knav_pool_create()
774 if (IS_ERR_OR_NULL(pool->queue)) { in knav_pool_create()
777 name, PTR_ERR(pool->queue)); in knav_pool_create()
778 ret = PTR_ERR(pool->queue); in knav_pool_create()
782 pool->name = kstrndup(name, KNAV_NAME_SIZE, GFP_KERNEL); in knav_pool_create()
783 pool->kdev = kdev; in knav_pool_create()
784 pool->dev = kdev->dev; in knav_pool_create()
812 pool->region = region; in knav_pool_create()
813 pool->num_desc = num_desc; in knav_pool_create()
814 pool->region_offset = last_offset; in knav_pool_create()
816 list_add_tail(&pool->list, &kdev->pools); in knav_pool_create()
817 list_add_tail(&pool->region_inst, node); in knav_pool_create()
826 kdesc_fill_pool(pool); in knav_pool_create()
827 return pool; in knav_pool_create()
832 kfree(pool->name); in knav_pool_create()
833 devm_kfree(kdev->dev, pool); in knav_pool_create()
844 struct knav_pool *pool = ph; in knav_pool_destroy() local
846 if (!pool) in knav_pool_destroy()
849 if (!pool->region) in knav_pool_destroy()
852 kdesc_empty_pool(pool); in knav_pool_destroy()
855 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
856 list_del(&pool->region_inst); in knav_pool_destroy()
857 list_del(&pool->list); in knav_pool_destroy()
860 kfree(pool->name); in knav_pool_destroy()
861 devm_kfree(kdev->dev, pool); in knav_pool_destroy()
874 struct knav_pool *pool = ph; in knav_pool_desc_get() local
879 dma = knav_queue_pop(pool->queue, &size); in knav_pool_desc_get()
882 data = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_get()
893 struct knav_pool *pool = ph; in knav_pool_desc_put() local
895 dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_put()
896 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
913 struct knav_pool *pool = ph; in knav_pool_desc_map() local
914 *dma = knav_pool_desc_virt_to_dma(pool, desc); in knav_pool_desc_map()
915 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
918 dma_sync_single_for_device(pool->dev, *dma, size, DMA_TO_DEVICE); in knav_pool_desc_map()
938 struct knav_pool *pool = ph; in knav_pool_desc_unmap() local
942 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
943 desc = knav_pool_desc_dma_to_virt(pool, dma); in knav_pool_desc_unmap()
944 dma_sync_single_for_cpu(pool->dev, dma, desc_sz, DMA_FROM_DEVICE); in knav_pool_desc_unmap()
957 struct knav_pool *pool = ph; in knav_pool_count() local
958 return knav_queue_get_count(pool->queue); in knav_pool_count()
968 struct knav_pool *pool; in knav_queue_setup_region() local
1010 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); in knav_queue_setup_region()
1011 if (!pool) { in knav_queue_setup_region()
1015 pool->num_desc = 0; in knav_queue_setup_region()
1016 pool->region_offset = region->num_desc; in knav_queue_setup_region()
1017 list_add(&pool->region_inst, ®ion->pools); in knav_queue_setup_region()
1318 struct knav_pool *pool, *tmp; in knav_queue_free_regions() local
1325 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1326 knav_pool_destroy(pool); in knav_queue_free_regions()