This chapter provides a simple description of the basic requirements for a low-level, hardware specific, lwIP-direct ethernet driver.
Using a lwIP-direct driver provides benefits in performance and smaller code- and memory-footprints. It also allows for the potential for zero-copy UDP support and reduced (single) copy TCP support depending on the hardware available. The main disadvantage over the standard ethernet driver world is the lack of RedBoot network debugging support.
The high-level driver implemented by this package (which is only code, without state of its own) is used to provide a common interface for lwIP to either a lwIP-specific direct driver (as described in this chapter), or via a wrapper interface to a standard generic ethernet driver (covered by the Section called Generic Ethernet API in Chapter 156).
Unlike the generic ethernet (standard) device driver support the
lwIP device driver interface uses a fixed namespace between the
lwIP and driver layers. Normally only a single driver instance
exists for a lwIP configured world, so the use of a fixed namespace
is, in reality, not an issue since lwIP is designed for
lightweight, low resource, deeply-embedded systems. If a target
platform really does provide more than one distinct ethernet
hardware implementation, requiring completely different hardware
drivers, then a wrapper layer conforming to the
“direct” driver interface is provided when the
is configured. This implements a per-driver descriptor interface
between the individual low-level hardware interfaces for the
platform and this common Ethernet I/O package.
Normally a direct driver implementation will also provide a driver
specific header file which is referenced from the lwIP CDL
CDL covering the direct driver package should explicitly set the
value to the required header file name. Similarly when support is
configured for multiple direct drivers, the CDL
be used to reference a header providing any needed
platform/variant/driver specific features.
These header files can be used to provide access to prototypes and
manifests needed to support specific lwIP features as required. For
example, if the hardware driver uses DMA, and requires timely
support for re-using PBUFs once lwIP has finished processing them,
manifest can be defined to reference a callback function
The following sections give an overview of the small set of functions that the driver needs to provide to be usable by this package. When the multiple direct driver support is being used then these named functions are provided by this common CYGPKG_IO_ETH_DRIVERS I/O Ethernet package, with a per-driver descriptor structure used to reference the specific driver implementations (See the Section called Multiple direct drivers).