QASSOCIATE(9F) Kernel Functions for Drivers QASSOCIATE(9F)


NAME


qassociate - associate STREAMS queue with driver instance

SYNOPSIS


#include <sys/types.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

int qassociate(queue_t *q, int instance


INTERFACE LEVEL


illumos DDI specific (illumos DDI).

PARAMETERS


queue_t *q
Pointer to a queue(9S) structure. Either the read or
write queue can be used.


int instance
Driver instance number or -1.


DESCRIPTION


The qassociate() function must be used by DLPI style 2 device drivers to
manage the association between STREAMS queues and device instances. The
gld(4D) does this automatically on behalf of drivers based on it. It is
recommended that the gld(4D) be used for network device drivers whenever
possible.


The qassociate() function associates the specified STREAMS queue with the
specified instance of the bottom driver in the queue. Upon successful
return, the stream is associated with the instance with any prior
association dissolved.


A DLPI style 2 driver calls qassociate() while processing the
DL_ATTACH_REQ message. The driver is also expected to call this interface
while performing stream associations through other means, such as ndd(8)
ioctl commands.


If instance is -1, the stream is left unassociated with any hardware
instance.


If the interface returns failure, the stream is not associated with the
specified instance. Any prior association is left untouched.


The interface typically fails because of failure to locate and attach the
device instance. The interface never fails if the specified instance is
-1.

CONTEXT


The qassociate() function can be called from the stream's put(9E) entry
point.

RETURN VALUES


0
Success.


-1
Failure.


EXAMPLES


DLPI style 2 network driver DL_ATTACH_REQ code specifies:

if (qassociate(q, instance) != 0)
goto fail;


The association prevents Dynamic Reconfiguration (DR) from detaching the
instance.


DLPI style 2 network driver DL_DETACH code specifies:

(void) qassociate(q, -1);


This dissolves the queue's association with any device instance.


DLPI style 2 network driver open(9E) code must call:

qassociate(q, -1);


This informs the framework that this driver has been modified to be DDI-
compliant.

SEE ALSO


gld(4D), dlpi(4P), open(9E), put(9E), ddi_no_info(9F), queue(9S)


February 1, 2007 QASSOCIATE(9F)