summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryasuoka <yasuoka@openbsd.org>2019-07-29 22:33:26 +0000
committeryasuoka <yasuoka@openbsd.org>2019-07-29 22:33:26 +0000
commitf1e42c07e81a3e4e595f9fc255096eb05c5e2a5d (patch)
treee2a1a72cd3bcbf7b7b35284e79e30499de0e5188
parentExpand description of ac_flag values into a tagged list. (diff)
downloadwireguard-openbsd-f1e42c07e81a3e4e595f9fc255096eb05c5e2a5d.tar.xz
wireguard-openbsd-f1e42c07e81a3e4e595f9fc255096eb05c5e2a5d.zip
Support disk write in efiboot for armv7 and arm64.
ok patrick deraadt
-rw-r--r--sys/arch/arm64/stand/efiboot/efidev.c10
-rw-r--r--sys/arch/armv7/stand/efiboot/efidev.c12
2 files changed, 16 insertions, 6 deletions
diff --git a/sys/arch/arm64/stand/efiboot/efidev.c b/sys/arch/arm64/stand/efiboot/efidev.c
index a39e2610c9a..dbbbb1c313a 100644
--- a/sys/arch/arm64/stand/efiboot/efidev.c
+++ b/sys/arch/arm64/stand/efiboot/efidev.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: efidev.c,v 1.4 2019/01/31 14:35:06 patrick Exp $ */
+/* $OpenBSD: efidev.c,v 1.5 2019/07/29 22:33:26 yasuoka Exp $ */
/*
* Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -100,8 +100,12 @@ efid_io(int rw, efi_diskinfo_t ed, u_int off, int nsect, void *buf)
case F_WRITE:
if (ed->blkio->Media->ReadOnly)
goto on_eio;
- /* XXX not yet */
- goto on_eio;
+ memcpy(data, buf, nsect * DEV_BSIZE);
+ status = EFI_CALL(ed->blkio->WriteBlocks,
+ ed->blkio, ed->mediaid, off,
+ nsect * DEV_BSIZE, data);
+ if (EFI_ERROR(status))
+ goto on_eio;
break;
}
return (EFI_SUCCESS);
diff --git a/sys/arch/armv7/stand/efiboot/efidev.c b/sys/arch/armv7/stand/efiboot/efidev.c
index 9a76b9b152d..8591ac2602c 100644
--- a/sys/arch/armv7/stand/efiboot/efidev.c
+++ b/sys/arch/armv7/stand/efiboot/efidev.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: efidev.c,v 1.2 2016/05/20 11:53:19 kettenis Exp $ */
+/* $OpenBSD: efidev.c,v 1.3 2019/07/29 22:33:26 yasuoka Exp $ */
/*
* Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -82,8 +82,14 @@ efid_io(int rw, efi_diskinfo_t ed, u_int off, int nsect, void *buf)
case F_WRITE:
if (ed->blkio->Media->ReadOnly)
goto on_eio;
- /* XXX not yet */
- goto on_eio;
+ if (ed->blkio->Media->ReadOnly)
+ goto on_eio;
+ memcpy(data, buf, nsect * DEV_BSIZE);
+ status = EFI_CALL(ed->blkio->WriteBlocks,
+ ed->blkio, ed->mediaid, off,
+ nsect * DEV_BSIZE, data);
+ if (EFI_ERROR(status))
+ goto on_eio;
break;
}
return (EFI_SUCCESS);