Lines Matching refs:smc
56 #define GO_STATE(x) (smc->mib.fddiSMTECMState = (x)|AFLAG)
57 #define ACTIONS_DONE() (smc->mib.fddiSMTECMState &= ~AFLAG)
97 static void ecm_fsm(struct s_smc *smc, int cmd);
98 static void start_ecm_timer(struct s_smc *smc, u_long value, int event);
99 static void stop_ecm_timer(struct s_smc *smc);
100 static void prop_actions(struct s_smc *smc);
106 void ecm_init(struct s_smc *smc) in ecm_init() argument
108 smc->e.path_test = PT_PASSED ; in ecm_init()
109 smc->e.trace_prop = 0 ; in ecm_init()
110 smc->e.sb_flag = 0 ; in ecm_init()
111 smc->mib.fddiSMTECMState = ACTIONS(EC0_OUT) ; in ecm_init()
112 smc->e.ecm_line_state = FALSE ; in ecm_init()
124 void ecm(struct s_smc *smc, int event) in ecm() argument
130 (smc->mib.fddiSMTECMState & AFLAG) ? "ACTIONS " : "", in ecm()
131 ecm_states[smc->mib.fddiSMTECMState & ~AFLAG]) ; in ecm()
133 state = smc->mib.fddiSMTECMState ; in ecm()
134 ecm_fsm(smc,event) ; in ecm()
136 } while (state != smc->mib.fddiSMTECMState) ; in ecm()
137 ecm_state_change(smc,(int)smc->mib.fddiSMTECMState) ; in ecm()
143 static void ecm_fsm(struct s_smc *smc, int cmd) in ecm_fsm() argument
150 smc->mib.fddiSMTBypassPresent = sm_pm_bypass_present(smc) ; in ecm_fsm()
152 smc->mib.fddiSMTRemoteDisconnectFlag = FALSE ; in ecm_fsm()
157 smc->mib.fddiSMTRemoteDisconnectFlag == TRUE) in ecm_fsm()
158 AIX_EVENT (smc, (u_long) CIO_HARD_FAIL, (u_long) in ecm_fsm()
159 FDDI_REMOTE_DISCONNECT, smt_get_event_word(smc), in ecm_fsm()
160 smt_get_error_word(smc) ); in ecm_fsm()
164 smc->e.DisconnectFlag = FALSE ; in ecm_fsm()
167 smc->e.DisconnectFlag = TRUE ; in ecm_fsm()
170 switch(smc->mib.fddiSMTECMState) { in ecm_fsm()
175 smc->e.path_test = PT_PASSED ; in ecm_fsm()
176 smc->e.ecm_line_state = FALSE ; in ecm_fsm()
177 stop_ecm_timer(smc) ; in ecm_fsm()
182 if (cmd == EC_CONNECT && !smc->mib.fddiSMTBypassPresent in ecm_fsm()
183 && smc->e.path_test==PT_PASSED) { in ecm_fsm()
188 else if (cmd == EC_CONNECT && (smc->e.path_test==PT_PASSED) && in ecm_fsm()
189 smc->mib.fddiSMTBypassPresent && in ecm_fsm()
190 (smc->s.sas == SMT_DAS)) { in ecm_fsm()
196 stop_ecm_timer(smc) ; in ecm_fsm()
197 smc->e.trace_prop = 0 ; in ecm_fsm()
198 sm_ma_control(smc,MA_TREQ) ; in ecm_fsm()
200 if (smc->mib.p[p].fddiPORTHardwarePresent) in ecm_fsm()
201 queue_event(smc,EVENT_PCMA+p,PC_START) ; in ecm_fsm()
207 prop_actions(smc) ; in ecm_fsm()
218 start_ecm_timer(smc,MIB2US(smc->mib.fddiSMTTrace_MaxExpiration), in ecm_fsm()
225 prop_actions(smc) ; in ecm_fsm()
231 smc->e.path_test = PT_EXITING ; in ecm_fsm()
236 else if (smc->e.path_test == PT_PENDING) { in ecm_fsm()
244 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, in ecm_fsm()
246 FDDI_TRACE_MAX, smt_get_error_word(smc)); in ecm_fsm()
247 smc->e.path_test = PT_PENDING ; in ecm_fsm()
253 start_ecm_timer(smc,smc->s.ecm_td_min,EC_TIMEOUT_TD) ; in ecm_fsm()
255 queue_event(smc,EVENT_PCMA+p,PC_STOP) ; in ecm_fsm()
260 if (cmd == EC_TIMEOUT_TD && !smc->mib.fddiSMTBypassPresent && in ecm_fsm()
261 (smc->e.path_test != PT_PENDING)) { in ecm_fsm()
267 (smc->e.path_test == PT_PENDING)) { in ecm_fsm()
272 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) { in ecm_fsm()
278 smc->e.path_test == PT_PENDING) { in ecm_fsm()
279 smc->e.path_test = PT_EXITING ; in ecm_fsm()
286 smc->mib.fddiSMTBypassPresent && in ecm_fsm()
287 smc->e.path_test != PT_PENDING) { in ecm_fsm()
293 stop_ecm_timer(smc) ; in ecm_fsm()
294 smc->e.path_test = PT_TESTING ; in ecm_fsm()
295 start_ecm_timer(smc,smc->s.ecm_test_done,EC_TEST_DONE) ; in ecm_fsm()
302 smc->e.path_test = PT_PASSED ; in ecm_fsm()
304 if (smc->e.path_test == PT_FAILED) in ecm_fsm()
305 RS_SET(smc,RS_PATHTEST) ; in ecm_fsm()
308 if (smc->e.path_test == PT_FAILED && in ecm_fsm()
309 !smc->mib.fddiSMTBypassPresent) { in ecm_fsm()
315 !smc->mib.fddiSMTBypassPresent) { in ecm_fsm()
320 else if (smc->e.path_test == PT_PASSED) { in ecm_fsm()
325 else if (smc->e.path_test == PT_FAILED && in ecm_fsm()
326 smc->mib.fddiSMTBypassPresent) { in ecm_fsm()
332 smc->mib.fddiSMTBypassPresent) { in ecm_fsm()
338 sm_pm_bypass_req(smc,BP_INSERT); in ecm_fsm()
339 start_ecm_timer(smc,smc->s.ecm_in_max,EC_TIMEOUT_INMAX) ; in ecm_fsm()
359 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ; in ecm_fsm()
360 smc->e.ecm_line_state = TRUE ; /* flag to pcm: report Q/HLS */ in ecm_fsm()
361 (void) sm_pm_ls_latch(smc,PA,1) ; /* enable line state latch */ in ecm_fsm()
362 (void) sm_pm_ls_latch(smc,PB,1) ; /* enable line state latch */ in ecm_fsm()
366 ls_a = sm_pm_get_ls(smc,PA) ; in ecm_fsm()
367 ls_b = sm_pm_get_ls(smc,PB) ; in ecm_fsm()
372 smc->e.sb_flag = FALSE ; in ecm_fsm()
373 smc->e.ecm_line_state = FALSE ; in ecm_fsm()
378 else if (!smc->e.sb_flag && in ecm_fsm()
381 smc->e.sb_flag = TRUE ; in ecm_fsm()
383 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, (u_long) in ecm_fsm()
385 smt_get_error_word(smc)); in ecm_fsm()
389 smc->e.ecm_line_state = FALSE ; in ecm_fsm()
397 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ; in ecm_fsm()
401 sm_pm_bypass_req(smc,BP_DEINSERT); in ecm_fsm()
402 start_ecm_timer(smc,smc->s.ecm_i_max,EC_TIMEOUT_IMAX) ; in ecm_fsm()
412 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) { in ecm_fsm()
418 SMT_PANIC(smc,SMT_E0107, SMT_E0107_MSG) ; in ecm_fsm()
427 static void prop_actions(struct s_smc *smc) in prop_actions() argument
432 RS_SET(smc,RS_EVENT) ; in prop_actions()
433 switch (smc->s.sas) { in prop_actions()
435 port_in = port_out = pcm_get_s_port(smc) ; in prop_actions()
438 port_in = cfm_get_mac_input(smc) ; /* PA or PB */ in prop_actions()
439 port_out = cfm_get_mac_output(smc) ; /* PA or PB */ in prop_actions()
442 SMT_PANIC(smc,SMT_E0108, SMT_E0108_MSG) ; in prop_actions()
446 DB_ECM("ECM : prop_actions - trace_prop %d\n", smc->e.trace_prop,0) ; in prop_actions()
449 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) { in prop_actions()
452 queue_event(smc,EVENT_PCM+port_in,PC_TRACE) ; in prop_actions()
454 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PA))) && in prop_actions()
458 queue_event(smc,EVENT_PCMB,PC_TRACE) ; in prop_actions()
460 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PB))) && in prop_actions()
464 queue_event(smc,EVENT_PCMA,PC_TRACE) ; in prop_actions()
469 smc->e.path_test = PT_PENDING ; in prop_actions()
471 smc->e.trace_prop = 0 ; in prop_actions()
477 static void prop_actions(struct s_smc *smc) in prop_actions() argument
483 RS_SET(smc,RS_EVENT) ; in prop_actions()
484 while (smc->e.trace_prop) { in prop_actions()
486 smc->e.trace_prop,0) ; in prop_actions()
488 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) { in prop_actions()
490 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_MAC) ; in prop_actions()
495 if (smc->e.trace_prop & in prop_actions()
500 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_PHY(p)) ; in prop_actions()
502 upstream = cem_get_upstream(smc,initiator) ; in prop_actions()
507 smc->e.path_test = PT_PENDING ; in prop_actions()
512 queue_event(smc,EVENT_PCM+upstream,PC_TRACE) ; in prop_actions()
523 static void start_ecm_timer(struct s_smc *smc, u_long value, int event) in start_ecm_timer() argument
525 smt_timer_start(smc,&smc->e.ecm_timer,value,EV_TOKEN(EVENT_ECM,event)); in start_ecm_timer()
532 static void stop_ecm_timer(struct s_smc *smc) in stop_ecm_timer() argument
534 if (smc->e.ecm_timer.tm_active) in stop_ecm_timer()
535 smt_timer_stop(smc,&smc->e.ecm_timer) ; in stop_ecm_timer()