xref: /rk3399_rockchip-uboot/include/env_callback.h (revision 170ab11075d3be56e89d6444abf1148329130f4b)
1*170ab110SJoe Hershberger /*
2*170ab110SJoe Hershberger  * (C) Copyright 2012
3*170ab110SJoe Hershberger  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
4*170ab110SJoe Hershberger  *
5*170ab110SJoe Hershberger  * See file CREDITS for list of people who contributed to this
6*170ab110SJoe Hershberger  * project.
7*170ab110SJoe Hershberger  *
8*170ab110SJoe Hershberger  * This program is free software; you can redistribute it and/or
9*170ab110SJoe Hershberger  * modify it under the terms of the GNU General Public License as
10*170ab110SJoe Hershberger  * published by the Free Software Foundation; either version 2 of
11*170ab110SJoe Hershberger  * the License, or (at your option) any later version.
12*170ab110SJoe Hershberger  *
13*170ab110SJoe Hershberger  * This program is distributed in the hope that it will be useful,
14*170ab110SJoe Hershberger  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*170ab110SJoe Hershberger  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*170ab110SJoe Hershberger  * GNU General Public License for more details.
17*170ab110SJoe Hershberger  *
18*170ab110SJoe Hershberger  * You should have received a copy of the GNU General Public License
19*170ab110SJoe Hershberger  * along with this program; if not, write to the Free Software
20*170ab110SJoe Hershberger  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21*170ab110SJoe Hershberger  * MA 02111-1307 USA
22*170ab110SJoe Hershberger  */
23*170ab110SJoe Hershberger 
24*170ab110SJoe Hershberger #ifndef __ENV_CALLBACK_H__
25*170ab110SJoe Hershberger #define __ENV_CALLBACK_H__
26*170ab110SJoe Hershberger 
27*170ab110SJoe Hershberger #include <linker_lists.h>
28*170ab110SJoe Hershberger #include <search.h>
29*170ab110SJoe Hershberger 
30*170ab110SJoe Hershberger #define ENV_CALLBACK_VAR ".callbacks"
31*170ab110SJoe Hershberger 
32*170ab110SJoe Hershberger /* Board configs can define additional static callback bindings */
33*170ab110SJoe Hershberger #ifndef CONFIG_ENV_CALLBACK_LIST_STATIC
34*170ab110SJoe Hershberger #define CONFIG_ENV_CALLBACK_LIST_STATIC
35*170ab110SJoe Hershberger #endif
36*170ab110SJoe Hershberger 
37*170ab110SJoe Hershberger /*
38*170ab110SJoe Hershberger  * This list of callback bindings is static, but may be overridden by defining
39*170ab110SJoe Hershberger  * a new association in the ".callbacks" environment variable.
40*170ab110SJoe Hershberger  */
41*170ab110SJoe Hershberger #define ENV_CALLBACK_LIST_STATIC ENV_CALLBACK_VAR ":callbacks," \
42*170ab110SJoe Hershberger 	CONFIG_ENV_CALLBACK_LIST_STATIC
43*170ab110SJoe Hershberger 
44*170ab110SJoe Hershberger struct env_clbk_tbl {
45*170ab110SJoe Hershberger 	const char *name;		/* Callback name */
46*170ab110SJoe Hershberger 	int (*callback)(const char *name, const char *value, enum env_op op,
47*170ab110SJoe Hershberger 		int flags);
48*170ab110SJoe Hershberger };
49*170ab110SJoe Hershberger 
50*170ab110SJoe Hershberger struct env_clbk_tbl *find_env_callback(const char *);
51*170ab110SJoe Hershberger void env_callback_init(ENTRY *var_entry);
52*170ab110SJoe Hershberger 
53*170ab110SJoe Hershberger /*
54*170ab110SJoe Hershberger  * Define a callback that can be associated with variables.
55*170ab110SJoe Hershberger  * when associated through the ".callbacks" environment variable, the callback
56*170ab110SJoe Hershberger  * will be executed any time the variable is inserted, overwritten, or deleted.
57*170ab110SJoe Hershberger  */
58*170ab110SJoe Hershberger #define U_BOOT_ENV_CALLBACK(name, callback) \
59*170ab110SJoe Hershberger 	ll_entry_declare(struct env_clbk_tbl, name, env_clbk, env_clbk) = \
60*170ab110SJoe Hershberger 	{#name, callback}
61*170ab110SJoe Hershberger 
62*170ab110SJoe Hershberger #endif /* __ENV_CALLBACK_H__ */
63