Chapter 14 Newbus

Table of Contents
14.1 Device Drivers
14.2 Overview of Newbus
14.3 Newbus API
Written by Jeroen Ruigrok van der Werven (asmodai) and Hiten Pandya.

Special thanks to Matthew N. Dodd, Warner Losh, Bill Paul, Doug Rabson, Mike Smith, Peter Wemm and Scott Long.

This chapter explains the Newbus device framework in detail.

14.1 Device Drivers

14.1.1 Purpose of a Device Driver

A device driver is a software component which provides the interface between the kernel's generic view of a peripheral (e.g. disk, network adapter) and the actual implementation of the peripheral. The device driver interface (DDI) is the defined interface between the kernel and the device driver component.

14.1.2 Types of Device Drivers

There used to be days in UNIX®, and thus FreeBSD, in which there were four types of devices defined:

  • block device drivers

  • character device drivers

  • network device drivers

  • pseudo-device drivers

Block devices performed in a way that used fixed size blocks [of data]. This type of driver depended on the so-called buffer cache, which had cached accessed blocks of data in a dedicated part of memory. Often this buffer cache was based on write-behind, which meant that when data was modified in memory it got synced to disk whenever the system did its periodical disk flushing, thus optimizing writes.

14.1.3 Character Devices

However, in the versions of FreeBSD 4.0 and onward the distinction between block and character devices became non-existent.