Make NEW_SCSICONF the default way of doing things
It will need to be changed but it's the better starting point.. also add '?' to wildcarding in SCSI identification of devices.. so we can catch all PIONEER CD 6??* devices instead of having separate entries for the 600, 602, 604X, 624X etc.. it's getting so we should have a small regexp routine in the kernel maybe just a little one.. matching CDX-6[0-9][0-9][ A-Z] would be better there will be drastic changes in this but this is the best starting point..
This commit is contained in:
parent
24e9a82678
commit
7e21565f06
@ -14,7 +14,7 @@
|
||||
*
|
||||
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
|
||||
*
|
||||
* $Id: cd.c,v 1.48 1995/12/08 11:18:38 julian Exp $
|
||||
* $Id: cd.c,v 1.49 1995/12/08 23:22:17 phk Exp $
|
||||
*/
|
||||
|
||||
#define SPLCD splbio
|
||||
@ -224,7 +224,11 @@ cdattach(struct scsi_link *sc_link)
|
||||
* the command can get the sense back so that it can selectively log
|
||||
* errors.
|
||||
*/
|
||||
cd_get_parms(unit, SCSI_NOSLEEP | SCSI_NOMASK);
|
||||
if (sc_link->quirks & CD_Q_NO_TOUCH) {
|
||||
dp->disksize = 0;
|
||||
} else {
|
||||
cd_get_parms(unit, SCSI_NOSLEEP | SCSI_NOMASK);
|
||||
}
|
||||
if (dp->disksize) {
|
||||
printf("cd present [%ld x %ld byte records]",
|
||||
cd->params.disksize,
|
||||
|
@ -21,7 +21,7 @@
|
||||
/*
|
||||
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
|
||||
*
|
||||
* $Id: scsi_tape.h,v 1.14 1995/11/30 07:43:46 pst Exp $
|
||||
* $Id: scsi_tape.h,v 1.15 1995/12/09 20:42:32 phk Exp $
|
||||
*/
|
||||
#ifndef SCSI_SCSI_TAPE_H
|
||||
#define SCSI_SCSI_TAPE_H 1
|
||||
@ -244,70 +244,4 @@ struct tape_pages
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef NEW_SCSICONF
|
||||
/**********************************************************************
|
||||
from the scsi2 spec
|
||||
Value Tracks Density(bpi) Code Type Reference Note
|
||||
0x1 9 800 NRZI R X3.22-1983 2
|
||||
0x2 9 1600 PE R X3.39-1986 2
|
||||
0x3 9 6250 GCR R X3.54-1986 2
|
||||
0x5 4/9 8000 GCR C X3.136-1986 1
|
||||
0x6 9 3200 PE R X3.157-1987 2
|
||||
0x7 4 6400 IMFM C X3.116-1986 1
|
||||
0x8 4 8000 GCR CS X3.158-1986 1
|
||||
0x9 18 37871 GCR C X3B5/87-099 2
|
||||
0xA 22 6667 MFM C X3B5/86-199 1
|
||||
0xB 4 1600 PE C X3.56-1986 1
|
||||
0xC 24 12690 GCR C HI-TC1 1,5
|
||||
0xD 24 25380 GCR C HI-TC2 1,5
|
||||
0xF 15 10000 GCR C QIC-120 1,5
|
||||
0x10 18 10000 GCR C QIC-150 1,5
|
||||
0x11 26 16000 GCR C QIC-320(525?) 1,5
|
||||
0x12 30 51667 RLL C QIC-1350 1,5
|
||||
0x13 1 61000 DDS CS X3B5/88-185A 4
|
||||
0x14 1 43245 RLL CS X3.202-1991 4
|
||||
0x15 1 45434 RLL CS ECMA TC17 4
|
||||
0x16 48 10000 MFM C X3.193-1990 1
|
||||
0x17 48 42500 MFM C X3B5/91-174 1
|
||||
|
||||
where Code means:
|
||||
NRZI Non Return to Zero, change on ones
|
||||
GCR Group Code Recording
|
||||
PE Phase Encoded
|
||||
IMFM Inverted Modified Frequency Modulation
|
||||
MFM Modified Frequency Modulation
|
||||
DDS Dat Data Storage
|
||||
RLL Run Length Encoding
|
||||
|
||||
where Type means:
|
||||
R Real-to-Real
|
||||
C Cartridge
|
||||
CS cassette
|
||||
|
||||
where Notes means:
|
||||
1 Serial Recorded
|
||||
2 Parallel Recorded
|
||||
3 Old format know as QIC-11
|
||||
4 Helical Scan
|
||||
5 Not ANSI standard, rather industry standard.
|
||||
|
||||
********************************************************************/
|
||||
|
||||
#define HALFINCH_800 0x01
|
||||
#define HALFINCH_1600 0x02
|
||||
#define HALFINCH_6250 0x03
|
||||
#define QIC_11 0x04 /* from Archive 150S Theory of Op. XXX */
|
||||
#define QIC_24 0x05 /* may be bad, works for CIPHER ST150S XXX */
|
||||
#define QIC_120 0x0f
|
||||
#define QIC_150 0x10
|
||||
#define QIC_320 0x11
|
||||
#define QIC_525 0x11
|
||||
#define QIC_1320 0x12
|
||||
#define DDS 0x13
|
||||
#define DAT_1 0x13
|
||||
#define QIC_3080 0x29
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
#endif /*SCSI_SCSI_TAPE_H*/
|
||||
|
@ -16,7 +16,7 @@
|
||||
*
|
||||
* New configuration setup: dufault@hda.com
|
||||
*
|
||||
* $Id: scsiconf.c,v 1.37 1995/11/20 12:42:29 phk Exp $
|
||||
* $Id: scsiconf.c,v 1.38 1995/11/21 15:14:28 bde Exp $
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -57,7 +57,8 @@ extern void *extend_set __P((struct extend_array *ea, int index, void *value));
|
||||
*/
|
||||
extern struct scsi_device uk_switch;
|
||||
|
||||
/* Extensible arrays: Use a realloc like implementation to permit
|
||||
/***********************************************************************
|
||||
* Extensible arrays: Use a realloc like implementation to permit
|
||||
* the arrays to be extend. These are set up to be moved out
|
||||
* of this file if needed elsewhere.
|
||||
*/
|
||||
@ -145,7 +146,7 @@ extend_release(struct extend_array *ea, int index)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/***********************************************************************
|
||||
* This extend_array holds an array of "scsibus_data" pointers.
|
||||
* One of these is allocated and filled in for each scsi bus.
|
||||
* it holds pointers to allow the scsi bus to get to the driver
|
||||
@ -162,40 +163,26 @@ struct extend_array *scbusses;
|
||||
*/
|
||||
struct scsidevs {
|
||||
u_int32 type;
|
||||
#ifdef NEW_SCSICONF
|
||||
u_int32 driver; /* normally the same as type */
|
||||
#endif
|
||||
boolean removable;
|
||||
char *manufacturer;
|
||||
char *model;
|
||||
char *version;
|
||||
char *devname;
|
||||
char flags; /* 1 show my comparisons during boot(debug) */
|
||||
#ifdef NEW_SCSICONF
|
||||
u_int16 quirks;
|
||||
void *devmodes;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define SC_SHOWME 0x01
|
||||
#define SC_ONE_LU 0x00
|
||||
#define SC_MORE_LUS 0x02
|
||||
|
||||
#ifdef NEW_SCSICONF
|
||||
static struct scsidevs unknowndev =
|
||||
{
|
||||
T_UNKNOWN, T_UNKNOWN, 0, "*", "*", "*",
|
||||
"uk", SC_MORE_LUS
|
||||
};
|
||||
#else /* !NEW_SCSICONF */
|
||||
static struct scsidevs unknowndev =
|
||||
{
|
||||
T_UNKNOWN, 0, "*", "*", "*",
|
||||
"uk", SC_MORE_LUS
|
||||
};
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
#ifdef NEW_SCSICONF
|
||||
static st_modes mode_tandberg3600 =
|
||||
{
|
||||
{0, 0, 0}, /* minor 0,1,2,3 */
|
||||
@ -238,10 +225,8 @@ static st_modes mode_unktape =
|
||||
{0, ST_Q_FORCE_VAR_MODE, HALFINCH_1600}, /* minor 8,9,10,11 */
|
||||
{0, ST_Q_FORCE_VAR_MODE, HALFINCH_6250} /* minor 12,13,14,15 */
|
||||
};
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
static struct scsidevs knowndevs[] =
|
||||
#ifdef NEW_SCSICONF
|
||||
{
|
||||
/* od's must be probed before sd's since some of them identify as T_DIRECT */
|
||||
#if NOD > 0
|
||||
@ -259,10 +244,6 @@ static struct scsidevs knowndevs[] =
|
||||
},
|
||||
#endif /* NOD */
|
||||
#if NSD > 0
|
||||
{
|
||||
T_DIRECT, T_DIRECT, T_FIXED, "MAXTOR", "XT-4170S", "B5A",
|
||||
"mx1", SC_ONE_LU
|
||||
},
|
||||
{
|
||||
T_DIRECT, T_DIRECT, T_FIXED, "*", "*", "*",
|
||||
"sd", SC_ONE_LU
|
||||
@ -307,12 +288,8 @@ static struct scsidevs knowndevs[] =
|
||||
"cd", SC_ONE_LU
|
||||
},
|
||||
{
|
||||
T_READONLY, T_READONLY, T_REMOV, "PIONEER", "CD-ROM DRM-600", "*",
|
||||
"cd", SC_MORE_LUS
|
||||
},
|
||||
{
|
||||
T_READONLY, T_READONLY, T_REMOV, "PIONEER", "CD-ROM DRM-602X" ,"*",
|
||||
"cd", SC_MORE_LUS
|
||||
T_READONLY, T_READONLY, T_REMOV, "PIONEER", "CD-ROM DRM-6??*" ,"*",
|
||||
"cd", SC_MORE_LUS, CD_Q_NO_TOUCH
|
||||
},
|
||||
{
|
||||
T_READONLY, T_READONLY, T_REMOV, "CHINON", "CD-ROM CDS-535","*",
|
||||
@ -334,71 +311,6 @@ static struct scsidevs knowndevs[] =
|
||||
0
|
||||
}
|
||||
};
|
||||
#else /* !NEW_SCSICONF */
|
||||
{
|
||||
#if NSD > 0
|
||||
{
|
||||
T_DIRECT, T_FIXED, "standard", "any"
|
||||
,"any", "sd", SC_ONE_LU
|
||||
},
|
||||
{
|
||||
T_DIRECT, T_FIXED, "MAXTOR ", "XT-4170S "
|
||||
,"B5A ", "mx1", SC_ONE_LU
|
||||
},
|
||||
#endif /* NSD */
|
||||
#if NOD > 0
|
||||
{
|
||||
T_OPTICAL, T_REMOV, "standard", "any"
|
||||
,"any", "od", SC_ONE_LU
|
||||
},
|
||||
{
|
||||
T_OPTICAL, T_REMOV, "MATSHITA", "PD-1 LF-1000"
|
||||
,"any", "od", SC_MORE_LUS
|
||||
},
|
||||
#endif /* NOD */
|
||||
#if NST > 0
|
||||
{
|
||||
T_SEQUENTIAL, T_REMOV, "standard", "any"
|
||||
,"any", "st", SC_ONE_LU
|
||||
},
|
||||
#endif /* NST */
|
||||
#if NCH > 0
|
||||
{
|
||||
T_CHANGER, T_REMOV, "standard", "any"
|
||||
,"any", "ch", SC_ONE_LU
|
||||
},
|
||||
#endif /* NCH */
|
||||
#if NCD > 0
|
||||
#ifndef UKTEST /* make cdroms unrecognised to test the uk driver */
|
||||
{
|
||||
T_READONLY, T_REMOV, "SONY", "CD-ROM CDU-8012"
|
||||
,"3.1a", "cd", SC_ONE_LU
|
||||
},
|
||||
{
|
||||
T_READONLY, T_REMOV, "PIONEER", "CD-ROM DRM-600"
|
||||
,"any", "cd", SC_MORE_LUS
|
||||
},
|
||||
{
|
||||
T_READONLY, T_REMOV, "PIONEER", "CD-ROM DRM-602X"
|
||||
,"any", "cd", SC_MORE_LUS
|
||||
},
|
||||
{
|
||||
T_READONLY, T_REMOV, "CHINON", "CD-ROM CDS-535"
|
||||
,"any", "cd", SC_ONE_LU
|
||||
},
|
||||
#endif /* !UKTEST */
|
||||
#endif /* NCD */
|
||||
#if NWORM > 0
|
||||
{
|
||||
T_WORM, T_REMOV, "YAMAHA", "CDR100"
|
||||
,"any", "worm", SC_ONE_LU
|
||||
},
|
||||
#endif /* NWORM */
|
||||
{
|
||||
0
|
||||
}
|
||||
};
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
/*
|
||||
* Declarations
|
||||
@ -1031,7 +943,6 @@ scsi_probe_bus(int bus, int targ, int lun)
|
||||
sc_link->lun = lun;
|
||||
sc_link->quirks = 0;
|
||||
bestmatch = scsi_probedev(sc_link, &maybe_more, &type);
|
||||
#ifdef NEW_SCSICONF
|
||||
if (bestmatch) {
|
||||
sc_link->quirks = bestmatch->quirks;
|
||||
sc_link->devmodes = bestmatch->devmodes;
|
||||
@ -1039,7 +950,6 @@ scsi_probe_bus(int bus, int targ, int lun)
|
||||
sc_link->quirks = 0;
|
||||
sc_link->devmodes = NULL;
|
||||
}
|
||||
#endif
|
||||
if (bestmatch) { /* FOUND */
|
||||
sc_link->device = scsi_device_lookup(type);
|
||||
|
||||
@ -1273,12 +1183,7 @@ scsi_probedev(sc_link, maybe_more, type_p)
|
||||
*type_p = type;
|
||||
else
|
||||
*type_p =
|
||||
#ifdef NEW_SCSICONF
|
||||
bestmatch->driver;
|
||||
#else
|
||||
bestmatch->type;
|
||||
#endif
|
||||
|
||||
return bestmatch;
|
||||
}
|
||||
|
||||
@ -1302,7 +1207,6 @@ scsi_dev_lookup(d_open)
|
||||
return d;
|
||||
}
|
||||
|
||||
#ifdef NEW_SCSICONF
|
||||
/*
|
||||
* Compare name with pattern, return 0 on match.
|
||||
* Short pattern matches trailing blanks in name,
|
||||
@ -1317,6 +1221,7 @@ match(pattern, name)
|
||||
while (c = *pattern++)
|
||||
{
|
||||
if (c == '*') return 0;
|
||||
if ((c == '?') && (*name > ' ')) continue;
|
||||
if (c != *name++) return 1;
|
||||
}
|
||||
while (c = *name++)
|
||||
@ -1325,7 +1230,6 @@ match(pattern, name)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Try make as good a match as possible with
|
||||
@ -1337,7 +1241,6 @@ scsi_selectdev(qualifier, type, remov, manu, model, rev)
|
||||
boolean remov;
|
||||
char *manu, *model, *rev;
|
||||
{
|
||||
#ifdef NEW_SCSICONF
|
||||
struct scsidevs *bestmatch = NULL;
|
||||
struct scsidevs *thisentry;
|
||||
|
||||
@ -1370,62 +1273,6 @@ scsi_selectdev(qualifier, type, remov, manu, model, rev)
|
||||
bestmatch = thisentry;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
u_int32 numents = (sizeof(knowndevs) / sizeof(struct scsidevs)) - 1;
|
||||
u_int32 count = 0;
|
||||
u_int32 bestmatches = 0;
|
||||
struct scsidevs *bestmatch = (struct scsidevs *) 0;
|
||||
struct scsidevs *thisentry = knowndevs;
|
||||
|
||||
type |= qualifier; /* why? */
|
||||
|
||||
thisentry--;
|
||||
while (count++ < numents) {
|
||||
thisentry++;
|
||||
if (type != thisentry->type) {
|
||||
continue;
|
||||
}
|
||||
if (bestmatches < 1) {
|
||||
bestmatches = 1;
|
||||
bestmatch = thisentry;
|
||||
}
|
||||
if (remov != thisentry->removable) {
|
||||
continue;
|
||||
}
|
||||
if (bestmatches < 2) {
|
||||
bestmatches = 2;
|
||||
bestmatch = thisentry;
|
||||
}
|
||||
if (thisentry->flags & SC_SHOWME)
|
||||
printf("'%s'-'%s'\n", thisentry->manufacturer, manu);
|
||||
if (strcmp(thisentry->manufacturer, manu)) {
|
||||
continue;
|
||||
}
|
||||
if (bestmatches < 3) {
|
||||
bestmatches = 3;
|
||||
bestmatch = thisentry;
|
||||
}
|
||||
if (thisentry->flags & SC_SHOWME)
|
||||
printf("'%s'-'%s'\n", thisentry->model, model);
|
||||
if (strcmp(thisentry->model, model)) {
|
||||
continue;
|
||||
}
|
||||
if (bestmatches < 4) {
|
||||
bestmatches = 4;
|
||||
bestmatch = thisentry;
|
||||
}
|
||||
if (thisentry->flags & SC_SHOWME)
|
||||
printf("'%s'-'%s'\n", thisentry->version, rev);
|
||||
if (strcmp(thisentry->version, rev)) {
|
||||
continue;
|
||||
}
|
||||
if (bestmatches < 5) {
|
||||
bestmatches = 5;
|
||||
bestmatch = thisentry;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif /* NEW_SCSICONF */
|
||||
if (bestmatch == (struct scsidevs *) 0) {
|
||||
bestmatch = &unknowndev;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
*
|
||||
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
|
||||
*
|
||||
* $Id: scsiconf.h,v 1.31 1995/11/21 12:55:01 bde Exp $
|
||||
* $Id: scsiconf.h,v 1.32 1995/12/05 07:14:25 julian Exp $
|
||||
*/
|
||||
#ifndef SCSI_SCSICONF_H
|
||||
#define SCSI_SCSICONF_H 1
|
||||
@ -232,7 +232,6 @@ extern struct scsi_device_config scsi_dinit[];
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef NEW_SCSICONF
|
||||
/*
|
||||
* Define various devices that we know mis-behave in some way,
|
||||
* and note how they are bad, so we can correct for them
|
||||
@ -272,7 +271,9 @@ typedef struct st_mode st_modes[4];
|
||||
#define SD_Q_NO_FAST SCSI_Q_NO_FAST
|
||||
#define SD_Q_NO_WIDE SCSI_Q_NO_WIDE
|
||||
|
||||
#endif
|
||||
/* cd specific CD_Q_* */
|
||||
#define CD_Q_NO_TOUCH 0x0001
|
||||
|
||||
|
||||
/*
|
||||
* This structure describes the connection between an adapter driver and
|
||||
@ -487,7 +488,6 @@ void ukinit __P((void));
|
||||
|
||||
#define SCSI_EXTERNALLEN (sizeof(struct scsi_link))
|
||||
|
||||
#ifdef NEW_SCSICONF
|
||||
|
||||
/* XXX This belongs in a tape file.
|
||||
*/
|
||||
@ -552,7 +552,8 @@ void ukinit __P((void));
|
||||
#define QIC_1320 0x12
|
||||
#define DDS 0x13
|
||||
#define DAT_1 0x13
|
||||
#endif /* NEW_SCSICONF */
|
||||
#define QIC_3080 0x29
|
||||
|
||||
|
||||
/* XXX (dufault@hda.com) This is used only by "su" and "sctarg".
|
||||
* The minor number field conflicts with the disk slice code,
|
||||
|
190
sys/scsi/st.c
190
sys/scsi/st.c
@ -12,7 +12,7 @@
|
||||
* on the understanding that TFS is not responsible for the correct
|
||||
* functioning of this software in any circumstances.
|
||||
*
|
||||
* $Id: st.c,v 1.51 1995/12/09 20:42:38 phk Exp $
|
||||
* $Id: st.c,v 1.52 1995/12/10 01:47:34 bde Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -68,94 +68,6 @@
|
||||
|
||||
#define SCSI_2_MAX_DENSITY_CODE 0x17 /* maximum density code specified
|
||||
* in SCSI II spec. */
|
||||
#ifndef NEW_SCSICONF
|
||||
/*
|
||||
* Define various devices that we know mis-behave in some way,
|
||||
* and note how they are bad, so we can correct for them
|
||||
*/
|
||||
struct modes {
|
||||
u_int32 blksiz;
|
||||
u_int32 quirks; /* same definitions as in rogues */
|
||||
char density;
|
||||
char spare[3];
|
||||
};
|
||||
|
||||
struct rogues {
|
||||
char *name;
|
||||
char *manu;
|
||||
char *model;
|
||||
char *version;
|
||||
u_int32 quirks; /* valid for all modes */
|
||||
struct modes modes[4];
|
||||
};
|
||||
|
||||
/* define behaviour codes (quirks) */
|
||||
#define ST_Q_NEEDS_PAGE_0 0x00001
|
||||
#define ST_Q_FORCE_FIXED_MODE 0x00002
|
||||
#define ST_Q_FORCE_VAR_MODE 0x00004
|
||||
#define ST_Q_SNS_HLP 0x00008 /* must do READ for good MODE SENSE */
|
||||
#define ST_Q_IGNORE_LOADS 0x00010
|
||||
#define ST_Q_BLKSIZ 0x00020 /* variable-block media_blksiz > 0 */
|
||||
|
||||
static struct rogues gallery[] = /* ends with an all-null entry */
|
||||
{
|
||||
{"Such an old device ", "pre-scsi", " unknown model ", "????",
|
||||
0,
|
||||
{
|
||||
{512, ST_Q_FORCE_FIXED_MODE, 0}, /* minor 0,1,2,3 */
|
||||
{512, ST_Q_FORCE_FIXED_MODE, QIC_24}, /* minor 4,5,6,7 */
|
||||
{0, ST_Q_FORCE_VAR_MODE, HALFINCH_1600}, /* minor 8,9,10,11 */
|
||||
{0, ST_Q_FORCE_VAR_MODE, HALFINCH_6250} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{"Tandberg tdc3600", "TANDBERG", " TDC 3600", "????",
|
||||
ST_Q_NEEDS_PAGE_0,
|
||||
{
|
||||
{0, 0, 0}, /* minor 0,1,2,3 */
|
||||
{0, ST_Q_FORCE_VAR_MODE, QIC_525}, /* minor 4,5,6,7 */
|
||||
{0, 0, QIC_150}, /* minor 8,9,10,11 */
|
||||
{0, 0, QIC_120} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{"Rev 5 of the Archive 2525", "ARCHIVE ", "VIPER 2525 25462", "-005",
|
||||
0,
|
||||
{
|
||||
{0, ST_Q_SNS_HLP, 0}, /* minor 0,1,2,3 */
|
||||
{0, ST_Q_SNS_HLP, QIC_525}, /* minor 4,5,6,7 */
|
||||
{0, 0, QIC_150}, /* minor 8,9,10,11 */
|
||||
{0, 0, QIC_120} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{"Archive Viper 150", "ARCHIVE ", "VIPER 150", "????",
|
||||
ST_Q_NEEDS_PAGE_0,
|
||||
{
|
||||
{0, 0, 0}, /* minor 0,1,2,3 */
|
||||
{0, 0, QIC_150}, /* minor 4,5,6,7 */
|
||||
{0, 0, QIC_120}, /* minor 8,9,10,11 */
|
||||
{0, 0, QIC_24} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{"Wangtek 5525ES", "WANGTEK ", "5525ES SCSI REV7", "????",
|
||||
0,
|
||||
{
|
||||
{0, 0, 0}, /* minor 0,1,2,3 */
|
||||
{0, ST_Q_BLKSIZ, QIC_525}, /* minor 4,5,6,7 */
|
||||
{0, 0, QIC_150}, /* minor 8,9,10,11 */
|
||||
{0, 0, QIC_120} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{"WangDAT model 1300", "WangDAT ", "Model 1300", "????",
|
||||
0,
|
||||
{
|
||||
{0, 0, 0}, /* minor 0,1,2,3 */
|
||||
{512, ST_Q_FORCE_FIXED_MODE, 0x13}, /* minor 4,5,6,7 */
|
||||
{1024, ST_Q_FORCE_FIXED_MODE, 0x13}, /* minor 8,9,10,11 */
|
||||
{0, ST_Q_FORCE_VAR_MODE, 0x13} /* minor 12,13,14,15 */
|
||||
}
|
||||
},
|
||||
{(char *) 0}
|
||||
};
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
static errval st_space __P((u_int32 unit, int32 number, u_int32 what, u_int32 flags));
|
||||
static errval st_rewind __P((u_int32 unit, boolean immed, u_int32 flags));
|
||||
@ -178,9 +90,6 @@ static void ststart(u_int32 unit, u_int32 flags);
|
||||
static void st_unmount __P((int unit, boolean eject));
|
||||
static errval st_mount_tape __P((dev_t dev, u_int32 flags));
|
||||
static void st_loadquirks __P((struct scsi_link *sc_link));
|
||||
#ifndef NEW_SCSICONF
|
||||
static void st_identify_drive __P((u_int32 unit));
|
||||
#endif
|
||||
static errval st_interpret_sense __P((struct scsi_xfer *xs));
|
||||
|
||||
#define ESUCCESS 0
|
||||
@ -198,9 +107,6 @@ struct scsi_data {
|
||||
/*--------------------parameters reported by the device ----------------------*/
|
||||
u_int32 blkmin; /* min blk size */
|
||||
u_int32 blkmax; /* max blk size */
|
||||
#ifndef NEW_SCSICONF
|
||||
struct rogues *rogues; /* if we have a rogue entry */
|
||||
#endif
|
||||
/*--------------------parameters reported by the device for this media--------*/
|
||||
u_int32 numblks; /* nominal blocks capacity */
|
||||
u_int32 media_blksiz; /* 0 if not ST_FIXEDBLOCKS */
|
||||
@ -208,11 +114,7 @@ struct scsi_data {
|
||||
/*--------------------quirks for the whole drive------------------------------*/
|
||||
u_int32 drive_quirks; /* quirks of this drive */
|
||||
/*--------------------How we should set up when openning each minor device----*/
|
||||
#ifdef NEW_SCSICONF
|
||||
st_modes modes; /* plus more for each mode */
|
||||
#else
|
||||
struct modes modes[4]; /* plus more for each mode */
|
||||
#endif
|
||||
u_int8 modeflags[4]; /* flags for the modes */
|
||||
#define DENSITY_SET_BY_USER 0x01
|
||||
#define DENSITY_SET_BY_QUIRK 0x02
|
||||
@ -381,11 +283,7 @@ stattach(struct scsi_link *sc_link)
|
||||
* Check if the drive is a known criminal and take
|
||||
* Any steps needed to bring it into line
|
||||
*/
|
||||
#ifdef NEW_SCSICONF
|
||||
st_loadquirks(sc_link);
|
||||
#else
|
||||
st_identify_drive(unit);
|
||||
#endif
|
||||
/*
|
||||
* Use the subdriver to request information regarding
|
||||
* the drive. We cannot use interrupts yet, so the
|
||||
@ -491,83 +389,6 @@ stattach(struct scsi_link *sc_link)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef NEW_SCSICONF
|
||||
/*
|
||||
* Use the inquiry routine in 'scsi_base' to get drive info so we can
|
||||
* Further tailor our behaviour.
|
||||
*/
|
||||
static void
|
||||
st_identify_drive(unit)
|
||||
u_int32 unit;
|
||||
{
|
||||
struct scsi_link *sc_link = SCSI_LINK(&st_switch, unit);
|
||||
struct scsi_data *st = sc_link->sd;
|
||||
struct rogues *finger;
|
||||
char manu[32];
|
||||
char model[32];
|
||||
char model2[32];
|
||||
char version[32];
|
||||
u_int32 model_len;
|
||||
struct scsi_inquiry_data *inqbuf = &sc_link->inqbuf;
|
||||
|
||||
/*
|
||||
* Get the device type information
|
||||
*/
|
||||
if (scsi_inquire(sc_link, inqbuf,
|
||||
SCSI_NOSLEEP | SCSI_NOMASK | SCSI_SILENT) != 0) {
|
||||
printf("st%ld: couldn't get device type, using default\n", unit);
|
||||
return;
|
||||
}
|
||||
if ((inqbuf->version & SID_ANSII) == 0) {
|
||||
/*
|
||||
* If not advanced enough, use default values
|
||||
*/
|
||||
strncpy(manu, "pre-scsi", 8);
|
||||
manu[8] = 0;
|
||||
strncpy(model, " unknown model ", 16);
|
||||
model[16] = 0;
|
||||
strncpy(version, "????", 4);
|
||||
version[4] = 0;
|
||||
} else {
|
||||
strncpy(manu, inqbuf->vendor, 8);
|
||||
manu[8] = 0;
|
||||
strncpy(model, inqbuf->product, 16);
|
||||
model[16] = 0;
|
||||
strncpy(version, inqbuf->revision, 4);
|
||||
version[4] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load the parameters for this kind of device, so we
|
||||
* treat it as appropriate for each operating mode.
|
||||
* Only check the number of characters in the array's
|
||||
* model entry, not the entire model string returned.
|
||||
*/
|
||||
finger = gallery;
|
||||
while (finger->name) {
|
||||
model_len = 0;
|
||||
while (finger->model[model_len] && (model_len < 32)) {
|
||||
model2[model_len] = model[model_len];
|
||||
model_len++;
|
||||
}
|
||||
model2[model_len] = 0;
|
||||
if ((strcmp(manu, finger->manu) == 0)
|
||||
&& (strcmp(model2, finger->model) == 0 ||
|
||||
strcmp("????????????????", finger->model) == 0)
|
||||
&& (strcmp(version, finger->version) == 0 ||
|
||||
strcmp("????", finger->version) == 0)) {
|
||||
printf("st%ld: %s is a known rogue\n", unit, finger->name);
|
||||
st->rogues = finger;
|
||||
st->drive_quirks = finger->quirks;
|
||||
st->quirks = finger->quirks; /*start value */
|
||||
st_loadquirks(sc_link);
|
||||
break;
|
||||
} else {
|
||||
finger++; /* go to next suspect */
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* NEW_SCSICONF */
|
||||
|
||||
/*
|
||||
* initialise the subdevices to the default (QUIRK) state.
|
||||
@ -580,7 +401,6 @@ st_loadquirks(sc_link)
|
||||
{
|
||||
struct scsi_data *st = sc_link->sd;
|
||||
int i;
|
||||
#ifdef NEW_SCSICONF
|
||||
struct st_mode *mode;
|
||||
struct st_mode *mode2;
|
||||
|
||||
@ -590,14 +410,6 @@ st_loadquirks(sc_link)
|
||||
|
||||
st->quirks = st->drive_quirks = sc_link->quirks;
|
||||
|
||||
#else
|
||||
struct modes *mode;
|
||||
struct modes *mode2;
|
||||
|
||||
if (!st->rogues)
|
||||
return;
|
||||
mode = st->rogues->modes;
|
||||
#endif
|
||||
mode2 = st->modes;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user