aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/cam/scsi/scsi_sa.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/sys/cam/scsi/scsi_sa.c b/sys/cam/scsi/scsi_sa.c
index f5d9f6df3ebc..80847dd5e7cf 100644
--- a/sys/cam/scsi/scsi_sa.c
+++ b/sys/cam/scsi/scsi_sa.c
@@ -145,12 +145,13 @@ typedef enum {
typedef enum {
SA_QUIRK_NONE = 0x00,
- SA_QUIRK_NOCOMP = 0x01, /* can't deal with compression at all */
- SA_QUIRK_FIXED = 0x02, /* force fixed mode */
- SA_QUIRK_VARIABLE = 0x04, /* force variable mode */
+ SA_QUIRK_NOCOMP = 0x01, /* Can't deal with compression at all */
+ SA_QUIRK_FIXED = 0x02, /* Force fixed mode */
+ SA_QUIRK_VARIABLE = 0x04, /* Force variable mode */
SA_QUIRK_2FM = 0x08, /* Needs Two File Marks at EOD */
SA_QUIRK_1FM = 0x10, /* No more than 1 File Mark at EOD */
- SA_QUIRK_NODREAD = 0x20 /* Don't try and dummy read density */
+ SA_QUIRK_NODREAD = 0x20, /* Don't try and dummy read density */
+ SA_QUIRK_NO_MODESEL = 0x40 /* Don't do mode select at all */
} sa_quirks;
/* units are bits 4-7, 16-21 (1024 units) */
@@ -251,6 +252,11 @@ struct sa_quirk_entry {
static struct sa_quirk_entry sa_quirk_table[] =
{
{
+ { T_SEQUENTIAL, SIP_MEDIA_REMOVABLE, "OnStream",
+ "ADR*", "*"}, SA_QUIRK_FIXED|SA_QUIRK_NODREAD |
+ SA_QUIRK_1FM|SA_QUIRK_NO_MODESEL, 32768
+ },
+ {
{ T_SEQUENTIAL, SIP_MEDIA_REMOVABLE, "ARCHIVE",
"Python 25601*", "*"}, SA_QUIRK_NOCOMP|SA_QUIRK_NODREAD, 0
},
@@ -2031,6 +2037,7 @@ tryagain:
* or min_blk if that's larger.
*/
if ((softc->quirks & SA_QUIRK_FIXED) &&
+ (softc->quirks & SA_QUIRK_NO_MODESEL) == 0 &&
(softc->media_blksize != softc->last_media_blksize)) {
softc->media_blksize = softc->last_media_blksize;
if (softc->media_blksize == 0) {
@@ -2120,11 +2127,15 @@ tryagain:
} else
softc->flags |= SA_FLAG_COMP_UNSUPP;
- if (softc->buffer_mode == SMH_SA_BUF_MODE_NOBUF) {
+ if ((softc->buffer_mode == SMH_SA_BUF_MODE_NOBUF) &&
+ (softc->quirks & SA_QUIRK_NO_MODESEL) == 0) {
error = sasetparams(periph, SA_PARAM_BUFF_MODE, 0,
0, 0, SF_NO_PRINT);
if (error == 0)
softc->buffer_mode = SMH_SA_BUF_MODE_SIBUF;
+ xpt_print_path(ccb->ccb_h.path);
+ printf("unable to set buffered mode\n");
+ error = 0; /* not an error */
}