2005-04-16 15:20:36 -07:00
/*
* drivers / s390 / net / iucv . h
* IUCV base support .
*
* S390 version
* Copyright ( C ) 2000 IBM Corporation
2006-05-26 21:58:38 -04:00
* Author ( s ) : Alan Altmark ( Alan_Altmark @ us . ibm . com )
2005-04-16 15:20:36 -07:00
* Xenia Tkatschow ( xenia @ us . ibm . com )
*
*
* Functionality :
* To explore any of the IUCV functions , one must first register
* their program using iucv_register_program ( ) . Once your program has
* successfully completed a register , it can exploit the other functions .
* For furthur reference on all IUCV functionality , refer to the
* CP Programming Services book , also available on the web
* thru www . ibm . com / s390 / vm / pubs , manual # SC24 - 5760
*
2006-05-26 21:58:38 -04:00
* Definition of Return Codes
* - All positive return codes including zero are reflected back
* from CP except for iucv_register_program . The definition of each
* return code can be found in CP Programming Services book .
* Also available on the web thru www . ibm . com / s390 / vm / pubs , manual # SC24 - 5760
* - Return Code of :
* ( - EINVAL ) Invalid value
* ( - ENOMEM ) storage allocation failed
2005-04-16 15:20:36 -07:00
* pgmask defined in iucv_register_program will be set depending on input
2006-05-26 21:58:38 -04:00
* paramters .
*
2005-04-16 15:20:36 -07:00
*/
# include <linux/types.h>
# include <asm/debug.h>
/**
* Debug Facility stuff
*/
# define IUCV_DBF_SETUP_NAME "iucv_setup"
# define IUCV_DBF_SETUP_LEN 32
2005-06-25 14:55:33 -07:00
# define IUCV_DBF_SETUP_PAGES 2
2005-04-16 15:20:36 -07:00
# define IUCV_DBF_SETUP_NR_AREAS 1
# define IUCV_DBF_SETUP_LEVEL 3
# define IUCV_DBF_DATA_NAME "iucv_data"
# define IUCV_DBF_DATA_LEN 128
2005-06-25 14:55:33 -07:00
# define IUCV_DBF_DATA_PAGES 2
2005-04-16 15:20:36 -07:00
# define IUCV_DBF_DATA_NR_AREAS 1
# define IUCV_DBF_DATA_LEVEL 2
# define IUCV_DBF_TRACE_NAME "iucv_trace"
# define IUCV_DBF_TRACE_LEN 16
2005-06-25 14:55:33 -07:00
# define IUCV_DBF_TRACE_PAGES 4
2005-04-16 15:20:36 -07:00
# define IUCV_DBF_TRACE_NR_AREAS 1
# define IUCV_DBF_TRACE_LEVEL 3
# define IUCV_DBF_TEXT(name,level,text) \
do { \
debug_text_event ( iucv_dbf_ # # name , level , text ) ; \
} while ( 0 )
# define IUCV_DBF_HEX(name,level,addr,len) \
do { \
debug_event ( iucv_dbf_ # # name , level , ( void * ) ( addr ) , len ) ; \
} while ( 0 )
DECLARE_PER_CPU ( char [ 256 ] , iucv_dbf_txt_buf ) ;
# define IUCV_DBF_TEXT_(name,level,text...) \
do { \
char * iucv_dbf_txt_buf = get_cpu_var ( iucv_dbf_txt_buf ) ; \
sprintf ( iucv_dbf_txt_buf , text ) ; \
debug_text_event ( iucv_dbf_ # # name , level , iucv_dbf_txt_buf ) ; \
put_cpu_var ( iucv_dbf_txt_buf ) ; \
} while ( 0 )
# define IUCV_DBF_SPRINTF(name,level,text...) \
do { \
debug_sprintf_event ( iucv_dbf_trace , level , # # text ) ; \
debug_sprintf_event ( iucv_dbf_trace , level , text ) ; \
} while ( 0 )
/**
* some more debug stuff
*/
# define IUCV_HEXDUMP16(importance,header,ptr) \
PRINT_ # # importance ( header " %02x %02x %02x %02x %02x %02x %02x %02x " \
" %02x %02x %02x %02x %02x %02x %02x %02x \n " , \
* ( ( ( char * ) ptr ) ) , * ( ( ( char * ) ptr ) + 1 ) , * ( ( ( char * ) ptr ) + 2 ) , \
* ( ( ( char * ) ptr ) + 3 ) , * ( ( ( char * ) ptr ) + 4 ) , * ( ( ( char * ) ptr ) + 5 ) , \
* ( ( ( char * ) ptr ) + 6 ) , * ( ( ( char * ) ptr ) + 7 ) , * ( ( ( char * ) ptr ) + 8 ) , \
* ( ( ( char * ) ptr ) + 9 ) , * ( ( ( char * ) ptr ) + 10 ) , * ( ( ( char * ) ptr ) + 11 ) , \
* ( ( ( char * ) ptr ) + 12 ) , * ( ( ( char * ) ptr ) + 13 ) , \
* ( ( ( char * ) ptr ) + 14 ) , * ( ( ( char * ) ptr ) + 15 ) ) ; \
PRINT_ # # importance ( header " %02x %02x %02x %02x %02x %02x %02x %02x " \
" %02x %02x %02x %02x %02x %02x %02x %02x \n " , \
* ( ( ( char * ) ptr ) + 16 ) , * ( ( ( char * ) ptr ) + 17 ) , \
* ( ( ( char * ) ptr ) + 18 ) , * ( ( ( char * ) ptr ) + 19 ) , \
* ( ( ( char * ) ptr ) + 20 ) , * ( ( ( char * ) ptr ) + 21 ) , \
* ( ( ( char * ) ptr ) + 22 ) , * ( ( ( char * ) ptr ) + 23 ) , \
* ( ( ( char * ) ptr ) + 24 ) , * ( ( ( char * ) ptr ) + 25 ) , \
* ( ( ( char * ) ptr ) + 26 ) , * ( ( ( char * ) ptr ) + 27 ) , \
* ( ( ( char * ) ptr ) + 28 ) , * ( ( ( char * ) ptr ) + 29 ) , \
* ( ( ( char * ) ptr ) + 30 ) , * ( ( ( char * ) ptr ) + 31 ) ) ;
static inline void
iucv_hex_dump ( unsigned char * buf , size_t len )
{
size_t i ;
for ( i = 0 ; i < len ; i + + ) {
if ( i & & ! ( i % 16 ) )
printk ( " \n " ) ;
printk ( " %02x " , * ( buf + i ) ) ;
}
printk ( " \n " ) ;
}
/**
* end of debug stuff
*/
# define uchar unsigned char
# define ushort unsigned short
# define ulong unsigned long
# define iucv_handle_t void *
/* flags1:
2006-05-26 21:58:38 -04:00
* All flags are defined in the field IPFLAGS1 of each function
* and can be found in CP Programming Services .
* IPLOCAL - Indicates the connect can only be satisfied on the
* local system
* IPPRTY - Indicates a priority message
* IPQUSCE - Indicates you do not want to receive messages on a
* path until an iucv_resume is issued
2005-04-16 15:20:36 -07:00
* IPRMDATA - Indicates that the message is in the parameter list
*/
# define IPLOCAL 0x01
# define IPPRTY 0x20
# define IPQUSCE 0x40
# define IPRMDATA 0x80
/* flags1_out:
* All flags are defined in the output field of IPFLAGS1 for each function
* and can be found in CP Programming Services .
* IPNORPY - Specifies this is a one - way message and no reply is expected .
* IPPRTY - Indicates a priority message is permitted . Defined in flags1 .
*/
# define IPNORPY 0x10
# define Nonpriority_MessagePendingInterruptsFlag 0x80
# define Priority_MessagePendingInterruptsFlag 0x40
# define Nonpriority_MessageCompletionInterruptsFlag 0x20
# define Priority_MessageCompletionInterruptsFlag 0x10
# define IUCVControlInterruptsFlag 0x08
# define AllInterrupts 0xf8
/*
* Mapping of external interrupt buffers should be used with the corresponding
2006-05-26 21:58:38 -04:00
* interrupt types .
* Names : iucv_ConnectionPending - > connection pending
2005-04-16 15:20:36 -07:00
* iucv_ConnectionComplete - > connection complete
2006-05-26 21:58:38 -04:00
* iucv_ConnectionSevered - > connection severed
* iucv_ConnectionQuiesced - > connection quiesced
* iucv_ConnectionResumed - > connection resumed
* iucv_MessagePending - > message pending
* iucv_MessageComplete - > message complete
2005-04-16 15:20:36 -07:00
*/
typedef struct {
u16 ippathid ;
uchar ipflags1 ;
uchar iptype ;
u16 ipmsglim ;
u16 res1 ;
uchar ipvmid [ 8 ] ;
uchar ipuser [ 16 ] ;
u32 res3 ;
uchar ippollfg ;
uchar res4 [ 3 ] ;
} iucv_ConnectionPending ;
typedef struct {
u16 ippathid ;
uchar ipflags1 ;
uchar iptype ;
u16 ipmsglim ;
u16 res1 ;
uchar res2 [ 8 ] ;
uchar ipuser [ 16 ] ;
u32 res3 ;
uchar ippollfg ;
uchar res4 [ 3 ] ;
} iucv_ConnectionComplete ;
typedef struct {
u16 ippathid ;
uchar res1 ;
uchar iptype ;
u32 res2 ;
uchar res3 [ 8 ] ;
uchar ipuser [ 16 ] ;
u32 res4 ;
uchar ippollfg ;
uchar res5 [ 3 ] ;
} iucv_ConnectionSevered ;
typedef struct {
u16 ippathid ;
uchar res1 ;
uchar iptype ;
u32 res2 ;
uchar res3 [ 8 ] ;
uchar ipuser [ 16 ] ;
u32 res4 ;
uchar ippollfg ;
uchar res5 [ 3 ] ;
} iucv_ConnectionQuiesced ;
typedef struct {
u16 ippathid ;
uchar res1 ;
uchar iptype ;
u32 res2 ;
uchar res3 [ 8 ] ;
uchar ipuser [ 16 ] ;
u32 res4 ;
uchar ippollfg ;
uchar res5 [ 3 ] ;
} iucv_ConnectionResumed ;
typedef struct {
u16 ippathid ;
uchar ipflags1 ;
uchar iptype ;
u32 ipmsgid ;
u32 iptrgcls ;
union u2 {
u32 iprmmsg1_u32 ;
uchar iprmmsg1 [ 4 ] ;
} ln1msg1 ;
union u1 {
u32 ipbfln1f ;
uchar iprmmsg2 [ 4 ] ;
} ln1msg2 ;
u32 res1 [ 3 ] ;
u32 ipbfln2f ;
uchar ippollfg ;
uchar res2 [ 3 ] ;
} iucv_MessagePending ;
typedef struct {
u16 ippathid ;
uchar ipflags1 ;
uchar iptype ;
u32 ipmsgid ;
u32 ipaudit ;
uchar iprmmsg [ 8 ] ;
u32 ipsrccls ;
u32 ipmsgtag ;
u32 res ;
u32 ipbfln2f ;
uchar ippollfg ;
uchar res2 [ 3 ] ;
} iucv_MessageComplete ;
2006-05-26 21:58:38 -04:00
/*
* iucv_interrupt_ops_t : Is a vector of functions that handle
* IUCV interrupts .
* Parameter list :
* eib - is a pointer to a 40 - byte area described
* with one of the structures above .
* pgm_data - this data is strictly for the
* interrupt handler that is passed by
* the application . This may be an address
* or token .
2005-04-16 15:20:36 -07:00
*/
typedef struct {
void ( * ConnectionPending ) ( iucv_ConnectionPending * eib ,
void * pgm_data ) ;
void ( * ConnectionComplete ) ( iucv_ConnectionComplete * eib ,
void * pgm_data ) ;
void ( * ConnectionSevered ) ( iucv_ConnectionSevered * eib ,
void * pgm_data ) ;
void ( * ConnectionQuiesced ) ( iucv_ConnectionQuiesced * eib ,
void * pgm_data ) ;
void ( * ConnectionResumed ) ( iucv_ConnectionResumed * eib ,
void * pgm_data ) ;
void ( * MessagePending ) ( iucv_MessagePending * eib , void * pgm_data ) ;
void ( * MessageComplete ) ( iucv_MessageComplete * eib , void * pgm_data ) ;
} iucv_interrupt_ops_t ;
/*
2006-05-26 21:58:38 -04:00
* iucv_array_t : Defines buffer array .
* Inside the array may be 31 - bit addresses and 31 - bit lengths .
2005-04-16 15:20:36 -07:00
*/
typedef struct {
u32 address ;
u32 length ;
} iucv_array_t __attribute__ ( ( aligned ( 8 ) ) ) ;
extern struct bus_type iucv_bus ;
extern struct device * iucv_root ;
/* -prototypes- */
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_register_program
* Purpose : Registers an application with IUCV
* Input : prmname - user identification
2005-04-16 15:20:36 -07:00
* userid - machine identification
* pgmmask - indicates which bits in the prmname and userid combined will be
* used to determine who is given control
2006-05-26 21:58:38 -04:00
* ops - address of vector of interrupt handlers
* pgm_data - application data passed to interrupt handlers
* Output : NA
* Return : address of handler
2005-04-16 15:20:36 -07:00
* ( 0 ) - Error occurred , registration not completed .
2006-05-26 21:58:38 -04:00
* NOTE : Exact cause of failure will be recorded in syslog .
2005-04-16 15:20:36 -07:00
*/
iucv_handle_t iucv_register_program ( uchar pgmname [ 16 ] ,
uchar userid [ 8 ] ,
uchar pgmmask [ 24 ] ,
iucv_interrupt_ops_t * ops ,
void * pgm_data ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_unregister_program
* Purpose : Unregister application with IUCV
* Input : address of handler
* Output : NA
* Return : ( 0 ) - Normal return
* ( - EINVAL ) - Internal error , wild pointer
2005-04-16 15:20:36 -07:00
*/
int iucv_unregister_program ( iucv_handle_t handle ) ;
/*
* Name : iucv_accept
* Purpose : This function is issued after the user receives a Connection Pending external
* interrupt and now wishes to complete the IUCV communication path .
2006-05-26 21:58:38 -04:00
* Input : pathid - u16 , Path identification number
2005-04-16 15:20:36 -07:00
* msglim_reqstd - u16 , The number of outstanding messages requested .
* user_data - uchar [ 16 ] , Data specified by the iucv_connect function .
* flags1 - int , Contains options for this path .
* - IPPRTY - 0x20 - Specifies if you want to send priority message .
* - IPRMDATA - 0x80 , Specifies whether your program can handle a message
* in the parameter list .
* - IPQUSCE - 0x40 , Specifies whether you want to quiesce the path being
* established .
* handle - iucv_handle_t , Address of handler .
* pgm_data - void * , Application data passed to interrupt handlers .
* flags1_out - int * Contains information about the path
* - IPPRTY - 0x20 , Indicates you may send priority messages .
* msglim - * u16 , Number of outstanding messages .
* Output : return code from CP IUCV call .
*/
int iucv_accept ( u16 pathid ,
u16 msglim_reqstd ,
uchar user_data [ 16 ] ,
int flags1 ,
iucv_handle_t handle ,
void * pgm_data , int * flags1_out , u16 * msglim ) ;
/*
2006-05-26 21:58:38 -04:00
* Name : iucv_connect
2005-04-16 15:20:36 -07:00
* Purpose : This function establishes an IUCV path . Although the connect may complete
2006-05-26 21:58:38 -04:00
* successfully , you are not able to use the path until you receive an IUCV
* Connection Complete external interrupt .
* Input : pathid - u16 * , Path identification number
* msglim_reqstd - u16 , Number of outstanding messages requested
* user_data - uchar [ 16 ] , 16 - byte user data
2005-04-16 15:20:36 -07:00
* userid - uchar [ 8 ] , User identification
2006-05-26 21:58:38 -04:00
* system_name - uchar [ 8 ] , 8 - byte identifying the system name
2005-04-16 15:20:36 -07:00
* flags1 - int , Contains options for this path .
* - IPPRTY - 0x20 , Specifies if you want to send priority message .
* - IPRMDATA - 0x80 , Specifies whether your program can handle a message
* in the parameter list .
2006-05-26 21:58:38 -04:00
* - IPQUSCE - 0x40 , Specifies whether you want to quiesce the path being
2005-04-16 15:20:36 -07:00
* established .
2006-05-26 21:58:38 -04:00
* - IPLOCAL - 0 X01 , Allows an application to force the partner to be on
2005-04-16 15:20:36 -07:00
* the local system . If local is specified then target class cannot be
2006-05-26 21:58:38 -04:00
* specified .
2005-04-16 15:20:36 -07:00
* flags1_out - int * Contains information about the path
* - IPPRTY - 0x20 , Indicates you may send priority messages .
* msglim - * u16 , Number of outstanding messages
2006-05-26 21:58:38 -04:00
* handle - iucv_handle_t , Address of handler
* pgm_data - void * , Application data passed to interrupt handlers
2005-04-16 15:20:36 -07:00
* Output : return code from CP IUCV call
* rc - return code from iucv_declare_buffer
2006-05-26 21:58:38 -04:00
* - EINVAL - Invalid handle passed by application
* - EINVAL - Pathid address is NULL
* add_pathid_result - Return code from internal function add_pathid
2005-04-16 15:20:36 -07:00
*/
int
iucv_connect ( u16 * pathid ,
u16 msglim_reqstd ,
uchar user_data [ 16 ] ,
uchar userid [ 8 ] ,
uchar system_name [ 8 ] ,
int flags1 ,
int * flags1_out ,
u16 * msglim , iucv_handle_t handle , void * pgm_data ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_purge
* Purpose : This function cancels a message that you have sent .
* Input : pathid - Path identification number .
2005-04-16 15:20:36 -07:00
* msgid - Specifies the message ID of the message to be purged .
2006-05-26 21:58:38 -04:00
* srccls - Specifies the source message class .
* Output : audit - Contains information about asynchronous error
* that may have affected the normal completion
* of this message .
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_purge ( u16 pathid , u32 msgid , u32 srccls , __u32 * audit ) ;
/*
* Name : iucv_query_maxconn
* Purpose : This function determines the maximum number of communication paths you
* may establish .
* Return : maxconn - ulong , Maximum number of connection the virtual machine may
* establish .
*/
ulong iucv_query_maxconn ( void ) ;
/*
* Name : iucv_query_bufsize
* Purpose : This function determines how large an external interrupt
* buffer IUCV requires to store information .
* Return : bufsize - ulong , Size of external interrupt buffer .
*/
ulong iucv_query_bufsize ( void ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_quiesce
* Purpose : This function temporarily suspends incoming messages on an
* IUCV path . You can later reactivate the path by invoking
* the iucv_resume function .
* Input : pathid - Path identification number
* user_data - 16 - bytes of user data
* Output : NA
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_quiesce ( u16 pathid , uchar user_data [ 16 ] ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_receive
* Purpose : This function receives messages that are being sent to you
2005-04-16 15:20:36 -07:00
* over established paths . Data will be returned in buffer for length of
* buflen .
2006-05-26 21:58:38 -04:00
* Input :
* pathid - Path identification number .
* buffer - Address of buffer to receive .
* buflen - Length of buffer to receive .
* msgid - Specifies the message ID .
* trgcls - Specifies target class .
* Output :
2005-04-16 15:20:36 -07:00
* flags1_out : int * , Contains information about this path .
* IPNORPY - 0x10 Specifies this is a one - way message and no reply is
2006-05-26 21:58:38 -04:00
* expected .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2005-04-16 15:20:36 -07:00
* IPRMDATA - 0x80 specifies the data is contained in the parameter list
* residual_buffer - address of buffer updated by the number
* of bytes you have received .
2006-05-26 21:58:38 -04:00
* residual_length -
2005-04-16 15:20:36 -07:00
* Contains one of the following values , if the receive buffer is :
* The same length as the message , this field is zero .
* Longer than the message , this field contains the number of
* bytes remaining in the buffer .
* Shorter than the message , this field contains the residual
* count ( that is , the number of bytes remaining in the
* message that does not fit into the buffer . In this
* case b2f0_result = 5.
2006-05-26 21:58:38 -04:00
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - buffer address is pointing to NULL
2005-04-16 15:20:36 -07:00
*/
int iucv_receive ( u16 pathid ,
u32 msgid ,
u32 trgcls ,
void * buffer ,
ulong buflen ,
int * flags1_out ,
ulong * residual_buffer , ulong * residual_length ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_receive_array
* Purpose : This function receives messages that are being sent to you
2005-04-16 15:20:36 -07:00
* over established paths . Data will be returned in first buffer for
* length of first buffer .
2006-05-26 21:58:38 -04:00
* Input : pathid - Path identification number .
2005-04-16 15:20:36 -07:00
* msgid - specifies the message ID .
* trgcls - Specifies target class .
2006-05-26 21:58:38 -04:00
* buffer - Address of array of buffers .
* buflen - Total length of buffers .
2005-04-16 15:20:36 -07:00
* Output :
* flags1_out : int * , Contains information about this path .
* IPNORPY - 0x10 Specifies this is a one - way message and no reply is
* expected .
* IPPRTY - 0x20 Specifies if you want to send priority message .
* IPRMDATA - 0x80 specifies the data is contained in the parameter list
* residual_buffer - address points to the current list entry IUCV
* is working on .
* residual_length -
* Contains one of the following values , if the receive buffer is :
* The same length as the message , this field is zero .
* Longer than the message , this field contains the number of
* bytes remaining in the buffer .
* Shorter than the message , this field contains the residual
* count ( that is , the number of bytes remaining in the
* message that does not fit into the buffer . In this
* case b2f0_result = 5.
2006-05-26 21:58:38 -04:00
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_receive_array ( u16 pathid ,
u32 msgid ,
u32 trgcls ,
iucv_array_t * buffer ,
ulong buflen ,
int * flags1_out ,
ulong * residual_buffer , ulong * residual_length ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_reject
* Purpose : The reject function refuses a specified message . Between the
* time you are notified of a message and the time that you
* complete the message , the message may be rejected .
* Input : pathid - Path identification number .
* msgid - Specifies the message ID .
* trgcls - Specifies target class .
* Output : NA
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_reject ( u16 pathid , u32 msgid , u32 trgcls ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_reply
* Purpose : This function responds to the two - way messages that you
* receive . You must identify completely the message to
* which you wish to reply . ie , pathid , msgid , and trgcls .
* Input : pathid - Path identification number .
* msgid - Specifies the message ID .
* trgcls - Specifies target class .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
2006-05-26 21:58:38 -04:00
* IPPRTY - 0x20 , Specifies if you want to send priority message .
* buffer - Address of reply buffer .
* buflen - Length of reply buffer .
* Output : residual_buffer - Address of buffer updated by the number
* of bytes you have moved .
2005-04-16 15:20:36 -07:00
* residual_length - Contains one of the following values :
* If the answer buffer is the same length as the reply , this field
* contains zero .
* If the answer buffer is longer than the reply , this field contains
2006-05-26 21:58:38 -04:00
* the number of bytes remaining in the buffer .
2005-04-16 15:20:36 -07:00
* If the answer buffer is shorter than the reply , this field contains
* a residual count ( that is , the number of bytes remianing in the
* reply that does not fit into the buffer . In this
* case b2f0_result = 5.
2006-05-26 21:58:38 -04:00
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_reply ( u16 pathid ,
u32 msgid ,
u32 trgcls ,
int flags1 ,
void * buffer , ulong buflen , ulong * residual_buffer ,
ulong * residual_length ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_reply_array
* Purpose : This function responds to the two - way messages that you
* receive . You must identify completely the message to
* which you wish to reply . ie , pathid , msgid , and trgcls .
* The array identifies a list of addresses and lengths of
* discontiguous buffers that contains the reply data .
* Input : pathid - Path identification number
* msgid - Specifies the message ID .
* trgcls - Specifies target class .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 , Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* buffer - Address of array of reply buffers .
* buflen - Total length of reply buffers .
2005-04-16 15:20:36 -07:00
* Output : residual_buffer - Address of buffer which IUCV is currently working on .
* residual_length - Contains one of the following values :
* If the answer buffer is the same length as the reply , this field
* contains zero .
* If the answer buffer is longer than the reply , this field contains
* the number of bytes remaining in the buffer .
* If the answer buffer is shorter than the reply , this field contains
* a residual count ( that is , the number of bytes remianing in the
* reply that does not fit into the buffer . In this
* case b2f0_result = 5.
2006-05-26 21:58:38 -04:00
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_reply_array ( u16 pathid ,
u32 msgid ,
u32 trgcls ,
int flags1 ,
iucv_array_t * buffer ,
ulong buflen , ulong * residual_address ,
ulong * residual_length ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_reply_prmmsg
* Purpose : This function responds to the two - way messages that you
* receive . You must identify completely the message to
* which you wish to reply . ie , pathid , msgid , and trgcls .
* Prmmsg signifies the data is moved into the
* parameter list .
* Input : pathid - Path identification number .
* msgid - Specifies the message ID .
* trgcls - Specifies target class .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* prmmsg - 8 - bytes of data to be placed into the parameter .
* list .
* Output : NA
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_reply_prmmsg ( u16 pathid ,
u32 msgid , u32 trgcls , int flags1 , uchar prmmsg [ 8 ] ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_resume
* Purpose : This function restores communications over a quiesced path
* Input : pathid - Path identification number .
* user_data - 16 - bytes of user data .
* Output : NA
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_resume ( u16 pathid , uchar user_data [ 16 ] ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send
* Purpose : This function transmits data to another application .
* Data to be transmitted is in a buffer and this is a
* one - way message and the receiver will not reply to the
* message .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag to be associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* buffer - Address of send buffer .
* buflen - Length of send buffer .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls , u32 msgtag , int flags1 , void * buffer , ulong buflen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send_array
* Purpose : This function transmits data to another application .
* The contents of buffer is the address of the array of
* addresses and lengths of discontiguous buffers that hold
* the message text . This is a one - way message and the
* receiver will not reply to the message .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
2005-04-16 15:20:36 -07:00
* msgtag - Specifies a tag to be associated witht the message .
* flags1 - Option for path .
2006-05-26 21:58:38 -04:00
* IPPRTY - specifies if you want to send priority message .
* buffer - Address of array of send buffers .
* buflen - Total length of send buffers .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send_array ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls ,
u32 msgtag ,
int flags1 , iucv_array_t * buffer , ulong buflen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send_prmmsg
* Purpose : This function transmits data to another application .
* Prmmsg specifies that the 8 - bytes of data are to be moved
* into the parameter list . This is a one - way message and the
* receiver will not reply to the message .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag to be associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* prmmsg - 8 - bytes of data to be placed into parameter list .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_send_prmmsg ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls , u32 msgtag , int flags1 , uchar prmmsg [ 8 ] ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send2way
* Purpose : This function transmits data to another application .
* Data to be transmitted is in a buffer . The receiver
* of the send is expected to reply to the message and
* a buffer is provided into which IUCV moves the reply
* to this message .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* buffer - Address of send buffer .
* buflen - Length of send buffer .
* ansbuf - Address of buffer into which IUCV moves the reply of
* this message .
* anslen - Address of length of buffer .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer or ansbuf address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send2way ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls ,
u32 msgtag ,
int flags1 ,
void * buffer , ulong buflen , void * ansbuf , ulong anslen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send2way_array
* Purpose : This function transmits data to another application .
* The contents of buffer is the address of the array of
* addresses and lengths of discontiguous buffers that hold
* the message text . The receiver of the send is expected to
* reply to the message and a buffer is provided into which
* IUCV moves the reply to this message .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag to be associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* buffer - Sddress of array of send buffers .
* buflen - Total length of send buffers .
* ansbuf - Address of array of buffer into which IUCV moves the reply
* of this message .
* anslen - Address of length reply buffers .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send2way_array ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls ,
u32 msgtag ,
int flags1 ,
iucv_array_t * buffer ,
ulong buflen , iucv_array_t * ansbuf , ulong anslen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send2way_prmmsg
* Purpose : This function transmits data to another application .
* Prmmsg specifies that the 8 - bytes of data are to be moved
* into the parameter list . This is a two - way message and the
* receiver of the message is expected to reply . A buffer
* is provided into which IUCV moves the reply to this
* message .
* Input : pathid - Rath identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag to be associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 Specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* prmmsg - 8 - bytes of data to be placed in parameter list .
* ansbuf - Address of buffer into which IUCV moves the reply of
2005-04-16 15:20:36 -07:00
* this message .
2006-05-26 21:58:38 -04:00
* anslen - Address of length of buffer .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Buffer address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send2way_prmmsg ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls ,
u32 msgtag ,
ulong flags1 ,
uchar prmmsg [ 8 ] , void * ansbuf , ulong anslen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_send2way_prmmsg_array
* Purpose : This function transmits data to another application .
* Prmmsg specifies that the 8 - bytes of data are to be moved
* into the parameter list . This is a two - way message and the
* receiver of the message is expected to reply . A buffer
* is provided into which IUCV moves the reply to this
* message . The contents of ansbuf is the address of the
* array of addresses and lengths of discontiguous buffers
* that contain the reply .
* Input : pathid - Path identification number .
* trgcls - Specifies target class .
* srccls - Specifies the source message class .
* msgtag - Specifies a tag to be associated with the message .
2005-04-16 15:20:36 -07:00
* flags1 - Option for path .
* IPPRTY - 0x20 specifies if you want to send priority message .
2006-05-26 21:58:38 -04:00
* prmmsg - 8 - bytes of data to be placed into the parameter list .
2005-04-16 15:20:36 -07:00
* ansbuf - Address of array of buffer into which IUCV moves the reply
2006-05-26 21:58:38 -04:00
* of this message .
* anslen - Address of length of reply buffers .
* Output : msgid - Specifies the message ID .
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Ansbuf address is NULL .
2005-04-16 15:20:36 -07:00
*/
int iucv_send2way_prmmsg_array ( u16 pathid ,
u32 * msgid ,
u32 trgcls ,
u32 srccls ,
u32 msgtag ,
int flags1 ,
uchar prmmsg [ 8 ] ,
iucv_array_t * ansbuf , ulong anslen ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_setmask
* Purpose : This function enables or disables the following IUCV
* external interruptions : Nonpriority and priority message
* interrupts , nonpriority and priority reply interrupts .
2005-04-16 15:20:36 -07:00
* Input : SetMaskFlag - options for interrupts
2006-05-26 21:58:38 -04:00
* 0x80 - Nonpriority_MessagePendingInterruptsFlag
* 0x40 - Priority_MessagePendingInterruptsFlag
* 0x20 - Nonpriority_MessageCompletionInterruptsFlag
* 0x10 - Priority_MessageCompletionInterruptsFlag
2005-04-16 15:20:36 -07:00
* 0x08 - IUCVControlInterruptsFlag
2006-05-26 21:58:38 -04:00
* Output : NA
* Return : Return code from CP IUCV call .
2005-04-16 15:20:36 -07:00
*/
int iucv_setmask ( int SetMaskFlag ) ;
2006-05-26 21:58:38 -04:00
/*
* Name : iucv_sever
* Purpose : This function terminates an IUCV path .
* Input : pathid - Path identification number .
* user_data - 16 - bytes of user data .
* Output : NA
* Return : Return code from CP IUCV call .
* ( - EINVAL ) - Interal error , wild pointer .
2005-04-16 15:20:36 -07:00
*/
int iucv_sever ( u16 pathid , uchar user_data [ 16 ] ) ;