2  * drivers/s390/net/ctcm_mpc.h
 
   4  * Copyright IBM Corp. 2007
 
   5  * Authors:     Peter Tiedemann (ptiedem@de.ibm.com)
 
   8  *              Belinda Thompson (belindat@us.ibm.com)
 
   9  *              Andy Richter (richtera@us.ibm.com)
 
  15 #include <linux/skbuff.h>
 
  19  * MPC external interface
 
  20  * Note that ctc_mpc_xyz are called with a lock on ................
 
  23 /*  port_number is the mpc device 0, 1, 2 etc mpc2 is port_number 2 */
 
  25 /*  passive open  Just wait for XID2 exchange */
 
  26 extern int ctc_mpc_alloc_channel(int port,
 
  27                 void (*callback)(int port_num, int max_write_size));
 
  28 /* active open  Alloc then send XID2 */
 
  29 extern void ctc_mpc_establish_connectivity(int port,
 
  30                 void (*callback)(int port_num, int rc, int max_write_size));
 
  32 extern void ctc_mpc_dealloc_ch(int port);
 
  33 extern void ctc_mpc_flow_control(int port, int flowc);
 
  36  * other MPC Group prototypes and structures
 
  39 #define ETH_P_SNA_DIX   0x80D5
 
  42  * Declaration of an XID2
 
  45 #define ALLZEROS 0x0000000000000000
 
  50 #define XID2_WRITE_SIDE 0x04
 
  51 #define XID2_READ_SIDE  0x05
 
  74         char xid2_buffer[255 - (13 * sizeof(__u8) +
 
  78 } __attribute__ ((packed));
 
  80 #define XID2_LENGTH  (sizeof(struct xid2))
 
  85 #define TH_HAS_PDU      0xf0
 
  86 #define TH_IS_XID       0x01
 
  87 #define TH_SWEEP_REQ    0xfe
 
  88 #define TH_SWEEP_RESP   0xff
 
  90 #define TH_DATA_IS_XID  0x80
 
  92 #define TH_DISCONTACT   0xc0
 
  93 #define TH_SEG_BLK      0x20
 
  94 #define TH_LAST_SEG     0x10
 
  95 #define TH_PDU_PART     0x08
 
  96         __u8    th_is_xid;      /* is 0x01 if this is XID  */
 
  98 } __attribute__ ((packed));
 
 103 } __attribute__ ((packed));
 
 108 } __attribute__ ((packed));
 
 110 #define TH_HEADER_LENGTH (sizeof(struct th_header))
 
 111 #define TH_SWEEP_LENGTH (sizeof(struct th_sweep))
 
 113 #define PDU_LAST        0x80
 
 114 #define PDU_CNTL        0x40
 
 115 #define PDU_FIRST       0x20
 
 120         __u8    pdu_proto;   /*  0x01 is APPN SNA  */
 
 122 } __attribute__ ((packed));
 
 124 #define PDU_HEADER_LENGTH  (sizeof(struct pdu))
 
 128 #define QLLC_REQ        0xFF
 
 129 #define QLLC_RESP       0x00
 
 131 #define QLLC_DISCONNECT 0x53
 
 132 #define QLLC_UNSEQACK   0x73
 
 133 #define QLLC_SETMODE    0x93
 
 134 #define QLLC_EXCHID     0xBF
 
 135 } __attribute__ ((packed));
 
 139  * Definition of one MPC group
 
 142 #define MAX_MPCGCHAN            10
 
 143 #define MPC_XID_TIMEOUT_VALUE   10000
 
 144 #define MPC_CHANNEL_ADD         0
 
 145 #define MPC_CHANNEL_REMOVE      1
 
 146 #define MPC_CHANNEL_ATTN        2
 
 154         struct th_sweep *sweep;
 
 155         struct th_header *th;
 
 159         struct tasklet_struct mpc_tasklet;
 
 160         struct tasklet_struct mpc_tasklet2;
 
 163         int     channels_terminating;
 
 171         __u32   xid2_sender_id;
 
 172         int     num_channel_paths;
 
 173         int     active_channels[2];
 
 174         __u16   group_max_buflen;
 
 175         int     outstanding_xid2;
 
 176         int     outstanding_xid7;
 
 177         int     outstanding_xid7_p2;
 
 178         int     sweep_req_pend_num;
 
 179         int     sweep_rsp_pend_num;
 
 180         struct sk_buff  *xid_skb;
 
 182         struct th_header *xid_th;
 
 185         struct th_header *rcvd_xid_th;
 
 186         struct sk_buff  *rcvd_xid_skb;
 
 190         struct xid2     *saved_xid2;
 
 191         void            (*allochanfunc)(int, int);
 
 192         int             allocchan_callback_retries;
 
 193         void            (*estconnfunc)(int, int, int);
 
 194         int             estconn_callback_retries;
 
 199         fsm_instance    *fsm; /* group xid fsm */
 
 203 void ctcmpc_dumpit(char *buf, int len);
 
 205 static inline void ctcmpc_dumpit(char *buf, int len)
 
 212  * Dump header and first 16 bytes of an sk_buff for debugging purposes.
 
 214  * skb   The struct sk_buff to dump.
 
 215  * offset Offset relative to skb-data, where to start the dump.
 
 217 void ctcmpc_dump_skb(struct sk_buff *skb, int offset);
 
 219 static inline void ctcmpc_dump_skb(struct sk_buff *skb, int offset)
 
 223 static inline void ctcmpc_dump32(char *buf, int len)
 
 226                 ctcmpc_dumpit(buf, len);
 
 228                 ctcmpc_dumpit(buf, 32);
 
 231 int ctcmpc_open(struct net_device *);
 
 232 void ctcm_ccw_check_rc(struct channel *, int, char *);
 
 233 void mpc_group_ready(unsigned long adev);
 
 234 void mpc_channel_action(struct channel *ch, int direction, int action);
 
 235 void mpc_action_send_discontact(unsigned long thischan);
 
 236 void mpc_action_discontact(fsm_instance *fi, int event, void *arg);
 
 237 void ctcmpc_bh(unsigned long thischan);
 
 239 /* --- This is the END my friend --- */