13.6.4. Device driver layer

Angel supports polled and asynchronous interrupt-driven devices, and devices that start in an asynchronous mode and finish by polling the rest of a packet. At the boundary of the device driver layer, the interface offers asynchronous (by callback) read and write interfaces to Angel, and a synchronous interface to the application.

Refer to Writing the device drivers for more information on device drivers.

Support for callback across all devices

This is primarily a channels layer issue, but because the BOOT channel must listen on all Angel-compatible devices, the channels layer must determine how many devices to listen to for boot messages, and which devices those are.

To provide this statically, the devices layer exports the appropriate device table or tables, together with the size of the tables.

Transmit queueing

Because the core operating mode is asynchronous and more than one thread can use a device, Angel rejects all but the first request, returns a busy error message, and leaves the user (channels or the user application) to retry later.

Angel interrupt handlers

Angel Interrupt handlers are installed statically, at link time. The Angel Interrupt handler runs off either IRQ or FIQ. It is recommended that it is run off IRQ. The Angel interrupt is defined in devconf.h. Refer to devconf.h for more information.

Control calls

Angel device drivers provide a control entry point that supports the enable/disable transmit/receive commands, so that Angel can control application devices at critical times. Refer to Writing the device drivers for more information.

Copyright © 1997, 1998 ARM Limited. All rights reserved.ARM DUI 0040D
Non-Confidential