Also summarize the resultant NIC driver options in the README file.

Contributed-under: TianoCore Contribution Agreement 1.0

Signed-off-by: Laszlo Ersek <ler...@redhat.com>
---
 OvmfPkg/OvmfPkgIa32.dsc            |    1 +
 OvmfPkg/OvmfPkgIa32.fdf            |    1 +
 OvmfPkg/OvmfPkgIa32X64.dsc         |    1 +
 OvmfPkg/OvmfPkgIa32X64.fdf         |    1 +
 OvmfPkg/OvmfPkgX64.dsc             |    1 +
 OvmfPkg/OvmfPkgX64.fdf             |    1 +
 OvmfPkg/README                     |   37 ++++++++++++++--------
 OvmfPkg/VirtioNetDxe/VirtioNet.inf |   60 ++++++++++++++++++++++++++++++++++++
 8 files changed, 90 insertions(+), 13 deletions(-)
 create mode 100644 OvmfPkg/VirtioNetDxe/VirtioNet.inf

diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index 0e6d187..fbb7098 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -480,6 +480,7 @@
   MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
   #
   # Usb Support
diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
index 4665b9e..be6ca88 100644
--- a/OvmfPkg/OvmfPkgIa32.fdf
+++ b/OvmfPkg/OvmfPkgIa32.fdf
@@ -267,6 +267,7 @@ FILE FREEFORM = 
PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
   INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   INF  MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   INF  MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  INF  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
 #
 # Usb Support
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index 48da532..ace575a 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -487,6 +487,7 @@
   MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
   #
   # Usb Support
diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf
index 177c880..89e86e6 100644
--- a/OvmfPkg/OvmfPkgIa32X64.fdf
+++ b/OvmfPkg/OvmfPkgIa32X64.fdf
@@ -267,6 +267,7 @@ FILE FREEFORM = 
PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
   INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   INF  MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   INF  MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  INF  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
 #
 # Usb Support
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index c191c61..e5de725 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -507,6 +507,7 @@
   MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
   #
   # Usb Support
diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
index 1d3ba8e..abeedef 100644
--- a/OvmfPkg/OvmfPkgX64.fdf
+++ b/OvmfPkg/OvmfPkgX64.fdf
@@ -267,6 +267,7 @@ FILE FREEFORM = 
PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
   INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
   INF  MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
   INF  MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+  INF  OvmfPkg/VirtioNetDxe/VirtioNet.inf
 
 #
 # Usb Support
diff --git a/OvmfPkg/README b/OvmfPkg/README
index 13058ea..213d864 100644
--- a/OvmfPkg/README
+++ b/OvmfPkg/README
@@ -108,11 +108,11 @@ $ OvmfPkg/build.sh -a IA32 -b RELEASE -t GCC45
 
 === Network Support ===
 
