Lines Matching +full:4 +full:- +full:channel
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
77 /* high byte of address is stored in this port for i-th dma channel */
81 * Setup a DMA channel's bounce buffer.
90 panic("isa_dma_init: channel out of range"); in isa_dma_init()
104 1ul, chan & 4 ? 0x20000ul : 0x10000ul); in isa_dma_init()
112 * If a DMA channel is shared, both drivers have to call isa_dma_init in isa_dma_init()
134 * Register a DMA channel's usage. Usually called from a device driver
142 panic("isa_dma_acquire: channel out of range"); in isa_dma_acquire()
147 printf("isa_dma_acquire: channel %d already in use\n", chan); in isa_dma_acquire()
159 * Unregister a DMA channel's usage. Usually called from a device driver
167 panic("isa_dma_release: channel out of range"); in isa_dma_release()
171 printf("isa_dma_release: channel %d not in use\n", chan); in isa_dma_release()
193 * isa_dmacascade(): program 8237 DMA controller channel to accept
201 panic("isa_dmacascade: channel out of range"); in isa_dmacascade()
205 /* set dma channel mode, and set dma channel mode */ in isa_dmacascade()
206 if ((chan & 4) == 0) { in isa_dmacascade()
217 * isa_dmastart(): program 8237 DMA controller channel, avoid page alignment
232 panic("isa_dmastart: channel out of range"); in isa_dmastart()
234 if ((chan < 4 && nbytes > (1<<16)) in isa_dmastart()
235 || (chan >= 4 && (nbytes > (1<<17) || (uintptr_t)addr & 1))) in isa_dmastart()
240 printf("isa_dmastart: channel %d not acquired\n", chan); in isa_dmastart()
252 printf("isa_dmastart: channel %d busy\n", chan); in isa_dmastart()
279 if ((chan & 4) == 0) { in isa_dmastart()
284 /* set dma channel mode, and reset address ff */ in isa_dmastart()
307 outb(waport + 1, --nbytes); in isa_dmastart()
310 /* unmask channel */ in isa_dmastart()
314 * Program one of DMA channels 4..7. These are in isa_dmastart()
317 /* set dma channel mode, and reset address ff */ in isa_dmastart()
334 waport = DMA2_CHN(chan - 4); in isa_dmastart()
341 outb(waport + 2, --nbytes); in isa_dmastart()
344 /* unmask channel */ in isa_dmastart()
355 panic("isa_dmadone: channel out of range"); in isa_dmadone()
358 printf("isa_dmadone: channel %d not acquired\n", chan); in isa_dmadone()
364 printf("isa_dmadone: channel %d not busy\n", chan); in isa_dmadone()
367 outb(chan & 4 ? DMA2_SMSK : DMA1_SMSK, (chan & 3) | 4); in isa_dmadone()
382 * (non-contiguous physical pages, outside of bus address space,
392 u_int dma_pgmsk = (chan & 4) ? ~(128*1024-1) : ~(64*1024-1); in isa_dmarangecheck()
414 * Query the progress of a transfer on a DMA channel.
427 * - read low1
429 * - read high1
431 * - read low2
433 * - read high2
442 * or -1 if the channel requested is not active.
454 /* channel active? */ in isa_dmastatus_locked()
456 printf("isa_dmastatus: channel %d not active\n", chan); in isa_dmastatus_locked()
457 return(-1); in isa_dmastatus_locked()
459 /* channel busy? */ in isa_dmastatus_locked()
464 return -2 ; in isa_dmastatus_locked()
466 if (chan < 4) { /* low DMA controller */ in isa_dmastatus_locked()
471 waport = DMA2_CHN(chan - 4) + 2; in isa_dmastatus_locked()
494 if (chan >= 4) /* high channels move words */ in isa_dmastatus_locked()
518 if (chan < 4) in isa_dmatc()
534 printf("isa_dmastop: channel %d not acquired\n", chan); in isa_dmastop()
540 return -2 ; in isa_dmastop()
543 if ((chan & 4) == 0) { in isa_dmastop()
544 outb(DMA1_SMSK, (chan & 3) | 4 /* disable mask */); in isa_dmastop()
546 outb(DMA2_SMSK, (chan & 3) | 4 /* disable mask */); in isa_dmastop()