Lines Matching refs:iop_chan

53 	struct iop_adma_chan *iop_chan, dma_cookie_t cookie)  in iop_adma_run_tx_complete_actions()  argument
80 struct iop_adma_chan *iop_chan) in iop_adma_clean_slot() argument
91 if (desc->chain_node.next == &iop_chan->chain) in iop_adma_clean_slot()
94 dev_dbg(iop_chan->device->common.dev, in iop_adma_clean_slot()
104 static void __iop_adma_slot_cleanup(struct iop_adma_chan *iop_chan) in __iop_adma_slot_cleanup() argument
108 u32 current_desc = iop_chan_get_current_descriptor(iop_chan); in __iop_adma_slot_cleanup()
109 int busy = iop_chan_is_busy(iop_chan); in __iop_adma_slot_cleanup()
112 dev_dbg(iop_chan->device->common.dev, "%s\n", __func__); in __iop_adma_slot_cleanup()
116 list_for_each_entry_safe(iter, _iter, &iop_chan->chain, in __iop_adma_slot_cleanup()
173 &iop_chan->chain, chain_node) { in __iop_adma_slot_cleanup()
191 &iop_chan->chain, chain_node) { in __iop_adma_slot_cleanup()
193 grp_iter, iop_chan, cookie); in __iop_adma_slot_cleanup()
197 iop_chan); in __iop_adma_slot_cleanup()
221 iter, iop_chan, cookie); in __iop_adma_slot_cleanup()
223 if (iop_adma_clean_slot(iter, iop_chan)) in __iop_adma_slot_cleanup()
228 iop_chan->common.completed_cookie = cookie; in __iop_adma_slot_cleanup()
234 iop_adma_slot_cleanup(struct iop_adma_chan *iop_chan) in iop_adma_slot_cleanup() argument
236 spin_lock_bh(&iop_chan->lock); in iop_adma_slot_cleanup()
237 __iop_adma_slot_cleanup(iop_chan); in iop_adma_slot_cleanup()
238 spin_unlock_bh(&iop_chan->lock); in iop_adma_slot_cleanup()
243 struct iop_adma_chan *iop_chan = from_tasklet(iop_chan, t, in iop_adma_tasklet() local
251 spin_lock_nested(&iop_chan->lock, SINGLE_DEPTH_NESTING); in iop_adma_tasklet()
252 __iop_adma_slot_cleanup(iop_chan); in iop_adma_tasklet()
253 spin_unlock(&iop_chan->lock); in iop_adma_tasklet()
257 iop_adma_alloc_slots(struct iop_adma_chan *iop_chan, int num_slots, in iop_adma_alloc_slots() argument
271 iter = iop_chan->last_used; in iop_adma_alloc_slots()
273 iter = list_entry(&iop_chan->all_slots, in iop_adma_alloc_slots()
278 iter, _iter, &iop_chan->all_slots, slot_node) { in iop_adma_alloc_slots()
308 dev_dbg(iop_chan->device->common.dev, in iop_adma_alloc_slots()
335 iop_chan->last_used = last_used; in iop_adma_alloc_slots()
345 __iop_adma_slot_cleanup(iop_chan); in iop_adma_alloc_slots()
350 static void iop_adma_check_threshold(struct iop_adma_chan *iop_chan) in iop_adma_check_threshold() argument
352 dev_dbg(iop_chan->device->common.dev, "pending: %d\n", in iop_adma_check_threshold()
353 iop_chan->pending); in iop_adma_check_threshold()
355 if (iop_chan->pending >= IOP_ADMA_THRESHOLD) { in iop_adma_check_threshold()
356 iop_chan->pending = 0; in iop_adma_check_threshold()
357 iop_chan_append(iop_chan); in iop_adma_check_threshold()
365 struct iop_adma_chan *iop_chan = to_iop_adma_chan(tx->chan); in iop_adma_tx_submit() local
374 spin_lock_bh(&iop_chan->lock); in iop_adma_tx_submit()
377 old_chain_tail = list_entry(iop_chan->chain.prev, in iop_adma_tx_submit()
395 iop_chan->pending += slot_cnt; in iop_adma_tx_submit()
396 iop_adma_check_threshold(iop_chan); in iop_adma_tx_submit()
397 spin_unlock_bh(&iop_chan->lock); in iop_adma_tx_submit()
399 dev_dbg(iop_chan->device->common.dev, "%s cookie: %d slot: %d\n", in iop_adma_tx_submit()
405 static void iop_chan_start_null_memcpy(struct iop_adma_chan *iop_chan);
406 static void iop_chan_start_null_xor(struct iop_adma_chan *iop_chan);
422 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_alloc_chan_resources() local
424 int init = iop_chan->slots_allocated ? 0 : 1; in iop_adma_alloc_chan_resources()
426 dev_get_platdata(&iop_chan->device->pdev->dev); in iop_adma_alloc_chan_resources()
431 idx = iop_chan->slots_allocated; in iop_adma_alloc_chan_resources()
441 hw_desc = (char *) iop_chan->device->dma_desc_pool_virt; in iop_adma_alloc_chan_resources()
449 dma_desc = iop_chan->device->dma_desc_pool; in iop_adma_alloc_chan_resources()
453 spin_lock_bh(&iop_chan->lock); in iop_adma_alloc_chan_resources()
454 iop_chan->slots_allocated++; in iop_adma_alloc_chan_resources()
455 list_add_tail(&slot->slot_node, &iop_chan->all_slots); in iop_adma_alloc_chan_resources()
456 spin_unlock_bh(&iop_chan->lock); in iop_adma_alloc_chan_resources()
457 } while (iop_chan->slots_allocated < num_descs_in_pool); in iop_adma_alloc_chan_resources()
459 if (idx && !iop_chan->last_used) in iop_adma_alloc_chan_resources()
460 iop_chan->last_used = list_entry(iop_chan->all_slots.next, in iop_adma_alloc_chan_resources()
464 dev_dbg(iop_chan->device->common.dev, in iop_adma_alloc_chan_resources()
466 iop_chan->slots_allocated, iop_chan->last_used); in iop_adma_alloc_chan_resources()
471 iop_chan->device->common.cap_mask)) in iop_adma_alloc_chan_resources()
472 iop_chan_start_null_memcpy(iop_chan); in iop_adma_alloc_chan_resources()
474 iop_chan->device->common.cap_mask)) in iop_adma_alloc_chan_resources()
475 iop_chan_start_null_xor(iop_chan); in iop_adma_alloc_chan_resources()
486 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_interrupt() local
490 dev_dbg(iop_chan->device->common.dev, "%s\n", __func__); in iop_adma_prep_dma_interrupt()
492 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_interrupt()
493 slot_cnt = iop_chan_interrupt_slot_count(&slots_per_op, iop_chan); in iop_adma_prep_dma_interrupt()
494 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_interrupt()
497 iop_desc_init_interrupt(grp_start, iop_chan); in iop_adma_prep_dma_interrupt()
500 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_interrupt()
509 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_memcpy() local
517 dev_dbg(iop_chan->device->common.dev, "%s len: %zu\n", in iop_adma_prep_dma_memcpy()
520 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_memcpy()
522 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_memcpy()
526 iop_desc_set_byte_count(grp_start, iop_chan, len); in iop_adma_prep_dma_memcpy()
527 iop_desc_set_dest_addr(grp_start, iop_chan, dma_dest); in iop_adma_prep_dma_memcpy()
531 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_memcpy()
541 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_xor() local
549 dev_dbg(iop_chan->device->common.dev, in iop_adma_prep_dma_xor()
553 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_xor()
555 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_xor()
559 iop_desc_set_byte_count(grp_start, iop_chan, len); in iop_adma_prep_dma_xor()
560 iop_desc_set_dest_addr(grp_start, iop_chan, dma_dest); in iop_adma_prep_dma_xor()
566 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_xor()
576 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_xor_val() local
583 dev_dbg(iop_chan->device->common.dev, "%s src_cnt: %d len: %zu\n", in iop_adma_prep_dma_xor_val()
586 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_xor_val()
588 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_xor_val()
601 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_xor_val()
611 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_pq() local
620 dev_dbg(iop_chan->device->common.dev, in iop_adma_prep_dma_pq()
631 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_pq()
633 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_pq()
638 iop_desc_set_byte_count(g, iop_chan, len); in iop_adma_prep_dma_pq()
665 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_pq()
676 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_prep_dma_pq_val() local
684 dev_dbg(iop_chan->device->common.dev, "%s src_cnt: %d len: %zu\n", in iop_adma_prep_dma_pq_val()
687 spin_lock_bh(&iop_chan->lock); in iop_adma_prep_dma_pq_val()
689 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_adma_prep_dma_pq_val()
709 spin_unlock_bh(&iop_chan->lock); in iop_adma_prep_dma_pq_val()
716 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_free_chan_resources() local
720 iop_adma_slot_cleanup(iop_chan); in iop_adma_free_chan_resources()
722 spin_lock_bh(&iop_chan->lock); in iop_adma_free_chan_resources()
723 list_for_each_entry_safe(iter, _iter, &iop_chan->chain, in iop_adma_free_chan_resources()
729 iter, _iter, &iop_chan->all_slots, slot_node) { in iop_adma_free_chan_resources()
732 iop_chan->slots_allocated--; in iop_adma_free_chan_resources()
734 iop_chan->last_used = NULL; in iop_adma_free_chan_resources()
736 dev_dbg(iop_chan->device->common.dev, "%s slots_allocated %d\n", in iop_adma_free_chan_resources()
737 __func__, iop_chan->slots_allocated); in iop_adma_free_chan_resources()
738 spin_unlock_bh(&iop_chan->lock); in iop_adma_free_chan_resources()
756 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_status() local
763 iop_adma_slot_cleanup(iop_chan); in iop_adma_status()
818 struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); in iop_adma_issue_pending() local
820 if (iop_chan->pending) { in iop_adma_issue_pending()
821 iop_chan->pending = 0; in iop_adma_issue_pending()
822 iop_chan_append(iop_chan); in iop_adma_issue_pending()
840 struct iop_adma_chan *iop_chan; in iop_adma_memcpy_self_test() local
886 iop_chan = to_iop_adma_chan(dma_chan); in iop_adma_memcpy_self_test()
887 dma_sync_single_for_cpu(&iop_chan->device->pdev->dev, dest_dma, in iop_adma_memcpy_self_test()
921 struct iop_adma_chan *iop_chan; in iop_adma_xor_val_self_test() local
986 iop_chan = to_iop_adma_chan(dma_chan); in iop_adma_xor_val_self_test()
987 dma_sync_single_for_cpu(&iop_chan->device->pdev->dev, dest_dma, in iop_adma_xor_val_self_test()
998 dma_sync_single_for_device(&iop_chan->device->pdev->dev, dest_dma, in iop_adma_xor_val_self_test()
1246 struct iop_adma_chan *iop_chan; in iop_adma_remove() local
1256 iop_chan = to_iop_adma_chan(chan); in iop_adma_remove()
1258 kfree(iop_chan); in iop_adma_remove()
1270 struct iop_adma_chan *iop_chan; in iop_adma_probe() local
1341 iop_chan = kzalloc(sizeof(*iop_chan), GFP_KERNEL); in iop_adma_probe()
1342 if (!iop_chan) { in iop_adma_probe()
1346 iop_chan->device = adev; in iop_adma_probe()
1348 iop_chan->mmr_base = devm_ioremap(&pdev->dev, res->start, in iop_adma_probe()
1350 if (!iop_chan->mmr_base) { in iop_adma_probe()
1354 tasklet_setup(&iop_chan->irq_tasklet, iop_adma_tasklet); in iop_adma_probe()
1357 iop_adma_device_clear_err_status(iop_chan); in iop_adma_probe()
1371 handler[i], 0, pdev->name, iop_chan); in iop_adma_probe()
1377 spin_lock_init(&iop_chan->lock); in iop_adma_probe()
1378 INIT_LIST_HEAD(&iop_chan->chain); in iop_adma_probe()
1379 INIT_LIST_HEAD(&iop_chan->all_slots); in iop_adma_probe()
1380 iop_chan->common.device = dma_dev; in iop_adma_probe()
1381 dma_cookie_init(&iop_chan->common); in iop_adma_probe()
1382 list_add_tail(&iop_chan->common.device_node, &dma_dev->channels); in iop_adma_probe()
1425 kfree(iop_chan); in iop_adma_probe()
1435 static void iop_chan_start_null_memcpy(struct iop_adma_chan *iop_chan) in iop_chan_start_null_memcpy() argument
1441 dev_dbg(iop_chan->device->common.dev, "%s\n", __func__); in iop_chan_start_null_memcpy()
1443 spin_lock_bh(&iop_chan->lock); in iop_chan_start_null_memcpy()
1445 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_chan_start_null_memcpy()
1449 list_splice_init(&sw_desc->tx_list, &iop_chan->chain); in iop_chan_start_null_memcpy()
1452 iop_desc_set_byte_count(grp_start, iop_chan, 0); in iop_chan_start_null_memcpy()
1453 iop_desc_set_dest_addr(grp_start, iop_chan, 0); in iop_chan_start_null_memcpy()
1461 iop_chan->common.completed_cookie = cookie - 1; in iop_chan_start_null_memcpy()
1464 BUG_ON(iop_chan_is_busy(iop_chan)); in iop_chan_start_null_memcpy()
1467 iop_adma_device_clear_err_status(iop_chan); in iop_chan_start_null_memcpy()
1470 iop_chan_disable(iop_chan); in iop_chan_start_null_memcpy()
1473 iop_chan_set_next_descriptor(iop_chan, sw_desc->async_tx.phys); in iop_chan_start_null_memcpy()
1481 iop_chan_enable(iop_chan); in iop_chan_start_null_memcpy()
1483 dev_err(iop_chan->device->common.dev, in iop_chan_start_null_memcpy()
1485 spin_unlock_bh(&iop_chan->lock); in iop_chan_start_null_memcpy()
1488 static void iop_chan_start_null_xor(struct iop_adma_chan *iop_chan) in iop_chan_start_null_xor() argument
1494 dev_dbg(iop_chan->device->common.dev, "%s\n", __func__); in iop_chan_start_null_xor()
1496 spin_lock_bh(&iop_chan->lock); in iop_chan_start_null_xor()
1498 sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); in iop_chan_start_null_xor()
1501 list_splice_init(&sw_desc->tx_list, &iop_chan->chain); in iop_chan_start_null_xor()
1504 iop_desc_set_byte_count(grp_start, iop_chan, 0); in iop_chan_start_null_xor()
1505 iop_desc_set_dest_addr(grp_start, iop_chan, 0); in iop_chan_start_null_xor()
1514 iop_chan->common.completed_cookie = cookie - 1; in iop_chan_start_null_xor()
1517 BUG_ON(iop_chan_is_busy(iop_chan)); in iop_chan_start_null_xor()
1520 iop_adma_device_clear_err_status(iop_chan); in iop_chan_start_null_xor()
1523 iop_chan_disable(iop_chan); in iop_chan_start_null_xor()
1526 iop_chan_set_next_descriptor(iop_chan, sw_desc->async_tx.phys); in iop_chan_start_null_xor()
1534 iop_chan_enable(iop_chan); in iop_chan_start_null_xor()
1536 dev_err(iop_chan->device->common.dev, in iop_chan_start_null_xor()
1538 spin_unlock_bh(&iop_chan->lock); in iop_chan_start_null_xor()