xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 30fd4fadb319d7c6d43d949e2d30ffaea46a60cf)
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 
502598090bSJoe Hershberger /*
512598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
522598090bSJoe Hershberger  */
532598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
542598090bSJoe Hershberger 
55*30fd4fadSJoe Hershberger #ifdef USE_HOSTCC
56*30fd4fadSJoe Hershberger /*
57*30fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
58*30fd4fadSJoe Hershberger  */
59*30fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
60*30fd4fadSJoe Hershberger /*
61*30fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
62*30fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
63*30fd4fadSJoe Hershberger  */
64*30fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
65*30fd4fadSJoe Hershberger /*
66*30fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
67*30fd4fadSJoe Hershberger  */
68*30fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
69*30fd4fadSJoe Hershberger 
70*30fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
71*30fd4fadSJoe Hershberger 
722598090bSJoe Hershberger #include <search.h>
732598090bSJoe Hershberger 
742598090bSJoe Hershberger /*
752598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
762598090bSJoe Hershberger  * variable.
772598090bSJoe Hershberger  */
782598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
792598090bSJoe Hershberger 
802598090bSJoe Hershberger /*
812598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
822598090bSJoe Hershberger  */
832598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
842598090bSJoe Hershberger 	int flag);
852598090bSJoe Hershberger 
862598090bSJoe Hershberger /*
872598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
882598090bSJoe Hershberger  * decribe properties of veriables in the table
892598090bSJoe Hershberger  */
902598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK	0x00000007
912598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
922598090bSJoe Hershberger 
93*30fd4fadSJoe Hershberger #endif /* USE_HOSTCC */
94*30fd4fadSJoe Hershberger 
952598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
96