xref: /rk3399_rockchip-uboot/include/env_flags.h (revision fffad71bc489cf224eda6d826a1645423852ee45)
12598090bSJoe Hershberger /*
22598090bSJoe Hershberger  * (C) Copyright 2012
32598090bSJoe Hershberger  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
42598090bSJoe Hershberger  *
52598090bSJoe Hershberger  * See file CREDITS for list of people who contributed to this
62598090bSJoe Hershberger  * project.
72598090bSJoe Hershberger  *
82598090bSJoe Hershberger  * This program is free software; you can redistribute it and/or
92598090bSJoe Hershberger  * modify it under the terms of the GNU General Public License as
102598090bSJoe Hershberger  * published by the Free Software Foundation; either version 2 of
112598090bSJoe Hershberger  * the License, or (at your option) any later version.
122598090bSJoe Hershberger  *
132598090bSJoe Hershberger  * This program is distributed in the hope that it will be useful,
142598090bSJoe Hershberger  * but WITHOUT ANY WARRANTY; without even the implied warranty of
152598090bSJoe Hershberger  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
162598090bSJoe Hershberger  * GNU General Public License for more details.
172598090bSJoe Hershberger  *
182598090bSJoe Hershberger  * You should have received a copy of the GNU General Public License
192598090bSJoe Hershberger  * along with this program; if not, write to the Free Software
202598090bSJoe Hershberger  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
212598090bSJoe Hershberger  * MA 02111-1307 USA
222598090bSJoe Hershberger  */
232598090bSJoe Hershberger 
242598090bSJoe Hershberger #ifndef __ENV_FLAGS_H__
252598090bSJoe Hershberger #define __ENV_FLAGS_H__
262598090bSJoe Hershberger 
272598090bSJoe Hershberger enum env_flags_vartype {
282598090bSJoe Hershberger 	env_flags_vartype_string,
292598090bSJoe Hershberger 	env_flags_vartype_decimal,
302598090bSJoe Hershberger 	env_flags_vartype_hex,
312598090bSJoe Hershberger 	env_flags_vartype_bool,
322598090bSJoe Hershberger #ifdef CONFIG_CMD_NET
332598090bSJoe Hershberger 	env_flags_vartype_ipaddr,
342598090bSJoe Hershberger 	env_flags_vartype_macaddr,
352598090bSJoe Hershberger #endif
362598090bSJoe Hershberger 	env_flags_vartype_end
372598090bSJoe Hershberger };
382598090bSJoe Hershberger 
392598090bSJoe Hershberger #define ENV_FLAGS_VAR ".flags"
402598090bSJoe Hershberger #define ENV_FLAGS_ATTR_MAX_LEN 2
412598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_LOC 0
422598090bSJoe Hershberger 
432598090bSJoe Hershberger #ifndef CONFIG_ENV_FLAGS_LIST_STATIC
442598090bSJoe Hershberger #define CONFIG_ENV_FLAGS_LIST_STATIC ""
452598090bSJoe Hershberger #endif
462598090bSJoe Hershberger 
472598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
482598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
492598090bSJoe Hershberger 
50*fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
51*fffad71bSJoe Hershberger /*
52*fffad71bSJoe Hershberger  * Print the whole list of available type flags.
53*fffad71bSJoe Hershberger  */
54*fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
55*fffad71bSJoe Hershberger /*
56*fffad71bSJoe Hershberger  * Return the name of the type.
57*fffad71bSJoe Hershberger  */
58*fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
59*fffad71bSJoe Hershberger #endif
60*fffad71bSJoe Hershberger 
612598090bSJoe Hershberger /*
622598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
632598090bSJoe Hershberger  */
642598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
652598090bSJoe Hershberger 
6630fd4fadSJoe Hershberger #ifdef USE_HOSTCC
6730fd4fadSJoe Hershberger /*
6830fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
6930fd4fadSJoe Hershberger  */
7030fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
7130fd4fadSJoe Hershberger /*
7230fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
7330fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
7430fd4fadSJoe Hershberger  */
7530fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
7630fd4fadSJoe Hershberger /*
7730fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
7830fd4fadSJoe Hershberger  */
7930fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
8030fd4fadSJoe Hershberger 
8130fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
8230fd4fadSJoe Hershberger 
832598090bSJoe Hershberger #include <search.h>
842598090bSJoe Hershberger 
852598090bSJoe Hershberger /*
862598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
872598090bSJoe Hershberger  * variable.
882598090bSJoe Hershberger  */
892598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
902598090bSJoe Hershberger 
912598090bSJoe Hershberger /*
922598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
932598090bSJoe Hershberger  */
942598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
952598090bSJoe Hershberger 	int flag);
962598090bSJoe Hershberger 
972598090bSJoe Hershberger /*
982598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
992598090bSJoe Hershberger  * decribe properties of veriables in the table
1002598090bSJoe Hershberger  */
1012598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK	0x00000007
1022598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
1032598090bSJoe Hershberger 
10430fd4fadSJoe Hershberger #endif /* USE_HOSTCC */
10530fd4fadSJoe Hershberger 
1062598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
107