📄 iucv.h
字号:
/* * drivers/s390/net/iucv.h * IUCV base support. * * S390 version * Copyright (C) 2000 IBM Corporation * Author(s):Alan Altmark (Alan_Altmark@us.ibm.com) * 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 * * 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 * pgmask defined in iucv_register_program will be set depending on input * paramters. * */#include <linux/types.h>#define uchar unsigned char#define ushort unsigned short#define ulong unsigned long#define iucv_handle_t void */* flags1: * 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 * 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/* * Mapping of external interrupt buffers should be used with the corresponding * interrupt types. * Names: iucv_ConnectionPending -> connection pending * iucv_ConnectionComplete -> connection complete * iucv_ConnectionSevered -> connection severed * iucv_ConnectionQuiesced -> connection quiesced * iucv_ConnectionResumed -> connection resumed * iucv_MessagePending -> message pending * iucv_MessageComplete -> message complete */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; uchar iprmmsg1[4]; 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;/* * 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. */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;/* *iucv_array_t : Defines buffer array. * Inside the array may be 31- bit addresses and 31-bit lengths. */typedef struct { u32 address; u32 length;} iucv_array_t __attribute__ ((aligned (8)));/* -prototypes- *//* * Name: iucv_register_program * Purpose: Registers an application with IUCV * Input: prmname - user identification * userid - machine identification * pgmmask - indicates which bits in the prmname and userid combined will be * used to determine who is given control * ops - address of vector of interrupt handlers * pgm_data- application data passed to interrupt handlers * Output: NA * Return: address of handler * (0) - Error occured, registration not completed. * NOTE: Exact cause of failure will be recorded in syslog. */iucv_handle_t iucv_register_program (uchar pgmname[16], uchar userid[8], uchar pgmmask[24], iucv_interrupt_ops_t * ops, void *pgm_data);/* * Name: iucv_unregister_program * Purpose: Unregister application with IUCV * Input: address of handler * Output: NA * Return: (0) - Normal return * (-EINVAL) - Internal error, wild pointer */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. * Input: pathid - u16 , Path identification number * 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -