patch-2.1.110 linux/arch/arm/kernel/dma-a5k.c
Next file: linux/arch/arm/kernel/dma-rpc.c
Previous file: linux/arch/arm/kernel/dec21285.c
Back to the patch index
Back to the overall index
- Lines: 78
- Date:
Sat Jul 18 11:55:23 1998
- Orig file:
v2.1.109/linux/arch/arm/kernel/dma-a5k.c
- Orig date:
Fri May 8 23:14:42 1998
diff -u --recursive --new-file v2.1.109/linux/arch/arm/kernel/dma-a5k.c linux/arch/arm/kernel/dma-a5k.c
@@ -9,12 +9,15 @@
#include <linux/init.h>
#include <asm/dma.h>
+#include <asm/fiq.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/pgtable.h>
#include "dma.h"
+static struct fiq_handler fh = { "floppydma", NULL };
+
int arch_request_dma(dmach_t channel, dma_t *dma, const char *dev_id)
{
if (channel == DMA_VIRTUAL_FLOPPY)
@@ -26,13 +29,13 @@
void arch_free_dma(dmach_t channel, dma_t *dma)
{
if (channel != DMA_VIRTUAL_FLOPPY)
- printk ("arch_free_dma: invalid channel %d\n", channel);
+ printk("arch_free_dma: invalid channel %d\n", channel);
}
int arch_get_dma_residue(dmach_t channel, dma_t *dma)
{
if (channel != DMA_VIRTUAL_FLOPPY)
- printk ("arch_dma_count: invalid channel %d\n", channel);
+ printk("arch_dma_count: invalid channel %d\n", channel);
else {
extern int floppy_fiqresidual(void);
return floppy_fiqresidual();
@@ -43,11 +46,11 @@
void arch_enable_dma(dmach_t channel, dma_t *dma)
{
if (channel != DMA_VIRTUAL_FLOPPY)
- printk ("arch_enable_dma: invalid channel %d\n", channel);
+ printk("arch_enable_dma: invalid channel %d\n", channel);
else {
void *fiqhandler_start;
unsigned int fiqhandler_length;
- extern void floppy_fiqsetup (unsigned long len, unsigned long addr,
+ extern void floppy_fiqsetup(unsigned long len, unsigned long addr,
unsigned long port);
if (dma->dma_mode == DMA_MODE_READ) {
@@ -59,19 +62,25 @@
fiqhandler_start = &floppy_fiqout_start;
fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start;
}
- memcpy ((void *)0x1c, fiqhandler_start, fiqhandler_length);
+ if (claim_fiq(&fh)) {
+ printk("floppydma: couldn't claim FIQ.\n");
+ return;
+ }
+ memcpy((void *)0x1c, fiqhandler_start, fiqhandler_length);
flush_page_to_ram(0);
- floppy_fiqsetup (dma->buf.length, __bus_to_virt(dma->buf.address), (int)PCIO_FLOPPYDMABASE);
- enable_irq (dma->dma_irq);
+ floppy_fiqsetup(dma->buf.length, __bus_to_virt(dma->buf.address), (int)PCIO_FLOPPYDMABASE);
+ enable_irq(dma->dma_irq);
}
}
void arch_disable_dma(dmach_t channel, dma_t *dma)
{
if (channel != DMA_VIRTUAL_FLOPPY)
- printk ("arch_disable_dma: invalid channel %d\n", channel);
- else
- disable_irq (dma->dma_irq);
+ printk("arch_disable_dma: invalid channel %d\n", channel);
+ else {
+ disable_irq(dma->dma_irq);
+ release_fiq(&fh);
+ }
}
__initfunc(void arch_dma_init(dma_t *dma))
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov