diff options
author | ache <ache@FreeBSD.org> | 1994-12-24 13:24:02 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1994-12-24 13:24:02 +0000 |
commit | 20972dda4e6cd19159068700890b131db2c7e5e3 (patch) | |
tree | edc340b7b74cfe60ec6b7bec5e84d686eb7652b1 /sys/i386/isa | |
parent | 5c7e2d5f0ebb03a8160b655e10491429e3edd237 (diff) | |
download | FreeBSD-src-20972dda4e6cd19159068700890b131db2c7e5e3.zip FreeBSD-src-20972dda4e6cd19159068700890b131db2c7e5e3.tar.gz |
Merge several probe diagnostics into one.
Adjust for newer model for all non-LUxxx too.
FLAGS status register names cleanup
Diffstat (limited to 'sys/i386/isa')
-rw-r--r-- | sys/i386/isa/mcd.c | 36 | ||||
-rw-r--r-- | sys/i386/isa/mcdreg.h | 11 |
2 files changed, 20 insertions, 27 deletions
diff --git a/sys/i386/isa/mcd.c b/sys/i386/isa/mcd.c index b7d5aeb..de5b9c6 100644 --- a/sys/i386/isa/mcd.c +++ b/sys/i386/isa/mcd.c @@ -40,7 +40,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: mcd.c,v 1.33 1994/12/21 15:12:41 ache Exp $ + * $Id: mcd.c,v 1.34 1994/12/21 15:17:59 ache Exp $ */ static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; @@ -626,10 +626,9 @@ twiddle_thumbs(int port, int unit, int count, char *whine) int i; for (i = 0; i < count; i++) { - if (!(inb(port+MCD_FLAGS) & MCD_ST_BUSY)) { + if (!(inb(port+MCD_FLAGS) & MFL_STATUS_NOT_AVAIL)) return 1; } - } printf("mcd%d: timeout %s\n", unit, whine); return 0; } @@ -677,12 +676,9 @@ mcd_probe(struct isa_device *dev) } if (stbytes[1] == stbytes[2]) return 0; - printf("mcd%d: version information is %c %x\n", unit, - stbytes[1], stbytes[2]); - if (stbytes[2] >= 4) { + if (stbytes[2] >= 4 || stbytes[1] != 'M') { outb(port+MCD_CTRL, M_PICKLE); mcd_data[unit].flags |= MCDNEWMODEL; - printf("mcd%d: Adjusted for newer drive model\n", unit); } switch (stbytes[1]) { case 'M': @@ -707,7 +703,9 @@ mcd_probe(struct isa_device *dev) mcd_data[unit].name = "Mitsumi ???"; break; } - printf("mcd%d: type %s\n", unit, mcd_data[unit].name); + printf("mcd%d: type %s, version info: %c %x\n", unit, mcd_data[unit].name, + stbytes[1], stbytes[2]); + return 4; } @@ -717,9 +715,9 @@ mcd_waitrdy(int port,int dly) { int i; - /* wait until xfer port senses data ready */ + /* wait until flag port senses status ready */ for (i=0; i<dly; i+=MIN_DELAY) { - if ((inb(port+mcd_xfer) & MCD_ST_BUSY)==0) + if (!(inb(port+MCD_FLAGS) & MFL_STATUS_NOT_AVAIL)) return 0; DELAY(MIN_DELAY); } @@ -927,7 +925,7 @@ loop: case MCD_S_WAITSTAT: untimeout((timeout_func_t)mcd_doread,(caddr_t)MCD_S_WAITSTAT); if (mbx->count-- >= 0) { - if (inb(port+mcd_xfer) & MCD_ST_BUSY) { + if (inb(port+MCD_FLAGS) & MFL_STATUS_NOT_AVAIL) { timeout((timeout_func_t)mcd_doread, (caddr_t)MCD_S_WAITSTAT,hz/100); /* XXX */ return; @@ -976,7 +974,7 @@ loop: printf("mcd%d: timeout set mode\n",unit); goto readerr; } - if (inb(port+mcd_xfer) & MCD_ST_BUSY) { + if (inb(port+MCD_FLAGS) & MFL_STATUS_NOT_AVAIL) { timeout((timeout_func_t)mcd_doread,(caddr_t)MCD_S_WAITMODE,hz/100); return; } @@ -1014,8 +1012,8 @@ nextblock: /* Spin briefly (<= 2ms) to avoid missing next block */ for (i = 0; i < 20; i++) { - k = inb(port+mcd_xfer); - if (!(k & 2)) + k = inb(port+MCD_FLAGS); + if (!(k & MFL_DATA_NOT_AVAIL)) goto got_it; DELAY(100); } @@ -1027,8 +1025,8 @@ nextblock: case MCD_S_WAITREAD: untimeout((timeout_func_t)mcd_doread,(caddr_t)MCD_S_WAITREAD); if (mbx->count-- > 0) { - k = inb(port+mcd_xfer); - if (!(k & 2)) { /* XXX */ + k = inb(port+MCD_FLAGS); + if (!(k & MFL_DATA_NOT_AVAIL)) { /* XXX */ MCD_TRACE("got data delay=%d\n", RDELAY_WAITREAD-mbx->count,0,0,0); got_it: @@ -1040,9 +1038,9 @@ nextblock: *addr++ = inb(data_port); outb(port+mcd_ctl2,0x0c); /* XXX */ - k = inb(port+mcd_xfer); + k = inb(port+MCD_FLAGS); /* If we still have some junk, read it too */ - if (!(k & 2)) { + if (!(k & MFL_DATA_NOT_AVAIL)) { outb(port+mcd_ctl2,0x04); /* XXX */ (void)inb(data_port); (void)inb(data_port); @@ -1062,7 +1060,7 @@ nextblock: mcd_start(mbx->unit); return; } - if (!(k & MCD_ST_BUSY)) { + if (!(k & MFL_STATUS_NOT_AVAIL)) { cd->status = inb(port+mcd_status) & 0xFF; if (mcd_setflags(unit,cd) < 0) goto changed; diff --git a/sys/i386/isa/mcdreg.h b/sys/i386/isa/mcdreg.h index de5ab81..88ae7e3 100644 --- a/sys/i386/isa/mcdreg.h +++ b/sys/i386/isa/mcdreg.h @@ -41,7 +41,7 @@ * the manufacturer or anyone else might provide better documentation, * so this file (and the driver) will then have a better quality. * - * $Id: mcdreg.h,v 1.4 1994/09/03 16:48:13 ache Exp $ + * $Id: mcdreg.h,v 1.5 1994/11/12 13:26:13 ache Exp $ */ #ifndef MCD_H @@ -66,7 +66,6 @@ typedef unsigned char bcd_t; #define mcd_rdata 0 #define mcd_reset 1 -#define mcd_xfer 1 #define mcd_ctl2 2 /* XXX Is this right? */ #define mcd_config 3 @@ -78,12 +77,8 @@ typedef unsigned char bcd_t; /* 100 = int 10 */ /* 101 = int 11 */ /* flags */ -#define STATUS_AVAIL 0xB -#define DATA_AVAIL 0xF - -/* New Flags */ -#define M_STATUS_AVAIL 0xFB -#define M_DATA_AVAIL 0xFD +#define MFL_DATA_NOT_AVAIL 0x02 +#define MFL_STATUS_NOT_AVAIL 0x04 /* New Commands */ #define M_RESET 0x00 |