Lines Matching defs:smc
38 #include "h/smc.h"
47 #define GO_STATE(x) (smc->mib.fddiSMTECMState = (x)|AFLAG)
48 #define ACTIONS_DONE() (smc->mib.fddiSMTECMState &= ~AFLAG)
78 * all Globals are defined in smc.h
86 static void ecm_fsm(struct s_smc *smc, int cmd);
87 static void start_ecm_timer(struct s_smc *smc, u_long value, int event);
88 static void stop_ecm_timer(struct s_smc *smc);
89 static void prop_actions(struct s_smc *smc);
95 void ecm_init(struct s_smc *smc)
97 smc->e.path_test = PT_PASSED ;
98 smc->e.trace_prop = 0 ;
99 smc->e.sb_flag = 0 ;
100 smc->mib.fddiSMTECMState = ACTIONS(EC0_OUT) ;
101 smc->e.ecm_line_state = FALSE ;
113 void ecm(struct s_smc *smc, int event)
119 smc->mib.fddiSMTECMState & AFLAG ? "ACTIONS " : "",
120 ecm_states[smc->mib.fddiSMTECMState & ~AFLAG],
122 state = smc->mib.fddiSMTECMState ;
123 ecm_fsm(smc,event) ;
125 } while (state != smc->mib.fddiSMTECMState) ;
126 ecm_state_change(smc,(int)smc->mib.fddiSMTECMState) ;
132 static void ecm_fsm(struct s_smc *smc, int cmd)
139 smc->mib.fddiSMTBypassPresent = sm_pm_bypass_present(smc) ;
141 smc->mib.fddiSMTRemoteDisconnectFlag = FALSE ;
146 smc->mib.fddiSMTRemoteDisconnectFlag == TRUE) {
147 AIX_EVENT (smc, (u_long) CIO_HARD_FAIL, (u_long)
148 FDDI_REMOTE_DISCONNECT, smt_get_event_word(smc),
149 smt_get_error_word(smc) );
154 smc->e.DisconnectFlag = FALSE ;
157 smc->e.DisconnectFlag = TRUE ;
160 switch(smc->mib.fddiSMTECMState) {
165 smc->e.path_test = PT_PASSED ;
166 smc->e.ecm_line_state = FALSE ;
167 stop_ecm_timer(smc) ;
172 if (cmd == EC_CONNECT && !smc->mib.fddiSMTBypassPresent
173 && smc->e.path_test==PT_PASSED) {
178 else if (cmd == EC_CONNECT && (smc->e.path_test==PT_PASSED) &&
179 smc->mib.fddiSMTBypassPresent &&
180 (smc->s.sas == SMT_DAS)) {
186 stop_ecm_timer(smc) ;
187 smc->e.trace_prop = 0 ;
188 sm_ma_control(smc,MA_TREQ) ;
190 if (smc->mib.p[p].fddiPORTHardwarePresent)
191 queue_event(smc,EVENT_PCMA+p,PC_START) ;
197 prop_actions(smc) ;
208 start_ecm_timer(smc,MIB2US(smc->mib.fddiSMTTrace_MaxExpiration),
215 prop_actions(smc) ;
221 smc->e.path_test = PT_EXITING ;
226 else if (smc->e.path_test == PT_PENDING) {
234 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS,
236 FDDI_TRACE_MAX, smt_get_error_word(smc));
237 smc->e.path_test = PT_PENDING ;
243 start_ecm_timer(smc,smc->s.ecm_td_min,EC_TIMEOUT_TD) ;
245 queue_event(smc,EVENT_PCMA+p,PC_STOP) ;
250 if (cmd == EC_TIMEOUT_TD && !smc->mib.fddiSMTBypassPresent &&
251 (smc->e.path_test != PT_PENDING)) {
257 (smc->e.path_test == PT_PENDING)) {
262 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) {
268 smc->e.path_test == PT_PENDING) {
269 smc->e.path_test = PT_EXITING ;
276 smc->mib.fddiSMTBypassPresent &&
277 smc->e.path_test != PT_PENDING) {
283 stop_ecm_timer(smc) ;
284 smc->e.path_test = PT_TESTING ;
285 start_ecm_timer(smc,smc->s.ecm_test_done,EC_TEST_DONE) ;
292 smc->e.path_test = PT_PASSED ;
294 if (smc->e.path_test == PT_FAILED)
295 RS_SET(smc,RS_PATHTEST) ;
298 if (smc->e.path_test == PT_FAILED &&
299 !smc->mib.fddiSMTBypassPresent) {
305 !smc->mib.fddiSMTBypassPresent) {
310 else if (smc->e.path_test == PT_PASSED) {
315 else if (smc->e.path_test == PT_FAILED &&
316 smc->mib.fddiSMTBypassPresent) {
322 smc->mib.fddiSMTBypassPresent) {
328 sm_pm_bypass_req(smc,BP_INSERT);
329 start_ecm_timer(smc,smc->s.ecm_in_max,EC_TIMEOUT_INMAX) ;
349 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ;
350 smc->e.ecm_line_state = TRUE ; /* flag to pcm: report Q/HLS */
354 ls_a = sm_pm_get_ls(smc,PA) ;
355 ls_b = sm_pm_get_ls(smc,PB) ;
360 smc->e.sb_flag = FALSE ;
361 smc->e.ecm_line_state = FALSE ;
366 else if (!smc->e.sb_flag &&
369 smc->e.sb_flag = TRUE ;
371 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, (u_long)
373 smt_get_error_word(smc));
377 smc->e.ecm_line_state = FALSE ;
385 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ;
389 sm_pm_bypass_req(smc,BP_DEINSERT);
390 start_ecm_timer(smc,smc->s.ecm_i_max,EC_TIMEOUT_IMAX) ;
400 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) {
406 SMT_PANIC(smc,SMT_E0107, SMT_E0107_MSG) ;
415 static void prop_actions(struct s_smc *smc)
420 RS_SET(smc,RS_EVENT) ;
421 switch (smc->s.sas) {
423 port_in = port_out = pcm_get_s_port(smc) ;
426 port_in = cfm_get_mac_input(smc) ; /* PA or PB */
427 port_out = cfm_get_mac_output(smc) ; /* PA or PB */
430 SMT_PANIC(smc,SMT_E0108, SMT_E0108_MSG) ;
434 DB_ECM("ECM : prop_actions - trace_prop %lu", smc->e.trace_prop);
437 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) {
440 queue_event(smc,EVENT_PCM+port_in,PC_TRACE) ;
442 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PA))) &&
446 queue_event(smc,EVENT_PCMB,PC_TRACE) ;
448 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PB))) &&
452 queue_event(smc,EVENT_PCMA,PC_TRACE) ;
457 smc->e.path_test = PT_PENDING ;
459 smc->e.trace_prop = 0 ;
465 static void prop_actions(struct s_smc *smc)
471 RS_SET(smc,RS_EVENT) ;
472 while (smc->e.trace_prop) {
474 smc->e.trace_prop);
476 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) {
478 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_MAC) ;
483 if (smc->e.trace_prop &
488 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_PHY(p)) ;
490 upstream = cem_get_upstream(smc,initiator) ;
495 smc->e.path_test = PT_PENDING ;
500 queue_event(smc,EVENT_PCM+upstream,PC_TRACE) ;
511 static void start_ecm_timer(struct s_smc *smc, u_long value, int event)
513 smt_timer_start(smc,&smc->e.ecm_timer,value,EV_TOKEN(EVENT_ECM,event));
520 static void stop_ecm_timer(struct s_smc *smc)
522 if (smc->e.ecm_timer.tm_active)
523 smt_timer_stop(smc,&smc->e.ecm_timer) ;