Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
0c90c52f
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看板
提交
0c90c52f
编写于
9月 25, 2011
作者:
A
Avi Kivity
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ppc_prep: convert to memory API
Signed-off-by:
N
Avi Kivity
<
avi@redhat.com
>
上级
c92bb2c7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
66 deletion
+41
-66
hw/ppc_prep.c
hw/ppc_prep.c
+41
-66
未找到文件。
hw/ppc_prep.c
浏览文件 @
0c90c52f
...
...
@@ -116,16 +116,17 @@ static uint32_t speaker_ioport_read (void *opaque, uint32_t addr)
/* PCI intack register */
/* Read-only register (?) */
static
void
_PPC_intack_write
(
void
*
opaque
,
target_phys_addr_t
addr
,
uint32_t
valu
e
)
static
void
PPC_intack_write
(
void
*
opaque
,
target_phys_addr_t
addr
,
uint64_t
value
,
unsigned
siz
e
)
{
#if 0
printf("%s: 0x" TARGET_FMT_plx " => 0x%08" PRIx
32
"\n", __func__, addr,
printf("%s: 0x" TARGET_FMT_plx " => 0x%08" PRIx
64
"\n", __func__, addr,
value);
#endif
}
static
inline
uint32_t
_PPC_intack_read
(
target_phys_addr_t
addr
)
static
uint64_t
PPC_intack_read
(
void
*
opaque
,
target_phys_addr_t
addr
,
unsigned
size
)
{
uint32_t
retval
=
0
;
...
...
@@ -139,31 +140,10 @@ static inline uint32_t _PPC_intack_read(target_phys_addr_t addr)
return
retval
;
}
static
uint32_t
PPC_intack_readb
(
void
*
opaque
,
target_phys_addr_t
addr
)
{
return
_PPC_intack_read
(
addr
);
}
static
uint32_t
PPC_intack_readw
(
void
*
opaque
,
target_phys_addr_t
addr
)
{
return
_PPC_intack_read
(
addr
);
}
static
uint32_t
PPC_intack_readl
(
void
*
opaque
,
target_phys_addr_t
addr
)
{
return
_PPC_intack_read
(
addr
);
}
static
CPUWriteMemoryFunc
*
const
PPC_intack_write
[]
=
{
&
_PPC_intack_write
,
&
_PPC_intack_write
,
&
_PPC_intack_write
,
};
static
CPUReadMemoryFunc
*
const
PPC_intack_read
[]
=
{
&
PPC_intack_readb
,
&
PPC_intack_readw
,
&
PPC_intack_readl
,
static
const
MemoryRegionOps
PPC_intack_ops
=
{
.
read
=
PPC_intack_read
,
.
write
=
PPC_intack_write
,
.
endianness
=
DEVICE_LITTLE_ENDIAN
,
};
/* PowerPC control and status registers */
...
...
@@ -244,17 +224,14 @@ static uint32_t PPC_XCSR_readl (void *opaque, target_phys_addr_t addr)
return retval;
}
static CPUWriteMemoryFunc * const PPC_XCSR_write[] = {
&PPC_XCSR_writeb,
&PPC_XCSR_writew,
&PPC_XCSR_writel,
static const MemoryRegionOps PPC_XCSR_ops = {
.old_mmio = {
.read = { PPC_XCSR_readb, PPC_XCSR_readw, PPC_XCSR_readl, },
.write = { PPC_XCSR_writeb, PPC_XCSR_writew, PPC_XCSR_writel, },
},
.endianness = DEVICE_LITTLE_ENDIAN,
};
static CPUReadMemoryFunc * const PPC_XCSR_read[] = {
&PPC_XCSR_readb,
&PPC_XCSR_readw,
&PPC_XCSR_readl,
};
#endif
/* Fake super-io ports for PREP platform (Intel 82378ZB) */
...
...
@@ -503,16 +480,12 @@ static uint32_t PPC_prep_io_readl (void *opaque, target_phys_addr_t addr)
return
ret
;
}
static
CPUWriteMemoryFunc
*
const
PPC_prep_io_write
[]
=
{
&
PPC_prep_io_writeb
,
&
PPC_prep_io_writew
,
&
PPC_prep_io_writel
,
};
static
CPUReadMemoryFunc
*
const
PPC_prep_io_read
[]
=
{
&
PPC_prep_io_readb
,
&
PPC_prep_io_readw
,
&
PPC_prep_io_readl
,
static
const
MemoryRegionOps
PPC_prep_io_ops
=
{
.
old_mmio
=
{
.
read
=
{
PPC_prep_io_readb
,
PPC_prep_io_readw
,
PPC_prep_io_readl
},
.
write
=
{
PPC_prep_io_writeb
,
PPC_prep_io_writew
,
PPC_prep_io_writel
},
},
.
endianness
=
DEVICE_LITTLE_ENDIAN
,
};
#define NVRAM_SIZE 0x2000
...
...
@@ -534,13 +507,19 @@ static void ppc_prep_init (ram_addr_t ram_size,
const
char
*
initrd_filename
,
const
char
*
cpu_model
)
{
MemoryRegion
*
sysmem
=
get_system_memory
();
CPUState
*
env
=
NULL
;
char
*
filename
;
nvram_t
nvram
;
M48t59State
*
m48t59
;
int
PPC_io_memory
;
MemoryRegion
*
PPC_io_memory
=
g_new
(
MemoryRegion
,
1
);
MemoryRegion
*
intack
=
g_new
(
MemoryRegion
,
1
);
#if 0
MemoryRegion *xcsr = g_new(MemoryRegion, 1);
#endif
int
linux_boot
,
i
,
nb_nics1
,
bios_size
;
ram_addr_t
ram_offset
,
bios_offset
;
MemoryRegion
*
ram
=
g_new
(
MemoryRegion
,
1
);
MemoryRegion
*
bios
=
g_new
(
MemoryRegion
,
1
);
uint32_t
kernel_base
,
initrd_base
;
long
kernel_size
,
initrd_size
;
PCIBus
*
pci_bus
;
...
...
@@ -574,11 +553,11 @@ static void ppc_prep_init (ram_addr_t ram_size,
}
/* allocate RAM */
ram_offset
=
qemu_ram_alloc
(
NULL
,
"ppc_prep.ram"
,
ram_size
);
cpu_register_physical_memory
(
0
,
ram_size
,
ram_offset
);
memory_region_init_ram
(
ram
,
NULL
,
"ppc_prep.ram"
,
ram_size
);
memory_region_add_subregion
(
sysmem
,
0
,
ram
);
/* allocate and load BIOS */
bios_offset
=
qemu_ram_alloc
(
NULL
,
"ppc_prep.bios"
,
BIOS_SIZE
);
memory_region_init_ram
(
bios
,
NULL
,
"ppc_prep.bios"
,
BIOS_SIZE
);
if
(
bios_name
==
NULL
)
bios_name
=
BIOS_FILENAME
;
filename
=
qemu_find_file
(
QEMU_FILE_TYPE_BIOS
,
bios_name
);
...
...
@@ -591,8 +570,8 @@ static void ppc_prep_init (ram_addr_t ram_size,
target_phys_addr_t
bios_addr
;
bios_size
=
(
bios_size
+
0xfff
)
&
~
0xfff
;
bios_addr
=
(
uint32_t
)(
-
bios_size
);
cpu_register_physical_memory
(
bios_addr
,
bios_size
,
bios_offset
|
IO_MEM_ROM
);
memory_region_set_readonly
(
bios
,
true
);
memory_region_add_subregion
(
sysmem
,
bios_addr
,
bios
);
bios_size
=
load_image_targphys
(
filename
,
bios_addr
,
bios_size
);
}
if
(
bios_size
<
0
||
bios_size
>
BIOS_SIZE
)
{
...
...
@@ -655,10 +634,9 @@ static void ppc_prep_init (ram_addr_t ram_size,
isa_bus_irqs
(
i8259
);
// pci_bus = i440fx_init();
/* Register 8 MB of ISA IO space (needed for non-contiguous map) */
PPC_io_memory
=
cpu_register_io_memory
(
PPC_prep_io_read
,
PPC_prep_io_write
,
sysctrl
,
DEVICE_LITTLE_ENDIAN
);
cpu_register_physical_memory
(
0x80000000
,
0x00800000
,
PPC_io_memory
);
memory_region_init_io
(
PPC_io_memory
,
&
PPC_prep_io_ops
,
sysctrl
,
"ppc-io"
,
0x00800000
);
memory_region_add_subregion
(
sysmem
,
0x80000000
,
PPC_io_memory
);
/* init basic PC hardware */
pci_vga_init
(
pci_bus
);
...
...
@@ -713,15 +691,12 @@ static void ppc_prep_init (ram_addr_t ram_size,
register_ioport_read
(
0x0800
,
0x52
,
1
,
&
PREP_io_800_readb
,
sysctrl
);
register_ioport_write
(
0x0800
,
0x52
,
1
,
&
PREP_io_800_writeb
,
sysctrl
);
/* PCI intack location */
PPC_io_memory
=
cpu_register_io_memory
(
PPC_intack_read
,
PPC_intack_write
,
NULL
,
DEVICE_LITTLE_ENDIAN
);
cpu_register_physical_memory
(
0xBFFFFFF0
,
0x4
,
PPC_io_memory
);
memory_region_init_io
(
intack
,
&
PPC_intack_ops
,
NULL
,
"ppc-intack"
,
4
);
memory_region_add_subregion
(
sysmem
,
0xBFFFFFF0
,
intack
);
/* PowerPC control and status register group */
#if 0
PPC_io_memory = cpu_register_io_memory(PPC_XCSR_read, PPC_XCSR_write,
NULL, DEVICE_LITTLE_ENDIAN);
cpu_register_physical_memory(0xFEFF0000, 0x1000, PPC_io_memory);
memory_region_init_io(xcsr, &PPC_XCSR_ops, NULL, "ppc-xcsr", 0x1000);
memory_region_add_subregion(sysmem, 0xFEFF0000, xcsr);
#endif
if
(
usb_enabled
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录