/* fmap_sections.h, track which sections of the image will contain CBFSes */
/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef CBFS_SECTIONS_H_
#define CBFS_SECTIONS_H_

#include "fmd.h"

#include <stdbool.h>

#define SECTION_NAME_FMAP		"FMAP"
#define SECTION_NAME_PRIMARY_CBFS	"COREBOOT"

#define SECTION_ANNOTATION_CBFS		"CBFS"

typedef const struct descriptor_node *cbfs_section_iterator_t;

/** @return Iterator pointing to first CBFS section, or NULL if none exist */
cbfs_section_iterator_t cbfs_sections_iterator(void);

/**
 * Advance iterator to point to the next CBFS section.
 * If it was already pointing to the last such section, it will be set to NULL.
 *
 * @param it (Non-NULL) pointer to (possibly NULL) iterator to be updated
 * @return   Whether it was successfully advanced (wasn't already NULL)
 */
bool cbfs_sections_iterator_advance(cbfs_section_iterator_t *it);

/**
 * @param it Iterator, which must currently be non-NULL
 * @return   Section to which it points
 */
const struct flashmap_descriptor *cbfs_sections_iterator_deref(
						cbfs_section_iterator_t it);

/** @return Whether a section named SECTION_NAME_PRIMARY_CBFS is in the list. */
bool cbfs_sections_primary_cbfs_accounted_for(void);

/** Reclaim the space used to store knowledge of which sections are CBFSes. */
void cbfs_sections_cleanup(void);

#endif
