Lines Matching defs:pool

100 	struct cpdma_desc_pool	*pool;
192 struct cpdma_desc_pool *pool = ctlr->pool;
194 if (!pool)
197 WARN(gen_pool_size(pool->gen_pool) != gen_pool_avail(pool->gen_pool),
199 gen_pool_size(pool->gen_pool),
200 gen_pool_avail(pool->gen_pool));
201 if (pool->cpumap)
202 dma_free_coherent(ctlr->dev, pool->mem_size, pool->cpumap,
203 pool->phys);
207 * Utility constructs for a cpdma descriptor pool. Some devices (e.g. davinci
215 struct cpdma_desc_pool *pool;
218 pool = devm_kzalloc(ctlr->dev, sizeof(*pool), GFP_KERNEL);
219 if (!pool)
221 ctlr->pool = pool;
223 pool->mem_size = cpdma_params->desc_mem_size;
224 pool->desc_size = ALIGN(sizeof(struct cpdma_desc),
226 pool->num_desc = pool->mem_size / pool->desc_size;
229 /* recalculate memory size required cpdma descriptor pool
234 pool->num_desc = cpdma_params->descs_pool_size;
235 pool->mem_size = pool->desc_size * pool->num_desc;
236 if (pool->mem_size > cpdma_params->desc_mem_size)
240 pool->gen_pool = devm_gen_pool_create(ctlr->dev, ilog2(pool->desc_size),
242 if (IS_ERR(pool->gen_pool)) {
243 ret = PTR_ERR(pool->gen_pool);
244 dev_err(ctlr->dev, "pool create failed %d\n", ret);
249 pool->phys = cpdma_params->desc_mem_phys;
250 pool->iomap = devm_ioremap(ctlr->dev, pool->phys,
251 pool->mem_size);
252 pool->hw_addr = cpdma_params->desc_hw_addr;
254 pool->cpumap = dma_alloc_coherent(ctlr->dev, pool->mem_size,
255 &pool->hw_addr, GFP_KERNEL);
256 pool->iomap = (void __iomem __force *)pool->cpumap;
257 pool->phys = pool->hw_addr; /* assumes no IOMMU, don't use this value */
260 if (!pool->iomap)
263 ret = gen_pool_add_virt(pool->gen_pool, (unsigned long)pool->iomap,
264 pool->phys, pool->mem_size, -1);
266 dev_err(ctlr->dev, "pool add failed %d\n", ret);
275 ctlr->pool = NULL;
279 static inline dma_addr_t desc_phys(struct cpdma_desc_pool *pool,
284 return pool->hw_addr + (__force long)desc - (__force long)pool->iomap;
288 desc_from_phys(struct cpdma_desc_pool *pool, dma_addr_t dma)
290 return dma ? pool->iomap + dma - pool->hw_addr : NULL;
294 cpdma_desc_alloc(struct cpdma_desc_pool *pool)
297 gen_pool_alloc(pool->gen_pool, pool->desc_size);
300 static void cpdma_desc_free(struct cpdma_desc_pool *pool,
303 gen_pool_free(pool->gen_pool, (unsigned long)desc, pool->desc_size);
378 struct cpdma_desc_pool *pool = ctlr->pool;
393 chan_write(chan, hdp, desc_phys(pool, chan->head));
526 /* split pool equally between RX/TX by default */
527 ctlr->num_tx_desc = ctlr->pool->num_desc / 2;
528 ctlr->num_rx_desc = ctlr->pool->num_desc - ctlr->num_tx_desc;
722 * cpdma_chan_split_pool - Splits ctrl pool between all channels.
800 /* re-split pool using new channel weight */
985 struct cpdma_desc_pool *pool = ctlr->pool;
989 desc_dma = desc_phys(pool, desc);
1031 desc = cpdma_desc_alloc(ctlr->pool);
1052 cpdma_desc_free(ctlr->pool, desc, 1);
1182 struct cpdma_desc_pool *pool = ctlr->pool;
1188 gen_pool_avail(pool->gen_pool);
1198 struct cpdma_desc_pool *pool = ctlr->pool;
1215 cpdma_desc_free(pool, desc, 1);
1225 struct cpdma_desc_pool *pool = ctlr->pool;
1237 desc_dma = desc_phys(pool, desc);
1253 chan->head = desc_from_phys(pool, desc_read(desc, hw_next));
1260 chan_write(chan, hdp, desc_phys(pool, chan->head));
1315 struct cpdma_desc_pool *pool = ctlr->pool;
1359 chan->head = desc_from_phys(pool, next_dma);
1434 ctlr->num_tx_desc = ctlr->pool->num_desc - ctlr->num_rx_desc;
1438 ctlr->num_tx_desc = ctlr->pool->num_desc - ctlr->num_rx_desc;