-/* $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.
#define _MACHINE_DISKLABEL_H_
/* number of boot pieces , ie xxboot bootxx */
-#define NUMBOOT 2
+#define NUMBOOT 0
#define PARTITIONSHIFT 4
#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_