-.\" $OpenBSD: softraid.4,v 1.46 2021/12/16 17:07:56 tj Exp $
+.\" $OpenBSD: softraid.4,v 1.47 2022/08/12 20:17:46 stsp Exp $
.\"
.\" Copyright (c) 2007 Todd T. Fries <todd@OpenBSD.org>
.\" Copyright (c) 2007 Marco Peereboom <marco@OpenBSD.org>
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: December 16 2021 $
+.Dd $Mdocdate: August 12 2022 $
.Dt SOFTRAID 4
.Os
.Sh NAME
in the boot storage area of the
.Nm
volume.
-Boot support is currently limited to the CRYPTO and RAID 1 disciplines
+Boot support is currently limited to the RAID 1C discipline on the
+amd64 platform, and the CRYPTO and RAID 1 disciplines
on amd64, arm64, i386, and sparc64 platforms.
On sparc64, bootable chunks must be RAID partitions using the letter
.Sq a .
-/* $OpenBSD: efidev.c,v 1.2 2020/12/09 18:10:18 krw Exp $ */
+/* $OpenBSD: efidev.c,v 1.3 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 1996 Michael Shalayeff
return EADAPT;
}
- if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
+ if ((bv->sbv_level == 'C' || bv->sbv_level == 0x1C) &&
+ bv->sbv_keys == NULL) {
if (sr_crypto_unlock_volume(bv) != 0)
return EPERM;
+ }
if (bv->sbv_diskinfo == NULL) {
dip = alloc(sizeof(struct diskinfo));
-/* $OpenBSD: efidev.c,v 1.2 2020/12/09 18:10:18 krw Exp $ */
+/* $OpenBSD: efidev.c,v 1.3 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 1996 Michael Shalayeff
return EADAPT;
}
- if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
+ if ((bv->sbv_level == 'C' || bv->sbv_level == 0x1C) &&
+ bv->sbv_keys == NULL) {
if (sr_crypto_unlock_volume(bv) != 0)
return EPERM;
+ }
if (bv->sbv_diskinfo == NULL) {
dip = alloc(sizeof(struct diskinfo));
-/* $OpenBSD: efidev.c,v 1.38 2021/06/10 18:05:20 krw Exp $ */
+/* $OpenBSD: efidev.c,v 1.39 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 1996 Michael Shalayeff
return EADAPT;
}
- if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
+ if ((bv->sbv_level == 'C' || bv->sbv_level == 0x1C) &&
+ bv->sbv_keys == NULL) {
if (sr_crypto_unlock_volume(bv) != 0)
return EPERM;
+ }
if (bv->sbv_diskinfo == NULL) {
dip = alloc(sizeof(struct diskinfo));
-/* $OpenBSD: biosdev.c,v 1.34 2020/12/09 18:10:18 krw Exp $ */
+/* $OpenBSD: biosdev.c,v 1.35 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 1996 Michael Shalayeff
return EADAPT;
}
- if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
+ if ((bv->sbv_level == 'C' || bv->sbv_level == 0x1C) &&
+ bv->sbv_keys == NULL) {
if (sr_crypto_unlock_volume(bv) != 0)
return EPERM;
+ }
if (bv->sbv_diskinfo == NULL) {
dip = alloc(sizeof(struct diskinfo));
-/* $OpenBSD: softraid_amd64.c,v 1.7 2021/06/02 22:44:26 krw Exp $ */
+/* $OpenBSD: softraid_amd64.c,v 1.8 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 2012 Joel Sing <jsing@openbsd.org>
break;
case 1:
+ case 0x1C:
if (bv->sbv_chunk_no == bv->sbv_chunks_found)
bv->sbv_state = BIOC_SVONLINE;
else if (bv->sbv_chunks_found > 0)
/* XXX - If I/O failed we should try another chunk... */
return dip->strategy(dip, rw, blk, size, buf, rsize);
- } else if (bv->sbv_level == 'C') {
+ } else if (bv->sbv_level == 'C' || bv->sbv_level == 0x1C) {
/* Select first online chunk. */
SLIST_FOREACH(bc, &bv->sbv_chunks, sbc_link)
-/* $OpenBSD: softraid.c,v 1.4 2018/08/10 16:41:35 jsing Exp $ */
+/* $OpenBSD: softraid.c,v 1.5 2022/08/12 20:17:46 stsp Exp $ */
/*
* Copyright (c) 2012 Joel Sing <jsing@openbsd.org>
struct sr_boot_keydisk *kd;
SLIST_FOREACH(bv, &sr_volumes, sbv_link) {
- if (bv->sbv_level != 'C')
+ if (bv->sbv_level != 'C' && bv->sbv_level != 0x1C)
continue;
if (bv->sbv_keys != NULL) {
explicit_bzero(bv->sbv_keys, SR_CRYPTO_KEYBLOCK_BYTES);