Host Driver Environment

The heart of the Nanoradio WLAN networking driver is WiFi Engine. WiFi Engine is a portable module used as the core component of the device driver for the NRX700. This core component is surrounded by interfaces (APIs) and adaptation layers (ADLs) to ensure portability between platforms. The architecture is truly generic and common to implementations of WiFi engine on all platforms and operating systems. The interfaces of interest for porting or understanding the Nanoradio host driver are:

1.      WiFi Engine API

2.      Driver Environment API

3.      Transport Driver API

WiFi Engine API

The WiFi Engine API provides a generic interface towards the application layer and contains all functions necessary for a networking driver (e.g. an NDIS miniport driver for Windows XP, or a Wireless Extensions compliant driver in Linux).

Driver Environment API

The Driver Environment API is the glue layer for services needed by the generic WiFi Engine code. The glue layer must be ported to each supported platform. The WiFi Driver Environment comprises functions that wrap platform specific primitives such as memory allocation, string handling, semaphores, frame sending system calls, etc.

Transport Driver API

The Transport Driver API provides an abstraction for any physical device driver that can be used for communication with the chipset. The chipset offers two alternative interfaces: SDIO or UART. The SDIO interface may be run in different modes (4bit, 1bit or SPI mode). The Transport Driver API makes it transparent what physical hardware interface is used.

 

Introduction to the host driver ADLs

The generic interfaces of the host driver are adapted to the specific host platform OS by a set of adaptation layers. The purpose of the adaptation layers is to hide the specifics of the underlying hardware or driver and present a uniform interface to the application program or simply to map or convert the calls to provide a generic interface. And with this purpose it is by definition not necessary for an application programmer to use or change the adaptation layers. Hence they are just briefly described here. The adaptation layers are:

1.      Wireless Extensions Adaptation Layer

2.      Data Path Adaptation Layer

3.      Driver Environment Adaptation Layer

4.      Transport Driver Adaptation Layer

Wireless Extensions Adaptation Layer

The Wireless Extensions ADL is the glue code between the open Linux Wireless Extensions and the Nanoradio-proprietary WiFi Engine API. Nanoradio provides reference implementations for Wireless Extensions up to version 20 on Linux 2.4 and Linux 2.6.

Data Path Adaptation Layer

The Data Path ADL maps the inherent Linux Ethernet-type network interface calls from the Network Driver to WiFi Engine API calls and Transport API calls. Data traffic and all IP-level configurations takes place through the standard Linux Ethernet-type Network Driver.

Driver Environment Adaptation Layer

The Driver Environment Adaptation Layer abstracts the OS by implementing the Driver Environment API using OS primitives.

Transport Driver Adaptation Layer

The Transport Driver Adaptation Layer is the glue code between the physical device driver and the generic Transport Driver API. Nanoradio provides support for physical drivers for various platforms and interfaces (e.g. UART/SPI/SDIO for various ARM platforms). By having a common interface for different transport mechanisms, it is transparent for the driver, and thus for the application, which hardware interface is used.