Lines Matching +full:chan +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 1999-2000 Russell King
11 * arch/arm/kernel/dma-ebsa285.c
14 #include <linux/dma-map-ops.h>
17 #include <linux/dma-mapping.h>
44 static int isa_get_dma_residue(unsigned int chan, dma_t *dma) in isa_get_dma_residue() argument
46 unsigned int io_port = isa_dma_port[chan][ISA_DMA_COUNT]; in isa_get_dma_residue()
52 return chan < 4 ? count : (count << 1); in isa_get_dma_residue()
61 static void isa_enable_dma(unsigned int chan, dma_t *dma) in isa_enable_dma() argument
63 if (dma->invalid) { in isa_enable_dma()
68 mode = (chan & 3) | dma->dma_mode; in isa_enable_dma()
69 switch (dma->dma_mode & DMA_MODE_MASK) { in isa_enable_dma()
87 if (!dma->sg) { in isa_enable_dma()
89 * Cope with ISA-style drivers which expect cache in isa_enable_dma()
92 dma->sg = &dma->buf; in isa_enable_dma()
93 dma->sgcount = 1; in isa_enable_dma()
94 dma->buf.length = dma->count; in isa_enable_dma()
95 dma->buf.dma_address = dma_map_single(&isa_dma_dev, in isa_enable_dma()
96 dma->addr, dma->count, in isa_enable_dma()
100 address = dma->buf.dma_address; in isa_enable_dma()
101 length = dma->buf.length - 1; in isa_enable_dma()
103 outb(address >> 16, isa_dma_port[chan][ISA_DMA_PGLO]); in isa_enable_dma()
104 outb(address >> 24, isa_dma_port[chan][ISA_DMA_PGHI]); in isa_enable_dma()
106 if (chan >= 4) { in isa_enable_dma()
111 outb(0, isa_dma_port[chan][ISA_DMA_CLRFF]); in isa_enable_dma()
113 outb(address, isa_dma_port[chan][ISA_DMA_ADDR]); in isa_enable_dma()
114 outb(address >> 8, isa_dma_port[chan][ISA_DMA_ADDR]); in isa_enable_dma()
116 outb(length, isa_dma_port[chan][ISA_DMA_COUNT]); in isa_enable_dma()
117 outb(length >> 8, isa_dma_port[chan][ISA_DMA_COUNT]); in isa_enable_dma()
119 outb(mode, isa_dma_port[chan][ISA_DMA_MODE]); in isa_enable_dma()
120 dma->invalid = 0; in isa_enable_dma()
122 outb(chan & 3, isa_dma_port[chan][ISA_DMA_MASK]); in isa_enable_dma()
125 static void isa_disable_dma(unsigned int chan, dma_t *dma) in isa_disable_dma() argument
127 outb(chan | 4, isa_dma_port[chan][ISA_DMA_MASK]); in isa_disable_dma()
138 .name = "dma1",
142 .name = "dma low page",
146 .name = "dma2",
150 .name = "dma high page",
178 unsigned int chan, i; in isa_dma_init() local
180 for (chan = 0; chan < 8; chan++) { in isa_dma_init()
181 isa_dma[chan].d_ops = &isa_dma_ops; in isa_dma_init()
182 isa_disable_dma(chan, NULL); in isa_dma_init()
216 for (chan = 0; chan < 8; chan++) { in isa_dma_init()
217 int ret = isa_dma_add(chan, &isa_dma[chan]); in isa_dma_init()
220 chan, ret); in isa_dma_init()