Lines Matching refs:chan
79 struct dma_chan *chan; member
141 static void print_cb(struct ppc440spe_adma_chan *chan, void *block) in print_cb() argument
147 switch (chan->device->id) { in print_cb()
157 cdb, chan->device->id, in print_cb()
171 cb, chan->device->id, in print_cb()
185 static void print_cb_list(struct ppc440spe_adma_chan *chan, in print_cb_list() argument
189 print_cb(chan, iter->hw_desc); in print_cb_list()
244 struct ppc440spe_adma_chan *chan) in ppc440spe_desc_init_interrupt() argument
248 switch (chan->device->id) { in ppc440spe_desc_init_interrupt()
262 printk(KERN_ERR "Unsupported id %d in %s\n", chan->device->id, in ppc440spe_desc_init_interrupt()
535 struct ppc440spe_adma_chan *chan, in ppc440spe_desc_set_src_addr() argument
543 switch (chan->device->id) { in ppc440spe_desc_set_src_addr()
570 struct ppc440spe_adma_chan *chan, u32 mult_index, in ppc440spe_desc_set_src_mult() argument
577 switch (chan->device->id) { in ppc440spe_desc_set_src_mult()
616 struct ppc440spe_adma_chan *chan, in ppc440spe_desc_set_dest_addr() argument
625 switch (chan->device->id) { in ppc440spe_desc_set_dest_addr()
657 struct ppc440spe_adma_chan *chan, in ppc440spe_desc_set_byte_count() argument
663 switch (chan->device->id) { in ppc440spe_desc_set_byte_count()
692 struct ppc440spe_adma_chan *chan, u8 *qword) in ppc440spe_desc_set_dcheck() argument
696 switch (chan->device->id) { in ppc440spe_desc_set_dcheck()
735 static void ppc440spe_desc_set_link(struct ppc440spe_adma_chan *chan, in ppc440spe_desc_set_link() argument
759 switch (chan->device->id) { in ppc440spe_desc_set_link()
784 struct ppc440spe_adma_chan *chan) in ppc440spe_desc_get_link() argument
904 ppc440spe_chan_get_current_descriptor(struct ppc440spe_adma_chan *chan);
905 static void ppc440spe_chan_append(struct ppc440spe_adma_chan *chan);
911 struct ppc440spe_adma_chan *chan) in ppc440spe_adma_device_clear_eot_status() argument
915 u8 *p = chan->device->dma_desc_pool_virt; in ppc440spe_adma_device_clear_eot_status()
919 switch (chan->device->id) { in ppc440spe_adma_device_clear_eot_status()
923 dma_reg = chan->device->dma_reg; in ppc440spe_adma_device_clear_eot_status()
927 (u32)chan->device->dma_desc_pool]; in ppc440spe_adma_device_clear_eot_status()
959 list_for_each_entry(iter, &chan->chain, in ppc440spe_adma_device_clear_eot_status()
968 BUG_ON(&iter->chain_node == &chan->chain); in ppc440spe_adma_device_clear_eot_status()
989 chan->device->id, rv); in ppc440spe_adma_device_clear_eot_status()
996 xor_reg = chan->device->xor_reg; in ppc440spe_adma_device_clear_eot_status()
1022 ppc440spe_chan_append(chan); in ppc440spe_adma_device_clear_eot_status()
1030 static int ppc440spe_chan_is_busy(struct ppc440spe_adma_chan *chan) in ppc440spe_chan_is_busy() argument
1036 switch (chan->device->id) { in ppc440spe_chan_is_busy()
1039 dma_reg = chan->device->dma_reg; in ppc440spe_chan_is_busy()
1050 xor_reg = chan->device->xor_reg; in ppc440spe_chan_is_busy()
1062 struct ppc440spe_adma_chan *chan, in ppc440spe_chan_set_first_xor_descriptor() argument
1065 struct xor_regs *xor_reg = chan->device->xor_reg; in ppc440spe_chan_set_first_xor_descriptor()
1081 chan->hw_chain_inited = 1; in ppc440spe_chan_set_first_xor_descriptor()
1088 static void ppc440spe_dma_put_desc(struct ppc440spe_adma_chan *chan, in ppc440spe_dma_put_desc() argument
1092 struct dma_regs *dma_reg = chan->device->dma_reg; in ppc440spe_dma_put_desc()
1098 chan_last_sub[chan->device->id] = desc; in ppc440spe_dma_put_desc()
1100 ADMA_LL_DBG(print_cb(chan, desc->hw_desc)); in ppc440spe_dma_put_desc()
1108 static void ppc440spe_chan_append(struct ppc440spe_adma_chan *chan) in ppc440spe_chan_append() argument
1118 switch (chan->device->id) { in ppc440spe_chan_append()
1121 cur_desc = ppc440spe_chan_get_current_descriptor(chan); in ppc440spe_chan_append()
1124 iter = chan_last_sub[chan->device->id]; in ppc440spe_chan_append()
1128 iter = chan_first_cdb[chan->device->id]; in ppc440spe_chan_append()
1130 ppc440spe_dma_put_desc(chan, iter); in ppc440spe_chan_append()
1131 chan->hw_chain_inited = 1; in ppc440spe_chan_append()
1139 list_for_each_entry_continue(iter, &chan->chain, chain_node) { in ppc440spe_chan_append()
1140 ppc440spe_dma_put_desc(chan, iter); in ppc440spe_chan_append()
1150 xor_reg = chan->device->xor_reg; in ppc440spe_chan_append()
1165 ADMA_LL_DBG(print_cb_list(chan, in ppc440spe_chan_append()
1187 ppc440spe_chan_get_current_descriptor(struct ppc440spe_adma_chan *chan) in ppc440spe_chan_get_current_descriptor() argument
1192 if (unlikely(!chan->hw_chain_inited)) in ppc440spe_chan_get_current_descriptor()
1196 switch (chan->device->id) { in ppc440spe_chan_get_current_descriptor()
1199 dma_reg = chan->device->dma_reg; in ppc440spe_chan_get_current_descriptor()
1202 xor_reg = chan->device->xor_reg; in ppc440spe_chan_get_current_descriptor()
1211 static void ppc440spe_chan_run(struct ppc440spe_adma_chan *chan) in ppc440spe_chan_run() argument
1215 switch (chan->device->id) { in ppc440spe_chan_run()
1222 xor_reg = chan->device->xor_reg; in ppc440spe_chan_run()
1235 static void ppc440spe_chan_start_null_xor(struct ppc440spe_adma_chan *chan);
1236 static int ppc440spe_adma_alloc_chan_resources(struct dma_chan *chan);
1340 static int ppc440spe_adma_estimate(struct dma_chan *chan, in ppc440spe_adma_estimate() argument
1363 if (cap == DMA_PQ && chan->chan_id == PPC440SPE_XOR_ID) { in ppc440spe_adma_estimate()
1375 !ppc440spe_chan_is_busy(to_ppc440spe_adma_chan(chan))) in ppc440spe_adma_estimate()
1414 if (dma_has_cap(cap, ref->chan->device->cap_mask)) { in ppc440spe_async_tx_find_best_channel()
1417 rank = ppc440spe_adma_estimate(ref->chan, cap, dst_lst, in ppc440spe_async_tx_find_best_channel()
1421 best_chan = ref->chan; in ppc440spe_async_tx_find_best_channel()
1459 struct ppc440spe_adma_chan *chan) in ppc440spe_adma_free_slots() argument
1477 struct ppc440spe_adma_chan *chan, in ppc440spe_adma_run_tx_complete_actions() argument
1505 struct ppc440spe_adma_chan *chan) in ppc440spe_adma_clean_slot() argument
1516 if (list_is_last(&desc->chain_node, &chan->chain) || in ppc440spe_adma_clean_slot()
1517 desc->phys == ppc440spe_chan_get_current_descriptor(chan)) in ppc440spe_adma_clean_slot()
1520 if (chan->device->id != PPC440SPE_XOR_ID) { in ppc440spe_adma_clean_slot()
1535 dev_dbg(chan->device->common.dev, "\tfree slot %llx: %d stride: %d\n", in ppc440spe_adma_clean_slot()
1539 ppc440spe_adma_free_slots(desc, chan); in ppc440spe_adma_clean_slot()
1550 static void __ppc440spe_adma_slot_cleanup(struct ppc440spe_adma_chan *chan) in __ppc440spe_adma_slot_cleanup() argument
1554 u32 current_desc = ppc440spe_chan_get_current_descriptor(chan); in __ppc440spe_adma_slot_cleanup()
1555 int busy = ppc440spe_chan_is_busy(chan); in __ppc440spe_adma_slot_cleanup()
1558 dev_dbg(chan->device->common.dev, "ppc440spe adma%d: %s\n", in __ppc440spe_adma_slot_cleanup()
1559 chan->device->id, __func__); in __ppc440spe_adma_slot_cleanup()
1571 list_for_each_entry_safe(iter, _iter, &chan->chain, in __ppc440spe_adma_slot_cleanup()
1573 dev_dbg(chan->device->common.dev, "\tcookie: %d slot: %d " in __ppc440spe_adma_slot_cleanup()
1577 ppc440spe_desc_get_link(iter, chan), current_desc, in __ppc440spe_adma_slot_cleanup()
1595 if (busy || ppc440spe_desc_get_link(iter, chan)) { in __ppc440spe_adma_slot_cleanup()
1628 &chan->chain, chain_node) { in __ppc440spe_adma_slot_cleanup()
1631 grp_iter, chan, cookie); in __ppc440spe_adma_slot_cleanup()
1635 grp_iter, chan); in __ppc440spe_adma_slot_cleanup()
1639 chan->common.completed_cookie = cookie; in __ppc440spe_adma_slot_cleanup()
1659 cookie = ppc440spe_adma_run_tx_complete_actions(iter, chan, in __ppc440spe_adma_slot_cleanup()
1662 if (ppc440spe_adma_clean_slot(iter, chan)) in __ppc440spe_adma_slot_cleanup()
1669 chan->common.completed_cookie = cookie; in __ppc440spe_adma_slot_cleanup()
1680 struct ppc440spe_adma_chan *chan = (struct ppc440spe_adma_chan *) data; in ppc440spe_adma_tasklet() local
1682 spin_lock_nested(&chan->lock, SINGLE_DEPTH_NESTING); in ppc440spe_adma_tasklet()
1683 __ppc440spe_adma_slot_cleanup(chan); in ppc440spe_adma_tasklet()
1684 spin_unlock(&chan->lock); in ppc440spe_adma_tasklet()
1690 static void ppc440spe_adma_slot_cleanup(struct ppc440spe_adma_chan *chan) in ppc440spe_adma_slot_cleanup() argument
1692 spin_lock_bh(&chan->lock); in ppc440spe_adma_slot_cleanup()
1693 __ppc440spe_adma_slot_cleanup(chan); in ppc440spe_adma_slot_cleanup()
1694 spin_unlock_bh(&chan->lock); in ppc440spe_adma_slot_cleanup()
1701 struct ppc440spe_adma_chan *chan, int num_slots, in ppc440spe_adma_alloc_slots() argument
1718 iter = chan->last_used; in ppc440spe_adma_alloc_slots()
1720 iter = list_entry(&chan->all_slots, in ppc440spe_adma_alloc_slots()
1723 list_for_each_entry_safe_continue(iter, _iter, &chan->all_slots, in ppc440spe_adma_alloc_slots()
1766 chan->last_used = last_used; in ppc440spe_adma_alloc_slots()
1774 tasklet_schedule(&chan->irq_tasklet); in ppc440spe_adma_alloc_slots()
1781 static int ppc440spe_adma_alloc_chan_resources(struct dma_chan *chan) in ppc440spe_adma_alloc_chan_resources() argument
1789 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_alloc_chan_resources()
1791 chan->chan_id = ppc440spe_chan->device->id; in ppc440spe_adma_alloc_chan_resources()
1811 dma_async_tx_descriptor_init(&slot->async_tx, chan); in ppc440spe_adma_alloc_chan_resources()
1896 static void ppc440spe_adma_check_threshold(struct ppc440spe_adma_chan *chan) in ppc440spe_adma_check_threshold() argument
1898 dev_dbg(chan->device->common.dev, "ppc440spe adma%d: pending: %d\n", in ppc440spe_adma_check_threshold()
1899 chan->device->id, chan->pending); in ppc440spe_adma_check_threshold()
1901 if (chan->pending >= PPC440SPE_ADMA_THRESHOLD) { in ppc440spe_adma_check_threshold()
1902 chan->pending = 0; in ppc440spe_adma_check_threshold()
1903 ppc440spe_chan_append(chan); in ppc440spe_adma_check_threshold()
1915 struct ppc440spe_adma_chan *chan = to_ppc440spe_adma_chan(tx->chan); in ppc440spe_adma_tx_submit() local
1927 spin_lock_bh(&chan->lock); in ppc440spe_adma_tx_submit()
1930 if (unlikely(list_empty(&chan->chain))) { in ppc440spe_adma_tx_submit()
1932 list_splice_init(&sw_desc->group_list, &chan->chain); in ppc440spe_adma_tx_submit()
1933 chan_first_cdb[chan->device->id] = group_start; in ppc440spe_adma_tx_submit()
1936 old_chain_tail = list_entry(chan->chain.prev, in ppc440spe_adma_tx_submit()
1942 ppc440spe_desc_set_link(chan, old_chain_tail, group_start); in ppc440spe_adma_tx_submit()
1946 chan->pending += slot_cnt / slots_per_op; in ppc440spe_adma_tx_submit()
1947 ppc440spe_adma_check_threshold(chan); in ppc440spe_adma_tx_submit()
1948 spin_unlock_bh(&chan->lock); in ppc440spe_adma_tx_submit()
1950 dev_dbg(chan->device->common.dev, in ppc440spe_adma_tx_submit()
1952 chan->device->id, __func__, in ppc440spe_adma_tx_submit()
1962 struct dma_chan *chan, unsigned long flags) in ppc440spe_adma_prep_dma_interrupt() argument
1968 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_prep_dma_interrupt()
1993 struct dma_chan *chan, dma_addr_t dma_dest, in ppc440spe_adma_prep_dma_memcpy() argument
2000 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_prep_dma_memcpy()
2034 struct dma_chan *chan, dma_addr_t dma_dest, in ppc440spe_adma_prep_dma_xor() argument
2042 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_prep_dma_xor()
2117 struct ppc440spe_adma_chan *chan; in ppc440spe_dma01_prep_mult() local
2121 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_dma01_prep_mult()
2140 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_dma01_prep_mult()
2142 ppc440spe_desc_set_dest_addr(iter, chan, 0, dst[1], 1); in ppc440spe_dma01_prep_mult()
2143 ppc440spe_desc_set_src_addr(iter, chan, 0, DMA_CUED_XOR_HB, in ppc440spe_dma01_prep_mult()
2164 ppc440spe_desc_set_src_addr(iter, chan, 0, in ppc440spe_dma01_prep_mult()
2166 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_dma01_prep_mult()
2169 ppc440spe_desc_set_src_mult(iter, chan, DMA_CUED_MULT1_OFF, in ppc440spe_dma01_prep_mult()
2203 struct ppc440spe_adma_chan *chan; in ppc440spe_dma01_prep_sum_product() local
2207 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_dma01_prep_sum_product()
2223 ppc440spe_desc_set_dest_addr(iter, chan, DMA_CUED_XOR_BASE, in ppc440spe_dma01_prep_sum_product()
2225 ppc440spe_desc_set_dest_addr(iter, chan, 0, in ppc440spe_dma01_prep_sum_product()
2227 ppc440spe_desc_set_src_addr(iter, chan, 0, DMA_CUED_XOR_HB, in ppc440spe_dma01_prep_sum_product()
2249 ppc440spe_desc_set_src_addr(iter, chan, 0, DMA_CUED_XOR_HB, in ppc440spe_dma01_prep_sum_product()
2251 ppc440spe_desc_set_dest_addr(iter, chan, DMA_CUED_XOR_BASE, in ppc440spe_dma01_prep_sum_product()
2253 ppc440spe_desc_set_src_mult(iter, chan, DMA_CUED_MULT1_OFF, in ppc440spe_dma01_prep_sum_product()
2274 ppc440spe_desc_set_src_addr(iter, chan, 0, DMA_CUED_XOR_HB, in ppc440spe_dma01_prep_sum_product()
2276 ppc440spe_desc_set_dest_addr(iter, chan, DMA_CUED_XOR_BASE, in ppc440spe_dma01_prep_sum_product()
2278 ppc440spe_desc_set_src_mult(iter, chan, DMA_CUED_MULT1_OFF, in ppc440spe_dma01_prep_sum_product()
2525 struct dma_chan *chan, dma_addr_t *dst, dma_addr_t *src, in ppc440spe_adma_prep_dma_pq() argument
2533 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_prep_dma_pq()
2601 struct dma_chan *chan, dma_addr_t *pq, dma_addr_t *src, in ppc440spe_adma_prep_dma_pqzero_sum() argument
2610 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_prep_dma_pqzero_sum()
2652 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_prep_dma_pqzero_sum() local
2655 chan = to_ppc440spe_adma_chan(iter->async_tx.chan); in ppc440spe_adma_prep_dma_pqzero_sum()
2664 ppc440spe_desc_set_dest_addr(iter, chan, 0, in ppc440spe_adma_prep_dma_pqzero_sum()
2666 ppc440spe_desc_set_src_addr(iter, chan, 0, 0, pdest); in ppc440spe_adma_prep_dma_pqzero_sum()
2675 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_prep_dma_pqzero_sum() local
2680 chan = to_ppc440spe_adma_chan(iter->async_tx.chan); in ppc440spe_adma_prep_dma_pqzero_sum()
2696 ppc440spe_desc_set_dest_addr(iter, chan, 0, in ppc440spe_adma_prep_dma_pqzero_sum()
2698 ppc440spe_desc_set_src_addr(iter, chan, 0, 0, qdest); in ppc440spe_adma_prep_dma_pqzero_sum()
2752 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_prep_dma_pqzero_sum() local
2755 chan = to_ppc440spe_adma_chan(iter->async_tx.chan); in ppc440spe_adma_prep_dma_pqzero_sum()
2756 ppc440spe_desc_set_src_addr(iter, chan, 0, in ppc440spe_adma_prep_dma_pqzero_sum()
2762 ppc440spe_desc_set_src_mult(iter, chan, in ppc440spe_adma_prep_dma_pqzero_sum()
2780 struct dma_chan *chan, dma_addr_t *src, unsigned int src_cnt, in ppc440spe_adma_prep_dma_xor_zero_sum() argument
2791 tx = ppc440spe_adma_prep_dma_pqzero_sum(chan, pq, &src[1], in ppc440spe_adma_prep_dma_xor_zero_sum()
2803 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_set_dest() local
2807 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_set_dest()
2809 switch (chan->device->id) { in ppc440spe_adma_set_dest()
2816 chan, 0, addr, index); in ppc440spe_adma_set_dest()
2821 chan, 0, addr, index); in ppc440spe_adma_set_dest()
2827 struct ppc440spe_adma_chan *chan, dma_addr_t addr) in ppc440spe_adma_pq_zero_op() argument
2833 ppc440spe_desc_set_dest_addr(iter, chan, DMA_CUED_XOR_BASE, addr, 0); in ppc440spe_adma_pq_zero_op()
2836 ppc440spe_desc_set_src_addr(iter, chan, 0, DMA_CUED_XOR_HB, addr); in ppc440spe_adma_pq_zero_op()
2839 ppc440spe_desc_set_src_mult(iter, chan, DMA_CUED_MULT1_OFF, in ppc440spe_adma_pq_zero_op()
2851 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_pq_set_dest() local
2856 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_pq_set_dest()
2871 switch (chan->device->id) { in ppc440spe_adma_pq_set_dest()
2889 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
2895 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
2897 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
2911 ppc440spe_adma_pq_zero_op(iter, chan, in ppc440spe_adma_pq_set_dest()
2919 ppc440spe_adma_pq_zero_op(iter, chan, in ppc440spe_adma_pq_set_dest()
2942 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
2949 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
2965 iter, chan, in ppc440spe_adma_pq_set_dest()
2975 iter, chan, in ppc440spe_adma_pq_set_dest()
2979 iter, chan, in ppc440spe_adma_pq_set_dest()
3007 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pq_set_dest()
3021 chan, qpath, qaddr, 0); in ppc440spe_adma_pq_set_dest()
3041 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_pqzero_sum_set_dest() local
3045 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_pqzero_sum_set_dest()
3067 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pqzero_sum_set_dest()
3069 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pqzero_sum_set_dest()
3079 ppc440spe_desc_set_dest_addr(iter, chan, in ppc440spe_adma_pqzero_sum_set_dest()
3088 ppc440spe_desc_set_src_addr(end, chan, 0, 0, addr ? addr : paddr); in ppc440spe_adma_pqzero_sum_set_dest()
3093 ppc440spe_desc_set_src_addr(end, chan, 0, 0, qaddr); in ppc440spe_adma_pqzero_sum_set_dest()
3116 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_pq_set_src() local
3120 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_pq_set_src()
3122 switch (chan->device->id) { in ppc440spe_adma_pq_set_src()
3188 ppc440spe_desc_set_src_addr(iter, chan, 0, haddr, addr); in ppc440spe_adma_pq_set_src()
3197 ppc440spe_desc_set_src_addr(iter, chan, 0, in ppc440spe_adma_pq_set_src()
3226 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_memcpy_xor_set_src() local
3228 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_memcpy_xor_set_src()
3232 ppc440spe_desc_set_src_addr(sw_desc, chan, index, 0, addr); in ppc440spe_adma_memcpy_xor_set_src()
3468 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_pq_set_src_mult() local
3472 chan = to_ppc440spe_adma_chan(sw_desc->async_tx.chan); in ppc440spe_adma_pq_set_src_mult()
3474 switch (chan->device->id) { in ppc440spe_adma_pq_set_src_mult()
3518 ppc440spe_desc_set_src_mult(iter, chan, in ppc440spe_adma_pq_set_src_mult()
3525 ppc440spe_desc_set_src_mult(iter1, chan, in ppc440spe_adma_pq_set_src_mult()
3550 static void ppc440spe_adma_free_chan_resources(struct dma_chan *chan) in ppc440spe_adma_free_chan_resources() argument
3556 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_free_chan_resources()
3591 static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan, in ppc440spe_adma_tx_status() argument
3597 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_tx_status()
3598 ret = dma_cookie_status(chan, cookie, txstate); in ppc440spe_adma_tx_status()
3604 return dma_cookie_status(chan, cookie, txstate); in ppc440spe_adma_tx_status()
3612 struct ppc440spe_adma_chan *chan = data; in ppc440spe_adma_eot_handler() local
3614 dev_dbg(chan->device->common.dev, in ppc440spe_adma_eot_handler()
3615 "ppc440spe adma%d: %s\n", chan->device->id, __func__); in ppc440spe_adma_eot_handler()
3617 tasklet_schedule(&chan->irq_tasklet); in ppc440spe_adma_eot_handler()
3618 ppc440spe_adma_device_clear_eot_status(chan); in ppc440spe_adma_eot_handler()
3629 struct ppc440spe_adma_chan *chan = data; in ppc440spe_adma_err_handler() local
3631 dev_dbg(chan->device->common.dev, in ppc440spe_adma_err_handler()
3632 "ppc440spe adma%d: %s\n", chan->device->id, __func__); in ppc440spe_adma_err_handler()
3634 tasklet_schedule(&chan->irq_tasklet); in ppc440spe_adma_err_handler()
3635 ppc440spe_adma_device_clear_eot_status(chan); in ppc440spe_adma_err_handler()
3651 static void ppc440spe_adma_issue_pending(struct dma_chan *chan) in ppc440spe_adma_issue_pending() argument
3655 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_issue_pending()
3671 static void ppc440spe_chan_start_null_xor(struct ppc440spe_adma_chan *chan) in ppc440spe_chan_start_null_xor() argument
3677 dev_dbg(chan->device->common.dev, in ppc440spe_chan_start_null_xor()
3678 "ppc440spe adma%d: %s\n", chan->device->id, __func__); in ppc440spe_chan_start_null_xor()
3680 spin_lock_bh(&chan->lock); in ppc440spe_chan_start_null_xor()
3682 sw_desc = ppc440spe_adma_alloc_slots(chan, slot_cnt, slots_per_op); in ppc440spe_chan_start_null_xor()
3685 list_splice_init(&sw_desc->group_list, &chan->chain); in ppc440spe_chan_start_null_xor()
3694 chan->common.completed_cookie = cookie - 1; in ppc440spe_chan_start_null_xor()
3697 BUG_ON(ppc440spe_chan_is_busy(chan)); in ppc440spe_chan_start_null_xor()
3700 ppc440spe_chan_set_first_xor_descriptor(chan, sw_desc); in ppc440spe_chan_start_null_xor()
3703 ppc440spe_chan_run(chan); in ppc440spe_chan_start_null_xor()
3707 chan->device->id); in ppc440spe_chan_start_null_xor()
3708 spin_unlock_bh(&chan->lock); in ppc440spe_chan_start_null_xor()
3717 static int ppc440spe_test_raid6(struct ppc440spe_adma_chan *chan) in ppc440spe_test_raid6() argument
3732 spin_lock_bh(&chan->lock); in ppc440spe_test_raid6()
3733 sw_desc = ppc440spe_adma_alloc_slots(chan, 1, 1); in ppc440spe_test_raid6()
3738 ppc440spe_desc_set_byte_count(iter, chan, PAGE_SIZE); in ppc440spe_test_raid6()
3743 spin_unlock_bh(&chan->lock); in ppc440spe_test_raid6()
3746 spin_unlock_bh(&chan->lock); in ppc440spe_test_raid6()
3750 dma_addr = dma_map_page(chan->device->dev, pg, 0, in ppc440spe_test_raid6()
3767 ppc440spe_adma_issue_pending(&chan->common); in ppc440spe_test_raid6()
3883 struct ppc440spe_adma_chan *chan, in ppc440spe_adma_setup_irqs() argument
3915 0, dev_driver_string(adev->dev), chan); in ppc440spe_adma_setup_irqs()
3933 chan); in ppc440spe_adma_setup_irqs()
3978 free_irq(adev->irq, chan); in ppc440spe_adma_setup_irqs()
3990 struct ppc440spe_adma_chan *chan) in ppc440spe_adma_release_irqs() argument
4008 free_irq(adev->irq, chan); in ppc440spe_adma_release_irqs()
4011 free_irq(adev->err_irq, chan); in ppc440spe_adma_release_irqs()
4027 struct ppc440spe_adma_chan *chan; in ppc440spe_adma_probe() local
4146 chan = kzalloc(sizeof(*chan), GFP_KERNEL); in ppc440spe_adma_probe()
4147 if (!chan) { in ppc440spe_adma_probe()
4154 spin_lock_init(&chan->lock); in ppc440spe_adma_probe()
4155 INIT_LIST_HEAD(&chan->chain); in ppc440spe_adma_probe()
4156 INIT_LIST_HEAD(&chan->all_slots); in ppc440spe_adma_probe()
4157 chan->device = adev; in ppc440spe_adma_probe()
4158 chan->common.device = &adev->common; in ppc440spe_adma_probe()
4159 dma_cookie_init(&chan->common); in ppc440spe_adma_probe()
4160 list_add_tail(&chan->common.device_node, &adev->common.channels); in ppc440spe_adma_probe()
4161 tasklet_init(&chan->irq_tasklet, ppc440spe_adma_tasklet, in ppc440spe_adma_probe()
4162 (unsigned long)chan); in ppc440spe_adma_probe()
4168 chan->pdest_page = alloc_page(GFP_KERNEL); in ppc440spe_adma_probe()
4169 chan->qdest_page = alloc_page(GFP_KERNEL); in ppc440spe_adma_probe()
4170 if (!chan->pdest_page || in ppc440spe_adma_probe()
4171 !chan->qdest_page) { in ppc440spe_adma_probe()
4172 if (chan->pdest_page) in ppc440spe_adma_probe()
4173 __free_page(chan->pdest_page); in ppc440spe_adma_probe()
4174 if (chan->qdest_page) in ppc440spe_adma_probe()
4175 __free_page(chan->qdest_page); in ppc440spe_adma_probe()
4179 chan->pdest = dma_map_page(&ofdev->dev, chan->pdest_page, 0, in ppc440spe_adma_probe()
4181 chan->qdest = dma_map_page(&ofdev->dev, chan->qdest_page, 0, in ppc440spe_adma_probe()
4187 ref->chan = &chan->common; in ppc440spe_adma_probe()
4196 ret = ppc440spe_adma_setup_irqs(adev, chan, &initcode); in ppc440spe_adma_probe()
4212 ppc440spe_adma_release_irqs(adev, chan); in ppc440spe_adma_probe()
4215 if (chan == to_ppc440spe_adma_chan(ref->chan)) { in ppc440spe_adma_probe()
4222 dma_unmap_page(&ofdev->dev, chan->pdest, in ppc440spe_adma_probe()
4224 dma_unmap_page(&ofdev->dev, chan->qdest, in ppc440spe_adma_probe()
4226 __free_page(chan->pdest_page); in ppc440spe_adma_probe()
4227 __free_page(chan->qdest_page); in ppc440spe_adma_probe()
4230 kfree(chan); in ppc440spe_adma_probe()
4259 struct dma_chan *chan, *_chan; in ppc440spe_adma_remove() local
4268 list_for_each_entry_safe(chan, _chan, &adev->common.channels, in ppc440spe_adma_remove()
4270 ppc440spe_chan = to_ppc440spe_adma_chan(chan); in ppc440spe_adma_remove()
4284 to_ppc440spe_adma_chan(ref->chan)) { in ppc440spe_adma_remove()
4289 list_del(&chan->device_node); in ppc440spe_adma_remove()