1 /* 2 * drivers/s390/net/ctcm_fsms.h 3 * 4 * Copyright IBM Corp. 2001, 2007 5 * Authors: Fritz Elfert (felfert@millenux.com) 6 * Peter Tiedemann (ptiedem@de.ibm.com) 7 * MPC additions : 8 * Belinda Thompson (belindat@us.ibm.com) 9 * Andy Richter (richtera@us.ibm.com) 10 */ 11 #ifndef _CTCM_FSMS_H_ 12 #define _CTCM_FSMS_H_ 13 14 #include <linux/module.h> 15 #include <linux/init.h> 16 #include <linux/kernel.h> 17 #include <linux/slab.h> 18 #include <linux/errno.h> 19 #include <linux/types.h> 20 #include <linux/interrupt.h> 21 #include <linux/timer.h> 22 #include <linux/bitops.h> 23 24 #include <linux/signal.h> 25 #include <linux/string.h> 26 27 #include <linux/ip.h> 28 #include <linux/if_arp.h> 29 #include <linux/tcp.h> 30 #include <linux/skbuff.h> 31 #include <linux/ctype.h> 32 #include <net/dst.h> 33 34 #include <linux/io.h> 35 #include <asm/ccwdev.h> 36 #include <asm/ccwgroup.h> 37 #include <linux/uaccess.h> 38 39 #include <asm/idals.h> 40 41 #include "fsm.h" 42 #include "cu3088.h" 43 #include "ctcm_main.h" 44 45 /* 46 * Definitions for the channel statemachine(s) for ctc and ctcmpc 47 * 48 * To allow better kerntyping, prefix-less definitions for channel states 49 * and channel events have been replaced : 50 * ch_event... -> ctc_ch_event... 51 * CH_EVENT... -> CTC_EVENT... 52 * ch_state... -> ctc_ch_state... 53 * CH_STATE... -> CTC_STATE... 54 */ 55 /* 56 * Events of the channel statemachine(s) for ctc and ctcmpc 57 */ 58 enum ctc_ch_events { 59 /* 60 * Events, representing return code of 61 * I/O operations (ccw_device_start, ccw_device_halt et al.) 62 */ 63 CTC_EVENT_IO_SUCCESS, 64 CTC_EVENT_IO_EBUSY, 65 CTC_EVENT_IO_ENODEV, 66 CTC_EVENT_IO_UNKNOWN, 67 68 CTC_EVENT_ATTNBUSY, 69 CTC_EVENT_ATTN, 70 CTC_EVENT_BUSY, 71 /* 72 * Events, representing unit-check 73 */ 74 CTC_EVENT_UC_RCRESET, 75 CTC_EVENT_UC_RSRESET, 76 CTC_EVENT_UC_TXTIMEOUT, 77 CTC_EVENT_UC_TXPARITY, 78 CTC_EVENT_UC_HWFAIL, 79 CTC_EVENT_UC_RXPARITY, 80 CTC_EVENT_UC_ZERO, 81 CTC_EVENT_UC_UNKNOWN, 82 /* 83 * Events, representing subchannel-check 84 */ 85 CTC_EVENT_SC_UNKNOWN, 86 /* 87 * Events, representing machine checks 88 */ 89 CTC_EVENT_MC_FAIL, 90 CTC_EVENT_MC_GOOD, 91 /* 92 * Event, representing normal IRQ 93 */ 94 CTC_EVENT_IRQ, 95 CTC_EVENT_FINSTAT, 96 /* 97 * Event, representing timer expiry. 98 */ 99 CTC_EVENT_TIMER, 100 /* 101 * Events, representing commands from upper levels. 102 */ 103 CTC_EVENT_START, 104 CTC_EVENT_STOP, 105 CTC_NR_EVENTS, 106 /* 107 * additional MPC events 108 */ 109 CTC_EVENT_SEND_XID = CTC_NR_EVENTS, 110 CTC_EVENT_RSWEEP_TIMER, 111 /* 112 * MUST be always the last element!! 113 */ 114 CTC_MPC_NR_EVENTS, 115 }; 116 117 /* 118 * States of the channel statemachine(s) for ctc and ctcmpc. 119 */ 120 enum ctc_ch_states { 121 /* 122 * Channel not assigned to any device, 123 * initial state, direction invalid 124 */ 125 CTC_STATE_IDLE, 126 /* 127 * Channel assigned but not operating 128 */ 129 CTC_STATE_STOPPED, 130 CTC_STATE_STARTWAIT, 131 CTC_STATE_STARTRETRY, 132 CTC_STATE_SETUPWAIT, 133 CTC_STATE_RXINIT, 134 CTC_STATE_TXINIT, 135 CTC_STATE_RX, 136 CTC_STATE_TX, 137 CTC_STATE_RXIDLE, 138 CTC_STATE_TXIDLE, 139 CTC_STATE_RXERR, 140 CTC_STATE_TXERR, 141 CTC_STATE_TERM, 142 CTC_STATE_DTERM, 143 CTC_STATE_NOTOP, 144 CTC_NR_STATES, /* MUST be the last element of non-expanded states */ 145 /* 146 * additional MPC states 147 */ 148 CH_XID0_PENDING = CTC_NR_STATES, 149 CH_XID0_INPROGRESS, 150 CH_XID7_PENDING, 151 CH_XID7_PENDING1, 152 CH_XID7_PENDING2, 153 CH_XID7_PENDING3, 154 CH_XID7_PENDING4, 155 CTC_MPC_NR_STATES, /* MUST be the last element of expanded mpc states */ 156 }; 157 158 extern const char *ctc_ch_event_names[]; 159 160 extern const char *ctc_ch_state_names[]; 161 162 void ctcm_ccw_check_rc(struct channel *ch, int rc, char *msg); 163 void ctcm_purge_skb_queue(struct sk_buff_head *q); 164 void fsm_action_nop(fsm_instance *fi, int event, void *arg); 165 166 /* 167 * ----- non-static actions for ctcm channel statemachine ----- 168 * 169 */ 170 void ctcm_chx_txidle(fsm_instance *fi, int event, void *arg); 171 172 /* 173 * ----- FSM (state/event/action) of the ctcm channel statemachine ----- 174 */ 175 extern const fsm_node ch_fsm[]; 176 extern int ch_fsm_len; 177 178 179 /* 180 * ----- non-static actions for ctcmpc channel statemachine ---- 181 * 182 */ 183 /* shared : 184 void ctcm_chx_txidle(fsm_instance * fi, int event, void *arg); 185 */ 186 void ctcmpc_chx_rxidle(fsm_instance *fi, int event, void *arg); 187 188 /* 189 * ----- FSM (state/event/action) of the ctcmpc channel statemachine ----- 190 */ 191 extern const fsm_node ctcmpc_ch_fsm[]; 192 extern int mpc_ch_fsm_len; 193 194 /* 195 * Definitions for the device interface statemachine for ctc and mpc 196 */ 197 198 /* 199 * States of the device interface statemachine. 200 */ 201 enum dev_states { 202 DEV_STATE_STOPPED, 203 DEV_STATE_STARTWAIT_RXTX, 204 DEV_STATE_STARTWAIT_RX, 205 DEV_STATE_STARTWAIT_TX, 206 DEV_STATE_STOPWAIT_RXTX, 207 DEV_STATE_STOPWAIT_RX, 208 DEV_STATE_STOPWAIT_TX, 209 DEV_STATE_RUNNING, 210 /* 211 * MUST be always the last element!! 212 */ 213 CTCM_NR_DEV_STATES 214 }; 215 216 extern const char *dev_state_names[]; 217 218 /* 219 * Events of the device interface statemachine. 220 * ctcm and ctcmpc 221 */ 222 enum dev_events { 223 DEV_EVENT_START, 224 DEV_EVENT_STOP, 225 DEV_EVENT_RXUP, 226 DEV_EVENT_TXUP, 227 DEV_EVENT_RXDOWN, 228 DEV_EVENT_TXDOWN, 229 DEV_EVENT_RESTART, 230 /* 231 * MUST be always the last element!! 232 */ 233 CTCM_NR_DEV_EVENTS 234 }; 235 236 extern const char *dev_event_names[]; 237 238 /* 239 * Actions for the device interface statemachine. 240 * ctc and ctcmpc 241 */ 242 /* 243 static void dev_action_start(fsm_instance * fi, int event, void *arg); 244 static void dev_action_stop(fsm_instance * fi, int event, void *arg); 245 static void dev_action_restart(fsm_instance *fi, int event, void *arg); 246 static void dev_action_chup(fsm_instance * fi, int event, void *arg); 247 static void dev_action_chdown(fsm_instance * fi, int event, void *arg); 248 */ 249 250 /* 251 * The (state/event/action) fsm table of the device interface statemachine. 252 * ctcm and ctcmpc 253 */ 254 extern const fsm_node dev_fsm[]; 255 extern int dev_fsm_len; 256 257 258 /* 259 * Definitions for the MPC Group statemachine 260 */ 261 262 /* 263 * MPC Group Station FSM States 264 265 State Name When In This State 266 ====================== ======================================= 267 MPCG_STATE_RESET Initial State When Driver Loaded 268 We receive and send NOTHING 269 270 MPCG_STATE_INOP INOP Received. 271 Group level non-recoverable error 272 273 MPCG_STATE_READY XID exchanges for at least 1 write and 274 1 read channel have completed. 275 Group is ready for data transfer. 276 277 States from ctc_mpc_alloc_channel 278 ============================================================== 279 MPCG_STATE_XID2INITW Awaiting XID2(0) Initiation 280 ATTN from other side will start 281 XID negotiations. 282 Y-side protocol only. 283 284 MPCG_STATE_XID2INITX XID2(0) negotiations are in progress. 285 At least 1, but not all, XID2(0)'s 286 have been received from partner. 287 288 MPCG_STATE_XID7INITW XID2(0) complete 289 No XID2(7)'s have yet been received. 290 XID2(7) negotiations pending. 291 292 MPCG_STATE_XID7INITX XID2(7) negotiations in progress. 293 At least 1, but not all, XID2(7)'s 294 have been received from partner. 295 296 MPCG_STATE_XID7INITF XID2(7) negotiations complete. 297 Transitioning to READY. 298 299 MPCG_STATE_READY Ready for Data Transfer. 300 301 302 States from ctc_mpc_establish_connectivity call 303 ============================================================== 304 MPCG_STATE_XID0IOWAIT Initiating XID2(0) negotiations. 305 X-side protocol only. 306 ATTN-BUSY from other side will convert 307 this to Y-side protocol and the 308 ctc_mpc_alloc_channel flow will begin. 309 310 MPCG_STATE_XID0IOWAIX XID2(0) negotiations are in progress. 311 At least 1, but not all, XID2(0)'s 312 have been received from partner. 313 314 MPCG_STATE_XID7INITI XID2(0) complete 315 No XID2(7)'s have yet been received. 316 XID2(7) negotiations pending. 317 318 MPCG_STATE_XID7INITZ XID2(7) negotiations in progress. 319 At least 1, but not all, XID2(7)'s 320 have been received from partner. 321 322 MPCG_STATE_XID7INITF XID2(7) negotiations complete. 323 Transitioning to READY. 324 325 MPCG_STATE_READY Ready for Data Transfer. 326 327 */ 328 329 enum mpcg_events { 330 MPCG_EVENT_INOP, 331 MPCG_EVENT_DISCONC, 332 MPCG_EVENT_XID0DO, 333 MPCG_EVENT_XID2, 334 MPCG_EVENT_XID2DONE, 335 MPCG_EVENT_XID7DONE, 336 MPCG_EVENT_TIMER, 337 MPCG_EVENT_DOIO, 338 MPCG_NR_EVENTS, 339 }; 340 341 enum mpcg_states { 342 MPCG_STATE_RESET, 343 MPCG_STATE_INOP, 344 MPCG_STATE_XID2INITW, 345 MPCG_STATE_XID2INITX, 346 MPCG_STATE_XID7INITW, 347 MPCG_STATE_XID7INITX, 348 MPCG_STATE_XID0IOWAIT, 349 MPCG_STATE_XID0IOWAIX, 350 MPCG_STATE_XID7INITI, 351 MPCG_STATE_XID7INITZ, 352 MPCG_STATE_XID7INITF, 353 MPCG_STATE_FLOWC, 354 MPCG_STATE_READY, 355 MPCG_NR_STATES, 356 }; 357 358 #endif 359 /* --- This is the END my friend --- */ 360