NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ATTRIBUTES | SEE ALSO
#include <ddi/bench/bench.h>
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
DDI
The bench DDI describes a common interface through which bench programs can measure interrupt latencies in a manner independent of the device.
This interface can be implemented at any level of the device hierarchy, providing the hardware permits it. The (pseudo) bench DDI can thus be viewed as a DDI offered by potentially any device.
The bench driver service routines are declared by the BenchOps structure:
typedef void* BenchId; /* * Bench interrupt handler */ typedef void (*BenchIntrHandler) __((void* cookie)); /* * Bench driver operations. */ typedef struct BenchOps { BenchVersion version; KnError (*open) __((BenchId id, BenchIntrHandler hdl, void* cookie)); void (*trigger_start) __((BenchId id)); void (*trigger_stop) __((BenchId id)); void (*trigger) __((BenchId id)); void (*trigger_overhead) __((BenchId id)); void (*close) __((BenchId id)); } BenchOps;
A pointer to the BenchOps structure is exported by adriver via the svDeviceRegister microkernel call. A driver client invokes the svDeviceLookup and svDeviceEntry microkernel calls in order to obtain a pointer to the device service routines vector. Once the pointer is obtained, the driver client can invoke the driver service routines (via the indirect function call) in order to open/close the device, trigger device interrupts and also measure the overhead associated with the trigger.
The operations on the bench driver are the following:
The open() command establishes a connection between the driver client and a given device driver instance. The bench driver must be a mono client one.
The parameter devId specifies a given bench device. The parameter hdl specifies the client interrupt handler that will be invoked by the driver. The parameter, cookie, points to the client handle passed as an argument to the call-back interrupt handler.
The open function returns the following result:
The bench driver has been started.
The open failed for reasons specific to each implementation.
The trigger() function triggers an interrupt on the device. The client handler (parameter to device open) will eventually be invoked with the device interrupts masked.
The trigger_overhead() function can be used to measure the overhead associated with triggering an interrupt. The client handler (parameter to device open) will be invoked before this call returns.
The trigger_start() and trigger_stop() functions allow the bench driver to do setup operations as may be necessary. The trigger() and trigger_overhead() functions must be invoked within the trigger_start() and trigger_stop() functions. The last two functions are to allow the bench device driver to do the necessary setup.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | ATTRIBUTES | SEE ALSO