1*57329Shibler /* 2*57329Shibler * Copyright (c) 1988 University of Utah. 3*57329Shibler * Copyright (c) 1982, 1990 The Regents of the University of California. 4*57329Shibler * All rights reserved. 5*57329Shibler * 6*57329Shibler * This code is derived from software contributed to Berkeley by 7*57329Shibler * the Systems Programming Group of the University of Utah Computer 8*57329Shibler * Science Department. 9*57329Shibler * 10*57329Shibler * %sccs.include.redist.c% 11*57329Shibler * 12*57329Shibler * from: Utah $Hdr: rd_compat.c 1.1 92/12/21$ 13*57329Shibler * 14*57329Shibler * @(#)rd_compat.c 7.1 (Berkeley) 12/27/92 15*57329Shibler */ 16*57329Shibler 17*57329Shibler /* 18*57329Shibler * Compatibility for CS80 disks without disklabels. 19*57329Shibler */ 20*57329Shibler #include "rd.h" 21*57329Shibler #if NRD > 0 22*57329Shibler 23*57329Shibler #include <sys/param.h> 24*57329Shibler #include <sys/disklabel.h> 25*57329Shibler #include <hp/dev/device.h> 26*57329Shibler #include <hp300/dev/rdreg.h> 27*57329Shibler #include <hp300/dev/rdvar.h> 28*57329Shibler 29*57329Shibler /* 30*57329Shibler * CS/80 partitions. We reserve the first cylinder for a LIF 31*57329Shibler * style boot directory (the 8k allowed in the BSD filesystem 32*57329Shibler * is just way too small). This boot area is outside of all but 33*57329Shibler * the C partition. This implies that you cannot use the C 34*57329Shibler * partition on a bootable disk since the filesystem would overlay 35*57329Shibler * the boot area. You must use the A partition. 36*57329Shibler * 37*57329Shibler * These maps support four basic layouts: 38*57329Shibler * 39*57329Shibler * A/B/G: This is the "traditional" setup for a bootable disk. 40*57329Shibler * A is the root partition, B the swap, and G a user partition. 41*57329Shibler * A/D/H: This is a setup for bootable systems requiring more swap 42*57329Shibler * (e.g. those who use HPCL). It has A as the root, D as a 43*57329Shibler * larger swap, and H as a smaller user partition. 44*57329Shibler * A/D/E/F: Similar to A/D/H with E and F breaking H into two partitions. 45*57329Shibler * E could be used for /usr and F for users. 46*57329Shibler * C: This gives a single, non-bootable, large user filesystem. 47*57329Shibler * Good for second drives on a machine (e.g. /usr/src). 48*57329Shibler */ 49*57329Shibler struct size { 50*57329Shibler daddr_t nblocks; 51*57329Shibler int cyloff; 52*57329Shibler } rd7945A_sizes[8] = { 53*57329Shibler RDSZ(15904), 1, /* A=cyl 1 thru 142 */ 54*57329Shibler RDSZ(20160), 143, /* B=cyl 143 thru 322 */ 55*57329Shibler RDSZ(108416), 0, /* C=cyl 0 thru 967 */ 56*57329Shibler RDSZ(40320), 143, /* D=cyl 143 thru 502 */ 57*57329Shibler RDSZ(0), 0, /* E=<undefined> */ 58*57329Shibler RDSZ(0), 0, /* F=<undefined> */ 59*57329Shibler RDSZ(72240), 323, /* G=cyl 323 thru 967 */ 60*57329Shibler RDSZ(52080), 503, /* H=cyl 503 thru 967 */ 61*57329Shibler }, rd9134D_sizes[8] = { 62*57329Shibler RDSZ(15936), 1, /* A=cyl 1 thru 166 */ 63*57329Shibler RDSZ(13056), 167, /* B=cyl 167 thru 302 */ 64*57329Shibler RDSZ(29088), 0, /* C=cyl 0 thru 302 */ 65*57329Shibler RDSZ(0), 0, /* D=<undefined> */ 66*57329Shibler RDSZ(0), 0, /* E=<undefined> */ 67*57329Shibler RDSZ(0), 0, /* F=<undefined> */ 68*57329Shibler RDSZ(0), 0, /* G=<undefined> */ 69*57329Shibler RDSZ(0), 0, /* H=<undefined> */ 70*57329Shibler }, rd9122S_sizes[8] = { 71*57329Shibler RDSZ(0), 0, /* A=<undefined> */ 72*57329Shibler RDSZ(0), 0, /* B=<undefined> */ 73*57329Shibler RDSZ(1232), 0, /* C=cyl 0 thru 76 */ 74*57329Shibler RDSZ(0), 0, /* D=<undefined> */ 75*57329Shibler RDSZ(0), 0, /* E=<undefined> */ 76*57329Shibler RDSZ(0), 0, /* F=<undefined> */ 77*57329Shibler RDSZ(0), 0, /* G=<undefined> */ 78*57329Shibler RDSZ(0), 0, /* H=<undefined> */ 79*57329Shibler }, rd7912P_sizes[8] = { 80*57329Shibler RDSZ(15904), 0, /* A=cyl 1 thru 71 */ 81*57329Shibler RDSZ(22400), 72, /* B=cyl 72 thru 171 */ 82*57329Shibler RDSZ(128128), 0, /* C=cyl 0 thru 571 */ 83*57329Shibler RDSZ(42560), 72, /* D=cyl 72 thru 261 */ 84*57329Shibler RDSZ(0), 292, /* E=<undefined> */ 85*57329Shibler RDSZ(0), 542, /* F=<undefined> */ 86*57329Shibler RDSZ(89600), 172, /* G=cyl 221 thru 571 */ 87*57329Shibler RDSZ(69440), 262, /* H=cyl 262 thru 571 */ 88*57329Shibler }, rd7914P_sizes[8] = { 89*57329Shibler RDSZ(15904), 1, /* A=cyl 1 thru 71 */ 90*57329Shibler RDSZ(40320), 72, /* B=cyl 72 thru 251 */ 91*57329Shibler RDSZ(258048), 0, /* C=cyl 0 thru 1151 */ 92*57329Shibler RDSZ(64960), 72, /* D=cyl 72 thru 361 */ 93*57329Shibler RDSZ(98560), 362, /* E=cyl 362 thru 801 */ 94*57329Shibler RDSZ(78400), 802, /* F=cyl 802 thru 1151 */ 95*57329Shibler RDSZ(201600), 252, /* G=cyl 221 thru 1151 */ 96*57329Shibler RDSZ(176960), 362, /* H=cyl 362 thru 1151 */ 97*57329Shibler }, rd7933H_sizes[8] = { 98*57329Shibler RDSZ(16146), 1, /* A=cyl 1 thru 27 */ 99*57329Shibler RDSZ(66976), 28, /* B=cyl 28 thru 139 */ 100*57329Shibler RDSZ(789958), 0, /* C=cyl 0 thru 1320 */ 101*57329Shibler RDSZ(16146), 140, /* D=cyl 140 thru 166 */ 102*57329Shibler RDSZ(165646), 167, /* E=cyl 167 thru 443 */ 103*57329Shibler RDSZ(165646), 444, /* F=cyl 444 thru 720 */ 104*57329Shibler RDSZ(706238), 140, /* G=cyl 140 thru 1320 */ 105*57329Shibler RDSZ(358800), 721, /* H=cyl 721 thru 1320 */ 106*57329Shibler }, rd9134L_sizes[8] = { 107*57329Shibler RDSZ(15920), 1, /* A=cyl 1 thru 199 */ 108*57329Shibler RDSZ(20000), 200, /* B=cyl 200 thru 449 */ 109*57329Shibler RDSZ(77840), 0, /* C=cyl 0 thru 972 */ 110*57329Shibler RDSZ(32000), 200, /* D=cyl 200 thru 599 */ 111*57329Shibler RDSZ(0), 0, /* E=<undefined> */ 112*57329Shibler RDSZ(0), 0, /* F=<undefined> */ 113*57329Shibler RDSZ(41840), 450, /* G=cyl 450 thru 972 */ 114*57329Shibler RDSZ(29840), 600, /* H=cyl 600 thru 972 */ 115*57329Shibler }, rd7957A_sizes[8] = { 116*57329Shibler RDSZ(16016), 1, /* A=cyl 1 thru 104 */ 117*57329Shibler RDSZ(24640), 105, /* B=cyl 105 thru 264 */ 118*57329Shibler RDSZ(159544), 0, /* C=cyl 0 thru 1035 */ 119*57329Shibler RDSZ(42350), 105, /* D=cyl 105 thru 379 */ 120*57329Shibler RDSZ(54824), 380, /* E=cyl 380 thru 735 */ 121*57329Shibler RDSZ(46200), 736, /* F=cyl 736 thru 1035 */ 122*57329Shibler RDSZ(118734), 265, /* G=cyl 265 thru 1035 */ 123*57329Shibler RDSZ(101024), 380, /* H=cyl 380 thru 1035 */ 124*57329Shibler }, rd7958A_sizes[8] = { 125*57329Shibler RDSZ(16128), 1, /* A=cyl 1 thru 64 */ 126*57329Shibler RDSZ(32256), 65, /* B=cyl 65 thru 192 */ 127*57329Shibler RDSZ(255276), 0, /* C=cyl 0 thru 1012 */ 128*57329Shibler RDSZ(48384), 65, /* D=cyl 65 thru 256 */ 129*57329Shibler RDSZ(100800), 257, /* E=cyl 257 thru 656 */ 130*57329Shibler RDSZ(89712), 657, /* F=cyl 657 thru 1012 */ 131*57329Shibler RDSZ(206640), 193, /* G=cyl 193 thru 1012 */ 132*57329Shibler RDSZ(190512), 257, /* H=cyl 257 thru 1012 */ 133*57329Shibler }, rd7957B_sizes[8] = { 134*57329Shibler RDSZ(16002), 1, /* A=cyl 1 thru 127 */ 135*57329Shibler RDSZ(32760), 128, /* B=cyl 128 thru 387 */ 136*57329Shibler RDSZ(159894), 0, /* C=cyl 0 thru 1268 */ 137*57329Shibler RDSZ(49140), 128, /* D=cyl 128 thru 517 */ 138*57329Shibler RDSZ(50400), 518, /* E=cyl 518 thru 917 */ 139*57329Shibler RDSZ(44226), 918, /* F=cyl 918 thru 1268 */ 140*57329Shibler RDSZ(111006), 388, /* G=cyl 388 thru 1268 */ 141*57329Shibler RDSZ(94626), 518, /* H=cyl 518 thru 1268 */ 142*57329Shibler }, rd7958B_sizes[8] = { 143*57329Shibler RDSZ(16254), 1, /* A=cyl 1 thru 43 */ 144*57329Shibler RDSZ(32886), 44, /* B=cyl 44 thru 130 */ 145*57329Shibler RDSZ(297108), 0, /* C=cyl 0 thru 785 */ 146*57329Shibler RDSZ(49140), 44, /* D=cyl 44 thru 173 */ 147*57329Shibler RDSZ(121716), 174, /* E=cyl 174 thru 495 */ 148*57329Shibler RDSZ(109620), 496, /* F=cyl 496 thru 785 */ 149*57329Shibler RDSZ(247590), 131, /* G=cyl 131 thru 785 */ 150*57329Shibler RDSZ(231336), 174, /* H=cyl 174 thru 785 */ 151*57329Shibler }, rd7959B_sizes[8] = { 152*57329Shibler RDSZ(16254), 1, /* A=cyl 1 thru 43 */ 153*57329Shibler RDSZ(49140), 44, /* B=cyl 44 thru 173 */ 154*57329Shibler RDSZ(594216), 0, /* C=cyl 0 thru 1571 */ 155*57329Shibler RDSZ(65772), 44, /* D=cyl 44 thru 217 */ 156*57329Shibler RDSZ(303912), 218, /* E=cyl 218 thru 1021 */ 157*57329Shibler RDSZ(207900), 1022, /* F=cyl 1022 thru 1571 */ 158*57329Shibler RDSZ(528444), 174, /* G=cyl 174 thru 1571 */ 159*57329Shibler RDSZ(511812), 218, /* H=cyl 218 thru 1571 */ 160*57329Shibler }, rd2200A_sizes[8] = { 161*57329Shibler RDSZ(16272), 1, /* A=cyl 1 thru 36 */ 162*57329Shibler RDSZ(49720), 37, /* B=cyl 37 thru 146 */ 163*57329Shibler RDSZ(654948), 0, /* C=cyl 0 thru 1448 */ 164*57329Shibler RDSZ(65992), 37, /* D=cyl 37 thru 182 */ 165*57329Shibler RDSZ(304648), 183, /* E=cyl 183 thru 856 */ 166*57329Shibler RDSZ(267584), 857, /* F=cyl 857 thru 1448 */ 167*57329Shibler RDSZ(588504), 147, /* G=cyl 147 thru 1448 */ 168*57329Shibler RDSZ(572232), 183, /* H=cyl 183 thru 1448 */ 169*57329Shibler }, rd2203A_sizes[8] = { 170*57329Shibler /* modelled after the 7937; i.e. bogus */ 171*57329Shibler RDSZ(16272), 1, /* A=cyl 1 thru 18 */ 172*57329Shibler RDSZ(67800), 19, /* B=cyl 19 thru 93 */ 173*57329Shibler RDSZ(1309896), 0, /* C=cyl 0 thru 1448 */ 174*57329Shibler RDSZ(16272), 94, /* D=cyl 19 thru 111 */ 175*57329Shibler RDSZ(305552), 112, /* E=cyl 112 thru 449 */ 176*57329Shibler RDSZ(305552), 450, /* F=cyl 450 thru 787 */ 177*57329Shibler RDSZ(1224920), 94, /* G=cyl 94 thru 1448 */ 178*57329Shibler RDSZ(597544), 788, /* H=cyl 788 thru 1448 */ 179*57329Shibler }, rd7936H_sizes[8] = { 180*57329Shibler RDSZ(16359), 1, /* A=cyl 1 thru 19 */ 181*57329Shibler RDSZ(67158), 20, /* B=cyl 20 thru 97 */ 182*57329Shibler RDSZ(600978), 0, /* C=cyl 0 thru 697 */ 183*57329Shibler RDSZ(16359), 98, /* D=cyl 98 thru 116 */ 184*57329Shibler RDSZ(120540), 117, /* E=cyl 117 thru 256 */ 185*57329Shibler RDSZ(120540), 256, /* F=cyl 256 thru 396 */ 186*57329Shibler RDSZ(516600), 98, /* G=cyl 98 thru 697 */ 187*57329Shibler RDSZ(259161), 397, /* H=cyl 397 thru 697 */ 188*57329Shibler }, rd7937H_sizes[8] = { 189*57329Shibler RDSZ(15990), 1, /* A=cyl 1 thru 10 */ 190*57329Shibler RDSZ(67158), 11, /* B=cyl 11 thru 52 */ 191*57329Shibler RDSZ(1116102), 0, /* C=cyl 0 thru 697 */ 192*57329Shibler RDSZ(124722), 53, /* D=cyl 53 thru 130 */ 193*57329Shibler RDSZ(163098), 131, /* E=cyl 131 thru 232 */ 194*57329Shibler RDSZ(287820), 233, /* F=cyl 233 thru 412 */ 195*57329Shibler RDSZ(1031355), 53, /* G=cyl 53 thru 697 */ 196*57329Shibler RDSZ(455715), 413, /* H=cyl 413 thru 697 */ 197*57329Shibler }; 198*57329Shibler 199*57329Shibler /* 200*57329Shibler * Indexed the same as rdidentinfo array. 201*57329Shibler */ 202*57329Shibler struct rdcompatinfo { 203*57329Shibler int nbpt; /* DEV_BSIZE blocks per track */ 204*57329Shibler int ntpc; /* tracks per cylinder */ 205*57329Shibler int ncyl; /* cylinders per unit */ 206*57329Shibler struct size *sizes; /* partition info */ 207*57329Shibler } rdcompatinfo[] = { 208*57329Shibler NRD7945ABPT, NRD7945ATRK, 968, rd7945A_sizes, 209*57329Shibler NRD9134DBPT, NRD9134DTRK, 303, rd9134D_sizes, 210*57329Shibler NRD9122SBPT, NRD9122STRK, 77, rd9122S_sizes, 211*57329Shibler NRD7912PBPT, NRD7912PTRK, 572, rd7912P_sizes, 212*57329Shibler NRD7914PBPT, NRD7914PTRK, 1152, rd7914P_sizes, 213*57329Shibler NRD7958ABPT, NRD7958ATRK, 1013, rd7958A_sizes, 214*57329Shibler NRD7957ABPT, NRD7957ATRK, 1036, rd7957A_sizes, 215*57329Shibler NRD7933HBPT, NRD7933HTRK, 1321, rd7933H_sizes, 216*57329Shibler NRD9134LBPT, NRD9134LTRK, 973, rd9134L_sizes, 217*57329Shibler NRD7936HBPT, NRD7936HTRK, 698, rd7936H_sizes, 218*57329Shibler NRD7937HBPT, NRD7937HTRK, 698, rd7937H_sizes, 219*57329Shibler NRD7914PBPT, NRD7914PTRK, 1152, rd7914P_sizes, 220*57329Shibler NRD7945ABPT, NRD7945ATRK, 968, rd7945A_sizes, 221*57329Shibler NRD9122SBPT, NRD9122STRK, 77, rd9122S_sizes, 222*57329Shibler NRD7957BBPT, NRD7957BTRK, 1269, rd7957B_sizes, 223*57329Shibler NRD7958BBPT, NRD7958BTRK, 786, rd7958B_sizes, 224*57329Shibler NRD7959BBPT, NRD7959BTRK, 1572, rd7959B_sizes, 225*57329Shibler NRD2200ABPT, NRD2200ATRK, 1449, rd2200A_sizes, 226*57329Shibler NRD2203ABPT, NRD2203ATRK, 1449, rd2203A_sizes, 227*57329Shibler }; 228*57329Shibler int nrdcompatinfo = sizeof(rdcompatinfo) / sizeof(rdcompatinfo[0]); 229*57329Shibler 230*57329Shibler extern struct rd_softc rd_softc[]; 231*57329Shibler 232*57329Shibler rdmakedisklabel(unit, lp) 233*57329Shibler int unit; 234*57329Shibler struct disklabel *lp; 235*57329Shibler { 236*57329Shibler register struct rd_softc *rs = &rd_softc[unit]; 237*57329Shibler register struct rdcompatinfo *ci = &rdcompatinfo[rs->sc_type]; 238*57329Shibler register struct partition *pi; 239*57329Shibler register int dcount; 240*57329Shibler 241*57329Shibler lp->d_nsectors = ci->nbpt; 242*57329Shibler lp->d_ntracks = ci->ntpc; 243*57329Shibler lp->d_ncylinders = ci->ncyl; 244*57329Shibler lp->d_secpercyl = ci->nbpt * ci->ntpc; 245*57329Shibler lp->d_secperunit = lp->d_secpercyl * ci->ncyl; 246*57329Shibler lp->d_rpm = 3600; 247*57329Shibler lp->d_interleave = 1; 248*57329Shibler lp->d_npartitions = 8; 249*57329Shibler 250*57329Shibler pi = lp->d_partitions; 251*57329Shibler for (dcount = 0; dcount < lp->d_npartitions; dcount++) { 252*57329Shibler pi->p_size = ci->sizes[dcount].nblocks; 253*57329Shibler pi->p_offset = ci->sizes[dcount].cyloff * lp->d_secpercyl; 254*57329Shibler pi->p_fsize = 1024; 255*57329Shibler if (dcount == 1 || dcount == 3) 256*57329Shibler pi->p_fstype = FS_SWAP; 257*57329Shibler else 258*57329Shibler pi->p_fstype = FS_BSDFFS; 259*57329Shibler pi->p_frag = 8; 260*57329Shibler pi++; 261*57329Shibler } 262*57329Shibler } 263*57329Shibler #endif 264