xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 73c2bbeea3d09bb8c81adc8769fc53493b6c0351)
12598090bSJoe Hershberger /*
22598090bSJoe Hershberger  * (C) Copyright 2012
32598090bSJoe Hershberger  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
42598090bSJoe Hershberger  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
62598090bSJoe Hershberger  */
72598090bSJoe Hershberger 
82598090bSJoe Hershberger #ifndef __ENV_FLAGS_H__
92598090bSJoe Hershberger #define __ENV_FLAGS_H__
102598090bSJoe Hershberger 
112598090bSJoe Hershberger enum env_flags_vartype {
122598090bSJoe Hershberger 	env_flags_vartype_string,
132598090bSJoe Hershberger 	env_flags_vartype_decimal,
142598090bSJoe Hershberger 	env_flags_vartype_hex,
152598090bSJoe Hershberger 	env_flags_vartype_bool,
162598090bSJoe Hershberger #ifdef CONFIG_CMD_NET
172598090bSJoe Hershberger 	env_flags_vartype_ipaddr,
182598090bSJoe Hershberger 	env_flags_vartype_macaddr,
192598090bSJoe Hershberger #endif
202598090bSJoe Hershberger 	env_flags_vartype_end
212598090bSJoe Hershberger };
222598090bSJoe Hershberger 
23267541f7SJoe Hershberger enum env_flags_varaccess {
24267541f7SJoe Hershberger 	env_flags_varaccess_any,
25267541f7SJoe Hershberger 	env_flags_varaccess_readonly,
26267541f7SJoe Hershberger 	env_flags_varaccess_writeonce,
27267541f7SJoe Hershberger 	env_flags_varaccess_changedefault,
28267541f7SJoe Hershberger 	env_flags_varaccess_end
29267541f7SJoe Hershberger };
30267541f7SJoe Hershberger 
312598090bSJoe Hershberger #define ENV_FLAGS_VAR ".flags"
322598090bSJoe Hershberger #define ENV_FLAGS_ATTR_MAX_LEN 2
332598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_LOC 0
34267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_LOC 1
352598090bSJoe Hershberger 
362598090bSJoe Hershberger #ifndef CONFIG_ENV_FLAGS_LIST_STATIC
372598090bSJoe Hershberger #define CONFIG_ENV_FLAGS_LIST_STATIC ""
382598090bSJoe Hershberger #endif
392598090bSJoe Hershberger 
401d6cd0a3SJoe Hershberger #ifdef CONFIG_CMD_NET
41*73c2bbeeSJoe Hershberger #ifdef CONFIG_REGEX
42*73c2bbeeSJoe Hershberger #define ETHADDR_WILDCARD "\\d?"
43*73c2bbeeSJoe Hershberger #else
44*73c2bbeeSJoe Hershberger #define ETHADDR_WILDCARD
45*73c2bbeeSJoe Hershberger #endif
461d6cd0a3SJoe Hershberger #ifdef CONFIG_ENV_OVERWRITE
47*73c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma,"
481d6cd0a3SJoe Hershberger #else
491d6cd0a3SJoe Hershberger #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
50*73c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc,"
511d6cd0a3SJoe Hershberger #else
52*73c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo,"
531d6cd0a3SJoe Hershberger #endif
541d6cd0a3SJoe Hershberger #endif
551d6cd0a3SJoe Hershberger #else
561d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS ""
571d6cd0a3SJoe Hershberger #endif
581d6cd0a3SJoe Hershberger 
591d6cd0a3SJoe Hershberger #ifndef CONFIG_ENV_OVERWRITE
601d6cd0a3SJoe Hershberger #define SERIAL_FLAGS "serial#:so,"
611d6cd0a3SJoe Hershberger #else
621d6cd0a3SJoe Hershberger #define SERIAL_FLAGS ""
631d6cd0a3SJoe Hershberger #endif
641d6cd0a3SJoe Hershberger 
652598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
661d6cd0a3SJoe Hershberger 	ETHADDR_FLAGS \
671d6cd0a3SJoe Hershberger 	SERIAL_FLAGS \
682598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
692598090bSJoe Hershberger 
70fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
71fffad71bSJoe Hershberger /*
72fffad71bSJoe Hershberger  * Print the whole list of available type flags.
73fffad71bSJoe Hershberger  */
74fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
75fffad71bSJoe Hershberger /*
76267541f7SJoe Hershberger  * Print the whole list of available access flags.
77267541f7SJoe Hershberger  */
78267541f7SJoe Hershberger void env_flags_print_varaccess(void);
79267541f7SJoe Hershberger /*
80fffad71bSJoe Hershberger  * Return the name of the type.
81fffad71bSJoe Hershberger  */
82fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
83267541f7SJoe Hershberger /*
84267541f7SJoe Hershberger  * Return the name of the access.
85267541f7SJoe Hershberger  */
86267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
87fffad71bSJoe Hershberger #endif
88fffad71bSJoe Hershberger 
892598090bSJoe Hershberger /*
902598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
912598090bSJoe Hershberger  */
922598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
93267541f7SJoe Hershberger /*
94267541f7SJoe Hershberger  * Parse the flags string from a .flags attribute list into the varaccess enum.
95267541f7SJoe Hershberger  */
96267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
97267541f7SJoe Hershberger /*
98267541f7SJoe Hershberger  * Parse the binary flags from a hash table entry into the varaccess enum.
99267541f7SJoe Hershberger  */
100267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
1012598090bSJoe Hershberger 
10230fd4fadSJoe Hershberger #ifdef USE_HOSTCC
10330fd4fadSJoe Hershberger /*
10430fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
10530fd4fadSJoe Hershberger  */
10630fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
10730fd4fadSJoe Hershberger /*
108267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
109267541f7SJoe Hershberger  */
110267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
111267541f7SJoe Hershberger /*
11230fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
11330fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
11430fd4fadSJoe Hershberger  */
11530fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
11630fd4fadSJoe Hershberger /*
117267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
118267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
119267541f7SJoe Hershberger  */
120267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
121267541f7SJoe Hershberger /*
122267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
123267541f7SJoe Hershberger  * the defined flags for that variable, if any.
124267541f7SJoe Hershberger  */
125267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
126267541f7SJoe Hershberger /*
12730fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
12830fd4fadSJoe Hershberger  */
12930fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
13030fd4fadSJoe Hershberger 
13130fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
13230fd4fadSJoe Hershberger 
1332598090bSJoe Hershberger #include <search.h>
1342598090bSJoe Hershberger 
1352598090bSJoe Hershberger /*
1362598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1372598090bSJoe Hershberger  * variable.
1382598090bSJoe Hershberger  */
1392598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1402598090bSJoe Hershberger 
1412598090bSJoe Hershberger /*
1422598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1432598090bSJoe Hershberger  */
1442598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1452598090bSJoe Hershberger 	int flag);
1462598090bSJoe Hershberger 
147267541f7SJoe Hershberger #endif /* USE_HOSTCC */
148267541f7SJoe Hershberger 
1492598090bSJoe Hershberger /*
1502598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1512598090bSJoe Hershberger  * decribe properties of veriables in the table
1522598090bSJoe Hershberger  */
1532598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1542598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
155267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
156267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
157267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
158267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
159267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
16030fd4fadSJoe Hershberger 
1612598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
162