xref: /csrg-svn/sys/hp300/dev/rdreg.h (revision 63151)
141480Smckusick /*
241480Smckusick  * Copyright (c) 1988 University of Utah.
3*63151Sbostic  * Copyright (c) 1982, 1990, 1993
4*63151Sbostic  *	The Regents of the University of California.  All rights reserved.
541480Smckusick  *
641480Smckusick  * This code is derived from software contributed to Berkeley by
741480Smckusick  * the Systems Programming Group of the University of Utah Computer
841480Smckusick  * Science Department.
941480Smckusick  *
1041480Smckusick  * %sccs.include.redist.c%
1141480Smckusick  *
1246681Smckusick  * from: Utah $Hdr: rdreg.h 1.2 90/10/12$
1341480Smckusick  *
14*63151Sbostic  *	@(#)rdreg.h	8.1 (Berkeley) 06/10/93
1541480Smckusick  */
1641480Smckusick 
1741480Smckusick struct	rd_iocmd {
1841480Smckusick 	char	c_pad;
1941480Smckusick 	char	c_unit;
2041480Smckusick 	char	c_volume;
2141480Smckusick 	char	c_saddr;
2241480Smckusick 	short	c_hiaddr;
2341480Smckusick 	long	c_addr;
2441480Smckusick 	char	c_nop2;
2541480Smckusick 	char	c_slen;
2641480Smckusick 	long	c_len;
2741480Smckusick 	char	c_cmd;
2841480Smckusick 	char	c_pad2;
2941480Smckusick };
3041480Smckusick 
3141480Smckusick struct	rd_rscmd {
3241480Smckusick 	char	c_unit;
3341480Smckusick 	char	c_sram;
3441480Smckusick 	char	c_ram;
3541480Smckusick 	char	c_cmd;
3641480Smckusick };
3741480Smckusick 
3841480Smckusick struct	rd_stat {
3941480Smckusick 	char	c_vu;
4041480Smckusick 	char	c_pend;
4141480Smckusick 	short	c_ref;
4241480Smckusick 	short	c_fef;
4341480Smckusick 	short	c_aef;
4441480Smckusick 	short	c_ief;
4541480Smckusick 	union {
4641480Smckusick 		char cu_raw[10];
4741480Smckusick 		struct {
4841480Smckusick 			short	cu_msw;
4941480Smckusick 			long	cu_lsl;
5041480Smckusick 		} cu_sva;
5141480Smckusick 		struct {
5241480Smckusick 			long	cu_cyhd;
5341480Smckusick 			short	cu_sect;
5441480Smckusick 		} cu_tva;
5541480Smckusick 	} c_pf;
5641480Smckusick };
5741480Smckusick #define c_raw	c_pf.cu_raw
5841480Smckusick #define c_blk	c_pf.cu_sva.cu_lsl	/* for now */
5941480Smckusick #define c_tva	c_pf.cu_tva
6041480Smckusick 
6141480Smckusick struct	rd_ssmcmd {
6241480Smckusick 	char	c_unit;
6341480Smckusick 	char	c_cmd;
6441480Smckusick 	short	c_refm;
6541480Smckusick 	short	c_fefm;
6641480Smckusick 	short	c_aefm;
6741480Smckusick 	short	c_iefm;
6841480Smckusick };
6941480Smckusick 
7041480Smckusick struct	rd_srcmd {
7141480Smckusick 	char	c_unit;
7241480Smckusick 	char	c_nop;
7341480Smckusick 	char	c_cmd;
7441480Smckusick 	char	c_param;
7541480Smckusick };
7641480Smckusick 
7741480Smckusick struct	rd_clearcmd {
7841480Smckusick 	char	c_unit;
7941480Smckusick 	char	c_cmd;
8041480Smckusick };
8141480Smckusick 
8241480Smckusick struct rd_describe {
8341480Smckusick 	u_int	d_iuw:16,	/* controller: installed unit word */
8441480Smckusick 		d_cmaxxfr:16,	/* controller: max transfer rate (Kb) */
8541480Smckusick 		d_ctype:8,	/* controller: controller type */
8641480Smckusick 		d_utype:8,	/* unit: unit type */
8741480Smckusick 		d_name:24,	/* unit: name (6 BCD digits) */
8841480Smckusick 		d_sectsize:16,	/* unit: # of bytes per block (sector) */
8941480Smckusick 		d_blkbuf:8,	/* unit: # of blocks which can be buffered */
9041480Smckusick 		d_burstsize:8,	/* unit: recommended burst size */
9141480Smckusick 		d_blocktime:16,	/* unit: block time (u-sec) */
9241480Smckusick 		d_uavexfr:16,	/* unit: average transfer rate (Kb) */
9341480Smckusick 		d_retry:16,	/* unit: optimal retry time (1/100-sec) */
9441480Smckusick 		d_access:16,	/* unit: access time param (1/100-sec) */
9541480Smckusick 		d_maxint:8,	/* unit: maximum interleave */
9641480Smckusick 		d_fvbyte:8,	/* unit: fixed volume byte */
9741480Smckusick 		d_rvbyte:8,	/* unit: removeable volume byte */
9841480Smckusick 		d_maxcyl:24,	/* volume: maximum cylinder */
9941480Smckusick 		d_maxhead:8,	/* volume: maximum head */
10041480Smckusick 		d_maxsect:16,	/* volume: maximum sector on track */
10141480Smckusick 		d_maxvsecth:16,	/* volume: maximum sector on volume (MSW) */
10241480Smckusick 		d_maxvsectl:32,	/* volume: maximum sector on volume (LSWs) */
10341480Smckusick 		d_interleave:8;	/* volume: current interleave */
10441480Smckusick  };
10541480Smckusick 
10657327Shibler /* HW ids */
10757327Shibler #define	RD7946AID	0x220	/* also 7945A */
10857327Shibler #define	RD9134DID	0x221	/* also 9122S */
10957327Shibler #define	RD9134LID	0x222	/* also 9122D */
11057327Shibler #define	RD7912PID	0x209
11157327Shibler #define RD7914CTID	0x20A
11257327Shibler #define	RD7914PID	0x20B
11357327Shibler #define	RD7958AID	0x22B
11457327Shibler #define RD7957AID	0x22A
11557327Shibler #define	RD7933HID	0x212
11657327Shibler #define	RD7936HID	0x213	/* just guessing -- as of yet unknown */
11757327Shibler #define	RD7937HID	0x214
11857327Shibler #define RD7957BID	0x22C	/* another guess based on 7958B */
11957327Shibler #define RD7958BID	0x22D
12057327Shibler #define RD7959BID	0x22E	/* another guess based on 7958B */
12157327Shibler #define RD2200AID	0x22F
12257327Shibler #define RD2203AID	0x230	/* yet another guess */
12357327Shibler 
12457327Shibler /* SW ids -- indicies into rdidentinfo, order is arbitrary */
12541480Smckusick #define	RD7945A		0
12641480Smckusick #define	RD9134D		1
12741480Smckusick #define	RD9122S		2
12841480Smckusick #define	RD7912P		3
12941480Smckusick #define	RD7914P		4
13041480Smckusick #define	RD7958A		5
13141480Smckusick #define RD7957A		6
13241480Smckusick #define	RD7933H		7
13341480Smckusick #define	RD9134L		8
13441480Smckusick #define	RD7936H		9
13541480Smckusick #define	RD7937H		10
13641480Smckusick #define RD7914CT	11
13741480Smckusick #define RD7946A		12
13841480Smckusick #define RD9122D		13
13941480Smckusick #define RD7957B		14
14041480Smckusick #define RD7958B		15
14141480Smckusick #define RD7959B		16
14241480Smckusick 
14357327Shibler #define	NRD7945ABPT	16
14441480Smckusick #define	NRD7945ATRK	7
14557327Shibler #define	NRD9134DBPT	16
14641480Smckusick #define	NRD9134DTRK	6
14757327Shibler #define	NRD9122SBPT	8
14841480Smckusick #define	NRD9122STRK	2
14957327Shibler #define	NRD7912PBPT	32
15041480Smckusick #define	NRD7912PTRK	7
15157327Shibler #define	NRD7914PBPT	32
15241480Smckusick #define	NRD7914PTRK	7
15357327Shibler #define	NRD7933HBPT	46
15441480Smckusick #define	NRD7933HTRK	13
15557327Shibler #define	NRD9134LBPT	16
15641480Smckusick #define	NRD9134LTRK	5
15741480Smckusick 
15841480Smckusick /*
15941480Smckusick  * Several HP drives have an odd number of 256 byte sectors per track.
16041480Smckusick  * This makes it rather difficult to break them into 512 and 1024 byte blocks.
16141480Smckusick  * So...we just do like HPUX and don't bother to respect hardware track/head
16241480Smckusick  * boundries -- we just mold the disk so that we use the entire capacity.
16341480Smckusick  * HPUX also sometimes doen't abide by cylinder boundries, we attempt to
16441480Smckusick  * whenever possible.
16541480Smckusick  *
16641480Smckusick  * DISK		REAL (256 BPS)		HPUX (1024 BPS)		BSD (512 BPS)
16741480Smckusick  * 		SPT x HD x CYL		SPT x HD x CYL		SPT x HD x CYL
16841480Smckusick  * -----	---------------		---------------		--------------
16946681Smckusick  * 7936:	123 x  7 x 1396		 25 x  7 x 1716		123 x  7 x  698
17046681Smckusick  * 7937:	123 x 13 x 1396		 25 x 16 x 1395		123 x 13 x  698
17141480Smckusick  *
17246681Smckusick  * 7957A:	 63 x  5 x 1013		 11 x  7 x 1036		 22 x  7 x 1036
17346681Smckusick  * 7958A:	 63 x  8 x 1013		 21 x  6 x 1013		 36 x  7 x 1013
17441480Smckusick  *
17546681Smckusick  * 7957B:	 63 x  4 x 1269		  9 x  7 x 1269		 18 x  7 x 1269
17646681Smckusick  * 7958B:	 63 x  6 x 1572		 21 x  9 x  786		 42 x  9 x  786
17746681Smckusick  * 7959B:	 63 x 12 x 1572		 21 x  9 x 1572		 42 x  9 x 1572
17846681Smckusick  *
17946681Smckusick  * 2200A:	113 x  8 x 1449		113 x  2 x 1449		113 x  4 x 1449
18046681Smckusick  * 2203A:	113 x 16 x 1449		113 x  4 x 1449		113 x  8 x 1449
18141480Smckusick  */
18257327Shibler #define	NRD7936HBPT	123
18357327Shibler #define	NRD7936HTRK	7
18457327Shibler #define	NRD7937HBPT	123
18557327Shibler #define	NRD7937HTRK	13
18657327Shibler #define	NRD7957ABPT	22
18757327Shibler #define	NRD7957ATRK	7
18857327Shibler #define	NRD7958ABPT	36
18957327Shibler #define	NRD7958ATRK	7
19057327Shibler #define	NRD7957BBPT	18
19157327Shibler #define	NRD7957BTRK	7
19257327Shibler #define	NRD7958BBPT	42
19357327Shibler #define	NRD7958BTRK	9
19457327Shibler #define	NRD7959BBPT	42
19557327Shibler #define	NRD7959BTRK	9
19657327Shibler #define	NRD2200ABPT	113
19757327Shibler #define	NRD2200ATRK	4
19857327Shibler #define	NRD2203ABPT	113
19957327Shibler #define	NRD2203ATRK	8
20041480Smckusick 
20141480Smckusick /* controller "unit" number */
20241480Smckusick #define	RDCTLR		15
20341480Smckusick 
20441480Smckusick /* convert 512 byte count into DEV_BSIZE count */
20541480Smckusick #define RDSZ(x)		((x) >> (DEV_BSHIFT-9))
20641480Smckusick 
20741480Smckusick /* convert block number into sector number and back */
20841480Smckusick #define	RDBTOS(x)	((x) << (DEV_BSHIFT-8))
20941480Smckusick #define RDSTOB(x)	((x) >> (DEV_BSHIFT-8))
21041480Smckusick 
21141480Smckusick /* extract cyl/head/sect info from three-vector address */
21241480Smckusick #define RDCYL(tva)	((u_long)(tva).cu_cyhd >> 8)
21341480Smckusick #define RDHEAD(tva)	((tva).cu_cyhd & 0xFF)
21441480Smckusick #define RDSECT(tva)	((tva).cu_sect)
21541480Smckusick 
21641480Smckusick #define	REF_MASK	0x0
21741480Smckusick #define	FEF_MASK	0x0
21841480Smckusick #define	AEF_MASK	0x0
21941480Smckusick #define	IEF_MASK	0xF970
22041480Smckusick 
22141480Smckusick #define FEF_CU		0x4000	/* cross-unit */
22241480Smckusick #define FEF_DR		0x0080	/* diagnostic result */
22341480Smckusick #define FEF_IMR		0x0008	/* internal maintenance release */
22441480Smckusick #define	FEF_PF		0x0002	/* power fail */
22541480Smckusick #define	FEF_REXMT	0x0001	/* retransmit */
22641480Smckusick #define AEF_UD		0x0040	/* unrecoverable data */
22741480Smckusick #define IEF_RRMASK	0xe000	/* request release bits */
22841480Smckusick #define IEF_MD		0x0020	/* marginal data */
22941480Smckusick #define IEF_RD		0x0010	/* recoverable data */
23041480Smckusick 
23141480Smckusick #define	C_READ		0x00
23241480Smckusick #define	C_RAM		0x00	/* single vector (i.e. sector number) */
23341480Smckusick #define	C_WRITE		0x02
23441480Smckusick #define	C_CLEAR		0x08
23541480Smckusick #define	C_STATUS	0x0d
23641480Smckusick #define	C_SADDR		0x10
23741480Smckusick #define	C_SLEN		0x18
23841480Smckusick #define	C_SUNIT(x)	(0x20 | (x))
23941480Smckusick #define C_SVOL(x)	(0x40 | (x))
24041480Smckusick #define	C_NOP		0x34
24141480Smckusick #define C_DESC		0x35
24241480Smckusick #define	C_SREL		0x3b
24341480Smckusick #define	C_SSM		0x3e
24441480Smckusick #define	C_SRAM		0x48
24541480Smckusick #define	C_REL		0x140
24641480Smckusick 
24741480Smckusick #define	C_CMD		0x05
24841480Smckusick #define	C_EXEC		0x0e
24941480Smckusick #define	C_QSTAT		0x10
25041480Smckusick #define	C_TCMD		0x12
251