/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2018 Synopsys, Inc. All rights reserved.
 * Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
 */

#ifndef __BOARD_ENV_LIB_H
#define __BOARD_ENV_LIB_H

#include <config.h>
#include <linux/kernel.h>

enum env_type {
	ENV_DEC,
	ENV_HEX
};

typedef struct {
	u32 val;
	bool set;
} u32_env;

struct env_map_common {
	const char *const env_name;
	enum env_type type;
	bool mandatory;
	u32 min;
	u32 max;
	u32_env *val;
};

struct env_map_percpu {
	const char *const env_name;
	enum env_type type;
	bool mandatory;
	u32 min[NR_CPUS];
	u32 max[NR_CPUS];
	u32_env (*val)[NR_CPUS];
};

void envs_cleanup_common(const struct env_map_common *map);
int envs_read_common(const struct env_map_common *map);
int envs_validate_common(const struct env_map_common *map);
int envs_read_validate_common(const struct env_map_common *map);

void envs_cleanup_core(const struct env_map_percpu *map);
int envs_read_validate_core(const struct env_map_percpu *map,
			    bool (*cpu_used)(u32));
int envs_process_and_validate(const struct env_map_common *common,
			      const struct env_map_percpu *core,
			      bool (*cpu_used)(u32));

int args_envs_enumerate(const struct env_map_common *map,
			int enum_by, int argc, char *const argv[]);

#endif /* __BOARD_ENV_LIB_H */
