.TH putctl1() "" "" "DDI/DKI Kernel Routine"
.PC "Enqueue a control message and one-byte parameter"
.B "#include <sys/stream.h>"
\fBint putctl1(\fIqueue\^\fB, \fItype\^\fB, \fIparameter\^\fB)\fR
\fBqueue_t *\fIqueue\^\fB; int \fItype\^\fB, parameter\^\fB;\fR
.PP
.BR putctl1() ,
like
.BR putctl() ,
allocates a message block and calls the driver's
.B put
routine to put it onto
.IR queue .
.I type
is the type of message to create; 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 putctl1()
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 putctl1()
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.
.PP
.I queue
must not reference the field
.BR q_next .
To pass a message to the next queue in a stream, use the function
.BR putnextctl1() .
