📄 scsi.c
字号:
* * 23-Apr-88 -- Fred Canter * A RED LETTER DAY for sure! * Fixed "most" of the problems which were preventing the * driver from running multiple devices concurrently. * * 22-Apr-88 -- Fred Canter * Prototype driver now functioning reasonably. * Much cleanup done, much more needed. * * 1-Mar-88 -- Fred Canter * Created the prototype SCSI driver from the VAXstar * TZK50 driver (stc.c). * ***********************************************************************/#include "../data/scsi_data.c"#ifdef vaxextern char cvqmsi[] [512*NBPG];extern char cvqmsirb[];#endif vaxextern char szbufmap[];extern int sz_retries[]; /* retry counter */int sz_max_numof_fills = SZ_DEFAULT_FILLS; /* Maximum number of fills to write*/ /* in order to try to keep the tape*/ /* drive streaming. *//* * This auto-configuration will be needed in both the mips and vax * cases. */int szslave(), szattach(), sz_start(), szerror();int sii_probe(), sii_intr(), sii_scsistart(), sii_reset();int kzq_probe(), kzq_intr(), kzq_scsistart(), kzq_reset();int ascprobe(), ascintr(), asc_scsistart(), asc_reset();u_short szstd[] = { 0 };struct uba_driver siidriver = { sii_probe, szslave, szattach, sz_start, szstd, "rz", szdinfo, "sii", szminfo, 0 };struct uba_driver kzqdriver = { kzq_probe, szslave, szattach, sz_start, szstd, "rz", szdinfo, "kzq", szminfo, 0 };#ifdef vaxint sz_timer1(); /* TODO1: debug */int sz_timer2(); /* TODO1: debug */int szprobe(), szintr(), sz_scsistart(), sz_reset();struct uba_driver scsidriver = { szprobe, szslave, szattach, sz_start, szstd, "rz", szdinfo, "scsi", szminfo, 0 };extern struct nexus nexus[];#endif vaxextern int sz_unit_rcvdiag[]; /* If zero, need unit's selftest status *//* * Unit on line flag. Set to one if the * device is on-line. Set to zero on any unit * attention condition. */extern int sz_unit_online[];/* * The following table is the timeout value for each command assuming that * the timer is set to go off every 30 seconds. * NOTE: not used, but keep around for command timeout data. */short sz_timetable[] = { 2, /* SZ_TUR 0x00 */ 6, /* SZ_REWIND 0x01 */ 0, /* unused 0x02 */ 2, /* SZ_RQSNS 0x03 */ 60, /* SZ_FORMAT 0x04 */ 2, /* SZ_RBL 0x05 */ 0, /* unused 0x06 */ 2, /* SZ_REASSIGN 0x07 */ 3, /* SZ_READ 0x08 */ 0, /* unused 0x09 */ 3, /* SZ_WRITE 0x0a */ 2, /* SZ_TRKSEL 0x0b */ 0, /* unused 0x0c */ 0, /* unused 0x0d */ 0, /* unused 0x0e */ 0, /* unused 0x0f */ 2, /* SZ_WFM 0x10 */ 90, /* SZ_SPACE 0x11 */ 2, /* SZ_INQ 0x12 */ 90, /* SZ_VFY 0x13 */ 2, /* SZ_RBD 0x14 */ 2, /* SZ_MODSEL 0x15 */ 2, /* SZ_RESUNIT 0x16 */ 2, /* SZ_RELUNIT 0x17 */ 0, /* unused 0x18 */ 90, /* SZ_ERASE 0x19 */ 2, /* SZ_MODSNS 0x1a */ 6, /* SZ_LOAD/SZ_UNLOAD 0x1b */ 6, /* SZ_RCVDIAG 0x1c */ 2, /* SZ_SNDDIAG 0x1d */ 2, /* SZ_MEDREMOVAL 0x1e */ 0, /* unused 0x1f */ 0, /* unused 0x20 */ 0, /* unused 0x21 */ 0, /* unused 0x22 */ 0, /* unused 0x23 */ 0, /* unused 0x24 */ 2, /* SZ_RDCAP 0x25 */ 0, /* unused 0x26 */ 0, /* unused 0x27 */ 3, /* SZ_READ_10 0x28 */ 0, /* unused 0x29 */ 3, /* SZ_WRITE_10 0x2a */ 0, /* SZ_SEEK_10 0x2b */ 0, /* unused 0x2c */ 0, /* unused 0x2d */ 0, /* unused 0x2e */ 10, /* SZ_VFY_DATA 0x2f */ 0, /* unused 0x30 */ 0, /* unused 0x31 */ 0, /* unused 0x32 */ 0, /* unused 0x33 */ 0, /* unused 0x34 */ 0, /* unused 0x35 */ 0, /* unused 0x36 */ 2, /* SZ_RDD 0x37 */ 0, /* unused 0x38 */ 0, /* unused 0x39 */ 0, /* unused 0x3a */ 0, /* unused 0x3b */ 0, /* unused 0x3c */ 0, /* unused 0x3d */ 0, /* unused 0x3e */ 0, /* unused 0x3f */ 2, /* SZ_CHANGE_DEFINITION 0x40 */ 0, /* unused 0x41 */ 2, /* SZ_READ_SUBCHAN 0x42 */ 2, /* SZ_READ_TOC 0x43 */ 2, /* SZ_READ_HEADER 0x44 */ 90, /* SZ_PLAY_AUDIO 0x45 */ 0, /* unused 0x46 */ 90, /* SZ_PLAY_AUDIO_MSF 0x47 */ 90, /* SZ_PLAY_AUDIO_TI 0x48 */ 90, /* SZ_PLAY_TRACK_REL 0x49 */ 0, /* unused 0x4a */ 2, /* SZ_PAUSE_RESUME 0x4b */ 0, /* unused 0x4c */ 0, /* unused 0x4d */ 0, /* unused 0x4e */ 0, /* unused 0x4f */ 0, /* unused 0x50 */ 0, /* unused 0x51 */ 0, /* unused 0x52 */ 0, /* unused 0x53 */ 0, /* unused 0x54 */ 0, /* unused 0x55 */ 0, /* unused 0x56 */ 0, /* unused 0x57 */ 0, /* unused 0x58 */ 0, /* unused 0x59 */ 0, /* unused 0x5a */ 0, /* unused 0x5b */ 0, /* unused 0x5c */ 0, /* unused 0x5d */ 0, /* unused 0x5e */ 0, /* unused 0x5f */ 90, /* SZ_P_FSPACER 0x60 */ 90, /* SZ_P_FSPACEF 0x61 */ 90, /* SZ_P_BSPACER 0x62 */ 90, /* SZ_P_BSPACEF 0x63 */ 2, /* SZ_P_CACHE 0x64 */ 2, /* SZ_P_NOCACHE 0x65 */ 0, /* SZ_P_LOAD 0x66 */ 0, /* SZ_P_UNLOAD 0x67 */ 0, /* SZ_P_SSUNIT 0x68 */ 0, /* SZ_P_RETENSION 0x69 */ 1, /* SZ_P_EJECT 0x6a */ 0, /* unused 0x6b */ 0, /* unused 0x6c */ 0, /* unused 0x6d */ 0, /* unused 0x6e */ 0, /* unused 0x6f */ 0, /* unused 0x70 */ 0, /* unused 0x71 */ 0, /* unused 0x72 */ 0, /* unused 0x73 */ 0, /* unused 0x74 */ 0, /* unused 0x75 */ 0, /* unused 0x76 */ 0, /* unused 0x77 */ 0, /* unused 0x78 */ 0, /* unused 0x79 */ 0, /* unused 0x7a */ 0, /* unused 0x7b */ 0, /* unused 0x7c */ 0, /* unused 0x7d */ 0, /* unused 0x7e */ 0, /* unused 0x7f */ 0, /* unused 0x80 */ 0, /* unused 0x81 */ 0, /* unused 0x82 */ 0, /* unused 0x83 */ 0, /* unused 0x84 */ 0, /* unused 0x85 */ 0, /* unused 0x86 */ 0, /* unused 0x87 */ 0, /* unused 0x88 */ 0, /* unused 0x89 */ 0, /* unused 0x8a */ 0, /* unused 0x8b */ 0, /* unused 0x8c */ 0, /* unused 0x8d */ 0, /* unused 0x8e */ 0, /* unused 0x8f */ 0, /* unused 0x90 */ 0, /* unused 0x91 */ 0, /* unused 0x92 */ 0, /* unused 0x93 */ 0, /* unused 0x94 */ 0, /* unused 0x95 */ 0, /* unused 0x96 */ 0, /* unused 0x97 */ 0, /* unused 0x98 */ 0, /* unused 0x99 */ 0, /* unused 0x9a */ 0, /* unused 0x9b */ 0, /* unused 0x9c */ 0, /* unused 0x9d */ 0, /* unused 0x9e */ 0, /* unused 0x9f */ 0, /* unused 0xa0 */ 0, /* unused 0xa1 */ 0, /* unused 0xa2 */ 0, /* unused 0xa3 */ 0, /* unused 0xa4 */ 90, /* SZ_PLAY_AUDIO_12 0xa5 */ 90, /* SZ_PLAY_TRACK_REL_12 0xa6 */ 0, /* unused 0xa7 */ 0, /* unused 0xa8 */ 0, /* unused 0xa9 */ 0, /* unused 0xaa */ 0, /* unused 0xab */ 0, /* unused 0xac */ 0, /* unused 0xad */ 0, /* unused 0xae */ 0, /* unused 0xaf */ 0, /* unused 0xb0 */ 0, /* unused 0xb1 */ 0, /* unused 0xb2 */ 0, /* unused 0xb3 */ 0, /* unused 0xb4 */ 0, /* unused 0xb5 */ 0, /* unused 0xb6 */ 0, /* unused 0xb7 */ 0, /* unused 0xb8 */ 0, /* unused 0xb9 */ 0, /* unused 0xba */ 0, /* unused 0xbb */ 0, /* unused 0xbc */ 0, /* unused 0xbd */ 0, /* unused 0xbe */ 0, /* unused 0xbf */ 2, /* SZ_SET_ADDRESS_FORMAT 0xc0 */ 0, /* unused 0xc1 */ 0, /* unused 0xc2 */ 0, /* unused 0xc3 */ 2, /* SZ_PLAYBACK_STATUS 0xc4 */ 0, /* unused 0xc5 */ 90, /* SZ_PLAY_TRACK 0xc6 */ 90, /* SZ_PLAY_MSF 0xc7 */ 90, /* SZ_PLAY_VAUDIO 0xc8 */ 2, /* SZ_PLAYBACK_CONTROL 0xc9 */ 0, /* unused 0xca */ 0, /* unused 0xcb */ 0, /* unused 0xcc */ 0, /* unused 0xcd */ 0, /* unused 0xce */ 0, /* unused 0xcf */ 0, /* unused 0xd0 */ 0, /* unused 0xd1 */ 0, /* unused 0xd2 */ 0, /* unused 0xd3 */ 0, /* unused 0xd4 */ 0, /* unused 0xd5 */ 0, /* unused 0xd6 */ 0, /* unused 0xd7 */ 0, /* unused 0xd8 */ 0, /* unused 0xd9 */ 0, /* unused 0xda */ 0, /* unused 0xdb */ 0, /* unused 0xdc */ 0, /* unused 0xdd */ 0, /* unused 0xde */ 0, /* unused 0xdf */ 0, /* unused 0xe0 */ 0, /* unused 0xe1 */ 0, /* unused 0xe2 */ 0, /* unused 0xe3 */ 0, /* unused 0xe4 */ 0, /* unused 0xe5 */ 0, /* unused 0xe6 */ 0, /* unused 0xe7 */ 0, /* unused 0xe8 */ 0, /* unused 0xe9 */ 0, /* unused 0xea */ 0, /* unused 0xeb */ 0, /* unused 0xec */ 0, /* unused 0xed */ 0, /* unused 0xee */ 0, /* unused 0xef */ 0, /* unused 0xf0 */ 0, /* unused 0xf1 */ 0, /* unused 0xf2 */ 0, /* unused 0xf3 */ 0, /* unused 0xf4 */ 0, /* unused 0xf5 */ 0, /* unused 0xf6 */ 0, /* unused 0xf7 */ 0, /* unused 0xf8 */ 0, /* unused 0xf9 */ 0, /* unused 0xfa */ 0, /* unused 0xfb */ 0, /* unused 0xfc */ 0, /* unused 0xfd */ 0, /* unused 0xfe */ 0 /* unused 0xff */};#include "scsi_debug.h"int rdatdebug = 0;int scsidebug = 0; /* general purpose debugging var */int sz_direct_track_mode = 0; /* for testing multivolume dump */#ifdef vax/* TODO2: addr of sz_softc for cntlr 1 - DEBUG */struct sz_softc *sz_sc1_addr = (struct sz_softc *)sz_softc + 1;#endif vax/* * TODO: comment */int szp_firstcall = 1;int szp_ntz = 0;int szp_nrz = 0;int szp_ncz = 0;int szp_nrx = 0;/* * These are default scsi_devtab entires for unknown devices. * There are here in case the user removes the "UNKNOWN" * entries from the scsi_devtab in scsi_data.c. */struct scsi_devtab szp_rz_udt = {"UNKNOWN", 7, DEV_RZxx, RZxx, sz_rzxx_sizes, 0, 0, SCSI_STARTUNIT|SCSI_MODSEL_PF, NO_OPTTABLE };struct scsi_devtab szp_tz_udt = {"UNKNOWN", 7, DEV_TZxx, TZxx, sz_null_sizes, 0, 0, SCSI_NODIAG, NO_OPTTABLE};struct scsi_devtab szp_cz_udt = {"UNKNOWN", 7, DEV_RZxx, RZxx, sz_rrd40_sizes, 0, 0, SCSI_STARTUNIT|SCSI_MODSEL_PF, NO_OPTTABLE };/* TODO: debug (segcnt size limits), remove later *//* If set, limits segcnt to value of ??_max_xfer *//* only takes effect after reboot! *//* eg: 16384 for 16KB *//* TODO: limit xfer size until scsi hardware gets fixed. *//* TODO: stray interrupts interfere with DMA xfers. */#ifdef vaxint rz_max_xfer = 0;int cz_max_xfer = 0;int tz_max_xfer = 0;#endif vax#ifdef mipsint rz_max_xfer = 8192;int cz_max_xfer = 8192;int tz_max_xfer = 8192;#endif mips/* TODO: end of debug */extern int get_validbuf(); /* for array indexing *//* * Compare strings (at most n bytes): s1>s2: >0 s1==s2: 0 s1<s2: <0 * NOTE: count must be accurate, because only one string is null terminated. */sz_strncmp(s1, s2, n)register char *s1, *s2;register int n;{ while (--n >= 0 && *s1 == *s2++) if (*s1++ == '\0') return(0); return(n<0 ? 0 : *s1 - *--s2);}/* * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 */sz_strcmp(s1, s2)register char *s1, *s2;{ while (*s1 == *s2++) if (*s1++=='\0') return(0); return(*s1 - *--s2);}char sz_devname[SZ_DNSIZE+1];char sz_revlevel[SZ_REV_LEN+2];/* * * Name: szattach -Attach routine * * Abstract: This routine attaches a slave to the controller * by filling in the unit information structure * (a good deal of which is not used in this driver). * Also fills in the transfer rate for iostat if * the slave is a disk. Prints the device type * during autoconfigure. * * Inputs: * * ui Unit information structure pointer. *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -