xref: /rk3399_rockchip-uboot/include/env_flags.h (revision 1a4596601fd395f3afb8f82f3f840c5e00bdd57a)
12598090bSJoe Hershberger /*
22598090bSJoe Hershberger  * (C) Copyright 2012
32598090bSJoe Hershberger  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
42598090bSJoe Hershberger  *
5*1a459660SWolfgang 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
411d6cd0a3SJoe Hershberger #ifdef CONFIG_ENV_OVERWRITE
421d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:ma,"
431d6cd0a3SJoe Hershberger #else
441d6cd0a3SJoe Hershberger #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
451d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:mc,"
461d6cd0a3SJoe Hershberger #else
471d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS "ethaddr:mo,"
481d6cd0a3SJoe Hershberger #endif
491d6cd0a3SJoe Hershberger #endif
501d6cd0a3SJoe Hershberger #else
511d6cd0a3SJoe Hershberger #define ETHADDR_FLAGS ""
521d6cd0a3SJoe Hershberger #endif
531d6cd0a3SJoe Hershberger 
541d6cd0a3SJoe Hershberger #ifndef CONFIG_ENV_OVERWRITE
551d6cd0a3SJoe Hershberger #define SERIAL_FLAGS "serial#:so,"
561d6cd0a3SJoe Hershberger #else
571d6cd0a3SJoe Hershberger #define SERIAL_FLAGS ""
581d6cd0a3SJoe Hershberger #endif
591d6cd0a3SJoe Hershberger 
602598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \
611d6cd0a3SJoe Hershberger 	ETHADDR_FLAGS \
621d6cd0a3SJoe Hershberger 	SERIAL_FLAGS \
632598090bSJoe Hershberger 	CONFIG_ENV_FLAGS_LIST_STATIC
642598090bSJoe Hershberger 
65fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS
66fffad71bSJoe Hershberger /*
67fffad71bSJoe Hershberger  * Print the whole list of available type flags.
68fffad71bSJoe Hershberger  */
69fffad71bSJoe Hershberger void env_flags_print_vartypes(void);
70fffad71bSJoe Hershberger /*
71267541f7SJoe Hershberger  * Print the whole list of available access flags.
72267541f7SJoe Hershberger  */
73267541f7SJoe Hershberger void env_flags_print_varaccess(void);
74267541f7SJoe Hershberger /*
75fffad71bSJoe Hershberger  * Return the name of the type.
76fffad71bSJoe Hershberger  */
77fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type);
78267541f7SJoe Hershberger /*
79267541f7SJoe Hershberger  * Return the name of the access.
80267541f7SJoe Hershberger  */
81267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
82fffad71bSJoe Hershberger #endif
83fffad71bSJoe Hershberger 
842598090bSJoe Hershberger /*
852598090bSJoe Hershberger  * Parse the flags string from a .flags attribute list into the vartype enum.
862598090bSJoe Hershberger  */
872598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags);
88267541f7SJoe Hershberger /*
89267541f7SJoe Hershberger  * Parse the flags string from a .flags attribute list into the varaccess enum.
90267541f7SJoe Hershberger  */
91267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
92267541f7SJoe Hershberger /*
93267541f7SJoe Hershberger  * Parse the binary flags from a hash table entry into the varaccess enum.
94267541f7SJoe Hershberger  */
95267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
962598090bSJoe Hershberger 
9730fd4fadSJoe Hershberger #ifdef USE_HOSTCC
9830fd4fadSJoe Hershberger /*
9930fd4fadSJoe Hershberger  * Look up the type of a variable directly from the .flags var.
10030fd4fadSJoe Hershberger  */
10130fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name);
10230fd4fadSJoe Hershberger /*
103267541f7SJoe Hershberger  * Look up the access of a variable directly from the .flags var.
104267541f7SJoe Hershberger  */
105267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name);
106267541f7SJoe Hershberger /*
10730fd4fadSJoe Hershberger  * Validate the newval for its type to conform with the requirements defined by
10830fd4fadSJoe Hershberger  * its flags (directly looked at the .flags var).
10930fd4fadSJoe Hershberger  */
11030fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval);
11130fd4fadSJoe Hershberger /*
112267541f7SJoe Hershberger  * Validate the newval for its access to conform with the requirements defined
113267541f7SJoe Hershberger  * by its flags (directly looked at the .flags var).
114267541f7SJoe Hershberger  */
115267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask);
116267541f7SJoe Hershberger /*
117267541f7SJoe Hershberger  * Validate that the proposed access to variable "name" is valid according to
118267541f7SJoe Hershberger  * the defined flags for that variable, if any.
119267541f7SJoe Hershberger  */
120267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask);
121267541f7SJoe Hershberger /*
12230fd4fadSJoe Hershberger  * Validate the parameters passed to "env set" for type compliance
12330fd4fadSJoe Hershberger  */
12430fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]);
12530fd4fadSJoe Hershberger 
12630fd4fadSJoe Hershberger #else /* !USE_HOSTCC */
12730fd4fadSJoe Hershberger 
1282598090bSJoe Hershberger #include <search.h>
1292598090bSJoe Hershberger 
1302598090bSJoe Hershberger /*
1312598090bSJoe Hershberger  * When adding a variable to the environment, initialize the flags for that
1322598090bSJoe Hershberger  * variable.
1332598090bSJoe Hershberger  */
1342598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry);
1352598090bSJoe Hershberger 
1362598090bSJoe Hershberger /*
1372598090bSJoe Hershberger  * Validate the newval for to conform with the requirements defined by its flags
1382598090bSJoe Hershberger  */
1392598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
1402598090bSJoe Hershberger 	int flag);
1412598090bSJoe Hershberger 
142267541f7SJoe Hershberger #endif /* USE_HOSTCC */
143267541f7SJoe Hershberger 
1442598090bSJoe Hershberger /*
1452598090bSJoe Hershberger  * These are the binary flags used in the environment entry->flags variable to
1462598090bSJoe Hershberger  * decribe properties of veriables in the table
1472598090bSJoe Hershberger  */
1482598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
1492598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */
150267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
151267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
152267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
153267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
154267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
15530fd4fadSJoe Hershberger 
1562598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */
157