Lines Matching full:smc
34 #include "h/smc.h"
79 static void ess_send_response(struct s_smc *smc, struct smt_header *sm,
81 static void ess_config_fifo(struct s_smc *smc);
82 static void ess_send_alc_req(struct s_smc *smc);
83 static void ess_send_frame(struct s_smc *smc, SMbuf *mb);
97 void ess_timer_poll(struct s_smc *smc);
98 void ess_para_change(struct s_smc *smc);
99 int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm,
101 static int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead);
113 int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm, in ess_raf_received_pack() argument
132 if (!(p = (void *) sm_to_para(smc,sm,SMT_P0015))) { in ess_raf_received_pack()
141 if (!(cmd = (struct smt_p_0016 *) sm_to_para(smc,sm,SMT_P0016))) { in ess_raf_received_pack()
173 if (!local || smc->mib.fddiESSPayload) in ess_raf_received_pack()
176 p = (void *) sm_to_para(smc,sm,SMT_P0019) ; in ess_raf_received_pack()
187 smc->ess.alloc_trans_id = sm->smt_tid ; in ess_raf_received_pack()
189 p = (void *) sm_to_para(smc,sm,SMT_P320F) ; in ess_raf_received_pack()
191 smc->mib.a[PATH0].fddiPATHSbaPayload ; in ess_raf_received_pack()
192 p = (void *) sm_to_para(smc,sm,SMT_P3210) ; in ess_raf_received_pack()
194 smc->mib.a[PATH0].fddiPATHSbaOverhead ; in ess_raf_received_pack()
197 if (smc->ess.local_sba_active) in ess_raf_received_pack()
200 if (!(db = smt_get_mbuf(smc))) in ess_raf_received_pack()
207 dump_smt(smc, in ess_raf_received_pack()
210 smt_send_frame(smc,db,FC_SMT_INFO,0) ; in ess_raf_received_pack()
218 if (smt_check_para(smc,sm,plist_raf_alc_res)) { in ess_raf_received_pack()
233 if ((((struct smt_p_320b *)sm_to_para(smc,sm,SMT_P320B))->path_index in ess_raf_received_pack()
236 (((struct smt_p_reason *)sm_to_para(smc,sm,SMT_P0012))->rdf_reason in ess_raf_received_pack()
238 (sm->smt_tid != smc->ess.alloc_trans_id)) { in ess_raf_received_pack()
247 p = (void *) sm_to_para(smc,sm,SMT_P320F) ; in ess_raf_received_pack()
253 p = (void *) sm_to_para(smc,sm,SMT_P3210) ; in ess_raf_received_pack()
266 (void)process_bw_alloc(smc,(long)payload,(long)overhead) ; in ess_raf_received_pack()
286 if (smt_check_para(smc,sm,plist_raf_chg_req)) { in ess_raf_received_pack()
297 if ((((struct smt_p_320b *)sm_to_para(smc,sm,SMT_P320B))->path_index in ess_raf_received_pack()
306 p = (void *) sm_to_para(smc,sm,SMT_P320F) ; in ess_raf_received_pack()
308 p = (void *) sm_to_para(smc,sm,SMT_P3210) ; in ess_raf_received_pack()
319 if(!process_bw_alloc(smc,(long)payload,(long)overhead)) in ess_raf_received_pack()
325 ess_send_response(smc,sm,CHANGE_ALLOCATION) ; in ess_raf_received_pack()
356 ess_send_response(smc,sm,REPORT_ALLOCATION) ; in ess_raf_received_pack()
376 static int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead) in process_bw_alloc() argument
417 /* if (smt_set_obj(smc,SMT_P320F,payload,S_SET)) { in process_bw_alloc()
421 if (smt_set_obj(smc,SMT_P3210,overhead,S_SET)) { in process_bw_alloc()
436 if (smc->mib.fddiESSPayload && in process_bw_alloc()
437 ((u_long)payload != smc->mib.fddiESSPayload || in process_bw_alloc()
438 (u_long)overhead != smc->mib.fddiESSOverhead)) { in process_bw_alloc()
439 smc->ess.raf_act_timer_poll = TRUE ; in process_bw_alloc()
440 smc->ess.timer_count = 0 ; in process_bw_alloc()
448 smc->ess.sync_bw_available = TRUE ; in process_bw_alloc()
450 smc->ess.sync_bw = overhead - in process_bw_alloc()
451 (long)smc->mib.m[MAC0].fddiMACT_Neg * in process_bw_alloc()
456 smc->ess.sync_bw_available = FALSE ; in process_bw_alloc()
457 smc->ess.sync_bw = 0 ; in process_bw_alloc()
461 smc->mib.a[PATH0].fddiPATHSbaPayload = payload ; in process_bw_alloc()
462 smc->mib.a[PATH0].fddiPATHSbaOverhead = overhead ; in process_bw_alloc()
465 DB_ESSN(2, "tsync = %lx", smc->ess.sync_bw); in process_bw_alloc()
467 ess_config_fifo(smc) ; in process_bw_alloc()
468 set_formac_tsync(smc,smc->ess.sync_bw) ; in process_bw_alloc()
472 static void ess_send_response(struct s_smc *smc, struct smt_header *sm, in ess_send_response() argument
483 if (!(mb=smt_build_frame(smc,SMT_RAF,SMT_REPLY, in ess_send_response()
488 if (!(mb=smt_build_frame(smc,SMT_RAF,SMT_REPLY, in ess_send_response()
518 chg->payload.mib_payload = smc->mib.a[PATH0].fddiPATHSbaPayload ; in ess_send_response()
524 chg->overhead.mib_overhead = smc->mib.a[PATH0].fddiPATHSbaOverhead ; in ess_send_response()
530 p = (void *) sm_to_para(smc,sm,SMT_P001A) ; in ess_send_response()
533 dump_smt(smc,(struct smt_header *)chg,"RAF") ; in ess_send_response()
534 ess_send_frame(smc,mb) ; in ess_send_response()
537 void ess_timer_poll(struct s_smc *smc) in ess_timer_poll() argument
539 if (!smc->ess.raf_act_timer_poll) in ess_timer_poll()
544 smc->ess.timer_count++ ; in ess_timer_poll()
545 if (smc->ess.timer_count == 10) { in ess_timer_poll()
546 smc->ess.timer_count = 0 ; in ess_timer_poll()
547 ess_send_alc_req(smc) ; in ess_timer_poll()
551 static void ess_send_alc_req(struct s_smc *smc) in ess_send_alc_req() argument
561 if (!smc->mib.fddiESSPayload) { in ess_send_alc_req()
562 smc->mib.fddiESSOverhead = 0 ; in ess_send_alc_req()
565 if (!smc->mib.fddiESSOverhead) in ess_send_alc_req()
566 smc->mib.fddiESSOverhead = DEFAULT_OV ; in ess_send_alc_req()
569 if (smc->mib.fddiESSOverhead == in ess_send_alc_req()
570 smc->mib.a[PATH0].fddiPATHSbaOverhead && in ess_send_alc_req()
571 smc->mib.fddiESSPayload == in ess_send_alc_req()
572 smc->mib.a[PATH0].fddiPATHSbaPayload){ in ess_send_alc_req()
573 smc->ess.raf_act_timer_poll = FALSE ; in ess_send_alc_req()
574 smc->ess.timer_count = 7 ; /* next RAF alc req after 3 s */ in ess_send_alc_req()
581 if (!(mb=smt_build_frame(smc,SMT_RAF,SMT_REQUEST, in ess_send_alc_req()
585 req->smt.smt_tid = smc->ess.alloc_trans_id = smt_get_tid(smc) ; in ess_send_alc_req()
613 req->pl_req.sba_pl_req = smc->mib.fddiESSPayload - in ess_send_alc_req()
614 smc->mib.a[PATH0].fddiPATHSbaPayload ; in ess_send_alc_req()
619 req->ov_req.sba_ov_req = smc->mib.fddiESSOverhead - in ess_send_alc_req()
620 smc->mib.a[PATH0].fddiPATHSbaOverhead ; in ess_send_alc_req()
626 req->payload.mib_payload = smc->mib.a[PATH0].fddiPATHSbaPayload ; in ess_send_alc_req()
632 req->overhead.mib_overhead = smc->mib.a[PATH0].fddiPATHSbaOverhead ; in ess_send_alc_req()
643 req->cat.category = smc->mib.fddiESSCategory ; in ess_send_alc_req()
648 req->tneg.max_t_neg = smc->mib.fddiESSMaxTNeg ; in ess_send_alc_req()
653 req->segm.min_seg_siz = smc->mib.fddiESSMinSegmentSize ; in ess_send_alc_req()
655 dump_smt(smc,(struct smt_header *)req,"RAF") ; in ess_send_alc_req()
656 ess_send_frame(smc,mb) ; in ess_send_alc_req()
659 static void ess_send_frame(struct s_smc *smc, SMbuf *mb) in ess_send_frame() argument
664 if (smc->ess.local_sba_active) { in ess_send_frame()
669 if (!smc->ess.sba_reply_pend) in ess_send_frame()
670 smc->ess.sba_reply_pend = mb ; in ess_send_frame()
673 smt_free_mbuf(smc,mb) ; in ess_send_frame()
681 smt_send_frame(smc,mb,FC_SMT_INFO,0) ; in ess_send_frame()
685 void ess_para_change(struct s_smc *smc) in ess_para_change() argument
687 (void)process_bw_alloc(smc,(long)smc->mib.a[PATH0].fddiPATHSbaPayload, in ess_para_change()
688 (long)smc->mib.a[PATH0].fddiPATHSbaOverhead) ; in ess_para_change()
691 static void ess_config_fifo(struct s_smc *smc) in ess_config_fifo() argument
696 if (smc->mib.a[PATH0].fddiPATHSbaPayload) { in ess_config_fifo()
697 if (smc->hw.fp.fifo.fifo_config_mode & SYNC_TRAFFIC_ON && in ess_config_fifo()
698 (smc->hw.fp.fifo.fifo_config_mode&SEND_ASYNC_AS_SYNC) == in ess_config_fifo()
699 smc->mib.fddiESSSynchTxMode) { in ess_config_fifo()
704 if (!(smc->hw.fp.fifo.fifo_config_mode & SYNC_TRAFFIC_ON)) { in ess_config_fifo()
712 formac_reinit_tx(smc) ; in ess_config_fifo()