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é
uhci_isa_set_irq(void * opaque,int irq_num,int level)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
usb_uhci_vt82c686b_realize(PCIDevice * dev,Error ** errp)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é
vt82c686b_usb_uhci_register_types(void)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