2
0

vt82c686-uhci-pci.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "qemu/osdep.h"
  2. #include "hw/irq.h"
  3. #include "hw/isa/vt82c686.h"
  4. #include "hcd-uhci.h"
  5. static void uhci_isa_set_irq(void *opaque, int irq_num, int level)
  6. {
  7. UHCIState *s = opaque;
  8. via_isa_set_irq(&s->dev, 0, level);
  9. }
  10. static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Error **errp)
  11. {
  12. UHCIState *s = UHCI(dev);
  13. uint8_t *pci_conf = s->dev.config;
  14. /* USB misc control 1/2 */
  15. pci_set_long(pci_conf + 0x40, 0x00001000);
  16. /* PM capability */
  17. pci_set_long(pci_conf + 0x80, 0x00020001);
  18. /* USB legacy support */
  19. pci_set_long(pci_conf + 0xc0, 0x00002000);
  20. usb_uhci_common_realize(dev, errp);
  21. object_unref(s->irq);
  22. s->irq = qemu_allocate_irq(uhci_isa_set_irq, s, 0);
  23. }
  24. static UHCIInfo uhci_info[] = {
  25. {
  26. .name = TYPE_VT82C686B_USB_UHCI,
  27. .vendor_id = PCI_VENDOR_ID_VIA,
  28. .device_id = PCI_DEVICE_ID_VIA_UHCI,
  29. .revision = 0x01,
  30. .irq_pin = 3,
  31. .realize = usb_uhci_vt82c686b_realize,
  32. .unplug = true,
  33. /* Reason: only works as USB function of VT82xx superio chips */
  34. .notuser = true,
  35. }
  36. };
  37. static const TypeInfo vt82c686b_usb_uhci_type_info = {
  38. .parent = TYPE_UHCI,
  39. .name = TYPE_VT82C686B_USB_UHCI,
  40. .class_init = uhci_data_class_init,
  41. .class_data = uhci_info,
  42. };
  43. static void vt82c686b_usb_uhci_register_types(void)
  44. {
  45. type_register_static(&vt82c686b_usb_uhci_type_info);
  46. }
  47. type_init(vt82c686b_usb_uhci_register_types)