xref: /openbmc/qemu/hw/usb/vt82c686-uhci-pci.c (revision 032a443b)
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