Lines Matching refs:txn
208 /* simple allocator to grab next 16 byte aligned memory from txn */
209 static void *alloc_dma(struct dmm_txn *txn, size_t sz, dma_addr_t *pa)
212 struct refill_engine *engine = txn->engine_handle;
215 txn->current_pa = round_up(txn->current_pa, 16);
216 txn->current_va = (void *)round_up((long)txn->current_va, 16);
218 ptr = txn->current_va;
219 *pa = txn->current_pa;
221 txn->current_pa += sz;
222 txn->current_va += sz;
224 BUG_ON((txn->current_va - engine->refill_va) > REFILL_BUFFER_SIZE);
307 struct dmm_txn *txn = NULL;
330 txn = &engine->txn;
332 txn->engine_handle = engine;
333 txn->last_pat = NULL;
334 txn->current_va = engine->refill_va;
335 txn->current_pa = engine->refill_pa;
337 return txn;
344 static void dmm_txn_append(struct dmm_txn *txn, struct pat_area *area,
350 struct refill_engine *engine = txn->engine_handle;
355 pat = alloc_dma(txn, sizeof(*pat), &pat_pa);
357 if (txn->last_pat)
358 txn->last_pat->next_pa = (u32)pat_pa;
371 data = alloc_dma(txn, 4*i, &data_pa);
383 txn->last_pat = pat;
391 static int dmm_txn_commit(struct dmm_txn *txn, bool wait)
394 struct refill_engine *engine = txn->engine_handle;
397 if (!txn->last_pat) {
398 dev_err(engine->dmm->dev, "need at least one txn\n");
403 txn->last_pat->next_pa = 0;
414 readl(&txn->last_pat->next_pa);
464 struct dmm_txn *txn;
481 txn = dmm_txn_init(omap_dmm, area->tcm);
482 if (IS_ERR_OR_NULL(txn))
491 dmm_txn_append(txn, &p_area, pages, npages, roll);
496 ret = dmm_txn_commit(txn, wait);