Lines Matching defs:smc
38 #include "h/smc.h"
51 #define GO_STATE(x) (smc->mib.fddiSMTECMState = (x)|AFLAG)
52 #define ACTIONS_DONE() (smc->mib.fddiSMTECMState &= ~AFLAG)
82 * all Globals are defined in smc.h
90 static void ecm_fsm(struct s_smc *smc, int cmd);
91 static void start_ecm_timer(struct s_smc *smc, u_long value, int event);
92 static void stop_ecm_timer(struct s_smc *smc);
93 static void prop_actions(struct s_smc *smc);
99 void ecm_init(struct s_smc *smc)
101 smc->e.path_test = PT_PASSED ;
102 smc->e.trace_prop = 0 ;
103 smc->e.sb_flag = 0 ;
104 smc->mib.fddiSMTECMState = ACTIONS(EC0_OUT) ;
105 smc->e.ecm_line_state = FALSE ;
117 void ecm(struct s_smc *smc, int event)
123 smc->mib.fddiSMTECMState & AFLAG ? "ACTIONS " : "",
124 ecm_states[smc->mib.fddiSMTECMState & ~AFLAG],
126 state = smc->mib.fddiSMTECMState ;
127 ecm_fsm(smc,event) ;
129 } while (state != smc->mib.fddiSMTECMState) ;
130 ecm_state_change(smc,(int)smc->mib.fddiSMTECMState) ;
136 static void ecm_fsm(struct s_smc *smc, int cmd)
143 smc->mib.fddiSMTBypassPresent = sm_pm_bypass_present(smc) ;
145 smc->mib.fddiSMTRemoteDisconnectFlag = FALSE ;
150 smc->mib.fddiSMTRemoteDisconnectFlag == TRUE)
151 AIX_EVENT (smc, (u_long) CIO_HARD_FAIL, (u_long)
152 FDDI_REMOTE_DISCONNECT, smt_get_event_word(smc),
153 smt_get_error_word(smc) );
157 smc->e.DisconnectFlag = FALSE ;
160 smc->e.DisconnectFlag = TRUE ;
163 switch(smc->mib.fddiSMTECMState) {
168 smc->e.path_test = PT_PASSED ;
169 smc->e.ecm_line_state = FALSE ;
170 stop_ecm_timer(smc) ;
175 if (cmd == EC_CONNECT && !smc->mib.fddiSMTBypassPresent
176 && smc->e.path_test==PT_PASSED) {
181 else if (cmd == EC_CONNECT && (smc->e.path_test==PT_PASSED) &&
182 smc->mib.fddiSMTBypassPresent &&
183 (smc->s.sas == SMT_DAS)) {
189 stop_ecm_timer(smc) ;
190 smc->e.trace_prop = 0 ;
191 sm_ma_control(smc,MA_TREQ) ;
193 if (smc->mib.p[p].fddiPORTHardwarePresent)
194 queue_event(smc,EVENT_PCMA+p,PC_START) ;
200 prop_actions(smc) ;
211 start_ecm_timer(smc,MIB2US(smc->mib.fddiSMTTrace_MaxExpiration),
218 prop_actions(smc) ;
224 smc->e.path_test = PT_EXITING ;
229 else if (smc->e.path_test == PT_PENDING) {
237 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS,
239 FDDI_TRACE_MAX, smt_get_error_word(smc));
240 smc->e.path_test = PT_PENDING ;
246 start_ecm_timer(smc,smc->s.ecm_td_min,EC_TIMEOUT_TD) ;
248 queue_event(smc,EVENT_PCMA+p,PC_STOP) ;
253 if (cmd == EC_TIMEOUT_TD && !smc->mib.fddiSMTBypassPresent &&
254 (smc->e.path_test != PT_PENDING)) {
260 (smc->e.path_test == PT_PENDING)) {
265 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) {
271 smc->e.path_test == PT_PENDING) {
272 smc->e.path_test = PT_EXITING ;
279 smc->mib.fddiSMTBypassPresent &&
280 smc->e.path_test != PT_PENDING) {
286 stop_ecm_timer(smc) ;
287 smc->e.path_test = PT_TESTING ;
288 start_ecm_timer(smc,smc->s.ecm_test_done,EC_TEST_DONE) ;
295 smc->e.path_test = PT_PASSED ;
297 if (smc->e.path_test == PT_FAILED)
298 RS_SET(smc,RS_PATHTEST) ;
301 if (smc->e.path_test == PT_FAILED &&
302 !smc->mib.fddiSMTBypassPresent) {
308 !smc->mib.fddiSMTBypassPresent) {
313 else if (smc->e.path_test == PT_PASSED) {
318 else if (smc->e.path_test == PT_FAILED &&
319 smc->mib.fddiSMTBypassPresent) {
325 smc->mib.fddiSMTBypassPresent) {
331 sm_pm_bypass_req(smc,BP_INSERT);
332 start_ecm_timer(smc,smc->s.ecm_in_max,EC_TIMEOUT_INMAX) ;
352 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ;
353 smc->e.ecm_line_state = TRUE ; /* flag to pcm: report Q/HLS */
357 ls_a = sm_pm_get_ls(smc,PA) ;
358 ls_b = sm_pm_get_ls(smc,PB) ;
363 smc->e.sb_flag = FALSE ;
364 smc->e.ecm_line_state = FALSE ;
369 else if (!smc->e.sb_flag &&
372 smc->e.sb_flag = TRUE ;
374 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, (u_long)
376 smt_get_error_word(smc));
380 smc->e.ecm_line_state = FALSE ;
388 start_ecm_timer(smc,smc->s.ecm_check_poll,0) ;
392 sm_pm_bypass_req(smc,BP_DEINSERT);
393 start_ecm_timer(smc,smc->s.ecm_i_max,EC_TIMEOUT_IMAX) ;
403 else if (cmd == EC_CONNECT && smc->e.path_test == PT_PASSED) {
409 SMT_PANIC(smc,SMT_E0107, SMT_E0107_MSG) ;
418 static void prop_actions(struct s_smc *smc)
423 RS_SET(smc,RS_EVENT) ;
424 switch (smc->s.sas) {
426 port_in = port_out = pcm_get_s_port(smc) ;
429 port_in = cfm_get_mac_input(smc) ; /* PA or PB */
430 port_out = cfm_get_mac_output(smc) ; /* PA or PB */
433 SMT_PANIC(smc,SMT_E0108, SMT_E0108_MSG) ;
437 DB_ECM("ECM : prop_actions - trace_prop %lu", smc->e.trace_prop);
440 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) {
443 queue_event(smc,EVENT_PCM+port_in,PC_TRACE) ;
445 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PA))) &&
449 queue_event(smc,EVENT_PCMB,PC_TRACE) ;
451 else if ((smc->e.trace_prop & ENTITY_BIT(ENTITY_PHY(PB))) &&
455 queue_event(smc,EVENT_PCMA,PC_TRACE) ;
460 smc->e.path_test = PT_PENDING ;
462 smc->e.trace_prop = 0 ;
468 static void prop_actions(struct s_smc *smc)
474 RS_SET(smc,RS_EVENT) ;
475 while (smc->e.trace_prop) {
477 smc->e.trace_prop);
479 if (smc->e.trace_prop & ENTITY_BIT(ENTITY_MAC)) {
481 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_MAC) ;
486 if (smc->e.trace_prop &
491 smc->e.trace_prop &= ~ENTITY_BIT(ENTITY_PHY(p)) ;
493 upstream = cem_get_upstream(smc,initiator) ;
498 smc->e.path_test = PT_PENDING ;
503 queue_event(smc,EVENT_PCM+upstream,PC_TRACE) ;
514 static void start_ecm_timer(struct s_smc *smc, u_long value, int event)
516 smt_timer_start(smc,&smc->e.ecm_timer,value,EV_TOKEN(EVENT_ECM,event));
523 static void stop_ecm_timer(struct s_smc *smc)
525 if (smc->e.ecm_timer.tm_active)
526 smt_timer_stop(smc,&smc->e.ecm_timer) ;