DDI_INTR_ENABLE(9F) Kernel Functions for Drivers DDI_INTR_ENABLE(9F)
NAME
ddi_intr_enable, ddi_intr_block_enable, ddi_intr_disable,
ddi_intr_block_disable - enable or disable a given interrupt or range
of interrupts
SYNOPSIS
#include <sys/types.h>
#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
int ddi_intr_enable(
ddi_intr_handle_t h);
int ddi_intr_block_enable(
ddi_intr_handle_t *h_array,
int count);
int ddi_intr_disable(
ddi_intr_handle_t h);
int ddi_intr_block_disable(
ddi_intr_handle_t *h_array,
int count);
INTERFACE LEVEL
illumos DDI specific (illumos DDI).
PARAMETERS
ddi_intr_enable() h DDI interrupt handle
ddi_intr_block_enable() h_array Pointer to an array of DDI interrupt handles
count Number of interrupts
ddi_intr_disable() h DDI interrupt handle
ddi_intr_block_disable() h_array Pointer to an array of DDI interrupt handles
count Number of interrupts
DESCRIPTION
The
ddi_intr_enable() function enables the interrupt given by the
interrupt handle
h.
The
ddi_intr_block_enable() function enables a range of interrupts
given by the
count and
h_array arguments, where
count must be at
least
1 and
h_array is pointer to a count-sized array of interrupt
handles.
The
ddi_intr_block_enable() function can be used only if the device
or host bridge supports the block enable/disable feature. The
ddi_intr_get_cap() function returns the
RO flag
DDI_INTR_FLAG_BLOCK if the device or host bridge supports the interrupt block
enable/disable feature for the given interrupt type. The
ddi_intr_block_enable() function is useful for enabling MSI
interrupts when the optional per-vector masking capability is not
supported.
The
ddi_intr_enable() or
ddi_intr_block_enable() functions must be
called after the required interrupt resources are allocated with
ddi_intr_alloc(), the interrupt handlers are added through
ddi_intr_add_handler(), and the required locks are initialized by
mutex(9F) or
rwlock(9F).
Once enabled by either of the enable calls, the interrupt can be
taken and passed to the driver's interrupt service routine. Enabling
an interrupt implies clearing any system or device mask bits
associated with the interrupt.
The
ddi_intr_disable() function disables the interrupt given by the
interrupt handle
h.
The
ddi_intr_block_disable() function disables a range of interrupts
given by the
count and
h_array arguments, where
count must be at
least
1 and
h_array is pointer to a count-sized array of interrupt
handles.
The
ddi_intr_block_disable() function can be used only if the device
or host bridge supports the block enable/disable feature. The
ddi_intr_get_cap() function returns the
RO flag
DDI_INTR_FLAG_BLOCK if the device or host bridge supports the interrupt block
enable/disable feature for the given interrupt type. The
ddi_intr_block_disable() function is useful for disabling MSI
interrupts when the optional per-vector masking capability is not
supported.
The
ddi_intr_disable() or
ddi_intr_block_disable() functions must be
called before removing the interrupt handler and freeing the
corresponding interrupt with
ddi_intr_remove_handler() and
ddi_intr_free(), respectively. The
ddi_intr_block_disable() function
should be called if the
ddi_intr_block_enable() function was used to
enable the interrupts.
RETURN VALUES
The
ddi_intr_enable(),
ddi_intr_block_enable(),
ddi_intr_disable(),
and
ddi_intr_block_disable() functions return:
DDI_SUCCESS On success.
DDI_EINVAL On encountering invalid input parameters.
DDI_FAILURE On any implementation specific failure.
CONTEXT
The
ddi_intr_enable(),
ddi_intr_block_enable(),
ddi_intr_disable(),
and
ddi_intr_block_disable() functions can be called from kernel non-
interrupt context.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Committed |
+--------------------+-----------------+
SEE ALSO
attributes(7),
ddi_intr_add_handler(9F),
ddi_intr_alloc(9F),
ddi_intr_dup_handler(9F),
ddi_intr_free(9F),
ddi_intr_get_cap(9F),
ddi_intr_remove_handler(9F),
mutex(9F),
rwlock(9F) Writing Device DriversNOTES
Consumers of these interfaces should verify that the return value is
not equal to
DDI_SUCCESS. Incomplete checking for failure codes could
result in inconsistent behavior among platforms.
If a device driver that uses
MSI and
MSI-X interrupts resets the
device, the device might reset its configuration space modifications.
Such a reset could cause a device driver to lose any
MSI and
MSI-X interrupt usage settings that have been applied.
April 22, 2005 DDI_INTR_ENABLE(9F)