summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2009-02-21 16:39:26 +0000
committermav <mav@FreeBSD.org>2009-02-21 16:39:26 +0000
commitd6b23ce1539543a5cc3dfe32ca002797fb016713 (patch)
tree96e03f929f54c478e1d8e53e2125aa63cd79453c /sys/dev/ata
parentbfa5bd4228fa05bfb9a1af423398fd7eeccca89e (diff)
downloadFreeBSD-src-d6b23ce1539543a5cc3dfe32ca002797fb016713.zip
FreeBSD-src-d6b23ce1539543a5cc3dfe32ca002797fb016713.tar.gz
Teach device drivers' ata_reinit() methods, that there can be more then two
devices per channel.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-disk.c5
-rw-r--r--sys/dev/ata/atapi-cd.c8
-rw-r--r--sys/dev/ata/atapi-fd.c8
-rw-r--r--sys/dev/ata/atapi-tape.c6
4 files changed, 13 insertions, 14 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 27d4210..e11f3f9 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -199,10 +199,9 @@ ad_reinit(device_t dev)
struct ata_device *atadev = device_get_softc(dev);
/* if detach pending, return error */
- if (((atadev->unit == ATA_MASTER) && !(ch->devices & ATA_ATA_MASTER)) ||
- ((atadev->unit == ATA_SLAVE) && !(ch->devices & ATA_ATA_SLAVE))) {
+ if (!(ch->devices & (ATA_ATA_MASTER << atadev->unit)))
return 1;
- }
+
ad_init(dev);
return 0;
}
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c
index ba65a6b..7fd80c4 100644
--- a/sys/dev/ata/atapi-cd.c
+++ b/sys/dev/ata/atapi-cd.c
@@ -159,10 +159,10 @@ acd_reinit(device_t dev)
struct ata_channel *ch = device_get_softc(device_get_parent(dev));
struct ata_device *atadev = device_get_softc(dev);
- if (((atadev->unit == ATA_MASTER) && !(ch->devices & ATA_ATAPI_MASTER)) ||
- ((atadev->unit == ATA_SLAVE) && !(ch->devices & ATA_ATAPI_SLAVE))) {
- return 1;
- }
+ /* if detach pending, return error */
+ if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
+ return 1;
+
ATA_SETMODE(device_get_parent(dev), dev);
return 0;
}
diff --git a/sys/dev/ata/atapi-fd.c b/sys/dev/ata/atapi-fd.c
index e9f3021..b8434b3 100644
--- a/sys/dev/ata/atapi-fd.c
+++ b/sys/dev/ata/atapi-fd.c
@@ -147,11 +147,11 @@ afd_reinit(device_t dev)
{
struct ata_channel *ch = device_get_softc(device_get_parent(dev));
struct ata_device *atadev = device_get_softc(dev);
-
- if (((atadev->unit == ATA_MASTER) && !(ch->devices & ATA_ATAPI_MASTER)) ||
- ((atadev->unit == ATA_SLAVE) && !(ch->devices & ATA_ATAPI_SLAVE))) {
+
+ /* if detach pending, return error */
+ if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
return 1;
- }
+
ATA_SETMODE(device_get_parent(dev), dev);
return 0;
}
diff --git a/sys/dev/ata/atapi-tape.c b/sys/dev/ata/atapi-tape.c
index 734f012..aa44afe 100644
--- a/sys/dev/ata/atapi-tape.c
+++ b/sys/dev/ata/atapi-tape.c
@@ -191,10 +191,10 @@ ast_reinit(device_t dev)
struct ata_channel *ch = device_get_softc(device_get_parent(dev));
struct ata_device *atadev = device_get_softc(dev);
- if (((atadev->unit == ATA_MASTER) && !(ch->devices & ATA_ATAPI_MASTER)) ||
- ((atadev->unit == ATA_SLAVE) && !(ch->devices & ATA_ATAPI_SLAVE))) {
+ /* if detach pending, return error */
+ if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
return 1;
- }
+
ATA_SETMODE(device_get_parent(dev), dev);
return 0;
}
OpenPOWER on IntegriCloud