xref: /rk3399_rockchip-uboot/tools/env/fw_env.h (revision fd4e3280e50983aa4d646f2c8fc93b38cc1dddf9)
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 <aes.h>
9371ee137SAndreas Fenkart #include <stdint.h>
10371ee137SAndreas Fenkart 
11e3c52f2bSTom Rini /* Pull in the current config to define the default environment */
120b367380SPeter Robinson #include <linux/kconfig.h>
130b367380SPeter Robinson 
14e3c52f2bSTom Rini #ifndef __ASSEMBLY__
15e3c52f2bSTom Rini #define __ASSEMBLY__ /* get only #defines from config.h */
16e3c52f2bSTom Rini #include <config.h>
17e3c52f2bSTom Rini #undef	__ASSEMBLY__
18e3c52f2bSTom Rini #else
19e3c52f2bSTom Rini #include <config.h>
20e3c52f2bSTom Rini #endif
21e3c52f2bSTom Rini 
22d0fb80c3Swdenk /*
239cbfee6dSFrans Meulenbroeks  * To build the utility with the static configuration
249cbfee6dSFrans Meulenbroeks  * comment out the next line.
25566e5cf4SWolfgang Denk  * See included "fw_env.config" sample file
26d0fb80c3Swdenk  * for notes on configuration.
27d0fb80c3Swdenk  */
28d791b1dcSwdenk #define CONFIG_FILE     "/etc/fw_env.config"
29d0fb80c3Swdenk 
30497f2053SJoe Hershberger #ifndef CONFIG_FILE
316aff3115Swdenk #define HAVE_REDUND /* For systems with 2 env sectors */
326aff3115Swdenk #define DEVICE1_NAME      "/dev/mtd1"
336aff3115Swdenk #define DEVICE2_NAME      "/dev/mtd2"
34d0fb80c3Swdenk #define DEVICE1_OFFSET    0x0000
356aff3115Swdenk #define ENV1_SIZE         0x4000
365d5cc384SFrans Meulenbroeks #define DEVICE1_ESIZE     0x4000
375d5cc384SFrans Meulenbroeks #define DEVICE1_ENVSECTORS     2
38d0fb80c3Swdenk #define DEVICE2_OFFSET    0x0000
396aff3115Swdenk #define ENV2_SIZE         0x4000
405d5cc384SFrans Meulenbroeks #define DEVICE2_ESIZE     0x4000
415d5cc384SFrans Meulenbroeks #define DEVICE2_ENVSECTORS     2
42497f2053SJoe Hershberger #endif
436aff3115Swdenk 
44e3c52f2bSTom Rini #ifndef CONFIG_BAUDRATE
45e3c52f2bSTom Rini #define CONFIG_BAUDRATE		115200
46e3c52f2bSTom Rini #endif
47e3c52f2bSTom Rini 
48e3c52f2bSTom Rini #ifndef CONFIG_BOOTDELAY
49e3c52f2bSTom Rini #define CONFIG_BOOTDELAY	5	/* autoboot after 5 seconds	*/
50e3c52f2bSTom Rini #endif
51e3c52f2bSTom Rini 
52e3c52f2bSTom Rini #ifndef CONFIG_BOOTCOMMAND
53e3c52f2bSTom Rini #define CONFIG_BOOTCOMMAND							\
54e3c52f2bSTom Rini 	"bootp; "								\
55e3c52f2bSTom Rini 	"setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "	\
56e3c52f2bSTom Rini 	"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "	\
57e3c52f2bSTom Rini 	"bootm"
58e3c52f2bSTom Rini #endif
59e3c52f2bSTom Rini 
6081974f44SAndreas Fenkart struct env_opts {
61371ee137SAndreas Fenkart #ifdef CONFIG_FILE
62371ee137SAndreas Fenkart 	char *config_file;
63371ee137SAndreas Fenkart #endif
64371ee137SAndreas Fenkart 	int aes_flag; /* Is AES encryption used? */
6581974f44SAndreas Fenkart 	uint8_t aes_key[AES_KEY_LENGTH];
66371ee137SAndreas Fenkart };
6707ce9440SAndreas Fenkart 
68371ee137SAndreas Fenkart int parse_aes_key(char *key, uint8_t *bin_key);
69371ee137SAndreas Fenkart 
70*fd4e3280SAndreas Fenkart /**
71*fd4e3280SAndreas Fenkart  * fw_printenv() - print one or several environment variables
72*fd4e3280SAndreas Fenkart  *
73*fd4e3280SAndreas Fenkart  * @argc: number of variables names to be printed, prints all if 0
74*fd4e3280SAndreas Fenkart  * @argv: array of variable names to be printed, if argc != 0
75*fd4e3280SAndreas Fenkart  * @value_only: do not repeat the variable name, print the bare value,
76*fd4e3280SAndreas Fenkart  *          only one variable allowed with this option, argc must be 1
77*fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
78*fd4e3280SAndreas Fenkart  *
79*fd4e3280SAndreas Fenkart  * Description:
80*fd4e3280SAndreas Fenkart  *  Uses fw_env_open, fw_getenv
81*fd4e3280SAndreas Fenkart  *
82*fd4e3280SAndreas Fenkart  * Return:
83*fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
84*fd4e3280SAndreas Fenkart  */
8581974f44SAndreas Fenkart int fw_printenv(int argc, char *argv[], int value_only, struct env_opts *opts);
86*fd4e3280SAndreas Fenkart 
87*fd4e3280SAndreas Fenkart /**
88*fd4e3280SAndreas Fenkart  * fw_setenv() - adds or removes one variable to the environment
89*fd4e3280SAndreas Fenkart  *
90*fd4e3280SAndreas Fenkart  * @argc: number of strings in argv, argv[0] is variable name,
91*fd4e3280SAndreas Fenkart  *          argc==1 means erase variable, argc > 1 means add a variable
92*fd4e3280SAndreas Fenkart  * @argv: argv[0] is variable name, argv[1..argc-1] are concatenated separated
93*fd4e3280SAndreas Fenkart  *           by single blank and set as the new value of the variable
94*fd4e3280SAndreas Fenkart  * @opts: how to retrieve environment from flash, defaults are used if NULL
95*fd4e3280SAndreas Fenkart  *
96*fd4e3280SAndreas Fenkart  * Description:
97*fd4e3280SAndreas Fenkart  *  Uses fw_env_open, fw_env_write, fw_env_close
98*fd4e3280SAndreas Fenkart  *
99*fd4e3280SAndreas Fenkart  * Return:
100*fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
101*fd4e3280SAndreas Fenkart  *
102*fd4e3280SAndreas Fenkart  * ERRORS:
103*fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
104*fd4e3280SAndreas Fenkart  */
10581974f44SAndreas Fenkart int fw_setenv(int argc, char *argv[], struct env_opts *opts);
106*fd4e3280SAndreas Fenkart 
107*fd4e3280SAndreas Fenkart /**
108*fd4e3280SAndreas Fenkart  * fw_parse_script() - adds or removes multiple variables with a batch script
109*fd4e3280SAndreas Fenkart  *
110*fd4e3280SAndreas Fenkart  * @fname: batch script file name
111*fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
112*fd4e3280SAndreas Fenkart  *
113*fd4e3280SAndreas Fenkart  * Description:
114*fd4e3280SAndreas Fenkart  *  Uses fw_env_open, fw_env_write, fw_env_close
115*fd4e3280SAndreas Fenkart  *
116*fd4e3280SAndreas Fenkart  * Return:
117*fd4e3280SAndreas Fenkart  *  0 success, -1 on failure (modifies errno)
118*fd4e3280SAndreas Fenkart  *
119*fd4e3280SAndreas Fenkart  * Script Syntax:
120*fd4e3280SAndreas Fenkart  *
121*fd4e3280SAndreas Fenkart  *  key [ [space]+ value]
122*fd4e3280SAndreas Fenkart  *
123*fd4e3280SAndreas Fenkart  *  lines starting with '#' treated as comment
124*fd4e3280SAndreas Fenkart  *
125*fd4e3280SAndreas Fenkart  *  A variable without value will be deleted. Any number of spaces are allowed
126*fd4e3280SAndreas Fenkart  *  between key and value. The value starts with the first non-space character
127*fd4e3280SAndreas Fenkart  *  and ends with newline. No comments allowed on these lines.  Spaces inside
128*fd4e3280SAndreas Fenkart  *  the value are preserved verbatim.
129*fd4e3280SAndreas Fenkart  *
130*fd4e3280SAndreas Fenkart  * Script Example:
131*fd4e3280SAndreas Fenkart  *
132*fd4e3280SAndreas Fenkart  *  netdev         eth0
133*fd4e3280SAndreas Fenkart  *
134*fd4e3280SAndreas Fenkart  *  kernel_addr    400000
135*fd4e3280SAndreas Fenkart  *
136*fd4e3280SAndreas Fenkart  *  foo            spaces           are copied verbatim
137*fd4e3280SAndreas Fenkart  *
138*fd4e3280SAndreas Fenkart  *  # delete variable bar
139*fd4e3280SAndreas Fenkart  *
140*fd4e3280SAndreas Fenkart  *  bar
141*fd4e3280SAndreas Fenkart  */
14281974f44SAndreas Fenkart int fw_parse_script(char *fname, struct env_opts *opts);
143*fd4e3280SAndreas Fenkart 
144*fd4e3280SAndreas Fenkart 
145*fd4e3280SAndreas Fenkart /**
146*fd4e3280SAndreas Fenkart  * fw_env_open() - read enviroment from flash into RAM cache
147*fd4e3280SAndreas Fenkart  *
148*fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
149*fd4e3280SAndreas Fenkart  *
150*fd4e3280SAndreas Fenkart  * Return:
151*fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
152*fd4e3280SAndreas Fenkart  */
15381974f44SAndreas Fenkart int fw_env_open(struct env_opts *opts);
154*fd4e3280SAndreas Fenkart 
155*fd4e3280SAndreas Fenkart /**
156*fd4e3280SAndreas Fenkart  * fw_getenv() - lookup variable in the RAM cache
157*fd4e3280SAndreas Fenkart  *
158*fd4e3280SAndreas Fenkart  * @name: variable to be searched
159*fd4e3280SAndreas Fenkart  * Return:
160*fd4e3280SAndreas Fenkart  *  pointer to start of value, NULL if not found
161*fd4e3280SAndreas Fenkart  */
162*fd4e3280SAndreas Fenkart char *fw_getenv(char *name);
163*fd4e3280SAndreas Fenkart 
164*fd4e3280SAndreas Fenkart /**
165*fd4e3280SAndreas Fenkart  * fw_env_write() - modify a variable held in the RAM cache
166*fd4e3280SAndreas Fenkart  *
167*fd4e3280SAndreas Fenkart  * @name: variable
168*fd4e3280SAndreas Fenkart  * @value: delete variable if NULL, otherwise create or overwrite the variable
169*fd4e3280SAndreas Fenkart  *
170*fd4e3280SAndreas Fenkart  * This is called in sequence to update the environment in RAM without updating
171*fd4e3280SAndreas Fenkart  * the copy in flash after each set
172*fd4e3280SAndreas Fenkart  *
173*fd4e3280SAndreas Fenkart  * Return:
174*fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
175*fd4e3280SAndreas Fenkart  *
176*fd4e3280SAndreas Fenkart  * ERRORS:
177*fd4e3280SAndreas Fenkart  *  EROFS - some variables ("ethaddr", "serial#") cannot be modified
178*fd4e3280SAndreas Fenkart  */
179c3a23e8bSAndreas Fenkart int fw_env_write(char *name, char *value);
180*fd4e3280SAndreas Fenkart 
181*fd4e3280SAndreas Fenkart /**
182*fd4e3280SAndreas Fenkart  * fw_env_close - write the environment from RAM cache back to flash
183*fd4e3280SAndreas Fenkart  *
184*fd4e3280SAndreas Fenkart  * @opts: encryption key, configuration file, defaults are used if NULL
185*fd4e3280SAndreas Fenkart  *
186*fd4e3280SAndreas Fenkart  * Return:
187*fd4e3280SAndreas Fenkart  *  0 on success, -1 on failure (modifies errno)
188*fd4e3280SAndreas Fenkart  */
18981974f44SAndreas Fenkart int fw_env_close(struct env_opts *opts);
1906aff3115Swdenk 
191c3a23e8bSAndreas Fenkart unsigned long crc32(unsigned long, const unsigned char *, unsigned);
192