summaryrefslogtreecommitdiff
path: root/include/scsi
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-03-20 18:13:59 +0300
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-03-20 20:06:20 +0300
commitc3c94c5a2fb43a654e777f509d5032b0db8ed09f (patch)
treecbc9b0adfa0a83fc5859344d6f9911d3010a29ac /include/scsi
parent3721050afc6cb6ddf6de0f782e2054ebcc225e9b (diff)
downloadlinux-c3c94c5a2fb43a654e777f509d5032b0db8ed09f.tar.xz
[SCSI] sd: implement START/STOP management
Implement SBC START/STOP management. sdev->mange_start_stop is added. When it's set to one, sd STOPs the device on suspend and shutdown and STARTs it on resume. sdev->manage_start_stop defaults is in sdev instead of scsi_disk cdev to allow ->slave_config() override the default configuration but is exported under scsi_disk sysfs node as sdev->allow_restart is. When manage_start_stop is zero (the default value), this patch doesn't introduce any behavior change. Signed-off-by: Tejun Heo <htejun@gmail.com> Rejections fixed and Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/scsi_device.h1
-rw-r--r--include/scsi/sd.h2
2 files changed, 3 insertions, 0 deletions
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index c86e6ce143df..b05cd3b09e6e 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -120,6 +120,7 @@ struct scsi_device {
unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */
unsigned no_start_on_add:1; /* do not issue start on add */
unsigned allow_restart:1; /* issue START_UNIT in error handler */
+ unsigned manage_start_stop:1; /* Let HLD (sd) manage start/stop */
unsigned no_uld_attach:1; /* disable connecting to upper level drivers */
unsigned select_no_atn:1;
unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */
diff --git a/include/scsi/sd.h b/include/scsi/sd.h
index 82e6a84b77e6..5261488e1108 100644
--- a/include/scsi/sd.h
+++ b/include/scsi/sd.h
@@ -52,6 +52,8 @@ static void sd_rw_intr(struct scsi_cmnd * SCpnt);
static int sd_probe(struct device *);
static int sd_remove(struct device *);
static void sd_shutdown(struct device *dev);
+static int sd_suspend(struct device *dev, pm_message_t state);
+static int sd_resume(struct device *dev);
static void sd_rescan(struct device *);
static int sd_init_command(struct scsi_cmnd *);
static int sd_issue_flush(struct device *, sector_t *);