qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

via-ac97.c (2812B)


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