static int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead) { if (payload > MAX_PAYLOAD || overhead > 5000) { DB_ESS("ESS: payload / overhead not accepted\n",0,0) ; return(FALSE) ; } if (smc->mib.fddiESSPayload && ((u_long)payload != smc->mib.fddiESSPayload || (u_long)overhead != smc->mib.fddiESSOverhead)) { smc->ess.raf_act_timer_poll = TRUE ; smc->ess.timer_count = 0 ; } if (payload) { DB_ESSN(2,"ESS: turn SMT_ST_SYNC_SERVICE bit on\n",0,0) ; smc->ess.sync_bw_available = TRUE ; smc->ess.sync_bw = overhead - (long)smc->mib.m[MAC0].fddiMACT_Neg * payload / 1562 ; } else { DB_ESSN(2,"ESS: turn SMT_ST_SYNC_SERVICE bit off\n",0,0) ; smc->ess.sync_bw_available = FALSE ; smc->ess.sync_bw = 0 ; overhead = 0 ; } smc->mib.a[PATH0].fddiPATHSbaPayload = payload ; smc->mib.a[PATH0].fddiPATHSbaOverhead = overhead ; DB_ESSN(2,"tsync = %lx\n",smc->ess.sync_bw,0) ; ess_config_fifo(smc) ; set_formac_tsync(smc,smc->ess.sync_bw) ; return(TRUE) ; }
/* * determines the synchronous bandwidth, set the TSYNC register and the * mib variables SBAPayload, SBAOverhead and fddiMACT-NEG. */ static int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead) { /* * determine the synchronous bandwidth (sync_bw) in bytes per T-NEG, * if the payload is greater than zero. * For the SBAPayload and the SBAOverhead we have the following * unite quations * _ _ * | bytes | * SBAPayload = | 8000 ------ | * | s | * - - * _ _ * | bytes | * SBAOverhead = | ------ | * | T-NEG | * - - * * T-NEG is described by the equation: * * (-) fddiMACT-NEG * T-NEG = ------------------- * 12500000 1/s * * The number of bytes we are able to send is the payload * plus the overhead. * * bytes T-NEG SBAPayload 8000 bytes/s * sync_bw = SBAOverhead ------ + ----------------------------- * T-NEG T-NEG * * * 1 * sync_bw = SBAOverhead + ---- (-)fddiMACT-NEG * SBAPayload * 1562 * */ /* * set the mib attributes fddiPATHSbaOverhead, fddiPATHSbaPayload */ /* if (smt_set_obj(smc,SMT_P320F,payload,S_SET)) { DB_ESS("ESS: SMT does not accept the payload value\n",0,0) ; return FALSE; } if (smt_set_obj(smc,SMT_P3210,overhead,S_SET)) { DB_ESS("ESS: SMT does not accept the overhead value\n",0,0) ; return FALSE; } */ /* premliminary */ if (payload > MAX_PAYLOAD || overhead > 5000) { DB_ESS("ESS: payload / overhead not accepted\n",0,0) ; return FALSE; } /* * start the iterative allocation process if the payload or the overhead * are smaller than the parsed values */ if (smc->mib.fddiESSPayload && ((u_long)payload != smc->mib.fddiESSPayload || (u_long)overhead != smc->mib.fddiESSOverhead)) { smc->ess.raf_act_timer_poll = TRUE ; smc->ess.timer_count = 0 ; } /* * evulate the Payload */ if (payload) { DB_ESSN(2,"ESS: turn SMT_ST_SYNC_SERVICE bit on\n",0,0) ; smc->ess.sync_bw_available = TRUE ; smc->ess.sync_bw = overhead - (long)smc->mib.m[MAC0].fddiMACT_Neg * payload / 1562 ; } else { DB_ESSN(2,"ESS: turn SMT_ST_SYNC_SERVICE bit off\n",0,0) ; smc->ess.sync_bw_available = FALSE ; smc->ess.sync_bw = 0 ; overhead = 0 ; } smc->mib.a[PATH0].fddiPATHSbaPayload = payload ; smc->mib.a[PATH0].fddiPATHSbaOverhead = overhead ; DB_ESSN(2,"tsync = %lx\n",smc->ess.sync_bw,0) ; ess_config_fifo(smc) ; set_formac_tsync(smc,smc->ess.sync_bw) ; return TRUE; }