hw/isa/vt82c686: Instantiate AC97 and MC97 functions in host device
The AC97 function's wakeup status is wired to the PM function and both the AC97 and MC97 interrupt routing is determined by the ISA function. Signed-off-by: Bernhard Beschow <shentey@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Acked-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <20220901114127.53914-11-shentey@gmail.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
d105377264
commit
0a8d405d69
@ -553,6 +553,8 @@ struct ViaISAState {
|
||||
PCIIDEState ide;
|
||||
UHCIState uhci[2];
|
||||
ViaPMState pm;
|
||||
PCIDevice ac97;
|
||||
PCIDevice mc97;
|
||||
};
|
||||
|
||||
static const VMStateDescription vmstate_via = {
|
||||
@ -572,6 +574,8 @@ static void via_isa_init(Object *obj)
|
||||
object_initialize_child(obj, "ide", &s->ide, TYPE_VIA_IDE);
|
||||
object_initialize_child(obj, "uhci1", &s->uhci[0], TYPE_VT82C686B_USB_UHCI);
|
||||
object_initialize_child(obj, "uhci2", &s->uhci[1], TYPE_VT82C686B_USB_UHCI);
|
||||
object_initialize_child(obj, "ac97", &s->ac97, TYPE_VIA_AC97);
|
||||
object_initialize_child(obj, "mc97", &s->mc97, TYPE_VIA_MC97);
|
||||
}
|
||||
|
||||
static const TypeInfo via_isa_info = {
|
||||
@ -652,6 +656,18 @@ static void via_isa_realize(PCIDevice *d, Error **errp)
|
||||
if (!qdev_realize(DEVICE(&s->pm), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Function 5: AC97 Audio */
|
||||
qdev_prop_set_int32(DEVICE(&s->ac97), "addr", d->devfn + 5);
|
||||
if (!qdev_realize(DEVICE(&s->ac97), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Function 6: MC97 Modem */
|
||||
qdev_prop_set_int32(DEVICE(&s->mc97), "addr", d->devfn + 6);
|
||||
if (!qdev_realize(DEVICE(&s->mc97), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* TYPE_VT82C686B_ISA */
|
||||
|
@ -210,10 +210,6 @@ static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc,
|
||||
|
||||
dev = PCI_DEVICE(object_resolve_path_component(OBJECT(via), "pm"));
|
||||
*i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c"));
|
||||
|
||||
/* Audio support */
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 5), TYPE_VIA_AC97);
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 6), TYPE_VIA_MC97);
|
||||
}
|
||||
|
||||
/* Network support */
|
||||
|
@ -159,7 +159,6 @@ static void pegasos2_init(MachineState *machine)
|
||||
pci_bus = mv64361_get_pci_bus(pm->mv, 1);
|
||||
|
||||
/* VIA VT8231 South Bridge (multifunction PCI device) */
|
||||
/* VT8231 function 0: PCI-to-ISA Bridge */
|
||||
via = pci_create_simple_multifunction(pci_bus, PCI_DEVFN(12, 0), true,
|
||||
TYPE_VT8231_ISA);
|
||||
qdev_connect_gpio_out(DEVICE(via), 0,
|
||||
@ -173,10 +172,6 @@ static void pegasos2_init(MachineState *machine)
|
||||
spd_data = spd_data_generate(DDR, machine->ram_size);
|
||||
smbus_eeprom_init_one(i2c_bus, 0x57, spd_data);
|
||||
|
||||
/* VT8231 function 5-6: AC97 Audio & Modem */
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(12, 5), TYPE_VIA_AC97);
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(12, 6), TYPE_VIA_MC97);
|
||||
|
||||
/* other PC hardware */
|
||||
pci_vga_init(pci_bus);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user