summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/blkdev
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2013-11-17 14:26:56 -0800
committerRobert Mustacchi <rm@joyent.com>2013-12-16 13:37:26 -0800
commit59d8f1005b65ef8ad2c9ce040497daf81dd65085 (patch)
treec20d3313e8319858158f3ee816ccda62ca909b1f /usr/src/uts/common/io/blkdev
parentd1b18d1a1255ac607d5e072515d727cdfe52f878 (diff)
downloadillumos-joyent-59d8f1005b65ef8ad2c9ce040497daf81dd65085.tar.gz
4335 need a mechanism to detect solid state storage devices
Reviewed by: Keith M Wesolowski <wesolows@foobazco.org> Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com> Approved by: Dan McDonald <danmcd@nexenta.com>
Diffstat (limited to 'usr/src/uts/common/io/blkdev')
-rw-r--r--usr/src/uts/common/io/blkdev/blkdev.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/usr/src/uts/common/io/blkdev/blkdev.c b/usr/src/uts/common/io/blkdev/blkdev.c
index 4c5d87db23..003f06f7f0 100644
--- a/usr/src/uts/common/io/blkdev/blkdev.c
+++ b/usr/src/uts/common/io/blkdev/blkdev.c
@@ -85,6 +85,7 @@ struct bd {
kstat_io_t *d_kiop;
boolean_t d_rdonly;
+ boolean_t d_ssd;
boolean_t d_removable;
boolean_t d_hotpluggable;
boolean_t d_use_dma;
@@ -1118,6 +1119,14 @@ bd_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *credp, int *rvalp)
}
return (0);
}
+ case DKIOCSOLIDSTATE: {
+ int i;
+ i = bd->d_ssd ? 1 : 0;
+ if (ddi_copyout(&i, ptr, sizeof (i), flag)) {
+ return (EFAULT);
+ }
+ return (0);
+ }
case DKIOCSTATE: {
enum dkio_state state;
if (ddi_copyin(ptr, &state, sizeof (state), flag)) {
@@ -1261,6 +1270,7 @@ bd_tg_getinfo(dev_info_t *dip, int cmd, void *arg, void *tg_cookie)
bd_update_state(bd);
((tg_attribute_t *)arg)->media_is_writable =
bd->d_rdonly ? B_FALSE : B_TRUE;
+ ((tg_attribute_t *)arg)->media_is_solid_state = bd->d_ssd;
return (0);
default:
@@ -1376,6 +1386,7 @@ bd_update_state(bd_t *bd)
bd->d_blkshift = ddi_ffs(media.m_blksize) - 1;
bd->d_numblks = media.m_nblks;
bd->d_rdonly = media.m_readonly;
+ bd->d_ssd = media.m_solidstate;
state = DKIO_INSERTED;
}