diff options
-rwxr-xr-x | wcfxo.c | 3 | ||||
-rwxr-xr-x | wcfxs.c | 6 | ||||
-rwxr-xr-x | wctdm.c | 6 |
3 files changed, 15 insertions, 0 deletions
@@ -362,6 +362,9 @@ static void wcfxo_tasklet(unsigned long data) } #endif +static void wcfxo_stop_dma(struct wcfxo *wc); +static void wcfxo_start_dma(struct wcfxo *wc); + static void wcfxo_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct wcfxo *wc = dev_id; @@ -240,6 +240,9 @@ static inline void wcfxs_receiveprep(struct wcfxs *wc, unsigned char ints) static inline void wcfxs_check_hook(struct wcfxs *wc, int card); +static void wcfxs_stop_dma(struct wcfxs *wc); +static void wcfxs_start_dma(struct wcfxs *wc); + static void wcfxs_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct wcfxs *wc = dev_id; @@ -253,7 +256,10 @@ static void wcfxs_interrupt(int irq, void *dev_id, struct pt_regs *regs) return; if (ints & 0x10) { + /* Restart DMA */ printk("PCI Master abort\n"); + wcfxs_stop_dma(wc); + wcfxs_start_dma(wc); return; } @@ -240,6 +240,9 @@ static inline void wcfxs_receiveprep(struct wcfxs *wc, unsigned char ints) static inline void wcfxs_check_hook(struct wcfxs *wc, int card); +static void wcfxs_stop_dma(struct wcfxs *wc); +static void wcfxs_start_dma(struct wcfxs *wc); + static void wcfxs_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct wcfxs *wc = dev_id; @@ -253,7 +256,10 @@ static void wcfxs_interrupt(int irq, void *dev_id, struct pt_regs *regs) return; if (ints & 0x10) { + /* Restart DMA */ printk("PCI Master abort\n"); + wcfxs_stop_dma(wc); + wcfxs_start_dma(wc); return; } |