static void xbsd_change_fstype (struct fdisk_context *cxt);
static int xbsd_get_part_index (struct fdisk_context *cxt, int max, int *n);
static int xbsd_check_new_partition (struct fdisk_context *cxt, int *i);
-static unsigned short xbsd_dkcksum (struct xbsd_disklabel *lp);
+static unsigned short xbsd_dkcksum (struct bsd_disklabel *lp);
static int xbsd_initlabel (struct fdisk_context *cxt,
- struct dos_partition *p, struct xbsd_disklabel *d);
+ struct dos_partition *p, struct bsd_disklabel *d);
static int xbsd_readlabel (struct fdisk_context *cxt,
- struct dos_partition *p, struct xbsd_disklabel *d);
-static int xbsd_writelabel (struct fdisk_context *cxt, struct dos_partition *p, struct xbsd_disklabel *d);
+ struct dos_partition *p, struct bsd_disklabel *d);
+static int xbsd_writelabel (struct fdisk_context *cxt, struct dos_partition *p, struct bsd_disklabel *d);
static void sync_disks (void);
#if defined (__alpha__)
static char disklabelbuffer[BSD_BBSIZE];
#endif
-static struct xbsd_disklabel xbsd_dlabel;
+static struct bsd_disklabel xbsd_dlabel;
#define bsd_cround(c, n) \
(fdisk_context_use_cylinders(c) ? ((n)/xbsd_dlabel.d_secpercyl) + 1 : (n))
void
xbsd_print_disklabel (struct fdisk_context *cxt, int show_all)
{
- struct xbsd_disklabel *lp = &xbsd_dlabel;
- struct xbsd_partition *pp;
+ struct bsd_disklabel *lp = &xbsd_dlabel;
+ struct bsd_partition *pp;
FILE *f = stdout;
int i, j;
fprintf(f, _("track-to-track seek: %ld\t# milliseconds\n"),
(long) lp->d_trkseek);
fprintf(f, _("drivedata: "));
- for (i = NDDATA - 1; i >= 0; i--)
+ for (i = ARRAY_SIZE(lp->d_drivedata)- 1; i >= 0; i--)
if (lp->d_drivedata[i])
break;
if (i < 0)
static void xbsd_edit_disklabel(struct fdisk_context *cxt)
{
- struct xbsd_disklabel *d;
+ struct bsd_disklabel *d;
uintmax_t res;
d = &xbsd_dlabel;
char *res, *d, *p;
int rc;
sector_t sector;
- struct xbsd_disklabel dl;
+ struct bsd_disklabel dl;
snprintf(buf, sizeof(buf),
_("Bootstrap: %1$sboot -> boot%1$s (default %1$s)"),
/* We need a backup of the disklabel (xbsd_dlabel might have changed). */
d = &disklabelbuffer[BSD_LABELSECTOR * DEFAULT_SECTOR_SIZE];
- memmove(&dl, d, sizeof(struct xbsd_disklabel));
+ memmove(&dl, d, sizeof(struct bsd_disklabel));
/* The disklabel will be overwritten by 0's from bootxx anyway */
- memset(d, 0, sizeof(struct xbsd_disklabel));
+ memset(d, 0, sizeof(struct bsd_disklabel));
snprintf(buf, sizeof(buf), "%s/boot%s", BSD_LINUX_BOOTDIR, name);
rc = xbsd_get_bootstrap(cxt, buf,
goto done;
/* check end of the bootstrap */
- for (p = d; p < d + sizeof(struct xbsd_disklabel); p++) {
+ for (p = d; p < d + sizeof(struct bsd_disklabel); p++) {
if (!*p)
continue;
fdisk_warnx(cxt, _("Bootstrap overlaps with disk label!"));
}
/* move disklabel back */
- memmove(d, &dl, sizeof(struct xbsd_disklabel));
+ memmove(d, &dl, sizeof(struct bsd_disklabel));
#if defined (__powerpc__) || defined (__hppa__)
sector = 0;
}
static unsigned short
-xbsd_dkcksum (struct xbsd_disklabel *lp) {
+xbsd_dkcksum (struct bsd_disklabel *lp) {
unsigned short *start, *end;
unsigned short sum = 0;
static int xbsd_initlabel (struct fdisk_context *cxt,
struct dos_partition *p,
- struct xbsd_disklabel *d)
+ struct bsd_disklabel *d)
{
- struct xbsd_partition *pp;
+ struct bsd_partition *pp;
- memset (d, 0, sizeof (struct xbsd_disklabel));
+ memset (d, 0, sizeof (struct bsd_disklabel));
d -> d_magic = BSD_DISKMAGIC;
* If it has the right magic, return 1.
*/
static int
-xbsd_readlabel (struct fdisk_context *cxt, struct dos_partition *p, struct xbsd_disklabel *d)
+xbsd_readlabel (struct fdisk_context *cxt, struct dos_partition *p, struct bsd_disklabel *d)
{
int t, sector;
memmove (d,
&disklabelbuffer[BSD_LABELSECTOR * DEFAULT_SECTOR_SIZE + BSD_LABELOFFSET],
- sizeof (struct xbsd_disklabel));
+ sizeof (struct bsd_disklabel));
if (d -> d_magic != BSD_DISKMAGIC || d -> d_magic2 != BSD_DISKMAGIC)
return 0;
}
static int
-xbsd_writelabel (struct fdisk_context *cxt, struct dos_partition *p, struct xbsd_disklabel *d)
+xbsd_writelabel (struct fdisk_context *cxt, struct dos_partition *p, struct bsd_disklabel *d)
{
unsigned int sector;
otherwise we'd write the old disklabel with the bootstrap.
*/
memmove (&disklabelbuffer[BSD_LABELSECTOR * DEFAULT_SECTOR_SIZE + BSD_LABELOFFSET], d,
- sizeof (struct xbsd_disklabel));
+ sizeof (struct bsd_disklabel));
#if defined (__alpha__) && BSD_LABELSECTOR == 0
alpha_bootblock_checksum (disklabelbuffer);
fdisk_warn(cxt, _("seek failed: %d"), cxt->dev_path);
return -errno;
}
- if (sizeof (struct xbsd_disklabel) != write (cxt->dev_fd, d, sizeof (struct xbsd_disklabel))) {
+ if (sizeof (struct bsd_disklabel) != write (cxt->dev_fd, d, sizeof (struct bsd_disklabel))) {
fdisk_warn(cxt, _("write failed: %d"), cxt->dev_path);
return -errno;
}
size_t partnum,
struct fdisk_parttype *t)
{
- struct xbsd_partition *p;
+ struct bsd_partition *p;
assert(cxt);
assert(cxt->label);
*/
#include <stdint.h>
-
-#ifndef BSD_DISKMAGIC
-#define BSD_DISKMAGIC ((uint32_t) 0x82564557)
-#endif
-
-#ifndef BSD_MAXPARTITIONS
-# define BSD_MAXPARTITIONS 16
-#endif
-
-#define BSD_LINUX_BOOTDIR "/usr/ucb/mdec"
-
-#if defined (__alpha__) || defined (__powerpc__) || \
- defined (__ia64__) || defined (__hppa__)
-# define BSD_LABELSECTOR 0
-# define BSD_LABELOFFSET 64
-#elif defined(__sparc64__)
-# define BSD_LABELSECTOR 0
-# define BSD_LABELOFFSET 128
-#else
-# define BSD_LABELSECTOR 1
-# define BSD_LABELOFFSET 0
-#endif
-
-#define BSD_BBSIZE 8192 /* size of boot area, with label */
-#define BSD_SBSIZE 8192 /* max size of fs superblock */
-
-struct xbsd_disklabel {
- uint32_t d_magic; /* the magic number */
- int16_t d_type; /* drive type */
- int16_t d_subtype; /* controller/d_type specific */
- char d_typename[16]; /* type name, e.g. "eagle" */
- char d_packname[16]; /* pack identifier */
- /* disk geometry: */
- uint32_t d_secsize; /* # of bytes per sector */
- uint32_t d_nsectors; /* # of data sectors per track */
- uint32_t d_ntracks; /* # of tracks per cylinder */
- uint32_t d_ncylinders; /* # of data cylinders per unit */
- uint32_t d_secpercyl; /* # of data sectors per cylinder */
- uint32_t d_secperunit; /* # of data sectors per unit */
- /*
- * Spares (bad sector replacements) below
- * are not counted in d_nsectors or d_secpercyl.
- * Spare sectors are assumed to be physical sectors
- * which occupy space at the end of each track and/or cylinder.
- */
- uint16_t d_sparespertrack; /* # of spare sectors per track */
- uint16_t d_sparespercyl; /* # of spare sectors per cylinder */
- /*
- * Alternate cylinders include maintenance, replacement,
- * configuration description areas, etc.
- */
- uint32_t d_acylinders; /* # of alt. cylinders per unit */
-
- /* hardware characteristics: */
- /*
- * d_interleave, d_trackskew and d_cylskew describe perturbations
- * in the media format used to compensate for a slow controller.
- * Interleave is physical sector interleave, set up by the formatter
- * or controller when formatting. When interleaving is in use,
- * logically adjacent sectors are not physically contiguous,
- * but instead are separated by some number of sectors.
- * It is specified as the ratio of physical sectors traversed
- * per logical sector. Thus an interleave of 1:1 implies contiguous
- * layout, while 2:1 implies that logical sector 0 is separated
- * by one sector from logical sector 1.
- * d_trackskew is the offset of sector 0 on track N
- * relative to sector 0 on track N-1 on the same cylinder.
- * Finally, d_cylskew is the offset of sector 0 on cylinder N
- * relative to sector 0 on cylinder N-1.
- */
- uint16_t d_rpm; /* rotational speed */
- uint16_t d_interleave; /* hardware sector interleave */
- uint16_t d_trackskew; /* sector 0 skew, per track */
- uint16_t d_cylskew; /* sector 0 skew, per cylinder */
- uint32_t d_headswitch; /* head switch time, usec */
- uint32_t d_trkseek; /* track-to-track seek, usec */
- uint32_t d_flags; /* generic flags */
-#define NDDATA 5
- uint32_t d_drivedata[NDDATA]; /* drive-type specific information */
-#define NSPARE 5
- uint32_t d_spare[NSPARE]; /* reserved for future use */
- uint32_t d_magic2; /* the magic number (again) */
- uint16_t d_checksum; /* xor of data incl. partitions */
- /* filesystem and partition information: */
- uint16_t d_npartitions; /* number of partitions in following */
- uint32_t d_bbsize; /* size of boot area at sn0, bytes */
- uint32_t d_sbsize; /* max size of fs superblock, bytes */
- struct xbsd_partition { /* the partition table */
- uint32_t p_size; /* number of sectors in partition */
- uint32_t p_offset; /* starting sector */
- uint32_t p_fsize; /* filesystem basic fragment size */
- uint8_t p_fstype; /* filesystem type, see below */
- uint8_t p_frag; /* filesystem fragments per block */
- uint16_t p_cpg; /* filesystem cylinders per group */
- } d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */
-};
-
-/* d_type values: */
-#define BSD_DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */
-#define BSD_DTYPE_MSCP 2 /* MSCP */
-#define BSD_DTYPE_DEC 3 /* other DEC (rk, rl) */
-#define BSD_DTYPE_SCSI 4 /* SCSI */
-#define BSD_DTYPE_ESDI 5 /* ESDI interface */
-#define BSD_DTYPE_ST506 6 /* ST506 etc. */
-#define BSD_DTYPE_HPIB 7 /* CS/80 on HP-IB */
-#define BSD_DTYPE_HPFL 8 /* HP Fiber-link */
-#define BSD_DTYPE_FLOPPY 10 /* floppy */
-
-/* d_subtype values: */
-#define BSD_DSTYPE_INDOSPART 0x8 /* is inside dos partition */
-#define BSD_DSTYPE_DOSPART(s) ((s) & 3) /* dos partition number */
-#define BSD_DSTYPE_GEOMETRY 0x10 /* drive params in label */
+#include "pt-bsd.h"
#ifdef DKTYPENAMES
static char *xbsd_dktypenames[] = {
#define BSD_DKMAXTYPES (sizeof(xbsd_dktypenames) / sizeof(xbsd_dktypenames[0]) - 1)
#endif
-/*
- * Filesystem type and version.
- * Used to interpret other filesystem-specific
- * per-partition information.
- */
-#define BSD_FS_UNUSED 0 /* unused */
-#define BSD_FS_SWAP 1 /* swap */
-#define BSD_FS_V6 2 /* Sixth Edition */
-#define BSD_FS_V7 3 /* Seventh Edition */
-#define BSD_FS_SYSV 4 /* System V */
-#define BSD_FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */
-#define BSD_FS_V8 6 /* Eighth Edition, 4K blocks */
-#define BSD_FS_BSDFFS 7 /* 4.2BSD fast file system */
-#define BSD_FS_BSDLFS 9 /* 4.4BSD log-structured file system */
-#define BSD_FS_OTHER 10 /* in use, but unknown/unsupported */
-#define BSD_FS_HPFS 11 /* OS/2 high-performance file system */
-#define BSD_FS_ISO9660 12 /* ISO-9660 filesystem (cdrom) */
-#define BSD_FS_ISOFS BSD_FS_ISO9660
-#define BSD_FS_BOOT 13 /* partition contains bootstrap */
-#define BSD_FS_ADOS 14 /* AmigaDOS fast file system */
-#define BSD_FS_HFS 15 /* Macintosh HFS */
-#define BSD_FS_ADVFS 16 /* Digital Unix AdvFS */
-
-/* this is annoying, but it's also the way it is :-( */
-#ifdef __alpha__
-#define BSD_FS_EXT2 8 /* ext2 file system */
-#else
-#define BSD_FS_MSDOS 8 /* MS-DOS file system */
-#endif
-
#ifdef DKTYPENAMES
static struct fdisk_parttype xbsd_fstypes[] = {
{BSD_FS_UNUSED, "unused"},
#endif
-/*
- * flags shared by various drives:
- */
-#define BSD_D_REMOVABLE 0x01 /* removable media */
-#define BSD_D_ECC 0x02 /* supports ECC */
-#define BSD_D_BADSECT 0x04 /* supports bad sector forw. */
-#define BSD_D_RAMDISK 0x08 /* disk emulator */
-#define BSD_D_CHAIN 0x10 /* can do back-back transfers */
-#define BSD_D_DOSPART 0x20 /* within MSDOS partition */
extern void bsd_command_prompt(struct fdisk_context *cxt);
extern int btrydev(struct fdisk_context *cxt);