Lines Matching refs:region
672 struct knav_region *region; in kdesc_fill_pool() local
675 region = pool->region; in kdesc_fill_pool()
676 pool->desc_size = region->desc_size; in kdesc_fill_pool()
681 dma_addr = region->dma_start + (region->desc_size * index); in kdesc_fill_pool()
720 return pool->region->dma_start + (virt - pool->region->virt_start); in knav_pool_desc_virt_to_dma()
727 return pool->region->virt_start + (dma - pool->region->dma_start); in knav_pool_desc_dma_to_virt()
744 struct knav_region *reg_itr, *region = NULL; in knav_pool_create() local
763 region = reg_itr; in knav_pool_create()
767 if (!region) { in knav_pool_create()
788 if (num_desc > (region->num_desc - region->used_desc)) { in knav_pool_create()
801 node = ®ion->pools; in knav_pool_create()
802 list_for_each_entry(pi, ®ion->pools, region_inst) { in knav_pool_create()
812 pool->region = region; in knav_pool_create()
815 region->used_desc += num_desc; in knav_pool_create()
849 if (!pool->region) in knav_pool_destroy()
855 pool->region->used_desc -= pool->num_desc; in knav_pool_destroy()
896 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); in knav_pool_desc_put()
915 size = min(size, pool->region->desc_size); in knav_pool_desc_map()
942 desc_sz = min(dma_sz, pool->region->desc_size); in knav_pool_desc_unmap()
963 struct knav_region *region) in knav_queue_setup_region() argument
969 int id = region->id; in knav_queue_setup_region()
973 if (!region->num_desc) { in knav_queue_setup_region()
974 dev_warn(kdev->dev, "unused region %s\n", region->name); in knav_queue_setup_region()
979 hw_num_desc = ilog2(region->num_desc - 1) + 1; in knav_queue_setup_region()
982 if (region->num_desc < 32) { in knav_queue_setup_region()
983 region->num_desc = 0; in knav_queue_setup_region()
985 region->name); in knav_queue_setup_region()
989 size = region->num_desc * region->desc_size; in knav_queue_setup_region()
990 region->virt_start = alloc_pages_exact(size, GFP_KERNEL | GFP_DMA | in knav_queue_setup_region()
992 if (!region->virt_start) { in knav_queue_setup_region()
993 region->num_desc = 0; in knav_queue_setup_region()
995 region->name); in knav_queue_setup_region()
998 region->virt_end = region->virt_start + size; in knav_queue_setup_region()
999 page = virt_to_page(region->virt_start); in knav_queue_setup_region()
1001 region->dma_start = dma_map_page(kdev->dev, page, 0, size, in knav_queue_setup_region()
1003 if (dma_mapping_error(kdev->dev, region->dma_start)) { in knav_queue_setup_region()
1005 region->name); in knav_queue_setup_region()
1008 region->dma_end = region->dma_start + size; 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()
1021 region->name, id, region->desc_size, region->num_desc, in knav_queue_setup_region()
1022 region->link_index, region->dma_start, region->dma_end, in knav_queue_setup_region()
1023 region->virt_start, region->virt_end); in knav_queue_setup_region()
1025 hw_desc_size = (region->desc_size / 16) - 1; in knav_queue_setup_region()
1030 writel_relaxed(region->dma_start, ®s->base); in knav_queue_setup_region()
1031 writel_relaxed(region->link_index, ®s->start_index); in knav_queue_setup_region()
1038 if (region->dma_start) in knav_queue_setup_region()
1039 dma_unmap_page(kdev->dev, region->dma_start, size, in knav_queue_setup_region()
1041 if (region->virt_start) in knav_queue_setup_region()
1042 free_pages_exact(region->virt_start, size); in knav_queue_setup_region()
1043 region->num_desc = 0; in knav_queue_setup_region()
1062 struct knav_region *region; in knav_queue_setup_regions() local
1068 region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); in knav_queue_setup_regions()
1069 if (!region) { in knav_queue_setup_regions()
1074 region->name = knav_queue_find_name(child); in knav_queue_setup_regions()
1075 of_property_read_u32(child, "id", ®ion->id); in knav_queue_setup_regions()
1078 region->num_desc = temp[0]; in knav_queue_setup_regions()
1079 region->desc_size = temp[1]; in knav_queue_setup_regions()
1081 dev_err(dev, "invalid region info %s\n", region->name); in knav_queue_setup_regions()
1082 devm_kfree(dev, region); in knav_queue_setup_regions()
1087 dev_err(dev, "No link info for %s\n", region->name); in knav_queue_setup_regions()
1088 devm_kfree(dev, region); in knav_queue_setup_regions()
1092 ®ion->link_index); in knav_queue_setup_regions()
1095 region->name); in knav_queue_setup_regions()
1096 devm_kfree(dev, region); in knav_queue_setup_regions()
1100 INIT_LIST_HEAD(®ion->pools); in knav_queue_setup_regions()
1101 list_add_tail(®ion->list, &kdev->regions); in knav_queue_setup_regions()
1109 for_each_region(kdev, region) in knav_queue_setup_regions()
1110 knav_queue_setup_region(kdev, region); in knav_queue_setup_regions()
1317 struct knav_region *region; in knav_queue_free_regions() local
1322 region = first_region(kdev); in knav_queue_free_regions()
1323 if (!region) in knav_queue_free_regions()
1325 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) in knav_queue_free_regions()
1328 size = region->virt_end - region->virt_start; in knav_queue_free_regions()
1330 free_pages_exact(region->virt_start, size); in knav_queue_free_regions()
1331 list_del(®ion->list); in knav_queue_free_regions()
1332 devm_kfree(kdev->dev, region); in knav_queue_free_regions()