aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata/ata-disk.c
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2006-10-31 21:19:25 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2006-10-31 21:19:25 +0000
commit9cd394ea9657da13e9bceeadb5d18ec743c77fc5 (patch)
treee7596b419a359a5488cd4aa3c109c1d642056b40 /sys/dev/ata/ata-disk.c
parent1d2aee20b8fd3a6799fb682cddf197358b2f60cd (diff)
Notes
Diffstat (limited to 'sys/dev/ata/ata-disk.c')
-rw-r--r--sys/dev/ata/ata-disk.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index acdb37a4b1da..f82c098dc20e 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -159,6 +159,8 @@ ad_attach(device_t dev)
adp->disk->d_fwsectors = adp->sectors;
adp->disk->d_fwheads = adp->heads;
adp->disk->d_unit = device_get_unit(dev);
+ if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
+ adp->disk->d_flags = DISKFLAG_CANFLUSHCACHE;
disk_create(adp->disk, DISK_VERSION);
device_add_child(dev, "subdisk", device_get_unit(dev));
ad_firmware_geom_adjust(dev, adp->disk);
@@ -269,6 +271,17 @@ ad_strategy(struct bio *bp)
else
request->u.ata.command = ATA_WRITE;
break;
+ case BIO_FLUSH:
+ request->u.ata.lba = 0;
+ request->u.ata.count = 0;
+ request->u.ata.feature = 0;
+ request->bytecount = 0;
+ request->transfersize = 0;
+ request->timeout = 1;
+ request->retries = 0;
+ request->flags = ATA_R_CONTROL;
+ request->u.ata.command = ATA_FLUSHCACHE;
+ break;
default:
device_printf(dev, "FAILURE - unknown BIO operation\n");
ata_free_request(request);