-OVMF provides a generic UEFI network stack by default, with the lowest level
-driver (the NIC driver) missing in the default build. In order to complete the
-stack and make eg. DHCP, PXE Boot, and socket test utilities from the StdLib
-edk2 package work, (1) qemu has to be configured to emulate a NIC, (2) a
-matching UEFI NIC driver must be available when OVMF boots.
+OVMF provides a UEFI network stack by default. Its lowest level driver is the
+NIC driver, higher levels are generic. In order to make DHCP, PXE Boot, and eg.
+socket test utilities from the StdLib edk2 package work, (1) qemu has to be
+configured to emulate a NIC, (2) a matching UEFI NIC driver must be available
+when OVMF boots.
 
 (If a NIC is configured for the virtual machine, and -- dependent on boot order
 -- PXE booting is attempted, but no DHCP server responds to OVMF's DHCP
@@ -122,23 +122,23 @@ longer.)
 * For each NIC emulated by qemu, a GPLv2 licensed UEFI driver is available from
   the iPXE project. The qemu source distribution, starting with version 1.5,
   contains prebuilt binaries of these drivers (and of course allows one to
-  rebuild them from source as well).
+  rebuild them from source as well). This is the recommended set of drivers.
 
 * Use the qemu -netdev and -device options, or the legacy -net option, to
   enable NIC support: <http://wiki.qemu.org/Documentation/Networking>.
 
 * For a qemu >= 1.5 binary running *without* any "-M machine" option where
   "machine" would identify a < qemu-1.5 configuration (for example: "-M
-  pc-i440fx-1.4" or "-M pc-0.13"), the drivers are available from the default
-  qemu installation to OVMF without further settings.
+  pc-i440fx-1.4" or "-M pc-0.13"), the iPXE drivers are automatically available
+  to and configured for OVMF in the default qemu installation.
 
 * For a qemu binary in [0.13, 1.5), or a qemu >= 1.5 binary with an "-M
   machine" option where "machine" selects a < qemu-1.5 configuration:
 
   - download a >= 1.5.0-rc1 source tarball from 
<http://wiki.qemu.org/Download>,
 
-  - extract the following files from the tarball and install them in a
-    location that is accessible to qemu processes (this may depend on your
+  - extract the following iPXE driver files from the tarball and install them
+    in a location that is accessible to qemu processes (this may depend on your
     SELinux configuration, for example):
 
     qemu-VERSION/pc-bios/efi-e1000.rom
@@ -156,9 +156,11 @@ longer.)
     -device rtl8139,...,romfile=/full/path/to/efi-rtl8139.rom
     -device virtio-net-pci,...,romfile=/full/path/to/efi-virtio.rom
 
-* Independently of the iPXE NIC drivers, Intel's proprietary E1000 NIC driver
-  can be embedded in the OVMF image at build time, as an alternative guest
-  driver for "-device e1000":
+* Independently of the iPXE NIC drivers, the default OVMF build provides a
+  basic virtio-net driver, located in OvmfPkg/VirtioNetDxe.
+
+* Also independently of the iPXE NIC drivers, Intel's proprietary E1000 NIC
+  driver (PROEFI) can be embedded in the OVMF image at build time:
 
   - Download UEFI drivers for the e1000 NIC
     - 
http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=17515&lang=eng
@@ -168,6 +170,15 @@ longer.)
     - Add "-D E1000_ENABLE -D FD_SIZE_2MB" to your build command,
     - For example: "build -D E1000_ENABLE -D FD_SIZE_2MB".
 
+* When a matching iPXE driver is configured for a NIC as described above, it
+  takes priority over other drivers that could possibly drive the card too:
+
+                 | e1000  ne2k_pci  pcnet  rtl8139  virtio-net-pci
+    -------------+------------------------------------------------
+    iPXE         |   x       x        x       x           x
+    VirtioNetDxe |                                        x
+    Intel PROEFI |   x
+
 === UNIXGCC Debug ===
 
 If you build with the UNIXGCC toolchain, then debugging will be disabled
diff --git a/OvmfPkg/VirtioNetDxe/VirtioNet.inf 
b/OvmfPkg/VirtioNetDxe/VirtioNet.inf
new file mode 100644
index 0000000..408a541
--- /dev/null
+++ b/OvmfPkg/VirtioNetDxe/VirtioNet.inf
@@ -0,0 +1,60 @@
+## @file
+#
+# This driver produces Simple Network Protocol instances for virtio-net
+# devices.
+#
+# Copyright (C) 2013, Red Hat, Inc.
+#
+# This program and the accompanying materials are licensed and made available
+# under the terms and conditions of the BSD License which accompanies this
+# distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
+# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = VirtioNetDxe
+  FILE_GUID                      = A92CDB4B-82F1-4E0B-A516-8A655D371524
+  MODULE_TYPE                    = UEFI_DRIVER
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = VirtioNetEntryPoint
+
+[Sources]
+  ComponentName.c
+  DriverBinding.c
+  EntryPoint.c
+  Events.c
+  SnpGetStatus.c
+  SnpInitialize.c
+  SnpMcastIpToMac.c
+  SnpReceive.c
+  SnpReceiveFilters.c
+  SnpSharedHelpers.c
+  SnpShutdown.c
+  SnpStart.c
+  SnpStop.c
+  SnpTransmit.c
+  SnpUnsupported.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  OvmfPkg/OvmfPkg.dec
+
+[LibraryClasses]
+  BaseMemoryLib
+  DebugLib
+  DevicePathLib
+  MemoryAllocationLib
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+  UefiLib
+  VirtioLib
+
+[Protocols]
+  gEfiSimpleNetworkProtocolGuid  ## BY_START
+  gEfiDevicePathProtocolGuid     ## BY_START
+  gEfiPciIoProtocolGuid          ## TO_START
-- 
1.7.1


------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to