uboot/common/env_embedded.c
<<
>>
Prefs
   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_SYS_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
  99env_t environment __PPCENV__ = {
 100        ENV_CRC,        /* CRC Sum */
 101#ifdef CONFIG_SYS_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_ETH4ADDR
 139        "eth4addr="     MK_STR(CONFIG_ETH4ADDR)         "\0"
 140#endif
 141#ifdef  CONFIG_ETH5ADDR
 142        "eth5addr="     MK_STR(CONFIG_ETH5ADDR)         "\0"
 143#endif
 144#ifdef  CONFIG_ETHPRIME
 145        "ethprime="     CONFIG_ETHPRIME                 "\0"
 146#endif
 147#ifdef  CONFIG_IPADDR
 148        "ipaddr="       MK_STR(CONFIG_IPADDR)           "\0"
 149#endif
 150#ifdef  CONFIG_SERVERIP
 151        "serverip="     MK_STR(CONFIG_SERVERIP)         "\0"
 152#endif
 153#ifdef  CONFIG_SYS_AUTOLOAD
 154        "autoload="     CONFIG_SYS_AUTOLOAD                     "\0"
 155#endif
 156#ifdef  CONFIG_ROOTPATH
 157        "rootpath="     MK_STR(CONFIG_ROOTPATH)         "\0"
 158#endif
 159#ifdef  CONFIG_GATEWAYIP
 160        "gatewayip="    MK_STR(CONFIG_GATEWAYIP)        "\0"
 161#endif
 162#ifdef  CONFIG_NETMASK
 163        "netmask="      MK_STR(CONFIG_NETMASK)          "\0"
 164#endif
 165#ifdef  CONFIG_HOSTNAME
 166        "hostname="     MK_STR(CONFIG_HOSTNAME)         "\0"
 167#endif
 168#ifdef  CONFIG_BOOTFILE
 169        "bootfile="     MK_STR(CONFIG_BOOTFILE)         "\0"
 170#endif
 171#ifdef  CONFIG_LOADADDR
 172        "loadaddr="     MK_STR(CONFIG_LOADADDR)         "\0"
 173#endif
 174#ifdef  CONFIG_PREBOOT
 175        "preboot="      CONFIG_PREBOOT                  "\0"
 176#endif
 177#ifdef  CONFIG_CLOCKS_IN_MHZ
 178        "clocks_in_mhz=" "1"                            "\0"
 179#endif
 180#if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
 181        "pcidelay="     MK_STR(CONFIG_PCI_BOOTDELAY)    "\0"
 182#endif
 183#ifdef  CONFIG_EXTRA_ENV_SETTINGS
 184        CONFIG_EXTRA_ENV_SETTINGS
 185#endif
 186        "\0"            /* Term. env_t.data with 2 NULs */
 187        }
 188};
 189#ifdef CONFIG_ENV_ADDR_REDUND
 190env_t redundand_environment __PPCENV__ = {
 191        0,              /* CRC Sum: invalid */
 192        0,              /* Flags:   invalid */
 193        {
 194        "\0"
 195        }
 196};
 197#endif  /* CONFIG_ENV_ADDR_REDUND */
 198
 199/*
 200 * These will end up in the .text section
 201 * if the environment strings are embedded
 202 * in the image.  When this is used for
 203 * tools/envcrc, they are placed in the
 204 * .data/.sdata section.
 205 *
 206 */
 207unsigned long env_size __PPCTEXT__ = sizeof(env_t);
 208
 209/*
 210 * Add in absolutes.
 211 */
 212GEN_ABS(env_offset, CONFIG_ENV_OFFSET);
 213
 214#endif /* ENV_IS_EMBEDDED */
 215