Lines Matching refs:re_chan

90 	struct fsl_re_chan *re_chan;
95 re_chan = container_of(tx->chan, struct fsl_re_chan, chan);
97 spin_lock_irqsave(&re_chan->desc_lock, flags);
99 list_add_tail(&desc->node, &re_chan->submit_q);
100 spin_unlock_irqrestore(&re_chan->desc_lock, flags);
108 struct fsl_re_chan *re_chan;
113 re_chan = container_of(chan, struct fsl_re_chan, chan);
115 spin_lock_irqsave(&re_chan->desc_lock, flags);
117 in_be32(&re_chan->jrregs->inbring_slot_avail));
119 list_for_each_entry_safe(desc, _desc, &re_chan->submit_q, node) {
123 list_move_tail(&desc->node, &re_chan->active_q);
125 memcpy(&re_chan->inb_ring_virt_addr[re_chan->inb_count],
128 re_chan->inb_count = (re_chan->inb_count + 1) &
130 out_be32(&re_chan->jrregs->inbring_add_job, FSL_RE_ADD_JOB(1));
133 spin_unlock_irqrestore(&re_chan->desc_lock, flags);
143 static void fsl_re_cleanup_descs(struct fsl_re_chan *re_chan)
148 spin_lock_irqsave(&re_chan->desc_lock, flags);
149 list_for_each_entry_safe(desc, _desc, &re_chan->ack_q, node) {
151 list_move_tail(&desc->node, &re_chan->free_q);
153 spin_unlock_irqrestore(&re_chan->desc_lock, flags);
155 fsl_re_issue_pending(&re_chan->chan);
160 struct fsl_re_chan *re_chan = from_tasklet(re_chan, t, irqtask);
167 fsl_re_cleanup_descs(re_chan);
169 spin_lock_irqsave(&re_chan->desc_lock, flags);
170 count = FSL_RE_SLOT_FULL(in_be32(&re_chan->jrregs->oubring_slot_full));
173 hwdesc = &re_chan->oub_ring_virt_addr[re_chan->oub_count];
174 list_for_each_entry_safe(desc, _desc, &re_chan->active_q,
186 list_move_tail(&desc->node, &re_chan->ack_q);
188 dev_err(re_chan->dev,
192 oub_count = (re_chan->oub_count + 1) & FSL_RE_RING_SIZE_MASK;
193 re_chan->oub_count = oub_count;
195 out_be32(&re_chan->jrregs->oubring_job_rmvd,
198 spin_unlock_irqrestore(&re_chan->desc_lock, flags);
204 struct fsl_re_chan *re_chan;
207 re_chan = dev_get_drvdata((struct device *)data);
209 irqstate = in_be32(&re_chan->jrregs->jr_interrupt_status);
219 status = in_be32(&re_chan->jrregs->jr_status);
220 dev_err(re_chan->dev, "chan error irqstate: %x, status: %x\n",
225 out_be32(&re_chan->jrregs->jr_interrupt_status, FSL_RE_CLR_INTR);
227 tasklet_schedule(&re_chan->irqtask);
250 static struct fsl_re_desc *fsl_re_init_desc(struct fsl_re_chan *re_chan,
254 desc->re_chan = re_chan;
256 dma_async_tx_descriptor_init(&desc->async_tx, &re_chan->chan);
271 static struct fsl_re_desc *fsl_re_chan_alloc_desc(struct fsl_re_chan *re_chan,
279 fsl_re_cleanup_descs(re_chan);
281 spin_lock_irqsave(&re_chan->desc_lock, lock_flag);
282 if (!list_empty(&re_chan->free_q)) {
284 desc = list_first_entry(&re_chan->free_q,
290 spin_unlock_irqrestore(&re_chan->desc_lock, lock_flag);
297 cf = dma_pool_alloc(re_chan->re_dev->cf_desc_pool, GFP_NOWAIT,
304 desc = fsl_re_init_desc(re_chan, desc, cf, paddr);
307 spin_lock_irqsave(&re_chan->desc_lock, lock_flag);
308 re_chan->alloc_count++;
309 spin_unlock_irqrestore(&re_chan->desc_lock, lock_flag);
320 struct fsl_re_chan *re_chan;
329 re_chan = container_of(chan, struct fsl_re_chan, chan);
331 dev_err(re_chan->dev, "genq tx length %zu, max length %d\n",
336 desc = fsl_re_chan_alloc_desc(re_chan, flags);
407 struct fsl_re_chan *re_chan;
416 re_chan = container_of(chan, struct fsl_re_chan, chan);
418 dev_err(re_chan->dev, "pq tx length is %zu, max length is %d\n",
460 desc = fsl_re_chan_alloc_desc(re_chan, flags);
509 dev_err(re_chan->dev, "PQ tx continuation error!\n");
529 struct fsl_re_chan *re_chan;
536 re_chan = container_of(chan, struct fsl_re_chan, chan);
539 dev_err(re_chan->dev, "cp tx length is %zu, max length is %d\n",
544 desc = fsl_re_chan_alloc_desc(re_chan, flags);
574 struct fsl_re_chan *re_chan;
580 re_chan = container_of(chan, struct fsl_re_chan, chan);
586 cf = dma_pool_alloc(re_chan->re_dev->cf_desc_pool, GFP_KERNEL,
594 fsl_re_init_desc(re_chan, desc, cf, paddr);
596 list_add_tail(&desc->node, &re_chan->free_q);
597 re_chan->alloc_count++;
599 return re_chan->alloc_count;
604 struct fsl_re_chan *re_chan;
607 re_chan = container_of(chan, struct fsl_re_chan, chan);
608 while (re_chan->alloc_count--) {
609 desc = list_first_entry(&re_chan->free_q,
614 dma_pool_free(re_chan->re_dev->cf_desc_pool, desc->cf_addr,
619 if (!list_empty(&re_chan->free_q))
620 dev_err(re_chan->dev, "chan resource cannot be cleaned!\n");