diff options
author | mav <mav@FreeBSD.org> | 2009-02-19 12:47:24 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-02-19 12:47:24 +0000 |
commit | 6127a7d95a93e81e644a76241dcd28a7f41925f7 (patch) | |
tree | ebbbf416f6cb65d574f788efa836329c852e5273 /sys/dev/ata/ata-card.c | |
parent | facbd7451d55460587d9d7295154cd25a90ae8d5 (diff) | |
download | FreeBSD-src-6127a7d95a93e81e644a76241dcd28a7f41925f7.zip FreeBSD-src-6127a7d95a93e81e644a76241dcd28a7f41925f7.tar.gz |
Use channel driver's attach/detach routines instead of ata_attach()/
ata_detach() to implement IOCATAATTACH/IOCATADETACH ioctls.
This will permit channel drivers to properly shutdown port hardware on channel
detach and init it on attach.
Diffstat (limited to 'sys/dev/ata/ata-card.c')
-rw-r--r-- | sys/dev/ata/ata-card.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/dev/ata/ata-card.c b/sys/dev/ata/ata-card.c index 9a66419..09a2c9f 100644 --- a/sys/dev/ata/ata-card.c +++ b/sys/dev/ata/ata-card.c @@ -91,6 +91,10 @@ ata_pccard_attach(device_t dev) struct resource *io, *ctlio; int i, rid, err; + if (ch->attached) + return (0); + ch->attached = 1; + /* allocate the io range to get start and length */ rid = ATA_IOADDR_RID; if (!(io = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, @@ -142,6 +146,10 @@ ata_pccard_detach(device_t dev) struct ata_channel *ch = device_get_softc(dev); int i; + if (!ch->attached) + return (0); + ch->attached = 0; + ata_detach(dev); if (ch->r_io[ATA_CONTROL].res != ch->r_io[ATA_DATA].res) bus_release_resource(dev, SYS_RES_IOPORT, ATA_CTLADDR_RID, |