From fcbb259cea4cdb8fc5927f624d0c115a5aeef252 Mon Sep 17 00:00:00 2001 From: chuck Date: Fri, 10 May 1996 03:18:43 +0000 Subject: [PATCH] add some documentation add some predefined constants so that the kernel can generate valid bootblocks without help from 'wrtvid' --- sys/arch/mvme68k/include/disklabel.h | 166 ++++++++++++++++----------- 1 file changed, 98 insertions(+), 68 deletions(-) diff --git a/sys/arch/mvme68k/include/disklabel.h b/sys/arch/mvme68k/include/disklabel.h index 78741c4c925..bf4bfe1765f 100644 --- a/sys/arch/mvme68k/include/disklabel.h +++ b/sys/arch/mvme68k/include/disklabel.h @@ -1,4 +1,4 @@ -/* $OpenBSD: disklabel.h,v 1.2 1996/04/28 10:56:12 deraadt Exp $ */ +/* $OpenBSD: disklabel.h,v 1.3 1996/05/10 03:18:43 chuck Exp $ */ /* * Copyright (c) 1995 Dale Rahn. @@ -34,7 +34,7 @@ #define _MACHINE_DISKLABEL_H_ /* number of boot pieces , ie xxboot bootxx */ -#define NUMBOOT 2 +#define NUMBOOT 0 #define PARTITIONSHIFT 4 @@ -52,79 +52,109 @@ #define MAKEDISKDEV(maj, unit, part) \ (makedev((maj), ((unit) * MAXPARTITIONS) + (part))) +/* + * a cpu_disklabel is a disklabel that the bug (prom) can understand + * and live with. the bug works in terms of 256 byte blocks. in our + * case the first two bug blocks make up the cpu_disklabel (which is 512 + * bytes [i.e. one sector] in length). + * + * we use a fixed layout the BSD disk structure (in 256 byte blocks): + * block 0 = the volume ID block (part of cpu_disklabel) + * block 1 = media configuration area (part of cpu_disklabel) + * block 2 = start of first level OS bootstrap (continues ...) + * block 31 = end of OS bootstrap + * block 32 = BSD filesystem superblock + * + * this gives us 30 blocks (30*256 = 7680 bytes) for the bootstrap's text+data + * + * disksubr.c translates between cpu_disklabel and BSD disklabel. + * + */ + struct cpu_disklabel { /* VID */ - u_char vid_id[4]; - u_char vid_0[16]; - u_int vid_oss; - u_short vid_osl; - u_char vid_1[4]; - u_short vid_osa_u; - u_short vid_osa_l; - u_char vid_2[2]; - u_short partitions; - u_char vid_vd[16]; - u_long bbsize; - u_long magic1; /* 4 */ - u_short type; /* 2 */ - u_short subtype; /* 2 */ - u_char packname[16]; /* 16 */ - u_long flags; /* 4 */ - u_long drivedata[5]; /* 4 */ - u_long spare[5]; /* 4 */ - u_short checksum; /* 2 */ + u_char vid_id[4]; /* volume ID */ +#define VID_ID "NBSD" + u_char vid_0[16]; + u_int vid_oss; /* starting block # of bootstrap */ +#define VID_OSS 2 + u_short vid_osl; /* bootstrap length (30 blocks) */ +#define VID_OSL 30 + u_char vid_1[4]; + u_short vid_osa_u; /* bootstrap start address (upper) */ + u_short vid_osa_l; /* bootstrap start address (lower) */ +#define VID_OSA 0x3f0000 /* MUST match bootstrap code */ +#define VID_OSAU ((VID_OSA >> 16) & 0xffff) +#define VID_OSAL (VID_OSA & 0xffff) + u_char vid_2[2]; + u_short partitions; + u_char vid_vd[16]; + u_long bbsize; + u_long magic1; /* 4 */ + u_short type; /* 2 */ + u_short subtype; /* 2 */ + u_char packname[16]; /* 16 */ + u_long flags; /* 4 */ + u_long drivedata[5]; /* 4 */ + u_long spare[5]; /* 4 */ + u_short checksum; /* 2 */ - u_long secpercyl; /* 4 */ - u_long secperunit; /* 4 */ - u_long headswitch; /* 4 */ + u_long secpercyl; /* 4 */ + u_long secperunit; /* 4 */ + u_long headswitch; /* 4 */ - u_char vid_3[4]; - u_int vid_cas; - u_char vid_cal; - u_char vid_4_0[3]; - u_char vid_4[64]; - u_char vid_4_1[28]; - u_long sbsize; - u_char vid_mot[8]; + u_char vid_3[4]; + u_int vid_cas; /* block # of CFG area, hardwired at 1 */ +#define VID_CAS 1 + u_char vid_cal; /* length of CFG area, in blocks (1) */ +#define VID_CAL 1 + u_char vid_4_0[3]; + u_char vid_4[64]; + u_char vid_4_1[28]; + u_long sbsize; + u_char vid_mot[8]; /* must contain "MOTOROLA" */ +#define VID_MOT "MOTOROLA" /* CFG */ - u_char cfg_0[4]; - u_short cfg_atm; - u_short cfg_prm; - u_short cfg_atw; - u_short cfg_rec; + u_char cfg_0[4]; + u_short cfg_atm; + u_short cfg_prm; + u_short cfg_atw; + u_short cfg_rec; /* block size (256) */ +#define CFG_REC 256 - u_short sparespertrack; - u_short sparespercyl; - u_long acylinders; - u_short rpm; - u_short cylskew; + u_short sparespertrack; + u_short sparespercyl; + u_long acylinders; + u_short rpm; + u_short cylskew; - u_char cfg_spt; - u_char cfg_hds; - u_short cfg_trk; - u_char cfg_ilv; - u_char cfg_sof; - u_short cfg_psm; - u_short cfg_shd; - u_char cfg_2[2]; - u_short cfg_pcom; - u_char cfg_3; - u_char cfg_ssr; - u_short cfg_rwcc; - u_short cfg_ecc; - u_short cfg_eatm; - u_short cfg_eprm; - u_short cfg_eatw; - u_char cfg_gpb1; - u_char cfg_gpb2; - u_char cfg_gpb3; - u_char cfg_gpb4; - u_char cfg_ssc; - u_char cfg_runit; - u_short cfg_rsvc1; - u_short cfg_rsvc2; - u_long magic2; - u_char cfg_4[192]; + u_char cfg_spt; + u_char cfg_hds; + u_short cfg_trk; + u_char cfg_ilv; + u_char cfg_sof; + u_short cfg_psm; /* physical sector size (512) */ +#define CFG_PSM 512 + u_short cfg_shd; + u_char cfg_2[2]; + u_short cfg_pcom; + u_char cfg_3; + u_char cfg_ssr; + u_short cfg_rwcc; + u_short cfg_ecc; + u_short cfg_eatm; + u_short cfg_eprm; + u_short cfg_eatw; + u_char cfg_gpb1; + u_char cfg_gpb2; + u_char cfg_gpb3; + u_char cfg_gpb4; + u_char cfg_ssc; + u_char cfg_runit; + u_short cfg_rsvc1; + u_short cfg_rsvc2; + u_long magic2; + u_char cfg_4[192]; }; #endif _MACHINE_DISKLABEL_H_ -- 2.20.1