Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
12a71a02
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,发现更多精彩内容 >>
提交
12a71a02
编写于
7月 20, 2009
作者:
B
Blue Swirl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up fdc qdev conversion
Signed-off-by:
N
Blue Swirl
<
blauwirbel@gmail.com
>
上级
a71836de
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
65 addition
and
74 deletion
+65
-74
hw/fdc.c
hw/fdc.c
+65
-74
未找到文件。
hw/fdc.c
浏览文件 @
12a71a02
...
@@ -477,7 +477,6 @@ struct fdctrl_t {
...
@@ -477,7 +477,6 @@ struct fdctrl_t {
/* HW */
/* HW */
qemu_irq
irq
;
qemu_irq
irq
;
int
dma_chann
;
int
dma_chann
;
target_phys_addr_t
io_base
;
/* Controller state */
/* Controller state */
QEMUTimer
*
result_timer
;
QEMUTimer
*
result_timer
;
uint8_t
sra
;
uint8_t
sra
;
...
@@ -512,8 +511,6 @@ struct fdctrl_t {
...
@@ -512,8 +511,6 @@ struct fdctrl_t {
/* Floppy drives */
/* Floppy drives */
fdrive_t
drives
[
MAX_FD
];
fdrive_t
drives
[
MAX_FD
];
int
reset_sensei
;
int
reset_sensei
;
uint32_t
strict_io
;
uint32_t
mem_mapped
;
};
};
static
uint32_t
fdctrl_read
(
void
*
opaque
,
uint32_t
reg
)
static
uint32_t
fdctrl_read
(
void
*
opaque
,
uint32_t
reg
)
...
@@ -1855,39 +1852,12 @@ static void fdctrl_result_timer(void *opaque)
...
@@ -1855,39 +1852,12 @@ static void fdctrl_result_timer(void *opaque)
}
}
/* Init functions */
/* Init functions */
static
void
fdctrl_init_common
(
fdctrl_t
*
fdctrl
,
int
dma_chann
,
static
void
fdctrl_connect_drives
(
fdctrl_t
*
fdctrl
,
BlockDriverState
**
fds
)
target_phys_addr_t
io_base
,
BlockDriverState
**
fds
)
{
{
int
i
,
j
;
unsigned
int
i
;
/* Fill 'command_to_handler' lookup table */
for
(
i
=
ARRAY_SIZE
(
handlers
)
-
1
;
i
>=
0
;
i
--
)
{
for
(
j
=
0
;
j
<
sizeof
(
command_to_handler
);
j
++
)
{
if
((
j
&
handlers
[
i
].
mask
)
==
handlers
[
i
].
value
)
command_to_handler
[
j
]
=
i
;
}
}
FLOPPY_DPRINTF
(
"init controller
\n
"
);
fdctrl
->
fifo
=
qemu_memalign
(
512
,
FD_SECTOR_LEN
);
fdctrl
->
result_timer
=
qemu_new_timer
(
vm_clock
,
fdctrl_result_timer
,
fdctrl
);
fdctrl
->
version
=
0x90
;
/* Intel 82078 controller */
fdctrl
->
dma_chann
=
dma_chann
;
fdctrl
->
io_base
=
io_base
;
fdctrl
->
config
=
FD_CONFIG_EIS
|
FD_CONFIG_EFIFO
;
/* Implicit seek, polling & FIFO enabled */
if
(
fdctrl
->
dma_chann
!=
-
1
)
{
DMA_register_channel
(
dma_chann
,
&
fdctrl_transfer_handler
,
fdctrl
);
}
for
(
i
=
0
;
i
<
MAX_FD
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_FD
;
i
++
)
{
fd_init
(
&
fdctrl
->
drives
[
i
],
fds
[
i
]);
fd_init
(
&
fdctrl
->
drives
[
i
],
fds
[
i
]);
}
fdctrl_external_reset
(
fdctrl
);
register_savevm
(
"fdc"
,
io_base
,
2
,
fdc_save
,
fdc_load
,
fdctrl
);
qemu_register_reset
(
fdctrl_external_reset
,
fdctrl
);
for
(
i
=
0
;
i
<
MAX_FD
;
i
++
)
{
fd_revalidate
(
&
fdctrl
->
drives
[
i
]);
fd_revalidate
(
&
fdctrl
->
drives
[
i
]);
}
}
}
}
...
@@ -1901,9 +1871,6 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
...
@@ -1901,9 +1871,6 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
fdctrl_t
*
fdctrl
;
fdctrl_t
*
fdctrl
;
dev
=
qdev_create
(
NULL
,
"fdc"
);
dev
=
qdev_create
(
NULL
,
"fdc"
);
qdev_prop_set_uint32
(
dev
,
"strict_io"
,
0
);
qdev_prop_set_uint32
(
dev
,
"mem_mapped"
,
mem_mapped
);
qdev_prop_set_uint32
(
dev
,
"sun4m"
,
0
);
qdev_init
(
dev
);
qdev_init
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
sysbus_connect_irq
(
s
,
0
,
irq
);
sysbus_connect_irq
(
s
,
0
,
irq
);
...
@@ -1920,8 +1887,10 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
...
@@ -1920,8 +1887,10 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
register_ioport_write
((
uint32_t
)
io_base
+
0x07
,
1
,
1
,
register_ioport_write
((
uint32_t
)
io_base
+
0x07
,
1
,
1
,
&
fdctrl_write_port
,
fdctrl
);
&
fdctrl_write_port
,
fdctrl
);
}
}
fdctrl
->
dma_chann
=
dma_chann
;
DMA_register_channel
(
dma_chann
,
&
fdctrl_transfer_handler
,
fdctrl
);
fdctrl_
init_common
(
fdctrl
,
dma_chann
,
io_base
,
fds
);
fdctrl_
connect_drives
(
fdctrl
,
fds
);
return
fdctrl
;
return
fdctrl
;
}
}
...
@@ -1933,10 +1902,7 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
...
@@ -1933,10 +1902,7 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
SysBusDevice
*
s
;
SysBusDevice
*
s
;
fdctrl_t
*
fdctrl
;
fdctrl_t
*
fdctrl
;
dev
=
qdev_create
(
NULL
,
"fdc"
);
dev
=
qdev_create
(
NULL
,
"SUNW,fdtwo"
);
qdev_prop_set_uint32
(
dev
,
"strict_io"
,
1
);
qdev_prop_set_uint32
(
dev
,
"mem_mapped"
,
1
);
qdev_prop_set_uint32
(
dev
,
"sun4m"
,
1
);
qdev_init
(
dev
);
qdev_init
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
s
=
sysbus_from_qdev
(
dev
);
sysbus_connect_irq
(
s
,
0
,
irq
);
sysbus_connect_irq
(
s
,
0
,
irq
);
...
@@ -1944,60 +1910,85 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
...
@@ -1944,60 +1910,85 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
*
fdc_tc
=
qdev_get_gpio_in
(
dev
,
0
);
*
fdc_tc
=
qdev_get_gpio_in
(
dev
,
0
);
fdctrl
=
FROM_SYSBUS
(
fdctrl_t
,
s
);
fdctrl
=
FROM_SYSBUS
(
fdctrl_t
,
s
);
fdctrl_init_common
(
fdctrl
,
-
1
,
io_base
,
fds
);
fdctrl
->
dma_chann
=
-
1
;
fdctrl_connect_drives
(
fdctrl
,
fds
);
return
fdctrl
;
return
fdctrl
;
}
}
static
void
fdc_init1
(
SysBusDevice
*
dev
)
static
void
fdctrl_init_common
(
SysBusDevice
*
dev
,
fdctrl_t
*
fdctrl
,
int
is_sun4m
,
int
io
)
{
{
fdctrl_t
*
s
=
FROM_SYSBUS
(
fdctrl_t
,
dev
)
;
int
i
,
j
;
int
io
;
static
int
command_tables_inited
=
0
;
sysbus_init_irq
(
dev
,
&
s
->
irq
);
sysbus_init_irq
(
dev
,
&
fdctrl
->
irq
);
qdev_init_gpio_in
(
&
dev
->
qdev
,
fdctrl_handle_tc
,
1
);
qdev_init_gpio_in
(
&
dev
->
qdev
,
fdctrl_handle_tc
,
1
);
if
(
s
->
strict_io
)
{
io
=
cpu_register_io_memory
(
fdctrl_mem_read_strict
,
fdctrl_mem_write_strict
,
s
);
}
else
{
io
=
cpu_register_io_memory
(
fdctrl_mem_read
,
fdctrl_mem_write
,
s
);
}
sysbus_init_mmio
(
dev
,
0x08
,
io
);
sysbus_init_mmio
(
dev
,
0x08
,
io
);
/* Fill 'command_to_handler' lookup table */
if
(
!
command_tables_inited
)
{
command_tables_inited
=
1
;
for
(
i
=
ARRAY_SIZE
(
handlers
)
-
1
;
i
>=
0
;
i
--
)
{
for
(
j
=
0
;
j
<
sizeof
(
command_to_handler
);
j
++
)
{
if
((
j
&
handlers
[
i
].
mask
)
==
handlers
[
i
].
value
)
{
command_to_handler
[
j
]
=
i
;
}
}
}
}
FLOPPY_DPRINTF
(
"init controller
\n
"
);
fdctrl
->
fifo
=
qemu_memalign
(
512
,
FD_SECTOR_LEN
);
fdctrl
->
result_timer
=
qemu_new_timer
(
vm_clock
,
fdctrl_result_timer
,
fdctrl
);
fdctrl
->
version
=
0x90
;
/* Intel 82078 controller */
fdctrl
->
config
=
FD_CONFIG_EIS
|
FD_CONFIG_EFIFO
;
/* Implicit seek, polling & FIFO enabled */
fdctrl
->
sun4m
=
is_sun4m
;
fdctrl_external_reset
(
fdctrl
);
register_savevm
(
"fdc"
,
-
1
,
2
,
fdc_save
,
fdc_load
,
fdctrl
);
qemu_register_reset
(
fdctrl_external_reset
,
fdctrl
);
}
}
static
void
fdc_init1
(
SysBusDevice
*
dev
)
{
fdctrl_t
*
fdctrl
=
FROM_SYSBUS
(
fdctrl_t
,
dev
);
int
io
;
io
=
cpu_register_io_memory
(
fdctrl_mem_read
,
fdctrl_mem_write
,
fdctrl
);
fdctrl_init_common
(
dev
,
fdctrl
,
0
,
io
);
}
static
void
sun4m_fdc_init1
(
SysBusDevice
*
dev
)
{
fdctrl_t
*
fdctrl
=
FROM_SYSBUS
(
fdctrl_t
,
dev
);
int
io
;
io
=
cpu_register_io_memory
(
fdctrl_mem_read_strict
,
fdctrl_mem_write_strict
,
fdctrl
);
fdctrl_init_common
(
dev
,
fdctrl
,
1
,
io
);
}
static
SysBusDeviceInfo
fdc_info
=
{
static
SysBusDeviceInfo
fdc_info
=
{
.
init
=
fdc_init1
,
.
init
=
fdc_init1
,
.
qdev
.
name
=
"fdc"
,
.
qdev
.
name
=
"fdc"
,
.
qdev
.
size
=
sizeof
(
fdctrl_t
),
.
qdev
.
size
=
sizeof
(
fdctrl_t
),
.
qdev
.
props
=
(
Property
[])
{
};
{
.
name
=
"io_base"
,
static
SysBusDeviceInfo
sun4m_fdc_info
=
{
.
info
=
&
qdev_prop_taddr
,
.
init
=
sun4m_fdc_init1
,
.
offset
=
offsetof
(
fdctrl_t
,
io_base
),
.
qdev
.
name
=
"SUNW,fdtwo"
,
},
.
qdev
.
size
=
sizeof
(
fdctrl_t
),
{
.
name
=
"strict_io"
,
.
info
=
&
qdev_prop_uint32
,
.
offset
=
offsetof
(
fdctrl_t
,
strict_io
),
},
{
.
name
=
"mem_mapped"
,
.
info
=
&
qdev_prop_uint32
,
.
offset
=
offsetof
(
fdctrl_t
,
mem_mapped
),
},
{
.
name
=
"sun4m"
,
.
info
=
&
qdev_prop_uint32
,
.
offset
=
offsetof
(
fdctrl_t
,
sun4m
),
},
{
/* end of properties */
}
}
};
};
static
void
fdc_register_devices
(
void
)
static
void
fdc_register_devices
(
void
)
{
{
sysbus_register_withprop
(
&
fdc_info
);
sysbus_register_withprop
(
&
fdc_info
);
sysbus_register_withprop
(
&
sun4m_fdc_info
);
}
}
device_init
(
fdc_register_devices
)
device_init
(
fdc_register_devices
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录