Lines Matching +full:active +full:-

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (C) 1995-2000 Russell King
7 * Front-end to the DMA handling. This handles the allocation/freeing
38 if (!dma->d_ops) in isa_dma_add()
39 return -EINVAL; in isa_dma_add()
41 sg_init_table(&dma->buf, 1); in isa_dma_add()
44 return -EBUSY; in isa_dma_add()
62 if (xchg(&dma->lock, 1) != 0) in request_dma()
65 dma->device_id = device_id; in request_dma()
66 dma->active = 0; in request_dma()
67 dma->invalid = 1; in request_dma()
70 if (dma->d_ops->request) in request_dma()
71 ret = dma->d_ops->request(chan, dma); in request_dma()
74 xchg(&dma->lock, 0); in request_dma()
80 return -EINVAL; in request_dma()
83 return -EBUSY; in request_dma()
99 if (dma->active) { in free_dma()
100 pr_err("dma%d: freeing active DMA\n", chan); in free_dma()
101 dma->d_ops->disable(chan, dma); in free_dma()
102 dma->active = 0; in free_dma()
105 if (xchg(&dma->lock, 0) != 0) { in free_dma()
106 if (dma->d_ops->free) in free_dma()
107 dma->d_ops->free(chan, dma); in free_dma()
119 /* Set DMA Scatter-Gather list
125 if (dma->active) in set_dma_sg()
126 pr_err("dma%d: altering DMA SG while DMA active\n", chan); in set_dma_sg()
128 dma->sg = sg; in set_dma_sg()
129 dma->sgcount = nr_sg; in set_dma_sg()
130 dma->invalid = 1; in set_dma_sg()
142 if (dma->active) in __set_dma_addr()
143 pr_err("dma%d: altering DMA address while DMA active\n", chan); in __set_dma_addr()
145 dma->sg = NULL; in __set_dma_addr()
146 dma->addr = addr; in __set_dma_addr()
147 dma->invalid = 1; in __set_dma_addr()
159 if (dma->active) in set_dma_count()
160 pr_err("dma%d: altering DMA count while DMA active\n", chan); in set_dma_count()
162 dma->sg = NULL; in set_dma_count()
163 dma->count = count; in set_dma_count()
164 dma->invalid = 1; in set_dma_count()
174 if (dma->active) in set_dma_mode()
175 pr_err("dma%d: altering DMA mode while DMA active\n", chan); in set_dma_mode()
177 dma->dma_mode = mode; in set_dma_mode()
178 dma->invalid = 1; in set_dma_mode()
188 if (!dma->lock) in enable_dma()
191 if (dma->active == 0) { in enable_dma()
192 dma->active = 1; in enable_dma()
193 dma->d_ops->enable(chan, dma); in enable_dma()
209 if (!dma->lock) in disable_dma()
212 if (dma->active == 1) { in disable_dma()
213 dma->active = 0; in disable_dma()
214 dma->d_ops->disable(chan, dma); in disable_dma()
225 * Is the specified DMA channel active?
230 return dma->active; in dma_channel_active()
245 if (dma->d_ops->setspeed) in set_dma_speed()
246 ret = dma->d_ops->setspeed(chan, dma, cycle_ns); in set_dma_speed()
247 dma->speed = ret; in set_dma_speed()
256 if (dma->d_ops->residue) in get_dma_residue()
257 ret = dma->d_ops->residue(chan, dma); in get_dma_residue()
270 if (dma && dma->lock) in proc_dma_show()
271 seq_printf(m, "%2d: %s\n", i, dma->device_id); in proc_dma_show()