Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ putctl(D3) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought






       putctl(D3)                                                putctl(D3)


       NAME
             putctl - send a control message to a queue

       SYNOPSIS
             #include <sys/stream.h>
             #include <sys/ddi.h>
             int putctl(queue_t *q, int type);

          Arguments
             q         Pointer to the queue to which the message is to be
                       sent.

             type      Message type (must be a control 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(D2) routine of the queue pointed to by q,
             passing it the allocated message.

          Return Values
             On success, 1 is returned.  Otherwise, if type is a data type,
             or if a message block cannot be allocated, 0 is returned.

       USAGE
             In multithreaded drivers, the q argument may not reference
             q_next (for example, an argument of q->q_next is erroneous in
             a multithreaded driver and is disallowed by the DDI/DKI).
             putnextctl(q, type) is provided as a multiprocessor-safe
             equivalent to the common call putctl(q->q_next, type), which
             is no longer allowed.

          Level
             Base or Interrupt.

          Synchronization Constraints
             Does not sleep.

             Driver-defined basic locks, read/write locks, and sleep locks
             may not be held across calls to this function.

             The caller cannot have the stream frozen [see freezestr(D3)]
             when calling this function.



                           Copyright 1994 Novell, Inc.               Page 1













      putctl(D3)                                                putctl(D3)


         Examples
            The send_ctl routine is used to pass control messages
            downstream.  M_BREAK messages are handled with putctl (line
            9).  putctl1 (line 11) is used for M_DELAY messages, so that
            param can be used to specify the length of the delay.  If an
            invalid message type is detected, send_ctl returns 0,
            indicating failure (line 13).
             1  int
             2  send_ctl(wrq, type, param)
             3    queue_t *wrq;
             4    uchar_t type;
             5    uchar_t param;
             6  {
             7    switch (type) {
             8    case M_BREAK:
             9          return(putctl(wrq->q_next, M_BREAK));
            10    case M_DELAY:
            11          return(putctl1(wrq->q_next, M_DELAY, param));
            12    default:
            13          return(0);
            14    }
            15  }

      REFERENCES
            put(D2), put(D3), putctl1(D3), putnextctl(D3), putnextctl1(D3)

      NOTICES
         Portability
            All processors

         Applicability
            ddi: 1, 2, 3, 4, 5, 5mp, 6, 6mp, 7, 7mp
















                          Copyright 1994 Novell, Inc.               Page 2








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026