Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

datamsg(9f) [opensolaris man page]

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

NAME
datamsg - test whether a message is a data message SYNOPSIS
#include <sys/stream.h> #include <sys/ddi.h> int datamsg(unsigned char type); INTERFACE LEVEL
Architecture independent level 1 (DDI/DKI). PARAMETERS
type The type of message to be tested. The db_type field of the datab(9S) structure contains the message type. This field may be accessed through the message block using mp->b_datap->db_type. DESCRIPTION
The datamsg() function tests the type of message to determine if it is a data message type (M_DATA, M_DELAY, M_PROTO , or M_PCPROTO). RETURN VALUES
datamsg returns 1 if the message is a data message 0 otherwise. CONTEXT
The datamsg() function can be called from user, interrupt, or kernel context. EXAMPLES
The put(9E) routine enqueues all data messages for handling by the srv(9E) (service) routine. All non-data messages are handled in the put(9E) routine. 1 xxxput(q, mp) 2 queue_t *q; 3 mblk_t *mp; 4 { 5 if (datamsg(mp->b_datap->db_type)) { 6 putq(q, mp); 7 return; 8 } 9 switch (mp->b_datap->db_type) { 10 case M_FLUSH: ... 11 } 12 } SEE ALSO
put(9E), srv(9E), allocb(9F), datab(9S), msgb(9S) Writing Device Drivers STREAMS Programming Guide SunOS 5.11 16 Jan 2006 datamsg(9F)

Check Out this Related Man Page

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

NAME
putctl - send a control message to a queue SYNOPSIS
#include <sys/stream.h> 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
putctl() tests the type argument to make sure a data type has not been specified, and then attempts to allocate a message block. putctl() fails if type is M_DATA, M_PROTO, or M_PCPROTO, or if a message block cannot be allocated. If successful, putctl() calls the put(9E) routine of the queue pointed to by q with the newly allocated and initialized 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
putctl() can be called from user or interrupt 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. In either case, if a message block cannot be allocated a variable recording the number of allocation failures is incremented (lines 12, 17). If an invalid message type is detected, cmn_err(9F) panics the system (line 21). 1 void 2 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; 14 15 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 Guide SunOS 5.10 11 Apr 1991 putctl(9F)
Man Page