The goal here is to support booting from modern only (non-transitional) virtio-net devices. The code strives to comply with the virtio 1.0 spec and is heavily inspired by the Linux kernel implementation.
One notable divergence from Linux is the explicit differentiation between port I/O and memory I/O due to the lack of __iomem in iPXE. See struct virtio_pci_region for details. src/drivers/bus/pciextra.c | 54 ++++++--- src/drivers/bus/virtio-pci.c | 213 ++++++++++++++++++++++++++++++++- src/drivers/bus/virtio-ring.c | 12 +- src/drivers/net/virtio-net.c | 259 +++++++++++++++++++++++++++++++++++++++-- src/drivers/net/virtio-net.h | 18 +++ src/include/ipxe/errfile.h | 1 + src/include/ipxe/pci.h | 2 + src/include/ipxe/virtio-pci.h | 231 ++++++++++++++++++++++++++++++++++++ src/include/ipxe/virtio-ring.h | 9 ++ 9 files changed, 769 insertions(+), 30 deletions(-) [PATCH 1/4] [pci] Add pci_find_next_capability [PATCH 2/4] [virtio] Add virtio 1.0 constants and data structures [PATCH 3/4] [virtio] Add virtio 1.0 PCI support [PATCH 4/4] [virtio] Add virtio-net 1.0 support _______________________________________________ ipxe-devel mailing list ipxe-devel@lists.ipxe.org https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel