aboutsummaryrefslogtreecommitdiff
path: root/sys/cam/cam_xpt.c
diff options
context:
space:
mode:
authorJustin T. Gibbs <gibbs@FreeBSD.org>1998-09-20 07:14:36 +0000
committerJustin T. Gibbs <gibbs@FreeBSD.org>1998-09-20 07:14:36 +0000
commite471e974cc3db13245327abf152c5fd9640b1c66 (patch)
tree44101ffd78b6a347932d4cd72407e8e9494c4bc9 /sys/cam/cam_xpt.c
parent4af2cddffeb9cc450e1276deb52ad695416ed32a (diff)
downloadsrc-e471e974cc3db13245327abf152c5fd9640b1c66.tar.gz
src-e471e974cc3db13245327abf152c5fd9640b1c66.zip
cam_xpt.c:
Add quirk entry for a Samsung drive that doesn't like experiencing the queue full condition. Bump the timeouts for all probe activities to 60s. We don't know what the seletion timeout (or equivelent on other mediums) is for controllers, which can make the transactions at the tail end of a parallel probe take a while to complete. The DPT seems to be a card that takes a long time to see a selection timeout. cam_periph.c: Don't call a device "gone" after a single selection timeout. We need to come up with a better policy. Until that time, you'll have to manually re-scan a bus via camcontrol for the system to decide that a device is really gone. This should give devices experiencing temporary insanity to escape death.
Notes
Notes: svn path=/head/; revision=39513
Diffstat (limited to 'sys/cam/cam_xpt.c')
-rw-r--r--sys/cam/cam_xpt.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 58d11e06e826..5c10591a31d8 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: cam_xpt.c,v 1.7 1998/09/18 19:55:34 ken Exp $
+ * $Id: cam_xpt.c,v 1.8 1998/09/20 05:03:34 gibbs Exp $
*/
#include <sys/param.h>
#include <sys/systm.h>
@@ -264,6 +264,15 @@ static struct xpt_quirk_entry xpt_quirk_table[] =
{ T_DIRECT, SIP_MEDIA_REMOVABLE, "iomega", "jaz*", "*" },
/*quirks*/0, /*mintags*/0, /*maxtags*/0
},
+ {
+ /*
+ * Doesn't handle queue full condition correctly,
+ * so we need to limit maxtags to what the device
+ * can handle instead of determining this automatically.
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "SAMSUNG", "WN321010S*", "*" },
+ /*quirks*/0, /*mintags*/0, /*maxtags*/32
+ },
{
/* Doesn't understand EVP Serial Requests */
{
@@ -4774,7 +4783,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
probedone,
MSG_SIMPLE_Q_TAG,
SSD_FULL_SIZE,
- /*timeout*/10000);
+ /*timeout*/60000);
break;
}
case PROBE_INQUIRY:
@@ -4814,7 +4823,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
/*evpd*/FALSE,
/*page_code*/0,
SSD_MIN_SIZE,
- /*timeout*/5 * 1000);
+ /*timeout*/60 * 1000);
break;
}
case PROBE_MODE_SENSE:
@@ -4837,7 +4846,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
mode_buf,
mode_buf_len,
SSD_FULL_SIZE,
- /*timeout*/5000);
+ /*timeout*/60000);
break;
}
xpt_print_path(periph->path);
@@ -4870,7 +4879,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
/*evpd*/TRUE,
SVPD_UNIT_SERIAL_NUMBER,
SSD_MIN_SIZE,
- /*timeout*/5 * 1000);
+ /*timeout*/60 * 1000);
break;
}
/*