xref: /openbmc/u-boot/include/env_flags.h (revision 68489ed037530ec29fc0bc452ad6e4b0c5db02ec)
1  /* SPDX-License-Identifier: GPL-2.0+ */
2  /*
3   * (C) Copyright 2012
4   * Joe Hershberger, National Instruments, joe.hershberger@ni.com
5   */
6  
7  #ifndef __ENV_FLAGS_H__
8  #define __ENV_FLAGS_H__
9  
10  enum env_flags_vartype {
11  	env_flags_vartype_string,
12  	env_flags_vartype_decimal,
13  	env_flags_vartype_hex,
14  	env_flags_vartype_bool,
15  #ifdef CONFIG_CMD_NET
16  	env_flags_vartype_ipaddr,
17  	env_flags_vartype_macaddr,
18  #endif
19  	env_flags_vartype_end
20  };
21  
22  enum env_flags_varaccess {
23  	env_flags_varaccess_any,
24  	env_flags_varaccess_readonly,
25  	env_flags_varaccess_writeonce,
26  	env_flags_varaccess_changedefault,
27  	env_flags_varaccess_end
28  };
29  
30  #define ENV_FLAGS_VAR ".flags"
31  #define ENV_FLAGS_ATTR_MAX_LEN 2
32  #define ENV_FLAGS_VARTYPE_LOC 0
33  #define ENV_FLAGS_VARACCESS_LOC 1
34  
35  #ifndef CONFIG_ENV_FLAGS_LIST_STATIC
36  #define CONFIG_ENV_FLAGS_LIST_STATIC ""
37  #endif
38  
39  #ifdef CONFIG_CMD_NET
40  #ifdef CONFIG_REGEX
41  #define ETHADDR_WILDCARD "\\d*"
42  #else
43  #define ETHADDR_WILDCARD
44  #endif
45  #ifdef CONFIG_ENV_OVERWRITE
46  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma,"
47  #else
48  #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
49  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc,"
50  #else
51  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo,"
52  #endif
53  #endif
54  #define NET_FLAGS \
55  	"ipaddr:i," \
56  	"gatewayip:i," \
57  	"netmask:i," \
58  	"serverip:i," \
59  	"nvlan:d," \
60  	"vlan:d," \
61  	"dnsip:i,"
62  #else
63  #define ETHADDR_FLAGS
64  #define NET_FLAGS
65  #endif
66  
67  #ifndef CONFIG_ENV_OVERWRITE
68  #define SERIAL_FLAGS "serial#:so,"
69  #else
70  #define SERIAL_FLAGS ""
71  #endif
72  
73  #define ENV_FLAGS_LIST_STATIC \
74  	ETHADDR_FLAGS \
75  	NET_FLAGS \
76  	SERIAL_FLAGS \
77  	CONFIG_ENV_FLAGS_LIST_STATIC
78  
79  #ifdef CONFIG_CMD_ENV_FLAGS
80  /*
81   * Print the whole list of available type flags.
82   */
83  void env_flags_print_vartypes(void);
84  /*
85   * Print the whole list of available access flags.
86   */
87  void env_flags_print_varaccess(void);
88  /*
89   * Return the name of the type.
90   */
91  const char *env_flags_get_vartype_name(enum env_flags_vartype type);
92  /*
93   * Return the name of the access.
94   */
95  const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
96  #endif
97  
98  /*
99   * Parse the flags string from a .flags attribute list into the vartype enum.
100   */
101  enum env_flags_vartype env_flags_parse_vartype(const char *flags);
102  /*
103   * Parse the flags string from a .flags attribute list into the varaccess enum.
104   */
105  enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
106  /*
107   * Parse the binary flags from a hash table entry into the varaccess enum.
108   */
109  enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
110  
111  #ifdef CONFIG_CMD_NET
112  /*
113   * Check if a string has the format of an Ethernet MAC address
114   */
115  int eth_validate_ethaddr_str(const char *addr);
116  #endif
117  
118  #ifdef USE_HOSTCC
119  /*
120   * Look up the type of a variable directly from the .flags var.
121   */
122  enum env_flags_vartype env_flags_get_type(const char *name);
123  /*
124   * Look up the access of a variable directly from the .flags var.
125   */
126  enum env_flags_varaccess env_flags_get_access(const char *name);
127  /*
128   * Validate the newval for its type to conform with the requirements defined by
129   * its flags (directly looked at the .flags var).
130   */
131  int env_flags_validate_type(const char *name, const char *newval);
132  /*
133   * Validate the newval for its access to conform with the requirements defined
134   * by its flags (directly looked at the .flags var).
135   */
136  int env_flags_validate_access(const char *name, int check_mask);
137  /*
138   * Validate that the proposed access to variable "name" is valid according to
139   * the defined flags for that variable, if any.
140   */
141  int env_flags_validate_varaccess(const char *name, int check_mask);
142  /*
143   * Validate the parameters passed to "env set" for type compliance
144   */
145  int env_flags_validate_env_set_params(char *name, char *const val[], int count);
146  
147  #else /* !USE_HOSTCC */
148  
149  #include <search.h>
150  
151  /*
152   * When adding a variable to the environment, initialize the flags for that
153   * variable.
154   */
155  void env_flags_init(ENTRY *var_entry);
156  
157  /*
158   * Validate the newval for to conform with the requirements defined by its flags
159   */
160  int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
161  	int flag);
162  
163  #endif /* USE_HOSTCC */
164  
165  /*
166   * These are the binary flags used in the environment entry->flags variable to
167   * decribe properties of veriables in the table
168   */
169  #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
170  /* The actual variable type values use the enum value (within the mask) */
171  #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
172  #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
173  #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
174  #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
175  #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
176  
177  #endif /* __ENV_FLAGS_H__ */
178