xref: /rk3399_rockchip-uboot/include/environment.h (revision c609719b8d1b2dca590e0ed499016d041203e403)
1*c609719bSwdenk /*
2*c609719bSwdenk  * (C) Copyright 2002
3*c609719bSwdenk  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4*c609719bSwdenk  *
5*c609719bSwdenk  * See file CREDITS for list of people who contributed to this
6*c609719bSwdenk  * project.
7*c609719bSwdenk  *
8*c609719bSwdenk  * This program is free software; you can redistribute it and/or
9*c609719bSwdenk  * modify it under the terms of the GNU General Public License as
10*c609719bSwdenk  * published by the Free Software Foundation; either version 2 of
11*c609719bSwdenk  * the License, or (at your option) any later version.
12*c609719bSwdenk  *
13*c609719bSwdenk  * This program is distributed in the hope that it will be useful,
14*c609719bSwdenk  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*c609719bSwdenk  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*c609719bSwdenk  * GNU General Public License for more details.
17*c609719bSwdenk  *
18*c609719bSwdenk  * You should have received a copy of the GNU General Public License
19*c609719bSwdenk  * along with this program; if not, write to the Free Software
20*c609719bSwdenk  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21*c609719bSwdenk  * MA 02111-1307 USA
22*c609719bSwdenk  */
23*c609719bSwdenk 
24*c609719bSwdenk #ifndef _ENVIRONMENT_H_
25*c609719bSwdenk #define _ENVIRONMENT_H_	1
26*c609719bSwdenk 
27*c609719bSwdenk /**************************************************************************
28*c609719bSwdenk  *
29*c609719bSwdenk  * The "environment" is stored as a list of '\0' terminated
30*c609719bSwdenk  * "name=value" strings. The end of the list is marked by a double
31*c609719bSwdenk  * '\0'. New entries are always added at the end. Deleting an entry
32*c609719bSwdenk  * shifts the remaining entries to the front. Replacing an entry is a
33*c609719bSwdenk  * combination of deleting the old value and adding the new one.
34*c609719bSwdenk  *
35*c609719bSwdenk  * The environment is preceeded by a 32 bit CRC over the data part.
36*c609719bSwdenk  *
37*c609719bSwdenk  **************************************************************************
38*c609719bSwdenk  */
39*c609719bSwdenk 
40*c609719bSwdenk #if defined(CFG_ENV_IS_IN_FLASH)
41*c609719bSwdenk # ifndef  CFG_ENV_ADDR
42*c609719bSwdenk #  define CFG_ENV_ADDR	(CFG_FLASH_BASE + CFG_ENV_OFFSET)
43*c609719bSwdenk # endif
44*c609719bSwdenk # ifndef  CFG_ENV_OFFSET
45*c609719bSwdenk #  define CFG_ENV_OFFSET (CFG_ENV_ADDR - CFG_FLASH_BASE)
46*c609719bSwdenk # endif
47*c609719bSwdenk # if !defined(CFG_ENV_ADDR_REDUND) && defined(CFG_ENV_OFFSET_REDUND)
48*c609719bSwdenk #  define CFG_ENV_ADDR_REDUND	(CFG_FLASH_BASE + CFG_ENV_OFFSET_REDUND)
49*c609719bSwdenk # endif
50*c609719bSwdenk # ifndef  CFG_ENV_SIZE
51*c609719bSwdenk #  define CFG_ENV_SIZE	CFG_ENV_SECT_SIZE
52*c609719bSwdenk # endif
53*c609719bSwdenk # if defined(CFG_ENV_ADDR_REDUND) && !defined(CFG_ENV_SIZE_REDUND)
54*c609719bSwdenk #  define CFG_ENV_SIZE_REDUND	CFG_ENV_SIZE
55*c609719bSwdenk # endif
56*c609719bSwdenk # if (CFG_ENV_ADDR >= CFG_MONITOR_BASE) && \
57*c609719bSwdenk      (CFG_ENV_ADDR+CFG_ENV_SIZE) <= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
58*c609719bSwdenk #  define ENV_IS_EMBEDDED	1
59*c609719bSwdenk # endif
60*c609719bSwdenk # if defined(CFG_ENV_ADDR_REDUND) || defined(CFG_ENV_OFFSET_REDUND)
61*c609719bSwdenk #  define CFG_REDUNDAND_ENVIRONMENT	1
62*c609719bSwdenk # endif
63*c609719bSwdenk #endif	/* CFG_ENV_IS_IN_FLASH */
64*c609719bSwdenk 
65*c609719bSwdenk 
66*c609719bSwdenk #ifdef CFG_REDUNDAND_ENVIRONMENT
67*c609719bSwdenk # define ENV_HEADER_SIZE	(sizeof(unsigned long) + 1)
68*c609719bSwdenk #else
69*c609719bSwdenk # define ENV_HEADER_SIZE	(sizeof(unsigned long))
70*c609719bSwdenk #endif
71*c609719bSwdenk 
72*c609719bSwdenk 
73*c609719bSwdenk #define ENV_SIZE (CFG_ENV_SIZE - ENV_HEADER_SIZE)
74*c609719bSwdenk 
75*c609719bSwdenk typedef	struct environment_s {
76*c609719bSwdenk 	unsigned long	crc;		/* CRC32 over data bytes	*/
77*c609719bSwdenk #ifdef CFG_REDUNDAND_ENVIRONMENT
78*c609719bSwdenk 	unsigned char	flags;		/* active/obsolete flags	*/
79*c609719bSwdenk #endif
80*c609719bSwdenk 	unsigned char	data[ENV_SIZE]; /* Environment data		*/
81*c609719bSwdenk } env_t;
82*c609719bSwdenk 
83*c609719bSwdenk #endif	/* _ENVIRONMENT_H_ */
84