|
@@ -53,3 +53,64 @@
|
|
|
* P7 ... P0 A7 ... A0 A7 ... A0
|
|
|
* | Page | Addr MSB | Addr LSB | (DMA registers)
|
|
|
*
|
|
|
+ * Address mapping for channels 5-7:
|
|
|
+ *
|
|
|
+ * A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0 (Physical addresses)
|
|
|
+ * | ... | \ \ ... \ \ \ ... \ \
|
|
|
+ * | ... | \ \ ... \ \ \ ... \ (not used)
|
|
|
+ * | ... | \ \ ... \ \ \ ... \
|
|
|
+ * P7 ... P1 (0) A7 A6 ... A0 A7 A6 ... A0
|
|
|
+ * | Page | Addr MSB | Addr LSB | (DMA registers)
|
|
|
+ *
|
|
|
+ * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses
|
|
|
+ * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at
|
|
|
+ * the hardware level, so odd-byte transfers aren't possible).
|
|
|
+ *
|
|
|
+ * Transfer count (_not # bytes_) is limited to 64K, represented as actual
|
|
|
+ * count - 1 : 64K => 0xFFFF, 1 => 0x0000. Thus, count is always 1 or more,
|
|
|
+ * and up to 128K bytes may be transferred on channels 5-7 in one operation.
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#define MAX_DMA_CHANNELS 8
|
|
|
+
|
|
|
+/*
|
|
|
+ ISA DMA limitations on Alpha platforms,
|
|
|
+
|
|
|
+ These may be due to SIO (PCI<->ISA bridge) chipset limitation, or
|
|
|
+ just a wiring limit.
|
|
|
+*/
|
|
|
+
|
|
|
+/* The maximum address for ISA DMA transfer on Alpha XL, due to an
|
|
|
+ hardware SIO limitation, is 64MB.
|
|
|
+*/
|
|
|
+#define ALPHA_XL_MAX_ISA_DMA_ADDRESS 0x04000000UL
|
|
|
+
|
|
|
+/* The maximum address for ISA DMA transfer on RUFFIAN,
|
|
|
+ due to an hardware SIO limitation, is 16MB.
|
|
|
+*/
|
|
|
+#define ALPHA_RUFFIAN_MAX_ISA_DMA_ADDRESS 0x01000000UL
|
|
|
+
|
|
|
+/* The maximum address for ISA DMA transfer on SABLE, and some ALCORs,
|
|
|
+ due to an hardware SIO chip limitation, is 2GB.
|
|
|
+*/
|
|
|
+#define ALPHA_SABLE_MAX_ISA_DMA_ADDRESS 0x80000000UL
|
|
|
+#define ALPHA_ALCOR_MAX_ISA_DMA_ADDRESS 0x80000000UL
|
|
|
+
|
|
|
+/*
|
|
|
+ Maximum address for all the others is the complete 32-bit bus
|
|
|
+ address space.
|
|
|
+*/
|
|
|
+#define ALPHA_MAX_ISA_DMA_ADDRESS 0x100000000UL
|
|
|
+
|
|
|
+#ifdef CONFIG_ALPHA_GENERIC
|
|
|
+# define MAX_ISA_DMA_ADDRESS (alpha_mv.max_isa_dma_address)
|
|
|
+#else
|
|
|
+# if defined(CONFIG_ALPHA_XL)
|
|
|
+# define MAX_ISA_DMA_ADDRESS ALPHA_XL_MAX_ISA_DMA_ADDRESS
|
|
|
+# elif defined(CONFIG_ALPHA_RUFFIAN)
|
|
|
+# define MAX_ISA_DMA_ADDRESS ALPHA_RUFFIAN_MAX_ISA_DMA_ADDRESS
|
|
|
+# elif defined(CONFIG_ALPHA_SABLE)
|
|
|
+# define MAX_ISA_DMA_ADDRESS ALPHA_SABLE_MAX_ISA_DMA_ADDRESS
|
|
|
+# elif defined(CONFIG_ALPHA_ALCOR)
|
|
|
+# define MAX_ISA_DMA_ADDRESS ALPHA_ALCOR_MAX_ISA_DMA_ADDRESS
|