te
Copyright (c) 2009, Sun Microsystems, Inc.
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
DDI_INTR_SET_NREQ 9F "Jan 5, 2009"
NAME
ddi_intr_set_nreq - set the number of interrupts requested for a device driver instance
SYNOPSIS
#include <sys/ddi_intr.h>



int ddi_intr_set_nreq(dev_info_t *dip, int nreq);
INTERFACE LEVEL
illumos DDI specific (illumos DDI).
PARAMETERS
dip

Pointer to the dev_info structure.

nreq

Number of interrupts requested.

DESCRIPTION
The ddi_intr_set_nreq() function changes the number of interrupts requested by a device driver instance.

The nreq parameter is the total number of interrupt resources that this instance of the device driver would like to have available. The nreq parameter includes any interrupt resources already allocated by the driver. For example, if the driver instance already has two MSI-X vectors and it wants two more, it should call this function with an nreq parameter set to four.

The nreq parameter can be any value between one and the maximum number of interrupts supported by the device hardware, as reported by a call to the ddi_intr_get_nintrs(9F) function. The driver receives a callback notifying it in cases when it must release any previously allocated interrupts, or when it is allowed to allocate more interrupts as a result of its new nreq parameter.

The ddi_intr_set_nreq()function is not supported unless a driver is already consuming interrupts, and if it has a registered callback handler that can process actions related to changes in interrupt availability. See ddi_cb_register(9F) for an explanation on how to enable this functionality.

RETURN VALUES
The ddi_intr_set_nreq() function returns: DDI_SUCCESS

on success

DDI_EINVAL

The operation is invalid because the nreq parameter is not a legal value

DDI_ENOTSUP

The operation is not supported. The driver must have a registered callback, and the system must have interrupt pools implemented.

DDI_FAILURE

Implementation specific failure

CONTEXT
These 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 Private
MT-Level MT-Safe
SEE ALSO
attributes (7), attach (9E), ddi_cb_register (9F), ddi_intr_alloc (9F), ddi_intr_get_nintrs (9F)
NOTES
The Interrupt Resource Management feature is limited to device driver instances that are using MSI-X interrupts (interrupt type DDI_INTR_TYPE_MSIX). Attempts to use this function for any other type of interrupts fails with DDI_ENOTSUP.

The total number of interrupts requested by the driver is initially defined by the count parameter provided by the driver's first call to the ddi_intr_alloc(9F) function, specifically during the driver instance's attach(9E) routine. The ddi_intr_set_nreq() function is only used if the driver instance experiences changes in its I/O load. In response to increased I/O load, the driver may want to request additional interrupt resources. In response to diminished I/O load. the driver may volunteer to return extra interrupt resources back to the system.