⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 5 页
字号:
 * *   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 + -