Merge branch 'mpc86xx'
[platform/kernel/u-boot.git] / common / environment.c
1 /*
2  * (C) Copyright 2001
3  * Erik Theisen,  Wave 7 Optics, etheisen@mindspring.com.
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 #ifndef __ASSEMBLY__
25 #define __ASSEMBLY__                    /* Dirty trick to get only #defines     */
26 #endif
27 #define __ASM_STUB_PROCESSOR_H__        /* don't include asm/processor.         */
28 #include <config.h>
29 #undef  __ASSEMBLY__
30 #include <environment.h>
31
32 /*
33  * Handle HOSTS that have prepended
34  * crap on symbol names, not TARGETS.
35  */
36 #if defined(__APPLE__)
37 /* Leading underscore on symbols */
38 #  define SYM_CHAR "_"
39 #else /* No leading character on symbols */
40 #  define SYM_CHAR
41 #endif
42
43 /*
44  * Generate embedded environment table
45  * inside U-Boot image, if needed.
46  */
47 #if defined(ENV_IS_EMBEDDED)
48 /*
49  * Only put the environment in it's own section when we are building
50  * U-Boot proper.  The host based program "tools/envcrc" does not need
51  * a seperate section.  Note that ENV_CRC is only defined when building
52  * U-Boot itself.
53  */
54 #if (defined(CONFIG_CMI)        || \
55      defined(CONFIG_FADS)       || \
56      defined(CONFIG_HYMOD)      || \
57      defined(CONFIG_ICU862)     || \
58      defined(CONFIG_R360MPI)    || \
59      defined(CONFIG_TQM8xxL)    || \
60      defined(CONFIG_RRVISION)   || \
61      defined(CONFIG_TRAB)       || \
62      defined(CONFIG_PPCHAMELEONEVB) || \
63      defined(CONFIG_M5271EVB))  && \
64      defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */
65 /* XXX - This only works with GNU C */
66 #  define __PPCENV__ __attribute__ ((section(".ppcenv")))
67 #  define __PPCTEXT__ __attribute__ ((section(".text")))
68
69 #elif defined(USE_HOSTCC) /* Native for 'tools/envcrc' */
70 #  define __PPCENV__ /*XXX DO_NOT_DEL_THIS_COMMENT*/
71 #  define __PPCTEXT__ /*XXX DO_NOT_DEL_THIS_COMMENT*/
72
73 #else /* Environment is embedded in U-Boot's .text section */
74 /* XXX - This only works with GNU C */
75 #  define __PPCENV__ __attribute__ ((section(".text")))
76 #  define __PPCTEXT__ __attribute__ ((section(".text")))
77 #endif
78
79 /*
80  * Macros to generate global absolutes.
81  */
82 #define GEN_SYMNAME(str) SYM_CHAR #str
83 #define GEN_VALUE(str) #str
84 #define GEN_ABS(name, value) \
85                 asm (".globl " GEN_SYMNAME(name)); \
86                 asm (GEN_SYMNAME(name) " = " GEN_VALUE(value))
87
88 /*
89  * Macros to transform values
90  * into environment strings.
91  */
92 #define XMK_STR(x)      #x
93 #define MK_STR(x)       XMK_STR(x)
94
95 /*
96  * Check to see if we are building with a
97  * computed CRC.  Otherwise define it as ~0.
98  */
99 #if !defined(ENV_CRC)
100 #  define ENV_CRC       ~0
101 #endif
102
103 env_t environment __PPCENV__ = {
104         ENV_CRC,        /* CRC Sum */
105 #ifdef CFG_REDUNDAND_ENVIRONMENT
106         1,              /* Flags: valid */
107 #endif
108         {
109 #if defined(CONFIG_BOOTARGS)
110         "bootargs="     CONFIG_BOOTARGS                 "\0"
111 #endif
112 #if defined(CONFIG_BOOTCOMMAND)
113         "bootcmd="      CONFIG_BOOTCOMMAND              "\0"
114 #endif
115 #if defined(CONFIG_RAMBOOTCOMMAND)
116         "ramboot="      CONFIG_RAMBOOTCOMMAND           "\0"
117 #endif
118 #if defined(CONFIG_NFSBOOTCOMMAND)
119         "nfsboot="      CONFIG_NFSBOOTCOMMAND           "\0"
120 #endif
121 #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
122         "bootdelay="    MK_STR(CONFIG_BOOTDELAY)        "\0"
123 #endif
124 #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
125         "baudrate="     MK_STR(CONFIG_BAUDRATE)         "\0"
126 #endif
127 #ifdef  CONFIG_LOADS_ECHO
128         "loads_echo="   MK_STR(CONFIG_LOADS_ECHO)       "\0"
129 #endif
130 #ifdef  CONFIG_ETHADDR
131         "ethaddr="      MK_STR(CONFIG_ETHADDR)          "\0"
132 #endif
133 #ifdef  CONFIG_ETH1ADDR
134         "eth1addr="     MK_STR(CONFIG_ETH1ADDR)         "\0"
135 #endif
136 #ifdef  CONFIG_ETH2ADDR
137         "eth2addr="     MK_STR(CONFIG_ETH2ADDR)         "\0"
138 #endif
139 #ifdef  CONFIG_ETH3ADDR
140         "eth3addr="     MK_STR(CONFIG_ETH3ADDR)         "\0"
141 #endif
142 #ifdef  CONFIG_ETHPRIME
143         "ethprime="     CONFIG_ETHPRIME                 "\0"
144 #endif
145 #ifdef  CONFIG_IPADDR
146         "ipaddr="       MK_STR(CONFIG_IPADDR)           "\0"
147 #endif
148 #ifdef  CONFIG_SERVERIP
149         "serverip="     MK_STR(CONFIG_SERVERIP)         "\0"
150 #endif
151 #ifdef  CFG_AUTOLOAD
152         "autoload="     CFG_AUTOLOAD                    "\0"
153 #endif
154 #ifdef  CONFIG_ROOTPATH
155         "rootpath="     MK_STR(CONFIG_ROOTPATH)         "\0"
156 #endif
157 #ifdef  CONFIG_GATEWAYIP
158         "gatewayip="    MK_STR(CONFIG_GATEWAYIP)        "\0"
159 #endif
160 #ifdef  CONFIG_NETMASK
161         "netmask="      MK_STR(CONFIG_NETMASK)          "\0"
162 #endif
163 #ifdef  CONFIG_HOSTNAME
164         "hostname="     MK_STR(CONFIG_HOSTNAME)         "\0"
165 #endif
166 #ifdef  CONFIG_BOOTFILE
167         "bootfile="     MK_STR(CONFIG_BOOTFILE)         "\0"
168 #endif
169 #ifdef  CONFIG_LOADADDR
170         "loadaddr="     MK_STR(CONFIG_LOADADDR)         "\0"
171 #endif
172 #ifdef  CONFIG_PREBOOT
173         "preboot="      CONFIG_PREBOOT                  "\0"
174 #endif
175 #ifdef  CONFIG_CLOCKS_IN_MHZ
176         "clocks_in_mhz=" "1"                            "\0"
177 #endif
178 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
179         "pcidelay="     MK_STR(CONFIG_PCI_BOOTDELAY)    "\0"
180 #endif
181 #ifdef  CONFIG_EXTRA_ENV_SETTINGS
182         CONFIG_EXTRA_ENV_SETTINGS
183 #endif
184         "\0"            /* Term. env_t.data with 2 NULs */
185         }
186 };
187 #ifdef CFG_ENV_ADDR_REDUND
188 env_t redundand_environment __PPCENV__ = {
189         0,              /* CRC Sum: invalid */
190         0,              /* Flags:   invalid */
191         {
192         "\0"
193         }
194 };
195 #endif  /* CFG_ENV_ADDR_REDUND */
196
197 /*
198  * These will end up in the .text section
199  * if the environment strings are embedded
200  * in the image.  When this is used for
201  * tools/envcrc, they are placed in the
202  * .data/.sdata section.
203  *
204  */
205 unsigned long env_size __PPCTEXT__ = sizeof(env_t);
206
207 /*
208  * Add in absolutes.
209  */
210 GEN_ABS(env_offset, CFG_ENV_OFFSET);
211
212 #endif /* ENV_IS_EMBEDDED */