summaryrefslogtreecommitdiffstats
path: root/include/asm-alpha/dma.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
committer <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
commitbeb116954b9b7f3bb56412b2494b562f02b864b1 (patch)
tree120e997879884e1b9d93b265221b939d2ef1ade1 /include/asm-alpha/dma.h
parent908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff)
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'include/asm-alpha/dma.h')
-rw-r--r--include/asm-alpha/dma.h24
1 files changed, 20 insertions, 4 deletions
diff --git a/include/asm-alpha/dma.h b/include/asm-alpha/dma.h
index 4b327266d..b5c3c1c7c 100644
--- a/include/asm-alpha/dma.h
+++ b/include/asm-alpha/dma.h
@@ -18,6 +18,8 @@
#ifndef _ASM_DMA_H
#define _ASM_DMA_H
+#include <linux/config.h>
+
#include <asm/io.h> /* need byte IO */
#define dma_outb outb
@@ -73,8 +75,23 @@
#define MAX_DMA_CHANNELS 8
-/* The maximum address that we can perform a DMA transfer to on this platform */
-#define MAX_DMA_ADDRESS 0x1000000
+#ifdef CONFIG_ALPHA_XL
+/* The maximum address that we can perform a DMA transfer to on Alpha XL,
+ due to a hardware SIO (PCI<->ISA bus bridge) chip limitation, is 64MB.
+ See <asm/apecs.h> for more info.
+*/
+/* NOTE: we must define the maximum as something less than 64Mb, to prevent
+ virt_to_bus() from returning an address in the first window, for a
+ data area that goes beyond the 64Mb first DMA window. Sigh...
+ We MUST coordinate the maximum with <asm/apecs.h> for consistency.
+ For now, this limit is set to 48Mb...
+*/
+#define MAX_DMA_ADDRESS (0xfffffc0003000000UL)
+#else /* CONFIG_ALPHA_XL */
+/* The maximum address that we can perform a DMA transfer to on normal
+ Alpha platforms */
+#define MAX_DMA_ADDRESS (~0UL)
+#endif /* CONFIG_ALPHA_XL */
/* 8237 DMA controllers */
#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */
@@ -294,8 +311,7 @@ static __inline__ int get_dma_residue(unsigned int dmanr)
/* These are in kernel/dma.c: */
-extern int request_dma(unsigned int dmanr, char * device_id); /* reserve a DMA channel */
+extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */
extern void free_dma(unsigned int dmanr); /* release it again */
-
#endif /* _ASM_DMA_H */