summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2012-05-25 20:33:34 +0000
committermarcel <marcel@FreeBSD.org>2012-05-25 20:33:34 +0000
commit5306b1eeab09fc89054e9d4151e0f7b293e90146 (patch)
tree22db89ce1df21b40282304277904a448e457d5b0
parent788f1361df0f2ba2620c9ef048e47454c3aaceee (diff)
downloadFreeBSD-src-5306b1eeab09fc89054e9d4151e0f7b293e90146.zip
FreeBSD-src-5306b1eeab09fc89054e9d4151e0f7b293e90146.tar.gz
Add a partition type for nandfs to the apm, bsd, gpt and vtoc8 schemes.
The gpart alias for these partition types is "freebsd-nandfs".
-rw-r--r--sys/geom/part/g_part.c1
-rw-r--r--sys/geom/part/g_part.h1
-rw-r--r--sys/geom/part/g_part_apm.c7
-rw-r--r--sys/geom/part/g_part_bsd.c7
-rw-r--r--sys/geom/part/g_part_gpt.c2
-rw-r--r--sys/geom/part/g_part_vtoc8.c7
-rw-r--r--sys/sys/apm.h1
-rw-r--r--sys/sys/disklabel.h4
-rw-r--r--sys/sys/gpt.h6
-rw-r--r--sys/sys/vtoc.h1
10 files changed, 35 insertions, 2 deletions
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index a21fe26..8d86c4a 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -83,6 +83,7 @@ struct g_part_alias_list {
{ "fat32", G_PART_ALIAS_MS_FAT32 },
{ "freebsd", G_PART_ALIAS_FREEBSD },
{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
+ { "freebsd-nandfs", G_PART_ALIAS_FREEBSD_NANDFS },
{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
{ "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
{ "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
diff --git a/sys/geom/part/g_part.h b/sys/geom/part/g_part.h
index e475a3e..39bcc9d 100644
--- a/sys/geom/part/g_part.h
+++ b/sys/geom/part/g_part.h
@@ -46,6 +46,7 @@ enum g_part_alias {
G_PART_ALIAS_EFI, /* A EFI system partition entry. */
G_PART_ALIAS_FREEBSD, /* A BSD labeled partition entry. */
G_PART_ALIAS_FREEBSD_BOOT, /* A FreeBSD boot partition entry. */
+ G_PART_ALIAS_FREEBSD_NANDFS, /* A FreeBSD nandfs partition entry. */
G_PART_ALIAS_FREEBSD_SWAP, /* A swap partition entry. */
G_PART_ALIAS_FREEBSD_UFS, /* A UFS/UFS2 file system entry. */
G_PART_ALIAS_FREEBSD_VINUM, /* A Vinum partition entry. */
diff --git a/sys/geom/part/g_part_apm.c b/sys/geom/part/g_part_apm.c
index d99ddda..35d0e3c 100644
--- a/sys/geom/part/g_part_apm.c
+++ b/sys/geom/part/g_part_apm.c
@@ -159,6 +159,11 @@ apm_parse_type(const char *type, char *buf, size_t bufsz)
strcpy(buf, APM_ENT_TYPE_FREEBSD);
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ strcpy(buf, APM_ENT_TYPE_FREEBSD_NANDFS);
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
strcpy(buf, APM_ENT_TYPE_FREEBSD_SWAP);
@@ -485,6 +490,8 @@ g_part_apm_type(struct g_part_table *basetable, struct g_part_entry *baseentry,
return (g_part_alias_name(G_PART_ALIAS_APPLE_UFS));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD))
return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
+ if (!strcmp(type, APM_ENT_TYPE_FREEBSD_NANDFS))
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD_SWAP))
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD_UFS))
diff --git a/sys/geom/part/g_part_bsd.c b/sys/geom/part/g_part_bsd.c
index f638216..a53781c 100644
--- a/sys/geom/part/g_part_bsd.c
+++ b/sys/geom/part/g_part_bsd.c
@@ -126,6 +126,11 @@ bsd_parse_type(const char *type, uint8_t *fstype)
*fstype = (u_int)lt;
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ *fstype = FS_NANDFS;
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
*fstype = FS_SWAP;
@@ -450,6 +455,8 @@ g_part_bsd_type(struct g_part_table *basetable, struct g_part_entry *baseentry,
entry = (struct g_part_bsd_entry *)baseentry;
type = entry->part.p_fstype;
+ if (type == FS_NANDFS)
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (type == FS_SWAP)
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (type == FS_BSDFFS)
diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c
index 559b616..68fb13c 100644
--- a/sys/geom/part/g_part_gpt.c
+++ b/sys/geom/part/g_part_gpt.c
@@ -155,6 +155,7 @@ static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
+static struct uuid gpt_uuid_freebsd_nandfs = GPT_ENT_TYPE_FREEBSD_NANDFS;
static struct uuid gpt_uuid_freebsd_swap = GPT_ENT_TYPE_FREEBSD_SWAP;
static struct uuid gpt_uuid_freebsd_ufs = GPT_ENT_TYPE_FREEBSD_UFS;
static struct uuid gpt_uuid_freebsd_vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
@@ -195,6 +196,7 @@ static struct g_part_uuid_alias {
{ &gpt_uuid_efi, G_PART_ALIAS_EFI, 0xee },
{ &gpt_uuid_freebsd, G_PART_ALIAS_FREEBSD, 0xa5 },
{ &gpt_uuid_freebsd_boot, G_PART_ALIAS_FREEBSD_BOOT, 0 },
+ { &gpt_uuid_freebsd_nandfs, G_PART_ALIAS_FREEBSD_NANDFS, 0 },
{ &gpt_uuid_freebsd_swap, G_PART_ALIAS_FREEBSD_SWAP, 0 },
{ &gpt_uuid_freebsd_ufs, G_PART_ALIAS_FREEBSD_UFS, 0 },
{ &gpt_uuid_freebsd_vinum, G_PART_ALIAS_FREEBSD_VINUM, 0 },
diff --git a/sys/geom/part/g_part_vtoc8.c b/sys/geom/part/g_part_vtoc8.c
index 0c442a7..e993eff 100644
--- a/sys/geom/part/g_part_vtoc8.c
+++ b/sys/geom/part/g_part_vtoc8.c
@@ -114,6 +114,11 @@ vtoc8_parse_type(const char *type, uint16_t *tag)
*tag = (uint16_t)lt;
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ *tag = VTOC_TAG_FREEBSD_NANDFS;
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
*tag = VTOC_TAG_FREEBSD_SWAP;
@@ -487,6 +492,8 @@ g_part_vtoc8_type(struct g_part_table *basetable, struct g_part_entry *entry,
table = (struct g_part_vtoc8_table *)basetable;
tag = be16dec(&table->vtoc.part[entry->gpe_index - 1].tag);
+ if (tag == VTOC_TAG_FREEBSD_NANDFS)
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (tag == VTOC_TAG_FREEBSD_SWAP)
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (tag == VTOC_TAG_FREEBSD_UFS)
diff --git a/sys/sys/apm.h b/sys/sys/apm.h
index e1b0e85..a17591d 100644
--- a/sys/sys/apm.h
+++ b/sys/sys/apm.h
@@ -56,6 +56,7 @@ struct apm_ent {
#define APM_ENT_TYPE_UNUSED "Apple_Free"
#define APM_ENT_TYPE_FREEBSD "FreeBSD"
+#define APM_ENT_TYPE_FREEBSD_NANDFS "FreeBSD-nandfs"
#define APM_ENT_TYPE_FREEBSD_SWAP "FreeBSD-swap"
#define APM_ENT_TYPE_FREEBSD_UFS "FreeBSD-UFS"
#define APM_ENT_TYPE_FREEBSD_VINUM "FreeBSD-Vinum"
diff --git a/sys/sys/disklabel.h b/sys/sys/disklabel.h
index 31cefd1..d135afa 100644
--- a/sys/sys/disklabel.h
+++ b/sys/sys/disklabel.h
@@ -232,6 +232,7 @@ static const char *dktypenames[] = {
#define FS_UDF 24 /* UDF */
#define FS_EFS 26 /* SGI's Extent File system */
#define FS_ZFS 27 /* Sun's ZFS */
+#define FS_NANDFS 30 /* FreeBSD nandfs (NiLFS derived) */
#ifdef FSTYPENAMES
static const char *fstypenames[] = {
@@ -263,6 +264,9 @@ static const char *fstypenames[] = {
"?",
"EFS",
"ZFS",
+ "?",
+ "?",
+ "nandfs",
NULL
};
#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
diff --git a/sys/sys/gpt.h b/sys/sys/gpt.h
index d00135d..507ff1c 100644
--- a/sys/sys/gpt.h
+++ b/sys/sys/gpt.h
@@ -79,6 +79,10 @@ struct gpt_ent {
{0x024dee41,0x33e7,0x11d3,0x9d,0x69,{0x00,0x08,0xc7,0x81,0xf3,0x9f}}
#define GPT_ENT_TYPE_FREEBSD \
{0x516e7cb4,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
+#define GPT_ENT_TYPE_FREEBSD_BOOT \
+ {0x83bd6b9d,0x7f41,0x11dc,0xbe,0x0b,{0x00,0x15,0x60,0xb8,0x4f,0x0f}}
+#define GPT_ENT_TYPE_FREEBSD_NANDFS \
+ {0x74ba7dd9,0xa689,0x11e1,0xbd,0x04,{0x00,0xe0,0x81,0x28,0x6a,0xcf}}
#define GPT_ENT_TYPE_FREEBSD_SWAP \
{0x516e7cb5,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
#define GPT_ENT_TYPE_FREEBSD_UFS \
@@ -87,8 +91,6 @@ struct gpt_ent {
{0x516e7cb8,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
#define GPT_ENT_TYPE_FREEBSD_ZFS \
{0x516e7cba,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
-#define GPT_ENT_TYPE_FREEBSD_BOOT \
- {0x83bd6b9d,0x7f41,0x11dc,0xbe,0x0b,{0x00,0x15,0x60,0xb8,0x4f,0x0f}}
/*
* The following are unused but documented here to avoid reuse.
diff --git a/sys/sys/vtoc.h b/sys/sys/vtoc.h
index 55c80e2..82c6a57 100644
--- a/sys/sys/vtoc.h
+++ b/sys/sys/vtoc.h
@@ -51,6 +51,7 @@
#define VTOC_TAG_FREEBSD_UFS 0x0902
#define VTOC_TAG_FREEBSD_VINUM 0x0903
#define VTOC_TAG_FREEBSD_ZFS 0x0904
+#define VTOC_TAG_FREEBSD_NANDFS 0x0905
#define VTOC_FLAG_UNMNT 0x01 /* unmountable partition */
#define VTOC_FLAG_RDONLY 0x10 /* partition is read/only */
OpenPOWER on IntegriCloud