• Home
  • Raw
  • Download

Lines Matching refs:trans

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