Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
alchemy
common
prom.c
Go to the documentation of this file.
1
/*
2
*
3
* BRIEF MODULE DESCRIPTION
4
* PROM library initialisation code, supports YAMON and U-Boot.
5
*
6
* Copyright 2000-2001, 2006, 2008 MontaVista Software Inc.
7
* Author: MontaVista Software, Inc. <
[email protected]
>
8
*
9
* This file was derived from Carsten Langgaard's
10
* arch/mips/mips-boards/xx files.
11
*
12
* Carsten Langgaard,
[email protected]
13
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
14
*
15
* This program is free software; you can redistribute it and/or modify it
16
* under the terms of the GNU General Public License as published by the
17
* Free Software Foundation; either version 2 of the License, or (at your
18
* option) any later version.
19
*
20
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
21
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
23
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
27
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*
31
* You should have received a copy of the GNU General Public License along
32
* with this program; if not, write to the Free Software Foundation, Inc.,
33
* 675 Mass Ave, Cambridge, MA 02139, USA.
34
*/
35
36
#include <linux/module.h>
37
#include <
linux/init.h
>
38
#include <linux/string.h>
39
40
#include <asm/bootinfo.h>
41
42
int
prom_argc
;
43
char
**
prom_argv
;
44
char
**
prom_envp
;
45
46
void
__init
prom_init_cmdline
(
void
)
47
{
48
int
i
;
49
50
for
(i = 1; i <
prom_argc
; i++) {
51
strlcat
(
arcs_cmdline
,
prom_argv
[i],
COMMAND_LINE_SIZE
);
52
if
(i < (prom_argc - 1))
53
strlcat
(
arcs_cmdline
,
" "
,
COMMAND_LINE_SIZE
);
54
}
55
}
56
57
char
*
prom_getenv
(
char
*envname)
58
{
59
/*
60
* Return a pointer to the given environment variable.
61
* YAMON uses "name", "value" pairs, while U-Boot uses "name=value".
62
*/
63
64
char
**
env
=
prom_envp
;
65
int
i
=
strlen
(envname);
66
int
yamon = (*env &&
strchr
(*env,
'='
) ==
NULL
);
67
68
while
(*env) {
69
if
(yamon) {
70
if
(
strcmp
(envname, *env++) == 0)
71
return
*env;
72
}
else
if
(
strncmp
(envname, *env, i) == 0 && (*env)[
i
] ==
'='
)
73
return
*env + i + 1;
74
env++;
75
}
76
77
return
NULL
;
78
}
79
80
static
inline
unsigned
char
str2hexnum
(
unsigned
char
c
)
81
{
82
if
(c >=
'0'
&& c <=
'9'
)
83
return
c -
'0'
;
84
if
(c >=
'a'
&& c <=
'f'
)
85
return
c -
'a'
+ 10;
86
if
(c >=
'A'
&& c <=
'F'
)
87
return
c -
'A'
+ 10;
88
89
return
0;
/* foo */
90
}
91
92
static
inline
void
str2eaddr
(
unsigned
char
*
ea
,
unsigned
char
*
str
)
93
{
94
int
i
;
95
96
for
(i = 0; i < 6; i++) {
97
unsigned
char
num
;
98
99
if
((*str ==
'.'
) || (*str ==
':'
))
100
str++;
101
num =
str2hexnum
(*str++) << 4;
102
num |=
str2hexnum
(*str++);
103
ea[
i
] = num;
104
}
105
}
106
107
int
__init
prom_get_ethernet_addr
(
char
*ethernet_addr)
108
{
109
char
*ethaddr_str;
110
111
/* Check the environment variables first */
112
ethaddr_str =
prom_getenv
(
"ethaddr"
);
113
if
(!ethaddr_str) {
114
/* Check command line */
115
ethaddr_str =
strstr
(
arcs_cmdline
,
"ethaddr="
);
116
if
(!ethaddr_str)
117
return
-1;
118
119
ethaddr_str +=
strlen
(
"ethaddr="
);
120
}
121
122
str2eaddr
(ethernet_addr, ethaddr_str);
123
124
return
0;
125
}
126
127
void
__init
prom_free_prom_memory
(
void
)
128
{
129
}
Generated on Thu Jan 10 2013 13:08:31 for Linux Kernel by
1.8.2