Hello All, This series is the latest code of the e1000e device emulation being developed.
Changes since v1: 1. Added support for all the device features: - Interrupt moderation. - RSS. - Multiqueue. 2. Simulated exact PCI/PCIe configuration space layout. 3. Made fixes needed to pass Microsoft's HW certification tests (HCK). This series is still an RFC, because the following tasks are not done yet: 1. See which code can be shared between this device and the existing e1000 device. 2. Rebase patches to the latest master (current base is v2.3.0). Please share your thoughts, Thanks, Dmitry. =================== Hello qemu-devel, This patch series is an RFC for the new networking device emulation we're developing for QEMU. This new device emulates the Intel 82574 GbE Controller and works with unmodified Intel e1000e drivers from the Linux/Windows kernels. The status of the current series is "Functional Device Ready, work on Extended Features in Progress". More precisely, these patches represent a functional device, which is recognized by the standard Intel drivers, and is able to transfer TX/RX packets with CSO/TSO offloads, according to the spec. Extended features not supported yet (work in progress): 1. TX/RX Interrupt moderation mechanisms 2. RSS 3. Full-featured multi-queue (use of multiqueued network backend) Also, there will be some code refactoring and performance optimization efforts. This series was tested on Linux (Fedora 22) and Windows (2012R2) guests, using Iperf, with TX/RX and TCP/UDP streams, and various packet sizes. More thorough testing, including data streams with different MTU sizes, and Microsoft Certification (HLK) tests, are pending missing features' development. See commit messages (esp. "net: Introduce e1000e device emulation") for more information about the development approaches and the architecture options chosen for this device. This series is based upon v2.3.0 tag of the upstream QEMU repository, and it will be rebased to latest before the final submission. Please share your thoughts - any feedback is highly welcomed :) Best Regards, Dmitry Fleytman. Dmitry Fleytman (10): msix: make msix_clr_pending() visible for clients pci: Introduce function for PCI PM capability creation pcie: Add support for PCIe CAP v1 pcie: Introduce function for DSN capability creation net: Introduce Toeplitz hash calculator net: Add macros for ETH address tracing net_pkt: Name vmxnet3 packet abstractions more generic net_pkt: Extend packet abstraction as requied by e1000e functionality e1000_regs: Add definitions for Intel 82574-specific bits net: Introduce e1000e device emulation MAINTAINERS | 14 + default-configs/pci.mak | 1 + hw/net/Makefile.objs | 5 +- hw/net/e1000_regs.h | 353 ++++- hw/net/e1000e.c | 700 +++++++++ hw/net/e1000e_core.c | 3453 ++++++++++++++++++++++++++++++++++++++++++++ hw/net/e1000e_core.h | 230 +++ hw/net/net_rx_pkt.c | 536 +++++++ hw/net/net_rx_pkt.h | 353 +++++ hw/net/net_tx_pkt.c | 627 ++++++++ hw/net/net_tx_pkt.h | 191 +++ hw/net/vmxnet3.c | 80 +- hw/net/vmxnet_rx_pkt.c | 187 --- hw/net/vmxnet_rx_pkt.h | 174 --- hw/net/vmxnet_tx_pkt.c | 567 -------- hw/net/vmxnet_tx_pkt.h | 148 -- hw/pci/msix.c | 2 +- hw/pci/pci.c | 21 + hw/pci/pcie.c | 96 +- include/hw/pci/msix.h | 1 + include/hw/pci/pci.h | 2 + include/hw/pci/pci_regs.h | 4 + include/hw/pci/pcie.h | 5 + include/hw/pci/pcie_regs.h | 8 +- include/net/checksum.h | 49 +- include/net/eth.h | 161 ++- include/net/net.h | 5 + net/checksum.c | 7 +- net/eth.c | 410 +++++- tests/Makefile | 4 +- trace-events | 195 +++ 31 files changed, 7350 insertions(+), 1239 deletions(-) create mode 100644 hw/net/e1000e.c create mode 100644 hw/net/e1000e_core.c create mode 100644 hw/net/e1000e_core.h create mode 100644 hw/net/net_rx_pkt.c create mode 100644 hw/net/net_rx_pkt.h create mode 100644 hw/net/net_tx_pkt.c create mode 100644 hw/net/net_tx_pkt.h delete mode 100644 hw/net/vmxnet_rx_pkt.c delete mode 100644 hw/net/vmxnet_rx_pkt.h delete mode 100644 hw/net/vmxnet_tx_pkt.c delete mode 100644 hw/net/vmxnet_tx_pkt.h -- 2.4.3