Lines Matching refs:pool
107 struct cpdma_desc_pool *pool; member
188 struct cpdma_desc_pool *pool = ctlr->pool; in cpdma_desc_pool_destroy() local
190 if (!pool) in cpdma_desc_pool_destroy()
193 WARN(gen_pool_size(pool->gen_pool) != gen_pool_avail(pool->gen_pool), in cpdma_desc_pool_destroy()
195 gen_pool_size(pool->gen_pool), in cpdma_desc_pool_destroy()
196 gen_pool_avail(pool->gen_pool)); in cpdma_desc_pool_destroy()
197 if (pool->cpumap) in cpdma_desc_pool_destroy()
198 dma_free_coherent(ctlr->dev, pool->mem_size, pool->cpumap, in cpdma_desc_pool_destroy()
199 pool->phys); in cpdma_desc_pool_destroy()
211 struct cpdma_desc_pool *pool; in cpdma_desc_pool_create() local
214 pool = devm_kzalloc(ctlr->dev, sizeof(*pool), GFP_KERNEL); in cpdma_desc_pool_create()
215 if (!pool) in cpdma_desc_pool_create()
217 ctlr->pool = pool; in cpdma_desc_pool_create()
219 pool->mem_size = cpdma_params->desc_mem_size; in cpdma_desc_pool_create()
220 pool->desc_size = ALIGN(sizeof(struct cpdma_desc), in cpdma_desc_pool_create()
222 pool->num_desc = pool->mem_size / pool->desc_size; in cpdma_desc_pool_create()
230 pool->num_desc = cpdma_params->descs_pool_size; in cpdma_desc_pool_create()
231 pool->mem_size = pool->desc_size * pool->num_desc; in cpdma_desc_pool_create()
232 if (pool->mem_size > cpdma_params->desc_mem_size) in cpdma_desc_pool_create()
236 pool->gen_pool = devm_gen_pool_create(ctlr->dev, ilog2(pool->desc_size), in cpdma_desc_pool_create()
238 if (IS_ERR(pool->gen_pool)) { in cpdma_desc_pool_create()
239 ret = PTR_ERR(pool->gen_pool); in cpdma_desc_pool_create()
245 pool->phys = cpdma_params->desc_mem_phys; in cpdma_desc_pool_create()
246 pool->iomap = devm_ioremap(ctlr->dev, pool->phys, in cpdma_desc_pool_create()
247 pool->mem_size); in cpdma_desc_pool_create()
248 pool->hw_addr = cpdma_params->desc_hw_addr; in cpdma_desc_pool_create()
250 pool->cpumap = dma_alloc_coherent(ctlr->dev, pool->mem_size, in cpdma_desc_pool_create()
251 &pool->hw_addr, GFP_KERNEL); in cpdma_desc_pool_create()
252 pool->iomap = (void __iomem __force *)pool->cpumap; in cpdma_desc_pool_create()
253 pool->phys = pool->hw_addr; /* assumes no IOMMU, don't use this value */ in cpdma_desc_pool_create()
256 if (!pool->iomap) in cpdma_desc_pool_create()
259 ret = gen_pool_add_virt(pool->gen_pool, (unsigned long)pool->iomap, in cpdma_desc_pool_create()
260 pool->phys, pool->mem_size, -1); in cpdma_desc_pool_create()
271 ctlr->pool = NULL; in cpdma_desc_pool_create()
275 static inline dma_addr_t desc_phys(struct cpdma_desc_pool *pool, in desc_phys() argument
280 return pool->hw_addr + (__force long)desc - (__force long)pool->iomap; in desc_phys()
284 desc_from_phys(struct cpdma_desc_pool *pool, dma_addr_t dma) in desc_from_phys() argument
286 return dma ? pool->iomap + dma - pool->hw_addr : NULL; in desc_from_phys()
290 cpdma_desc_alloc(struct cpdma_desc_pool *pool) in cpdma_desc_alloc() argument
293 gen_pool_alloc(pool->gen_pool, pool->desc_size); in cpdma_desc_alloc()
296 static void cpdma_desc_free(struct cpdma_desc_pool *pool, in cpdma_desc_free() argument
299 gen_pool_free(pool->gen_pool, (unsigned long)desc, pool->desc_size); in cpdma_desc_free()
374 struct cpdma_desc_pool *pool = ctlr->pool; in cpdma_chan_on() local
389 chan_write(chan, hdp, desc_phys(pool, chan->head)); in cpdma_chan_on()
524 ctlr->num_tx_desc = ctlr->pool->num_desc / 2; in cpdma_ctlr_create()
525 ctlr->num_rx_desc = ctlr->pool->num_desc - ctlr->num_tx_desc; in cpdma_ctlr_create()
999 struct cpdma_desc_pool *pool = ctlr->pool; in __cpdma_chan_submit() local
1003 desc_dma = desc_phys(pool, desc); in __cpdma_chan_submit()
1053 desc = cpdma_desc_alloc(ctlr->pool); in cpdma_chan_submit()
1068 cpdma_desc_free(ctlr->pool, desc, 1); in cpdma_chan_submit()
1104 struct cpdma_desc_pool *pool = ctlr->pool; in cpdma_check_free_tx_desc() local
1110 gen_pool_avail(pool->gen_pool); in cpdma_check_free_tx_desc()
1121 struct cpdma_desc_pool *pool = ctlr->pool; in __cpdma_chan_free() local
1131 cpdma_desc_free(pool, desc, 1); in __cpdma_chan_free()
1141 struct cpdma_desc_pool *pool = ctlr->pool; in __cpdma_chan_process() local
1153 desc_dma = desc_phys(pool, desc); in __cpdma_chan_process()
1169 chan->head = desc_from_phys(pool, desc_read(desc, hw_next)); in __cpdma_chan_process()
1176 chan_write(chan, hdp, desc_phys(pool, chan->head)); in __cpdma_chan_process()
1233 struct cpdma_desc_pool *pool = ctlr->pool; in cpdma_chan_stop() local
1277 chan->head = desc_from_phys(pool, next_dma); in cpdma_chan_stop()
1350 ctlr->num_tx_desc = ctlr->pool->num_desc - ctlr->num_rx_desc; in cpdma_set_num_rx_descs()