b33a2b05af
CB:35377 changed the behavior of find_fmap_directory() to return pointer to CBMEM_ID_FMAP if fmap is cached in cbmem. lb_boot_media_params() calls find_fmap_directory to add offset of fmap in flash to coreboot table. However, because of the change in behavior of find_fmap_directory(), it ended up adding 0 as the offset. This change adds a new function get_fmap_flash_offset() which returns the offset of fmap in flash. Ideally, all payloads should move to using the FMAP from CBMEM. However, in order to maintain compatibility with payloads which are not updated, ensure that fmap_offset is updated correctly. Since find_fmap_directory() is no longer used outside fmap.c, this change also removes it from fmap.h and limits scope to fmap.c. In a follow up patch, we need to push a change to libpayload to expose the fmap cache pointer to lib_sysinfo. BUG=b:141723751 Change-Id: I7ff6e8199143d1a992a83d7de1e3b44813b733f4 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/35639 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Shelley Chen <shchen@google.com>
52 lines
1.9 KiB
C
52 lines
1.9 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright 2015 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef _FMAP_H_
|
|
#define _FMAP_H_
|
|
|
|
#include <commonlib/region.h>
|
|
#include <commonlib/fmap_serialized.h>
|
|
|
|
/* Locate the named area in the fmap and fill in a region device representing
|
|
* that area. The region is a sub-region of the readonly boot media. Return
|
|
* 0 on success, < 0 on error. */
|
|
int fmap_locate_area_as_rdev(const char *name, struct region_device *area);
|
|
|
|
/* Just like fmap_locate_area_as_rdev(), however the region device is
|
|
* created from the RW boot device. */
|
|
int fmap_locate_area_as_rdev_rw(const char *name, struct region_device *area);
|
|
|
|
/* Locate the named area in the fmap and fill in a region with the
|
|
* offset and size of that area within the boot media. Return 0 on success,
|
|
* < 0 on error. */
|
|
int fmap_locate_area(const char *name, struct region *r);
|
|
|
|
/* Find fmap area name by offset and size.
|
|
* 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);
|
|
|
|
/* Get offset of FMAP in flash. */
|
|
uint64_t get_fmap_flash_offset(void);
|
|
|
|
#endif
|