Lines Matching defs:smc
20 #include "h/smc.h"
37 static void clear_all_rep(struct s_smc *smc);
38 static void clear_reported(struct s_smc *smc);
39 static void smt_send_srf(struct s_smc *smc);
40 static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index);
42 #define MAX_EVCS ARRAY_SIZE(smc->evcs)
68 void smt_init_evc(struct s_smc *smc)
78 memset((char *)smc->evcs,0,sizeof(smc->evcs)) ;
80 evc = smc->evcs ;
97 if ((unsigned int) (evc - smc->evcs) > MAX_EVCS) {
98 SMT_PANIC(smc,SMT_E0127, SMT_E0127_MSG) ;
104 smc->evcs[0].evc_cond_state = &smc->mib.fddiSMTPeerWrapFlag ;
105 smc->evcs[1].evc_cond_state =
106 &smc->mib.m[MAC0].fddiMACDuplicateAddressCond ;
107 smc->evcs[2].evc_cond_state =
108 &smc->mib.m[MAC0].fddiMACFrameErrorFlag ;
109 smc->evcs[3].evc_cond_state =
110 &smc->mib.m[MAC0].fddiMACNotCopiedFlag ;
115 smc->evcs[4].evc_multiple = &smc->mib.m[MAC0].fddiMACMultiple_N ;
116 smc->evcs[5].evc_multiple = &smc->mib.m[MAC0].fddiMACMultiple_P ;
123 smc->evcs[offset + 0*NUMPHYS].evc_cond_state =
124 &smc->mib.p[i].fddiPORTLerFlag ;
125 smc->evcs[offset + 1*NUMPHYS].evc_cond_state =
126 &smc->mib.p[i].fddiPORTEB_Condition ;
131 smc->evcs[offset + 2*NUMPHYS].evc_multiple =
132 &smc->mib.p[i].fddiPORTMultiple_U ;
133 smc->evcs[offset + 3*NUMPHYS].evc_multiple =
134 &smc->mib.p[i].fddiPORTMultiple_P ;
138 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
141 SMT_PANIC(smc,SMT_E0128, SMT_E0128_MSG) ;
147 SMT_PANIC(smc,SMT_E0129, SMT_E0129_MSG) ;
153 smc->srf.TSR = smt_get_time() ;
154 smc->srf.sr_state = SR0_WAIT ;
157 static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index)
162 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
181 void smt_srf_event(struct s_smc *smc, int code, int index, int cond)
191 RS_SET(smc,RS_DUPADDR) ;
197 if (!(evc = smt_get_evc(smc,code,index))) {
212 smt_set_timestamp(smc,smc->mib.fddiSMTTransitionTimeStamp) ;
218 smc->srf.any_report = TRUE ;
234 smc->srf.any_report = TRUE ;
238 snmp_srf_event(smc,evc) ;
241 tsr = smt_get_time() - smc->srf.TSR ;
243 switch (smc->srf.sr_state) {
247 smc->srf.SRThreshold = THRESHOLD_2 ;
248 smc->srf.sr_state = SR1_HOLDOFF ;
253 smc->srf.sr_state = SR1_HOLDOFF ;
258 smc->srf.sr_state = SR1_HOLDOFF ;
263 smc->srf.SRThreshold = THRESHOLD_2 ;
264 smc->srf.TSR = smt_get_time() ;
265 smt_send_srf(smc) ;
270 smc->srf.TSR = smt_get_time() ;
271 smt_send_srf(smc) ;
276 smc->srf.TSR = smt_get_time() ;
277 smt_send_srf(smc) ;
281 if (smc->srf.any_report && (u_long) tsr >=
282 smc->srf.SRThreshold) {
283 smc->srf.SRThreshold *= 2 ;
284 if (smc->srf.SRThreshold > THRESHOLD_32)
285 smc->srf.SRThreshold = THRESHOLD_32 ;
286 smc->srf.TSR = smt_get_time() ;
287 smt_send_srf(smc) ;
291 if (!smc->mib.fddiSMTStatRptPolicy) {
292 smc->srf.sr_state = SR2_DISABLED ;
299 smc->srf.sr_state = SR0_WAIT ;
300 smc->srf.TSR = smt_get_time() ;
301 smt_send_srf(smc) ;
306 smc->srf.SRThreshold = THRESHOLD_2 ;
312 if (!smc->mib.fddiSMTStatRptPolicy) {
313 smc->srf.sr_state = SR2_DISABLED ;
318 if (smc->mib.fddiSMTStatRptPolicy) {
319 smc->srf.sr_state = SR0_WAIT ;
320 smc->srf.TSR = smt_get_time() ;
321 smc->srf.SRThreshold = THRESHOLD_2 ;
322 clear_all_rep(smc) ;
329 static void clear_all_rep(struct s_smc *smc)
334 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
339 smc->srf.any_report = FALSE ;
342 static void clear_reported(struct s_smc *smc)
347 smc->srf.any_report = FALSE ;
348 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
353 smc->srf.any_report = TRUE ;
365 static void smt_send_srf(struct s_smc *smc)
381 if (!smc->r.sm_ma_avail)
383 if (!(mb = smt_build_frame(smc,SMT_SRF,SMT_ANNOUNCE,0)))
386 RS_SET(smc,RS_SOFTERROR) ;
399 smt_add_para(smc,&pcon,(u_short) SMT_P1033,0,0) ;
400 smt_add_para(smc,&pcon,(u_short) SMT_P1034,0,0) ;
402 for (i = 0, evc = smc->evcs ; i < MAX_EVCS ; i++, evc++) {
404 smt_add_para(smc,&pcon,evc->evc_para,
413 smc->srf.sr_state, smc->srf.SRThreshold / TICKS_PER_SECOND);
415 dump_smt(smc,smt,"SRF Send") ;
417 smt_send_frame(smc,mb,FC_SMT_INFO,0) ;
418 clear_reported(smc) ;