xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 52b1eaf93d6b55e1467f97b8eefdc2f8b6031c43)
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
55c0a93440SJoe Hershberger #define NET_FLAGS \
56c0a93440SJoe Hershberger 	"ipaddr:i," \
57c0a93440SJoe Hershberger 	"gatewayip:i," \
58c0a93440SJoe Hershberger 	"netmask:i," \
59c0a93440SJoe Hershberger 	"serverip:i," \
60*0299cee5SStefan Agner 	"nvlan:d," \
61*0299cee5SStefan Agner 	"vlan:d," \
62c0a93440SJoe Hershberger 	"dnsip:i,"
631d6cd0a3SJoe Hershberger #else
64c0a93440SJoe Hershberger #define ETHADDR_FLAGS
65c0a93440SJoe 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 \
76c0a93440SJoe 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 
1120118e83bSCodrin Ciubotariu #ifdef CONFIG_CMD_NET
1130118e83bSCodrin Ciubotariu /*
1140118e83bSCodrin Ciubotariu  * Check if a string has the format of an Ethernet MAC address
1150118e83bSCodrin Ciubotariu  */
1160118e83bSCodrin Ciubotariu int eth_validate_ethaddr_str(const char *addr);
1170118e83bSCodrin Ciubotariu #endif
1180118e83bSCodrin Ciubotariu 
11930fd4fadSJoe Hershberger #ifdef USE_HOSTCC
12030fd4fadSJoe Hershberger /*
12130fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
12230fd4fadSJoe Hershberger  */
12330fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
12430fd4fadSJoe Hershberger /*
125267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
126267541f7SJoe Hershberger  */
127267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
128267541f7SJoe Hershberger /*
12930fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
13030fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
13130fd4fadSJoe Hershberger  */
13230fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
13330fd4fadSJoe Hershberger /*
134267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
135267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
136267541f7SJoe Hershberger  */
137267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
138267541f7SJoe Hershberger /*
139267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
140267541f7SJoe Hershberger  * the defined flags for that variable, if any.
141267541f7SJoe Hershberger  */
142267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
143267541f7SJoe Hershberger /*
14430fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
14530fd4fadSJoe Hershberger  */
146167f5258SAndreas Fenkart int env_flags_validate_env_set_params(char *name, char *const val[], int count);
14730fd4fadSJoe Hershberger 
14830fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
14930fd4fadSJoe Hershberger 
1502598090bSJoe Hershberger #include <search.h>
1512598090bSJoe Hershberger 
1522598090bSJoe Hershberger /*
1532598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1542598090bSJoe Hershberger  * variable.
1552598090bSJoe Hershberger  */
1562598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1572598090bSJoe Hershberger 
1582598090bSJoe Hershberger /*
1592598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1602598090bSJoe Hershberger  */
1612598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1622598090bSJoe Hershberger 	int flag);
1632598090bSJoe Hershberger 
164267541f7SJoe Hershberger #endif /* USE_HOSTCC */
165267541f7SJoe Hershberger 
1662598090bSJoe Hershberger /*
1672598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1682598090bSJoe Hershberger  * decribe properties of veriables in the table
1692598090bSJoe Hershberger  */
1702598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1712598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
172267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
173267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
174267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
175267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
176267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
17730fd4fadSJoe Hershberger 
1782598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
179