Lines Matching refs:region
678 struct knav_region *region; in kdesc_fill_pool() local
681 region = pool->region; in kdesc_fill_pool()
682 pool->desc_size = region->desc_size; in kdesc_fill_pool()
687 dma_addr = region->dma_start + (region->desc_size * index); in kdesc_fill_pool()
726 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
733 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
750 struct knav_region *reg_itr, *region = NULL; in knav_pool_create() local
769 region = reg_itr; in knav_pool_create()
773 if (!region) { in knav_pool_create()
794 if (num_desc > (region->num_desc - region->used_desc)) { in knav_pool_create()
807 node = ®ion->pools; in knav_pool_create()
808 list_for_each_entry(pi, ®ion->pools, region_inst) { in knav_pool_create()
818 pool->region = region; in knav_pool_create()
821 region->used_desc += num_desc; in knav_pool_create()
855 if (!pool->region) in knav_pool_destroy()
861 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
902 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
921 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
948 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
969 struct knav_region *region) in knav_queue_setup_region() argument
975 int id = region->id; in knav_queue_setup_region()
979 if (!region->num_desc) { in knav_queue_setup_region()
980 dev_warn(kdev->dev, "unused region %s\n", region->name); in knav_queue_setup_region()
985 hw_num_desc = ilog2(region->num_desc - 1) + 1; in knav_queue_setup_region()
988 if (region->num_desc < 32) { in knav_queue_setup_region()
989 region->num_desc = 0; in knav_queue_setup_region()
991 region->name); in knav_queue_setup_region()
995 size = region->num_desc * region->desc_size; in knav_queue_setup_region()
996 region->virt_start = alloc_pages_exact(size, GFP_KERNEL | GFP_DMA | in knav_queue_setup_region()
998 if (!region->virt_start) { in knav_queue_setup_region()
999 region->num_desc = 0; in knav_queue_setup_region()
1001 region->name); in knav_queue_setup_region()
1004 region->virt_end = region->virt_start + size; in knav_queue_setup_region()
1005 page = virt_to_page(region->virt_start); in knav_queue_setup_region()
1007 region->dma_start = dma_map_page(kdev->dev, page, 0, size, in knav_queue_setup_region()
1009 if (dma_mapping_error(kdev->dev, region->dma_start)) { in knav_queue_setup_region()
1011 region->name); in knav_queue_setup_region()
1014 region->dma_end = region->dma_start + size; 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()
1027 region->name, id, region->desc_size, region->num_desc, in knav_queue_setup_region()
1028 region->link_index, region->dma_start, region->dma_end, in knav_queue_setup_region()
1029 region->virt_start, region->virt_end); in knav_queue_setup_region()
1031 hw_desc_size = (region->desc_size / 16) - 1; in knav_queue_setup_region()
1036 writel_relaxed(region->dma_start, ®s->base); in knav_queue_setup_region()
1037 writel_relaxed(region->link_index, ®s->start_index); in knav_queue_setup_region()
1044 if (region->dma_start) in knav_queue_setup_region()
1045 dma_unmap_page(kdev->dev, region->dma_start, size, in knav_queue_setup_region()
1047 if (region->virt_start) in knav_queue_setup_region()
1048 free_pages_exact(region->virt_start, size); in knav_queue_setup_region()
1049 region->num_desc = 0; in knav_queue_setup_region()
1068 struct knav_region *region; in knav_queue_setup_regions() local
1074 region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); in knav_queue_setup_regions()
1075 if (!region) { in knav_queue_setup_regions()
1080 region->name = knav_queue_find_name(child); in knav_queue_setup_regions()
1081 of_property_read_u32(child, "id", ®ion->id); in knav_queue_setup_regions()
1084 region->num_desc = temp[0]; in knav_queue_setup_regions()
1085 region->desc_size = temp[1]; in knav_queue_setup_regions()
1087 dev_err(dev, "invalid region info %s\n", region->name); in knav_queue_setup_regions()
1088 devm_kfree(dev, region); in knav_queue_setup_regions()
1093 dev_err(dev, "No link info for %s\n", region->name); in knav_queue_setup_regions()
1094 devm_kfree(dev, region); in knav_queue_setup_regions()
1098 ®ion->link_index); in knav_queue_setup_regions()
1101 region->name); in knav_queue_setup_regions()
1102 devm_kfree(dev, region); in knav_queue_setup_regions()
1106 INIT_LIST_HEAD(®ion->pools); in knav_queue_setup_regions()
1107 list_add_tail(®ion->list, &kdev->regions); in knav_queue_setup_regions()
1115 for_each_region(kdev, region) in knav_queue_setup_regions()
1116 knav_queue_setup_region(kdev, region); in knav_queue_setup_regions()
1323 struct knav_region *region; in knav_queue_free_regions() local
1328 region = first_region(kdev); in knav_queue_free_regions()
1329 if (!region) in knav_queue_free_regions()
1331 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1334 size = region->virt_end - region->virt_start; in knav_queue_free_regions()
1336 free_pages_exact(region->virt_start, size); in knav_queue_free_regions()
1337 list_del(®ion->list); in knav_queue_free_regions()
1338 devm_kfree(kdev->dev, region); in knav_queue_free_regions()