Lines Matching refs:smc
60 #define GO_STATE(x) (smc->mib.m[MAC0].fddiMACRMTState = (x)|AFLAG)
61 #define ACTIONS_DONE() (smc->mib.m[MAC0].fddiMACRMTState &= ~AFLAG)
105 static void rmt_fsm(struct s_smc *smc, int cmd);
106 static void start_rmt_timer0(struct s_smc *smc, u_long value, int event);
107 static void start_rmt_timer1(struct s_smc *smc, u_long value, int event);
108 static void start_rmt_timer2(struct s_smc *smc, u_long value, int event);
109 static void stop_rmt_timer0(struct s_smc *smc);
110 static void stop_rmt_timer1(struct s_smc *smc);
111 static void stop_rmt_timer2(struct s_smc *smc);
112 static void rmt_dup_actions(struct s_smc *smc);
113 static void rmt_reinsert_actions(struct s_smc *smc);
114 static void rmt_leave_actions(struct s_smc *smc);
115 static void rmt_new_dup_actions(struct s_smc *smc);
125 void rmt_init(struct s_smc *smc) in rmt_init() argument
127 smc->mib.m[MAC0].fddiMACRMTState = ACTIONS(RM0_ISOLATED) ; in rmt_init()
128 smc->r.dup_addr_test = DA_NONE ; in rmt_init()
129 smc->r.da_flag = 0 ; in rmt_init()
130 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_init()
131 smc->r.sm_ma_avail = FALSE ; in rmt_init()
132 smc->r.loop_avail = 0 ; in rmt_init()
133 smc->r.bn_flag = 0 ; in rmt_init()
134 smc->r.jm_flag = 0 ; in rmt_init()
135 smc->r.no_flag = TRUE ; in rmt_init()
147 void rmt(struct s_smc *smc, int event) in rmt() argument
153 (smc->mib.m[MAC0].fddiMACRMTState & AFLAG) ? "ACTIONS " : "", in rmt()
154 rmt_states[smc->mib.m[MAC0].fddiMACRMTState & ~AFLAG]) ; in rmt()
156 state = smc->mib.m[MAC0].fddiMACRMTState ; in rmt()
157 rmt_fsm(smc,event) ; in rmt()
159 } while (state != smc->mib.m[MAC0].fddiMACRMTState) ; in rmt()
160 rmt_state_change(smc,(int)smc->mib.m[MAC0].fddiMACRMTState) ; in rmt()
166 static void rmt_fsm(struct s_smc *smc, int cmd) in rmt_fsm() argument
171 if (!smc->r.rm_join && !smc->r.rm_loop && in rmt_fsm()
172 smc->mib.m[MAC0].fddiMACRMTState != ACTIONS(RM0_ISOLATED) && in rmt_fsm()
173 smc->mib.m[MAC0].fddiMACRMTState != RM0_ISOLATED) { in rmt_fsm()
174 RS_SET(smc,RS_NORINGOP) ; in rmt_fsm()
175 rmt_indication(smc,0) ; in rmt_fsm()
180 switch(smc->mib.m[MAC0].fddiMACRMTState) { in rmt_fsm()
182 stop_rmt_timer0(smc) ; in rmt_fsm()
183 stop_rmt_timer1(smc) ; in rmt_fsm()
184 stop_rmt_timer2(smc) ; in rmt_fsm()
189 sm_ma_control(smc,MA_OFFLINE) ; in rmt_fsm()
190 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_fsm()
191 smc->r.loop_avail = FALSE ; in rmt_fsm()
192 smc->r.sm_ma_avail = FALSE ; in rmt_fsm()
193 smc->r.no_flag = TRUE ; in rmt_fsm()
199 if (smc->r.rm_join || smc->r.rm_loop) { in rmt_fsm()
206 sm_ma_control(smc,MA_RESET) ; in rmt_fsm()
212 start_rmt_timer0(smc,smc->s.rmt_t_non_op,RM_TIMEOUT_NON_OP) ; in rmt_fsm()
213 stop_rmt_timer1(smc) ; in rmt_fsm()
214 stop_rmt_timer2(smc) ; in rmt_fsm()
215 sm_ma_control(smc,MA_BEACON) ; in rmt_fsm()
217 RS_SET(smc,RS_NORINGOP) ; in rmt_fsm()
218 smc->r.sm_ma_avail = FALSE ; in rmt_fsm()
219 rmt_indication(smc,0) ; in rmt_fsm()
225 RS_SET(smc,RS_RINGOPCHANGE) ; in rmt_fsm()
231 smc->r.bn_flag = FALSE ; in rmt_fsm()
232 smc->r.no_flag = TRUE ; in rmt_fsm()
238 stop_rmt_timer0(smc) ; in rmt_fsm()
239 stop_rmt_timer1(smc) ; in rmt_fsm()
240 stop_rmt_timer2(smc) ; in rmt_fsm()
241 smc->r.no_flag = FALSE ; in rmt_fsm()
242 if (smc->r.rm_loop) in rmt_fsm()
243 smc->r.loop_avail = TRUE ; in rmt_fsm()
244 if (smc->r.rm_join) { in rmt_fsm()
245 smc->r.sm_ma_avail = TRUE ; in rmt_fsm()
246 if (smc->mib.m[MAC0].fddiMACMA_UnitdataEnable) in rmt_fsm()
247 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = TRUE ; in rmt_fsm()
249 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_fsm()
252 RS_CLEAR(smc,RS_NORINGOP) ; in rmt_fsm()
253 RS_SET(smc,RS_RINGOPCHANGE) ; in rmt_fsm()
254 rmt_indication(smc,1) ; in rmt_fsm()
255 smt_stat_counter(smc,0) ; in rmt_fsm()
261 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_fsm()
262 smc->r.loop_avail = FALSE ; in rmt_fsm()
263 RS_SET(smc,RS_RINGOPCHANGE) ; in rmt_fsm()
269 if (smc->mib.m[MAC0].fddiMACMA_UnitdataEnable) in rmt_fsm()
270 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = TRUE ; in rmt_fsm()
272 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_fsm()
275 else if (smc->r.dup_addr_test == DA_FAILED) { in rmt_fsm()
276 smc->mib.m[MAC0].fddiMACMA_UnitdataAvailable = FALSE ; in rmt_fsm()
277 smc->r.loop_avail = FALSE ; in rmt_fsm()
278 smc->r.da_flag = TRUE ; in rmt_fsm()
284 start_rmt_timer0(smc,smc->s.mac_d_max*2,RM_TIMEOUT_D_MAX) ; in rmt_fsm()
285 start_rmt_timer1(smc,smc->s.rmt_t_stuck,RM_TIMEOUT_T_STUCK) ; in rmt_fsm()
286 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL) ; in rmt_fsm()
287 sm_mac_check_beacon_claim(smc) ; in rmt_fsm()
293 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL); in rmt_fsm()
294 sm_mac_check_beacon_claim(smc) ; in rmt_fsm()
298 smc->r.timer0_exp = TRUE ; in rmt_fsm()
307 start_rmt_timer0(smc, in rmt_fsm()
308 smc->s.mac_d_max*2, in rmt_fsm()
318 && smc->r.bn_flag) { in rmt_fsm()
319 smc->r.bn_flag = FALSE ; in rmt_fsm()
322 else if (cmd == RM_TRT_EXP && !smc->r.bn_flag) { in rmt_fsm()
329 if ((tx = sm_mac_get_tx_state(smc)) == 4 || tx == 5) { in rmt_fsm()
331 smc->r.bn_flag = TRUE ; in rmt_fsm()
338 start_rmt_timer1(smc,smc->s.rmt_t_stuck, in rmt_fsm()
349 tx,smc->r.bn_flag) ; in rmt_fsm()
352 else if (cmd == RM_MY_CLAIM && smc->r.timer0_exp) { in rmt_fsm()
353 rmt_new_dup_actions(smc) ; in rmt_fsm()
358 else if (cmd == RM_MY_BEACON && smc->r.timer0_exp) { in rmt_fsm()
359 rmt_new_dup_actions(smc) ; in rmt_fsm()
365 rmt_new_dup_actions(smc) ; in rmt_fsm()
371 smc->r.rm_join && smc->r.bn_flag) { in rmt_fsm()
377 start_rmt_timer0(smc,smc->s.rmt_t_announce,RM_TIMEOUT_ANNOUNCE); in rmt_fsm()
378 start_rmt_timer1(smc,smc->s.rmt_t_stuck,RM_TIMEOUT_T_STUCK) ; in rmt_fsm()
379 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL) ; in rmt_fsm()
380 sm_mac_check_beacon_claim(smc) ; in rmt_fsm()
386 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL); in rmt_fsm()
387 sm_mac_check_beacon_claim(smc) ; in rmt_fsm()
391 if (!smc->r.da_flag) { in rmt_fsm()
397 smc->r.bn_flag) { in rmt_fsm()
398 smc->r.bn_flag = FALSE ; in rmt_fsm()
401 else if (cmd == RM_TRT_EXP && !smc->r.bn_flag) { in rmt_fsm()
408 if ((tx = sm_mac_get_tx_state(smc)) == 4 || tx == 5) { in rmt_fsm()
410 smc->r.bn_flag = TRUE ; in rmt_fsm()
417 start_rmt_timer1(smc,smc->s.rmt_t_stuck, in rmt_fsm()
428 tx,smc->r.bn_flag) ; in rmt_fsm()
431 else if (cmd == RM_TIMEOUT_ANNOUNCE && !smc->r.bn_flag) { in rmt_fsm()
432 rmt_dup_actions(smc) ; in rmt_fsm()
436 smc->r.no_flag = FALSE ; in rmt_fsm()
442 smc->r.rm_join && smc->r.bn_flag) { in rmt_fsm()
448 stop_rmt_timer0(smc) ; in rmt_fsm()
449 stop_rmt_timer1(smc) ; in rmt_fsm()
450 stop_rmt_timer2(smc) ; in rmt_fsm()
456 if (smc->r.dup_addr_test == DA_PASSED) { in rmt_fsm()
457 smc->r.da_flag = FALSE ; in rmt_fsm()
463 smc->r.jm_flag = FALSE ; in rmt_fsm()
464 smc->r.bn_flag = FALSE ; in rmt_fsm()
470 start_rmt_timer0(smc,smc->s.rmt_t_direct,RM_TIMEOUT_T_DIRECT) ; in rmt_fsm()
471 stop_rmt_timer1(smc) ; in rmt_fsm()
472 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL) ; in rmt_fsm()
473 sm_ma_control(smc,MA_DIRECTED) ; in rmt_fsm()
474 RS_SET(smc,RS_BEACON) ; in rmt_fsm()
481 start_rmt_timer2(smc,smc->s.rmt_t_poll,RM_TIMEOUT_POLL); in rmt_fsm()
482 sm_mac_check_beacon_claim(smc) ; in rmt_fsm()
489 restart_trt_for_dbcn(smc) ; in rmt_fsm()
494 !smc->r.da_flag) { in rmt_fsm()
495 smc->r.bn_flag = FALSE ; in rmt_fsm()
501 smc->r.da_flag) { in rmt_fsm()
502 smc->r.bn_flag = FALSE ; in rmt_fsm()
513 stop_rmt_timer0(smc) ; in rmt_fsm()
514 stop_rmt_timer1(smc) ; in rmt_fsm()
515 stop_rmt_timer2(smc) ; in rmt_fsm()
516 smc->e.trace_prop |= ENTITY_BIT(ENTITY_MAC) ; in rmt_fsm()
517 queue_event(smc,EVENT_ECM,EC_TRACE_PROP) ; in rmt_fsm()
524 SMT_PANIC(smc,SMT_E0122, SMT_E0122_MSG) ; in rmt_fsm()
533 static void rmt_dup_actions(struct s_smc *smc) in rmt_dup_actions() argument
535 if (smc->r.jm_flag) { in rmt_dup_actions()
538 if (smc->s.rmt_dup_mac_behavior) { in rmt_dup_actions()
539 SMT_ERR_LOG(smc,SMT_E0138, SMT_E0138_MSG) ; in rmt_dup_actions()
540 rmt_reinsert_actions(smc) ; in rmt_dup_actions()
543 SMT_ERR_LOG(smc,SMT_E0135, SMT_E0135_MSG) ; in rmt_dup_actions()
544 rmt_leave_actions(smc) ; in rmt_dup_actions()
552 static void rmt_reinsert_actions(struct s_smc *smc) in rmt_reinsert_actions() argument
554 queue_event(smc,EVENT_ECM,EC_DISCONNECT) ; in rmt_reinsert_actions()
555 queue_event(smc,EVENT_ECM,EC_CONNECT) ; in rmt_reinsert_actions()
561 static void rmt_new_dup_actions(struct s_smc *smc) in rmt_new_dup_actions() argument
563 smc->r.da_flag = TRUE ; in rmt_new_dup_actions()
564 smc->r.bn_flag = FALSE ; in rmt_new_dup_actions()
565 smc->r.jm_flag = FALSE ; in rmt_new_dup_actions()
572 if (smc->s.rmt_dup_mac_behavior) { in rmt_new_dup_actions()
573 SMT_ERR_LOG(smc,SMT_E0138, SMT_E0138_MSG) ; in rmt_new_dup_actions()
574 rmt_reinsert_actions(smc) ; in rmt_new_dup_actions()
577 SMT_ERR_LOG(smc,SMT_E0135, SMT_E0135_MSG) ; in rmt_new_dup_actions()
578 rmt_leave_actions(smc) ; in rmt_new_dup_actions()
586 static void rmt_leave_actions(struct s_smc *smc) in rmt_leave_actions() argument
588 queue_event(smc,EVENT_ECM,EC_DISCONNECT) ; in rmt_leave_actions()
599 static void start_rmt_timer0(struct s_smc *smc, u_long value, int event) in start_rmt_timer0() argument
601 smc->r.timer0_exp = FALSE ; /* clear timer event flag */ in start_rmt_timer0()
602 smt_timer_start(smc,&smc->r.rmt_timer0,value,EV_TOKEN(EVENT_RMT,event)); in start_rmt_timer0()
609 static void start_rmt_timer1(struct s_smc *smc, u_long value, int event) in start_rmt_timer1() argument
611 smc->r.timer1_exp = FALSE ; /* clear timer event flag */ in start_rmt_timer1()
612 smt_timer_start(smc,&smc->r.rmt_timer1,value,EV_TOKEN(EVENT_RMT,event)); in start_rmt_timer1()
619 static void start_rmt_timer2(struct s_smc *smc, u_long value, int event) in start_rmt_timer2() argument
621 smc->r.timer2_exp = FALSE ; /* clear timer event flag */ in start_rmt_timer2()
622 smt_timer_start(smc,&smc->r.rmt_timer2,value,EV_TOKEN(EVENT_RMT,event)); in start_rmt_timer2()
629 static void stop_rmt_timer0(struct s_smc *smc) in stop_rmt_timer0() argument
631 if (smc->r.rmt_timer0.tm_active) in stop_rmt_timer0()
632 smt_timer_stop(smc,&smc->r.rmt_timer0) ; in stop_rmt_timer0()
639 static void stop_rmt_timer1(struct s_smc *smc) in stop_rmt_timer1() argument
641 if (smc->r.rmt_timer1.tm_active) in stop_rmt_timer1()
642 smt_timer_stop(smc,&smc->r.rmt_timer1) ; in stop_rmt_timer1()
649 static void stop_rmt_timer2(struct s_smc *smc) in stop_rmt_timer2() argument
651 if (smc->r.rmt_timer2.tm_active) in stop_rmt_timer2()
652 smt_timer_stop(smc,&smc->r.rmt_timer2) ; in stop_rmt_timer2()