
Device Classes


Introduction
~~~~~~~~~~~~
A device class describes a type of device, like an audio or network
device. The following device classes have been identified:

<Insert List of Device Classes Here>


Each device class defines a set of semantics and a programming interface
that devices of that class adhere to. Device drivers are the
implementation of that programming interface for a particular device on
a particular bus. 

Device classes are agnostic with respect to what bus a device resides
on. 


Programming Interface
~~~~~~~~~~~~~~~~~~~~~
The device class structure looks like: 


typedef int (*devclass_add)(struct device *);
typedef void (*devclass_remove)(struct device *);

See the kerneldoc for the struct class.

A typical device class definition would look like: 

struct device_class input_devclass = {
        .name		= "input",
        .add_device	= input_add_device,
	.remove_device	= input_remove_device,
};

Each device class structure should be exported in a header file so it
can be used by drivers, extensions and interfaces.

Device classes are registered and unregistered with the core using: 

int devclass_register(struct device_class * cls);
void devclass_unregister(struct device_class * cls);


Devices
~~~~~~~
As devices are bound to drivers, they are added to the device class
that the driver belongs to. Before the driver model core, this would
typically happen during the driver's probe() callback, once the device
has been initialized. It now happens after the probe() callback
finishes from the core. 

The device is enumerated in the class. Each time a device is added to
the class, the class's devnum field is incremented and assigned to the
device. The field is never decremented, so if the device is removed
from the class and re-added, it will receive a different enumerated
value. 

The class is allowed to create a class-specific structure for the
device and store it in the device's class_data pointer. 

There is no list of devices in the device class. Each driver has a
list of devices that it supports. The device class has a list of
drivers of that particular class. To access all of the devices in the
class, iterate over the device lists of each driver in the class.


Device Drivers
~~~~~~~~~~~~~~
Device drivers are added to device classes when they are registered
with the core. A driver specifies the class it belongs to by setting
the struct device_driver::devclass field. 


sysfs directory structure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There is a top-level sysfs directory named 'class'. 

Each class gets a directory in the class directory, along with two
default subdirectories:

        class/
        `-- input
            |-- devices
            `-- drivers


Drivers registered with the class get a symlink in the drivers/ directory 
that points to the driver's directory (under its bus directory):

   class/
   `-- input
       |-- devices
       `-- drivers
           `-- usb:usb_mouse -> ../../../bus/drivers/usb_mouse/


Each device gets a symlink in the devices/ directory that points to the 
device's directory in the physical hierarchy:

   class/
   `-- input
       |-- devices
       |   `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/
       `-- drivers


Exporting Attributes
~~~~~~~~~~~~~~~~~~~~
struct devclass_attribute {
        struct attribute        attr;
        ssize_t (*show)(struct device_class *, char * buf, size_t count, loff_t off);
        ssize_t (*store)(struct device_class *, const char * buf, size_t count, loff_t off);
};

Class drivers can export attributes using the DEVCLASS_ATTR macro that works
similarly to the DEVICE_ATTR macro for devices. For example, a definition 
like this:

static DEVCLASS_ATTR(debug,0644,show_debug,store_debug);

is equivalent to declaring:

static devclass_attribute devclass_attr_debug;

The bus driver can add and remove the attribute from the class's
sysfs directory using:

int devclass_create_file(struct device_class *, struct devclass_attribute *);
void devclass_remove_file(struct device_class *, struct devclass_attribute *);

In the example above, the file will be named 'debug' in placed in the
class's directory in sysfs. 


Interfaces
~~~~~~~~~~
There may exist multiple mechanisms for accessing the same device of a
particular class type. Device interfaces describe these mechanisms. 

When a device is added to a device class, the core attempts to add it
to every interface that is registered with the device class.

