aboutsummaryrefslogtreecommitdiff
path: root/sys/boot/efi
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2002-03-19 23:05:33 +0000
committerPeter Wemm <peter@FreeBSD.org>2002-03-19 23:05:33 +0000
commitefcbdfb72b56233a0499937f3c47d5c8b9dd8b98 (patch)
tree9d0dfc05e7de1519ec50def1c8613563fcb5018d /sys/boot/efi
parent3003bdb5983ac249a54696112d841e1d6ed28d00 (diff)
Notes
Diffstat (limited to 'sys/boot/efi')
-rw-r--r--sys/boot/efi/libefi/efifs.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/sys/boot/efi/libefi/efifs.c b/sys/boot/efi/libefi/efifs.c
index c1eaecf6fd1b..e4598810d37c 100644
--- a/sys/boot/efi/libefi/efifs.c
+++ b/sys/boot/efi/libefi/efifs.c
@@ -129,7 +129,35 @@ efifs_read(struct open_file *f, void *buf, size_t size, size_t *resid)
size -= sz;
bufp += sz;
}
- *resid = size;
+ if (resid)
+ *resid = size;
+ return 0;
+}
+
+static int
+efifs_write(struct open_file *f, void *buf, size_t size, size_t *resid)
+{
+ EFI_FILE *file = f->f_fsdata;
+ EFI_STATUS status;
+ UINTN sz = size;
+ char *bufp;
+
+ bufp = buf;
+ while (size > 0) {
+ sz = size;
+ if (sz > 8192)
+ sz = 8192;
+ status = file->Write(file, &sz, bufp);
+ twiddle();
+ if (EFI_ERROR(status))
+ return EIO;
+ if (sz == 0)
+ break;
+ size -= sz;
+ bufp += sz;
+ }
+ if (resid)
+ *resid = size;
return 0;
}
@@ -246,7 +274,7 @@ struct fs_ops efi_fsops = {
efifs_open,
efifs_close,
efifs_read,
- null_write,
+ efifs_write,
efifs_seek,
efifs_stat,
efifs_readdir