Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
c938ada2
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c938ada2
编写于
11月 14, 2009
作者:
A
Aurelien Jarno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mips-malta: fix reset
(broken by
45a50b16
) Signed-off-by:
N
Aurelien Jarno
<
aurelien@aurel32.net
>
上级
51cc2e78
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
25 deletion
+27
-25
hw/mips_malta.c
hw/mips_malta.c
+27
-25
未找到文件。
hw/mips_malta.c
浏览文件 @
c938ada2
...
...
@@ -655,41 +655,37 @@ static void write_bootloader (CPUState *env, uint8_t *base,
}
static
void
prom_set
(
int
index
,
const
char
*
string
,
...)
static
void
prom_set
(
uint32_t
*
prom_buf
,
int
index
,
const
char
*
string
,
...)
{
char
buf
[
ENVP_ENTRY_SIZE
];
target_phys_addr_t
p
;
va_list
ap
;
int32_t
table_addr
;
if
(
index
>=
ENVP_NB_ENTRIES
)
return
;
p
=
ENVP_ADDR
+
VIRT_TO_PHYS_ADDEND
+
index
*
4
;
if
(
string
==
NULL
)
{
stl_phys
(
p
,
0
)
;
prom_buf
[
index
]
=
0
;
return
;
}
table_addr
=
ENVP_ADDR
+
sizeof
(
int32_t
)
*
ENVP_NB_ENTRIES
+
index
*
ENVP_ENTRY_SIZE
;
stl_phys
(
p
,
table_addr
);
table_addr
=
sizeof
(
int32_t
)
*
ENVP_NB_ENTRIES
+
index
*
ENVP_ENTRY_SIZE
;
prom_buf
[
index
]
=
tswap32
(
ENVP_ADDR
+
table_addr
);
va_start
(
ap
,
string
);
vsnprintf
(
buf
,
ENVP_ENTRY_SIZE
,
string
,
ap
);
vsnprintf
(
(
char
*
)
prom_buf
+
table_addr
,
ENVP_ENTRY_SIZE
,
string
,
ap
);
va_end
(
ap
);
pstrcpy_targphys
(
"prom"
,
table_addr
+
VIRT_TO_PHYS_ADDEND
,
ENVP_ENTRY_SIZE
,
buf
);
}
/* Kernel */
static
int64_t
load_kernel
(
void
)
{
int64_t
kernel_entry
,
kernel_low
,
kernel_high
;
int
index
=
0
;
long
initrd_size
;
ram_addr_t
initrd_offset
;
int
big_endian
;
uint32_t
*
prom_buf
;
long
prom_size
;
int
prom_index
=
0
;
#ifdef TARGET_WORDS_BIGENDIAN
big_endian
=
1
;
...
...
@@ -729,21 +725,27 @@ static int64_t load_kernel (void)
}
}
/* Store command line. */
prom_set
(
index
++
,
loaderparams
.
kernel_filename
);
if
(
initrd_size
>
0
)
prom_set
(
index
++
,
"rd_start=0x"
TARGET_FMT_lx
" rd_size=%li %s"
,
/* Setup prom parameters. */
prom_size
=
ENVP_NB_ENTRIES
*
(
sizeof
(
int32_t
)
+
ENVP_ENTRY_SIZE
);
prom_buf
=
qemu_malloc
(
prom_size
);
prom_set
(
prom_buf
,
prom_index
++
,
loaderparams
.
kernel_filename
);
if
(
initrd_size
>
0
)
{
prom_set
(
prom_buf
,
prom_index
++
,
"rd_start=0x"
TARGET_FMT_lx
" rd_size=%li %s"
,
PHYS_TO_VIRT
(
initrd_offset
),
initrd_size
,
loaderparams
.
kernel_cmdline
);
else
prom_set
(
index
++
,
loaderparams
.
kernel_cmdline
);
/* Setup minimum environment variables */
prom_set
(
index
++
,
"memsize"
);
prom_set
(
index
++
,
"%i"
,
loaderparams
.
ram_size
);
prom_set
(
index
++
,
"modetty0"
);
prom_set
(
index
++
,
"38400n8r"
);
prom_set
(
index
++
,
NULL
);
}
else
{
prom_set
(
prom_buf
,
prom_index
++
,
loaderparams
.
kernel_cmdline
);
}
prom_set
(
prom_buf
,
prom_index
++
,
"memsize"
);
prom_set
(
prom_buf
,
prom_index
++
,
"%i"
,
loaderparams
.
ram_size
);
prom_set
(
prom_buf
,
prom_index
++
,
"modetty0"
);
prom_set
(
prom_buf
,
prom_index
++
,
"38400n8r"
);
prom_set
(
prom_buf
,
prom_index
++
,
NULL
);
rom_add_blob_fixed
(
"prom"
,
prom_buf
,
prom_size
,
ENVP_ADDR
+
VIRT_TO_PHYS_ADDEND
);
return
kernel_entry
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录