Lines Matching +full:reg +full:- +full:names

1 // SPDX-License-Identifier: GPL-2.0-or-later
71 #define GO_STATE(x) (mib->fddiPORTPCMState = (x)|AFLAG)
72 #define ACTIONS_DONE() (mib->fddiPORTPCMState &= ~AFLAG)
90 * symbolic state names
98 * symbolic event names
113 * PCL-S control register
114 * this register in the PLC-S controls the scrambling parameters
125 * PCL-S control register
126 * this register in the PLC-S controls the scrambling parameters
156 #define PLC_MS(m) ((int)((0x10000L-(m*100000L/2048))))
212 phy->timer0_exp = FALSE ; /* clear timer event flag */ in start_pcm_timer0()
213 smt_timer_start(smc,&phy->pcm_timer0,value, in start_pcm_timer0()
214 EV_TOKEN(EVENT_PCM+phy->np,event)) ; in start_pcm_timer0()
222 if (phy->pcm_timer0.tm_active) in stop_pcm_timer0()
223 smt_timer_stop(smc,&phy->pcm_timer0) ; in stop_pcm_timer0()
237 for (np = 0,phy = smc->y ; np < NUMPHYS ; np++,phy++) { in pcm_init()
239 mib = phy->mib ; in pcm_init()
240 mib->fddiPORTPCMState = ACTIONS(PC0_OFF) ; in pcm_init()
241 phy->np = np ; in pcm_init()
242 switch (smc->s.sas) { in pcm_init()
245 mib->fddiPORTMy_Type = (np == PS) ? TS : TM ; in pcm_init()
248 mib->fddiPORTMy_Type = (np == PA) ? TA : in pcm_init()
252 mib->fddiPORTMy_Type = TM ; in pcm_init()
256 mib->fddiPORTMy_Type = (np == PS) ? TS : TNONE ; in pcm_init()
257 mib->fddiPORTHardwarePresent = (np == PS) ? TRUE : in pcm_init()
260 smc->y[PA].mib->fddiPORTPCMState = PC0_OFF ; in pcm_init()
262 smc->y[PB].mib->fddiPORTPCMState = PC0_OFF ; in pcm_init()
266 mib->fddiPORTMy_Type = (np == PB) ? TB : TA ; in pcm_init()
271 * set PMD-type in pcm_init()
273 phy->pmd_scramble = 0 ; in pcm_init()
274 switch (phy->pmd_type[PMD_SK_PMD]) { in pcm_init()
276 mib->fddiPORTPMDClass = MIB_PMDCLASS_MULTI ; in pcm_init()
279 mib->fddiPORTPMDClass = MIB_PMDCLASS_LCF ; in pcm_init()
282 mib->fddiPORTPMDClass = MIB_PMDCLASS_TP ; in pcm_init()
285 mib->fddiPORTPMDClass = MIB_PMDCLASS_TP ; in pcm_init()
286 phy->pmd_scramble = TRUE ; in pcm_init()
289 mib->fddiPORTPMDClass = MIB_PMDCLASS_TP ; in pcm_init()
290 phy->pmd_scramble = TRUE ; in pcm_init()
293 mib->fddiPORTPMDClass = MIB_PMDCLASS_SINGLE1 ; in pcm_init()
296 mib->fddiPORTPMDClass = MIB_PMDCLASS_SINGLE2 ; in pcm_init()
299 mib->fddiPORTPMDClass = MIB_PMDCLASS_SINGLE2 ; in pcm_init()
302 mib->fddiPORTPMDClass = MIB_PMDCLASS_SINGLE1 ; in pcm_init()
305 mib->fddiPORTPMDClass = MIB_PMDCLASS_UNKNOWN ; in pcm_init()
308 mib->fddiPORTPMDClass = MIB_PMDCLASS_TP ; in pcm_init()
311 mib->fddiPORTPMDClass = MIB_PMDCLASS_TP ; in pcm_init()
314 mib->fddiPORTPMDClass = MIB_PMDCLASS_UNKNOWN ; in pcm_init()
320 switch (mib->fddiPORTMy_Type) { in pcm_init()
322 mib->fddiPORTAvailablePaths |= MIB_PATH_S ; in pcm_init()
323 mib->fddiPORTRequestedPaths[1] = MIB_P_PATH_LOCAL ; in pcm_init()
324 mib->fddiPORTRequestedPaths[2] = in pcm_init()
328 mib->fddiPORTRequestedPaths[3] = in pcm_init()
335 mib->fddiPORTAvailablePaths |= MIB_PATH_S ; in pcm_init()
336 mib->fddiPORTRequestedPaths[1] = MIB_P_PATH_LOCAL ; in pcm_init()
337 mib->fddiPORTRequestedPaths[2] = in pcm_init()
340 mib->fddiPORTRequestedPaths[3] = in pcm_init()
347 mib->fddiPORTAvailablePaths |= MIB_PATH_S ; in pcm_init()
348 mib->fddiPORTRequestedPaths[1] = MIB_P_PATH_LOCAL ; in pcm_init()
349 mib->fddiPORTRequestedPaths[2] = in pcm_init()
353 mib->fddiPORTRequestedPaths[3] = in pcm_init()
359 mib->fddiPORTRequestedPaths[1] = MIB_P_PATH_LOCAL ; in pcm_init()
360 mib->fddiPORTRequestedPaths[2] = in pcm_init()
364 mib->fddiPORTRequestedPaths[3] = 0 ; in pcm_init()
368 phy->pc_lem_fail = FALSE ; in pcm_init()
369 mib->fddiPORTPCMStateX = mib->fddiPORTPCMState ; in pcm_init()
370 mib->fddiPORTLCTFail_Ct = 0 ; in pcm_init()
371 mib->fddiPORTBS_Flag = 0 ; in pcm_init()
372 mib->fddiPORTCurrentPath = MIB_PATH_ISOLATED ; in pcm_init()
373 mib->fddiPORTNeighborType = TNONE ; in pcm_init()
374 phy->ls_flag = 0 ; in pcm_init()
375 phy->rc_flag = 0 ; in pcm_init()
376 phy->tc_flag = 0 ; in pcm_init()
377 phy->td_flag = 0 ; in pcm_init()
379 phy->phy_name = '0' + np - PM ; in pcm_init()
381 phy->phy_name = 'A' + np ; in pcm_init()
382 phy->wc_flag = FALSE ; /* set by SMT */ in pcm_init()
383 memset((char *)&phy->lem,0,sizeof(struct lem_counter)) ; in pcm_init()
385 memset((char *)&phy->plc,0,sizeof(struct s_plc)) ; in pcm_init()
386 phy->plc.p_state = PS_OFF ; in pcm_init()
388 phy->t_next[i] = 0 ; in pcm_init()
419 int rev ; /* Revision of PLC-x */ in plc_init()
428 * if PLC-S then set control register C in plc_init()
435 if (smc->y[p].pmd_scramble) { in plc_init()
454 for ( i = 0 ; pltm[i].timer; i++) /* set timer parameter reg */ in plc_init()
457 (void)inpw(PLC(p,PL_INTR_EVENT)) ; /* clear interrupt event reg */ in plc_init()
463 * REMOVE state if offline (page 3-36;) in plc_init()
469 if ((smc->s.sas == SMT_SAS) && (p == PS)) { in plc_init()
529 int np = phy->np ; /* PHY index */ in plc_send_bits()
536 for (i = len-1,n = 0 ; i >= 0 ; i--) { in plc_send_bits()
537 n = (n<<1) | phy->t_val[phy->bitn+i] ; in plc_send_bits()
546 outpw(PLC(np,PL_VECTOR_LEN),len-1) ; /* len=nr-1 */ in plc_send_bits()
551 if (smc->debug.d_plc & 0x80) in plc_send_bits()
555 printf("SIGNALING bit %d .. %d\n",phy->bitn,phy->bitn+len-1) ; in plc_send_bits()
566 if (smc->s.sas != SMT_DAS) in plc_config_mux()
599 if ((np != PS) && (smc->s.sas == SMT_SAS)) in pcm()
602 phy = &smc->y[np] ; in pcm()
603 mib = phy->mib ; in pcm()
604 oldstate = mib->fddiPORTPCMState ; in pcm()
607 phy->phy_name, in pcm()
608 mib->fddiPORTPCMState & AFLAG ? "ACTIONS " : "", in pcm()
609 pcm_states[mib->fddiPORTPCMState & ~AFLAG], in pcm()
611 state = mib->fddiPORTPCMState ; in pcm()
614 } while (state != mib->fddiPORTPCMState) ; in pcm()
622 mib->fddiPORTPCMStateX = PC3_CONNECT ; in pcm()
624 mib->fddiPORTPCMStateX = state ; in pcm()
630 if ( mib->fddiPORTPCMState != oldstate && in pcm()
631 ((oldstate == PC8_ACTIVE) || (mib->fddiPORTPCMState == PC8_ACTIVE))) { in pcm()
633 (int) (INDEX_PORT+ phy->np),0) ; in pcm()
638 /* check whether a snmp-trap has to be sent */ in pcm()
640 if ( mib->fddiPORTPCMState != oldstate ) { in pcm()
642 DB_SNMP ("PCM from %d to %d\n", oldstate, mib->fddiPORTPCMState); in pcm()
643 if ( mib->fddiPORTPCMState == PC0_OFF ) { in pcm()
645 snmp_fddi_trap (smc, 1, (int) mib->fddiPORTIndex ); in pcm()
648 snmp_fddi_trap (smc, 2, (int) mib->fddiPORTIndex ); in pcm()
649 } else if ( mib->fddiPORTPCMState != PC2_TRACE && in pcm()
652 snmp_fddi_trap (smc, 3, (int) mib->fddiPORTIndex ); in pcm()
653 } else if ( mib->fddiPORTPCMState == PC8_ACTIVE ) { in pcm()
655 snmp_fddi_trap (smc, 4, (int) mib->fddiPORTIndex ); in pcm()
669 int np = phy->np ; /* PHY index */ in pcm_fsm()
676 plc = &phy->plc ; in pcm_fsm()
677 mib = phy->mib ; in pcm_fsm()
684 /*PC00-PC80*/ in pcm_fsm()
685 if (mib->fddiPORTPCMState != PC9_MAINT) { in pcm_fsm()
693 /*PC01-PC81*/ in pcm_fsm()
694 if (mib->fddiPORTPCMState != PC9_MAINT) in pcm_fsm()
698 /* PC09-PC99 */ in pcm_fsm()
712 switch(mib->fddiPORTPCMState) { in pcm_fsm()
719 phy->cf_loop = FALSE ; in pcm_fsm()
720 phy->cf_join = FALSE ; in pcm_fsm()
723 mib->fddiPORTConnectState = PCM_DISABLED ; in pcm_fsm()
755 if (mib->fddiPORTPC_Withhold == PC_WH_NONE) in pcm_fsm()
756 mib->fddiPORTConnectState = PCM_CONNECTING ; in pcm_fsm()
757 phy->cf_loop = FALSE ; in pcm_fsm()
758 phy->cf_join = FALSE ; in pcm_fsm()
760 phy->ls_flag = FALSE ; in pcm_fsm()
761 phy->pc_mode = PM_NONE ; /* needed by CFM */ in pcm_fsm()
762 phy->bitn = 0 ; /* bit signaling start bit */ in pcm_fsm()
766 /* Set the non-active interrupt mask register */ in pcm_fsm()
793 * - The start command shall be done before setting the bits in pcm_fsm()
794 * to be signaled. (In PLC-S description and PLCS in SN3. in pcm_fsm()
795 * - The start command shall be issued AFTER setting the in pcm_fsm()
809 * workaround for PLC-S eng. sample errata in pcm_fsm()
830 plc->p_state = PS_BIT3 ; in pcm_fsm()
831 plc->p_bits = 3 ; in pcm_fsm()
832 plc->p_start = 0 ; in pcm_fsm()
854 switch (plc->p_state) { in pcm_fsm()
859 plc->p_state = PS_BIT4 ; in pcm_fsm()
860 plc->p_bits = 1 ; in pcm_fsm()
861 plc->p_start = 3 ; in pcm_fsm()
862 phy->bitn = 3 ; in pcm_fsm()
871 plc->p_state = PS_BIT7 ; in pcm_fsm()
872 plc->p_bits = 3 ; in pcm_fsm()
873 plc->p_start = 4 ; in pcm_fsm()
874 phy->bitn = 4 ; in pcm_fsm()
882 plc->p_state = PS_LCT ; in pcm_fsm()
883 plc->p_bits = 0 ; in pcm_fsm()
884 plc->p_start = 7 ; in pcm_fsm()
885 phy->bitn = 7 ; in pcm_fsm()
886 sm_ph_lem_start(smc,np,(int)smc->s.lct_short) ; /* enable LEM */ in pcm_fsm()
898 plc->p_state = PS_BIT8 ; in pcm_fsm()
899 plc->p_bits = 1 ; in pcm_fsm()
900 plc->p_start = 7 ; in pcm_fsm()
901 phy->bitn = 7 ; in pcm_fsm()
909 if (phy->t_val[7] || phy->r_val[7]) { in pcm_fsm()
916 plc->p_state = PS_JOIN ; in pcm_fsm()
917 plc->p_bits = 2 ; in pcm_fsm()
918 plc->p_start = 8 ; in pcm_fsm()
919 phy->bitn = 8 ; in pcm_fsm()
927 plc->p_state = PS_ACTIVE ; in pcm_fsm()
937 if (smc->s.sas == SMT_DAS && np == PB && in pcm_fsm()
938 (smc->y[PA].pc_mode == PM_TREE || in pcm_fsm()
939 smc->y[PB].pc_mode == PM_TREE)) { in pcm_fsm()
951 switch (plc->p_state) { in pcm_fsm()
954 if (!phy->cf_join) { in pcm_fsm()
955 phy->cf_join = TRUE ; in pcm_fsm()
976 sm_ph_lem_start(smc,(int)phy->np,LCT_LEM_MAX) ; in pcm_fsm()
978 phy->tr_flag = FALSE ; in pcm_fsm()
979 mib->fddiPORTConnectState = PCM_ACTIVE ; in pcm_fsm()
1002 phy->cf_loop = FALSE ; in pcm_fsm()
1003 phy->cf_join = FALSE ; in pcm_fsm()
1006 mib->fddiPORTConnectState = PCM_DISABLED ; in pcm_fsm()
1008 sm_ph_linestate(smc,np,(int) MIB2LS(mib->fddiPORTMaint_LS)) ; in pcm_fsm()
1013 DB_PCMN(1, "PCM %c : MAINT", phy->phy_name); in pcm_fsm()
1061 struct lem_counter *lem = &phy->lem ; in reset_lem_struct()
1063 phy->mib->fddiPORTLer_Estimate = 15 ; in reset_lem_struct()
1064 lem->lem_float_ber = 15 * 100 ; in reset_lem_struct()
1074 struct lem_counter *lem = &phy->lem ; in lem_evaluate()
1078 mib = phy->mib ; in lem_evaluate()
1080 if (!lem->lem_on) in lem_evaluate()
1083 errors = inpw(PLC(((int) phy->np),PL_LINK_ERR_CTR)) ; in lem_evaluate()
1084 lem->lem_errors += errors ; in lem_evaluate()
1085 mib->fddiPORTLem_Ct += errors ; in lem_evaluate()
1087 errors = lem->lem_errors ; in lem_evaluate()
1090 * -> this means, that one error in 8 sec. is one of 8*125*10E6 in lem_evaluate()
1091 * the same as BER = 10E-9 in lem_evaluate()
1093 * -> 9 errors in 8 seconds mean: in lem_evaluate()
1094 * BER = 9 * 10E-9 and this is in lem_evaluate()
1095 * < 10E-8, so the limit of 10E-8 is not reached! in lem_evaluate()
1114 lem->lem_float_ber = lem->lem_float_ber * 7 + ber * 3 ; in lem_evaluate()
1115 lem->lem_float_ber /= 10 ; in lem_evaluate()
1116 mib->fddiPORTLer_Estimate = lem->lem_float_ber / 100 ; in lem_evaluate()
1117 if (mib->fddiPORTLer_Estimate < 4) { in lem_evaluate()
1118 mib->fddiPORTLer_Estimate = 4 ; in lem_evaluate()
1121 if (lem->lem_errors) { in lem_evaluate()
1122 DB_PCMN(1, "LEM %c :", phy->np == PB ? 'B' : 'A'); in lem_evaluate()
1123 DB_PCMN(1, "errors : %ld", lem->lem_errors); in lem_evaluate()
1124 DB_PCMN(1, "sum_errors : %ld", mib->fddiPORTLem_Ct); in lem_evaluate()
1125 DB_PCMN(1, "current BER : 10E-%d", ber / 100); in lem_evaluate()
1126 DB_PCMN(1, "float BER : 10E-(%d/100)", lem->lem_float_ber); in lem_evaluate()
1127 DB_PCMN(1, "avg. BER : 10E-%d", mib->fddiPORTLer_Estimate); in lem_evaluate()
1130 lem->lem_errors = 0L ; in lem_evaluate()
1133 cond = (mib->fddiPORTLer_Estimate <= mib->fddiPORTLer_Alarm) ? in lem_evaluate()
1138 if (cond != mib->fddiPORTLerFlag) { in lem_evaluate()
1140 (int) (INDEX_PORT+ phy->np) ,cond) ; in lem_evaluate()
1144 if ( mib->fddiPORTLer_Estimate <= mib->fddiPORTLer_Cutoff) { in lem_evaluate()
1145 phy->pc_lem_fail = TRUE ; /* flag */ in lem_evaluate()
1146 mib->fddiPORTLem_Reject_Ct++ ; in lem_evaluate()
1148 * "forgive 10e-2" if we cutoff so we can come in lem_evaluate()
1151 lem->lem_float_ber += 2*100 ; in lem_evaluate()
1156 phy->np, mib->fddiPORTLer_Cutoff); in lem_evaluate()
1159 smt_port_off_event(smc,phy->np); in lem_evaluate()
1161 queue_event(smc,(int)(EVENT_PCM+phy->np),PC_START) ; in lem_evaluate()
1174 lem_evaluate(smc,&smc->y[np]) ; in sm_lem_evaluate()
1179 struct lem_counter *lem = &phy->lem ; in lem_check_lct()
1183 mib = phy->mib ; in lem_check_lct()
1185 phy->pc_lem_fail = FALSE ; /* flag */ in lem_check_lct()
1186 errors = inpw(PLC(((int)phy->np),PL_LINK_ERR_CTR)) ; in lem_check_lct()
1187 lem->lem_errors += errors ; in lem_check_lct()
1188 mib->fddiPORTLem_Ct += errors ; in lem_check_lct()
1189 if (lem->lem_errors) { in lem_check_lct()
1190 switch(phy->lc_test) { in lem_check_lct()
1192 if (lem->lem_errors >= smc->s.lct_short) in lem_check_lct()
1193 phy->pc_lem_fail = TRUE ; in lem_check_lct()
1196 if (lem->lem_errors >= smc->s.lct_medium) in lem_check_lct()
1197 phy->pc_lem_fail = TRUE ; in lem_check_lct()
1200 if (lem->lem_errors >= smc->s.lct_long) in lem_check_lct()
1201 phy->pc_lem_fail = TRUE ; in lem_check_lct()
1204 if (lem->lem_errors >= smc->s.lct_extended) in lem_check_lct()
1205 phy->pc_lem_fail = TRUE ; in lem_check_lct()
1208 DB_PCMN(1, " >>errors : %lu", lem->lem_errors); in lem_check_lct()
1210 if (phy->pc_lem_fail) { in lem_check_lct()
1211 mib->fddiPORTLCTFail_Ct++ ; in lem_check_lct()
1212 mib->fddiPORTLem_Reject_Ct++ ; in lem_check_lct()
1215 mib->fddiPORTLCTFail_Ct = 0 ; in lem_check_lct()
1223 struct lem_counter *lem = &smc->y[np].lem ; in sm_ph_lem_start()
1225 lem->lem_on = 1 ; in sm_ph_lem_start()
1226 lem->lem_errors = 0L ; in sm_ph_lem_start()
1228 /* Do NOT reset mib->fddiPORTLer_Estimate here. It is called too in sm_ph_lem_start()
1241 struct lem_counter *lem = &smc->y[np].lem ; in sm_ph_lem_stop()
1243 lem->lem_on = 0 ; in sm_ph_lem_stop()
1260 mib = phy->mib ; in pc_rcode_actions()
1262 DB_PCMN(1, "SIG rec %x %x:", bit, phy->r_val[bit]); in pc_rcode_actions()
1271 if (phy->r_val[1] == 0 && phy->r_val[2] == 0) in pc_rcode_actions()
1272 mib->fddiPORTNeighborType = TA ; in pc_rcode_actions()
1273 else if (phy->r_val[1] == 0 && phy->r_val[2] == 1) in pc_rcode_actions()
1274 mib->fddiPORTNeighborType = TB ; in pc_rcode_actions()
1275 else if (phy->r_val[1] == 1 && phy->r_val[2] == 0) in pc_rcode_actions()
1276 mib->fddiPORTNeighborType = TS ; in pc_rcode_actions()
1277 else if (phy->r_val[1] == 1 && phy->r_val[2] == 1) in pc_rcode_actions()
1278 mib->fddiPORTNeighborType = TM ; in pc_rcode_actions()
1281 if (mib->fddiPORTMy_Type == TM && in pc_rcode_actions()
1282 mib->fddiPORTNeighborType == TM) { in pc_rcode_actions()
1283 DB_PCMN(1, "PCM %c : E100 withhold M-M", in pc_rcode_actions()
1284 phy->phy_name); in pc_rcode_actions()
1285 mib->fddiPORTPC_Withhold = PC_WH_M_M ; in pc_rcode_actions()
1288 else if (phy->t_val[3] || phy->r_val[3]) { in pc_rcode_actions()
1289 mib->fddiPORTPC_Withhold = PC_WH_NONE ; in pc_rcode_actions()
1290 if (mib->fddiPORTMy_Type == TM || in pc_rcode_actions()
1291 mib->fddiPORTNeighborType == TM) in pc_rcode_actions()
1292 phy->pc_mode = PM_TREE ; in pc_rcode_actions()
1294 phy->pc_mode = PM_PEER ; in pc_rcode_actions()
1299 if (phy->wc_flag) { in pc_rcode_actions()
1300 mib->fddiPORTPC_Withhold = PC_WH_PATH ; in pc_rcode_actions()
1304 mib->fddiPORTPC_Withhold = PC_WH_OTHER ; in pc_rcode_actions()
1307 phy->phy_name); in pc_rcode_actions()
1309 phy->twisted = ((mib->fddiPORTMy_Type != TS) && in pc_rcode_actions()
1310 (mib->fddiPORTMy_Type != TM) && in pc_rcode_actions()
1311 (mib->fddiPORTNeighborType == in pc_rcode_actions()
1312 mib->fddiPORTMy_Type)) ; in pc_rcode_actions()
1313 if (phy->twisted) { in pc_rcode_actions()
1315 phy->phy_name); in pc_rcode_actions()
1321 if (phy->t_val[4] || phy->r_val[4]) { in pc_rcode_actions()
1322 if ((phy->t_val[4] && phy->t_val[5]) || in pc_rcode_actions()
1323 (phy->r_val[4] && phy->r_val[5]) ) in pc_rcode_actions()
1324 phy->lc_test = LC_EXTENDED ; in pc_rcode_actions()
1326 phy->lc_test = LC_LONG ; in pc_rcode_actions()
1328 else if (phy->t_val[5] || phy->r_val[5]) in pc_rcode_actions()
1329 phy->lc_test = LC_MEDIUM ; in pc_rcode_actions()
1331 phy->lc_test = LC_SHORT ; in pc_rcode_actions()
1332 switch (phy->lc_test) { in pc_rcode_actions()
1334 outpw(PLC((int)phy->np,PL_LC_LENGTH), TP_LC_LENGTH ) ; in pc_rcode_actions()
1335 phy->t_next[7] = smc->s.pcm_lc_short ; in pc_rcode_actions()
1338 outpw(PLC((int)phy->np,PL_LC_LENGTH), TP_LC_LONGLN ) ; in pc_rcode_actions()
1339 phy->t_next[7] = smc->s.pcm_lc_medium ; in pc_rcode_actions()
1342 SETMASK(PLC((int)phy->np,PL_CNTRL_B),PL_LONG,PL_LONG) ; in pc_rcode_actions()
1343 phy->t_next[7] = smc->s.pcm_lc_long ; in pc_rcode_actions()
1346 SETMASK(PLC((int)phy->np,PL_CNTRL_B),PL_LONG,PL_LONG) ; in pc_rcode_actions()
1347 phy->t_next[7] = smc->s.pcm_lc_extended ; in pc_rcode_actions()
1350 if (phy->t_next[7] > smc->s.pcm_lc_medium) { in pc_rcode_actions()
1351 start_pcm_timer0(smc,phy->t_next[7],PC_TIMEOUT_LCT,phy); in pc_rcode_actions()
1353 DB_PCMN(1, "LCT timer = %ld us", phy->t_next[7]); in pc_rcode_actions()
1354 phy->t_next[9] = smc->s.pcm_t_next_9 ; in pc_rcode_actions()
1357 if (phy->t_val[6]) { in pc_rcode_actions()
1358 phy->cf_loop = TRUE ; in pc_rcode_actions()
1360 phy->td_flag = TRUE ; in pc_rcode_actions()
1363 if (phy->t_val[7] || phy->r_val[7]) { in pc_rcode_actions()
1365 phy->phy_name, in pc_rcode_actions()
1366 phy->t_val[7] ? "local" : "remote"); in pc_rcode_actions()
1367 queue_event(smc,(int)(EVENT_PCM+phy->np),PC_START) ; in pc_rcode_actions()
1371 if (phy->t_val[8] || phy->r_val[8]) { in pc_rcode_actions()
1372 if (phy->t_val[8]) in pc_rcode_actions()
1373 phy->cf_loop = TRUE ; in pc_rcode_actions()
1374 phy->td_flag = TRUE ; in pc_rcode_actions()
1378 if (phy->r_val[9]) { in pc_rcode_actions()
1380 mib->fddiPORTMacIndicated.R_val = TRUE ; in pc_rcode_actions()
1384 mib->fddiPORTMacIndicated.R_val = FALSE ; in pc_rcode_actions()
1395 int np = phy->np ; in pc_tcode_actions()
1398 mib = phy->mib ; in pc_tcode_actions()
1402 phy->t_val[0] = 0 ; /* no escape used */ in pc_tcode_actions()
1405 if (mib->fddiPORTMy_Type == TS || mib->fddiPORTMy_Type == TM) in pc_tcode_actions()
1406 phy->t_val[1] = 1 ; in pc_tcode_actions()
1408 phy->t_val[1] = 0 ; in pc_tcode_actions()
1411 if (mib->fddiPORTMy_Type == TB || mib->fddiPORTMy_Type == TM) in pc_tcode_actions()
1412 phy->t_val[2] = 1 ; in pc_tcode_actions()
1414 phy->t_val[2] = 0 ; in pc_tcode_actions()
1421 type = mib->fddiPORTMy_Type ; in pc_tcode_actions()
1422 ne = mib->fddiPORTNeighborType ; in pc_tcode_actions()
1423 policy = smc->mib.fddiSMTConnectionPolicy ; in pc_tcode_actions()
1425 phy->t_val[3] = 1 ; /* Accept connection */ in pc_tcode_actions()
1433 phy->t_val[3] = 0 ; /* Reject */ in pc_tcode_actions()
1441 phy->t_val[3] = 0 ; /* Reject */ in pc_tcode_actions()
1449 phy->t_val[3] = 0 ; /* Reject */ in pc_tcode_actions()
1457 phy->t_val[3] = 0 ; /* Reject */ in pc_tcode_actions()
1471 (int) (INDEX_PORT+ phy->np) ,0) ; in pc_tcode_actions()
1477 if (mib->fddiPORTPC_Withhold == PC_WH_NONE) { in pc_tcode_actions()
1478 if (phy->pc_lem_fail) { in pc_tcode_actions()
1479 phy->t_val[4] = 1 ; /* long */ in pc_tcode_actions()
1480 phy->t_val[5] = 0 ; in pc_tcode_actions()
1483 phy->t_val[4] = 0 ; in pc_tcode_actions()
1484 if (mib->fddiPORTLCTFail_Ct > 0) in pc_tcode_actions()
1485 phy->t_val[5] = 1 ; /* medium */ in pc_tcode_actions()
1487 phy->t_val[5] = 0 ; /* short */ in pc_tcode_actions()
1494 if (phy->wc_flag) in pc_tcode_actions()
1495 phy->t_val[5] = 1 ; /* medium */ in pc_tcode_actions()
1497 mib->fddiPORTConnectState = PCM_CONNECTING ; in pc_tcode_actions()
1500 mib->fddiPORTConnectState = PCM_STANDBY ; in pc_tcode_actions()
1501 phy->t_val[4] = 1 ; /* extended */ in pc_tcode_actions()
1502 phy->t_val[5] = 1 ; in pc_tcode_actions()
1509 phy->t_val[6] = 0 ; in pc_tcode_actions()
1512 phy->cf_loop = FALSE ; in pc_tcode_actions()
1514 if (phy->pc_lem_fail) { in pc_tcode_actions()
1515 DB_PCMN(1, "PCM %c : E104 LCT failed", phy->phy_name); in pc_tcode_actions()
1516 phy->t_val[7] = 1 ; in pc_tcode_actions()
1519 phy->t_val[7] = 0 ; in pc_tcode_actions()
1522 phy->t_val[8] = 0 ; /* Don't request MAC loopback */ in pc_tcode_actions()
1525 phy->cf_loop = 0 ; in pc_tcode_actions()
1526 if ((mib->fddiPORTPC_Withhold != PC_WH_NONE) || in pc_tcode_actions()
1527 ((smc->s.sas == SMT_DAS) && (phy->wc_flag))) { in pc_tcode_actions()
1531 phy->t_val[9] = FALSE ; in pc_tcode_actions()
1532 switch (smc->s.sas) { in pc_tcode_actions()
1537 if (phy->pc_mode == PM_TREE) { in pc_tcode_actions()
1539 (smc->y[PB].mib->fddiPORTConnectState != in pc_tcode_actions()
1541 phy->t_val[9] = TRUE ; in pc_tcode_actions()
1545 phy->t_val[9] = TRUE ; in pc_tcode_actions()
1550 phy->t_val[9] = TRUE ; in pc_tcode_actions()
1558 phy->t_val[9] = TRUE ; in pc_tcode_actions()
1562 mib->fddiPORTMacIndicated.T_val = phy->t_val[9] ; in pc_tcode_actions()
1565 DB_PCMN(1, "SIG snd %x %x:", bit, phy->t_val[bit]); in pc_tcode_actions()
1574 if (smc->s.sas != SMT_DAS) in pcm_status_twisted()
1576 if (smc->y[PA].twisted && (smc->y[PA].mib->fddiPORTPCMState == PC8_ACTIVE)) in pcm_status_twisted()
1578 if (smc->y[PB].twisted && (smc->y[PB].mib->fddiPORTPCMState == PC8_ACTIVE)) in pcm_status_twisted()
1593 struct s_phy *phy = &smc->y[np] ; in pcm_status_state()
1596 mib = phy->mib ; in pcm_status_state()
1598 /* remote PHY type and MAC - set only if active */ in pcm_status_state()
1600 *type = mib->fddiPORTMy_Type ; /* our PHY type */ in pcm_status_state()
1601 *state = mib->fddiPORTConnectState ; in pcm_status_state()
1602 *remote = mib->fddiPORTNeighborType ; in pcm_status_state()
1604 switch(mib->fddiPORTPCMState) { in pcm_status_state()
1606 *mac = mib->fddiPORTMacIndicated.R_val ; in pcm_status_state()
1619 if (smc->y[n].mib->fddiPORTPCMState == PC8_ACTIVE && in pcm_rooted_station()
1620 smc->y[n].mib->fddiPORTNeighborType == TM) in pcm_rooted_station()
1632 struct s_phy *phy = &smc->y[np] ; in plc_irq()
1633 struct s_plc *plc = &phy->plc ; in plc_irq()
1640 if (np >= smc->s.numphys) { in plc_irq()
1641 plc->soft_err++ ; in plc_irq()
1644 if (cmd & PL_EBUF_ERR) { /* elastic buff. det. over-|underflow*/ in plc_irq()
1648 if (!plc->ebuf_cont && phy->mib->fddiPORTPCMState == PC8_ACTIVE){ in plc_irq()
1655 phy->mib->fddiPORTEBError_Ct ++ ; in plc_irq()
1659 plc->ebuf_err++ ; in plc_irq()
1660 if (plc->ebuf_cont <= 1000) { in plc_irq()
1665 plc->ebuf_cont++ ; /* Ebuf continuous error */ in plc_irq()
1669 if (plc->ebuf_cont == 1000 && in plc_irq()
1703 plc->ebuf_cont = 0 ; /* reset Ebuf continuous error */ in plc_irq()
1706 plc->phyinv++ ; in plc_irq()
1709 plc->vsym_ctr++ ; in plc_irq()
1712 plc->mini_ctr++ ; in plc_irq()
1728 if (phy->lem.lem_on) { in plc_irq()
1732 phy->lem.lem_errors += i ; in plc_irq()
1733 phy->mib->fddiPORTLem_Ct += i ; in plc_irq()
1737 if (plc->p_state == PS_LCT) { in plc_irq()
1743 plc->tpc_exp++ ; in plc_irq()
1747 case PL_I_IDLE : phy->curr_ls = PC_ILS ; break ; in plc_irq()
1748 case PL_I_HALT : phy->curr_ls = PC_HLS ; break ; in plc_irq()
1749 case PL_I_MASTR : phy->curr_ls = PC_MLS ; break ; in plc_irq()
1750 case PL_I_QUIET : phy->curr_ls = PC_QLS ; break ; in plc_irq()
1759 case PL_B_PCS : plc->b_pcs++ ; break ; in plc_irq()
1760 case PL_B_TPC : plc->b_tpc++ ; break ; in plc_irq()
1761 case PL_B_TNE : plc->b_tne++ ; break ; in plc_irq()
1762 case PL_B_QLS : plc->b_qls++ ; break ; in plc_irq()
1763 case PL_B_ILS : plc->b_ils++ ; break ; in plc_irq()
1764 case PL_B_HLS : plc->b_hls++ ; break ; in plc_irq()
1767 /*jd 05-Aug-1999 changed: Bug #10419 */ in plc_irq()
1768 DB_PCMN(1, "PLC %d: MDcF = %x", np, smc->e.DisconnectFlag); in plc_irq()
1769 if (smc->e.DisconnectFlag == FALSE) { in plc_irq()
1782 if (cmd & PL_PCM_CODE) { /* receive last sign.-bit | LCT complete */ in plc_irq()
1785 for (i = 0 ; i < plc->p_bits ; i++) { in plc_irq()
1786 phy->r_val[plc->p_start+i] = n & 1 ; in plc_irq()
1795 if (!phy->tr_flag) { in plc_irq()
1797 np, smc->mib.fddiSMTECMState); in plc_irq()
1798 phy->tr_flag = TRUE ; in plc_irq()
1799 smc->e.trace_prop |= ENTITY_BIT(ENTITY_PHY(np)) ; in plc_irq()
1807 if ((cmd & PL_SELF_TEST) && (phy->mib->fddiPORTPCMState == PC2_TRACE)) { in plc_irq()
1809 if (smc->e.path_test == PT_PASSED) { in plc_irq()
1812 phy->mib->fddiPORTPCMState); in plc_irq()
1814 smc->e.path_test = PT_PENDING ; in plc_irq()
1820 if (phy->mib->fddiPORTPCMState == PC8_ACTIVE) { in plc_irq()
1821 if (!phy->tr_flag) { in plc_irq()
1823 phy->phy_name, "NSE"); in plc_irq()
1830 if (cmd & PL_NP_ERR) { /* NP has requested to r/w an inv reg*/ in plc_irq()
1834 plc->np_err++ ; in plc_irq()
1837 if (cmd & PL_PARITY_ERR) { /* p. error dedected on TX9-0 inp */ in plc_irq()
1838 plc->parity_err++ ; in plc_irq()
1860 for (i = 0, phy = smc->y, pcs = state->pcm_state ; i < NUMPHYS ; in pcm_get_state()
1862 mib = phy->mib ; in pcm_get_state()
1863 pcs->pcm_type = (u_char) mib->fddiPORTMy_Type ; in pcm_get_state()
1864 pcs->pcm_state = (u_char) mib->fddiPORTPCMState ; in pcm_get_state()
1865 pcs->pcm_mode = phy->pc_mode ; in pcm_get_state()
1866 pcs->pcm_neighbor = (u_char) mib->fddiPORTNeighborType ; in pcm_get_state()
1867 pcs->pcm_bsf = mib->fddiPORTBS_Flag ; in pcm_get_state()
1868 pcs->pcm_lsf = phy->ls_flag ; in pcm_get_state()
1869 pcs->pcm_lct_fail = (u_char) mib->fddiPORTLCTFail_Ct ; in pcm_get_state()
1870 pcs->pcm_ls_rx = LS2MIB(sm_pm_get_ls(smc,i)) ; in pcm_get_state()
1874 if (phy->r_val[NUMBITS-1-ii]) in pcm_get_state()
1876 if (phy->t_val[NUMBITS-1-ii]) in pcm_get_state()
1879 pcs->pcm_r_val = rbits ; in pcm_get_state()
1880 pcs->pcm_t_val = tbits ; in pcm_get_state()
1956 plc = &smc->y[np].plc ; in list_phy()
1959 plc->soft_err,plc->b_pcs); in list_phy()
1961 plc->parity_err,plc->b_tpc,get_linestate(smc,np)) ; in list_phy()
1963 plc->ebuf_err,plc->b_tne) ; in list_phy()
1965 plc->phyinv,plc->b_qls,get_pcmstate(smc,np)) ; in list_phy()
1967 plc->vsym_ctr,plc->b_ils) ; in list_phy()
1969 plc->mini_ctr,plc->b_hls) ; in list_phy()
1970 printf("\tnodepr_err: %ld\n",plc->np_err) ; in list_phy()
1971 printf("\tTPC_exp : %ld\n",plc->tpc_exp) ; in list_phy()
1972 printf("\tLEM_err : %ld\n",smc->y[np].lem.lem_errors) ; in list_phy()
1987 printf("----------------------\n") ; in pcm_lem_dump()
1988 for (i = 0,phy = smc->y ; i < NUMPHYS ; i++,phy++) { in pcm_lem_dump()
1991 mib = phy->mib ; in pcm_lem_dump()
1992 printf("%s\t%ld\t10E-%d\n", in pcm_lem_dump()
1994 mib->fddiPORTLem_Ct, in pcm_lem_dump()
1995 mib->fddiPORTLer_Estimate) ; in pcm_lem_dump()