Lines Matching refs:re_chan

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