Revision dc638fad hw/usb-uhci.c
b/hw/usb-uhci.c | ||
---|---|---|
1115 | 1115 |
.wakeup = uhci_wakeup, |
1116 | 1116 |
}; |
1117 | 1117 |
|
1118 |
static int usb_uhci_common_initfn(UHCIState *s)
|
|
1118 |
static int usb_uhci_common_initfn(PCIDevice *dev)
|
|
1119 | 1119 |
{ |
1120 |
UHCIState *s = DO_UPCAST(UHCIState, dev, dev); |
|
1120 | 1121 |
uint8_t *pci_conf = s->dev.config; |
1121 | 1122 |
int i; |
1122 | 1123 |
|
1123 |
pci_conf[PCI_REVISION_ID] = 0x01; // revision number |
|
1124 | 1124 |
pci_conf[PCI_CLASS_PROG] = 0x00; |
1125 |
pci_config_set_class(pci_conf, PCI_CLASS_SERIAL_USB); |
|
1126 | 1125 |
/* TODO: reset value should be 0. */ |
1127 | 1126 |
pci_conf[PCI_INTERRUPT_PIN] = 4; // interrupt pin 3 |
1128 | 1127 |
pci_conf[0x60] = 0x10; // release number |
... | ... | |
1148 | 1147 |
return 0; |
1149 | 1148 |
} |
1150 | 1149 |
|
1151 |
static int usb_uhci_piix3_initfn(PCIDevice *dev) |
|
1152 |
{ |
|
1153 |
UHCIState *s = DO_UPCAST(UHCIState, dev, dev); |
|
1154 |
uint8_t *pci_conf = s->dev.config; |
|
1155 |
|
|
1156 |
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
|
1157 |
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371SB_2); |
|
1158 |
return usb_uhci_common_initfn(s); |
|
1159 |
} |
|
1160 |
|
|
1161 |
static int usb_uhci_piix4_initfn(PCIDevice *dev) |
|
1162 |
{ |
|
1163 |
UHCIState *s = DO_UPCAST(UHCIState, dev, dev); |
|
1164 |
uint8_t *pci_conf = s->dev.config; |
|
1165 |
|
|
1166 |
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
|
1167 |
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_2); |
|
1168 |
return usb_uhci_common_initfn(s); |
|
1169 |
} |
|
1170 |
|
|
1171 | 1150 |
static int usb_uhci_vt82c686b_initfn(PCIDevice *dev) |
1172 | 1151 |
{ |
1173 | 1152 |
UHCIState *s = DO_UPCAST(UHCIState, dev, dev); |
1174 | 1153 |
uint8_t *pci_conf = s->dev.config; |
1175 | 1154 |
|
1176 |
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_VIA); |
|
1177 |
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_VIA_UHCI); |
|
1178 |
|
|
1179 | 1155 |
/* USB misc control 1/2 */ |
1180 | 1156 |
pci_set_long(pci_conf + 0x40,0x00001000); |
1181 | 1157 |
/* PM capability */ |
... | ... | |
1183 | 1159 |
/* USB legacy support */ |
1184 | 1160 |
pci_set_long(pci_conf + 0xc0,0x00002000); |
1185 | 1161 |
|
1186 |
return usb_uhci_common_initfn(s);
|
|
1162 |
return usb_uhci_common_initfn(dev);
|
|
1187 | 1163 |
} |
1188 | 1164 |
|
1189 | 1165 |
static PCIDeviceInfo uhci_info[] = { |
... | ... | |
1191 | 1167 |
.qdev.name = "piix3-usb-uhci", |
1192 | 1168 |
.qdev.size = sizeof(UHCIState), |
1193 | 1169 |
.qdev.vmsd = &vmstate_uhci, |
1194 |
.init = usb_uhci_piix3_initfn, |
|
1170 |
.init = usb_uhci_common_initfn, |
|
1171 |
.vendor_id = PCI_VENDOR_ID_INTEL, |
|
1172 |
.device_id = PCI_DEVICE_ID_INTEL_82371SB_2, |
|
1173 |
.revision = 0x01, |
|
1174 |
.class_id = PCI_CLASS_SERIAL_USB, |
|
1195 | 1175 |
},{ |
1196 | 1176 |
.qdev.name = "piix4-usb-uhci", |
1197 | 1177 |
.qdev.size = sizeof(UHCIState), |
1198 | 1178 |
.qdev.vmsd = &vmstate_uhci, |
1199 |
.init = usb_uhci_piix4_initfn, |
|
1179 |
.init = usb_uhci_common_initfn, |
|
1180 |
.vendor_id = PCI_VENDOR_ID_INTEL, |
|
1181 |
.device_id = PCI_DEVICE_ID_INTEL_82371AB_2, |
|
1182 |
.revision = 0x01, |
|
1183 |
.class_id = PCI_CLASS_SERIAL_USB, |
|
1200 | 1184 |
},{ |
1201 | 1185 |
.qdev.name = "vt82c686b-usb-uhci", |
1202 | 1186 |
.qdev.size = sizeof(UHCIState), |
1203 | 1187 |
.qdev.vmsd = &vmstate_uhci, |
1204 | 1188 |
.init = usb_uhci_vt82c686b_initfn, |
1189 |
.vendor_id = PCI_VENDOR_ID_VIA, |
|
1190 |
.device_id = PCI_DEVICE_ID_VIA_UHCI, |
|
1191 |
.revision = 0x01, |
|
1192 |
.class_id = PCI_CLASS_SERIAL_USB, |
|
1205 | 1193 |
},{ |
1206 | 1194 |
/* end of list */ |
1207 | 1195 |
} |
Also available in: Unified diff