/*
 * (C) Copyright 2012
 * Joe Hershberger, National Instruments, joe.hershberger@ni.com
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#ifndef __ENV_FLAGS_H__
#define __ENV_FLAGS_H__

enum env_flags_vartype {
	env_flags_vartype_string,
	env_flags_vartype_decimal,
	env_flags_vartype_hex,
	env_flags_vartype_bool,
#ifdef CONFIG_CMD_NET
	env_flags_vartype_ipaddr,
	env_flags_vartype_macaddr,
#endif
	env_flags_vartype_end
};

enum env_flags_varaccess {
	env_flags_varaccess_any,
	env_flags_varaccess_readonly,
	env_flags_varaccess_writeonce,
	env_flags_varaccess_changedefault,
	env_flags_varaccess_end
};

#define ENV_FLAGS_VAR ".flags"
#define ENV_FLAGS_ATTR_MAX_LEN 2
#define ENV_FLAGS_VARTYPE_LOC 0
#define ENV_FLAGS_VARACCESS_LOC 1

#ifndef CONFIG_ENV_FLAGS_LIST_STATIC
#define CONFIG_ENV_FLAGS_LIST_STATIC ""
#endif

#ifdef CONFIG_CMD_NET
#ifdef CONFIG_ENV_OVERWRITE
#define ETHADDR_FLAGS "ethaddr:ma,"
#else
#ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
#define ETHADDR_FLAGS "ethaddr:mc,"
#else
#define ETHADDR_FLAGS "ethaddr:mo,"
#endif
#endif
#else
#define ETHADDR_FLAGS ""
#endif

#ifndef CONFIG_ENV_OVERWRITE
#define SERIAL_FLAGS "serial#:so,"
#else
#define SERIAL_FLAGS ""
#endif

#define ENV_FLAGS_LIST_STATIC \
	ETHADDR_FLAGS \
	SERIAL_FLAGS \
	CONFIG_ENV_FLAGS_LIST_STATIC

#ifdef CONFIG_CMD_ENV_FLAGS
/*
 * Print the whole list of available type flags.
 */
void env_flags_print_vartypes(void);
/*
 * Print the whole list of available access flags.
 */
void env_flags_print_varaccess(void);
/*
 * Return the name of the type.
 */
const char *env_flags_get_vartype_name(enum env_flags_vartype type);
/*
 * Return the name of the access.
 */
const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
#endif

/*
 * Parse the flags string from a .flags attribute list into the vartype enum.
 */
enum env_flags_vartype env_flags_parse_vartype(const char *flags);
/*
 * Parse the flags string from a .flags attribute list into the varaccess enum.
 */
enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
/*
 * Parse the binary flags from a hash table entry into the varaccess enum.
 */
enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);

#ifdef USE_HOSTCC
/*
 * Look up the type of a variable directly from the .flags var.
 */
enum env_flags_vartype env_flags_get_type(const char *name);
/*
 * Look up the access of a variable directly from the .flags var.
 */
enum env_flags_varaccess env_flags_get_access(const char *name);
/*
 * Validate the newval for its type to conform with the requirements defined by
 * its flags (directly looked at the .flags var).
 */
int env_flags_validate_type(const char *name, const char *newval);
/*
 * Validate the newval for its access to conform with the requirements defined
 * by its flags (directly looked at the .flags var).
 */
int env_flags_validate_access(const char *name, int check_mask);
/*
 * Validate that the proposed access to variable "name" is valid according to
 * the defined flags for that variable, if any.
 */
int env_flags_validate_varaccess(const char *name, int check_mask);
/*
 * Validate the parameters passed to "env set" for type compliance
 */
int env_flags_validate_env_set_params(int argc, char * const argv[]);

#else /* !USE_HOSTCC */

#include <search.h>

/*
 * When adding a variable to the environment, initialize the flags for that
 * variable.
 */
void env_flags_init(ENTRY *var_entry);

/*
 * Validate the newval for to conform with the requirements defined by its flags
 */
int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
	int flag);

#endif /* USE_HOSTCC */

/*
 * These are the binary flags used in the environment entry->flags variable to
 * decribe properties of veriables in the table
 */
#define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
/* The actual variable type values use the enum value (within the mask) */
#define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
#define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
#define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
#define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
#define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078

#endif /* __ENV_FLAGS_H__ */
