diff -ur linux~/Documentation/Configure.help linux/Documentation/Configure.help --- linux~/Documentation/Configure.help Fri Jan 5 16:27:43 2001 +++ linux/Documentation/Configure.help Sun Jan 7 18:22:25 2001 @@ -11470,6 +11470,17 @@ Say Y here if you would like to use hard disks under Linux which were partitioned on an x86 PC (not necessarily by DOS). +Plan9 partition table support (EXPERIMENTAL) +CONFIG_PLAN9_PARTITION + Plan9 uses its own hard disk partition scheme on your PC. It + requires only one entry in the primary partition table of your disk + and manages it similarly to DOS extended partitions. Plan9 has FAT16 + filesystem as the first partition to put its boot loader. Saying Y + here allows you to read the existing partition, and mount the FAT + partition from within Linux (if you have also said Y to "MSDOS file + system support"), which gives you the ability to make LILO work with + Plan9. If you don't know what all this is about, say N. + BSD disklabel (FreeBSD partition tables) support CONFIG_BSD_DISKLABEL FreeBSD uses its own hard disk partition scheme on your PC. It diff -ur linux~/fs/partitions/Config.in linux/fs/partitions/Config.in --- linux~/fs/partitions/Config.in Mon Jul 10 12:21:41 2000 +++ linux/fs/partitions/Config.in Sun Jan 7 18:37:27 2001 @@ -23,6 +23,7 @@ bool ' BSD disklabel (FreeBSD partition tables) support' CONFIG_BSD_DISKLABEL bool ' Solaris (x86) partition table support' CONFIG_SOLARIS_X86_PARTITION bool ' Unixware slices support' CONFIG_UNIXWARE_DISKLABEL + dep_bool ' Plan9 partition support (EXPERIMENTAL)' CONFIG_PLAN9_PARTITION $CONFIG_EXPERIMENTAL fi bool ' SGI partition support' CONFIG_SGI_PARTITION bool ' Ultrix partition table support' CONFIG_ULTRIX_PARTITION diff -ur linux~/fs/partitions/msdos.c linux/fs/partitions/msdos.c --- linux~/fs/partitions/msdos.c Fri Nov 17 17:18:46 2000 +++ linux/fs/partitions/msdos.c Sun Jan 7 18:46:34 2001 @@ -17,6 +17,8 @@ * Check partition table on IDE disks for common CHS translations * * Re-organised Feb 1998 Russell King + * + * plan9 partition hack 2001 Jan, imel96@trustix.com */ #include @@ -228,6 +230,55 @@ } #endif +#ifdef CONFIG_PLAN9_PARTITION + +static void add_plan9_partition(struct gendisk *hd, struct plan9_partition + *plan9_p, int minor) +{ + add_gd_partition(hd, current_minor, plan9_p->p_offset, plan9_p->p_size); + current_minor++; +} + +/* + * Create devices for plan9 partitions listed in a disklabel, under a + * dos-like partition. See bsd code for more information. + */ +static void plan9_disklabel_partition(struct gendisk *hd, int minor, int st_sec) +{ + struct buffer_head *bh; + struct plan9_partition p; + char * ptr; + char buf[40]; + + if (!(bh = get_partition_table_block(hd, minor, 0))) + return; + + printk(" %s: b_data + 0x200; + + while (!strncmp(ptr, "part", 4)) { + + /* locate offset number (which is two spaces away) */ + while (*ptr++ != ' '); + while (*ptr++ != ' '); + p.p_offset = simple_strtoul(ptr, NULL, 10); + + /* find end sector number (next number) */ + while (*ptr++ != ' '); + p.p_size = simple_strtoul(ptr, NULL, 10) - p.p_offset; + p.p_offset += st_sec; + + add_plan9_partition(hd, &p, minor); + + /* go on to next partition */ + while (*ptr++ != '\n'); + } + bforget(bh); + printk(" >\n"); +} + +#endif + #ifdef CONFIG_BSD_DISKLABEL static void check_and_add_bsd_partition(struct gendisk *hd, @@ -499,6 +550,10 @@ SYS_IND(p) == NETBSD_PARTITION || SYS_IND(p) == OPENBSD_PARTITION) bsd_disklabel_partition(hd, minor, SYS_IND(p)); +#endif +#ifdef CONFIG_PLAN9_PARTITION + if (SYS_IND(p) == PLAN9_PARTITION) + plan9_disklabel_partition(hd, minor, START_SECT(p)); #endif #ifdef CONFIG_UNIXWARE_DISKLABEL if (SYS_IND(p) == UNIXWARE_PARTITION) diff -ur linux~/include/linux/genhd.h linux/include/linux/genhd.h --- linux~/include/linux/genhd.h Fri Nov 17 17:23:56 2000 +++ linux/include/linux/genhd.h Sun Jan 7 17:55:15 2001 @@ -103,6 +103,17 @@ #endif /* CONFIG_SOLARIS_X86_PARTITION */ +#ifdef CONFIG_PLAN9_PARTITION + +#define PLAN9_PARTITION 0x39 + +struct plan9_partition { /* the partition table */ + __u32 p_size; /* number of sectors in partition */ + __u32 p_offset; /* starting sector */ +}; + +#endif + #ifdef CONFIG_BSD_DISKLABEL /* * BSD disklabel support by Yossi Gottlieb