xref: /rk3399_rockchip-uboot/tools/env/fw_env.h (revision 382bee57f19b4454e2015bc19a010bc2d0ab9337)
16aff3115Swdenk /*
2bc11756dSGrant Erickson  * (C) Copyright 2002-2008
36aff3115Swdenk  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
46aff3115Swdenk  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
66aff3115Swdenk  */
76aff3115Swdenk 
8371ee137SAndreas Fenkart #include <stdint.h>
99d80b49aSStefano Babic #include <uboot_aes.h>
10e3c52f2bSTom Rini 
1100c234f3SStefano Babic /*
1200c234f3SStefano Babic  * Programs using the library must check which API is available,
1300c234f3SStefano Babic  * that varies depending on the U-Boot version.
1400c234f3SStefano Babic  * This can be changed in future
1500c234f3SStefano Babic  */
1600c234f3SStefano Babic #define FW_ENV_API_VERSION	1
1700c234f3SStefano Babic 
1881974f44SAndreas Fenkart struct env_opts {
19371ee137SAndreas Fenkart #ifdef CONFIG_FILE
20371ee137SAndreas Fenkart 	char *config_file;
21371ee137SAndreas Fenkart #endif
22371ee137SAndreas Fenkart 	int aes_flag; /* Is AES encryption used? */
2381974f44SAndreas Fenkart 	uint8_t aes_key[AES_KEY_LENGTH];
24d40dbfb7SB, Ravi 	char *lockname;
25371ee137SAndreas Fenkart };
2607ce9440SAndreas Fenkart 
27371ee137SAndreas Fenkart int parse_aes_key(char *key, uint8_t *bin_key);
28371ee137SAndreas Fenkart 
29fd4e3280SAndreas Fenkart /**
30fd4e3280SAndreas Fenkart  * fw_printenv() - print one or several environment variables
31fd4e3280SAndreas Fenkart  *
32fd4e3280SAndreas Fenkart  * @argc: number of variables names to be printed, prints all if 0
33fd4e3280SAndreas Fenkart  * @argv: array of variable names to be printed, if argc != 0
34fd4e3280SAndreas Fenkart  * @value_only: do not repeat the variable name, print the bare value,
35fd4e3280SAndreas Fenkart  *          only one variable allowed with this option, argc must be 1
36fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
37fd4e3280SAndreas Fenkart  *
38fd4e3280SAndreas Fenkart  * Description:
39fd4e3280SAndreas Fenkart  *  Uses fw_env_open, fw_getenv
40fd4e3280SAndreas Fenkart  *
41fd4e3280SAndreas Fenkart  * Return:
42fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
43fd4e3280SAndreas Fenkart  */
4481974f44SAndreas Fenkart int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts);
45fd4e3280SAndreas Fenkart 
46fd4e3280SAndreas Fenkart /**
47*382bee57SSimon Glass  * fw_env_set() - adds or removes one variable to the environment
48fd4e3280SAndreas Fenkart  *
49fd4e3280SAndreas Fenkart  * @argc: number of strings in argv, argv[0] is variable name,
50fd4e3280SAndreas Fenkart  *          argc==1 means erase variable, argc > 1 means add a variable
51fd4e3280SAndreas Fenkart  * @argv: argv[0] is variable name, argv[1..argc-1] are concatenated separated
52fd4e3280SAndreas Fenkart  *           by single blank and set as the new value of the variable
53fd4e3280SAndreas Fenkart  * @opts: how to retrieve environment from flash, defaults are used if NULL
54fd4e3280SAndreas Fenkart  *
55fd4e3280SAndreas Fenkart  * Description:
5633f0086cSStefano Babic  *  Uses fw_env_open, fw_env_write, fw_env_flush
57fd4e3280SAndreas Fenkart  *
58fd4e3280SAndreas Fenkart  * Return:
59fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
60fd4e3280SAndreas Fenkart  *
61fd4e3280SAndreas Fenkart  * ERRORS:
62fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
63fd4e3280SAndreas Fenkart  */
64*382bee57SSimon Glass int fw_env_set(int argc, char *argv[], struct env_opts *opts);
65fd4e3280SAndreas Fenkart 
66fd4e3280SAndreas Fenkart /**
67fd4e3280SAndreas Fenkart  * fw_parse_script() - adds or removes multiple variables with a batch script
68fd4e3280SAndreas Fenkart  *
69fd4e3280SAndreas Fenkart  * @fname: batch script file name
70fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
71fd4e3280SAndreas Fenkart  *
72fd4e3280SAndreas Fenkart  * Description:
7333f0086cSStefano Babic  *  Uses fw_env_open, fw_env_write, fw_env_flush
74fd4e3280SAndreas Fenkart  *
75fd4e3280SAndreas Fenkart  * Return:
76fd4e3280SAndreas Fenkart  *  0 success, -1 on failure (modifies errno)
77fd4e3280SAndreas Fenkart  *
78fd4e3280SAndreas Fenkart  * Script Syntax:
79fd4e3280SAndreas Fenkart  *
80fd4e3280SAndreas Fenkart  *  key [ [space]+ value]
81fd4e3280SAndreas Fenkart  *
82fd4e3280SAndreas Fenkart  *  lines starting with '#' treated as comment
83fd4e3280SAndreas Fenkart  *
84fd4e3280SAndreas Fenkart  *  A variable without value will be deleted. Any number of spaces are allowed
85fd4e3280SAndreas Fenkart  *  between key and value. The value starts with the first non-space character
86fd4e3280SAndreas Fenkart  *  and ends with newline. No comments allowed on these lines.  Spaces inside
87fd4e3280SAndreas Fenkart  *  the value are preserved verbatim.
88fd4e3280SAndreas Fenkart  *
89fd4e3280SAndreas Fenkart  * Script Example:
90fd4e3280SAndreas Fenkart  *
91fd4e3280SAndreas Fenkart  *  netdev         eth0
92fd4e3280SAndreas Fenkart  *
93fd4e3280SAndreas Fenkart  *  kernel_addr    400000
94fd4e3280SAndreas Fenkart  *
95fd4e3280SAndreas Fenkart  *  foo            spaces           are copied verbatim
96fd4e3280SAndreas Fenkart  *
97fd4e3280SAndreas Fenkart  *  # delete variable bar
98fd4e3280SAndreas Fenkart  *
99fd4e3280SAndreas Fenkart  *  bar
100fd4e3280SAndreas Fenkart  */
10181974f44SAndreas Fenkart int fw_parse_script(char *fname, struct env_opts *opts);
102fd4e3280SAndreas Fenkart 
103fd4e3280SAndreas Fenkart 
104fd4e3280SAndreas Fenkart /**
105fd4e3280SAndreas Fenkart  * fw_env_open() - read enviroment from flash into RAM cache
106fd4e3280SAndreas Fenkart  *
107fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
108fd4e3280SAndreas Fenkart  *
109fd4e3280SAndreas Fenkart  * Return:
110fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
111fd4e3280SAndreas Fenkart  */
11281974f44SAndreas Fenkart int fw_env_open(struct env_opts *opts);
113fd4e3280SAndreas Fenkart 
114fd4e3280SAndreas Fenkart /**
115fd4e3280SAndreas Fenkart  * fw_getenv() - lookup variable in the RAM cache
116fd4e3280SAndreas Fenkart  *
117fd4e3280SAndreas Fenkart  * @name: variable to be searched
118fd4e3280SAndreas Fenkart  * Return:
119fd4e3280SAndreas Fenkart  *  pointer to start of value, NULL if not found
120fd4e3280SAndreas Fenkart  */
121fd4e3280SAndreas Fenkart char *fw_getenv(char *name);
122fd4e3280SAndreas Fenkart 
123fd4e3280SAndreas Fenkart /**
124fd4e3280SAndreas Fenkart  * fw_env_write() - modify a variable held in the RAM cache
125fd4e3280SAndreas Fenkart  *
126fd4e3280SAndreas Fenkart  * @name: variable
127fd4e3280SAndreas Fenkart  * @value: delete variable if NULL, otherwise create or overwrite the variable
128fd4e3280SAndreas Fenkart  *
129fd4e3280SAndreas Fenkart  * This is called in sequence to update the environment in RAM without updating
130fd4e3280SAndreas Fenkart  * the copy in flash after each set
131fd4e3280SAndreas Fenkart  *
132fd4e3280SAndreas Fenkart  * Return:
133fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
134fd4e3280SAndreas Fenkart  *
135fd4e3280SAndreas Fenkart  * ERRORS:
136fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
137fd4e3280SAndreas Fenkart  */
138c3a23e8bSAndreas Fenkart int fw_env_write(char *name, char *value);
139fd4e3280SAndreas Fenkart 
140fd4e3280SAndreas Fenkart /**
14133f0086cSStefano Babic  * fw_env_flush - write the environment from RAM cache back to flash
14233f0086cSStefano Babic  *
14333f0086cSStefano Babic  * @opts: encryption key, configuration file, defaults are used if NULL
14433f0086cSStefano Babic  *
14533f0086cSStefano Babic  * Return:
14633f0086cSStefano Babic  *  0 on success, -1 on failure (modifies errno)
14733f0086cSStefano Babic  */
14833f0086cSStefano Babic int fw_env_flush(struct env_opts *opts);
14933f0086cSStefano Babic 
15033f0086cSStefano Babic /**
15133f0086cSStefano Babic  * fw_env_close - free allocated structure and close env
152fd4e3280SAndreas Fenkart  *
153fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
154fd4e3280SAndreas Fenkart  *
155fd4e3280SAndreas Fenkart  * Return:
156fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
157fd4e3280SAndreas Fenkart  */
15881974f44SAndreas Fenkart int fw_env_close(struct env_opts *opts);
1596aff3115Swdenk 
16033f0086cSStefano Babic 
16100c234f3SStefano Babic /**
16200c234f3SStefano Babic  * fw_env_version - return the current version of the library
16300c234f3SStefano Babic  *
16400c234f3SStefano Babic  * Return:
16500c234f3SStefano Babic  *  version string of the library
16600c234f3SStefano Babic  */
16700c234f3SStefano Babic char *fw_env_version(void);
16800c234f3SStefano Babic 
169c3a23e8bSAndreas Fenkart unsigned long crc32(unsigned long, const unsigned char *, unsigned);
170