16f2bcd5fSPhilippe Mathieu-Daudé #include "qemu/osdep.h" 2*032a443bSBALATON Zoltan #include "hw/irq.h" 34f3b0a4dSBALATON Zoltan #include "hw/isa/vt82c686.h" 46f2bcd5fSPhilippe Mathieu-Daudé #include "hcd-uhci.h" 56f2bcd5fSPhilippe Mathieu-Daudé 6*032a443bSBALATON Zoltan static void uhci_isa_set_irq(void *opaque, int irq_num, int level) 7*032a443bSBALATON Zoltan { 8*032a443bSBALATON Zoltan UHCIState *s = opaque; 9*032a443bSBALATON Zoltan via_isa_set_irq(&s->dev, 0, level); 10*032a443bSBALATON Zoltan } 11*032a443bSBALATON Zoltan 126f2bcd5fSPhilippe Mathieu-Daudé static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Error **errp) 136f2bcd5fSPhilippe Mathieu-Daudé { 146f2bcd5fSPhilippe Mathieu-Daudé UHCIState *s = UHCI(dev); 156f2bcd5fSPhilippe Mathieu-Daudé uint8_t *pci_conf = s->dev.config; 166f2bcd5fSPhilippe Mathieu-Daudé 176f2bcd5fSPhilippe Mathieu-Daudé /* USB misc control 1/2 */ 186f2bcd5fSPhilippe Mathieu-Daudé pci_set_long(pci_conf + 0x40, 0x00001000); 196f2bcd5fSPhilippe Mathieu-Daudé /* PM capability */ 206f2bcd5fSPhilippe Mathieu-Daudé pci_set_long(pci_conf + 0x80, 0x00020001); 216f2bcd5fSPhilippe Mathieu-Daudé /* USB legacy support */ 226f2bcd5fSPhilippe Mathieu-Daudé pci_set_long(pci_conf + 0xc0, 0x00002000); 236f2bcd5fSPhilippe Mathieu-Daudé 246f2bcd5fSPhilippe Mathieu-Daudé usb_uhci_common_realize(dev, errp); 25*032a443bSBALATON Zoltan object_unref(s->irq); 26*032a443bSBALATON Zoltan s->irq = qemu_allocate_irq(uhci_isa_set_irq, s, 0); 276f2bcd5fSPhilippe Mathieu-Daudé } 286f2bcd5fSPhilippe Mathieu-Daudé 296f2bcd5fSPhilippe Mathieu-Daudé static UHCIInfo uhci_info[] = { 306f2bcd5fSPhilippe Mathieu-Daudé { 3165c69e9aSBernhard Beschow .name = TYPE_VT82C686B_USB_UHCI, 326f2bcd5fSPhilippe Mathieu-Daudé .vendor_id = PCI_VENDOR_ID_VIA, 336f2bcd5fSPhilippe Mathieu-Daudé .device_id = PCI_DEVICE_ID_VIA_UHCI, 346f2bcd5fSPhilippe Mathieu-Daudé .revision = 0x01, 356f2bcd5fSPhilippe Mathieu-Daudé .irq_pin = 3, 366f2bcd5fSPhilippe Mathieu-Daudé .realize = usb_uhci_vt82c686b_realize, 376f2bcd5fSPhilippe Mathieu-Daudé .unplug = true, 38ece29df3SBALATON Zoltan /* Reason: only works as USB function of VT82xx superio chips */ 39ece29df3SBALATON Zoltan .notuser = true, 406f2bcd5fSPhilippe Mathieu-Daudé } 416f2bcd5fSPhilippe Mathieu-Daudé }; 426f2bcd5fSPhilippe Mathieu-Daudé 436f2bcd5fSPhilippe Mathieu-Daudé static const TypeInfo vt82c686b_usb_uhci_type_info = { 446f2bcd5fSPhilippe Mathieu-Daudé .parent = TYPE_UHCI, 4565c69e9aSBernhard Beschow .name = TYPE_VT82C686B_USB_UHCI, 466f2bcd5fSPhilippe Mathieu-Daudé .class_init = uhci_data_class_init, 476f2bcd5fSPhilippe Mathieu-Daudé .class_data = uhci_info, 486f2bcd5fSPhilippe Mathieu-Daudé }; 496f2bcd5fSPhilippe Mathieu-Daudé 506f2bcd5fSPhilippe Mathieu-Daudé static void vt82c686b_usb_uhci_register_types(void) 516f2bcd5fSPhilippe Mathieu-Daudé { 526f2bcd5fSPhilippe Mathieu-Daudé type_register_static(&vt82c686b_usb_uhci_type_info); 536f2bcd5fSPhilippe Mathieu-Daudé } 546f2bcd5fSPhilippe Mathieu-Daudé 556f2bcd5fSPhilippe Mathieu-Daudé type_init(vt82c686b_usb_uhci_register_types) 56