14 #ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER
15 #define dma_outb outb_p
70 #define MAX_DMA_CHANNELS 8
73 #define MAX_DMA_PFN ((16 * 1024 * 1024) >> PAGE_SHIFT)
76 #define MAX_DMA32_PFN ((4UL * 1024 * 1024 * 1024) >> PAGE_SHIFT)
80 #define MAX_DMA_ADDRESS (PAGE_OFFSET + 0x1000000)
83 #define MAX_DMA_ADDRESS ((unsigned long)__va(MAX_DMA_PFN << PAGE_SHIFT))
87 #define IO_DMA1_BASE 0x00
88 #define IO_DMA2_BASE 0xC0
91 #define DMA1_CMD_REG 0x08
92 #define DMA1_STAT_REG 0x08
93 #define DMA1_REQ_REG 0x09
94 #define DMA1_MASK_REG 0x0A
95 #define DMA1_MODE_REG 0x0B
96 #define DMA1_CLEAR_FF_REG 0x0C
97 #define DMA1_TEMP_REG 0x0D
98 #define DMA1_RESET_REG 0x0D
99 #define DMA1_CLR_MASK_REG 0x0E
100 #define DMA1_MASK_ALL_REG 0x0F
102 #define DMA2_CMD_REG 0xD0
103 #define DMA2_STAT_REG 0xD0
104 #define DMA2_REQ_REG 0xD2
105 #define DMA2_MASK_REG 0xD4
106 #define DMA2_MODE_REG 0xD6
107 #define DMA2_CLEAR_FF_REG 0xD8
108 #define DMA2_TEMP_REG 0xDA
109 #define DMA2_RESET_REG 0xDA
110 #define DMA2_CLR_MASK_REG 0xDC
111 #define DMA2_MASK_ALL_REG 0xDE
113 #define DMA_ADDR_0 0x00
114 #define DMA_ADDR_1 0x02
115 #define DMA_ADDR_2 0x04
116 #define DMA_ADDR_3 0x06
117 #define DMA_ADDR_4 0xC0
118 #define DMA_ADDR_5 0xC4
119 #define DMA_ADDR_6 0xC8
120 #define DMA_ADDR_7 0xCC
122 #define DMA_CNT_0 0x01
123 #define DMA_CNT_1 0x03
124 #define DMA_CNT_2 0x05
125 #define DMA_CNT_3 0x07
126 #define DMA_CNT_4 0xC2
127 #define DMA_CNT_5 0xC6
128 #define DMA_CNT_6 0xCA
129 #define DMA_CNT_7 0xCE
131 #define DMA_PAGE_0 0x87
132 #define DMA_PAGE_1 0x83
133 #define DMA_PAGE_2 0x81
134 #define DMA_PAGE_3 0x82
135 #define DMA_PAGE_5 0x8B
136 #define DMA_PAGE_6 0x89
137 #define DMA_PAGE_7 0x8A
140 #define DMA_MODE_READ 0x44
142 #define DMA_MODE_WRITE 0x48
144 #define DMA_MODE_CASCADE 0xC0
146 #define DMA_AUTOINIT 0x10
149 #ifdef CONFIG_ISA_DMA_API
161 spin_unlock_irqrestore(&dma_spin_lock, flags);
166 static inline void enable_dma(
unsigned int dmanr)
189 static inline void clear_dma_ff(
unsigned int dmanr)
211 static inline void set_dma_page(
unsigned int dmanr,
char pagenr)
242 static inline void set_dma_addr(
unsigned int dmanr,
unsigned int a)
291 unsigned short count;
293 io_port = (dmanr <= 3) ? ((dmanr & 3) << 1) + 1 +
IO_DMA1_BASE
297 count +=
dma_inb(io_port) << 8;
299 return (dmanr <= 3) ? count : (count << 1);
304 #ifdef CONFIG_ISA_DMA_API
306 extern void free_dma(
unsigned int dmanr);
314 #define isa_dma_bridge_buggy (0)