[Midnightbsd-cvs] src: ata-disk.c: add hitatchi disk check

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Mon Dec 1 12:21:05 EST 2008


Log Message:
-----------
add hitatchi disk check

Modified Files:
--------------
    src/sys/dev/ata:
        ata-disk.c (r1.5 -> r1.6)

-------------- next part --------------
Index: ata-disk.c
===================================================================
RCS file: /home/cvs/src/sys/dev/ata/ata-disk.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -L sys/dev/ata/ata-disk.c -L sys/dev/ata/ata-disk.c -u -r1.5 -r1.6
--- sys/dev/ata/ata-disk.c
+++ sys/dev/ata/ata-disk.c
@@ -62,6 +62,14 @@
 static disk_ioctl_t ad_ioctl;
 static dumper_t ad_dump;
 
+/*
+ * Most platforms map firmware geom to actual, but some don't.  If
+ * not overridden, default to nothing.
+ */
+#ifndef ad_firmware_geom_adjust
+#define ad_firmware_geom_adjust(dev, disk)
+#endif
+
 /* local vars */
 static MALLOC_DEFINE(M_AD, "ad_driver", "ATA disk driver");
 
@@ -72,7 +80,8 @@
 
     if (!(atadev->param.config & ATA_PROTO_ATAPI) ||
 	(atadev->param.config == ATA_CFA_MAGIC1) ||
-	(atadev->param.config == ATA_CFA_MAGIC2))
+	(atadev->param.config == ATA_CFA_MAGIC2) ||
+	(atadev->param.config == ATA_CFA_MAGIC3))
 	return 0;
     else
 	return ENXIO;
@@ -151,8 +160,13 @@
     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;
+    snprintf(adp->disk->d_ident, sizeof(adp->disk->d_ident), "ad:%s",
+	atadev->param.serial);
     disk_create(adp->disk, DISK_VERSION);
     device_add_child(dev, "subdisk", device_get_unit(dev));
+    ad_firmware_geom_adjust(dev, adp->disk);
     bus_generic_attach(dev);
     return 0;
 }
@@ -260,6 +274,15 @@
 	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->flags = ATA_R_CONTROL;
+	request->u.ata.command = ATA_FLUSHCACHE;
+	break;
     default:
 	device_printf(dev, "FAILURE - unknown BIO operation\n");
 	ata_free_request(request);
@@ -368,6 +391,8 @@
     else {
 	if (!strncmp(atadev->param.model, "ST", 2))
 	    strcpy(vendor, "Seagate ");
+	else if (!strncmp(atadev->param.model, "HDS", 3))
+	    strcpy(vendor, "Hitachi ");
 	else
 	    strcpy(vendor, "");
 	strncpy(product, atadev->param.model, 40);


More information about the Midnightbsd-cvs mailing list