]> git.ipfire.org Git - people/ms/u-boot.git/blame - include/environment.h
mx6qsabreauto: Fix the EIM clock for the mx6qp variant
[people/ms/u-boot.git] / include / environment.h
CommitLineData
c609719b
WD
1/*
2 * (C) Copyright 2002
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
1a459660 5 * SPDX-License-Identifier: GPL-2.0+
c609719b
WD
6 */
7
8#ifndef _ENVIRONMENT_H_
6f403bad 9#define _ENVIRONMENT_H_
c609719b
WD
10
11/**************************************************************************
12 *
13 * The "environment" is stored as a list of '\0' terminated
14 * "name=value" strings. The end of the list is marked by a double
15 * '\0'. New entries are always added at the end. Deleting an entry
16 * shifts the remaining entries to the front. Replacing an entry is a
17 * combination of deleting the old value and adding the new one.
18 *
fc0b5948 19 * The environment is preceded by a 32 bit CRC over the data part.
c609719b 20 *
fc0b5948 21 *************************************************************************/
c609719b 22
5a1aceb0 23#if defined(CONFIG_ENV_IS_IN_FLASH)
507651d6
IG
24# ifndef CONFIG_ENV_ADDR
25# define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
c609719b 26# endif
507651d6
IG
27# ifndef CONFIG_ENV_OFFSET
28# define CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
c609719b 29# endif
0e8d1586 30# if !defined(CONFIG_ENV_ADDR_REDUND) && defined(CONFIG_ENV_OFFSET_REDUND)
507651d6
IG
31# define CONFIG_ENV_ADDR_REDUND \
32 (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET_REDUND)
c609719b 33# endif
0e8d1586 34# if defined(CONFIG_ENV_SECT_SIZE) || defined(CONFIG_ENV_SIZE)
507651d6
IG
35# ifndef CONFIG_ENV_SECT_SIZE
36# define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE
500545cc 37# endif
507651d6
IG
38# ifndef CONFIG_ENV_SIZE
39# define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
500545cc
WD
40# endif
41# else
0e8d1586 42# error "Both CONFIG_ENV_SECT_SIZE and CONFIG_ENV_SIZE undefined"
c609719b 43# endif
0e8d1586
JCPV
44# if defined(CONFIG_ENV_ADDR_REDUND) && !defined(CONFIG_ENV_SIZE_REDUND)
45# define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
c609719b 46# endif
507651d6
IG
47# if (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE) && \
48 (CONFIG_ENV_ADDR + CONFIG_ENV_SIZE) <= \
49 (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
6f403bad 50# define ENV_IS_EMBEDDED
c609719b 51# endif
0e8d1586 52# if defined(CONFIG_ENV_ADDR_REDUND) || defined(CONFIG_ENV_OFFSET_REDUND)
6f403bad 53# define CONFIG_SYS_REDUNDAND_ENVIRONMENT
c609719b 54# endif
0a9e4e77
MF
55# ifdef CONFIG_ENV_IS_EMBEDDED
56# error "do not define CONFIG_ENV_IS_EMBEDDED in your board config"
57# error "it is calculated automatically for you"
58# endif
5a1aceb0 59#endif /* CONFIG_ENV_IS_IN_FLASH */
c609719b 60
5707df77
BS
61#if defined(CONFIG_ENV_IS_IN_MMC)
62# ifdef CONFIG_ENV_OFFSET_REDUND
63# define CONFIG_SYS_REDUNDAND_ENVIRONMENT
64# endif
65#endif
66
51bfee19 67#if defined(CONFIG_ENV_IS_IN_NAND)
c9f7351b
BG
68# if defined(CONFIG_ENV_OFFSET_OOB)
69# ifdef CONFIG_ENV_OFFSET_REDUND
70# error "CONFIG_ENV_OFFSET_REDUND is not supported when CONFIG_ENV_OFFSET_OOB"
71# error "is set"
72# endif
73extern unsigned long nand_env_oob_offset;
74# define CONFIG_ENV_OFFSET nand_env_oob_offset
75# else
76# ifndef CONFIG_ENV_OFFSET
77# error "Need to define CONFIG_ENV_OFFSET when using CONFIG_ENV_IS_IN_NAND"
78# endif
79# ifdef CONFIG_ENV_OFFSET_REDUND
80# define CONFIG_SYS_REDUNDAND_ENVIRONMENT
81# endif
82# endif /* CONFIG_ENV_OFFSET_OOB */
0e8d1586
JCPV
83# ifndef CONFIG_ENV_SIZE
84# error "Need to define CONFIG_ENV_SIZE when using CONFIG_ENV_IS_IN_NAND"
e443c944 85# endif
51bfee19 86#endif /* CONFIG_ENV_IS_IN_NAND */
e443c944 87
2b74433f
JH
88#if defined(CONFIG_ENV_IS_IN_UBI)
89# ifndef CONFIG_ENV_UBI_PART
90# error "Need to define CONFIG_ENV_UBI_PART when using CONFIG_ENV_IS_IN_UBI"
91# endif
92# ifndef CONFIG_ENV_UBI_VOLUME
93# error "Need to define CONFIG_ENV_UBI_VOLUME when using CONFIG_ENV_IS_IN_UBI"
94# endif
785881f7
JH
95# if defined(CONFIG_ENV_UBI_VOLUME_REDUND)
96# define CONFIG_SYS_REDUNDAND_ENVIRONMENT
97# endif
2b74433f
JH
98# ifndef CONFIG_ENV_SIZE
99# error "Need to define CONFIG_ENV_SIZE when using CONFIG_ENV_IS_IN_UBI"
100# endif
101# ifndef CONFIG_CMD_UBI
102# error "Need to define CONFIG_CMD_UBI when using CONFIG_ENV_IS_IN_UBI"
103# endif
104#endif /* CONFIG_ENV_IS_IN_UBI */
105
0a9e4e77
MF
106/* Embedded env is only supported for some flash types */
107#ifdef CONFIG_ENV_IS_EMBEDDED
507651d6
IG
108# if !defined(CONFIG_ENV_IS_IN_FLASH) && \
109 !defined(CONFIG_ENV_IS_IN_NAND) && \
110 !defined(CONFIG_ENV_IS_IN_ONENAND) && \
111 !defined(CONFIG_ENV_IS_IN_SPI_FLASH)
0a9e4e77
MF
112# error "CONFIG_ENV_IS_EMBEDDED not supported for your flash type"
113# endif
114#endif
115
116/*
117 * For the flash types where embedded env is supported, but it cannot be
118 * calculated automatically (i.e. NAND), take the board opt-in.
119 */
120#if defined(CONFIG_ENV_IS_EMBEDDED) && !defined(ENV_IS_EMBEDDED)
6f403bad 121# define ENV_IS_EMBEDDED
0a9e4e77
MF
122#endif
123
124/* The build system likes to know if the env is embedded */
125#ifdef DO_DEPS_ONLY
126# ifdef ENV_IS_EMBEDDED
33a6b9e9
WD
127# ifndef CONFIG_ENV_IS_EMBEDDED
128# define CONFIG_ENV_IS_EMBEDDED
129# endif
0a9e4e77
MF
130# endif
131#endif
132
37566090 133#include "compiler.h"
c609719b 134
6d0f6bcf 135#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
89cdab78 136# define ENV_HEADER_SIZE (sizeof(uint32_t) + 1)
b218ccb5
WD
137
138# define ACTIVE_FLAG 1
139# define OBSOLETE_FLAG 0
c609719b 140#else
89cdab78 141# define ENV_HEADER_SIZE (sizeof(uint32_t))
c609719b
WD
142#endif
143
d09b1787
IG
144#if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
145extern char *env_name_spec;
146#endif
c609719b 147
a4223b74
MV
148#ifdef CONFIG_ENV_AES
149/* Make sure the payload is multiple of AES block size */
150#define ENV_SIZE ((CONFIG_ENV_SIZE - ENV_HEADER_SIZE) & ~(16 - 1))
151#else
0e8d1586 152#define ENV_SIZE (CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
a4223b74 153#endif
c609719b 154
507651d6 155typedef struct environment_s {
89cdab78 156 uint32_t crc; /* CRC32 over data bytes */
6d0f6bcf 157#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
c609719b
WD
158 unsigned char flags; /* active/obsolete flags */
159#endif
160 unsigned char data[ENV_SIZE]; /* Environment data */
a4223b74
MV
161} env_t
162#ifdef CONFIG_ENV_AES
163/* Make sure the env is aligned to block size. */
164__attribute__((aligned(16)))
165#endif
166;
c609719b 167
994bc671
IG
168#ifdef ENV_IS_EMBEDDED
169extern env_t environment;
170#endif /* ENV_IS_EMBEDDED */
171
d1459f0f 172extern const unsigned char default_environment[];
27aafe98
IG
173extern env_t *env_ptr;
174
175extern void env_relocate_spec(void);
176extern unsigned char env_get_char_spec(int);
177
178#if defined(CONFIG_NEEDS_MANUAL_RELOC)
179extern void env_reloc(void);
180#endif
d1459f0f 181
ac77f42d
DL
182#ifdef CONFIG_ENV_IS_IN_MMC
183#include <mmc.h>
184
185extern int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
6e7b7df4
DL
186# ifdef CONFIG_SYS_MMC_ENV_PART
187extern uint mmc_get_env_part(struct mmc *mmc);
188# endif
ac77f42d
DL
189#endif
190
2eb1573f
MF
191#ifndef DO_DEPS_ONLY
192
170ab110
JH
193#include <env_attr.h>
194#include <env_callback.h>
2598090b 195#include <env_flags.h>
2eb1573f
MF
196#include <search.h>
197
198extern struct hsearch_data env_htab;
199
b502611b 200/* Function that returns a character from the environment */
507651d6 201unsigned char env_get_char(int);
a8409f4f
WD
202
203/* Function that returns a pointer to a value from the environment */
147c7169 204const unsigned char *env_get_addr(int);
507651d6 205unsigned char env_get_char_memory(int index);
a8409f4f
WD
206
207/* Function that updates CRC of the enironment */
507651d6 208void env_crc_update(void);
a8409f4f 209
267541f7
JH
210/* Look up the variable from the default environment */
211char *getenv_default(const char *name);
212
5bb12dbd 213/* [re]set to the default environment */
ea882baf
WD
214void set_default_env(const char *s);
215
b64b7c3d
GF
216/* [re]set individual variables to their value in the default environment */
217int set_default_vars(int nvars, char * const vars[]);
218
ea882baf
WD
219/* Import from binary representation into hash table */
220int env_import(const char *buf, int check);
5bb12dbd 221
7ce1526e
MV
222/* Export from hash table into binary representation */
223int env_export(env_t *env_out);
224
507651d6 225#endif /* DO_DEPS_ONLY */
2eb1573f 226
507651d6 227#endif /* _ENVIRONMENT_H_ */