xref: /qemu/hw/usb/vt82c686-uhci-pci.c (revision ece29df33b8e0e35760c4f76b0cf7b1af928b0b4)
16f2bcd5fSPhilippe Mathieu-Daudé #include "qemu/osdep.h"
26f2bcd5fSPhilippe Mathieu-Daudé #include "hcd-uhci.h"
36f2bcd5fSPhilippe Mathieu-Daudé 
46f2bcd5fSPhilippe Mathieu-Daudé static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Error **errp)
56f2bcd5fSPhilippe Mathieu-Daudé {
66f2bcd5fSPhilippe Mathieu-Daudé     UHCIState *s = UHCI(dev);
76f2bcd5fSPhilippe Mathieu-Daudé     uint8_t *pci_conf = s->dev.config;
86f2bcd5fSPhilippe Mathieu-Daudé 
96f2bcd5fSPhilippe Mathieu-Daudé     /* USB misc control 1/2 */
106f2bcd5fSPhilippe Mathieu-Daudé     pci_set_long(pci_conf + 0x40, 0x00001000);
116f2bcd5fSPhilippe Mathieu-Daudé     /* PM capability */
126f2bcd5fSPhilippe Mathieu-Daudé     pci_set_long(pci_conf + 0x80, 0x00020001);
136f2bcd5fSPhilippe Mathieu-Daudé     /* USB legacy support  */
146f2bcd5fSPhilippe Mathieu-Daudé     pci_set_long(pci_conf + 0xc0, 0x00002000);
156f2bcd5fSPhilippe Mathieu-Daudé 
166f2bcd5fSPhilippe Mathieu-Daudé     usb_uhci_common_realize(dev, errp);
176f2bcd5fSPhilippe Mathieu-Daudé }
186f2bcd5fSPhilippe Mathieu-Daudé 
196f2bcd5fSPhilippe Mathieu-Daudé static UHCIInfo uhci_info[] = {
206f2bcd5fSPhilippe Mathieu-Daudé     {
216f2bcd5fSPhilippe Mathieu-Daudé         .name      = "vt82c686b-usb-uhci",
226f2bcd5fSPhilippe Mathieu-Daudé         .vendor_id = PCI_VENDOR_ID_VIA,
236f2bcd5fSPhilippe Mathieu-Daudé         .device_id = PCI_DEVICE_ID_VIA_UHCI,
246f2bcd5fSPhilippe Mathieu-Daudé         .revision  = 0x01,
256f2bcd5fSPhilippe Mathieu-Daudé         .irq_pin   = 3,
266f2bcd5fSPhilippe Mathieu-Daudé         .realize   = usb_uhci_vt82c686b_realize,
276f2bcd5fSPhilippe Mathieu-Daudé         .unplug    = true,
28*ece29df3SBALATON Zoltan         /* Reason: only works as USB function of VT82xx superio chips */
29*ece29df3SBALATON Zoltan         .notuser   = true,
306f2bcd5fSPhilippe Mathieu-Daudé     }
316f2bcd5fSPhilippe Mathieu-Daudé };
326f2bcd5fSPhilippe Mathieu-Daudé 
336f2bcd5fSPhilippe Mathieu-Daudé static const TypeInfo vt82c686b_usb_uhci_type_info = {
346f2bcd5fSPhilippe Mathieu-Daudé     .parent         = TYPE_UHCI,
356f2bcd5fSPhilippe Mathieu-Daudé     .name           = "vt82c686b-usb-uhci",
366f2bcd5fSPhilippe Mathieu-Daudé     .class_init     = uhci_data_class_init,
376f2bcd5fSPhilippe Mathieu-Daudé     .class_data     = uhci_info,
386f2bcd5fSPhilippe Mathieu-Daudé };
396f2bcd5fSPhilippe Mathieu-Daudé 
406f2bcd5fSPhilippe Mathieu-Daudé static void vt82c686b_usb_uhci_register_types(void)
416f2bcd5fSPhilippe Mathieu-Daudé {
426f2bcd5fSPhilippe Mathieu-Daudé     type_register_static(&vt82c686b_usb_uhci_type_info);
436f2bcd5fSPhilippe Mathieu-Daudé }
446f2bcd5fSPhilippe Mathieu-Daudé 
456f2bcd5fSPhilippe Mathieu-Daudé type_init(vt82c686b_usb_uhci_register_types)
46