📄 cfm.c
字号:
} /*SC02*/ if ((smc->y[PB].cem_pst == CEM_PST_UP && smc->y[PB].cf_join && !smc->y[PB].wc_flag) || smc->y[PB].cf_loop) { GO_STATE(SC10_C_WRAP_B) ; break ; } break ; case ACTIONS(SC9_C_WRAP_A) : smc->mib.p[PA].fddiPORTCurrentPath = MIB_PATH_CONCATENATED ; smc->mib.p[PB].fddiPORTCurrentPath = MIB_PATH_ISOLATED ; smc->mib.p[PA].fddiPORTMACPlacement = INDEX_MAC ; smc->mib.p[PB].fddiPORTMACPlacement = 0 ; smc->mib.fddiSMTStationStatus = MIB_SMT_STASTA_CON ; config_mux(smc,MUX_WRAPA) ; /* configure PHY mux */ if (smc->y[PA].cf_loop) { smc->r.rm_join = FALSE ; smc->r.rm_loop = TRUE ; queue_event(smc,EVENT_RMT,RM_LOOP) ;/* signal RMT */ } if (smc->y[PA].cf_join) { smc->r.rm_loop = FALSE ; smc->r.rm_join = TRUE ; queue_event(smc,EVENT_RMT,RM_JOIN) ;/* signal RMT */ } ACTIONS_DONE() ; DB_CFMN(1,"CFM : %s\n",cfm_states[smc->mib.fddiSMTCF_State],0) ; break ; case SC9_C_WRAP_A : /*SC10*/ if ( (smc->y[PA].wc_flag || !smc->y[PA].cf_join) && !smc->y[PA].cf_loop ) { GO_STATE(SC0_ISOLATED) ; break ; } /*SC12*/ else if ( (smc->y[PB].cf_loop && smc->y[PA].cf_join && smc->y[PA].cem_pst == CEM_PST_UP) || ((smc->y[PB].cf_loop || (smc->y[PB].cf_join && smc->y[PB].cem_pst == CEM_PST_UP)) && (smc->y[PA].pc_mode == PM_TREE || smc->y[PB].pc_mode == PM_TREE))) { smc->y[PA].scrub = TRUE ; GO_STATE(SC10_C_WRAP_B) ; break ; } /*SC14*/ else if (!smc->s.attach_s && smc->y[PA].cf_join && smc->y[PA].cem_pst == CEM_PST_UP && smc->y[PA].pc_mode == PM_PEER && smc->y[PB].cf_join && smc->y[PB].cem_pst == CEM_PST_UP && smc->y[PB].pc_mode == PM_PEER) { smc->y[PA].scrub = TRUE ; smc->y[PB].scrub = TRUE ; GO_STATE(SC4_THRU_A) ; break ; } /*SC15*/ else if ( smc->s.attach_s && smc->y[PA].cf_join && smc->y[PA].cem_pst == CEM_PST_UP && smc->y[PA].pc_mode == PM_PEER && smc->y[PB].cf_join && smc->y[PB].cem_pst == CEM_PST_UP && smc->y[PB].pc_mode == PM_PEER) { smc->y[PA].scrub = TRUE ; smc->y[PB].scrub = TRUE ; GO_STATE(SC5_THRU_B) ; break ; } break ; case ACTIONS(SC10_C_WRAP_B) : smc->mib.p[PA].fddiPORTCurrentPath = MIB_PATH_ISOLATED ; smc->mib.p[PB].fddiPORTCurrentPath = MIB_PATH_CONCATENATED ; smc->mib.p[PA].fddiPORTMACPlacement = 0 ; smc->mib.p[PB].fddiPORTMACPlacement = INDEX_MAC ; smc->mib.fddiSMTStationStatus = MIB_SMT_STASTA_CON ; config_mux(smc,MUX_WRAPB) ; /* configure PHY mux */ if (smc->y[PB].cf_loop) { smc->r.rm_join = FALSE ; smc->r.rm_loop = TRUE ; queue_event(smc,EVENT_RMT,RM_LOOP) ;/* signal RMT */ } if (smc->y[PB].cf_join) { smc->r.rm_loop = FALSE ; smc->r.rm_join = TRUE ; queue_event(smc,EVENT_RMT,RM_JOIN) ;/* signal RMT */ } ACTIONS_DONE() ; DB_CFMN(1,"CFM : %s\n",cfm_states[smc->mib.fddiSMTCF_State],0) ; break ; case SC10_C_WRAP_B : /*SC20*/ if ( !smc->y[PB].cf_join && !smc->y[PB].cf_loop ) { GO_STATE(SC0_ISOLATED) ; break ; } /*SC21*/ else if ( smc->y[PA].cf_loop && smc->y[PA].pc_mode == PM_PEER && smc->y[PB].cf_join && smc->y[PB].pc_mode == PM_PEER) { smc->y[PB].scrub = TRUE ; GO_STATE(SC9_C_WRAP_A) ; break ; } /*SC24*/ else if (!smc->s.attach_s && smc->y[PA].cf_join && smc->y[PA].pc_mode == PM_PEER && smc->y[PB].cf_join && smc->y[PB].pc_mode == PM_PEER) { smc->y[PA].scrub = TRUE ; smc->y[PB].scrub = TRUE ; GO_STATE(SC4_THRU_A) ; break ; } /*SC25*/ else if ( smc->s.attach_s && smc->y[PA].cf_join && smc->y[PA].pc_mode == PM_PEER && smc->y[PB].cf_join && smc->y[PB].pc_mode == PM_PEER) { smc->y[PA].scrub = TRUE ; smc->y[PB].scrub = TRUE ; GO_STATE(SC5_THRU_B) ; break ; } break ; case ACTIONS(SC4_THRU_A) : smc->mib.p[PA].fddiPORTCurrentPath = MIB_PATH_THRU ; smc->mib.p[PB].fddiPORTCurrentPath = MIB_PATH_THRU ; smc->mib.p[PA].fddiPORTMACPlacement = 0 ; smc->mib.p[PB].fddiPORTMACPlacement = INDEX_MAC ; smc->mib.fddiSMTStationStatus = MIB_SMT_STASTA_THRU ; config_mux(smc,MUX_THRUA) ; /* configure PHY mux */ smc->r.rm_loop = FALSE ; smc->r.rm_join = TRUE ; queue_event(smc,EVENT_RMT,RM_JOIN) ;/* signal RMT */ ACTIONS_DONE() ; DB_CFMN(1,"CFM : %s\n",cfm_states[smc->mib.fddiSMTCF_State],0) ; break ; case SC4_THRU_A : /*SC41*/ if (smc->y[PB].wc_flag || !smc->y[PB].cf_join) { smc->y[PA].scrub = TRUE ; GO_STATE(SC9_C_WRAP_A) ; break ; } /*SC42*/ else if (!smc->y[PA].cf_join || smc->y[PA].wc_flag) { smc->y[PB].scrub = TRUE ; GO_STATE(SC10_C_WRAP_B) ; break ; } /*SC45*/ else if (smc->s.attach_s) { smc->y[PB].scrub = TRUE ; GO_STATE(SC5_THRU_B) ; break ; } break ; case ACTIONS(SC5_THRU_B) : smc->mib.p[PA].fddiPORTCurrentPath = MIB_PATH_THRU ; smc->mib.p[PB].fddiPORTCurrentPath = MIB_PATH_THRU ; smc->mib.p[PA].fddiPORTMACPlacement = INDEX_MAC ; smc->mib.p[PB].fddiPORTMACPlacement = 0 ; smc->mib.fddiSMTStationStatus = MIB_SMT_STASTA_THRU ; config_mux(smc,MUX_THRUB) ; /* configure PHY mux */ smc->r.rm_loop = FALSE ; smc->r.rm_join = TRUE ; queue_event(smc,EVENT_RMT,RM_JOIN) ;/* signal RMT */ ACTIONS_DONE() ; DB_CFMN(1,"CFM : %s\n",cfm_states[smc->mib.fddiSMTCF_State],0) ; break ; case SC5_THRU_B : /*SC51*/ if (!smc->y[PB].cf_join || smc->y[PB].wc_flag) { smc->y[PA].scrub = TRUE ; GO_STATE(SC9_C_WRAP_A) ; break ; } /*SC52*/ else if (!smc->y[PA].cf_join || smc->y[PA].wc_flag) { smc->y[PB].scrub = TRUE ; GO_STATE(SC10_C_WRAP_B) ; break ; } /*SC54*/ else if (!smc->s.attach_s) { smc->y[PA].scrub = TRUE ; GO_STATE(SC4_THRU_A) ; break ; } break ; case ACTIONS(SC11_C_WRAP_S) : smc->mib.p[PS].fddiPORTCurrentPath = MIB_PATH_CONCATENATED ; smc->mib.p[PS].fddiPORTMACPlacement = INDEX_MAC ; smc->mib.fddiSMTStationStatus = MIB_SMT_STASTA_CON ; config_mux(smc,MUX_WRAPS) ; /* configure PHY mux */ if (smc->y[PA].cf_loop || smc->y[PB].cf_loop) { smc->r.rm_join = FALSE ; smc->r.rm_loop = TRUE ; queue_event(smc,EVENT_RMT,RM_LOOP) ;/* signal RMT */ } if (smc->y[PA].cf_join || smc->y[PB].cf_join) { smc->r.rm_loop = FALSE ; smc->r.rm_join = TRUE ; queue_event(smc,EVENT_RMT,RM_JOIN) ;/* signal RMT */ } ACTIONS_DONE() ; DB_CFMN(1,"CFM : %s\n",cfm_states[smc->mib.fddiSMTCF_State],0) ; break ; case SC11_C_WRAP_S : /*SC70*/ if ( !smc->y[PA].cf_join && !smc->y[PA].cf_loop && !smc->y[PB].cf_join && !smc->y[PB].cf_loop) { GO_STATE(SC0_ISOLATED) ; break ; } break ; default: SMT_PANIC(smc,SMT_E0106, SMT_E0106_MSG) ; break; }}/* * get MAC's input Port * return : * PA or PB */int cfm_get_mac_input(struct s_smc *smc){ return((smc->mib.fddiSMTCF_State == SC10_C_WRAP_B || smc->mib.fddiSMTCF_State == SC5_THRU_B) ? PB : PA) ;}/* * get MAC's output Port * return : * PA or PB */int cfm_get_mac_output(struct s_smc *smc){ return((smc->mib.fddiSMTCF_State == SC10_C_WRAP_B || smc->mib.fddiSMTCF_State == SC4_THRU_A) ? PB : PA) ;}static char path_iso[] = { 0,0, 0,RES_PORT, 0,PA + INDEX_PORT, 0,PATH_ISO, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_ISO, 0,0, 0,RES_PORT, 0,PB + INDEX_PORT, 0,PATH_ISO} ;static char path_wrap_a[] = { 0,0, 0,RES_PORT, 0,PA + INDEX_PORT, 0,PATH_PRIM, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_PRIM, 0,0, 0,RES_PORT, 0,PB + INDEX_PORT, 0,PATH_ISO} ;static char path_wrap_b[] = { 0,0, 0,RES_PORT, 0,PB + INDEX_PORT, 0,PATH_PRIM, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_PRIM, 0,0, 0,RES_PORT, 0,PA + INDEX_PORT, 0,PATH_ISO} ;static char path_thru[] = { 0,0, 0,RES_PORT, 0,PA + INDEX_PORT, 0,PATH_PRIM, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_PRIM, 0,0, 0,RES_PORT, 0,PB + INDEX_PORT, 0,PATH_PRIM} ;static char path_wrap_s[] = { 0,0, 0,RES_PORT, 0,PS + INDEX_PORT, 0,PATH_PRIM, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_PRIM,} ;static char path_iso_s[] = { 0,0, 0,RES_PORT, 0,PS + INDEX_PORT, 0,PATH_ISO, 0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_ISO,} ;int cem_build_path(struct s_smc *smc, char *to, int path_index){ char *path ; int len ; switch (smc->mib.fddiSMTCF_State) { default : case SC0_ISOLATED : path = smc->s.sas ? path_iso_s : path_iso ; len = smc->s.sas ? sizeof(path_iso_s) : sizeof(path_iso) ; break ; case SC9_C_WRAP_A : path = path_wrap_a ; len = sizeof(path_wrap_a) ; break ; case SC10_C_WRAP_B : path = path_wrap_b ; len = sizeof(path_wrap_b) ; break ; case SC4_THRU_A : path = path_thru ; len = sizeof(path_thru) ; break ; case SC11_C_WRAP_S : path = path_wrap_s ; len = sizeof(path_wrap_s) ; break ; } memcpy(to,path,len) ; LINT_USE(path_index); return(len) ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -