Lines Matching refs:pool
267 static rt_ubase_t dma_pool_alloc(struct rt_dma_pool *pool, rt_size_t size) in dma_pool_alloc() argument
272 max_bits = pool->bits - size; in dma_pool_alloc()
274 rt_bitmap_for_each_clear_bit(pool->map, bit, max_bits) in dma_pool_alloc()
280 if (rt_bitmap_test_bit(pool->map, next_bit)) in dma_pool_alloc()
291 rt_bitmap_set_bit(pool->map, next_bit); in dma_pool_alloc()
294 return pool->start + bit * ARCH_PAGE_SIZE; in dma_pool_alloc()
302 static void dma_pool_free(struct rt_dma_pool *pool, rt_ubase_t offset, rt_size_t size) in dma_pool_free() argument
304 rt_size_t bit = (offset - pool->start) / ARCH_PAGE_SIZE, end_bit; in dma_pool_free()
311 rt_bitmap_clear_bit(pool->map, bit); in dma_pool_free()
319 struct rt_dma_pool *pool; in dma_alloc() local
323 rt_list_for_each_entry(pool, &dma_pool_nodes, list) in dma_alloc()
325 if (pool->flags & RT_DMA_F_DEVICE) in dma_alloc()
327 if (!(flags & RT_DMA_F_DEVICE) || pool->dev != dev) in dma_alloc()
337 if ((flags & RT_DMA_F_NOMAP) && !((pool->flags & RT_DMA_F_NOMAP))) in dma_alloc()
342 if ((flags & RT_DMA_F_32BITS) && !((pool->flags & RT_DMA_F_32BITS))) in dma_alloc()
347 if ((flags & RT_DMA_F_LINEAR) && !((pool->flags & RT_DMA_F_LINEAR))) in dma_alloc()
352 *dma_handle = dma_pool_alloc(pool, size); in dma_alloc()
367 dma_pool_free(pool, *dma_handle, size); in dma_alloc()
390 struct rt_dma_pool *pool; in dma_free() local
394 rt_list_for_each_entry(pool, &dma_pool_nodes, list) in dma_free()
396 if (dma_handle >= pool->region.start && in dma_free()
397 dma_handle <= pool->region.end) in dma_free()
401 dma_pool_free(pool, dma_handle, size); in dma_free()
511 struct rt_dma_pool *pool; in dma_pool_install() local
513 if (!(pool = rt_calloc(1, sizeof(*pool)))) in dma_pool_install()
521 rt_memcpy(&pool->region, region, sizeof(*region)); in dma_pool_install()
523 pool->flags |= RT_DMA_F_LINEAR; in dma_pool_install()
527 pool->flags |= RT_DMA_F_32BITS; in dma_pool_install()
530 pool->start = RT_ALIGN(pool->region.start, ARCH_PAGE_SIZE); in dma_pool_install()
531 pool->bits = (pool->region.end - pool->start) / ARCH_PAGE_SIZE; in dma_pool_install()
533 if (!pool->bits) in dma_pool_install()
539 pool->map = rt_calloc(RT_BITMAP_LEN(pool->bits), sizeof(*pool->map)); in dma_pool_install()
541 if (!pool->map) in dma_pool_install()
547 rt_list_init(&pool->list); in dma_pool_install()
550 rt_list_insert_before(&dma_pool_nodes, &pool->list); in dma_pool_install()
553 return pool; in dma_pool_install()
556 rt_free(pool); in dma_pool_install()
566 struct rt_dma_pool *pool; in rt_dma_pool_install() local
573 if ((pool = dma_pool_install(region))) in rt_dma_pool_install()
575 region = &pool->region; in rt_dma_pool_install()
584 return pool; in rt_dma_pool_install()
590 struct rt_dma_pool *pool; in rt_dma_pool_extract() local
649 if (!(pool = rt_dma_pool_install(&coherent_pool))) in rt_dma_pool_extract()
655 if (!(pool = rt_dma_pool_install(&cma))) in rt_dma_pool_extract()
668 struct rt_dma_pool *pool; in list_dma_pool() local
674 rt_list_for_each_entry(pool, &dma_pool_nodes, list) in list_dma_pool()
676 region = &pool->region; in list_dma_pool()
690 MSH_CMD_EXPORT(list_dma_pool, dump all dma memory pool);