Lines Matching refs:region
695 struct knav_region *region; in kdesc_fill_pool() local
698 region = pool->region; in kdesc_fill_pool()
699 pool->desc_size = region->desc_size; in kdesc_fill_pool()
704 dma_addr = region->dma_start + (region->desc_size * index); in kdesc_fill_pool()
743 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
750 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
767 struct knav_region *reg_itr, *region = NULL; in knav_pool_create() local
789 region = reg_itr; in knav_pool_create()
793 if (!region) { in knav_pool_create()
814 if (num_desc > (region->num_desc - region->used_desc)) { in knav_pool_create()
827 node = ®ion->pools; in knav_pool_create()
828 list_for_each_entry(pi, ®ion->pools, region_inst) { in knav_pool_create()
838 pool->region = region; in knav_pool_create()
841 region->used_desc += num_desc; in knav_pool_create()
875 if (!pool->region) in knav_pool_destroy()
881 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
922 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
941 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
968 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
989 struct knav_region *region) in knav_queue_setup_region() argument
995 int id = region->id; in knav_queue_setup_region()
999 if (!region->num_desc) { in knav_queue_setup_region()
1000 dev_warn(kdev->dev, "unused region %s\n", region->name); in knav_queue_setup_region()
1005 hw_num_desc = ilog2(region->num_desc - 1) + 1; in knav_queue_setup_region()
1008 if (region->num_desc < 32) { in knav_queue_setup_region()
1009 region->num_desc = 0; in knav_queue_setup_region()
1011 region->name); in knav_queue_setup_region()
1015 size = region->num_desc * region->desc_size; in knav_queue_setup_region()
1016 region->virt_start = alloc_pages_exact(size, GFP_KERNEL | GFP_DMA | in knav_queue_setup_region()
1018 if (!region->virt_start) { in knav_queue_setup_region()
1019 region->num_desc = 0; in knav_queue_setup_region()
1021 region->name); in knav_queue_setup_region()
1024 region->virt_end = region->virt_start + size; in knav_queue_setup_region()
1025 page = virt_to_page(region->virt_start); in knav_queue_setup_region()
1027 region->dma_start = dma_map_page(kdev->dev, page, 0, size, in knav_queue_setup_region()
1029 if (dma_mapping_error(kdev->dev, region->dma_start)) { in knav_queue_setup_region()
1031 region->name); in knav_queue_setup_region()
1034 region->dma_end = region->dma_start + size; in knav_queue_setup_region()
1042 pool->region_offset = region->num_desc; in knav_queue_setup_region()
1043 list_add(&pool->region_inst, ®ion->pools); in knav_queue_setup_region()
1047 region->name, id, region->desc_size, region->num_desc, in knav_queue_setup_region()
1048 region->link_index, ®ion->dma_start, ®ion->dma_end, in knav_queue_setup_region()
1049 region->virt_start, region->virt_end); in knav_queue_setup_region()
1051 hw_desc_size = (region->desc_size / 16) - 1; in knav_queue_setup_region()
1056 writel_relaxed((u32)region->dma_start, ®s->base); in knav_queue_setup_region()
1057 writel_relaxed(region->link_index, ®s->start_index); in knav_queue_setup_region()
1064 if (region->dma_start) in knav_queue_setup_region()
1065 dma_unmap_page(kdev->dev, region->dma_start, size, in knav_queue_setup_region()
1067 if (region->virt_start) in knav_queue_setup_region()
1068 free_pages_exact(region->virt_start, size); in knav_queue_setup_region()
1069 region->num_desc = 0; in knav_queue_setup_region()
1088 struct knav_region *region; in knav_queue_setup_regions() local
1094 region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); in knav_queue_setup_regions()
1095 if (!region) { in knav_queue_setup_regions()
1100 region->name = knav_queue_find_name(child); in knav_queue_setup_regions()
1101 of_property_read_u32(child, "id", ®ion->id); in knav_queue_setup_regions()
1104 region->num_desc = temp[0]; in knav_queue_setup_regions()
1105 region->desc_size = temp[1]; in knav_queue_setup_regions()
1107 dev_err(dev, "invalid region info %s\n", region->name); in knav_queue_setup_regions()
1108 devm_kfree(dev, region); in knav_queue_setup_regions()
1113 dev_err(dev, "No link info for %s\n", region->name); in knav_queue_setup_regions()
1114 devm_kfree(dev, region); in knav_queue_setup_regions()
1118 ®ion->link_index); in knav_queue_setup_regions()
1121 region->name); in knav_queue_setup_regions()
1122 devm_kfree(dev, region); in knav_queue_setup_regions()
1126 INIT_LIST_HEAD(®ion->pools); in knav_queue_setup_regions()
1127 list_add_tail(®ion->list, &kdev->regions); in knav_queue_setup_regions()
1135 for_each_region(kdev, region) in knav_queue_setup_regions()
1136 knav_queue_setup_region(kdev, region); in knav_queue_setup_regions()
1357 struct knav_region *region; in knav_queue_free_regions() local
1362 region = first_region(kdev); in knav_queue_free_regions()
1363 if (!region) in knav_queue_free_regions()
1365 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1368 size = region->virt_end - region->virt_start; in knav_queue_free_regions()
1370 free_pages_exact(region->virt_start, size); in knav_queue_free_regions()
1371 list_del(®ion->list); in knav_queue_free_regions()
1372 devm_kfree(kdev->dev, region); in knav_queue_free_regions()