Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
0027b06d
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看板
提交
0027b06d
编写于
5月 14, 2009
作者:
P
Paul Brook
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM PCI host qdev conversion
Signed-off-by:
N
Paul Brook
<
paul@codesourcery.com
>
上级
0e058a8a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
62 addition
and
37 deletion
+62
-37
hw/primecell.h
hw/primecell.h
+0
-3
hw/realview.c
hw/realview.c
+4
-1
hw/versatile_pci.c
hw/versatile_pci.c
+54
-32
hw/versatilepb.c
hw/versatilepb.c
+4
-1
未找到文件。
hw/primecell.h
浏览文件 @
0027b06d
...
@@ -26,7 +26,4 @@ extern qemu_irq *mpcore_irq_init(qemu_irq *cpu_irq);
...
@@ -26,7 +26,4 @@ extern qemu_irq *mpcore_irq_init(qemu_irq *cpu_irq);
/* arm_sysctl.c */
/* arm_sysctl.c */
void
arm_sysctl_init
(
uint32_t
base
,
uint32_t
sys_id
);
void
arm_sysctl_init
(
uint32_t
base
,
uint32_t
sys_id
);
/* versatile_pci.c */
PCIBus
*
pci_vpb_init
(
qemu_irq
*
pic
,
int
realview
);
#endif
#endif
hw/realview.c
浏览文件 @
0027b06d
...
@@ -32,6 +32,7 @@ static void realview_init(ram_addr_t ram_size,
...
@@ -32,6 +32,7 @@ static void realview_init(ram_addr_t ram_size,
CPUState
*
env
;
CPUState
*
env
;
ram_addr_t
ram_offset
;
ram_addr_t
ram_offset
;
qemu_irq
*
pic
;
qemu_irq
*
pic
;
DeviceState
*
dev
;
PCIBus
*
pci_bus
;
PCIBus
*
pci_bus
;
NICInfo
*
nd
;
NICInfo
*
nd
;
int
n
;
int
n
;
...
@@ -100,7 +101,9 @@ static void realview_init(ram_addr_t ram_size,
...
@@ -100,7 +101,9 @@ static void realview_init(ram_addr_t ram_size,
sysbus_create_simple
(
"pl031"
,
0x10017000
,
pic
[
10
]);
sysbus_create_simple
(
"pl031"
,
0x10017000
,
pic
[
10
]);
pci_bus
=
pci_vpb_init
(
pic
+
48
,
1
);
dev
=
sysbus_create_varargs
(
"realview_pci"
,
0x60000000
,
pic
[
48
],
pic
[
49
],
pic
[
50
],
pic
[
51
],
NULL
);
pci_bus
=
qdev_get_child_bus
(
dev
,
"pci"
);
if
(
usb_enabled
)
{
if
(
usb_enabled
)
{
usb_ohci_init_pci
(
pci_bus
,
3
,
-
1
);
usb_ohci_init_pci
(
pci_bus
,
3
,
-
1
);
}
}
...
...
hw/versatile_pci.c
浏览文件 @
0027b06d
/*
/*
* ARM Versatile/PB PCI host controller
* ARM Versatile/PB PCI host controller
*
*
* Copyright (c) 2006 CodeSourcery.
* Copyright (c) 2006
-2009
CodeSourcery.
* Written by Paul Brook
* Written by Paul Brook
*
*
* This code is licenced under the LGPL.
* This code is licenced under the LGPL.
*/
*/
#include "
hw
.h"
#include "
sysbus
.h"
#include "pci.h"
#include "pci.h"
#include "primecell.h"
typedef
struct
{
SysBusDevice
busdev
;
qemu_irq
irq
[
4
];
int
realview
;
int
mem_config
;
}
PCIVPBState
;
static
inline
uint32_t
vpb_pci_config_addr
(
target_phys_addr_t
addr
)
static
inline
uint32_t
vpb_pci_config_addr
(
target_phys_addr_t
addr
)
{
{
...
@@ -89,44 +95,51 @@ static void pci_vpb_set_irq(qemu_irq *pic, int irq_num, int level)
...
@@ -89,44 +95,51 @@ static void pci_vpb_set_irq(qemu_irq *pic, int irq_num, int level)
qemu_set_irq
(
pic
[
irq_num
],
level
);
qemu_set_irq
(
pic
[
irq_num
],
level
);
}
}
PCIBus
*
pci_vpb_init
(
qemu_irq
*
pic
,
int
realview
)
static
void
pci_vpb_map
(
SysBusDevice
*
dev
,
target_phys_addr_t
base
)
{
{
PCIBus
*
s
;
PCIVPBState
*
s
=
(
PCIVPBState
*
)
dev
;
PCIDevice
*
d
;
/* Selfconfig area. */
int
mem_config
;
cpu_register_physical_memory
(
base
+
0x01000000
,
0x1000000
,
s
->
mem_config
);
uint32_t
base
;
/* Normal config area. */
const
char
*
name
;
cpu_register_physical_memory
(
base
+
0x02000000
,
0x1000000
,
s
->
mem_config
);
qemu_irq
*
irqs
;
if
(
s
->
realview
)
{
/* IO memory area. */
isa_mmio_init
(
base
+
0x03000000
,
0x00100000
);
}
}
static
void
pci_vpb_init
(
SysBusDevice
*
dev
)
{
PCIVPBState
*
s
=
FROM_SYSBUS
(
PCIVPBState
,
dev
);
PCIBus
*
bus
;
int
i
;
int
i
;
irqs
=
qemu_mallocz
(
sizeof
(
qemu_irq
)
*
4
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
irqs
[
i
]
=
pic
[
i
];
sysbus_init_irq
(
dev
,
&
s
->
irq
[
i
]);
}
if
(
realview
)
{
base
=
0x60000000
;
name
=
"RealView EB PCI Controller"
;
}
else
{
base
=
0x40000000
;
name
=
"Versatile/PB PCI Controller"
;
}
}
s
=
pci_register_bus
(
pci_vpb_set_irq
,
pci_vpb_map_irq
,
irqs
,
11
<<
3
,
4
);
bus
=
pci_register_bus
(
pci_vpb_set_irq
,
pci_vpb_map_irq
,
s
->
irq
,
11
<<
3
,
4
);
qdev_attach_child_bus
(
&
dev
->
qdev
,
"pci"
,
bus
);
/* ??? Register memory space. */
/* ??? Register memory space. */
mem_config
=
cpu_register_io_memory
(
0
,
pci_vpb_config_read
,
s
->
mem_config
=
cpu_register_io_memory
(
0
,
pci_vpb_config_read
,
pci_vpb_config_write
,
s
);
pci_vpb_config_write
,
bus
);
/* Selfconfig area. */
sysbus_init_mmio_cb
(
dev
,
0x04000000
,
pci_vpb_map
);
cpu_register_physical_memory
(
base
+
0x01000000
,
0x1000000
,
mem_config
);
/* Normal config area. */
cpu_register_physical_memory
(
base
+
0x02000000
,
0x1000000
,
mem_config
);
d
=
pci_register_device
(
s
,
name
,
sizeof
(
PCIDevice
),
-
1
,
NULL
,
NULL
);
pci_create_simple
(
bus
,
-
1
,
"versatile_pci_host"
);
}
if
(
realview
)
{
static
void
pci_realview_init
(
SysBusDevice
*
dev
)
/* IO memory area. */
{
isa_mmio_init
(
base
+
0x03000000
,
0x00100000
);
PCIVPBState
*
s
=
FROM_SYSBUS
(
PCIVPBState
,
dev
);
}
s
->
realview
=
1
;
pci_vpb_init
(
dev
);
}
static
void
versatile_pci_host_init
(
PCIDevice
*
d
)
{
pci_config_set_vendor_id
(
d
->
config
,
PCI_VENDOR_ID_XILINX
);
pci_config_set_vendor_id
(
d
->
config
,
PCI_VENDOR_ID_XILINX
);
/* Both boards have the same device ID. Oh well. */
/* Both boards have the same device ID. Oh well. */
pci_config_set_device_id
(
d
->
config
,
PCI_DEVICE_ID_XILINX_XC2VP30
);
pci_config_set_device_id
(
d
->
config
,
PCI_DEVICE_ID_XILINX_XC2VP30
);
...
@@ -138,6 +151,15 @@ PCIBus *pci_vpb_init(qemu_irq *pic, int realview)
...
@@ -138,6 +151,15 @@ PCIBus *pci_vpb_init(qemu_irq *pic, int realview)
d
->
config
[
0x09
]
=
0x00
;
// programming i/f
d
->
config
[
0x09
]
=
0x00
;
// programming i/f
pci_config_set_class
(
d
->
config
,
PCI_CLASS_PROCESSOR_CO
);
pci_config_set_class
(
d
->
config
,
PCI_CLASS_PROCESSOR_CO
);
d
->
config
[
0x0D
]
=
0x10
;
// latency_timer
d
->
config
[
0x0D
]
=
0x10
;
// latency_timer
}
return
s
;
static
void
versatile_pci_register_devices
(
void
)
{
sysbus_register_dev
(
"versatile_pci"
,
sizeof
(
PCIVPBState
),
pci_vpb_init
);
sysbus_register_dev
(
"realview_pci"
,
sizeof
(
PCIVPBState
),
pci_realview_init
);
pci_qdev_register
(
"versatile_pci_host"
,
sizeof
(
PCIDevice
),
versatile_pci_host_init
);
}
}
device_init
(
versatile_pci_register_devices
)
hw/versatilepb.c
浏览文件 @
0027b06d
...
@@ -199,7 +199,10 @@ static void versatile_init(ram_addr_t ram_size,
...
@@ -199,7 +199,10 @@ static void versatile_init(ram_addr_t ram_size,
sysbus_create_simple
(
"pl050_keyboard"
,
0x10006000
,
sic
[
3
]);
sysbus_create_simple
(
"pl050_keyboard"
,
0x10006000
,
sic
[
3
]);
sysbus_create_simple
(
"pl050_mouse"
,
0x10007000
,
sic
[
4
]);
sysbus_create_simple
(
"pl050_mouse"
,
0x10007000
,
sic
[
4
]);
pci_bus
=
pci_vpb_init
(
sic
+
27
,
0
);
dev
=
sysbus_create_varargs
(
"versatile_pci"
,
0x40000000
,
sic
[
27
],
sic
[
28
],
sic
[
29
],
sic
[
30
],
NULL
);
pci_bus
=
qdev_get_child_bus
(
dev
,
"pci"
);
/* The Versatile PCI bridge does not provide access to PCI IO space,
/* The Versatile PCI bridge does not provide access to PCI IO space,
so many of the qemu PCI devices are not useable. */
so many of the qemu PCI devices are not useable. */
for
(
n
=
0
;
n
<
nb_nics
;
n
++
)
{
for
(
n
=
0
;
n
<
nb_nics
;
n
++
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录