xref: /rk3399_rockchip-uboot/include/env_flags.h (revision c0a93440a7cb50843510549d9943a4fba211f0f2)
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
4173c2bbeeSJoe Hershberger #ifdef CONFIG_REGEX
4273c2bbeeSJoe Hershberger #define ETHADDR_WILDCARD "\\d?"
4373c2bbeeSJoe Hershberger #else
4473c2bbeeSJoe Hershberger #define ETHADDR_WILDCARD
4573c2bbeeSJoe Hershberger #endif
461d6cd0a3SJoe Hershberger #ifdef CONFIG_ENV_OVERWRITE
4773c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma,"
481d6cd0a3SJoe Hershberger #else
491d6cd0a3SJoe Hershberger #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
5073c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc,"
511d6cd0a3SJoe Hershberger #else
5273c2bbeeSJoe Hershberger #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo,"
531d6cd0a3SJoe Hershberger #endif
541d6cd0a3SJoe Hershberger #endif
55*c0a93440SJoe Hershberger #define NET_FLAGS \
56*c0a93440SJoe Hershberger 	"ipaddr:i," \
57*c0a93440SJoe Hershberger 	"gatewayip:i," \
58*c0a93440SJoe Hershberger 	"netmask:i," \
59*c0a93440SJoe Hershberger 	"serverip:i," \
60*c0a93440SJoe Hershberger 	"nvlan:i," \
61*c0a93440SJoe Hershberger 	"vlan:i," \
62*c0a93440SJoe Hershberger 	"dnsip:i,"
631d6cd0a3SJoe Hershberger #else
64*c0a93440SJoe Hershberger #define ETHADDR_FLAGS
65*c0a93440SJoe Hershberger #define NET_FLAGS
661d6cd0a3SJoe Hershberger #endif
671d6cd0a3SJoe Hershberger 
681d6cd0a3SJoe Hershberger #ifndef CONFIG_ENV_OVERWRITE
691d6cd0a3SJoe Hershberger #define SERIAL_FLAGS "serial#:so,"
701d6cd0a3SJoe Hershberger #else
711d6cd0a3SJoe Hershberger #define SERIAL_FLAGS ""
721d6cd0a3SJoe Hershberger #endif
731d6cd0a3SJoe Hershberger 
742598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
751d6cd0a3SJoe Hershberger 	ETHADDR_FLAGS \
76*c0a93440SJoe Hershberger 	NET_FLAGS \
771d6cd0a3SJoe Hershberger 	SERIAL_FLAGS \
782598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
792598090bSJoe Hershberger 
80fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
81fffad71bSJoe Hershberger /*
82fffad71bSJoe Hershberger  * Print the whole list of available type flags.
83fffad71bSJoe Hershberger  */
84fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
85fffad71bSJoe Hershberger /*
86267541f7SJoe Hershberger  * Print the whole list of available access flags.
87267541f7SJoe Hershberger  */
88267541f7SJoe Hershberger void env_flags_print_varaccess(void);
89267541f7SJoe Hershberger /*
90fffad71bSJoe Hershberger  * Return the name of the type.
91fffad71bSJoe Hershberger  */
92fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
93267541f7SJoe Hershberger /*
94267541f7SJoe Hershberger  * Return the name of the access.
95267541f7SJoe Hershberger  */
96267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
97fffad71bSJoe Hershberger #endif
98fffad71bSJoe Hershberger 
992598090bSJoe Hershberger /*
1002598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
1012598090bSJoe Hershberger  */
1022598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
103267541f7SJoe Hershberger /*
104267541f7SJoe Hershberger  * Parse the flags string from a .flags attribute list into the varaccess enum.
105267541f7SJoe Hershberger  */
106267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
107267541f7SJoe Hershberger /*
108267541f7SJoe Hershberger  * Parse the binary flags from a hash table entry into the varaccess enum.
109267541f7SJoe Hershberger  */
110267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
1112598090bSJoe Hershberger 
11230fd4fadSJoe Hershberger #ifdef USE_HOSTCC
11330fd4fadSJoe Hershberger /*
11430fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
11530fd4fadSJoe Hershberger  */
11630fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
11730fd4fadSJoe Hershberger /*
118267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
119267541f7SJoe Hershberger  */
120267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
121267541f7SJoe Hershberger /*
12230fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
12330fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
12430fd4fadSJoe Hershberger  */
12530fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
12630fd4fadSJoe Hershberger /*
127267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
128267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
129267541f7SJoe Hershberger  */
130267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
131267541f7SJoe Hershberger /*
132267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
133267541f7SJoe Hershberger  * the defined flags for that variable, if any.
134267541f7SJoe Hershberger  */
135267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
136267541f7SJoe Hershberger /*
13730fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
13830fd4fadSJoe Hershberger  */
13930fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
14030fd4fadSJoe Hershberger 
14130fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
14230fd4fadSJoe Hershberger 
1432598090bSJoe Hershberger #include <search.h>
1442598090bSJoe Hershberger 
1452598090bSJoe Hershberger /*
1462598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1472598090bSJoe Hershberger  * variable.
1482598090bSJoe Hershberger  */
1492598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1502598090bSJoe Hershberger 
1512598090bSJoe Hershberger /*
1522598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1532598090bSJoe Hershberger  */
1542598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1552598090bSJoe Hershberger 	int flag);
1562598090bSJoe Hershberger 
157267541f7SJoe Hershberger #endif /* USE_HOSTCC */
158267541f7SJoe Hershberger 
1592598090bSJoe Hershberger /*
1602598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1612598090bSJoe Hershberger  * decribe properties of veriables in the table
1622598090bSJoe Hershberger  */
1632598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1642598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
165267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
166267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
167267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
168267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
169267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
17030fd4fadSJoe Hershberger 
1712598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
172