# UEFI Network Device Driver for Intel® Ethernet Network Connections

Overview

Supported UEFI Implementations

Intel UEFI Network Driver Naming Convention

Loading the UEFI Driver

Installing the UEFI Network Driver Option ROM Using PROset

Installing the UEFI Network Driver Option ROM From the UEFI Shell

UEFI Network Stack

Configuring UEFI Network Stack for PXE

Configuring UEFI Network Stack for TCP/UDP/MTFTP

Unloading the UEFI Network Driver

Force Speed and Duplex

## Overview

The UEFI network driver for Intel® Ethernet Network Connection enables network connectivity under UEFI. It can be used in conjunction with UEFI software components available from other sources to perform network functions in the UEFI environment. Intel's UEFI network driver supports Intel's FLB3 file format. This format extends the header information in the FLB file, enabling more than 16 image types, including a combined Option ROM and NVM image.

| NOTE: If you update your adapter's NVM image, you must completly power cycle your system, including removing main power, for the update to take affect.

## Supported UEFI Implementations

The UEFI network driver supports UEFI platforms based on the following UEFI/EFI specifications:

- UEFI 2.3 (http://www.uefi.org)
- UEFI 2.2
- UEFI 2.1
- UEFI 2.0
- EFI 1.10 (http://www.intel.com/technology/efi)

UEFI driver binaries are provided for 64-bit (x86-64), and Itanium processor family platforms.

## Intel UEFI Network Driver Naming Convention

The network driver version, UEFI platform type, and the network hardware support can be determined by the file naming convention. The format of the driver filename is listed below:
Exyzztn.efi

where:

> x - major version number of the UEFI driver in decimal
> y - minor version number of the UEFI driver in decimal
> zz - fix field of the version number
> t - the type of driver

> > X - UEFI x64 driver
> > I - UEFI Itanium driver

> n - class of adapter the driver is for

> > 2 – PCI/PCI-X Gigabit
> > 3 – PCIe Gigabit
> > 4 - 10 Gigabit

Examples:

> E3603X3.efi - Version 3.6.03 of UEFI x64 driver for Intel PCIe Gigabit network connection
> E1001I4.efi - Version 1.0.01 of UEFI Itanium driver for Intel 10GBE network connection

## Loading the UEFI Network Driver

The network driver can be loaded using the UEFI shell "load" command:

> load e3040e2.efi

| NOTE: Long initialization times observed with Intel’s UEFI driver are caused when the UNDI.Initialize command is called with the PXE_OPFLAGS_INITIALIZE_CABLE_DETECT flag set. In this case, UNDI.Initialize will try to detect the link state. If the port is connected and link is up, initialize will generally finish in about 3.5 seconds (the time needed to establish link, dependant on link conditions, link speed and controller type) and returns PXE_STATFLAGS_COMMAND_COMPLETE. If the port is disconnected (link is down), initialize will complete in about 5 seconds and return PXE_STATFLAGS_INIIALIZED_NO_MEDIA (driver initializes hardware then waits for link and timeouts when link is not establish in 5 secs). When UNDI.Initialize is called with PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE the function will not try to detect link status and will take less than 1 second to complete. The behavior of UNDI.Initialize is described in UEFI specs 2.3.1: Initializing the network device will take up to four seconds for most network devices and in some extreme cases (usually poor cables) up to twenty seconds. Control will not be returned to the caller and the COMMAND_COMPLETE status flag will not be set until the adapter is ready to transmit.

## Installing the UEFI Network Driver Option ROM Using PROSet

Intel® PROSet for Windows Device Manager can install the UEFI network driver on an Intel network adapter's option ROM. The UEFI network driver will load automatically during system UEFI boot When installed in the option ROM. UEFI specific*.FLB images are included on the CD release media. The "Boot Options" tab in Intel® PROSet for Windows Device Manager will allow the UEFI*.FLB image to be installed on the network adapter.

The following FLB files are included on the release media:

> BAxyzzX2.flb - Version x.y.zz of the PCI/PCI-X gigabit driver for x86-64
> BAxyzzI2.flb - Version x.y.zz of the PCI/PCI-X gigabit driver for Itanium
> BAxyzzX3.flb - Version x.y.zz of the PCIe gigabit driver for x86-64
> BAxyzzI3.flb - Version x.y.zz of the PCIe gigabit driver for Itanium
> BAxyzzX4.flb - Version x.y.zz of the 10-gigabit driver for x86-64
> BAxyzzI4.flb - Version x.y.zz of the 10-gigabit driver for Itanium

Intel® PROSet for Windows Device Manager can only be used to program add-in Intel PCI, PCI-X, and PCIe network adapters. LOM (LAN On Motherboard) network connections cannot be programmed with the UEFI network driver option ROM. Refer to the PROSet documentation for detailed instructions.

## Installing the UEFI Network Driver Option ROM from the UEFI Shell

The BootUtil command line utility can install the UEFI network driver on an Intel network adapter's option ROM. The UEFI network driver will load automatically during system UEFI boot When installed into the option ROM. Run BootUtil with the following command line options to install the UEFI network driver on all supported Intel network adapters:

For x64 systems:

> FS0:\>bootutil64e –up=efi –all

For ia64 systems:

> FS0:\>bootutil64 –up=efi64 –all

BootUtil can only be used to program add-in Intel PCI, PCI-X, and PCIe network adapters. LOM (LAN On Motherboard) network connections cannot be programmed with the UEFI network driver option ROM.

## UEFI Network Stack

As of UEFI 2.1 there are two network stack configurations under UEFI. The most common configuration is the PXE based network stack. The alternate network stack provides IPv4 TCP, UDP, and MTFTP network protocol support. As of UEFI 2.1 the PXE and IP-based network stacks cannot be loaded or operate simultaneously. The following two sections describe each UEFI network stack configuration.

Reference implementations of the PXE and IP based network stack source code are available for download at www.tianocore.org.

## Configuring UEFI Network Stack for PXE

The PXE (Preboot eXecution Environment) based UEFI network stack provides support for UEFI network boot loaders downloaded from a WFM compliant PXE server. Services which can be enabled include Windows Deployment Services (WDS), Linux network installation (Elilo), and TFTP file transfers. To enable UEFI PXE services the following network protocol drivers must be loaded with: snp.efi, bc.efi, and pxedhcp4.efi. These drivers can be loaded from the UEFI "load" shell command, but are often included as part of the UEFI system firmware. The UEFI shell command "drivers" can be used to determine if the UEFI PXE drivers are included in the UEFI implementation. The drivers command will output a table listing drivers loaded in the system. The following entries must be present in order to network boot a UEFI system over PXE:

DRV | VERSION | TYPE | CFG | DIAG | #D | #C | DRIVER NAME | IMAGE NAME
F5 | 00000010 | D | - | - | 2 | - | Simple Network Protocol Driver | SNP
F7 | 00000010 | D | - | - | 2 | - | PXE Base Code Driver | BC
F9 | 00000010 | D | - | - | 2 | - | PXE DHCPv4 Driver | PxeDhcp4
FA | 03004000 | B | X | X | 2 | 2 | Intel(R) Network Connection 3.0.00 | /e3000e2.efi

A network boot option will appear in the boot options menu when the UEFI PXE network stack and Intel UEFI network driver have been loaded. Selecting this
boot option will initiate a PXE network boot.

## Configuring UEFI Network Stack for TCP/UDP/MTFTP

An IP-based network stack is available to applications requiring IP-based network protocols such as TCP, UDP, or MTFTP. The following UEFI network drivers must be built into the UEFI platform implementation to enable this stack: SNP (Simple Network Protocol), MNP (Managed Network Protocol), ARP, DHCP4, IPv4, ip4config, TCPv4, UDPv4, and MTFTPv4. These drivers will show up in the UEFI "drivers" command output if they are included in the platform UEFI implementation:

DRV | VERSION | TYPE | CFG | DIAG | #D | #C | DRIVER NAME | IMAGE NAME
F5 | 00000010 | D | - | - | 2 | - | IP4 CONFIG Network Service Driver | Ip4Config
F7 | 00000010 | D | - | - | 2 | - | Simple Network Protocol Driver | SNP
F8 | 00000010 | D | - | - | 2 | - | ARP Network Service Driver | Arp
F9 | 00000010 | D | - | - | 2 | - | Tcp Network Service Driver | Tcp4
FA | 00000010 | D | - | - | 2 | - | IP4 Network Service Driver | Ip4
FB | 00000010 | D | - | - | 2 | - | DHCP Protocol Driver | Dhcp4
FC | 00000010 | D | - | - | 6 | - | UDP Network Service Driver | Udp4
FD | 00000010 | D | - | - | 2 | - | MTFTP4 Network Service | Mtftp4
FE | 00000010 | B | - | - | 2 | 6 | MNP Network Service Driver | /mnp.efi
FF | 03099900 | B | X | X | 2 | 2 | Intel(R) Network Connection 3.0.00 | /e3000e2.efi

The ifconfig UEFI shell command must be used to configure each network interface. Running "ifconfig -?" from the UEFI shell will display usage instructions for ifconfig.

## Unloading the UEFI Network Driver

To unload a network driver from memory the UEFI "unload" command is used. The syntax for using the unload command is as follows: "unload [driver handle]", where driver handle is the number assigned to the driver in the far left column of the "drivers" output screen.

## Force Speed and Duplex

The UEFI network driver supports forced speed and duplex capability. The force speed and duplex menu can be accessed with UEFI shell command "drvcfg":

> drvcfg -s [driver handle] [control handle]

The following speed and duplex configurations can be selected:

- Autonegotiate (recommended)

- 100 Mbps, full duplex

- 100 Mbps, half duplex

- 10 Mbps, full duplex

- 10 Mbps, half duplex

The speed and duplex setting selected must match the speed and duplex setting of the connecting network port. A speed and duplex mismatch between ports will result in dropped packets and poor network performance. It is recommended to set all ports on a network to autonegotiate. Connected ports must be set to autonegotiate in order to establish a 1 gigabit per second connection.

Fiber-optic and 10 gigabit ethernet adapters do not support forced speed and duplex.

### Diagnostic Capability

The UEFI network driver features built in hardware diagnostic tests. The diagnotic tests are called with the UEFI shell drvdiag command.

> "drvdiag -s" -Perform a basic hardware register test
> "drvdiag -e" -Perform an internal loopback transmit and receive test