提交 acfbe712 编写于 作者: B Blue Swirl

sparc: fix floppy TC line setup

The qemu_irq for Terminal Count (TC) line between FDC and Slavio misc
device was created only after use, spotted by Clang compiler. Also,
it was not created if the FDC didn't exist.

Rearrange code to fix order. Always create the TC line.
Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
上级 cea936b1
...@@ -832,6 +832,10 @@ static void cpu_devinit(const char *cpu_model, unsigned int id, ...@@ -832,6 +832,10 @@ static void cpu_devinit(const char *cpu_model, unsigned int id,
env->prom_addr = prom_addr; env->prom_addr = prom_addr;
} }
static void dummy_fdc_tc(void *opaque, int irq, int level)
{
}
static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
const char *boot_device, const char *boot_device,
const char *kernel_filename, const char *kernel_filename,
...@@ -942,9 +946,6 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, ...@@ -942,9 +946,6 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
serial_hds[0], serial_hds[1], ESCC_CLOCK, 1); serial_hds[0], serial_hds[1], ESCC_CLOCK, 1);
cpu_halt = qemu_allocate_irqs(cpu_halt_signal, NULL, 1); cpu_halt = qemu_allocate_irqs(cpu_halt_signal, NULL, 1);
slavio_misc_init(hwdef->slavio_base, hwdef->aux1_base, hwdef->aux2_base,
slavio_irq[30], fdc_tc);
if (hwdef->apc_base) { if (hwdef->apc_base) {
apc_init(hwdef->apc_base, cpu_halt[0]); apc_init(hwdef->apc_base, cpu_halt[0]);
} }
...@@ -955,8 +956,13 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, ...@@ -955,8 +956,13 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
fd[0] = drive_get(IF_FLOPPY, 0, 0); fd[0] = drive_get(IF_FLOPPY, 0, 0);
sun4m_fdctrl_init(slavio_irq[22], hwdef->fd_base, fd, sun4m_fdctrl_init(slavio_irq[22], hwdef->fd_base, fd,
&fdc_tc); &fdc_tc);
} else {
fdc_tc = *qemu_allocate_irqs(dummy_fdc_tc, NULL, 1);
} }
slavio_misc_init(hwdef->slavio_base, hwdef->aux1_base, hwdef->aux2_base,
slavio_irq[30], fdc_tc);
if (drive_get_max_bus(IF_SCSI) > 0) { if (drive_get_max_bus(IF_SCSI) > 0) {
fprintf(stderr, "qemu: too many SCSI bus\n"); fprintf(stderr, "qemu: too many SCSI bus\n");
exit(1); exit(1);
...@@ -1772,16 +1778,18 @@ static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size, ...@@ -1772,16 +1778,18 @@ static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size,
slavio_irq[1], serial_hds[0], serial_hds[1], slavio_irq[1], serial_hds[0], serial_hds[1],
ESCC_CLOCK, 1); ESCC_CLOCK, 1);
slavio_misc_init(0, hwdef->aux1_base, 0, slavio_irq[1], fdc_tc);
if (hwdef->fd_base != (target_phys_addr_t)-1) { if (hwdef->fd_base != (target_phys_addr_t)-1) {
/* there is zero or one floppy drive */ /* there is zero or one floppy drive */
memset(fd, 0, sizeof(fd)); memset(fd, 0, sizeof(fd));
fd[0] = drive_get(IF_FLOPPY, 0, 0); fd[0] = drive_get(IF_FLOPPY, 0, 0);
sun4m_fdctrl_init(slavio_irq[1], hwdef->fd_base, fd, sun4m_fdctrl_init(slavio_irq[1], hwdef->fd_base, fd,
&fdc_tc); &fdc_tc);
} else {
fdc_tc = *qemu_allocate_irqs(dummy_fdc_tc, NULL, 1);
} }
slavio_misc_init(0, hwdef->aux1_base, 0, slavio_irq[1], fdc_tc);
if (drive_get_max_bus(IF_SCSI) > 0) { if (drive_get_max_bus(IF_SCSI) > 0) {
fprintf(stderr, "qemu: too many SCSI bus\n"); fprintf(stderr, "qemu: too many SCSI bus\n");
exit(1); exit(1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册