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