Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
u-boot-2015.04
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
vesta
u-boot-2015.04
Commits
05706fdd
Commit
05706fdd
authored
22 years ago
by
Wolfgang Denk
Browse files
Options
Downloads
Patches
Plain Diff
Initial revision
parent
14aba9c1
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
common/env_common.c
+231
-0
231 additions, 0 deletions
common/env_common.c
with
231 additions
and
0 deletions
common/env_common.c
0 → 100644
+
231
−
0
View file @
05706fdd
/*
* (C) Copyright 2000-2002
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Andreas Heppel <aheppel@sysgo.de>
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include
<common.h>
#include
<command.h>
#include
<environment.h>
#include
<cmd_nvedit.h>
#include
<linux/stddef.h>
#include
<malloc.h>
#ifdef CONFIG_SHOW_BOOT_PROGRESS
# include <status_led.h>
# define SHOW_BOOT_PROGRESS(arg) show_boot_progress(arg)
#else
# define SHOW_BOOT_PROGRESS(arg)
#endif
#undef DEBUG_ENV
#ifdef DEBUG_ENV
#define DEBUGF(fmt,args...) printf(fmt ,##args)
#else
#define DEBUGF(fmt,args...)
#endif
extern
env_t
*
env_ptr
;
extern
void
env_relocate_spec
(
void
);
extern
uchar
env_get_char_spec
(
int
);
static
uchar
env_get_char_init
(
int
index
);
uchar
(
*
env_get_char
)(
int
)
=
env_get_char_init
;
/************************************************************************
* Default settings to be used when no valid environment is found
*/
#define XMK_STR(x) #x
#define MK_STR(x) XMK_STR(x)
uchar
default_environment
[]
=
{
#ifdef CONFIG_BOOTARGS
"bootargs="
CONFIG_BOOTARGS
"
\0
"
#endif
#ifdef CONFIG_BOOTCOMMAND
"bootcmd="
CONFIG_BOOTCOMMAND
"
\0
"
#endif
#ifdef CONFIG_RAMBOOTCOMMAND
"ramboot="
CONFIG_RAMBOOTCOMMAND
"
\0
"
#endif
#ifdef CONFIG_NFSBOOTCOMMAND
"nfsboot="
CONFIG_NFSBOOTCOMMAND
"
\0
"
#endif
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
"bootdelay="
MK_STR
(
CONFIG_BOOTDELAY
)
"
\0
"
#endif
#if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
"baudrate="
MK_STR
(
CONFIG_BAUDRATE
)
"
\0
"
#endif
#ifdef CONFIG_LOADS_ECHO
"loads_echo="
MK_STR
(
CONFIG_LOADS_ECHO
)
"
\0
"
#endif
#ifdef CONFIG_ETHADDR
"ethaddr="
MK_STR
(
CONFIG_ETHADDR
)
"
\0
"
#endif
#ifdef CONFIG_ETH1ADDR
"eth1addr="
MK_STR
(
CONFIG_ETH1ADDR
)
"
\0
"
#endif
#ifdef CONFIG_ETH2ADDR
"eth2addr="
MK_STR
(
CONFIG_ETH2ADDR
)
"
\0
"
#endif
#ifdef CONFIG_IPADDR
"ipaddr="
MK_STR
(
CONFIG_IPADDR
)
"
\0
"
#endif
#ifdef CONFIG_SERVERIP
"serverip="
MK_STR
(
CONFIG_SERVERIP
)
"
\0
"
#endif
#ifdef CFG_AUTOLOAD
"autoload="
CFG_AUTOLOAD
"
\0
"
#endif
#ifdef CONFIG_PREBOOT
"preboot="
CONFIG_PREBOOT
"
\0
"
#endif
#ifdef CONFIG_ROOTPATH
"rootpath="
MK_STR
(
CONFIG_ROOTPATH
)
"
\0
"
#endif
#ifdef CONFIG_GATEWAYIP
"gatewayip="
MK_STR
(
CONFIG_GATEWAYIP
)
"
\0
"
#endif
#ifdef CONFIG_NETMASK
"netmask="
MK_STR
(
CONFIG_NETMASK
)
"
\0
"
#endif
#ifdef CONFIG_HOSTNAME
"hostname="
MK_STR
(
CONFIG_HOSTNAME
)
"
\0
"
#endif
#ifdef CONFIG_BOOTFILE
"bootfile="
MK_STR
(
CONFIG_BOOTFILE
)
"
\0
"
#endif
#ifdef CONFIG_LOADADDR
"loadaddr="
MK_STR
(
CONFIG_LOADADDR
)
"
\0
"
#endif
#ifdef CONFIG_CLOCKS_IN_MHZ
"clocks_in_mhz=1
\0
"
#endif
#ifdef CONFIG_EXTRA_ENV_SETTINGS
CONFIG_EXTRA_ENV_SETTINGS
#endif
"
\0
"
};
void
env_crc_update
(
void
)
{
env_ptr
->
crc
=
crc32
(
0
,
env_ptr
->
data
,
ENV_SIZE
);
}
static
uchar
env_get_char_init
(
int
index
)
{
DECLARE_GLOBAL_DATA_PTR
;
uchar
c
;
/* if crc was bad, use the default environment */
if
(
gd
->
env_valid
)
{
c
=
env_get_char_spec
(
index
);
}
else
{
c
=
default_environment
[
index
];
}
return
(
c
);
}
uchar
env_get_char_memory
(
int
index
)
{
DECLARE_GLOBAL_DATA_PTR
;
if
(
gd
->
env_valid
)
{
return
(
*
((
uchar
*
)(
gd
->
env_addr
+
index
))
);
}
else
{
return
(
default_environment
[
index
]
);
}
}
uchar
*
env_get_addr
(
int
index
)
{
DECLARE_GLOBAL_DATA_PTR
;
if
(
gd
->
env_valid
)
{
return
(
((
uchar
*
)(
gd
->
env_addr
+
index
))
);
}
else
{
return
(
&
default_environment
[
index
]);
}
}
void
env_relocate
(
void
)
{
DECLARE_GLOBAL_DATA_PTR
;
DEBUGF
(
"%s[%d] offset = 0x%lx
\n
"
,
__FUNCTION__
,
__LINE__
,
gd
->
reloc_off
);
#ifdef ENV_IS_EMBEDDED
/*
* The environment buffer is embedded with the text segment,
* just relocate the environment pointer
*/
env_ptr
=
(
env_t
*
)((
ulong
)
env_ptr
+
gd
->
reloc_off
);
DEBUGF
(
"%s[%d] embedded ENV at %p
\n
"
,
__FUNCTION__
,
__LINE__
,
env_ptr
);
#else
/*
* We must allocate a buffer for the environment
*/
env_ptr
=
(
env_t
*
)
malloc
(
CFG_ENV_SIZE
);
DEBUGF
(
"%s[%d] malloced ENV at %p
\n
"
,
__FUNCTION__
,
__LINE__
,
env_ptr
);
#endif
/*
* After relocation to RAM, we can always use the "memory" functions
*/
env_get_char
=
env_get_char_memory
;
if
(
gd
->
env_valid
==
0
)
{
#if defined(CONFIG_GTH) || defined(CFG_ENV_IS_NOWHERE)
/* Environment not changable */
puts
(
"Using default environment
\n\n
"
);
#else
puts
(
"*** Warning - bad CRC, using default environment
\n\n
"
);
SHOW_BOOT_PROGRESS
(
-
1
);
#endif
if
(
sizeof
(
default_environment
)
>
ENV_SIZE
)
{
puts
(
"*** Error - default environment is too large
\n\n
"
);
return
;
}
memset
(
env_ptr
,
0
,
sizeof
(
env_t
));
memcpy
(
env_ptr
->
data
,
default_environment
,
sizeof
(
default_environment
));
#ifdef CFG_REDUNDAND_ENVIRONMENT
env_ptr
->
flags
=
0xFF
;
#endif
env_crc_update
();
gd
->
env_valid
=
1
;
}
else
{
env_relocate_spec
();
}
gd
->
env_addr
=
(
ulong
)
&
(
env_ptr
->
data
);
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment