From 16865d719af5d1e50dc62045be5635ee50ebb8ba Mon Sep 17 00:00:00 2001 From: briggs Date: Tue, 15 Apr 1997 03:22:50 +0000 Subject: [PATCH] Take a stab at making this more reliable. --- sys/arch/mac68k/dev/mac68k5380.c | 38 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/sys/arch/mac68k/dev/mac68k5380.c b/sys/arch/mac68k/dev/mac68k5380.c index a5ae9ab75e38..93e28b72d7f6 100644 --- a/sys/arch/mac68k/dev/mac68k5380.c +++ b/sys/arch/mac68k/dev/mac68k5380.c @@ -1,4 +1,4 @@ -/* $NetBSD: mac68k5380.c,v 1.29 1997/02/28 15:50:50 scottr Exp $ */ +/* $NetBSD: mac68k5380.c,v 1.30 1997/04/15 03:22:50 briggs Exp $ */ /* * Copyright (c) 1995 Allen Briggs @@ -430,13 +430,13 @@ extern int *nofault, mac68k_buserr_addr; long_data = (u_int32_t *) pending_5380_data; #define R4 *long_data++ = *long_drq++ - while ( count >= 64 ) { + while ( count > 64 ) { R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; R4; /* 64 */ count -= 64; } - while (count >= 4) { - R4; count -= 4; + while (count > 8) { + R4; R4; count -= 8; } #undef R4 data = (u_int8_t *) long_data; @@ -449,6 +449,12 @@ extern int *nofault, mac68k_buserr_addr; pending_5380_count -= dcount; pending_5380_data += dcount; } + /* + * OK. No bus error occurred above. Clear the nofault flag + * so we no longer short-circuit bus errors. + */ + nofault = (int *) 0; + } else { int resid; @@ -480,13 +486,14 @@ extern int *nofault, mac68k_buserr_addr; long_data = (u_int32_t *) pending_5380_data; #define W4 *long_drq++ = *long_data++ - while ( count >= 64 ) { + while ( count > 64 ) { W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; W4; /* 64 */ count -= 64; } - while (count >= 4) { - W4; count -= 4; + while ( count > 8 ) { + W4; W4; + count -= 8; } #undef W4 data = (u_int8_t *) long_data; @@ -499,22 +506,21 @@ extern int *nofault, mac68k_buserr_addr; pending_5380_count -= dcount; pending_5380_data += dcount; } + PID("write complete"); + /* + * OK. No bus error occurred above. Clear the nofault flag + * so we no longer short-circuit bus errors. + */ + nofault = (int *) 0; + drq = (volatile u_int8_t *) ncr_5380_with_drq; tmp_data = *drq; - PID("read a byte?"); - - nofault = (int *) 0; + PID("read a byte to force a phase change"); } - /* - * OK. No bus error occurred above. Clear the nofault flag - * so we no longer short-circuit bus errors. - */ - nofault = (int *) 0; - PID("end drq"); return; #else