Device driver services

Describes asynchronous services provided by device drivers.

Some asynchronous services are provided directly by device drivers.

As with services provided by the client-server framework, device driver provided services are presented to clients through a client API known as the user-side device driver. This is typically an R class, derived from RLogicalChannel.

When the RLogicalChannel is opened, the device driver is initialised and the client’s thread id is noted. Request functions are converted into a message which encapsulates all the parameters, and sent to the Kernel-side driver. Completion of a request function usually corresponds closely with completion of a device operation. On completion, the driver posts the request status and signals the client thread’s request semaphore.

Device drivers often have limited capability. For instance, an inability to be opened by multiple client threads simultaneously. Therefore, devices are often handled by specially tailored server threads. These servers present a client API with more sophistication, sharing and checking.

Usually, therefore, clients use the server-provided classes rather than the user-side device driver directly.