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 instanceINTERFACE 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)