iucv.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:34k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  drivers/s390/net/iucv.h
  3.  *    IUCV base support.
  4.  *
  5.  *  S390 version
  6.  *    Copyright (C) 2000 IBM Corporation
  7.  *    Author(s):Alan Altmark (Alan_Altmark@us.ibm.com) 
  8.  * Xenia Tkatschow (xenia@us.ibm.com)
  9.  *
  10.  *
  11.  * Functionality:
  12.  * To explore any of the IUCV functions, one must first register
  13.  * their program using iucv_register_program(). Once your program has
  14.  * successfully completed a register, it can exploit the other functions.
  15.  * For furthur reference on all IUCV functionality, refer to the
  16.  * CP Programming Services book, also available on the web
  17.  * thru www.ibm.com/s390/vm/pubs, manual # SC24-5760
  18.  *
  19.  *      Definition of Return Codes                                    
  20.  *      -All positive return codes including zero are reflected back  
  21.  *       from CP except for iucv_register_program. The definition of each 
  22.  *       return code can be found in CP Programming Services book.    
  23.  *       Also available on the web thru www.ibm.com/s390/vm/pubs, manual # SC24-5760          
  24.  *      - Return Code of:         
  25.  *             (-EINVAL) Invalid value       
  26.  *             (-ENOMEM) storage allocation failed              
  27.  * pgmask defined in iucv_register_program will be set depending on input
  28.  * paramters. 
  29.  *
  30.  */
  31. #include <linux/types.h>
  32. #define uchar  unsigned char
  33. #define ushort unsigned short
  34. #define ulong  unsigned long
  35. #define iucv_handle_t void *
  36. /* flags1:
  37.  * All flags are defined in the field IPFLAGS1 of each function   
  38.  * and can be found in CP Programming Services.                  
  39.  * IPLOCAL  - Indicates the connect can only be satisfied on the 
  40.  *            local system                                       
  41.  * IPPRTY   - Indicates a priority message                       
  42.  * IPQUSCE  - Indicates you do not want to receive messages on a 
  43.  *            path until an iucv_resume is issued                
  44.  * IPRMDATA - Indicates that the message is in the parameter list
  45.  */
  46. #define IPLOCAL    0x01
  47. #define IPPRTY          0x20
  48. #define IPQUSCE         0x40
  49. #define IPRMDATA        0x80
  50. /* flags1_out:
  51.  * All flags are defined in the output field of IPFLAGS1 for each function
  52.  * and can be found in CP Programming Services.
  53.  * IPNORPY - Specifies this is a one-way message and no reply is expected.
  54.  * IPPRTY   - Indicates a priority message is permitted. Defined in flags1.
  55.  */
  56. #define IPNORPY         0x10
  57. #define Nonpriority_MessagePendingInterruptsFlag         0x80
  58. #define Priority_MessagePendingInterruptsFlag            0x40
  59. #define Nonpriority_MessageCompletionInterruptsFlag      0x20
  60. #define Priority_MessageCompletionInterruptsFlag         0x10
  61. /*
  62.  * Mapping of external interrupt buffers should be used with the corresponding
  63.  * interrupt types.                  
  64.  * Names: iucv_ConnectionPending    ->  connection pending 
  65.  *        iucv_ConnectionComplete   ->  connection complete
  66.  *        iucv_ConnectionSevered    ->  connection severed 
  67.  *        iucv_ConnectionQuiesced   ->  connection quiesced 
  68.  *        iucv_ConnectionResumed    ->  connection resumed 
  69.  *        iucv_MessagePending       ->  message pending    
  70.  *        iucv_MessageComplete      ->  message complete   
  71.  */
  72. typedef struct {
  73. u16 ippathid;
  74. uchar ipflags1;
  75. uchar iptype;
  76. u16 ipmsglim;
  77. u16 res1;
  78. uchar ipvmid[8];
  79. uchar ipuser[16];
  80. u32 res3;
  81. uchar ippollfg;
  82. uchar res4[3];
  83. } iucv_ConnectionPending;
  84. typedef struct {
  85. u16 ippathid;
  86. uchar ipflags1;
  87. uchar iptype;
  88. u16 ipmsglim;
  89. u16 res1;
  90. uchar res2[8];
  91. uchar ipuser[16];
  92. u32 res3;
  93. uchar ippollfg;
  94. uchar res4[3];
  95. } iucv_ConnectionComplete;
  96. typedef struct {
  97. u16 ippathid;
  98. uchar res1;
  99. uchar iptype;
  100. u32 res2;
  101. uchar res3[8];
  102. uchar ipuser[16];
  103. u32 res4;
  104. uchar ippollfg;
  105. uchar res5[3];
  106. } iucv_ConnectionSevered;
  107. typedef struct {
  108. u16 ippathid;
  109. uchar res1;
  110. uchar iptype;
  111. u32 res2;
  112. uchar res3[8];
  113. uchar ipuser[16];
  114. u32 res4;
  115. uchar ippollfg;
  116. uchar res5[3];
  117. } iucv_ConnectionQuiesced;
  118. typedef struct {
  119. u16 ippathid;
  120. uchar res1;
  121. uchar iptype;
  122. u32 res2;
  123. uchar res3[8];
  124. uchar ipuser[16];
  125. u32 res4;
  126. uchar ippollfg;
  127. uchar res5[3];
  128. } iucv_ConnectionResumed;
  129. typedef struct {
  130. u16 ippathid;
  131. uchar ipflags1;
  132. uchar iptype;
  133. u32 ipmsgid;
  134. u32 iptrgcls;
  135. uchar iprmmsg1[4];
  136. union u1 {
  137. u32 ipbfln1f;
  138. uchar iprmmsg2[4];
  139. } ln1msg2;
  140. u32 res1[3];
  141. u32 ipbfln2f;
  142. uchar ippollfg;
  143. uchar res2[3];
  144. } iucv_MessagePending;
  145. typedef struct {
  146. u16 ippathid;
  147. uchar ipflags1;
  148. uchar iptype;
  149. u32 ipmsgid;
  150. u32 ipaudit;
  151. uchar iprmmsg[8];
  152. u32 ipsrccls;
  153. u32 ipmsgtag;
  154. u32 res;
  155. u32 ipbfln2f;
  156. uchar ippollfg;
  157. uchar res2[3];
  158. } iucv_MessageComplete;
  159. /* 
  160.  * iucv_interrupt_ops_t: Is a vector of functions that handle 
  161.  * IUCV interrupts.                                          
  162.  * Parameter list:                                           
  163.  *         eib - is a pointer to a 40-byte area described    
  164.  *               with one of the structures above.           
  165.  *         pgm_data - this data is strictly for the          
  166.  *                    interrupt handler that is passed by    
  167.  *                    the application. This may be an address 
  168.  *                    or token.                              
  169. */
  170. typedef struct {
  171. void (*ConnectionPending) (iucv_ConnectionPending * eib,
  172.    void *pgm_data);
  173. void (*ConnectionComplete) (iucv_ConnectionComplete * eib,
  174.     void *pgm_data);
  175. void (*ConnectionSevered) (iucv_ConnectionSevered * eib,
  176.    void *pgm_data);
  177. void (*ConnectionQuiesced) (iucv_ConnectionQuiesced * eib,
  178.     void *pgm_data);
  179. void (*ConnectionResumed) (iucv_ConnectionResumed * eib,
  180.    void *pgm_data);
  181. void (*MessagePending) (iucv_MessagePending * eib, void *pgm_data);
  182. void (*MessageComplete) (iucv_MessageComplete * eib, void *pgm_data);
  183. } iucv_interrupt_ops_t;
  184. /*
  185.  *iucv_array_t : Defines buffer array.                      
  186.  * Inside the array may be 31- bit addresses and 31-bit lengths. 
  187. */
  188. typedef struct {
  189. u32 address;
  190. u32 length;
  191. } iucv_array_t __attribute__ ((aligned (8)));
  192. /*   -prototypes-    */
  193. /*                                                                
  194.  * Name: iucv_register_program                                    
  195.  * Purpose: Registers an application with IUCV                    
  196.  * Input: prmname - user identification                           
  197.  *        userid  - machine identification
  198.  *        pgmmask - indicates which bits in the prmname and userid combined will be
  199.  *       used to determine who is given control
  200.  *        ops     - address of vector of interrupt handlers       
  201.  *        pgm_data- application data passed to interrupt handlers 
  202.  * Output: NA                                                     
  203.  * Return: address of handler                                     
  204.  *         (0) - Error occured, registration not completed.
  205.  * NOTE: Exact cause of failure will be recorded in syslog.                        
  206. */
  207. iucv_handle_t iucv_register_program (uchar pgmname[16],
  208.      uchar userid[8],
  209.      uchar pgmmask[24],
  210.      iucv_interrupt_ops_t * ops,
  211.      void *pgm_data);
  212. /*                                                
  213.  * Name: iucv_unregister_program                  
  214.  * Purpose: Unregister application with IUCV      
  215.  * Input: address of handler                      
  216.  * Output: NA                                     
  217.  * Return: (0) - Normal return                    
  218.  *         (-EINVAL) - Internal error, wild pointer     
  219. */
  220. int iucv_unregister_program (iucv_handle_t handle);
  221. /*
  222.  * Name: iucv_accept
  223.  * Purpose: This function is issued after the user receives a Connection Pending external
  224.  *          interrupt and now wishes to complete the IUCV communication path.
  225.  * Input:  pathid - u16 , Path identification number   
  226.  *         msglim_reqstd - u16, The number of outstanding messages requested.
  227.  *         user_data - uchar[16], Data specified by the iucv_connect function.
  228.  *    flags1 - int, Contains options for this path.
  229.  *           -IPPRTY   - 0x20- Specifies if you want to send priority message.
  230.  *           -IPRMDATA - 0x80, Specifies whether your program can handle a message
  231.  *             in  the parameter list.
  232.  *           -IPQUSCE  - 0x40, Specifies whether you want to quiesce the path being
  233.  * established.
  234.  *         handle - iucv_handle_t, Address of handler.
  235.  *         pgm_data - void *, Application data passed to interrupt handlers.
  236.  *         flags1_out - int * Contains information about the path
  237.  *           - IPPRTY - 0x20, Indicates you may send priority messages.
  238.  *         msglim - *u16, Number of outstanding messages.
  239.  * Output: return code from CP IUCV call.
  240. */
  241. int iucv_accept (u16 pathid,
  242.  u16 msglim_reqstd,
  243.  uchar user_data[16],
  244.  int flags1,
  245.  iucv_handle_t handle,
  246.  void *pgm_data, int *flags1_out, u16 * msglim);
  247. /*
  248.  * Name: iucv_connect                                         
  249.  * Purpose: This function establishes an IUCV path. Although the connect may complete
  250.  *     successfully, you are not able to use the path until you receive an IUCV 
  251.  *          Connection Complete external interrupt.            
  252.  * Input: pathid - u16 *, Path identification number          
  253.  *        msglim_reqstd - u16, Number of outstanding messages requested       
  254.  *        user_data - uchar[16], 16-byte user data                    
  255.  *   userid - uchar[8], User identification
  256.  *        system_name - uchar[8], 8-byte identifying the system name 
  257.  *   flags1 - int, Contains options for this path.
  258.  *          -IPPRTY -   0x20, Specifies if you want to send priority message.
  259.  *          -IPRMDATA - 0x80, Specifies whether your program can handle a message
  260.  *              in  the parameter list.
  261.  *          -IPQUSCE -  0x40, Specifies whether you want to quiesce the path being  
  262.  * established.
  263.  *          -IPLOCAL -  0X01, Allows an application to force the partner to be on 
  264.  * the local system. If local is specified then target class cannot be
  265.  * specified.                       
  266.  *        flags1_out - int * Contains information about the path
  267.  *           - IPPRTY - 0x20, Indicates you may send priority messages.
  268.  *        msglim - * u16, Number of outstanding messages
  269.  *        handle - iucv_handle_t, Address of handler                         
  270.  *        pgm_data - void *, Application data passed to interrupt handlers              
  271.  * Output: return code from CP IUCV call
  272.  *         rc - return code from iucv_declare_buffer
  273.  *         -EINVAL - Invalid handle passed by application 
  274.  *         -EINVAL - Pathid address is NULL 
  275.  *         add_pathid_result - Return code from internal function add_pathid         
  276. */
  277. int
  278.     iucv_connect (u16 * pathid,
  279.   u16 msglim_reqstd,
  280.   uchar user_data[16],
  281.   uchar userid[8],
  282.   uchar system_name[8],
  283.   int flags1,
  284.   int *flags1_out,
  285.   u16 * msglim, iucv_handle_t handle, void *pgm_data);
  286. /*                                                                     
  287.  * Name: iucv_purge                                                    
  288.  * Purpose: This function cancels a message that you have sent.        
  289.  * Input: pathid - Path identification number.                          
  290.  *        msgid - Specifies the message ID of the message to be purged.
  291.  *        srccls - Specifies the source message class.                  
  292.  * Output: audit - Contains information about asynchronous error       
  293.  *                 that may have affected the normal completion        
  294.  *                 of this message.                                    
  295.  * Return: Return code from CP IUCV call.                           
  296. */
  297. int iucv_purge (u16 pathid, u32 msgid, u32 srccls, __u32 *audit);
  298. /*
  299.  * Name: iucv_query_maxconn
  300.  * Purpose: This function determines the maximum number of communication paths you
  301.  *     may establish.
  302.  * Return:  maxconn - ulong, Maximum number of connection the virtual machine may
  303.  *          establish.
  304. */
  305. ulong iucv_query_maxconn (void);
  306. /*
  307.  * Name: iucv_query_bufsize
  308.  * Purpose: This function determines how large an external interrupt
  309.  *          buffer IUCV requires to store information.
  310.  * Return:  bufsize - ulong, Size of external interrupt buffer.
  311.  */
  312. ulong iucv_query_bufsize (void);
  313. /*                                                                     
  314.  * Name: iucv_quiesce                                                  
  315.  * Purpose: This function temporarily suspends incoming messages on an 
  316.  *          IUCV path. You can later reactivate the path by invoking   
  317.  *          the iucv_resume function.                                  
  318.  * Input: pathid - Path identification number                          
  319.  *        user_data  - 16-bytes of user data                           
  320.  * Output: NA                                                          
  321.  * Return: Return code from CP IUCV call.                           
  322. */
  323. int iucv_quiesce (u16 pathid, uchar user_data[16]);
  324. /*                                                                     
  325.  * Name: iucv_receive                                                  
  326.  * Purpose: This function receives messages that are being sent to you 
  327.  *          over established paths. Data will be returned in buffer for length of
  328.  *          buflen.
  329.  * Input: 
  330.  *       pathid - Path identification number.                          
  331.  *       buffer - Address of buffer to receive.                        
  332.  *       buflen - Length of buffer to receive.                         
  333.  *       msgid - Specifies the message ID.          
  334.  *       trgcls - Specifies target class.                       
  335.  * Output: 
  336.  *  flags1_out: int *, Contains information about this path.
  337.  *         IPNORPY - 0x10 Specifies this is a one-way message and no reply is
  338.  *    expected.      
  339.  *         IPPRTY  - 0x20 Specifies if you want to send priority message.       
  340.  *         IPRMDATA - 0x80 specifies the data is contained in the parameter list
  341.  *       residual_buffer - address of buffer updated by the number
  342.  *                         of bytes you have received.
  343.  *       residual_length -      
  344.  *              Contains one of the following values, if the receive buffer is:
  345.  *               The same length as the message, this field is zero.
  346.  *               Longer than the message, this field contains the number of
  347.  *                bytes remaining in the buffer.
  348.  *               Shorter than the message, this field contains the residual
  349.  *                count (that is, the number of bytes remaining in the
  350.  *                message that does not fit into the buffer. In this
  351.  *                case b2f0_result = 5.
  352.  * Return: Return code from CP IUCV call.                           
  353.  *         (-EINVAL) - buffer address is pointing to NULL                   
  354. */
  355. int iucv_receive (u16 pathid,
  356.   u32 msgid,
  357.   u32 trgcls,
  358.   void *buffer,
  359.   ulong buflen,
  360.   int *flags1_out,
  361.   ulong * residual_buffer, ulong * residual_length);
  362.  /*                                                                     
  363.   * Name: iucv_receive_array                                            
  364.   * Purpose: This function receives messages that are being sent to you 
  365.   *          over established paths. Data will be returned in first buffer for
  366.   *          length of first buffer.
  367.   * Input: pathid - Path identification number.                          
  368.   *        msgid - specifies the message ID.
  369.   *        trgcls - Specifies target class.
  370.   *        buffer - Address of array of buffers.                         
  371.   *        buflen - Total length of buffers.                             
  372.   * Output:
  373.   *        flags1_out: int *, Contains information about this path.
  374.   *          IPNORPY - 0x10 Specifies this is a one-way message and no reply is
  375.   *          expected.
  376.   *          IPPRTY  - 0x20 Specifies if you want to send priority message.
  377.   *          IPRMDATA - 0x80 specifies the data is contained in the parameter list
  378.   *       residual_buffer - address points to the current list entry IUCV
  379.   *                         is working on.
  380.   *       residual_length -
  381.   *              Contains one of the following values, if the receive buffer is:
  382.   *               The same length as the message, this field is zero.
  383.   *               Longer than the message, this field contains the number of
  384.   *                bytes remaining in the buffer.
  385.   *               Shorter than the message, this field contains the residual
  386.   *                count (that is, the number of bytes remaining in the
  387.   *                message that does not fit into the buffer. In this
  388.   *                case b2f0_result = 5.
  389.   * Return: Return code from CP IUCV call.                           
  390.   *         (-EINVAL) - Buffer address is NULL.       
  391.   */
  392. int iucv_receive_array (u16 pathid,
  393. u32 msgid,
  394. u32 trgcls,
  395. iucv_array_t * buffer,
  396. ulong buflen,
  397. int *flags1_out,
  398. ulong * residual_buffer, ulong * residual_length);
  399. /*                                                                       
  400.  * Name: iucv_reject                                                     
  401.  * Purpose: The reject function refuses a specified message. Between the 
  402.  *          time you are notified of a message and the time that you     
  403.  *          complete the message, the message may be rejected.           
  404.  * Input: pathid - Path identification number.                            
  405.  *        msgid - Specifies the message ID.                   
  406.  *        trgcls - Specifies target class.                                
  407.  * Output: NA                                                            
  408.  * Return: Return code from CP IUCV call.                             
  409. */
  410. int iucv_reject (u16 pathid, u32 msgid, u32 trgcls);
  411. /*                                                                     
  412.  * Name: iucv_reply                                                    
  413.  * Purpose: This function responds to the two-way messages that you    
  414.  *          receive. You must identify completely the message to       
  415.  *          which you wish to reply. ie, pathid, msgid, and trgcls.    
  416.  * Input: pathid - Path identification number.                          
  417.  *        msgid - Specifies the message ID.                
  418.  *        trgcls - Specifies target class.                              
  419.  *        flags1 - Option for path.
  420.  *          IPPRTY- 0x20, Specifies if you want to send priority message.        
  421.  *        buffer - Address of reply buffer.                             
  422.  *        buflen - Length of reply buffer.                              
  423.  * Output: residual_buffer - Address of buffer updated by the number 
  424.  *                    of bytes you have moved.              
  425.  *         residual_length - Contains on the the following values
  426.  * If the answer buffer is the same length as the reply, this field
  427.  *  contains zero.
  428.  * If the answer buffer is longer than the reply, this field contains
  429.  *  the number of bytes remaining in the buffer.  
  430.  * If the answer buffer is shorter than the reply, this field contains
  431.  *  a residual count (that is, the number of bytes remianing in the
  432.  *  reply that does not fit into the buffer. In this
  433.  *               case b2f0_result = 5.
  434.  * Return: Return code from CP IUCV call.                           
  435.  *         (-EINVAL) - Buffer address is NULL.                               
  436. */
  437. int iucv_reply (u16 pathid,
  438. u32 msgid,
  439. u32 trgcls,
  440. int flags1,
  441. void *buffer, ulong buflen, ulong * residual_buffer,
  442. ulong * residual_length);
  443. /*                                                                       
  444.  * Name: iucv_reply_array                                                
  445.  * Purpose: This function responds to the two-way messages that you      
  446.  *          receive. You must identify completely the message to         
  447.  *          which you wish to reply. ie, pathid, msgid, and trgcls.      
  448.  *          The array identifies a list of addresses and lengths of      
  449.  *          discontiguous buffers that contains the reply data.          
  450.  * Input: pathid - Path identification number                            
  451.  *        msgid - Specifies the message ID. 
  452.  *        trgcls - Specifies target class.                                
  453.  *        flags1 - Option for path.
  454.  *          IPPRTY- 0x20, Specifies if you want to send priority message.
  455.  *        buffer - Address of array of reply buffers.                     
  456.  *        buflen - Total length of reply buffers.                         
  457.  * Output: residual_buffer - Address of buffer which IUCV is currently working on.
  458.  *         residual_length - Contains on the the following values
  459.  *              If the answer buffer is the same length as the reply, this field
  460.  *               contains zero.
  461.  *              If the answer buffer is longer than the reply, this field contains
  462.  *               the number of bytes remaining in the buffer.
  463.  *              If the answer buffer is shorter than the reply, this field contains
  464.  *               a residual count (that is, the number of bytes remianing in the
  465.  *               reply that does not fit into the buffer. In this
  466.  *               case b2f0_result = 5.
  467.  * Return: Return code from CP IUCV call.                             
  468.  *         (-EINVAL) - Buffer address is NULL.              
  469. */
  470. int iucv_reply_array (u16 pathid,
  471.       u32 msgid,
  472.       u32 trgcls,
  473.       int flags1,
  474.       iucv_array_t * buffer,
  475.       ulong buflen, ulong * residual_address,
  476.       ulong * residual_length);
  477. /*                                                                  
  478.  * Name: iucv_reply_prmmsg                                          
  479.  * Purpose: This function responds to the two-way messages that you 
  480.  *          receive. You must identify completely the message to    
  481.  *          which you wish to reply. ie, pathid, msgid, and trgcls. 
  482.  *          Prmmsg signifies the data is moved into the             
  483.  *          parameter list.                                         
  484.  * Input: pathid - Path identification number.                       
  485.  *        msgid - Specifies the message ID.              
  486.  *        trgcls - Specifies target class.                           
  487.  *        flags1 - Option for path.
  488.  *          IPPRTY- 0x20 Specifies if you want to send priority message.
  489.  *        prmmsg - 8-bytes of data to be placed into the parameter.  
  490.  *                 list.                                            
  491.  * Output: NA                                                       
  492.  * Return: Return code from CP IUCV call.                        
  493. */
  494. int iucv_reply_prmmsg (u16 pathid,
  495.        u32 msgid, u32 trgcls, int flags1, uchar prmmsg[8]);
  496. /*                                                                     
  497.  * Name: iucv_resume                                                   
  498.  * Purpose: This function restores communications over a quiesced path 
  499.  * Input: pathid - Path identification number.                          
  500.  *        user_data  - 16-bytes of user data.                           
  501.  * Output: NA                                                          
  502.  * Return: Return code from CP IUCV call.                           
  503. */
  504. int iucv_resume (u16 pathid, uchar user_data[16]);
  505. /*                                                                   
  506.  * Name: iucv_send                                                   
  507.  * Purpose: This function transmits data to another application.     
  508.  *          Data to be transmitted is in a buffer and this is a      
  509.  *          one-way message and the receiver will not reply to the   
  510.  *          message.                                                 
  511.  * Input: pathid - Path identification number.                        
  512.  *        trgcls - Specifies target class.                            
  513.  *        srccls - Specifies the source message class.                
  514.  *        msgtag - Specifies a tag to be associated with the message. 
  515.  *        flags1 - Option for path.
  516.  *          IPPRTY- 0x20 Specifies if you want to send priority message.
  517.  *        buffer - Address of send buffer.                            
  518.  *        buflen - Length of send buffer.                             
  519.  * Output: msgid - Specifies the message ID.                         
  520.  * Return: Return code from CP IUCV call.                         
  521.  *         (-EINVAL) - Buffer address is NULL.                             
  522. */
  523. int iucv_send (u16 pathid,
  524.        u32 * msgid,
  525.        u32 trgcls,
  526.        u32 srccls, u32 msgtag, int flags1, void *buffer, ulong buflen);
  527. /*                                                                   
  528.  * Name: iucv_send_array                                             
  529.  * Purpose: This function transmits data to another application.     
  530.  *          The contents of buffer is the address of the array of    
  531.  *          addresses and lengths of discontiguous buffers that hold 
  532.  *          the message text. This is a one-way message and the      
  533.  *          receiver will not reply to the message.                  
  534.  * Input: pathid - Path identification number.                        
  535.  *        trgcls - Specifies target class.                            
  536.  *        srccls - Specifies the source message class.                
  537.  *        msgtag - Specifies a tag to be associated witht the message.
  538.  *        flags1 - Option for path.
  539.  *          IPPRTY- specifies if you want to send priority message. 
  540.  *        buffer - Address of array of send buffers.                  
  541.  *        buflen - Total length of send buffers.                      
  542.  * Output: msgid - Specifies the message ID.                         
  543.  * Return: Return code from CP IUCV call.                         
  544.  *         (-EINVAL) - Buffer address is NULL.                             
  545. */
  546. int iucv_send_array (u16 pathid,
  547.      u32 * msgid,
  548.      u32 trgcls,
  549.      u32 srccls,
  550.      u32 msgtag,
  551.      int flags1, iucv_array_t * buffer, ulong buflen);
  552. /*                                                                     
  553.  * Name: iucv_send_prmmsg                                              
  554.  * Purpose: This function transmits data to another application.       
  555.  *          Prmmsg specifies that the 8-bytes of data are to be moved  
  556.  *          into the parameter list. This is a one-way message and the 
  557.  *          receiver will not reply to the message.                    
  558.  * Input: pathid - Path identification number.                          
  559.  *        trgcls - Specifies target class.                              
  560.  *        srccls - Specifies the source message class.                  
  561.  *        msgtag - Specifies a tag to be associated with the message.   
  562.  *        flags1 - Option for path.
  563.  *          IPPRTY- 0x20 specifies if you want to send priority message.
  564.  *        prmmsg - 8-bytes of data to be placed into parameter list.    
  565.  * Output: msgid - Specifies the message ID.                           
  566.  * Return: Return code from CP IUCV call.                           
  567. */
  568. int iucv_send_prmmsg (u16 pathid,
  569.       u32 * msgid,
  570.       u32 trgcls,
  571.       u32 srccls, u32 msgtag, int flags1, uchar prmmsg[8]);
  572. /*                                                                
  573.  * Name: iucv_send2way                                            
  574.  * Purpose: This function transmits data to another application.  
  575.  *          Data to be transmitted is in a buffer. The receiver   
  576.  *          of the send is expected to reply to the message and   
  577.  *          a buffer is provided into which IUCV moves the reply  
  578.  *          to this message.                                      
  579.  * Input: pathid - Path identification number.                     
  580.  *        trgcls - Specifies target class.                         
  581.  *        srccls - Specifies the source message class.             
  582.  *        msgtag - Specifies a tag associated with the message.    
  583.  *        flags1 - Option for path.
  584.  *          IPPRTY- 0x20 Specifies if you want to send priority message.
  585.  *        buffer - Address of send buffer.                         
  586.  *        buflen - Length of send buffer.                          
  587.  *        ansbuf - Address of buffer into which IUCV moves the reply of 
  588.  *                 this message.        
  589.  *        anslen - Address of length of buffer.          
  590.  * Output: msgid - Specifies the message ID.                      
  591.  * Return: Return code from CP IUCV call.                      
  592.  *         (-EINVAL) - Buffer or ansbuf address is NULL.    
  593. */
  594. int iucv_send2way (u16 pathid,
  595.    u32 * msgid,
  596.    u32 trgcls,
  597.    u32 srccls,
  598.    u32 msgtag,
  599.    int flags1,
  600.    void *buffer, ulong buflen, void *ansbuf, ulong anslen);
  601. /*                                                                    
  602.  * Name: iucv_send2way_array                                          
  603.  * Purpose: This function transmits data to another application.      
  604.  *          The contents of buffer is the address of the array of     
  605.  *          addresses and lengths of discontiguous buffers that hold  
  606.  *          the message text. The receiver of the send is expected to 
  607.  *          reply to the message and a buffer is provided into which  
  608.  *          IUCV moves the reply to this message.                     
  609.  * Input: pathid - Path identification number.                         
  610.  *        trgcls - Specifies target class.                             
  611.  *        srccls - Specifies the source message class.                 
  612.  *        msgtag - Specifies a tag to be associated with the message.   
  613.  *        flags1 - Option for path.
  614.  *          IPPRTY- 0x20 Specifies if you want to send priority message.
  615.  *        buffer - Sddress of array of send buffers.                   
  616.  *        buflen - Total length of send buffers.                       
  617.  *        ansbuf - Address of array of buffer into which IUCV moves the reply            
  618.  *                 of this message.                         
  619.  *        anslen - Address of length reply buffers.              
  620.  * Output: msgid - Specifies the message ID.                          
  621.  * Return: Return code from CP IUCV call.                          
  622.  *         (-EINVAL) - Buffer address is NULL.                              
  623. */
  624. int iucv_send2way_array (u16 pathid,
  625.  u32 * msgid,
  626.  u32 trgcls,
  627.  u32 srccls,
  628.  u32 msgtag,
  629.  int flags1,
  630.  iucv_array_t * buffer,
  631.  ulong buflen, iucv_array_t * ansbuf, ulong anslen);
  632. /*                                                                     
  633.  * Name: iucv_send2way_prmmsg                                          
  634.  * Purpose: This function transmits data to another application.       
  635.  *          Prmmsg specifies that the 8-bytes of data are to be moved  
  636.  *          into the parameter list. This is a two-way message and the 
  637.  *          receiver of the message is expected to reply. A buffer     
  638.  *          is provided into which IUCV moves the reply to this        
  639.  *          message.                                                   
  640.  * Input: pathid - Rath identification number.                          
  641.  *        trgcls - Specifies target class.                              
  642.  *        srccls - Specifies the source message class.                  
  643.  *        msgtag - Specifies a tag to be associated with the message.   
  644.  *        flags1 - Option for path.
  645.  *          IPPRTY- 0x20 Specifies if you want to send priority message.
  646.  *        prmmsg - 8-bytes of data to be placed in parameter list.      
  647.  *        ansbuf - Address of buffer into which IUCV moves the reply of    
  648.  *                 this message.
  649.  *        anslen - Address of length of buffer.               
  650.  * Output: msgid - Specifies the message ID.                           
  651.  * Return: Return code from CP IUCV call.                           
  652.  *         (-EINVAL) - Buffer address is NULL.         
  653. */
  654. int iucv_send2way_prmmsg (u16 pathid,
  655.   u32 * msgid,
  656.   u32 trgcls,
  657.   u32 srccls,
  658.   u32 msgtag,
  659.   ulong flags1,
  660.   uchar prmmsg[8], void *ansbuf, ulong anslen);
  661. /*                                                                      
  662.  * Name: iucv_send2way_prmmsg_array                                     
  663.  * Purpose: This function transmits data to another application.        
  664.  *          Prmmsg specifies that the 8-bytes of data are to be moved   
  665.  *          into the parameter list. This is a two-way message and the  
  666.  *          receiver of the message is expected to reply. A buffer      
  667.  *          is provided into which IUCV moves the reply to this         
  668.  *          message. The contents of ansbuf is the address of the       
  669.  *          array of addresses and lengths of discontiguous buffers     
  670.  *          that contain the reply.                                     
  671.  * Input: pathid - Path identification number.                           
  672.  *        trgcls - Specifies target class.                               
  673.  *        srccls - Specifies the source message class.                   
  674.  *        msgtag - Specifies a tag to be associated with the message.    
  675.  *        flags1 - Option for path.
  676.  *          IPPRTY- 0x20 specifies if you want to send priority message.
  677.  *        prmmsg - 8-bytes of data to be placed into the parameter list. 
  678.  *        ansbuf - Address of array of buffer into which IUCV moves the reply
  679.  *                 of this message.  
  680.  *        anslen - Address of length of reply buffers.                
  681.  * Output: msgid - Specifies the message ID.      
  682.  * Return: Return code from CP IUCV call.      
  683.  *         (-EINVAL) - Ansbuf address is NULL.          
  684. */
  685. int iucv_send2way_prmmsg_array (u16 pathid,
  686. u32 * msgid,
  687. u32 trgcls,
  688. u32 srccls,
  689. u32 msgtag,
  690. int flags1,
  691. uchar prmmsg[8],
  692. iucv_array_t * ansbuf, ulong anslen);
  693. /*                                                                   
  694.  * Name: iucv_setmask                                                
  695.  * Purpose: This function enables or disables the following IUCV     
  696.  *          external interruptions: Nonpriority and priority message 
  697.  *          interrupts, nonpriority and priority reply interrupts.   
  698.  * Input: SetMaskFlag - options for interrupts
  699.  *           0x80 - Nonpriority_MessagePendingInterruptsFlag         
  700.  *           0x40 - Priority_MessagePendingInterruptsFlag            
  701.  *           0x20 - Nonpriority_MessageCompletionInterruptsFlag      
  702.  *           0x10 - Priority_MessageCompletionInterruptsFlag         
  703.  * Output: NA                                                        
  704.  * Return: Return code from CP IUCV call.                         
  705. */
  706. int iucv_setmask (int SetMaskFlag);
  707. /*                                                  
  708.  * Name: iucv_sever                                 
  709.  * Purpose: This function terminates an IUCV path.  
  710.  * Input: pathid - Path identification number.       
  711.  *        user_data - 16-bytes of user data.         
  712.  * Output: NA       
  713.  * Return: Return code from CP IUCV call.                                
  714.  *         (-EINVAL) - Interal error, wild pointer.       
  715. */
  716. int iucv_sever (u16 pathid, uchar user_data[16]);