0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _CTCM_FSMS_H_
0011 #define _CTCM_FSMS_H_
0012
0013 #include <linux/module.h>
0014 #include <linux/init.h>
0015 #include <linux/kernel.h>
0016 #include <linux/slab.h>
0017 #include <linux/errno.h>
0018 #include <linux/types.h>
0019 #include <linux/interrupt.h>
0020 #include <linux/timer.h>
0021 #include <linux/bitops.h>
0022
0023 #include <linux/signal.h>
0024 #include <linux/string.h>
0025
0026 #include <linux/ip.h>
0027 #include <linux/if_arp.h>
0028 #include <linux/tcp.h>
0029 #include <linux/skbuff.h>
0030 #include <linux/ctype.h>
0031 #include <net/dst.h>
0032
0033 #include <linux/io.h>
0034 #include <asm/ccwdev.h>
0035 #include <asm/ccwgroup.h>
0036 #include <linux/uaccess.h>
0037
0038 #include <asm/idals.h>
0039
0040 #include "fsm.h"
0041 #include "ctcm_main.h"
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 enum ctc_ch_events {
0057
0058
0059
0060
0061 CTC_EVENT_IO_SUCCESS,
0062 CTC_EVENT_IO_EBUSY,
0063 CTC_EVENT_IO_ENODEV,
0064 CTC_EVENT_IO_UNKNOWN,
0065
0066 CTC_EVENT_ATTNBUSY,
0067 CTC_EVENT_ATTN,
0068 CTC_EVENT_BUSY,
0069
0070
0071
0072 CTC_EVENT_UC_RCRESET,
0073 CTC_EVENT_UC_RSRESET,
0074 CTC_EVENT_UC_TXTIMEOUT,
0075 CTC_EVENT_UC_TXPARITY,
0076 CTC_EVENT_UC_HWFAIL,
0077 CTC_EVENT_UC_RXPARITY,
0078 CTC_EVENT_UC_ZERO,
0079 CTC_EVENT_UC_UNKNOWN,
0080
0081
0082
0083 CTC_EVENT_SC_UNKNOWN,
0084
0085
0086
0087 CTC_EVENT_MC_FAIL,
0088 CTC_EVENT_MC_GOOD,
0089
0090
0091
0092 CTC_EVENT_IRQ,
0093 CTC_EVENT_FINSTAT,
0094
0095
0096
0097 CTC_EVENT_TIMER,
0098
0099
0100
0101 CTC_EVENT_START,
0102 CTC_EVENT_STOP,
0103 CTC_NR_EVENTS,
0104
0105
0106
0107 CTC_EVENT_SEND_XID = CTC_NR_EVENTS,
0108 CTC_EVENT_RSWEEP_TIMER,
0109
0110
0111
0112 CTC_MPC_NR_EVENTS,
0113 };
0114
0115
0116
0117
0118 enum ctc_ch_states {
0119
0120
0121
0122
0123 CTC_STATE_IDLE,
0124
0125
0126
0127 CTC_STATE_STOPPED,
0128 CTC_STATE_STARTWAIT,
0129 CTC_STATE_STARTRETRY,
0130 CTC_STATE_SETUPWAIT,
0131 CTC_STATE_RXINIT,
0132 CTC_STATE_TXINIT,
0133 CTC_STATE_RX,
0134 CTC_STATE_TX,
0135 CTC_STATE_RXIDLE,
0136 CTC_STATE_TXIDLE,
0137 CTC_STATE_RXERR,
0138 CTC_STATE_TXERR,
0139 CTC_STATE_TERM,
0140 CTC_STATE_DTERM,
0141 CTC_STATE_NOTOP,
0142 CTC_NR_STATES,
0143
0144
0145
0146 CH_XID0_PENDING = CTC_NR_STATES,
0147 CH_XID0_INPROGRESS,
0148 CH_XID7_PENDING,
0149 CH_XID7_PENDING1,
0150 CH_XID7_PENDING2,
0151 CH_XID7_PENDING3,
0152 CH_XID7_PENDING4,
0153 CTC_MPC_NR_STATES,
0154 };
0155
0156 extern const char *ctc_ch_event_names[];
0157
0158 extern const char *ctc_ch_state_names[];
0159
0160 void ctcm_ccw_check_rc(struct channel *ch, int rc, char *msg);
0161 void ctcm_purge_skb_queue(struct sk_buff_head *q);
0162
0163
0164
0165
0166
0167 void ctcm_chx_txidle(fsm_instance *fi, int event, void *arg);
0168
0169
0170
0171
0172 extern const fsm_node ch_fsm[];
0173 extern int ch_fsm_len;
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183 void ctcmpc_chx_rxidle(fsm_instance *fi, int event, void *arg);
0184
0185
0186
0187
0188 extern const fsm_node ctcmpc_ch_fsm[];
0189 extern int mpc_ch_fsm_len;
0190
0191
0192
0193
0194
0195
0196
0197
0198 enum dev_states {
0199 DEV_STATE_STOPPED,
0200 DEV_STATE_STARTWAIT_RXTX,
0201 DEV_STATE_STARTWAIT_RX,
0202 DEV_STATE_STARTWAIT_TX,
0203 DEV_STATE_STOPWAIT_RXTX,
0204 DEV_STATE_STOPWAIT_RX,
0205 DEV_STATE_STOPWAIT_TX,
0206 DEV_STATE_RUNNING,
0207
0208
0209
0210 CTCM_NR_DEV_STATES
0211 };
0212
0213 extern const char *dev_state_names[];
0214
0215
0216
0217
0218
0219 enum dev_events {
0220 DEV_EVENT_START,
0221 DEV_EVENT_STOP,
0222 DEV_EVENT_RXUP,
0223 DEV_EVENT_TXUP,
0224 DEV_EVENT_RXDOWN,
0225 DEV_EVENT_TXDOWN,
0226 DEV_EVENT_RESTART,
0227
0228
0229
0230 CTCM_NR_DEV_EVENTS
0231 };
0232
0233 extern const char *dev_event_names[];
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251 extern const fsm_node dev_fsm[];
0252 extern int dev_fsm_len;
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326 enum mpcg_events {
0327 MPCG_EVENT_INOP,
0328 MPCG_EVENT_DISCONC,
0329 MPCG_EVENT_XID0DO,
0330 MPCG_EVENT_XID2,
0331 MPCG_EVENT_XID2DONE,
0332 MPCG_EVENT_XID7DONE,
0333 MPCG_EVENT_TIMER,
0334 MPCG_EVENT_DOIO,
0335 MPCG_NR_EVENTS,
0336 };
0337
0338 enum mpcg_states {
0339 MPCG_STATE_RESET,
0340 MPCG_STATE_INOP,
0341 MPCG_STATE_XID2INITW,
0342 MPCG_STATE_XID2INITX,
0343 MPCG_STATE_XID7INITW,
0344 MPCG_STATE_XID7INITX,
0345 MPCG_STATE_XID0IOWAIT,
0346 MPCG_STATE_XID0IOWAIX,
0347 MPCG_STATE_XID7INITI,
0348 MPCG_STATE_XID7INITZ,
0349 MPCG_STATE_XID7INITF,
0350 MPCG_STATE_FLOWC,
0351 MPCG_STATE_READY,
0352 MPCG_NR_STATES,
0353 };
0354
0355 #endif
0356