Lines Matching refs:re_chan

89 	struct fsl_re_chan *re_chan;  in fsl_re_tx_submit()  local
94 re_chan = container_of(tx->chan, struct fsl_re_chan, chan); in fsl_re_tx_submit()
96 spin_lock_irqsave(&re_chan->desc_lock, flags); in fsl_re_tx_submit()
98 list_add_tail(&desc->node, &re_chan->submit_q); in fsl_re_tx_submit()
99 spin_unlock_irqrestore(&re_chan->desc_lock, flags); in fsl_re_tx_submit()
107 struct fsl_re_chan *re_chan; in fsl_re_issue_pending() local
112 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_issue_pending()
114 spin_lock_irqsave(&re_chan->desc_lock, flags); in fsl_re_issue_pending()
116 in_be32(&re_chan->jrregs->inbring_slot_avail)); in fsl_re_issue_pending()
118 list_for_each_entry_safe(desc, _desc, &re_chan->submit_q, node) { in fsl_re_issue_pending()
122 list_move_tail(&desc->node, &re_chan->active_q); in fsl_re_issue_pending()
124 memcpy(&re_chan->inb_ring_virt_addr[re_chan->inb_count], in fsl_re_issue_pending()
127 re_chan->inb_count = (re_chan->inb_count + 1) & in fsl_re_issue_pending()
129 out_be32(&re_chan->jrregs->inbring_add_job, FSL_RE_ADD_JOB(1)); in fsl_re_issue_pending()
132 spin_unlock_irqrestore(&re_chan->desc_lock, flags); in fsl_re_issue_pending()
142 static void fsl_re_cleanup_descs(struct fsl_re_chan *re_chan) in fsl_re_cleanup_descs() argument
147 spin_lock_irqsave(&re_chan->desc_lock, flags); in fsl_re_cleanup_descs()
148 list_for_each_entry_safe(desc, _desc, &re_chan->ack_q, node) { in fsl_re_cleanup_descs()
150 list_move_tail(&desc->node, &re_chan->free_q); in fsl_re_cleanup_descs()
152 spin_unlock_irqrestore(&re_chan->desc_lock, flags); in fsl_re_cleanup_descs()
154 fsl_re_issue_pending(&re_chan->chan); in fsl_re_cleanup_descs()
159 struct fsl_re_chan *re_chan = from_tasklet(re_chan, t, irqtask); in fsl_re_dequeue() local
166 fsl_re_cleanup_descs(re_chan); in fsl_re_dequeue()
168 spin_lock_irqsave(&re_chan->desc_lock, flags); in fsl_re_dequeue()
169 count = FSL_RE_SLOT_FULL(in_be32(&re_chan->jrregs->oubring_slot_full)); in fsl_re_dequeue()
172 hwdesc = &re_chan->oub_ring_virt_addr[re_chan->oub_count]; in fsl_re_dequeue()
173 list_for_each_entry_safe(desc, _desc, &re_chan->active_q, in fsl_re_dequeue()
185 list_move_tail(&desc->node, &re_chan->ack_q); in fsl_re_dequeue()
187 dev_err(re_chan->dev, in fsl_re_dequeue()
191 oub_count = (re_chan->oub_count + 1) & FSL_RE_RING_SIZE_MASK; in fsl_re_dequeue()
192 re_chan->oub_count = oub_count; in fsl_re_dequeue()
194 out_be32(&re_chan->jrregs->oubring_job_rmvd, in fsl_re_dequeue()
197 spin_unlock_irqrestore(&re_chan->desc_lock, flags); in fsl_re_dequeue()
203 struct fsl_re_chan *re_chan; in fsl_re_isr() local
206 re_chan = dev_get_drvdata((struct device *)data); in fsl_re_isr()
208 irqstate = in_be32(&re_chan->jrregs->jr_interrupt_status); in fsl_re_isr()
218 status = in_be32(&re_chan->jrregs->jr_status); in fsl_re_isr()
219 dev_err(re_chan->dev, "chan error irqstate: %x, status: %x\n", in fsl_re_isr()
224 out_be32(&re_chan->jrregs->jr_interrupt_status, FSL_RE_CLR_INTR); in fsl_re_isr()
226 tasklet_schedule(&re_chan->irqtask); in fsl_re_isr()
249 static struct fsl_re_desc *fsl_re_init_desc(struct fsl_re_chan *re_chan, in fsl_re_init_desc() argument
253 desc->re_chan = re_chan; in fsl_re_init_desc()
255 dma_async_tx_descriptor_init(&desc->async_tx, &re_chan->chan); in fsl_re_init_desc()
270 static struct fsl_re_desc *fsl_re_chan_alloc_desc(struct fsl_re_chan *re_chan, in fsl_re_chan_alloc_desc() argument
278 fsl_re_cleanup_descs(re_chan); in fsl_re_chan_alloc_desc()
280 spin_lock_irqsave(&re_chan->desc_lock, lock_flag); in fsl_re_chan_alloc_desc()
281 if (!list_empty(&re_chan->free_q)) { in fsl_re_chan_alloc_desc()
283 desc = list_first_entry(&re_chan->free_q, in fsl_re_chan_alloc_desc()
289 spin_unlock_irqrestore(&re_chan->desc_lock, lock_flag); in fsl_re_chan_alloc_desc()
296 cf = dma_pool_alloc(re_chan->re_dev->cf_desc_pool, GFP_NOWAIT, in fsl_re_chan_alloc_desc()
303 desc = fsl_re_init_desc(re_chan, desc, cf, paddr); in fsl_re_chan_alloc_desc()
306 spin_lock_irqsave(&re_chan->desc_lock, lock_flag); in fsl_re_chan_alloc_desc()
307 re_chan->alloc_count++; in fsl_re_chan_alloc_desc()
308 spin_unlock_irqrestore(&re_chan->desc_lock, lock_flag); in fsl_re_chan_alloc_desc()
319 struct fsl_re_chan *re_chan; in fsl_re_prep_dma_genq() local
328 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_prep_dma_genq()
330 dev_err(re_chan->dev, "genq tx length %zu, max length %d\n", in fsl_re_prep_dma_genq()
335 desc = fsl_re_chan_alloc_desc(re_chan, flags); in fsl_re_prep_dma_genq()
406 struct fsl_re_chan *re_chan; in fsl_re_prep_dma_pq() local
415 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_prep_dma_pq()
417 dev_err(re_chan->dev, "pq tx length is %zu, max length is %d\n", in fsl_re_prep_dma_pq()
459 desc = fsl_re_chan_alloc_desc(re_chan, flags); in fsl_re_prep_dma_pq()
508 dev_err(re_chan->dev, "PQ tx continuation error!\n"); in fsl_re_prep_dma_pq()
528 struct fsl_re_chan *re_chan; in fsl_re_prep_dma_memcpy() local
535 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_prep_dma_memcpy()
538 dev_err(re_chan->dev, "cp tx length is %zu, max length is %d\n", in fsl_re_prep_dma_memcpy()
543 desc = fsl_re_chan_alloc_desc(re_chan, flags); in fsl_re_prep_dma_memcpy()
573 struct fsl_re_chan *re_chan; in fsl_re_alloc_chan_resources() local
579 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_alloc_chan_resources()
585 cf = dma_pool_alloc(re_chan->re_dev->cf_desc_pool, GFP_KERNEL, in fsl_re_alloc_chan_resources()
593 fsl_re_init_desc(re_chan, desc, cf, paddr); in fsl_re_alloc_chan_resources()
595 list_add_tail(&desc->node, &re_chan->free_q); in fsl_re_alloc_chan_resources()
596 re_chan->alloc_count++; in fsl_re_alloc_chan_resources()
598 return re_chan->alloc_count; in fsl_re_alloc_chan_resources()
603 struct fsl_re_chan *re_chan; in fsl_re_free_chan_resources() local
606 re_chan = container_of(chan, struct fsl_re_chan, chan); in fsl_re_free_chan_resources()
607 while (re_chan->alloc_count--) { in fsl_re_free_chan_resources()
608 desc = list_first_entry(&re_chan->free_q, in fsl_re_free_chan_resources()
613 dma_pool_free(re_chan->re_dev->cf_desc_pool, desc->cf_addr, in fsl_re_free_chan_resources()
618 if (!list_empty(&re_chan->free_q)) in fsl_re_free_chan_resources()
619 dev_err(re_chan->dev, "chan resource cannot be cleaned!\n"); in fsl_re_free_chan_resources()