Switch to using the portable partition scheme headers.

This commit is contained in:
Marcel Moolenaar 2016-10-16 02:55:52 +00:00
parent 50875ed2c1
commit 8d249f5e2f
8 changed files with 25 additions and 77 deletions

View File

@ -11,6 +11,7 @@ mkimg.o: Makefile
CFLAGS+=-DMKIMG_VERSION=${MKIMG_VERSION}
CFLAGS+=-DSPARSE_WRITE
CFLAGS+=-I${.CURDIR:H:H}/sys
# List of formats to support
SRCS+= \

View File

@ -33,20 +33,13 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/apm.h>
#include <sys/disk/apm.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef APM_ENT_TYPE_APPLE_BOOT
#define APM_ENT_TYPE_APPLE_BOOT "Apple_Bootstrap"
#endif
#ifndef APM_ENT_TYPE_FREEBSD_NANDFS
#define APM_ENT_TYPE_FREEBSD_NANDFS "FreeBSD-nandfs"
#endif
static struct mkimg_alias apm_aliases[] = {
{ ALIAS_FREEBSD, ALIAS_PTR2TYPE(APM_ENT_TYPE_FREEBSD) },
{ ALIAS_FREEBSD_BOOT, ALIAS_PTR2TYPE(APM_ENT_TYPE_APPLE_BOOT) },

View File

@ -33,17 +33,13 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/disklabel.h>
#include <sys/disk/bsd.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef FS_NANDFS
#define FS_NANDFS 30
#endif
static struct mkimg_alias bsd_aliases[] = {
{ ALIAS_FREEBSD_NANDFS, ALIAS_INT2TYPE(FS_NANDFS) },
{ ALIAS_FREEBSD_SWAP, ALIAS_INT2TYPE(FS_SWAP) },
@ -58,7 +54,7 @@ bsd_metadata(u_int where, lba_t blk)
{
if (where == SCHEME_META_IMG_START)
blk += BBSIZE / secsz;
blk += BSD_BOOTBLOCK_SIZE / secsz;
else if (where == SCHEME_META_IMG_END)
blk = round_cylinder(blk);
else
@ -76,21 +72,21 @@ bsd_write(lba_t imgsz, void *bootcode)
int bsdparts, error, n;
uint16_t checksum;
buf = malloc(BBSIZE);
buf = malloc(BSD_BOOTBLOCK_SIZE);
if (buf == NULL)
return (ENOMEM);
if (bootcode != NULL) {
memcpy(buf, bootcode, BBSIZE);
memcpy(buf, bootcode, BSD_BOOTBLOCK_SIZE);
memset(buf + secsz, 0, sizeof(struct disklabel));
} else
memset(buf, 0, BBSIZE);
memset(buf, 0, BSD_BOOTBLOCK_SIZE);
bsdparts = nparts + 1; /* Account for c partition */
if (bsdparts < MAXPARTITIONS)
bsdparts = MAXPARTITIONS;
if (bsdparts < BSD_NPARTS_MIN)
bsdparts = BSD_NPARTS_MIN;
d = (void *)(buf + secsz);
le32enc(&d->d_magic, DISKMAGIC);
le32enc(&d->d_magic, BSD_MAGIC);
le32enc(&d->d_secsize, secsz);
le32enc(&d->d_nsectors, nsecs);
le32enc(&d->d_ntracks, nheads);
@ -98,14 +94,14 @@ bsd_write(lba_t imgsz, void *bootcode)
le32enc(&d->d_secpercyl, nsecs * nheads);
le32enc(&d->d_secperunit, imgsz);
le16enc(&d->d_rpm, 3600);
le32enc(&d->d_magic2, DISKMAGIC);
le32enc(&d->d_magic2, BSD_MAGIC);
le16enc(&d->d_npartitions, bsdparts);
le32enc(&d->d_bbsize, BBSIZE);
le32enc(&d->d_bbsize, BSD_BOOTBLOCK_SIZE);
dp = &d->d_partitions[RAW_PART];
dp = &d->d_partitions[BSD_PART_RAW];
le32enc(&dp->p_size, imgsz);
TAILQ_FOREACH(part, &partlist, link) {
n = part->index + ((part->index >= RAW_PART) ? 1 : 0);
n = part->index + ((part->index >= BSD_PART_RAW) ? 1 : 0);
dp = &d->d_partitions[n];
le32enc(&dp->p_size, part->size);
le32enc(&dp->p_offset, part->block);
@ -121,7 +117,7 @@ bsd_write(lba_t imgsz, void *bootcode)
checksum ^= le16dec(p);
le16enc(&d->d_checksum, checksum);
error = image_write(0, buf, BBSIZE / secsz);
error = image_write(0, buf, BSD_BOOTBLOCK_SIZE / secsz);
free(buf);
return (error);
}
@ -132,8 +128,8 @@ static struct mkimg_scheme bsd_scheme = {
.aliases = bsd_aliases,
.metadata = bsd_metadata,
.write = bsd_write,
.nparts = 19,
.bootcode = BBSIZE,
.nparts = BSD_NPARTS_MAX - 1,
.bootcode = BSD_BOOTBLOCK_SIZE,
.maxsecsz = 512
};

View File

@ -33,22 +33,15 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/diskmbr.h>
#include <sys/disk/mbr.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef DOSPTYP_FAT16B
#define DOSPTYP_FAT16B 0x06
#endif
#ifndef DOSPTYP_FAT32
#define DOSPTYP_FAT32 0x0b
#endif
static struct mkimg_alias ebr_aliases[] = {
{ ALIAS_FAT16B, ALIAS_INT2TYPE(DOSPTYP_FAT16B) },
{ ALIAS_FAT16B, ALIAS_INT2TYPE(DOSPTYP_FAT16) },
{ ALIAS_FAT32, ALIAS_INT2TYPE(DOSPTYP_FAT32) },
{ ALIAS_FREEBSD, ALIAS_INT2TYPE(DOSPTYP_386BSD) },
{ ALIAS_NONE, 0 }

View File

@ -35,19 +35,14 @@ __FBSDID("$FreeBSD$");
#include <unistd.h>
#include <uuid.h>
#include <sys/diskmbr.h>
#include <sys/gpt.h>
#include <sys/disk/gpt.h>
#include <sys/disk/mbr.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef GPT_ENT_TYPE_FREEBSD_NANDFS
#define GPT_ENT_TYPE_FREEBSD_NANDFS \
{0x74ba7dd9,0xa689,0x11e1,0xbd,0x04,{0x00,0xe0,0x81,0x28,0x6a,0xcf}}
#endif
static uuid_t gpt_uuid_efi = GPT_ENT_TYPE_EFI;
static uuid_t gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
static uuid_t gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;

View File

@ -33,30 +33,17 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/diskmbr.h>
#include <sys/disk/mbr.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef DOSPTYP_FAT16B
#define DOSPTYP_FAT16B 0x06
#endif
#ifndef DOSPTYP_FAT32
#define DOSPTYP_FAT32 0x0b
#endif
#ifndef DOSPTYP_PPCBOOT
#define DOSPTYP_PPCBOOT 0x41
#endif
#ifndef DOSPTYP_EFI
#define DOSPTYP_EFI 0xef
#endif
static struct mkimg_alias mbr_aliases[] = {
{ ALIAS_EBR, ALIAS_INT2TYPE(DOSPTYP_EXT) },
{ ALIAS_EFI, ALIAS_INT2TYPE(DOSPTYP_EFI) },
{ ALIAS_FAT16B, ALIAS_INT2TYPE(DOSPTYP_FAT16B) },
{ ALIAS_FAT16B, ALIAS_INT2TYPE(DOSPTYP_FAT16) },
{ ALIAS_FAT32, ALIAS_INT2TYPE(DOSPTYP_FAT32) },
{ ALIAS_FREEBSD, ALIAS_INT2TYPE(DOSPTYP_386BSD) },
{ ALIAS_NTFS, ALIAS_INT2TYPE(DOSPTYP_NTFS) },

View File

@ -33,26 +33,13 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/diskpc98.h>
#include <sys/disk/pc98.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef PC98_MAGIC
#define PC98_MAGIC 0xaa55
#endif
#ifndef PC98_MAGICOFS
#define PC98_MAGICOFS 510
#endif
#ifndef PC98_NPARTS
#define PC98_NPARTS 16
#endif
#ifndef PC98_PTYP_386BSD
#define PC98_PTYP_386BSD 0xc494
#endif
#define PC98_BOOTCODESZ 8192
static struct mkimg_alias pc98_aliases[] = {

View File

@ -34,17 +34,13 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
#include <sys/vtoc.h>
#include <sys/disk/vtoc.h>
#include "endian.h"
#include "image.h"
#include "mkimg.h"
#include "scheme.h"
#ifndef VTOC_TAG_FREEBSD_NANDFS
#define VTOC_TAG_FREEBSD_NANDFS 0x0905
#endif
static struct mkimg_alias vtoc8_aliases[] = {
{ ALIAS_FREEBSD_NANDFS, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_NANDFS) },
{ ALIAS_FREEBSD_SWAP, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_SWAP) },