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(CFG_USE_PPCENV) || defined(CONFIG_NAND_U_BOOT)) && \ |
---|
55 | defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */ |
---|
56 | /* XXX - This only works with GNU C */ |
---|
57 | # define __PPCENV__ __attribute__ ((section(".ppcenv"))) |
---|
58 | # define __PPCTEXT__ __attribute__ ((section(".text"))) |
---|
59 | |
---|
60 | #elif defined(USE_HOSTCC) /* Native for 'tools/envcrc' */ |
---|
61 | # define __PPCENV__ /*XXX DO_NOT_DEL_THIS_COMMENT*/ |
---|
62 | # define __PPCTEXT__ /*XXX DO_NOT_DEL_THIS_COMMENT*/ |
---|
63 | |
---|
64 | #else /* Environment is embedded in U-Boot's .text section */ |
---|
65 | /* XXX - This only works with GNU C */ |
---|
66 | # define __PPCENV__ __attribute__ ((section(".text"))) |
---|
67 | # define __PPCTEXT__ __attribute__ ((section(".text"))) |
---|
68 | #endif |
---|
69 | |
---|
70 | /* |
---|
71 | * Macros to generate global absolutes. |
---|
72 | */ |
---|
73 | #if defined(__bfin__) |
---|
74 | # define GEN_SET_VALUE(name, value) asm (".set " GEN_SYMNAME(name) ", " GEN_VALUE(value)) |
---|
75 | #else |
---|
76 | # define GEN_SET_VALUE(name, value) asm (GEN_SYMNAME(name) " = " GEN_VALUE(value)) |
---|
77 | #endif |
---|
78 | #define GEN_SYMNAME(str) SYM_CHAR #str |
---|
79 | #define GEN_VALUE(str) #str |
---|
80 | #define GEN_ABS(name, value) \ |
---|
81 | asm (".globl " GEN_SYMNAME(name)); \ |
---|
82 | GEN_SET_VALUE(name, value) |
---|
83 | |
---|
84 | /* |
---|
85 | * Macros to transform values |
---|
86 | * into environment strings. |
---|
87 | */ |
---|
88 | #define XMK_STR(x) #x |
---|
89 | #define MK_STR(x) XMK_STR(x) |
---|
90 | |
---|
91 | /* |
---|
92 | * Check to see if we are building with a |
---|
93 | * computed CRC. Otherwise define it as ~0. |
---|
94 | */ |
---|
95 | #if !defined(ENV_CRC) |
---|
96 | # define ENV_CRC ~0 |
---|
97 | #endif |
---|
98 | |
---|
99 | env_t environment __PPCENV__ = { |
---|
100 | ENV_CRC, /* CRC Sum */ |
---|
101 | #ifdef CFG_REDUNDAND_ENVIRONMENT |
---|
102 | 1, /* Flags: valid */ |
---|
103 | #endif |
---|
104 | { |
---|
105 | #if defined(CONFIG_BOOTARGS) |
---|
106 | "bootargs=" CONFIG_BOOTARGS "\0" |
---|
107 | #endif |
---|
108 | #if defined(CONFIG_BOOTCOMMAND) |
---|
109 | "bootcmd=" CONFIG_BOOTCOMMAND "\0" |
---|
110 | #endif |
---|
111 | #if defined(CONFIG_RAMBOOTCOMMAND) |
---|
112 | "ramboot=" CONFIG_RAMBOOTCOMMAND "\0" |
---|
113 | #endif |
---|
114 | #if defined(CONFIG_NFSBOOTCOMMAND) |
---|
115 | "nfsboot=" CONFIG_NFSBOOTCOMMAND "\0" |
---|
116 | #endif |
---|
117 | #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0) |
---|
118 | "bootdelay=" MK_STR(CONFIG_BOOTDELAY) "\0" |
---|
119 | #endif |
---|
120 | #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0) |
---|
121 | "baudrate=" MK_STR(CONFIG_BAUDRATE) "\0" |
---|
122 | #endif |
---|
123 | #ifdef CONFIG_LOADS_ECHO |
---|
124 | "loads_echo=" MK_STR(CONFIG_LOADS_ECHO) "\0" |
---|
125 | #endif |
---|
126 | #ifdef CONFIG_ETHADDR |
---|
127 | "ethaddr=" MK_STR(CONFIG_ETHADDR) "\0" |
---|
128 | #endif |
---|
129 | #ifdef CONFIG_ETH1ADDR |
---|
130 | "eth1addr=" MK_STR(CONFIG_ETH1ADDR) "\0" |
---|
131 | #endif |
---|
132 | #ifdef CONFIG_ETH2ADDR |
---|
133 | "eth2addr=" MK_STR(CONFIG_ETH2ADDR) "\0" |
---|
134 | #endif |
---|
135 | #ifdef CONFIG_ETH3ADDR |
---|
136 | "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0" |
---|
137 | #endif |
---|
138 | #ifdef CONFIG_ETHPRIME |
---|
139 | "ethprime=" CONFIG_ETHPRIME "\0" |
---|
140 | #endif |
---|
141 | #ifdef CONFIG_IPADDR |
---|
142 | "ipaddr=" MK_STR(CONFIG_IPADDR) "\0" |
---|
143 | #endif |
---|
144 | #ifdef CONFIG_SERVERIP |
---|
145 | "serverip=" MK_STR(CONFIG_SERVERIP) "\0" |
---|
146 | #endif |
---|
147 | #ifdef CFG_AUTOLOAD |
---|
148 | "autoload=" CFG_AUTOLOAD "\0" |
---|
149 | #endif |
---|
150 | #ifdef CONFIG_ROOTPATH |
---|
151 | "rootpath=" MK_STR(CONFIG_ROOTPATH) "\0" |
---|
152 | #endif |
---|
153 | #ifdef CONFIG_GATEWAYIP |
---|
154 | "gatewayip=" MK_STR(CONFIG_GATEWAYIP) "\0" |
---|
155 | #endif |
---|
156 | #ifdef CONFIG_NETMASK |
---|
157 | "netmask=" MK_STR(CONFIG_NETMASK) "\0" |
---|
158 | #endif |
---|
159 | #ifdef CONFIG_HOSTNAME |
---|
160 | "hostname=" MK_STR(CONFIG_HOSTNAME) "\0" |
---|
161 | #endif |
---|
162 | #ifdef CONFIG_BOOTFILE |
---|
163 | "bootfile=" MK_STR(CONFIG_BOOTFILE) "\0" |
---|
164 | #endif |
---|
165 | #ifdef CONFIG_LOADADDR |
---|
166 | "loadaddr=" MK_STR(CONFIG_LOADADDR) "\0" |
---|
167 | #endif |
---|
168 | #ifdef CONFIG_PREBOOT |
---|
169 | "preboot=" CONFIG_PREBOOT "\0" |
---|
170 | #endif |
---|
171 | #ifdef CONFIG_CLOCKS_IN_MHZ |
---|
172 | "clocks_in_mhz=" "1" "\0" |
---|
173 | #endif |
---|
174 | #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0) |
---|
175 | "pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY) "\0" |
---|
176 | #endif |
---|
177 | #ifdef CONFIG_EXTRA_ENV_SETTINGS |
---|
178 | CONFIG_EXTRA_ENV_SETTINGS |
---|
179 | #endif |
---|
180 | "\0" /* Term. env_t.data with 2 NULs */ |
---|
181 | } |
---|
182 | }; |
---|
183 | #ifdef CONFIG_ENV_ADDR_REDUND |
---|
184 | env_t redundand_environment __PPCENV__ = { |
---|
185 | 0, /* CRC Sum: invalid */ |
---|
186 | 0, /* Flags: invalid */ |
---|
187 | { |
---|
188 | "\0" |
---|
189 | } |
---|
190 | }; |
---|
191 | #endif /* CONFIG_ENV_ADDR_REDUND */ |
---|
192 | |
---|
193 | /* |
---|
194 | * These will end up in the .text section |
---|
195 | * if the environment strings are embedded |
---|
196 | * in the image. When this is used for |
---|
197 | * tools/envcrc, they are placed in the |
---|
198 | * .data/.sdata section. |
---|
199 | * |
---|
200 | */ |
---|
201 | unsigned long env_size __PPCTEXT__ = sizeof(env_t); |
---|
202 | |
---|
203 | /* |
---|
204 | * Add in absolutes. |
---|
205 | */ |
---|
206 | GEN_ABS(env_offset, CONFIG_ENV_OFFSET); |
---|
207 | |
---|
208 | #endif /* ENV_IS_EMBEDDED */ |
---|