summaryrefslogtreecommitdiff
path: root/genisoimage/sunlabel.h
diff options
context:
space:
mode:
Diffstat (limited to 'genisoimage/sunlabel.h')
-rw-r--r--genisoimage/sunlabel.h206
1 files changed, 206 insertions, 0 deletions
diff --git a/genisoimage/sunlabel.h b/genisoimage/sunlabel.h
new file mode 100644
index 0000000..243e9bb
--- /dev/null
+++ b/genisoimage/sunlabel.h
@@ -0,0 +1,206 @@
+/*
+ * This file has been modified for the cdrkit suite.
+ *
+ * The behaviour and appearence of the program code below can differ to a major
+ * extent from the version distributed by the original author(s).
+ *
+ * For details, see Changelog file distributed with the cdrkit package. If you
+ * received this file from another source then ask the distributing person for
+ * a log of modifications.
+ *
+ */
+
+/* @(#)sunlabel.h 1.5 03/12/28 Copyright 1999-2003 J. Schilling */
+/*
+ * Support for Sun disk label
+ *
+ * Copyright (c) 1999-2003 J. Schilling
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; see the file COPYING. If not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef howmany
+#define howmany(x, y) (((x)+((y)-1))/(y))
+#endif
+#ifndef roundup
+#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
+#endif
+
+#define NDKMAP 8 /* # of sparc partitions */
+#define NX86MAP 16 /* # if x86 partitions */
+#define DKL_MAGIC 0xDABE /* magic number */
+#define DKL_MAGIC_0 0xDA /* magic number high byte */
+#define DKL_MAGIC_1 0xBE /* magic number low byte */
+
+#define CD_DEFLABEL "CD-ROM Disc with Sun sparc boot created by genisoimage"
+#define CD_X86LABEL "CD-ROM Disc with Sun x86 boot created by genisoimage"
+
+/*
+ * Define a virtual geometry for the CD disk label.
+ * The current values are stolen from Sun install disks and do not seem to be
+ * a good idea as they limit the size of the CD to 327680 sectors which is less
+ * than 74 minutes.
+ * There are 84 minute CD's with 378000 sectors and there will be DVD's with
+ * even more.
+ */
+#define CD_RPM 350
+#define CD_PCYL 2048
+#define CD_APC 0
+#define CD_INTRLV 1
+#define CD_NCYL 2048
+#define CD_ACYL 0
+#define CD_NHEAD 1
+#define CD_NSECT 640
+
+/*
+ * NOTE: The virtual cylinder size on CD must be a mutiple of 2048.
+ * This is true if CD_NSECT is a multiple of 4.
+ */
+#define CD_CYLSIZE (CD_NSECT*CD_NHEAD*512)
+
+#define V_VERSION 1 /* The VTOC version */
+#define VTOC_SANE 0x600DDEEE /* Indicates a sane VTOC */
+
+#define V_ROOT 0x02 /* Root partiton */
+#define V_USR 0x04 /* Usr partiton */
+
+#define V_RONLY 0x10 /* Read only */
+
+/*
+ * The Sun sparc disk label (at offset 0 on a disk)
+ */
+struct sun_label {
+ char dkl_ascilabel[128];
+ struct dk_vtoc {
+ Uchar v_version[4]; /* layout version */
+ char v_volume[8]; /* volume name */
+ Uchar v_nparts[2]; /* number of partitions */
+ struct dk_map2 {
+ Uchar p_tag[2]; /* ID tag of partition */
+ Uchar p_flag[2]; /* permission flag */
+
+ } v_part[NDKMAP];
+ Uchar v_xxpad[2]; /* To come over Sun's alignement problem */
+ Uchar v_bootinfo[3*4]; /* info for mboot */
+ Uchar v_sanity[4]; /* to verify vtoc sanity */
+ Uchar v_reserved[10*4];
+ Uchar v_timestamp[NDKMAP*4];
+
+ } dkl_vtoc; /* vtoc inclusions from AT&T SVr4 */
+ char dkl_pad[512-(128+sizeof (struct dk_vtoc)+NDKMAP*8+14*2)];
+ Uchar dkl_rpm[2]; /* rotations per minute */
+ Uchar dkl_pcyl[2]; /* # physical cylinders */
+ Uchar dkl_apc[2]; /* alternates per cylinder */
+ Uchar dkl_obs1[2]; /* obsolete */
+ Uchar dkl_obs2[2]; /* obsolete */
+ Uchar dkl_intrlv[2]; /* interleave factor */
+ Uchar dkl_ncyl[2]; /* # of data cylinders */
+ Uchar dkl_acyl[2]; /* # of alternate cylinders */
+ Uchar dkl_nhead[2]; /* # of heads in this partition */
+ Uchar dkl_nsect[2]; /* # of 512 byte sectors per track */
+ Uchar dkl_obs3[2]; /* obsolete */
+ Uchar dkl_obs4[2]; /* obsolete */
+
+ struct dk_map { /* logical partitions */
+ Uchar dkl_cylno[4]; /* starting cylinder */
+ Uchar dkl_nblk[4]; /* number of blocks */
+ } dkl_map[NDKMAP]; /* logical partition headers */
+
+ Uchar dkl_magic[2]; /* identifies this label format */
+ Uchar dkl_cksum[2]; /* xor checksum of sector */
+};
+
+/*
+ * The Sun x86 / AT&T disk label (at offset 512 on a fdisk partition)
+ */
+struct x86_label {
+ struct x86_vtoc {
+ Uchar v_bootinfo[3*4]; /* unsupported */
+ Uchar v_sanity[4]; /* to verify vtoc sanity */
+ Uchar v_version[4]; /* layout version */
+ char v_volume[8]; /* volume name */
+ Uchar v_sectorsz[2]; /* # of bytes in a sector */
+ Uchar v_nparts[2]; /* # of partitions */
+ Uchar v_reserved[10*4];
+ struct dkl_partition {
+ Uchar p_tag[2]; /* ID tag of partition */
+ Uchar p_flag[2]; /* permission flag */
+ Uchar p_start[4]; /* starting sector */
+ Uchar p_size[4]; /* number of blocks */
+ } v_part[NX86MAP];
+ Uchar timestamp[NX86MAP][4];
+ char v_asciilabel[128];
+ } dkl_vtoc; /* vtoc inclusions from AT&T SVr4 */
+ Uchar dkl_pcyl[4]; /* # physical cylinders */
+ Uchar dkl_ncyl[4]; /* # of data cylinders */
+ Uchar dkl_acyl[2]; /* # of alternate cylinders */
+ Uchar dkl_bcyl[2];
+ Uchar dkl_nhead[4]; /* # of heads in this partition */
+ Uchar dkl_nsect[4]; /* # of 512 byte sectors per track */
+ Uchar dkl_intrlv[2]; /* interleave factor */
+ Uchar dkl_skew[2];
+ Uchar dkl_apc[2]; /* alternates per cylinder */
+ Uchar dkl_rpm[2]; /* rotations per minute */
+ Uchar dkl_write_reinstruct[2];
+ Uchar dkl_read_reinstruct[2];
+ Uchar dkl_extra[4*2]; /* for later expansions */
+ char dkl_pad[512-(sizeof (struct x86_vtoc)+4*4+14*2)];
+ Uchar dkl_magic[2]; /* identifies this label format */
+ Uchar dkl_cksum[2]; /* xor checksum of sector */
+};
+
+/*
+ * One x86 PC fdisk partition record.
+ */
+struct pc_pr {
+ Uchar pr_status; /* Boot status */
+ Uchar pr_head; /* Starting head # */
+ char pr_sec_cyl[2]; /* Starting sec+cyl # */
+ Uchar pr_type; /* Partition type */
+ Uchar pr_e_head; /* Ending head # */
+ char pr_e_sec_cyl[2]; /* Ending sec+cyl # */
+ char pr_partoff[4]; /* Partition start sector # */
+ char pr_nsect[4]; /* # of sectors in partition */
+};
+
+/*
+ * Flags and macros for above partition record.
+ */
+#define SEC_MASK 0x3F
+#define GET_SEC(a) ((a) & SEC_MASK)
+#define GET_CYL(a) ((((a) & 0xFF) >> 8) | (((a) & 0xC0) << 2))
+
+#define STATUS_INACT 0 /* Marked non bootable */
+#define STATUS_ACTIVE 0x80 /* Marked as bootable */
+
+#define TYPE_FREE 0 /* Unused partition */
+#define TYPE_DOS12 0x01 /* FAT12 fileystem */
+#define TYPE_XENIX 0x02 /* XENIX root */
+#define TYPE_XENIX2 0x03 /* XENIX usr */
+#define TYPE_DOS16 0x04 /* FAT16 filesystem */
+#define TYPE_XDOS 0x05 /* Extended DOS part */
+#define TYPE_DOS4 0x06 /* FAT16 >= 32 MB */
+#define TYPE_SOLARIS 0x82 /* Solaris x86 */
+#define TYPE_SOLARIS_BOOT 0xBE /* Solaris boot */
+#define TYPE_CDOS4 0xDB /* CPM */
+
+/*
+ * The first sector on a disk from a x86 PC (at offset 0 on a disk)
+ */
+struct pc_part {
+ char bootcode[0x1BE]; /* Master boot record */
+ struct pc_pr part[4]; /* The 4 primary partitions */
+ Uchar magic[2]; /* Fixed at 0x55 0xAA */
+};