add NetBSD and OpenBSD partition slices support
This commit is contained in:
parent
d52edd8638
commit
0f4f88a9d9
8 changed files with 47 additions and 15 deletions
22
ChangeLog
22
ChangeLog
|
@ -1,3 +1,25 @@
|
||||||
|
1999-08-10 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
|
Support the NetBSD and OpenBSD partition slices.
|
||||||
|
|
||||||
|
* stage2/pc_slice.h (PC_SLICE_TYPE_BSD): Deleted.
|
||||||
|
(PC_SLICE_TYPE_FREEBSD): New macro.
|
||||||
|
(PC_SLICE_TYPE_OPENBSD): Likewise.
|
||||||
|
(PC_SLICE_TYPE_NETBSD): Likewise.
|
||||||
|
(IS_PC_SLICE_TYPE_BSD_WITH_FS): Likewise.
|
||||||
|
(IS_PC_SLICE_TYPE_BSD): Likewise.
|
||||||
|
* stage2/fsys_ffs.c (ffs_mount): Use the macro
|
||||||
|
IS_PC_SLICE_TYPE_BSD_WITH_FS instead of checking if
|
||||||
|
CURRECT_SLICE is equal to the BSD partition type directly.
|
||||||
|
* stage2/fsys_ext2fs.c (ext2fs_mount): Likewise.
|
||||||
|
* stage2/fsys_fat.c (fat_mount): Likewise.
|
||||||
|
* stage2/disk_io.c (check_BSD_parts): Set the low bits of
|
||||||
|
CURRENT_SLICE to PC_SLICE_TYPE_FREEBSD instead of
|
||||||
|
PC_SLICE_TYPE_BSD.
|
||||||
|
(real_open_partition): Use the macro IS_PC_SLICE_TYPE_BSD instead
|
||||||
|
of checking if CURRENT_SLICE is equal to the BSD partition type
|
||||||
|
directly.
|
||||||
|
|
||||||
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-08-09 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* stage2/cmdline.c (commands): Added geometry.
|
* stage2/cmdline.c (commands): Added geometry.
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -2,6 +2,8 @@ NEWS - list of user-visible changes between releases of GRUB
|
||||||
|
|
||||||
New in 0.5.93:
|
New in 0.5.93:
|
||||||
* ELF format of FreeBSD kernel is supported.
|
* ELF format of FreeBSD kernel is supported.
|
||||||
|
* Support the partition ids for NetBSD and OpenBSD.
|
||||||
|
* Exit from the grub emulator just by pushing the key `q' in the menu.
|
||||||
|
|
||||||
New in 0.5.92 - 1999-07-26:
|
New in 0.5.92 - 1999-07-26:
|
||||||
* Bug fixes (i.e. Stage 1.5 can work fine again).
|
* Bug fixes (i.e. Stage 1.5 can work fine again).
|
||||||
|
|
5
TODO
5
TODO
|
@ -12,9 +12,6 @@ Look at the network booting patches from L4.
|
||||||
Add internationalization support, emulating gettext as much as is
|
Add internationalization support, emulating gettext as much as is
|
||||||
feasible.
|
feasible.
|
||||||
|
|
||||||
Add support/delays so that a floppy can be installed from another
|
|
||||||
floppy.
|
|
||||||
|
|
||||||
Add bootable CDROM support (this probably means we have to support
|
Add bootable CDROM support (this probably means we have to support
|
||||||
ISO-9660 plus maybe even the Rock Ridge extensions... ugh).
|
ISO-9660 plus maybe even the Rock Ridge extensions... ugh).
|
||||||
|
|
||||||
|
@ -30,8 +27,6 @@ larger than 16MB can be read.
|
||||||
|
|
||||||
Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot parameters
|
Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot parameters
|
||||||
|
|
||||||
Support new partition IDs for NetBSD and OpenBSD.
|
|
||||||
|
|
||||||
Add ``configfile'' command, in a clean way.
|
Add ``configfile'' command, in a clean way.
|
||||||
|
|
||||||
Add keyboard layout configuration support.
|
Add keyboard layout configuration support.
|
||||||
|
|
|
@ -346,8 +346,11 @@ check_BSD_parts (int flags)
|
||||||
{
|
{
|
||||||
/* FIXME: should do BAD144 sector remapping setup here */
|
/* FIXME: should do BAD144 sector remapping setup here */
|
||||||
|
|
||||||
|
/* XXX We cannot determine which variant of BSD owns
|
||||||
|
this slice, so set it to FreeBSD paritition type.
|
||||||
|
That should work fine for now. */
|
||||||
current_slice = ((BSD_PART_TYPE (label_buf, part_no) << 8)
|
current_slice = ((BSD_PART_TYPE (label_buf, part_no) << 8)
|
||||||
| PC_SLICE_TYPE_BSD);
|
| PC_SLICE_TYPE_FREEBSD);
|
||||||
part_start = BSD_PART_START (label_buf, part_no);
|
part_start = BSD_PART_START (label_buf, part_no);
|
||||||
part_length = BSD_PART_LENGTH (label_buf, part_no);
|
part_length = BSD_PART_LENGTH (label_buf, part_no);
|
||||||
|
|
||||||
|
@ -487,7 +490,7 @@ real_open_partition (int flags)
|
||||||
{
|
{
|
||||||
current_partition |= 0xFFFF;
|
current_partition |= 0xFFFF;
|
||||||
printf (" Partition num: %d, ", slice_no);
|
printf (" Partition num: %d, ", slice_no);
|
||||||
if (current_slice != PC_SLICE_TYPE_BSD)
|
if (! IS_PC_SLICE_TYPE_BSD (current_slice))
|
||||||
check_and_print_mount ();
|
check_and_print_mount ();
|
||||||
else
|
else
|
||||||
check_BSD_parts (1);
|
check_BSD_parts (1);
|
||||||
|
@ -499,11 +502,11 @@ real_open_partition (int flags)
|
||||||
*/
|
*/
|
||||||
else if (part_no == slice_no
|
else if (part_no == slice_no
|
||||||
|| (part_no == 0xFF
|
|| (part_no == 0xFF
|
||||||
&& current_slice == PC_SLICE_TYPE_BSD))
|
&& IS_PC_SLICE_TYPE_BSD (current_slice)))
|
||||||
{
|
{
|
||||||
if ((current_partition & 0xFF00) != 0xFF00)
|
if ((current_partition & 0xFF00) != 0xFF00)
|
||||||
{
|
{
|
||||||
if (current_slice == PC_SLICE_TYPE_BSD)
|
if (IS_PC_SLICE_TYPE_BSD (current_slice))
|
||||||
check_BSD_parts (0);
|
check_BSD_parts (0);
|
||||||
else
|
else
|
||||||
errnum = ERR_NO_PART;
|
errnum = ERR_NO_PART;
|
||||||
|
|
|
@ -255,7 +255,7 @@ ext2fs_mount (void)
|
||||||
|
|
||||||
if ((((current_drive & 0x80) || (current_slice != 0))
|
if ((((current_drive & 0x80) || (current_slice != 0))
|
||||||
&& (current_slice != PC_SLICE_TYPE_EXT2FS)
|
&& (current_slice != PC_SLICE_TYPE_EXT2FS)
|
||||||
&& (current_slice != (PC_SLICE_TYPE_BSD | (FS_OTHER << 8))))
|
&& (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER)))
|
||||||
|| part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE))
|
|| part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE))
|
||||||
|| !devread (SBLOCK, 0, sizeof (struct ext2_super_block),
|
|| !devread (SBLOCK, 0, sizeof (struct ext2_super_block),
|
||||||
(char *) SUPERBLOCK)
|
(char *) SUPERBLOCK)
|
||||||
|
|
|
@ -42,7 +42,7 @@ fat_mount (void)
|
||||||
&& (current_slice != PC_SLICE_TYPE_FAT12)
|
&& (current_slice != PC_SLICE_TYPE_FAT12)
|
||||||
&& (current_slice != PC_SLICE_TYPE_FAT16_LT32M)
|
&& (current_slice != PC_SLICE_TYPE_FAT16_LT32M)
|
||||||
&& (current_slice != PC_SLICE_TYPE_FAT16_GT32M)
|
&& (current_slice != PC_SLICE_TYPE_FAT16_GT32M)
|
||||||
&& (current_slice != (PC_SLICE_TYPE_BSD | (FS_MSDOS << 8))))
|
&& (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS << 8)))
|
||||||
|| !devread (0, 0, SECTOR_SIZE, (char *) BPB)
|
|| !devread (0, 0, SECTOR_SIZE, (char *) BPB)
|
||||||
|| FAT_BPB_BYTES_PER_SECTOR (BPB) != SECTOR_SIZE
|
|| FAT_BPB_BYTES_PER_SECTOR (BPB) != SECTOR_SIZE
|
||||||
|| FAT_BPB_SECT_PER_CLUST (BPB) < 1 || FAT_BPB_SECT_PER_CLUST (BPB) > 64
|
|| FAT_BPB_SECT_PER_CLUST (BPB) < 1 || FAT_BPB_SECT_PER_CLUST (BPB) > 64
|
||||||
|
|
|
@ -80,7 +80,7 @@ ffs_mount (void)
|
||||||
int retval = 1;
|
int retval = 1;
|
||||||
|
|
||||||
if ((((current_drive & 0x80) || (current_slice != 0))
|
if ((((current_drive & 0x80) || (current_slice != 0))
|
||||||
&& current_slice != (PC_SLICE_TYPE_BSD | (FS_BSDFFS << 8)))
|
&& ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_BSDFFS << 8))
|
||||||
|| part_length < (SBLOCK + (SBSIZE / DEV_BSIZE))
|
|| part_length < (SBLOCK + (SBSIZE / DEV_BSIZE))
|
||||||
|| !devread (SBLOCK, 0, SBSIZE, (char *) SUPERBLOCK)
|
|| !devread (SBLOCK, 0, SBSIZE, (char *) SUPERBLOCK)
|
||||||
|| SUPERBLOCK->fs_magic != FS_MAGIC)
|
|| SUPERBLOCK->fs_magic != FS_MAGIC)
|
||||||
|
|
|
@ -105,9 +105,19 @@
|
||||||
#define PC_SLICE_TYPE_WIN95_EXTENDED 0xf
|
#define PC_SLICE_TYPE_WIN95_EXTENDED 0xf
|
||||||
#define PC_SLICE_TYPE_EXT2FS 0x83
|
#define PC_SLICE_TYPE_EXT2FS 0x83
|
||||||
|
|
||||||
/* this next one is special, as it uses it's own partitioning scheme
|
/* these ones are special, as they use thier own partitioning scheme
|
||||||
to subdivide the PC partition from there */
|
to subdivide the PC partitions from there. */
|
||||||
#define PC_SLICE_TYPE_BSD 0xa5
|
#define PC_SLICE_TYPE_FREEBSD 0xa5
|
||||||
|
#define PC_SLICE_TYPE_OPENBSD 0xa6
|
||||||
|
#define PC_SLICE_TYPE_NETBSD 0xa9
|
||||||
|
|
||||||
|
/* For convenience. */
|
||||||
|
#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs) \
|
||||||
|
((type) == (PC_SLICE_TYPE_FREEBSD | ((fs) << 8)) \
|
||||||
|
|| (type) == (PC_SLICE_TYPE_OPENBSD | ((fs) << 8)) \
|
||||||
|
|| (type) == (PC_SLICE_TYPE_NETBSD | (fs) << 8))
|
||||||
|
|
||||||
|
#define IS_PC_SLICE_TYPE_BSD(type) IS_PC_SLICE_TYPE_BSD_WITH_FS(type,0)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue