summaryrefslogtreecommitdiff
path: root/src/lib/fmap.c
diff options
context:
space:
mode:
authorT Michael Turney <mturney@codeaurora.org>2019-03-20 14:37:34 -0700
committerPatrick Georgi <pgeorgi@google.com>2019-04-23 10:22:54 +0000
commit19fcc89fe085fad2e7aba52375b4190463667fdb (patch)
treeeb77c8bec07fdc59b55de5134037e5ab93621e1e /src/lib/fmap.c
parentd61c5ea7f5cc87a58db3d0d004b94dfab3897ac1 (diff)
lib/fmap: Add area read/write functions
Change-Id: I7669b8dc07b1aa5f00e7d8d0b1305b3de6c5949c Signed-off-by: T Michael Turney <mturney@codeaurora.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32287 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/lib/fmap.c')
-rw-r--r--src/lib/fmap.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/fmap.c b/src/lib/fmap.c
index 9602134d94..2b4e3bae2c 100644
--- a/src/lib/fmap.c
+++ b/src/lib/fmap.c
@@ -173,3 +173,25 @@ int fmap_find_region_name(const struct region * const ar,
return -1;
}
+
+ssize_t fmap_read_area(const char *name, void *buffer, size_t size)
+{
+ struct region_device rdev;
+ if (fmap_locate_area_as_rdev(name, &rdev))
+ return -1;
+ return rdev_readat(&rdev, buffer, 0,
+ MIN(size, region_device_sz(&rdev)));
+}
+
+ssize_t fmap_overwrite_area(const char *name, const void *buffer, size_t size)
+{
+ struct region_device rdev;
+
+ if (fmap_locate_area_as_rdev_rw(name, &rdev))
+ return -1;
+ if (size > region_device_sz(&rdev))
+ return -1;
+ if (rdev_eraseat(&rdev, 0, region_device_sz(&rdev)) < 0)
+ return -1;
+ return rdev_writeat(&rdev, buffer, 0, size);
+}