/*
 * Copyright (c) 2019,2020 Linaro Limited
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/zephyr.h>

#include "psa/error.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief The struct used to persist config data to secure storage.
 *
 * The first 6 bytes of this struct should remain consistent in any future
 * firmware updates, since they can be used to identify to layout of the rest
 * of the struct in cases where config data version management becomes
 * a necessity.
 */
struct cfg_data {
	/**
	 * @brief Magic number for config data payloads (0x55CFDA7A).
	 */
	uint32_t magic;

	/**
	 * @brief The version number for the stored config record.
	 *
	 * This number should be incremented any time the config_data struct
	 * definition changes to allow version management of config data at
	 * the application level.
	 */
	uint16_t version;

	/** @brief 256-byte debug scratch area. */
	uint8_t scratch[256];
};

/**
 * @brief Creates a new config record in secure storage.
 *
 * @return #PSA_SUCCESS on success, otherwise a appropriate psa_status_t code.
 */
psa_status_t cfg_create_data(void);

/**
 * @brief Attempts to load the config record from secure storage. If the
 *        record is not found in secure storage, a new record will be created
 *        using default config settings.
 *
 * @param p_cfg_data Pointer to the cfg_data struct where the config data
 *        should be assigned once loaded.
 *
 * @return #PSA_SUCCESS on success, otherwise a appropriate psa_status_t code.
 */
psa_status_t cfg_load_data(struct cfg_data *p_cfg_data);

#ifdef __cplusplus
}
#endif
