Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
d27cf0ae
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看板
提交
d27cf0ae
编写于
7月 12, 2009
作者:
B
Blue Swirl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Sparc32/Sparc64/PPC: convert m48txx to qdev
Signed-off-by:
N
Blue Swirl
<
blauwirbel@gmail.com
>
上级
f40070c3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
17 deletion
+42
-17
hw/m48t59.c
hw/m48t59.c
+42
-17
未找到文件。
hw/m48t59.c
浏览文件 @
d27cf0ae
...
...
@@ -23,9 +23,9 @@
*/
#include "hw.h"
#include "nvram.h"
#include "isa.h"
#include "qemu-timer.h"
#include "sysemu.h"
#include "sysbus.h"
//#define DEBUG_NVRAM
...
...
@@ -41,11 +41,11 @@
* PPC platform there is also a nvram lock function.
*/
struct
m48t59_t
{
SysBusDevice
busdev
;
/* Model parameters */
int
type
;
// 2 = m48t02, 8 = m48t08, 59 = m48t59
/* Hardware parameters */
qemu_irq
IRQ
;
int
mem_index
;
uint32_t
io_base
;
uint16_t
size
;
/* RTC management */
...
...
@@ -618,32 +618,57 @@ m48t59_t *m48t59_init (qemu_irq IRQ, target_phys_addr_t mem_base,
uint32_t
io_base
,
uint16_t
size
,
int
type
)
{
m48t59_t
*
s
;
target_phys_addr_t
save_base
;
s
=
qemu_mallocz
(
sizeof
(
m48t59_t
));
s
->
buffer
=
qemu_mallocz
(
size
);
s
->
IRQ
=
IRQ
;
s
->
size
=
size
;
s
->
io_base
=
io_base
;
s
->
type
=
type
;
DeviceState
*
dev
;
SysBusDevice
*
s
;
m48t59_t
*
d
;
dev
=
qdev_create
(
NULL
,
"m48t59"
);
qdev_set_prop_int
(
dev
,
"type"
,
type
);
qdev_set_prop_int
(
dev
,
"size"
,
size
);
qdev_set_prop_int
(
dev
,
"io_base"
,
io_base
);
qdev_init
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
sysbus_connect_irq
(
s
,
0
,
IRQ
);
if
(
io_base
!=
0
)
{
register_ioport_read
(
io_base
,
0x04
,
1
,
NVRAM_readb
,
s
);
register_ioport_write
(
io_base
,
0x04
,
1
,
NVRAM_writeb
,
s
);
}
if
(
mem_base
!=
0
)
{
s
->
mem_index
=
cpu_register_io_memory
(
nvram_read
,
nvram_write
,
s
);
cpu_register_physical_memory
(
mem_base
,
size
,
s
->
mem_index
);
sysbus_mmio_map
(
s
,
0
,
mem_base
);
}
if
(
type
==
59
)
{
d
=
FROM_SYSBUS
(
m48t59_t
,
s
);
return
d
;
}
static
void
m48t59_init1
(
SysBusDevice
*
dev
)
{
m48t59_t
*
s
=
FROM_SYSBUS
(
m48t59_t
,
dev
);
int
mem_index
;
s
->
size
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"size"
,
-
1
);
s
->
buffer
=
qemu_mallocz
(
s
->
size
);
sysbus_init_irq
(
dev
,
&
s
->
IRQ
);
s
->
io_base
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"io_base"
,
0
);
s
->
type
=
qdev_get_prop_int
(
&
dev
->
qdev
,
"type"
,
-
1
);
mem_index
=
cpu_register_io_memory
(
nvram_read
,
nvram_write
,
s
);
sysbus_init_mmio
(
dev
,
s
->
size
,
mem_index
);
if
(
s
->
type
==
59
)
{
s
->
alrm_timer
=
qemu_new_timer
(
vm_clock
,
&
alarm_cb
,
s
);
s
->
wd_timer
=
qemu_new_timer
(
vm_clock
,
&
watchdog_cb
,
s
);
}
qemu_get_timedate
(
&
s
->
alarm
,
0
);
qemu_register_reset
(
m48t59_reset
,
s
);
save_base
=
mem_base
?
mem_base
:
io_base
;
register_savevm
(
"m48t59"
,
save_base
,
1
,
m48t59_save
,
m48t59_load
,
s
);
register_savevm
(
"m48t59"
,
-
1
,
1
,
m48t59_save
,
m48t59_load
,
s
)
;
}
return
s
;
static
void
m48t59_register_devices
(
void
)
{
sysbus_register_dev
(
"m48t59"
,
sizeof
(
m48t59_t
),
m48t59_init1
);
}
device_init
(
m48t59_register_devices
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录