25 Network Driver Design Guidelines
This chapter focuses on the design and implementation of UEFI Drivers for network interface controllers. These UEFI Drivers typically bus drivers follow the UEFI Driver Model. Some example devices include add-in PCI network adapters, USB network controllers, cardbus network cards, and LAN-on-motherboard network devices. This list illustrates that most network interface controllers are PCI devices or USB devices. As a result, the UEFI Drivers for network interface controllers must follow all of the design guidelines described in Chapter 18 for PCI or Chapter 19 for USB, and must also follow the general guidelines described in Chapter 4.
If a network interface controller is intended to be used as a boot device for a UEFI operating system or UEFI applications, then a UEFI Driver must be implemented that produces Network Interface Identifier Protocol and UNDI, the Simple Network Protocol, or the Managed Network Protocol. If the network interface controller hardware supports VLAN, then the VLAN Config Protocol must be implemented. If the UEFI Driver for a network interface controller only produces the Managed Network Protocol, then the UEFI Driver must also produce the VLAN Config Protocol even if the network interface controller does not support VLAN.
All three UEFI Driver designs for network interface controllers are covered in this chapter. There are several factors that affect the design of a UEFI Driver for a network interface controller. The following table summarizes the major features for each of the three possible UEFI Driver designs.
Table 36-Network driver differences
Feature | NII and UNDI | Simple Network Protocol | Managed Network Protocol |
---|---|---|---|
UEFI Runtime Driver | Yes | No | No |
Depends on platform agnostic UEFI Driver for | Yes | No | No |
Depends on platform agnostic UEFI Driver for | Yes | Yes | No |
Requires UNDI interface | Yes | No | No |
Supports EBC CPU Architecture | No | Yes | Yes |
Requires Exit Boot Services Event | Yes | Maybe | Maybe |
Requires Set Virtual Address Map Event | Yes | No | No |
The EDK II provides a set of platform agnostic drivers in the MdeModulePkg
and the NetworkPkg
that consume the protocols produced by a UEFI Driver for a
network interface controller and produce the Load File Protocol which is one of
the two protocols from which a UEFI Boot Manager is able to boot a UEFI operating system or a
UEFI application. The Load File Protocol allows a UEFI operating system or UEFI
application to be booted from a properly configured PXE server. The platform
agnostic drivers allow the services provided by the network interface
controller to be accessed without any specialized knowledge of the specific
device or controller. The set platform agnostic UEFI Drivers include:
MdeModulePkg/Universal/Network/ArpDxe
MdeModulePkg/Universal/Network/Dhcp4Dxe
MdeModulePkg/Universal/Network/DpcDxe
MdeModulePkg/Universal/Network/Ip4ConfigDxe
MdeModulePkg/Universal/Network/Ip4Dxe
MdeModulePkg/Universal/Network/IScsiDxe
MdeModulePkg/Universal/Network/MnpDxe
MdeModulePkg/Universal/Network/Mtftp4Dxe
MdeModulePkg/Universal/Network/SnpDxe
MdeModulePkg/Universal/Network/Tcp4Dxe
MdeModulePkg/Universal/Network/Udp4Dxe
MdeModulePkg/Universal/Network/UefiPxeBcDxe
MdeModulePkg/Universal/Network/VlanConfigDxe
NetworkPkg/Dhcp6Dxe
NetworkPkg/Ip6Dxe
NetworkPkg/IpSecDxe
NetworkPkg/IScsiDxe
NetworkPkg/Mtftp6Dxe
NetworkPkg/TcpDxe
NetworkPkg/Udp6Dxe
NetworkPkg/UefiPxeBcDxe
These platform agnostic drivers also provide support for iSCSI which produces the Block I/O Protocol for a network boot target. Additional platform agnostic drivers produce the Simple File System Protocol from a Block I/O Protocol. Those details are provided in Chapter 24 on mass storage devices.