summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-11-14 00:25:10 +0000
committermav <mav@FreeBSD.org>2014-11-14 00:25:10 +0000
commit862a9d976c93a53003b23c58097ef59c0c050e2f (patch)
treea9aba0725949ef9014cfa237798baa3fcc034552 /sys/cam
parentc5ebff0eaad4e5405b61d039545728ce2383545a (diff)
downloadFreeBSD-src-862a9d976c93a53003b23c58097ef59c0c050e2f.zip
FreeBSD-src-862a9d976c93a53003b23c58097ef59c0c050e2f.tar.gz
MFC r274206:
Synchronize medium rotation rate in legacy Rigid Disk Drive Geometry mode page with modern Block Device Characteristics VPD page.
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl.c29
-rw-r--r--sys/cam/ctl/ctl_private.h2
2 files changed, 15 insertions, 16 deletions
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 0dc9d37..0b776e1 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -4106,17 +4106,11 @@ ctl_init_page_index(struct ctl_lun *lun)
* works out a fake geometry based on the capacity.
*/
memcpy(&lun->mode_pages.rigid_disk_page[
- CTL_PAGE_CURRENT], &rigid_disk_page_default,
+ CTL_PAGE_DEFAULT], &rigid_disk_page_default,
sizeof(rigid_disk_page_default));
memcpy(&lun->mode_pages.rigid_disk_page[
CTL_PAGE_CHANGEABLE],&rigid_disk_page_changeable,
sizeof(rigid_disk_page_changeable));
- memcpy(&lun->mode_pages.rigid_disk_page[
- CTL_PAGE_DEFAULT], &rigid_disk_page_default,
- sizeof(rigid_disk_page_default));
- memcpy(&lun->mode_pages.rigid_disk_page[
- CTL_PAGE_SAVED], &rigid_disk_page_default,
- sizeof(rigid_disk_page_default));
sectors_per_cylinder = CTL_DEFAULT_SECTORS_PER_TRACK *
CTL_DEFAULT_HEADS;
@@ -4153,16 +4147,21 @@ ctl_init_page_index(struct ctl_lun *lun)
cylinders = 0xffffff;
rigid_disk_page = &lun->mode_pages.rigid_disk_page[
- CTL_PAGE_CURRENT];
- scsi_ulto3b(cylinders, rigid_disk_page->cylinders);
-
- rigid_disk_page = &lun->mode_pages.rigid_disk_page[
CTL_PAGE_DEFAULT];
scsi_ulto3b(cylinders, rigid_disk_page->cylinders);
- rigid_disk_page = &lun->mode_pages.rigid_disk_page[
- CTL_PAGE_SAVED];
- scsi_ulto3b(cylinders, rigid_disk_page->cylinders);
+ if ((value = ctl_get_opt(&lun->be_lun->options,
+ "rpm")) != NULL) {
+ scsi_ulto2b(strtol(value, NULL, 0),
+ rigid_disk_page->rotation_rate);
+ }
+
+ memcpy(&lun->mode_pages.rigid_disk_page[CTL_PAGE_CURRENT],
+ &lun->mode_pages.rigid_disk_page[CTL_PAGE_DEFAULT],
+ sizeof(rigid_disk_page_default));
+ memcpy(&lun->mode_pages.rigid_disk_page[CTL_PAGE_SAVED],
+ &lun->mode_pages.rigid_disk_page[CTL_PAGE_DEFAULT],
+ sizeof(rigid_disk_page_default));
page_index->page_data =
(uint8_t *)lun->mode_pages.rigid_disk_page;
@@ -10190,7 +10189,7 @@ ctl_inquiry_evpd_bdc(struct ctl_scsiio *ctsio, int alloc_len)
(value = ctl_get_opt(&lun->be_lun->options, "rpm")) != NULL)
i = strtol(value, NULL, 0);
else
- i = SVPD_NON_ROTATING;
+ i = CTL_DEFAULT_ROTATION_RATE;
scsi_ulto2b(i, bdc_ptr->medium_rotation_rate);
if (lun != NULL &&
(value = ctl_get_opt(&lun->be_lun->options, "formfactor")) != NULL)
diff --git a/sys/cam/ctl/ctl_private.h b/sys/cam/ctl/ctl_private.h
index e3dcf70..a2992d1 100644
--- a/sys/cam/ctl/ctl_private.h
+++ b/sys/cam/ctl/ctl_private.h
@@ -271,7 +271,7 @@ union ctl_softcs {
#define CTL_DEFAULT_SECTORS_PER_TRACK 256
#define CTL_DEFAULT_HEADS 128
-#define CTL_DEFAULT_ROTATION_RATE 10000
+#define CTL_DEFAULT_ROTATION_RATE SVPD_NON_ROTATING
struct ctl_page_index;
OpenPOWER on IntegriCloud