⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfm.c

📁 h内核
💻 C
📖 第 1 页 / 共 2 页
字号:
		}		/*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 + -