Here is v4 of the pcie patch series. - PCIDevice::written The abuse of PCIDevice::config to record a written bit of non-modifiable registers is confusing and bad style. So I introduced PCIDevice::written. - FLR stuff I didn't addresse FLR function pointer issue. Anyway in order to make FLR work, Qdev bus reset must be addresssed. So Let's discuss it at the next phase.
new patches: 1, 2, 3, 4, 5 Other patches are (almost) same as before except adjustment to compile. The patches of 1, 2, 3 and 5 can be harmlessly merged, I think. Patch description: This patch series implements pcie port switch emulators which is basic part for pcie/q35 support. This is for mst/pci tree. changes v3 -> v4: - introduced new pci config helper functions.(clear set bit) - various clean up and some bug fixes. - dropped pci_shift_xxx(). - dropped function pointerin pcie_aer.h - dropped pci_exp_cap(), pcie_aer_cap(). - file rename (pcie_{root, upstream, downsatrem} => ioh33420, x3130). changes v2 -> v3: - msi: improved commant and simplified shift/ffs dance - pci w1c config register framework - split pcie.[ch] into pcie_regs.h, pcie.[ch] and pcie_aer.[ch] - pcie, aer: many changes by following reviews. changes v1 -> v2: - update msi - dropped already pushed out patches. - added msix patches. Isaku Yamahata (15): pci: make pci_del_capability() update for w1cmask pci: introduce helper functions to clear/set bits in configuration space pci: use pci_clear_bit_word() in pci_device_reset() pci: record which is written into pci configuration space pci/bridge: fix pci_bridge_reset() msi: implements msi pcie: add pcie constants to pcie_regs.h pcie: helper functions for pcie capability and extended capability pcie/aer: helper functions for pcie aer capability pcie port: define struct PCIEPort/PCIESlot and helper functions ioh3420: pcie root port in X58 ioh x3130: pcie upstream port x3130: pcie downstream port pcie/hotplug: introduce pushing attention button command pcie/aer: glue aer error injection into qemu monitor Makefile.objs | 4 +- hw/ioh3420.c | 228 ++++++++++++ hw/ioh3420.h | 10 + hw/msi.c | 352 +++++++++++++++++++ hw/msi.h | 41 +++ hw/pci.c | 16 +- hw/pci.h | 92 +++++- hw/pci_bridge.c | 15 +- hw/pcie.c | 529 ++++++++++++++++++++++++++++ hw/pcie.h | 112 ++++++ hw/pcie_aer.c | 873 +++++++++++++++++++++++++++++++++++++++++++++++ hw/pcie_aer.h | 105 ++++++ hw/pcie_port.c | 197 +++++++++++ hw/pcie_port.h | 51 +++ hw/pcie_regs.h | 154 +++++++++ hw/xio3130_downstream.c | 207 +++++++++++ hw/xio3130_downstream.h | 11 + hw/xio3130_upstream.c | 188 ++++++++++ hw/xio3130_upstream.h | 10 + qemu-common.h | 6 + qemu-monitor.hx | 36 ++ sysemu.h | 9 + 22 files changed, 3233 insertions(+), 13 deletions(-) create mode 100644 hw/ioh3420.c create mode 100644 hw/ioh3420.h create mode 100644 hw/msi.c create mode 100644 hw/msi.h create mode 100644 hw/pcie.c create mode 100644 hw/pcie.h create mode 100644 hw/pcie_aer.c create mode 100644 hw/pcie_aer.h create mode 100644 hw/pcie_port.c create mode 100644 hw/pcie_port.h create mode 100644 hw/pcie_regs.h create mode 100644 hw/xio3130_downstream.c create mode 100644 hw/xio3130_downstream.h create mode 100644 hw/xio3130_upstream.c create mode 100644 hw/xio3130_upstream.h