xref: /openbmc/u-boot/tools/env/fw_env.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
26aff3115Swdenk /*
3bc11756dSGrant Erickson  * (C) Copyright 2002-2008
46aff3115Swdenk  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
56aff3115Swdenk  */
66aff3115Swdenk 
7371ee137SAndreas Fenkart #include <stdint.h>
8e3c52f2bSTom Rini 
900c234f3SStefano Babic /*
1000c234f3SStefano Babic  * Programs using the library must check which API is available,
1100c234f3SStefano Babic  * that varies depending on the U-Boot version.
1200c234f3SStefano Babic  * This can be changed in future
1300c234f3SStefano Babic  */
1400c234f3SStefano Babic #define FW_ENV_API_VERSION	1
1500c234f3SStefano Babic 
1681974f44SAndreas Fenkart struct env_opts {
17371ee137SAndreas Fenkart #ifdef CONFIG_FILE
18371ee137SAndreas Fenkart 	char *config_file;
19371ee137SAndreas Fenkart #endif
20d40dbfb7SB, Ravi 	char *lockname;
21371ee137SAndreas Fenkart };
2207ce9440SAndreas Fenkart 
23fd4e3280SAndreas Fenkart /**
24fd4e3280SAndreas Fenkart  * fw_printenv() - print one or several environment variables
25fd4e3280SAndreas Fenkart  *
26fd4e3280SAndreas Fenkart  * @argc: number of variables names to be printed, prints all if 0
27fd4e3280SAndreas Fenkart  * @argv: array of variable names to be printed, if argc != 0
28fd4e3280SAndreas Fenkart  * @value_only: do not repeat the variable name, print the bare value,
29fd4e3280SAndreas Fenkart  *          only one variable allowed with this option, argc must be 1
30fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
31fd4e3280SAndreas Fenkart  *
32fd4e3280SAndreas Fenkart  * Description:
33fd4e3280SAndreas Fenkart  *  Uses fw_env_open, fw_getenv
34fd4e3280SAndreas Fenkart  *
35fd4e3280SAndreas Fenkart  * Return:
36fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
37fd4e3280SAndreas Fenkart  */
3881974f44SAndreas Fenkart int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts);
39fd4e3280SAndreas Fenkart 
40fd4e3280SAndreas Fenkart /**
41382bee57SSimon Glass  * fw_env_set() - adds or removes one variable to the environment
42fd4e3280SAndreas Fenkart  *
43fd4e3280SAndreas Fenkart  * @argc: number of strings in argv, argv[0] is variable name,
44fd4e3280SAndreas Fenkart  *          argc==1 means erase variable, argc > 1 means add a variable
45fd4e3280SAndreas Fenkart  * @argv: argv[0] is variable name, argv[1..argc-1] are concatenated separated
46fd4e3280SAndreas Fenkart  *           by single blank and set as the new value of the variable
47fd4e3280SAndreas Fenkart  * @opts: how to retrieve environment from flash, defaults are used if NULL
48fd4e3280SAndreas Fenkart  *
49fd4e3280SAndreas Fenkart  * Description:
5033f0086cSStefano Babic  *  Uses fw_env_open, fw_env_write, fw_env_flush
51fd4e3280SAndreas Fenkart  *
52fd4e3280SAndreas Fenkart  * Return:
53fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
54fd4e3280SAndreas Fenkart  *
55fd4e3280SAndreas Fenkart  * ERRORS:
56fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
57fd4e3280SAndreas Fenkart  */
58382bee57SSimon Glass int fw_env_set(int argc, char *argv[], struct env_opts *opts);
59fd4e3280SAndreas Fenkart 
60fd4e3280SAndreas Fenkart /**
61fd4e3280SAndreas Fenkart  * fw_parse_script() - adds or removes multiple variables with a batch script
62fd4e3280SAndreas Fenkart  *
63fd4e3280SAndreas Fenkart  * @fname: batch script file name
64fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
65fd4e3280SAndreas Fenkart  *
66fd4e3280SAndreas Fenkart  * Description:
6733f0086cSStefano Babic  *  Uses fw_env_open, fw_env_write, fw_env_flush
68fd4e3280SAndreas Fenkart  *
69fd4e3280SAndreas Fenkart  * Return:
70fd4e3280SAndreas Fenkart  *  0 success, -1 on failure (modifies errno)
71fd4e3280SAndreas Fenkart  *
72fd4e3280SAndreas Fenkart  * Script Syntax:
73fd4e3280SAndreas Fenkart  *
74fd4e3280SAndreas Fenkart  *  key [ [space]+ value]
75fd4e3280SAndreas Fenkart  *
76fd4e3280SAndreas Fenkart  *  lines starting with '#' treated as comment
77fd4e3280SAndreas Fenkart  *
78fd4e3280SAndreas Fenkart  *  A variable without value will be deleted. Any number of spaces are allowed
79fd4e3280SAndreas Fenkart  *  between key and value. The value starts with the first non-space character
80fd4e3280SAndreas Fenkart  *  and ends with newline. No comments allowed on these lines.  Spaces inside
81fd4e3280SAndreas Fenkart  *  the value are preserved verbatim.
82fd4e3280SAndreas Fenkart  *
83fd4e3280SAndreas Fenkart  * Script Example:
84fd4e3280SAndreas Fenkart  *
85fd4e3280SAndreas Fenkart  *  netdev         eth0
86fd4e3280SAndreas Fenkart  *
87fd4e3280SAndreas Fenkart  *  kernel_addr    400000
88fd4e3280SAndreas Fenkart  *
89fd4e3280SAndreas Fenkart  *  foo            spaces           are copied verbatim
90fd4e3280SAndreas Fenkart  *
91fd4e3280SAndreas Fenkart  *  # delete variable bar
92fd4e3280SAndreas Fenkart  *
93fd4e3280SAndreas Fenkart  *  bar
94fd4e3280SAndreas Fenkart  */
9581974f44SAndreas Fenkart int fw_parse_script(char *fname, struct env_opts *opts);
96fd4e3280SAndreas Fenkart 
97fd4e3280SAndreas Fenkart 
98fd4e3280SAndreas Fenkart /**
99fd4e3280SAndreas Fenkart  * fw_env_open() - read enviroment from flash into RAM cache
100fd4e3280SAndreas Fenkart  *
101fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
102fd4e3280SAndreas Fenkart  *
103fd4e3280SAndreas Fenkart  * Return:
104fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
105fd4e3280SAndreas Fenkart  */
10681974f44SAndreas Fenkart int fw_env_open(struct env_opts *opts);
107fd4e3280SAndreas Fenkart 
108fd4e3280SAndreas Fenkart /**
109fd4e3280SAndreas Fenkart  * fw_getenv() - lookup variable in the RAM cache
110fd4e3280SAndreas Fenkart  *
111fd4e3280SAndreas Fenkart  * @name: variable to be searched
112fd4e3280SAndreas Fenkart  * Return:
113fd4e3280SAndreas Fenkart  *  pointer to start of value, NULL if not found
114fd4e3280SAndreas Fenkart  */
115fd4e3280SAndreas Fenkart char *fw_getenv(char *name);
116fd4e3280SAndreas Fenkart 
117fd4e3280SAndreas Fenkart /**
118fd4e3280SAndreas Fenkart  * fw_env_write() - modify a variable held in the RAM cache
119fd4e3280SAndreas Fenkart  *
120fd4e3280SAndreas Fenkart  * @name: variable
121fd4e3280SAndreas Fenkart  * @value: delete variable if NULL, otherwise create or overwrite the variable
122fd4e3280SAndreas Fenkart  *
123fd4e3280SAndreas Fenkart  * This is called in sequence to update the environment in RAM without updating
124fd4e3280SAndreas Fenkart  * the copy in flash after each set
125fd4e3280SAndreas Fenkart  *
126fd4e3280SAndreas Fenkart  * Return:
127fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
128fd4e3280SAndreas Fenkart  *
129fd4e3280SAndreas Fenkart  * ERRORS:
130fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
131fd4e3280SAndreas Fenkart  */
132c3a23e8bSAndreas Fenkart int fw_env_write(char *name, char *value);
133fd4e3280SAndreas Fenkart 
134fd4e3280SAndreas Fenkart /**
13533f0086cSStefano Babic  * fw_env_flush - write the environment from RAM cache back to flash
13633f0086cSStefano Babic  *
13733f0086cSStefano Babic  * @opts: encryption key, configuration file, defaults are used if NULL
13833f0086cSStefano Babic  *
13933f0086cSStefano Babic  * Return:
14033f0086cSStefano Babic  *  0 on success, -1 on failure (modifies errno)
14133f0086cSStefano Babic  */
14233f0086cSStefano Babic int fw_env_flush(struct env_opts *opts);
14333f0086cSStefano Babic 
14433f0086cSStefano Babic /**
14533f0086cSStefano Babic  * fw_env_close - free allocated structure and close env
146fd4e3280SAndreas Fenkart  *
147fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
148fd4e3280SAndreas Fenkart  *
149fd4e3280SAndreas Fenkart  * Return:
150fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
151fd4e3280SAndreas Fenkart  */
15281974f44SAndreas Fenkart int fw_env_close(struct env_opts *opts);
1536aff3115Swdenk 
15433f0086cSStefano Babic 
15500c234f3SStefano Babic /**
15600c234f3SStefano Babic  * fw_env_version - return the current version of the library
15700c234f3SStefano Babic  *
15800c234f3SStefano Babic  * Return:
15900c234f3SStefano Babic  *  version string of the library
16000c234f3SStefano Babic  */
16100c234f3SStefano Babic char *fw_env_version(void);
16200c234f3SStefano Babic 
163c3a23e8bSAndreas Fenkart unsigned long crc32(unsigned long, const unsigned char *, unsigned);
164