SCSI & usb-storage: add try_rc_10_first flag
[linux-2.6.git] / include / scsi / scsi_host.h
index e7e3858..5f7d5b3 100644 (file)
@@ -46,7 +46,7 @@ struct blk_queue_tags;
 enum {
        SCSI_QDEPTH_DEFAULT,    /* default requested change, e.g. from sysfs */
        SCSI_QDEPTH_QFULL,      /* scsi-ml requested due to queue full */
-       SCSI_QDEPTH_RAMP_UP,    /* scsi-ml requested due to threshhold event */
+       SCSI_QDEPTH_RAMP_UP,    /* scsi-ml requested due to threshold event */
 };
 
 struct scsi_host_template {
@@ -355,6 +355,19 @@ struct scsi_host_template {
         */
        enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
 
+       /* This is an optional routine that allows transport to initiate
+        * LLD adapter or firmware reset using sysfs attribute.
+        *
+        * Return values: 0 on success, -ve value on failure.
+        *
+        * Status: OPTIONAL
+        */
+
+       int (*host_reset)(struct Scsi_Host *shost, int reset_type);
+#define SCSI_ADAPTER_RESET     1
+#define SCSI_FIRMWARE_RESET    2
+
+
        /*
         * Name of proc directory
         */
@@ -656,6 +669,9 @@ struct Scsi_Host {
        /* Asynchronous scan in progress */
        unsigned async_scan:1;
 
+       /* Don't resume host in EH */
+       unsigned eh_noresume:1;
+
        /*
         * Optional work queue to be utilized by the transport
         */
@@ -791,7 +807,8 @@ static inline struct device *scsi_get_device(struct Scsi_Host *shost)
  **/
 static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
 {
-       return shost->shost_state == SHOST_RUNNING;
+       return shost->shost_state == SHOST_RUNNING ||
+              shost->shost_state == SHOST_RECOVERY;
 }
 
 extern void scsi_unblock_requests(struct Scsi_Host *);