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.

See Also

Notes

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.