Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/stand/efiboot add basic raidframe support to efiboot.
details: https://anonhg.NetBSD.org/src/rev/53bdb4a3a10c
branches: trunk
changeset: 1021317:53bdb4a3a10c
user: mrg <mrg%NetBSD.org@localhost>
date: Wed May 26 09:42:36 2021 +0000
description:
add basic raidframe support to efiboot.
if raid disklabel or gpt is found, add this partition with
the offset/size adjusted by RF_PROTECTED_SECTORS. note
don't le32toh() the disklabel. if it was wrong-endian, then
getdisklabel() will have swapped it.
ok jmcneill thorpej.
diffstat:
sys/stand/efiboot/efiblock.c | 21 ++++++++++++++++++---
sys/stand/efiboot/version | 3 ++-
2 files changed, 20 insertions(+), 4 deletions(-)
diffs (77 lines):
diff -r 9f74be7ec398 -r 53bdb4a3a10c sys/stand/efiboot/efiblock.c
--- a/sys/stand/efiboot/efiblock.c Wed May 26 08:23:18 2021 +0000
+++ b/sys/stand/efiboot/efiblock.c Wed May 26 09:42:36 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: efiblock.c,v 1.10 2020/11/28 15:24:05 jmcneill Exp $ */
+/* $NetBSD: efiblock.c,v 1.11 2021/05/26 09:42:36 mrg Exp $ */
/*-
* Copyright (c) 2016 Kimihiro Nonaka <nonaka%netbsd.org@localhost>
@@ -38,6 +38,13 @@
#include "efiboot.h"
#include "efiblock.h"
+/*
+ * The raidframe support is basic. Ideally, it should be expanded to
+ * consider raid volumes a first-class citizen like the x86 efiboot does,
+ * but for now, we simply assume each RAID is potentially bootable.
+ */
+#define RF_PROTECTED_SECTORS 64 /* XXX refer to <.../rf_optnames.h> */
+
static EFI_HANDLE *efi_block;
static UINTN efi_nblock;
static struct efi_block_part *efi_block_booted = NULL;
@@ -217,6 +224,10 @@
case FS_MSDOS:
case FS_BSDLFS:
break;
+ case FS_RAID:
+ p->p_size -= RF_PROTECTED_SECTORS;
+ p->p_offset += RF_PROTECTED_SECTORS;
+ break;
default:
continue;
}
@@ -225,7 +236,7 @@
bpart->index = n;
bpart->bdev = bdev;
bpart->type = EFI_BLOCK_PART_DISKLABEL;
- bpart->disklabel.secsize = le32toh(d.d_secsize);
+ bpart->disklabel.secsize = d.d_secsize;
bpart->disklabel.part = *p;
efi_block_generate_hash_mbr(bpart, mbr);
TAILQ_INSERT_TAIL(&bdev->partitions, bpart, entries);
@@ -310,6 +321,10 @@
bpart->type = EFI_BLOCK_PART_GPT;
bpart->gpt.fstype = fstype;
bpart->gpt.ent = *ent;
+ if (fstype == FS_RAID) {
+ bpart->gpt.ent.ent_lba_start += RF_PROTECTED_SECTORS;
+ bpart->gpt.ent.ent_lba_end -= RF_PROTECTED_SECTORS;
+ }
memcpy(bpart->hash, ent->ent_guid, sizeof(bpart->hash));
TAILQ_INSERT_TAIL(&bdev->partitions, bpart, entries);
@@ -436,7 +451,7 @@
fstype = FS_ISO9660;
break;
}
- if (fstype == FS_BSDFFS || fstype == FS_ISO9660) {
+ if (fstype == FS_BSDFFS || fstype == FS_ISO9660 || fstype == FS_RAID) {
char devname[9];
snprintf(devname, sizeof(devname), "hd%u%c", bdev->index, bpart->index + 'a');
set_default_device(devname);
diff -r 9f74be7ec398 -r 53bdb4a3a10c sys/stand/efiboot/version
--- a/sys/stand/efiboot/version Wed May 26 08:23:18 2021 +0000
+++ b/sys/stand/efiboot/version Wed May 26 09:42:36 2021 +0000
@@ -1,4 +1,4 @@
-$NetBSD: version,v 1.23 2021/05/21 21:53:15 jmcneill Exp $
+$NetBSD: version,v 1.24 2021/05/26 09:42:36 mrg Exp $
NOTE ANY CHANGES YOU MAKE TO THE EFI BOOTLOADER HERE. The format of this
file is important - make sure the entries are appended on end, last item
@@ -27,3 +27,4 @@
2.4: Add ISO9660 support.
2.5: Recognize the EFI system partion as fstype MSDOS.
2.6: Disable ACPI support when booting big endian kernels.
+2.7: Add basic support for booting from RAID1 volumes.
Home |
Main Index |
Thread Index |
Old Index