Add a new drive flag, DRIVE_MODE, set when the drive properly reported its
PIO/DMA modes. Don't try a SET_FEATURE if it didn't report its mode.
This commit is contained in:
parent
3a86ff1e67
commit
e8322de657
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ata_wdc.c,v 1.5 1998/10/13 15:02:41 bouyer Exp $ */
|
/* $NetBSD: ata_wdc.c,v 1.6 1998/10/13 15:18:46 bouyer Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Manuel Bouyer.
|
* Copyright (c) 1998 Manuel Bouyer.
|
||||||
|
@ -586,6 +586,9 @@ again:
|
||||||
/* Don't try to set modes if controller can't be adjusted */
|
/* Don't try to set modes if controller can't be adjusted */
|
||||||
if ((chp->wdc->cap & WDC_CAPABILITY_MODE) == 0)
|
if ((chp->wdc->cap & WDC_CAPABILITY_MODE) == 0)
|
||||||
goto geometry;
|
goto geometry;
|
||||||
|
/* Also don't try if the drive didn't report its mode */
|
||||||
|
if ((drvp->drive_flags & DRIVE_MODE) == 0)
|
||||||
|
goto geometry;
|
||||||
wdccommand(chp, drvp->drive, SET_FEATURES, 0, 0, 0,
|
wdccommand(chp, drvp->drive, SET_FEATURES, 0, 0, 0,
|
||||||
0x08 | drvp->PIO_mode, WDSF_SET_MODE);
|
0x08 | drvp->PIO_mode, WDSF_SET_MODE);
|
||||||
drvp->state = PIOMODE_WAIT;
|
drvp->state = PIOMODE_WAIT;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: atavar.h,v 1.2 1998/10/12 16:09:15 bouyer Exp $ */
|
/* $NetBSD: atavar.h,v 1.3 1998/10/13 15:18:47 bouyer Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Manuel Bouyer.
|
* Copyright (c) 1998 Manuel Bouyer.
|
||||||
|
@ -45,6 +45,7 @@ struct ata_drive_datas {
|
||||||
#define DRIVE_CAP32 0x04
|
#define DRIVE_CAP32 0x04
|
||||||
#define DRIVE_DMA 0x08
|
#define DRIVE_DMA 0x08
|
||||||
#define DRIVE_UDMA 0x10
|
#define DRIVE_UDMA 0x10
|
||||||
|
#define DRIVE_MODE 0x20 /* the drive reported its mode */
|
||||||
/*
|
/*
|
||||||
* Current setting of drive's PIO, DMA and UDMA modes.
|
* Current setting of drive's PIO, DMA and UDMA modes.
|
||||||
* Is initialised by the disks drivers at attach time, and may be
|
* Is initialised by the disks drivers at attach time, and may be
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: wdc.c,v 1.34 1998/10/13 15:02:42 bouyer Exp $ */
|
/* $NetBSD: wdc.c,v 1.35 1998/10/13 15:18:47 bouyer Exp $ */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -770,6 +770,7 @@ wdc_probe_caps(drvp)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
drvp->drive_flags |= DRIVE_MODE;
|
||||||
printed = 0;
|
printed = 0;
|
||||||
for (i = 7; i >= 0; i--) {
|
for (i = 7; i >= 0; i--) {
|
||||||
if ((params.atap_dmamode_supp & (1 << i)) == 0)
|
if ((params.atap_dmamode_supp & (1 << i)) == 0)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: atapi_wdc.c,v 1.5 1998/10/13 15:02:43 bouyer Exp $ */
|
/* $NetBSD: atapi_wdc.c,v 1.6 1998/10/13 15:18:48 bouyer Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Manuel Bouyer.
|
* Copyright (c) 1998 Manuel Bouyer.
|
||||||
|
@ -607,6 +607,9 @@ again:
|
||||||
/* Don't try to set mode if controller can't be adjusted */
|
/* Don't try to set mode if controller can't be adjusted */
|
||||||
if ((chp->wdc->cap & WDC_CAPABILITY_MODE) == 0)
|
if ((chp->wdc->cap & WDC_CAPABILITY_MODE) == 0)
|
||||||
goto ready;
|
goto ready;
|
||||||
|
/* Also don't try if the drive didn't report its mode */
|
||||||
|
if ((drvp->drive_flags & DRIVE_MODE) == 0)
|
||||||
|
goto ready;;
|
||||||
wdccommand(chp, drvp->drive, SET_FEATURES, 0, 0, 0,
|
wdccommand(chp, drvp->drive, SET_FEATURES, 0, 0, 0,
|
||||||
0x08 | drvp->PIO_mode, WDSF_SET_MODE);
|
0x08 | drvp->PIO_mode, WDSF_SET_MODE);
|
||||||
drvp->state = PIOMODE_WAIT;
|
drvp->state = PIOMODE_WAIT;
|
||||||
|
|
Loading…
Reference in New Issue