A network adapter driver is low-level software that controls a network adapter. Each network driver operates one or more network adapters in a computer system. It is designed specifically for a particular type of adapter and a particular operating system (OS). A network adapter driver operates at the Media Access Control layer of the network; it directly controls the circuitry of the network adapter associated with it. In combination with other network layers, a computer system uses a network adapter driver to communicate with other networked computers and the Internet.
Prior to the late 1990s, network adapter drivers usually performed much of the grunt work of network communications. Some network adapters required drivers to copy all packet data between their memory buffers and the OS buffers; identification headers were often filled in by the drivers during this process. Adapter drivers frequently had to manage special cases like multicast packet reception and "promiscuous mode" operation. During configuration, a driver often had to identify the computer bus type and program the adapter accordingly. In order to keep up with the network link speed, most adapter drivers were written in highly efficient assembly language.
As the maximum network link speed increased, network drivers and other OS software layers frequently became bottlenecks. To counter this, OS designers moved much of the network adapter driver functionality deeper into the OS; tight integration and optimization with the other network layers often improved performance. Newer network adapters can construct and copy all packet data via hardware, once told where the OS data buffers are located. At the same time, better compiler code generation has allowed adapter drivers to be written in C general-purpose computer programming language instead of assembly language. As a result of these optimizations, network adapter drivers have become much simpler to write and maintain. Modern drivers must still implement some configuration, power management and multiprocessing support; the OS and the network adapter hardware now perform most of the time-sensitive work, however.
Several network adapter drivers can be running on a system at the same time. Most modern computers include a wired network adapter interface built into the motherboard; its network adapter driver is usually included with the OS. Laptops and other portable computers frequently include a wireless network adapter and driver as well. Many systems provide a means to plug in additional network cards—high-speed Gigabit Ethernet or Fiber Channel adapters are common choices. Their drivers are often included with the network adapters when purchased. Most manufacturers also post the latest versions of their drivers on the Internet; users should periodically check for and install these updated drivers to get the latest bug fixes and performance enhancements.