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