xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 267541f776f1e2bec21681c6e39a4c93af9621cf)
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 
39*267541f7SJoe Hershberger enum env_flags_varaccess {
40*267541f7SJoe Hershberger 	env_flags_varaccess_any,
41*267541f7SJoe Hershberger 	env_flags_varaccess_readonly,
42*267541f7SJoe Hershberger 	env_flags_varaccess_writeonce,
43*267541f7SJoe Hershberger 	env_flags_varaccess_changedefault,
44*267541f7SJoe Hershberger 	env_flags_varaccess_end
45*267541f7SJoe Hershberger };
46*267541f7SJoe Hershberger 
472598090bSJoe Hershberger #define ENV_FLAGS_VAR ".flags"
482598090bSJoe Hershberger #define ENV_FLAGS_ATTR_MAX_LEN 2
492598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_LOC 0
50*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_LOC 1
512598090bSJoe Hershberger 
522598090bSJoe Hershberger #ifndef CONFIG_ENV_FLAGS_LIST_STATIC
532598090bSJoe Hershberger #define CONFIG_ENV_FLAGS_LIST_STATIC ""
542598090bSJoe Hershberger #endif
552598090bSJoe Hershberger 
562598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
572598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
582598090bSJoe Hershberger 
59fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
60fffad71bSJoe Hershberger /*
61fffad71bSJoe Hershberger  * Print the whole list of available type flags.
62fffad71bSJoe Hershberger  */
63fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
64fffad71bSJoe Hershberger /*
65*267541f7SJoe Hershberger  * Print the whole list of available access flags.
66*267541f7SJoe Hershberger  */
67*267541f7SJoe Hershberger void env_flags_print_varaccess(void);
68*267541f7SJoe Hershberger /*
69fffad71bSJoe Hershberger  * Return the name of the type.
70fffad71bSJoe Hershberger  */
71fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
72*267541f7SJoe Hershberger /*
73*267541f7SJoe Hershberger  * Return the name of the access.
74*267541f7SJoe Hershberger  */
75*267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
76fffad71bSJoe Hershberger #endif
77fffad71bSJoe Hershberger 
782598090bSJoe Hershberger /*
792598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
802598090bSJoe Hershberger  */
812598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
82*267541f7SJoe Hershberger /*
83*267541f7SJoe Hershberger  * Parse the flags string from a .flags attribute list into the varaccess enum.
84*267541f7SJoe Hershberger  */
85*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
86*267541f7SJoe Hershberger /*
87*267541f7SJoe Hershberger  * Parse the binary flags from a hash table entry into the varaccess enum.
88*267541f7SJoe Hershberger  */
89*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
902598090bSJoe Hershberger 
9130fd4fadSJoe Hershberger #ifdef USE_HOSTCC
9230fd4fadSJoe Hershberger /*
9330fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
9430fd4fadSJoe Hershberger  */
9530fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
9630fd4fadSJoe Hershberger /*
97*267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
98*267541f7SJoe Hershberger  */
99*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
100*267541f7SJoe Hershberger /*
10130fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
10230fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
10330fd4fadSJoe Hershberger  */
10430fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
10530fd4fadSJoe Hershberger /*
106*267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
107*267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
108*267541f7SJoe Hershberger  */
109*267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
110*267541f7SJoe Hershberger /*
111*267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
112*267541f7SJoe Hershberger  * the defined flags for that variable, if any.
113*267541f7SJoe Hershberger  */
114*267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
115*267541f7SJoe Hershberger /*
11630fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
11730fd4fadSJoe Hershberger  */
11830fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
11930fd4fadSJoe Hershberger 
12030fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
12130fd4fadSJoe Hershberger 
1222598090bSJoe Hershberger #include <search.h>
1232598090bSJoe Hershberger 
1242598090bSJoe Hershberger /*
1252598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1262598090bSJoe Hershberger  * variable.
1272598090bSJoe Hershberger  */
1282598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1292598090bSJoe Hershberger 
1302598090bSJoe Hershberger /*
1312598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1322598090bSJoe Hershberger  */
1332598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1342598090bSJoe Hershberger 	int flag);
1352598090bSJoe Hershberger 
136*267541f7SJoe Hershberger #endif /* USE_HOSTCC */
137*267541f7SJoe Hershberger 
1382598090bSJoe Hershberger /*
1392598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1402598090bSJoe Hershberger  * decribe properties of veriables in the table
1412598090bSJoe Hershberger  */
1422598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1432598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
144*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
145*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
146*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
147*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
148*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
14930fd4fadSJoe Hershberger 
1502598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
151