xref: /csrg-svn/sys/hp300/dev/rd_compat.c (revision 63151)
157329Shibler /*
257329Shibler  * 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.
557329Shibler  *
657329Shibler  * This code is derived from software contributed to Berkeley by
757329Shibler  * the Systems Programming Group of the University of Utah Computer
857329Shibler  * Science Department.
957329Shibler  *
1057329Shibler  * %sccs.include.redist.c%
1157329Shibler  *
1257329Shibler  * from: Utah $Hdr: rd_compat.c 1.1 92/12/21$
1357329Shibler  *
14*63151Sbostic  *	@(#)rd_compat.c	8.1 (Berkeley) 06/10/93
1557329Shibler  */
1657329Shibler 
1757329Shibler /*
1857329Shibler  * Compatibility for CS80 disks without disklabels.
1957329Shibler  */
2057329Shibler #include "rd.h"
2157329Shibler #if NRD > 0
2257329Shibler 
2357329Shibler #include <sys/param.h>
2457329Shibler #include <sys/disklabel.h>
2557329Shibler #include <hp/dev/device.h>
2657329Shibler #include <hp300/dev/rdreg.h>
2757329Shibler #include <hp300/dev/rdvar.h>
2857329Shibler 
2957329Shibler /*
3057329Shibler  * CS/80 partitions.  We reserve the first cylinder for a LIF
3157329Shibler  * style boot directory (the 8k allowed in the BSD filesystem
3257329Shibler  * is just way too small).  This boot area is outside of all but
3357329Shibler  * the C partition.  This implies that you cannot use the C
3457329Shibler  * partition on a bootable disk since the filesystem would overlay
3557329Shibler  * the boot area.  You must use the A partition.
3657329Shibler  *
3757329Shibler  * These maps support four basic layouts:
3857329Shibler  *
3957329Shibler  *	A/B/G:   This is the "traditional" setup for a bootable disk.
4057329Shibler  *	         A is the root partition, B the swap, and G a user partition.
4157329Shibler  *	A/D/H:   This is a setup for bootable systems requiring more swap
4257329Shibler  *		 (e.g. those who use HPCL).  It has A as the root, D as a
4357329Shibler  *		 larger swap, and H as a smaller user partition.
4457329Shibler  *	A/D/E/F: Similar to A/D/H with E and F breaking H into two partitions.
4557329Shibler  *		 E could be used for /usr and F for users.
4657329Shibler  *	C:       This gives a single, non-bootable, large user filesystem.
4757329Shibler  *	         Good for second drives on a machine (e.g. /usr/src).
4857329Shibler  */
4957329Shibler struct	size {
5057329Shibler 	daddr_t	nblocks;
5157329Shibler 	int	cyloff;
5257329Shibler } rd7945A_sizes[8] = {
5357329Shibler 	RDSZ(15904),	1,		/* A=cyl 1 thru 142 */
5457329Shibler 	RDSZ(20160),	143,		/* B=cyl 143 thru 322 */
5557329Shibler 	RDSZ(108416),	0,		/* C=cyl 0 thru 967 */
5657329Shibler 	RDSZ(40320),	143,		/* D=cyl 143 thru 502 */
5757329Shibler 	RDSZ(0),	0,		/* E=<undefined> */
5857329Shibler 	RDSZ(0),	0,		/* F=<undefined> */
5957329Shibler 	RDSZ(72240),	323,		/* G=cyl 323 thru 967 */
6057329Shibler 	RDSZ(52080),	503,		/* H=cyl 503 thru 967 */
6157329Shibler }, rd9134D_sizes[8] = {
6257329Shibler 	RDSZ(15936),	1,		/* A=cyl 1 thru 166 */
6357329Shibler 	RDSZ(13056),	167,		/* B=cyl 167 thru 302 */
6457329Shibler 	RDSZ(29088),	0,		/* C=cyl 0 thru 302 */
6557329Shibler 	RDSZ(0),	0,		/* D=<undefined> */
6657329Shibler 	RDSZ(0),	0,		/* E=<undefined> */
6757329Shibler 	RDSZ(0),	0,		/* F=<undefined> */
6857329Shibler 	RDSZ(0),	0,		/* G=<undefined> */
6957329Shibler 	RDSZ(0),	0,		/* H=<undefined> */
7057329Shibler }, rd9122S_sizes[8] = {
7157329Shibler 	RDSZ(0),	0,		/* A=<undefined> */
7257329Shibler 	RDSZ(0),	0,		/* B=<undefined> */
7357329Shibler 	RDSZ(1232),	0,		/* C=cyl 0 thru 76 */
7457329Shibler 	RDSZ(0),	0,		/* D=<undefined> */
7557329Shibler 	RDSZ(0),	0,		/* E=<undefined> */
7657329Shibler 	RDSZ(0),	0,		/* F=<undefined> */
7757329Shibler 	RDSZ(0),	0,		/* G=<undefined> */
7857329Shibler 	RDSZ(0),	0,		/* H=<undefined> */
7957329Shibler }, rd7912P_sizes[8] = {
8057329Shibler 	RDSZ(15904),	0,		/* A=cyl 1 thru 71 */
8157329Shibler 	RDSZ(22400),	72,		/* B=cyl 72 thru 171 */
8257329Shibler 	RDSZ(128128),	0,		/* C=cyl 0 thru 571 */
8357329Shibler 	RDSZ(42560),	72,		/* D=cyl 72 thru 261 */
8457329Shibler 	RDSZ(0),	292,		/* E=<undefined> */
8557329Shibler 	RDSZ(0),	542,		/* F=<undefined> */
8657329Shibler 	RDSZ(89600),	172,		/* G=cyl 221 thru 571 */
8757329Shibler 	RDSZ(69440),	262,		/* H=cyl 262 thru 571 */
8857329Shibler }, rd7914P_sizes[8] = {
8957329Shibler 	RDSZ(15904),	1,		/* A=cyl 1 thru 71 */
9057329Shibler 	RDSZ(40320),	72,		/* B=cyl 72 thru 251 */
9157329Shibler 	RDSZ(258048),	0,		/* C=cyl 0 thru 1151 */
9257329Shibler 	RDSZ(64960),	72,		/* D=cyl 72 thru 361 */
9357329Shibler 	RDSZ(98560),	362,		/* E=cyl 362 thru 801 */
9457329Shibler 	RDSZ(78400),	802,		/* F=cyl 802 thru 1151 */
9557329Shibler 	RDSZ(201600),	252,		/* G=cyl 221 thru 1151 */
9657329Shibler 	RDSZ(176960),	362,		/* H=cyl 362 thru 1151 */
9757329Shibler }, rd7933H_sizes[8] = {
9857329Shibler 	RDSZ(16146),	1,		/* A=cyl 1 thru 27 */
9957329Shibler 	RDSZ(66976),	28,		/* B=cyl 28 thru 139 */
10057329Shibler 	RDSZ(789958),	0,		/* C=cyl 0 thru 1320 */
10157329Shibler 	RDSZ(16146),	140,		/* D=cyl 140 thru 166 */
10257329Shibler 	RDSZ(165646),	167,		/* E=cyl 167 thru 443 */
10357329Shibler 	RDSZ(165646),	444,		/* F=cyl 444 thru 720 */
10457329Shibler 	RDSZ(706238),	140,		/* G=cyl 140 thru 1320 */
10557329Shibler 	RDSZ(358800),	721,		/* H=cyl 721 thru 1320 */
10657329Shibler }, rd9134L_sizes[8] = {
10757329Shibler 	RDSZ(15920),	1,		/* A=cyl 1 thru 199 */
10857329Shibler 	RDSZ(20000),	200,		/* B=cyl 200 thru 449 */
10957329Shibler 	RDSZ(77840),	0,		/* C=cyl 0 thru 972 */
11057329Shibler 	RDSZ(32000),	200,		/* D=cyl 200 thru 599 */
11157329Shibler 	RDSZ(0),	0,		/* E=<undefined> */
11257329Shibler 	RDSZ(0),	0,		/* F=<undefined> */
11357329Shibler 	RDSZ(41840),	450,		/* G=cyl 450 thru 972 */
11457329Shibler 	RDSZ(29840),	600,		/* H=cyl 600 thru 972 */
11557329Shibler }, rd7957A_sizes[8] = {
11657329Shibler 	RDSZ(16016),	1,		/* A=cyl 1 thru 104 */
11757329Shibler 	RDSZ(24640),	105,		/* B=cyl 105 thru 264 */
11857329Shibler 	RDSZ(159544),	0,		/* C=cyl 0 thru 1035 */
11957329Shibler 	RDSZ(42350),	105,		/* D=cyl 105 thru 379 */
12057329Shibler 	RDSZ(54824),	380,		/* E=cyl 380 thru 735 */
12157329Shibler 	RDSZ(46200),	736,		/* F=cyl 736 thru 1035 */
12257329Shibler 	RDSZ(118734),	265,		/* G=cyl 265 thru 1035 */
12357329Shibler 	RDSZ(101024),	380,		/* H=cyl 380 thru 1035 */
12457329Shibler }, rd7958A_sizes[8] = {
12557329Shibler 	RDSZ(16128),	1,		/* A=cyl 1 thru 64 */
12657329Shibler 	RDSZ(32256),	65,		/* B=cyl 65 thru 192 */
12757329Shibler 	RDSZ(255276),	0,		/* C=cyl 0 thru 1012 */
12857329Shibler 	RDSZ(48384),	65,		/* D=cyl 65 thru 256 */
12957329Shibler 	RDSZ(100800),	257,		/* E=cyl 257 thru 656 */
13057329Shibler 	RDSZ(89712),	657,		/* F=cyl 657 thru 1012 */
13157329Shibler 	RDSZ(206640),	193,		/* G=cyl 193 thru 1012 */
13257329Shibler 	RDSZ(190512),	257,		/* H=cyl 257 thru 1012 */
13357329Shibler }, rd7957B_sizes[8] = {
13457329Shibler 	RDSZ(16002),	1,		/* A=cyl 1 thru 127 */
13557329Shibler 	RDSZ(32760),	128,		/* B=cyl 128 thru 387 */
13657329Shibler 	RDSZ(159894),	0,		/* C=cyl 0 thru 1268 */
13757329Shibler 	RDSZ(49140),	128,		/* D=cyl 128 thru 517 */
13857329Shibler 	RDSZ(50400),	518,		/* E=cyl 518 thru 917 */
13957329Shibler 	RDSZ(44226),	918,		/* F=cyl 918 thru 1268 */
14057329Shibler 	RDSZ(111006),	388,		/* G=cyl 388 thru 1268 */
14157329Shibler 	RDSZ(94626),	518,		/* H=cyl 518 thru 1268 */
14257329Shibler }, rd7958B_sizes[8] = {
14357329Shibler 	RDSZ(16254),	1,		/* A=cyl 1 thru 43 */
14457329Shibler 	RDSZ(32886),	44,		/* B=cyl 44 thru 130 */
14557329Shibler 	RDSZ(297108),	0,		/* C=cyl 0 thru 785 */
14657329Shibler 	RDSZ(49140),	44,		/* D=cyl 44 thru 173 */
14757329Shibler 	RDSZ(121716),	174,		/* E=cyl 174 thru 495 */
14857329Shibler 	RDSZ(109620),	496,		/* F=cyl 496 thru 785 */
14957329Shibler 	RDSZ(247590),	131,		/* G=cyl 131 thru 785 */
15057329Shibler 	RDSZ(231336),	174,		/* H=cyl 174 thru 785 */
15157329Shibler }, rd7959B_sizes[8] = {
15257329Shibler 	RDSZ(16254),	1,		/* A=cyl 1 thru 43 */
15357329Shibler 	RDSZ(49140),	44,		/* B=cyl 44 thru 173 */
15457329Shibler 	RDSZ(594216),	0,		/* C=cyl 0 thru 1571 */
15557329Shibler 	RDSZ(65772),	44,		/* D=cyl 44 thru 217 */
15657329Shibler 	RDSZ(303912),	218,		/* E=cyl 218 thru 1021 */
15757329Shibler 	RDSZ(207900),	1022,		/* F=cyl 1022 thru 1571 */
15857329Shibler 	RDSZ(528444),	174,		/* G=cyl 174 thru 1571 */
15957329Shibler 	RDSZ(511812),	218,		/* H=cyl 218 thru 1571 */
16057329Shibler }, rd2200A_sizes[8] = {
16157329Shibler 	RDSZ(16272),	1,		/* A=cyl 1 thru 36 */
16257329Shibler 	RDSZ(49720),	37,		/* B=cyl 37 thru 146 */
16357329Shibler 	RDSZ(654948),	0,		/* C=cyl 0 thru 1448 */
16457329Shibler 	RDSZ(65992),	37,		/* D=cyl 37 thru 182 */
16557329Shibler 	RDSZ(304648),	183,		/* E=cyl 183 thru 856 */
16657329Shibler 	RDSZ(267584),	857,		/* F=cyl 857 thru 1448 */
16757329Shibler 	RDSZ(588504),	147,		/* G=cyl 147 thru 1448 */
16857329Shibler 	RDSZ(572232),	183,		/* H=cyl 183 thru 1448 */
16957329Shibler }, rd2203A_sizes[8] = {
17057329Shibler 	/* modelled after the 7937; i.e. bogus */
17157329Shibler 	RDSZ(16272),	1,		/* A=cyl 1 thru 18 */
17257329Shibler 	RDSZ(67800),	19,		/* B=cyl 19 thru 93 */
17357329Shibler 	RDSZ(1309896),	0,		/* C=cyl 0 thru 1448 */
17457329Shibler 	RDSZ(16272),	94,		/* D=cyl 19 thru 111 */
17557329Shibler 	RDSZ(305552),	112,		/* E=cyl 112 thru 449 */
17657329Shibler 	RDSZ(305552),	450,		/* F=cyl 450 thru 787 */
17757329Shibler 	RDSZ(1224920),	94,		/* G=cyl 94 thru 1448 */
17857329Shibler 	RDSZ(597544),	788,		/* H=cyl 788 thru 1448 */
17957329Shibler }, rd7936H_sizes[8] = {
18057329Shibler 	RDSZ(16359),	1,		/* A=cyl 1 thru 19 */
18157329Shibler 	RDSZ(67158),	20,		/* B=cyl 20 thru 97 */
18257329Shibler 	RDSZ(600978),	0,		/* C=cyl 0 thru 697 */
18357329Shibler 	RDSZ(16359),	98,		/* D=cyl 98 thru 116 */
18457329Shibler 	RDSZ(120540),	117,		/* E=cyl 117 thru 256 */
18557329Shibler 	RDSZ(120540),	256,		/* F=cyl 256 thru 396 */
18657329Shibler 	RDSZ(516600),	98,		/* G=cyl 98 thru 697 */
18757329Shibler 	RDSZ(259161),	397,		/* H=cyl 397 thru 697 */
18857329Shibler }, rd7937H_sizes[8] = {
18957329Shibler 	RDSZ(15990),	1,		/* A=cyl 1 thru 10 */
19057329Shibler 	RDSZ(67158),	11,		/* B=cyl 11 thru 52 */
19157329Shibler 	RDSZ(1116102),	0,		/* C=cyl 0 thru 697 */
19257329Shibler 	RDSZ(124722),	53,		/* D=cyl 53 thru 130 */
19357329Shibler 	RDSZ(163098),	131,		/* E=cyl 131 thru 232 */
19457329Shibler 	RDSZ(287820),	233,		/* F=cyl 233 thru 412 */
19557329Shibler 	RDSZ(1031355),	53,		/* G=cyl 53 thru 697 */
19657329Shibler 	RDSZ(455715),	413,		/* H=cyl 413 thru 697 */
19757329Shibler };
19857329Shibler 
19957329Shibler /*
20057329Shibler  * Indexed the same as rdidentinfo array.
20157329Shibler  */
20257329Shibler struct rdcompatinfo {
20357329Shibler 	int	nbpt;		/* DEV_BSIZE blocks per track */
20457329Shibler 	int	ntpc;		/* tracks per cylinder */
20557329Shibler 	int	ncyl;		/* cylinders per unit */
20657329Shibler 	struct	size *sizes;	/* partition info */
20757329Shibler } rdcompatinfo[] = {
20857329Shibler 	NRD7945ABPT,	NRD7945ATRK,	968,	rd7945A_sizes,
20957329Shibler 	NRD9134DBPT,	NRD9134DTRK,	303,	rd9134D_sizes,
21057329Shibler 	NRD9122SBPT,	NRD9122STRK,	77,	rd9122S_sizes,
21157329Shibler 	NRD7912PBPT,	NRD7912PTRK,	572,	rd7912P_sizes,
21257329Shibler 	NRD7914PBPT,	NRD7914PTRK,	1152,	rd7914P_sizes,
21357329Shibler 	NRD7958ABPT,	NRD7958ATRK,	1013,	rd7958A_sizes,
21457329Shibler 	NRD7957ABPT,	NRD7957ATRK,	1036,	rd7957A_sizes,
21557329Shibler 	NRD7933HBPT,	NRD7933HTRK,	1321,	rd7933H_sizes,
21657329Shibler 	NRD9134LBPT,	NRD9134LTRK,	973,	rd9134L_sizes,
21757329Shibler 	NRD7936HBPT,	NRD7936HTRK,	698,	rd7936H_sizes,
21857329Shibler 	NRD7937HBPT,	NRD7937HTRK,	698,	rd7937H_sizes,
21957329Shibler 	NRD7914PBPT,	NRD7914PTRK,	1152,	rd7914P_sizes,
22057329Shibler 	NRD7945ABPT,	NRD7945ATRK,	968,	rd7945A_sizes,
22157329Shibler 	NRD9122SBPT,	NRD9122STRK,	77,	rd9122S_sizes,
22257329Shibler 	NRD7957BBPT,	NRD7957BTRK,	1269,	rd7957B_sizes,
22357329Shibler 	NRD7958BBPT,	NRD7958BTRK,	786,	rd7958B_sizes,
22457329Shibler 	NRD7959BBPT,	NRD7959BTRK,	1572,	rd7959B_sizes,
22557329Shibler 	NRD2200ABPT,	NRD2200ATRK,	1449,	rd2200A_sizes,
22657329Shibler 	NRD2203ABPT,	NRD2203ATRK,	1449,	rd2203A_sizes,
22757329Shibler };
22857329Shibler int nrdcompatinfo = sizeof(rdcompatinfo) / sizeof(rdcompatinfo[0]);
22957329Shibler 
23057329Shibler extern struct rd_softc rd_softc[];
23157329Shibler 
rdmakedisklabel(unit,lp)23257329Shibler rdmakedisklabel(unit, lp)
23357329Shibler 	int unit;
23457329Shibler 	struct disklabel *lp;
23557329Shibler {
23657329Shibler 	register struct rd_softc *rs = &rd_softc[unit];
23757329Shibler 	register struct rdcompatinfo *ci = &rdcompatinfo[rs->sc_type];
23857329Shibler 	register struct partition *pi;
23957329Shibler 	register int dcount;
24057329Shibler 
24157329Shibler 	lp->d_nsectors = ci->nbpt;
24257329Shibler 	lp->d_ntracks = ci->ntpc;
24357329Shibler 	lp->d_ncylinders = ci->ncyl;
24457329Shibler 	lp->d_secpercyl = ci->nbpt * ci->ntpc;
24557329Shibler 	lp->d_secperunit = lp->d_secpercyl * ci->ncyl;
24657329Shibler 	lp->d_rpm = 3600;
24757329Shibler 	lp->d_interleave = 1;
24857329Shibler 	lp->d_npartitions = 8;
24957329Shibler 
25057329Shibler 	pi = lp->d_partitions;
25157329Shibler 	for (dcount = 0; dcount < lp->d_npartitions; dcount++) {
25257329Shibler 		pi->p_size = ci->sizes[dcount].nblocks;
25357329Shibler 		pi->p_offset = ci->sizes[dcount].cyloff * lp->d_secpercyl;
25457329Shibler 		pi->p_fsize = 1024;
25557329Shibler 		if (dcount == 1 || dcount == 3)
25657329Shibler 			pi->p_fstype = FS_SWAP;
25758593Shibler 		else if (dcount == 2)
25858593Shibler 			pi->p_fstype = FS_BOOT;
25957329Shibler 		else
26057329Shibler 			pi->p_fstype = FS_BSDFFS;
26157329Shibler 		pi->p_frag = 8;
26257329Shibler 		pi++;
26357329Shibler 	}
26457329Shibler }
26557329Shibler #endif
266