예제 #1
0
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) ;
}
예제 #2
0
/*
 * 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;
}