1*657fae25SBALATON Zoltan /* 2*657fae25SBALATON Zoltan * VIA south bridges sound support 3*657fae25SBALATON Zoltan * 4*657fae25SBALATON Zoltan * This work is licensed under the GNU GPL license version 2 or later. 5*657fae25SBALATON Zoltan */ 6*657fae25SBALATON Zoltan 7*657fae25SBALATON Zoltan /* 8*657fae25SBALATON Zoltan * TODO: This is entirely boiler plate just registering empty PCI devices 9*657fae25SBALATON Zoltan * with the right ID guests expect, functionality should be added here. 10*657fae25SBALATON Zoltan */ 11*657fae25SBALATON Zoltan 12*657fae25SBALATON Zoltan #include "qemu/osdep.h" 13*657fae25SBALATON Zoltan #include "hw/isa/vt82c686.h" 14*657fae25SBALATON Zoltan #include "hw/pci/pci.h" 15*657fae25SBALATON Zoltan 16*657fae25SBALATON Zoltan struct VIAAC97State { 17*657fae25SBALATON Zoltan PCIDevice dev; 18*657fae25SBALATON Zoltan }; 19*657fae25SBALATON Zoltan 20*657fae25SBALATON Zoltan struct VIAMC97State { 21*657fae25SBALATON Zoltan PCIDevice dev; 22*657fae25SBALATON Zoltan }; 23*657fae25SBALATON Zoltan 24*657fae25SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(VIAAC97State, VIA_AC97) 25*657fae25SBALATON Zoltan OBJECT_DECLARE_SIMPLE_TYPE(VIAMC97State, VIA_MC97) 26*657fae25SBALATON Zoltan 27*657fae25SBALATON Zoltan static void via_ac97_realize(PCIDevice *dev, Error **errp) 28*657fae25SBALATON Zoltan { 29*657fae25SBALATON Zoltan VIAAC97State *s = VIA_AC97(dev); 30*657fae25SBALATON Zoltan uint8_t *pci_conf = s->dev.config; 31*657fae25SBALATON Zoltan 32*657fae25SBALATON Zoltan pci_set_word(pci_conf + PCI_COMMAND, PCI_COMMAND_INVALIDATE | 33*657fae25SBALATON Zoltan PCI_COMMAND_PARITY); 34*657fae25SBALATON Zoltan pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_CAP_LIST | 35*657fae25SBALATON Zoltan PCI_STATUS_DEVSEL_MEDIUM); 36*657fae25SBALATON Zoltan pci_set_long(pci_conf + PCI_INTERRUPT_PIN, 0x03); 37*657fae25SBALATON Zoltan } 38*657fae25SBALATON Zoltan 39*657fae25SBALATON Zoltan static void via_ac97_class_init(ObjectClass *klass, void *data) 40*657fae25SBALATON Zoltan { 41*657fae25SBALATON Zoltan DeviceClass *dc = DEVICE_CLASS(klass); 42*657fae25SBALATON Zoltan PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); 43*657fae25SBALATON Zoltan 44*657fae25SBALATON Zoltan k->realize = via_ac97_realize; 45*657fae25SBALATON Zoltan k->vendor_id = PCI_VENDOR_ID_VIA; 46*657fae25SBALATON Zoltan k->device_id = PCI_DEVICE_ID_VIA_AC97; 47*657fae25SBALATON Zoltan k->revision = 0x50; 48*657fae25SBALATON Zoltan k->class_id = PCI_CLASS_MULTIMEDIA_AUDIO; 49*657fae25SBALATON Zoltan set_bit(DEVICE_CATEGORY_SOUND, dc->categories); 50*657fae25SBALATON Zoltan dc->desc = "AC97"; 51*657fae25SBALATON Zoltan } 52*657fae25SBALATON Zoltan 53*657fae25SBALATON Zoltan static const TypeInfo via_ac97_info = { 54*657fae25SBALATON Zoltan .name = TYPE_VIA_AC97, 55*657fae25SBALATON Zoltan .parent = TYPE_PCI_DEVICE, 56*657fae25SBALATON Zoltan .instance_size = sizeof(VIAAC97State), 57*657fae25SBALATON Zoltan .class_init = via_ac97_class_init, 58*657fae25SBALATON Zoltan .interfaces = (InterfaceInfo[]) { 59*657fae25SBALATON Zoltan { INTERFACE_CONVENTIONAL_PCI_DEVICE }, 60*657fae25SBALATON Zoltan { }, 61*657fae25SBALATON Zoltan }, 62*657fae25SBALATON Zoltan }; 63*657fae25SBALATON Zoltan 64*657fae25SBALATON Zoltan static void via_mc97_realize(PCIDevice *dev, Error **errp) 65*657fae25SBALATON Zoltan { 66*657fae25SBALATON Zoltan VIAMC97State *s = VIA_MC97(dev); 67*657fae25SBALATON Zoltan uint8_t *pci_conf = s->dev.config; 68*657fae25SBALATON Zoltan 69*657fae25SBALATON Zoltan pci_set_word(pci_conf + PCI_COMMAND, PCI_COMMAND_INVALIDATE | 70*657fae25SBALATON Zoltan PCI_COMMAND_VGA_PALETTE); 71*657fae25SBALATON Zoltan pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_DEVSEL_MEDIUM); 72*657fae25SBALATON Zoltan pci_set_long(pci_conf + PCI_INTERRUPT_PIN, 0x03); 73*657fae25SBALATON Zoltan } 74*657fae25SBALATON Zoltan 75*657fae25SBALATON Zoltan static void via_mc97_class_init(ObjectClass *klass, void *data) 76*657fae25SBALATON Zoltan { 77*657fae25SBALATON Zoltan DeviceClass *dc = DEVICE_CLASS(klass); 78*657fae25SBALATON Zoltan PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); 79*657fae25SBALATON Zoltan 80*657fae25SBALATON Zoltan k->realize = via_mc97_realize; 81*657fae25SBALATON Zoltan k->vendor_id = PCI_VENDOR_ID_VIA; 82*657fae25SBALATON Zoltan k->device_id = PCI_DEVICE_ID_VIA_MC97; 83*657fae25SBALATON Zoltan k->class_id = PCI_CLASS_COMMUNICATION_OTHER; 84*657fae25SBALATON Zoltan k->revision = 0x30; 85*657fae25SBALATON Zoltan set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); 86*657fae25SBALATON Zoltan dc->desc = "MC97"; 87*657fae25SBALATON Zoltan } 88*657fae25SBALATON Zoltan 89*657fae25SBALATON Zoltan static const TypeInfo via_mc97_info = { 90*657fae25SBALATON Zoltan .name = TYPE_VIA_MC97, 91*657fae25SBALATON Zoltan .parent = TYPE_PCI_DEVICE, 92*657fae25SBALATON Zoltan .instance_size = sizeof(VIAMC97State), 93*657fae25SBALATON Zoltan .class_init = via_mc97_class_init, 94*657fae25SBALATON Zoltan .interfaces = (InterfaceInfo[]) { 95*657fae25SBALATON Zoltan { INTERFACE_CONVENTIONAL_PCI_DEVICE }, 96*657fae25SBALATON Zoltan { }, 97*657fae25SBALATON Zoltan }, 98*657fae25SBALATON Zoltan }; 99*657fae25SBALATON Zoltan 100*657fae25SBALATON Zoltan static void via_ac97_register_types(void) 101*657fae25SBALATON Zoltan { 102*657fae25SBALATON Zoltan type_register_static(&via_ac97_info); 103*657fae25SBALATON Zoltan type_register_static(&via_mc97_info); 104*657fae25SBALATON Zoltan } 105*657fae25SBALATON Zoltan 106*657fae25SBALATON Zoltan type_init(via_ac97_register_types) 107