Kernel Functions for Drivers putctl(9F)
NAME
putctl - send a control message to a queue
SYNOPSIS
#include
int putctl(queue_t *q, int type);
INTERFACE LEVEL
Architecture independent level 1 (DDI/DKI).
PARAMETERS
q Queue to which the message is to be sent. type Message type (must be control, not data type).DESCRIPTION
The putctl() function tests the type argument to make sure a
data type has not been specified, and then attempts to allo-
cate a message block. putctl() fails if type is M_DATA,
M_PROTO, or M_PCPROTO, or if a message block cannot be allo-
cated. If successful, putctl() calls the put(9E) routine of
the queue pointed to by q with the newly allocated and ini-
tialized messages.RETURN VALUES
On success, 1 is returned. If type is a data type, or if a message block cannot be allocated, 0 is returned.CONTEXT
The putctl() function can be called from user, interrupt, or
kernel context.EXAMPLES
Example 1 Using putctl()
The send_ctl() routine is used to pass control messages
downstream. M_BREAK messages are handled with putctl() (line
11). putctl1(9F) (line 16) is used for M_DELAY messages, so
that parm can be used to specify the length of the delay. Ineither case, if a message block cannot be allocated a vari-
able recording the number of allocation failures is incre-
mented (lines 12, 17). If an invalid message type isdetected, cmn_err(9F) panics the system (line 21).
SunOS 5.11 Last change: 16 Jan 2006 1
Kernel Functions for Drivers putctl(9F)
1 void2 send_ctl(wrq, type, parm)
3 queue_t *wrq;
4 uchar_t type;
5 uchar_t parm;
6 {7 extern int num_alloc_fail;
8 9 switch (type) {10 case M_BREAK:
11 if (!putctl(wrq->q_next, M_BREAK))
12 num_alloc_fail++;
13 break; 1415 case M_DELAY:
16 if (!putctl1(wrq->q_next, M_DELAY, parm))
17 num_alloc_fail++;
18 break; 19 20 default:21 cmn_err(CE_PANIC, "send_ctl: bad message type passed");
22 break; 23 } 24 }SEE ALSO
put(9E), cmn_err(9F), datamsg(9F), putctl1(9F),
putnextctl(9F) Writing Device Drivers STREAMS Programming GuideSunOS 5.11 Last change: 16 Jan 2006 2