aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata/ata-disk.c
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2008-01-02 20:33:54 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2008-01-02 20:33:54 +0000
commit24ecb0cb1555a5c82cb0c203e7f937a90ab07eae (patch)
tree081ab3a39a9e5ffda45e6dce1890351e6db7ba61 /sys/dev/ata/ata-disk.c
parent08d2425f6f5331ab9c2fde23fb2a9643131d1c30 (diff)
Notes
Diffstat (limited to 'sys/dev/ata/ata-disk.c')
-rw-r--r--sys/dev/ata/ata-disk.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 63a226c8172e..bac091fd771a 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -162,6 +162,9 @@ ad_attach(device_t dev)
adp->disk->d_unit = device_get_unit(dev);
if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
adp->disk->d_flags = DISKFLAG_CANFLUSHCACHE;
+ if ((atadev->param.support.command2 & ATA_SUPPORT_CFA) ||
+ atadev->param.config == ATA_PROTO_CFA)
+ adp->disk->d_flags = DISKFLAG_CANDELETE;
snprintf(adp->disk->d_ident, sizeof(adp->disk->d_ident), "ad:%s",
atadev->param.serial);
disk_create(adp->disk, DISK_VERSION);
@@ -274,6 +277,12 @@ ad_strategy(struct bio *bp)
else
request->u.ata.command = ATA_WRITE;
break;
+ case BIO_DELETE:
+ request->flags = ATA_R_CONTROL;
+ request->u.ata.command = ATA_CFA_ERASE;
+ request->transfersize = 0;
+ request->donecount = bp->bio_bcount;
+ break;
case BIO_FLUSH:
request->u.ata.lba = 0;
request->u.ata.count = 0;