Lines Matching defs:trans

238 				  struct gsi_trans *trans)
241 channel->trans_info.map[index % channel->tre_ring.count] = trans;
260 static void gsi_trans_move_pending(struct gsi_trans *trans)
262 struct gsi_channel *channel = &trans->gsi->channel[trans->channel_id];
267 list_move_tail(&trans->links, &trans_info->pending);
275 void gsi_trans_move_complete(struct gsi_trans *trans)
277 struct gsi_channel *channel = &trans->gsi->channel[trans->channel_id];
284 list_cut_position(&list, &trans_info->pending, &trans->links);
291 void gsi_trans_move_polled(struct gsi_trans *trans)
293 struct gsi_channel *channel = &trans->gsi->channel[trans->channel_id];
298 list_move_tail(&trans->links, &trans_info->polled);
333 struct gsi_trans *trans;
346 trans = gsi_trans_pool_alloc(&trans_info->pool, 1);
347 trans->gsi = gsi;
348 trans->channel_id = channel_id;
349 trans->tre_count = tre_count;
350 init_completion(&trans->completion);
353 trans->sgl = gsi_trans_pool_alloc(&trans_info->sg_pool, tre_count);
354 sg_init_marker(trans->sgl, tre_count);
356 trans->direction = direction;
360 list_add_tail(&trans->links, &trans_info->alloc);
364 refcount_set(&trans->refcount, 1);
366 return trans;
370 void gsi_trans_free(struct gsi_trans *trans)
372 refcount_t *refcount = &trans->refcount;
380 trans_info = &trans->gsi->channel[trans->channel_id].trans_info;
387 list_del(&trans->links);
394 ipa_gsi_trans_release(trans);
399 gsi_trans_tre_release(trans_info, trans->tre_count);
403 void gsi_trans_cmd_add(struct gsi_trans *trans, void *buf, u32 size,
408 u32 which = trans->used++;
411 /* assert(which < trans->tre_count); */
427 sg = &trans->sgl[which];
432 info = &trans->info[which];
438 int gsi_trans_page_add(struct gsi_trans *trans, struct page *page, u32 size,
441 struct scatterlist *sg = &trans->sgl[0];
444 /* assert(trans->tre_count == 1); */
445 /* assert(!trans->used); */
448 ret = dma_map_sg(trans->gsi->dev, sg, 1, trans->direction);
452 trans->used++; /* Transaction now owns the (DMA mapped) page */
458 int gsi_trans_skb_add(struct gsi_trans *trans, struct sk_buff *skb)
460 struct scatterlist *sg = &trans->sgl[0];
464 /* assert(trans->tre_count == 1); */
465 /* assert(!trans->used); */
473 ret = dma_map_sg(trans->gsi->dev, sg, used, trans->direction);
477 trans->used += used; /* Transaction now owns the (DMA mapped) skb */
531 * @trans: Transaction to commit
540 static void __gsi_trans_commit(struct gsi_trans *trans, bool ring_db)
542 struct gsi_channel *channel = &trans->gsi->channel[trans->channel_id];
553 /* assert(trans->used > 0); */
560 info = trans->info ? &trans->info[0] : NULL;
563 for_each_sg(trans->sgl, sg, trans->used, i) {
564 bool last_tre = i == trans->used - 1;
577 ring->index += trans->used;
581 trans->len = byte_count;
582 trans->trans_count = channel->trans_count;
583 trans->byte_count = channel->byte_count;
589 gsi_channel_trans_map(channel, ring->index - 1, trans);
591 gsi_trans_move_pending(trans);
603 void gsi_trans_commit(struct gsi_trans *trans, bool ring_db)
605 if (trans->used)
606 __gsi_trans_commit(trans, ring_db);
608 gsi_trans_free(trans);
612 void gsi_trans_commit_wait(struct gsi_trans *trans)
614 if (!trans->used)
617 refcount_inc(&trans->refcount);
619 __gsi_trans_commit(trans, true);
621 wait_for_completion(&trans->completion);
624 gsi_trans_free(trans);
628 int gsi_trans_commit_wait_timeout(struct gsi_trans *trans,
634 if (!trans->used)
637 refcount_inc(&trans->refcount);
639 __gsi_trans_commit(trans, true);
641 remaining = wait_for_completion_timeout(&trans->completion,
644 gsi_trans_free(trans);
650 void gsi_trans_complete(struct gsi_trans *trans)
653 if (trans->direction != DMA_NONE)
654 dma_unmap_sg(trans->gsi->dev, trans->sgl, trans->used,
655 trans->direction);
657 ipa_gsi_trans_complete(trans);
659 complete(&trans->completion);
661 gsi_trans_free(trans);
668 struct gsi_trans *trans;
675 list_for_each_entry(trans, &trans_info->pending, links)
676 trans->cancelled = true;