.TH putnextctl1() "" "" "DDI/DKI Kernel Routine"
.PC "Send a control message and a parameter to a queue"
.B "#include <sys/stream.h>"
\fBint putnextctl1(\fIqueue\^\fB, \fItype\^\fB, \fIparameter\^\fB)\fR
\fBqueue_t *\fIqueue\^\fB; int \fItype\^\fB, parameter\^\fB;\fR
.PP
.BR putnextctl1() ,
like
.BR putctl() ,
allocates a message block and calls the driver's
.B put
routine to put it onto the queue next to
.I queue
(i.e., to \fIqueue\^\fB->q_next\fR).
.I type
is the type of the message to be created; it must not be a data type, i.e.,
.BR M_DATA ,
.BR M_PROTO ,
or
.BR M_PCPROTO .
.PP
.I parameter
gives a one-byte parameter.
What this parameter represents depends upon the type of message being created.
.PP
.B putnextctl1()
returns one if it could allocate and put the the message block.
It fails and returns zero if
.I type
is a data type, or if it cannot allocate a message block.
.SH "See Also"
.B
DDI/DKI kernel routines,
put(),
putctl(),
putnextctl(),
putnextctl1(),
queue
.R
.SH Notes
.B putnextctl1()
has base or interrupt level.
It does not sleep.
.PP
A driver can hold a driver-defined basic lock, read/write lock, or sleep lock
across a call to this function.
.PP
The caller cannot have the stream frozen when it calls this function.
