summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xwcfxo.c3
-rwxr-xr-xwcfxs.c6
-rwxr-xr-xwctdm.c6
3 files changed, 15 insertions, 0 deletions
diff --git a/wcfxo.c b/wcfxo.c
index 461fb93..945f22a 100755
--- a/wcfxo.c
+++ b/wcfxo.c
@@ -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;
diff --git a/wcfxs.c b/wcfxs.c
index a6fc753..da6cee6 100755
--- a/wcfxs.c
+++ b/wcfxs.c
@@ -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;
}
diff --git a/wctdm.c b/wctdm.c
index a6fc753..da6cee6 100755
--- a/wctdm.c
+++ b/wctdm.c
@@ -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;
}