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:
parent
d61c5ea7f5
commit
19fcc89fe0
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue