Lines Matching refs:chan

67 static int isa_dmarangecheck(caddr_t va, u_int length, int chan);
87 isa_dma_init(int chan, u_int bouncebufsize, int flag)
92 if (chan & ~VALID_DMA_MASK)
94 if (dma_bouncebuf[chan] != NULL)
102 if (isa_dmarangecheck(buf, bouncebufsize, chan) != 0) {
110 1ul, chan & 4 ? 0x20000ul : 0x10000ul);
118 dma_bouncebufsize[chan] = bouncebufsize;
119 dma_bouncebuf[chan] = buf;
131 isa_dma_acquire(chan)
132 int chan;
135 if (chan & ~VALID_DMA_MASK)
140 if (dma_inuse & (1 << chan)) {
141 printf("isa_dma_acquire: channel %d already in use\n", chan);
145 dma_inuse |= (1 << chan);
146 dma_auto_mode &= ~(1 << chan);
157 isa_dma_release(chan)
158 int chan;
161 if (chan & ~VALID_DMA_MASK)
165 if ((dma_inuse & (1 << chan)) == 0)
166 printf("isa_dma_release: channel %d not in use\n", chan);
171 if (dma_busy & (1 << chan)) {
172 dma_busy &= ~(1 << chan);
174 * XXX We should also do "dma_bounced &= (1 << chan);"
181 dma_inuse &= ~(1 << chan);
182 dma_auto_mode &= ~(1 << chan);
192 isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
201 dma_range_checked = isa_dmarangecheck(addr, nbytes, chan);
204 if (chan & ~VALID_DMA_MASK)
207 if ((chan < 4 && nbytes > (1<<16))
208 || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
212 if ((dma_inuse & (1 << chan)) == 0)
213 printf("isa_dmastart: channel %d not acquired\n", chan);
224 if (dma_busy & (1 << chan))
225 printf("isa_dmastart: channel %d busy\n", chan);
228 dma_busy |= (1 << chan);
231 if (dma_bouncebuf[chan] == NULL
232 || dma_bouncebufsize[chan] < nbytes)
234 dma_bounced |= (1 << chan);
235 newaddr = dma_bouncebuf[chan];
244 dma_auto_mode |= (1 << chan);
246 dma_auto_mode &= ~(1 << chan);
257 outb(DMA1_MODE, DMA37MD_AUTO|DMA37MD_WRITE|chan);
259 outb(DMA1_MODE, DMA37MD_AUTO|DMA37MD_READ|chan);
262 outb(DMA1_MODE, DMA37MD_SINGLE|DMA37MD_WRITE|chan);
264 outb(DMA1_MODE, DMA37MD_SINGLE|DMA37MD_READ|chan);
269 waport = DMA1_CHN(chan);
272 outb(dmapageport[chan], phys>>16);
279 outb(DMA1_SMSK, chan);
285 isa_dmadone(int flags, caddr_t addr, int nbytes, int chan)
295 if (chan & ~VALID_DMA_MASK)
298 if ((dma_inuse & (1 << chan)) == 0)
299 printf("isa_dmadone: channel %d not acquired\n", chan);
303 if (((dma_busy & (1 << chan)) == 0) &&
304 (dma_auto_mode & (1 << chan)) == 0 )
305 printf("isa_dmadone: channel %d not busy\n", chan);
307 if ((dma_auto_mode & (1 << chan)) == 0)
308 outb(DMA1_SMSK, (chan & 3) | 4);
310 if (dma_bounced & (1 << chan)) {
313 bcopy(dma_bouncebuf[chan], addr, nbytes);
315 dma_bounced &= ~(1 << chan);
317 dma_busy &= ~(1 << chan);
329 isa_dmarangecheck(caddr_t va, u_int length, int chan)
333 u_int dma_pgmsk = (chan & 4) ? ~(128*1024-1) : ~(64*1024-1);
392 isa_dmastatus_locked(int chan)
401 if ((dma_inuse & (1 << chan)) == 0) {
402 printf("isa_dmastatus: channel %d not active\n", chan);
407 if (((dma_busy & (1 << chan)) == 0) &&
408 (dma_auto_mode & (1 << chan)) == 0 ) {
409 printf("chan %d not busy\n", chan);
413 waport = DMA1_CHN(chan) + 2;
435 if (chan >= 4) /* high channels move words */
441 isa_dmastatus(int chan)
446 status = isa_dmastatus_locked(chan);
456 isa_dmatc(int chan)
459 return(inb(DMA1_STATUS) & (1 << chan));
466 isa_dmastop(int chan)
471 if ((dma_inuse & (1 << chan)) == 0)
472 printf("isa_dmastop: channel %d not acquired\n", chan);
474 if (((dma_busy & (1 << chan)) == 0) &&
475 ((dma_auto_mode & (1 << chan)) == 0)) {
476 printf("chan %d not busy\n", chan);
481 if ((chan & 4) == 0)
482 outb(DMA1_SMSK, (chan & 3) | 4 /* disable mask */);
484 status = isa_dmastatus_locked(chan);