home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / catD / put.z / put
Encoding:
Text File  |  1998-10-30  |  15.8 KB  |  199 lines

  1.  
  2.  
  3.  
  4. ppppuuuutttt((((DDDD2222))))                                                                ppppuuuutttt((((DDDD2222))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      _pppp_uuuu_tttt - receive messages from the preceding queue
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_tttt_yyyy_pppp_eeee_ssss_...._hhhh_>>>>
  13.      _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_ssss_tttt_rrrr_eeee_aaaa_mmmm_...._hhhh_>>>>
  14.      _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_ssss_tttt_rrrr_oooo_pppp_tttt_ssss_...._hhhh_>>>>
  15.      _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_dddd_dddd_iiii_...._hhhh_>>>>
  16.      _iiii_nnnn_tttt _p_r_e_f_i_x_rrrr_pppp_uuuu_tttt_((((_qqqq_uuuu_eeee_uuuu_eeee______tttt _****_q_,,,, _mmmm_bbbb_llll_kkkk______tttt _****_m_p_))))_;;;;  _////_**** _rrrr_eeee_aaaa_dddd _ssss_iiii_dddd_eeee _****_////
  17.      _iiii_nnnn_tttt _p_r_e_f_i_x_wwww_pppp_uuuu_tttt_((((_qqqq_uuuu_eeee_uuuu_eeee______tttt _****_q_,,,, _mmmm_bbbb_llll_kkkk______tttt _****_m_p_))))_;;;;  _////_**** _wwww_rrrr_iiii_tttt_eeee _ssss_iiii_dddd_eeee _****_////
  18.  
  19.    AAAArrrrgggguuuummmmeeeennnnttttssss
  20.      _q    Pointer to the queue.
  21.  
  22.      _m_p   Pointer to the message block.
  23.  
  24. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  25.      The primary task of the _pppp_uuuu_tttt routine is to coordinate the passing of
  26.      messages from one queue to the next in a stream.  The _pppp_uuuu_tttt routine is
  27.      called by the preceding component (module, driver, or stream head) in the
  28.      stream.  _pppp_uuuu_tttt routines are designated ``write'' or ``read'' depending on
  29.      the direction of message flow.
  30.  
  31.    RRRReeeettttuuuurrrrnnnn VVVVaaaalllluuuueeeessss
  32.      Ignored
  33.  
  34. UUUUSSSSAAAAGGGGEEEE
  35.      This entry point is required in all STREAMS drivers and modules.
  36.  
  37.      Both modules and drivers must have write _pppp_uuuu_tttt routines.  Modules must have
  38.      read _pppp_uuuu_tttt routines, but drivers don't really need them because their
  39.      interrupt handler can do the work intended for the read _pppp_uuuu_tttt routine.  A
  40.      message is passed to the _pppp_uuuu_tttt routine.  If immediate processing is
  41.      desired, the _pppp_uuuu_tttt routine can process the message, or it can enqueue it so
  42.      that the service routine [see _ssss_rrrr_vvvv(D2)] can process it later.
  43.  
  44.      The _pppp_uuuu_tttt routine must do at least one of the following when it receives a
  45.      message:
  46.  
  47.           pass the message to the next component in the stream by calling the
  48.           _pppp_uuuu_tttt_nnnn_eeee_xxxx_tttt(D3) function
  49.  
  50.           process the message, if immediate processing is required (for
  51.           example, high priority messages)
  52.  
  53.           enqueue the message with the _pppp_uuuu_tttt_qqqq(D3) function for deferred
  54.           processing by the service routine
  55.  
  56.      Typically, the _pppp_uuuu_tttt routine will switch on the message type, which is
  57.      contained in _mmmm_pppp_----_>>>>_bbbb______dddd_aaaa_tttt_aaaa_pppp_----_>>>>_dddd_bbbb______tttt_yyyy_pppp_eeee, taking different actions depending on
  58.      the message type.  For example, a _pppp_uuuu_tttt routine might process high priority
  59.      messages and enqueue normal messages.
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ppppuuuutttt((((DDDD2222))))                                                                ppppuuuutttt((((DDDD2222))))
  71.  
  72.  
  73.  
  74.      The _pppp_uuuu_tttt_qqqq function can be used as a module's _pppp_uuuu_tttt routine when no special
  75.      processing is required and all messages are to be enqueued for the
  76.      service routine.
  77.  
  78.      Although it can be done in the service routine, drivers and modules
  79.      usually handle queue flushing in their _pppp_uuuu_tttt routines.
  80.  
  81.      The canonical flushing algorithm for driver write put routines is as
  82.      follows:
  83.  
  84.      _qqqq_uuuu_eeee_uuuu_eeee______tttt _****_qqqq_;;;;    _////_**** _tttt_hhhh_eeee _wwww_rrrr_iiii_tttt_eeee _qqqq_uuuu_eeee_uuuu_eeee _****_////
  85.      _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_BBBB_AAAA_NNNN_DDDD_)))) _{{{{ _////_**** _iiii_ffff _dddd_rrrr_iiii_vvvv_eeee_rrrr _rrrr_eeee_cccc_oooo_gggg_nnnn_iiii_zzzz_eeee_ssss _bbbb_aaaa_nnnn_dddd_ssss _****_////
  86.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_)))) _{{{{
  87.                _ffff_llll_uuuu_ssss_hhhh_bbbb_aaaa_nnnn_dddd_((((_qqqq_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_,,,, _****_((((_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _++++ _1111_))))_))))_;;;;
  88.                _****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&&_==== _~~~~_FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_;;;;
  89.           _}}}}
  90.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_)))) _{{{{
  91.                _ffff_llll_uuuu_ssss_hhhh_bbbb_aaaa_nnnn_dddd_((((_RRRR_DDDD_((((_qqqq_))))_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_,,,, _****_((((_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _++++ _1111_))))_))))_;;;;
  92.                _qqqq_rrrr_eeee_pppp_llll_yyyy_((((_qqqq_,,,, _mmmm_pppp_))))_;;;;
  93.           _}}}} _eeee_llll_ssss_eeee _{{{{
  94.                _ffff_rrrr_eeee_eeee_mmmm_ssss_gggg_((((_mmmm_pppp_))))_;;;;
  95.           _}}}}
  96.      _}}}} _eeee_llll_ssss_eeee _{{{{
  97.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_)))) _{{{{
  98.                _ffff_llll_uuuu_ssss_hhhh_qqqq_((((_qqqq_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_))))_;;;;
  99.                _****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&&_==== _~~~~_FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_;;;;
  100.           _}}}}
  101.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_)))) _{{{{
  102.                _ffff_llll_uuuu_ssss_hhhh_qqqq_((((_RRRR_DDDD_((((_qqqq_))))_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_))))_;;;;
  103.                _qqqq_rrrr_eeee_pppp_llll_yyyy_((((_qqqq_,,,, _mmmm_pppp_))))_;;;;
  104.           _}}}} _eeee_llll_ssss_eeee _{{{{
  105.                _ffff_rrrr_eeee_eeee_mmmm_ssss_gggg_((((_mmmm_pppp_))))_;;;;
  106.           _}}}}
  107.      _}}}}
  108.  
  109.      The canonical flushing algorithm for module write put routines is as
  110.      follows:
  111.  
  112.      _qqqq_uuuu_eeee_uuuu_eeee______tttt _****_qqqq_;;;;    _////_**** _tttt_hhhh_eeee _wwww_rrrr_iiii_tttt_eeee _qqqq_uuuu_eeee_uuuu_eeee _****_////
  113.      _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_BBBB_AAAA_NNNN_DDDD_)))) _{{{{ _////_**** _iiii_ffff _mmmm_oooo_dddd_uuuu_llll_eeee _rrrr_eeee_cccc_oooo_gggg_nnnn_iiii_zzzz_eeee_ssss _bbbb_aaaa_nnnn_dddd_ssss _****_////
  114.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_))))
  115.                _ffff_llll_uuuu_ssss_hhhh_bbbb_aaaa_nnnn_dddd_((((_qqqq_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_,,,, _****_((((_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _++++ _1111_))))_))))_;;;;
  116.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_))))
  117.                _ffff_llll_uuuu_ssss_hhhh_bbbb_aaaa_nnnn_dddd_((((_RRRR_DDDD_((((_qqqq_))))_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_,,,, _****_((((_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _++++ _1111_))))_))))_;;;;
  118.      _}}}} _eeee_llll_ssss_eeee _{{{{
  119.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_))))
  120.                _ffff_llll_uuuu_ssss_hhhh_qqqq_((((_qqqq_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_))))_;;;;
  121.           _iiii_ffff _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_))))
  122.                _ffff_llll_uuuu_ssss_hhhh_qqqq_((((_RRRR_DDDD_((((_qqqq_))))_,,,, _FFFF_LLLL_UUUU_SSSS_HHHH_DDDD_AAAA_TTTT_AAAA_))))_;;;;
  123.      _}}}}
  124.      _iiii_ffff _((((_!!!!_SSSS_AAAA_MMMM_EEEE_SSSS_TTTT_RRRR_((((_qqqq_))))_)))) _{{{{
  125.           _ssss_wwww_iiii_tttt_cccc_hhhh _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_WWWW_)))) _{{{{
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ppppuuuutttt((((DDDD2222))))                                                                ppppuuuutttt((((DDDD2222))))
  137.  
  138.  
  139.  
  140.          _cccc_aaaa_ssss_eeee _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_::::
  141.                _****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _==== _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _~~~~_FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_)))) _|||| _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_;;;;
  142.                _bbbb_rrrr_eeee_aaaa_kkkk_;;;;
  143.           _cccc_aaaa_ssss_eeee _FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_::::
  144.                _****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _==== _((((_****_mmmm_pppp_----_>>>>_bbbb______rrrr_pppp_tttt_rrrr _&&&& _~~~~_FFFF_LLLL_UUUU_SSSS_HHHH_WWWW_)))) _|||| _FFFF_LLLL_UUUU_SSSS_HHHH_RRRR_;;;;
  145.                _bbbb_rrrr_eeee_aaaa_kkkk_;;;;
  146.           _}}}}
  147.      _}}}}
  148.      _pppp_uuuu_tttt_nnnn_eeee_xxxx_tttt_((((_qqqq_,,,, _mmmm_pppp_))))_;;;;
  149.  
  150.      The algorithms for the read side are similar.  In both examples, the
  151.      _FFFF_LLLL_UUUU_SSSS_HHHH_BBBB_AAAA_NNNN_DDDD flag need only be checked if the driver or module cares about
  152.      priority bands.
  153.  
  154.      Drivers and modules should not call _pppp_uuuu_tttt routines directly.
  155.  
  156.      Drivers should free any messages they do not recognize.
  157.  
  158.      Modules should pass on any messages they do not recognize.
  159.  
  160.      Drivers should fail any unrecognized _MMMM______IIII_OOOO_CCCC_TTTT_LLLL messages by converting them
  161.      into _MMMM______IIII_OOOO_CCCC_NNNN_AAAA_KKKK messages and sending them upstream.
  162.  
  163.      Modules should pass on any unrecognized _MMMM______IIII_OOOO_CCCC_TTTT_LLLL messages.
  164.  
  165.    SSSSyyyynnnncccchhhhrrrroooonnnniiiizzzzaaaattttiiiioooonnnn CCCCoooonnnnssssttttrrrraaaaiiiinnnnttttssss
  166.      _pppp_uuuu_tttt routines do not have user context and so may not call any function
  167.      that sleeps.
  168.  
  169. RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEESSSS
  170.      _dddd_aaaa_tttt_aaaa_bbbb(D4), _ffff_llll_uuuu_ssss_hhhh_bbbb_aaaa_nnnn_dddd(D3), _ffff_llll_uuuu_ssss_hhhh_qqqq(D3), _mmmm_ssss_gggg_bbbb(D4), _pppp_uuuu_tttt_cccc_tttt_llll(D3), _pppp_uuuu_tttt_cccc_tttt_llll_1111(D3),
  171.      _pppp_uuuu_tttt_nnnn_eeee_xxxx_tttt(D3), _pppp_uuuu_tttt_qqqq(D3), _qqqq_rrrr_eeee_pppp_llll_yyyy(D3), _qqqq_uuuu_eeee_uuuu_eeee(D4), _ssss_rrrr_vvvv(D2)
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.