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>
This commit is contained in:
T Michael Turney 2019-03-20 14:37:34 -07:00 committed by Patrick Georgi
parent d61c5ea7f5
commit 19fcc89fe0
2 changed files with 30 additions and 0 deletions

View File

@ -40,4 +40,12 @@ int fmap_locate_area(const char *name, struct region *r);
* Return 0 on success, < 0 on error. */
int fmap_find_region_name(const struct region * const ar,
char name[FMAP_STRLEN]);
/* Read fmap area into provided buffer.
* Return size read on success, < 0 on error. */
ssize_t fmap_read_area(const char *name, void *buffer, size_t size);
/* Write provided buffer into fmap area.
* Return size written on success, < 0 on error. */
ssize_t fmap_overwrite_area(const char *name, const void *buffer, size_t size);
#endif

View File

@ -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);
}