xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 1d6cd0a3f69b549a3fc7e735a045279e7a14947e)
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 
39267541f7SJoe Hershberger enum env_flags_varaccess {
40267541f7SJoe Hershberger 	env_flags_varaccess_any,
41267541f7SJoe Hershberger 	env_flags_varaccess_readonly,
42267541f7SJoe Hershberger 	env_flags_varaccess_writeonce,
43267541f7SJoe Hershberger 	env_flags_varaccess_changedefault,
44267541f7SJoe Hershberger 	env_flags_varaccess_end
45267541f7SJoe Hershberger };
46267541f7SJoe 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
50267541f7SJoe 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 
56*1d6cd0a3SJoe Hershberger #ifdef CONFIG_CMD_NET
57*1d6cd0a3SJoe Hershberger #ifdef CONFIG_ENV_OVERWRITE
58*1d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:ma,"
59*1d6cd0a3SJoe Hershberger #else
60*1d6cd0a3SJoe Hershberger #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
61*1d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:mc,"
62*1d6cd0a3SJoe Hershberger #else
63*1d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:mo,"
64*1d6cd0a3SJoe Hershberger #endif
65*1d6cd0a3SJoe Hershberger #endif
66*1d6cd0a3SJoe Hershberger #else
67*1d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS ""
68*1d6cd0a3SJoe Hershberger #endif
69*1d6cd0a3SJoe Hershberger 
70*1d6cd0a3SJoe Hershberger #ifndef CONFIG_ENV_OVERWRITE
71*1d6cd0a3SJoe Hershberger #define SERIAL_FLAGS "serial#:so,"
72*1d6cd0a3SJoe Hershberger #else
73*1d6cd0a3SJoe Hershberger #define SERIAL_FLAGS ""
74*1d6cd0a3SJoe Hershberger #endif
75*1d6cd0a3SJoe Hershberger 
762598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
77*1d6cd0a3SJoe Hershberger 	ETHADDR_FLAGS \
78*1d6cd0a3SJoe Hershberger 	SERIAL_FLAGS \
792598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
802598090bSJoe Hershberger 
81fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
82fffad71bSJoe Hershberger /*
83fffad71bSJoe Hershberger  * Print the whole list of available type flags.
84fffad71bSJoe Hershberger  */
85fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
86fffad71bSJoe Hershberger /*
87267541f7SJoe Hershberger  * Print the whole list of available access flags.
88267541f7SJoe Hershberger  */
89267541f7SJoe Hershberger void env_flags_print_varaccess(void);
90267541f7SJoe Hershberger /*
91fffad71bSJoe Hershberger  * Return the name of the type.
92fffad71bSJoe Hershberger  */
93fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
94267541f7SJoe Hershberger /*
95267541f7SJoe Hershberger  * Return the name of the access.
96267541f7SJoe Hershberger  */
97267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
98fffad71bSJoe Hershberger #endif
99fffad71bSJoe Hershberger 
1002598090bSJoe Hershberger /*
1012598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
1022598090bSJoe Hershberger  */
1032598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
104267541f7SJoe Hershberger /*
105267541f7SJoe Hershberger  * Parse the flags string from a .flags attribute list into the varaccess enum.
106267541f7SJoe Hershberger  */
107267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
108267541f7SJoe Hershberger /*
109267541f7SJoe Hershberger  * Parse the binary flags from a hash table entry into the varaccess enum.
110267541f7SJoe Hershberger  */
111267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
1122598090bSJoe Hershberger 
11330fd4fadSJoe Hershberger #ifdef USE_HOSTCC
11430fd4fadSJoe Hershberger /*
11530fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
11630fd4fadSJoe Hershberger  */
11730fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
11830fd4fadSJoe Hershberger /*
119267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
120267541f7SJoe Hershberger  */
121267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
122267541f7SJoe Hershberger /*
12330fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
12430fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
12530fd4fadSJoe Hershberger  */
12630fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
12730fd4fadSJoe Hershberger /*
128267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
129267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
130267541f7SJoe Hershberger  */
131267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
132267541f7SJoe Hershberger /*
133267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
134267541f7SJoe Hershberger  * the defined flags for that variable, if any.
135267541f7SJoe Hershberger  */
136267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
137267541f7SJoe Hershberger /*
13830fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
13930fd4fadSJoe Hershberger  */
14030fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
14130fd4fadSJoe Hershberger 
14230fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
14330fd4fadSJoe Hershberger 
1442598090bSJoe Hershberger #include <search.h>
1452598090bSJoe Hershberger 
1462598090bSJoe Hershberger /*
1472598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1482598090bSJoe Hershberger  * variable.
1492598090bSJoe Hershberger  */
1502598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1512598090bSJoe Hershberger 
1522598090bSJoe Hershberger /*
1532598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1542598090bSJoe Hershberger  */
1552598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1562598090bSJoe Hershberger 	int flag);
1572598090bSJoe Hershberger 
158267541f7SJoe Hershberger #endif /* USE_HOSTCC */
159267541f7SJoe Hershberger 
1602598090bSJoe Hershberger /*
1612598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1622598090bSJoe Hershberger  * decribe properties of veriables in the table
1632598090bSJoe Hershberger  */
1642598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1652598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
166267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
167267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
168267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
169267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
170267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
17130fd4fadSJoe Hershberger 
1722598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
173