mirror of https://github.com/xemu-project/xemu.git
hw/mips/mips_fulong2e: Factor out vt82c686b_southbridge_init()
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20180308223946.26784-18-f4bug@amsat.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
7313b1f28b
commit
5c961c3fb1
|
@ -77,8 +77,6 @@
|
||||||
#define FULONG2E_ATI_SLOT 6
|
#define FULONG2E_ATI_SLOT 6
|
||||||
#define FULONG2E_RTL8139_SLOT 7
|
#define FULONG2E_RTL8139_SLOT 7
|
||||||
|
|
||||||
static ISADevice *pit;
|
|
||||||
|
|
||||||
static struct _loaderparams {
|
static struct _loaderparams {
|
||||||
int ram_size;
|
int ram_size;
|
||||||
const char *kernel_filename;
|
const char *kernel_filename;
|
||||||
|
@ -231,11 +229,44 @@ static const uint8_t eeprom_spd[0x80] = {
|
||||||
0x20,0x30,0x20
|
0x20,0x30,0x20
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Audio support */
|
static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc,
|
||||||
static void audio_init (PCIBus *pci_bus)
|
I2CBus **i2c_bus, ISABus **p_isa_bus)
|
||||||
{
|
{
|
||||||
vt82c686b_ac97_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 5));
|
qemu_irq *i8259;
|
||||||
vt82c686b_mc97_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 6));
|
ISABus *isa_bus;
|
||||||
|
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
||||||
|
|
||||||
|
isa_bus = vt82c686b_init(pci_bus, PCI_DEVFN(slot, 0));
|
||||||
|
if (!isa_bus) {
|
||||||
|
fprintf(stderr, "vt82c686b_init error\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
*p_isa_bus = isa_bus;
|
||||||
|
/* Interrupt controller */
|
||||||
|
/* The 8259 -> IP5 */
|
||||||
|
i8259 = i8259_init(isa_bus, intc);
|
||||||
|
isa_bus_irqs(isa_bus, i8259);
|
||||||
|
/* init other devices */
|
||||||
|
i8254_pit_init(isa_bus, 0x40, 0, NULL);
|
||||||
|
i8257_dma_init(isa_bus, 0);
|
||||||
|
|
||||||
|
ide_drive_get(hd, ARRAY_SIZE(hd));
|
||||||
|
vt82c686b_ide_init(pci_bus, hd, PCI_DEVFN(slot, 1));
|
||||||
|
|
||||||
|
pci_create_simple(pci_bus, PCI_DEVFN(slot, 2), "vt82c686b-usb-uhci");
|
||||||
|
pci_create_simple(pci_bus, PCI_DEVFN(slot, 3), "vt82c686b-usb-uhci");
|
||||||
|
|
||||||
|
*i2c_bus = vt82c686b_pm_init(pci_bus, PCI_DEVFN(slot, 4), 0xeee1, NULL);
|
||||||
|
|
||||||
|
/* Audio support */
|
||||||
|
vt82c686b_ac97_init(pci_bus, PCI_DEVFN(slot, 5));
|
||||||
|
vt82c686b_mc97_init(pci_bus, PCI_DEVFN(slot, 6));
|
||||||
|
|
||||||
|
/* Super I/O */
|
||||||
|
isa_create_simple(isa_bus, TYPE_I8042);
|
||||||
|
|
||||||
|
serial_hds_isa_init(isa_bus, 0, MAX_SERIAL_PORTS);
|
||||||
|
parallel_hds_isa_init(isa_bus, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Network support */
|
/* Network support */
|
||||||
|
@ -268,11 +299,9 @@ static void mips_fulong2e_init(MachineState *machine)
|
||||||
MemoryRegion *bios = g_new(MemoryRegion, 1);
|
MemoryRegion *bios = g_new(MemoryRegion, 1);
|
||||||
long bios_size;
|
long bios_size;
|
||||||
int64_t kernel_entry;
|
int64_t kernel_entry;
|
||||||
qemu_irq *i8259;
|
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
ISABus *isa_bus;
|
ISABus *isa_bus;
|
||||||
I2CBus *smbus;
|
I2CBus *smbus;
|
||||||
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
|
||||||
MIPSCPU *cpu;
|
MIPSCPU *cpu;
|
||||||
CPUMIPSState *env;
|
CPUMIPSState *env;
|
||||||
|
|
||||||
|
@ -334,46 +363,16 @@ static void mips_fulong2e_init(MachineState *machine)
|
||||||
/* North bridge, Bonito --> IP2 */
|
/* North bridge, Bonito --> IP2 */
|
||||||
pci_bus = bonito_init((qemu_irq *)&(env->irq[2]));
|
pci_bus = bonito_init((qemu_irq *)&(env->irq[2]));
|
||||||
|
|
||||||
/* South bridge */
|
/* South bridge -> IP5 */
|
||||||
ide_drive_get(hd, ARRAY_SIZE(hd));
|
vt82c686b_southbridge_init(pci_bus, FULONG2E_VIA_SLOT, env->irq[5],
|
||||||
|
&smbus, &isa_bus);
|
||||||
|
|
||||||
isa_bus = vt82c686b_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 0));
|
|
||||||
if (!isa_bus) {
|
|
||||||
error_report("vt82c686b_init error");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Interrupt controller */
|
|
||||||
/* The 8259 -> IP5 */
|
|
||||||
i8259 = i8259_init(isa_bus, env->irq[5]);
|
|
||||||
isa_bus_irqs(isa_bus, i8259);
|
|
||||||
|
|
||||||
vt82c686b_ide_init(pci_bus, hd, PCI_DEVFN(FULONG2E_VIA_SLOT, 1));
|
|
||||||
pci_create_simple(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 2),
|
|
||||||
"vt82c686b-usb-uhci");
|
|
||||||
pci_create_simple(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 3),
|
|
||||||
"vt82c686b-usb-uhci");
|
|
||||||
|
|
||||||
smbus = vt82c686b_pm_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 4),
|
|
||||||
0xeee1, NULL);
|
|
||||||
/* TODO: Populate SPD eeprom data. */
|
/* TODO: Populate SPD eeprom data. */
|
||||||
smbus_eeprom_init(smbus, 1, eeprom_spd, sizeof(eeprom_spd));
|
smbus_eeprom_init(smbus, 1, eeprom_spd, sizeof(eeprom_spd));
|
||||||
|
|
||||||
/* init other devices */
|
|
||||||
pit = i8254_pit_init(isa_bus, 0x40, 0, NULL);
|
|
||||||
i8257_dma_init(isa_bus, 0);
|
|
||||||
|
|
||||||
/* Super I/O */
|
|
||||||
isa_create_simple(isa_bus, TYPE_I8042);
|
|
||||||
|
|
||||||
mc146818_rtc_init(isa_bus, 2000, NULL);
|
mc146818_rtc_init(isa_bus, 2000, NULL);
|
||||||
|
|
||||||
serial_hds_isa_init(isa_bus, 0, MAX_SERIAL_PORTS);
|
/* Network card: RTL8139D */
|
||||||
parallel_hds_isa_init(isa_bus, 1);
|
|
||||||
|
|
||||||
/* Sound card */
|
|
||||||
audio_init(pci_bus);
|
|
||||||
/* Network card */
|
|
||||||
network_init(pci_bus);
|
network_init(pci_bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue