Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *	(C)Copyright 1998,1999 SysKonnect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *	a business unit of Schneider & Koch & Co. Datensysteme GmbH.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *	See the file "skfddi.c" for further information.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *	The information in this file is provided "AS IS" without warranty.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	SMT/CMT defaults
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #include "h/types.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include "h/fddi.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #include "h/smc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #ifndef OEM_USER_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define OEM_USER_DATA	"SK-NET FDDI V2.0 Userdata"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #ifndef	lint
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) static const char ID_sccs[] = "@(#)smtdef.c	2.53 99/08/11 (C) SK " ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  * defaults
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define TTMS(x)	((u_long)(x)*1000L)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define TTS(x)	((u_long)(x)*1000000L)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define TTUS(x)	((u_long)(x))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define DEFAULT_TB_MIN		TTMS(5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define DEFAULT_TB_MAX		TTMS(50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define DEFAULT_C_MIN		TTUS(1600)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define DEFAULT_T_OUT		TTMS(100+5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define DEFAULT_TL_MIN		TTUS(30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define DEFAULT_LC_SHORT	TTMS(50+5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define DEFAULT_LC_MEDIUM	TTMS(500+20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define DEFAULT_LC_LONG		TTS(5)+TTMS(50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define DEFAULT_LC_EXTENDED	TTS(50)+TTMS(50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define DEFAULT_T_NEXT_9	TTMS(200+10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define DEFAULT_NS_MAX		TTUS(1310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define DEFAULT_I_MAX		TTMS(25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define DEFAULT_IN_MAX		TTMS(40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define DEFAULT_TD_MIN		TTMS(5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define DEFAULT_T_NON_OP	TTS(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define DEFAULT_T_STUCK		TTS(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define DEFAULT_T_DIRECT	TTMS(370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define DEFAULT_T_JAM		TTMS(370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define DEFAULT_T_ANNOUNCE	TTMS(2500)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define DEFAULT_D_MAX		TTUS(1617)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define DEFAULT_LEM_ALARM	(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define DEFAULT_LEM_CUTOFF	(7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define DEFAULT_TEST_DONE	TTS(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define DEFAULT_CHECK_POLL	TTS(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define DEFAULT_POLL		TTMS(50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)  * LCT errors threshold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define DEFAULT_LCT_SHORT	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define DEFAULT_LCT_MEDIUM	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define DEFAULT_LCT_LONG	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define DEFAULT_LCT_EXTEND	50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) /* Forward declarations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) void smt_reset_defaults(struct s_smc *smc, int level);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) static void smt_init_mib(struct s_smc *smc, int level);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) static int set_min_max(int maxflag, u_long mib, u_long limit, u_long *oper);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define MS2BCLK(x)	((x)*12500L)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define US2BCLK(x)	((x)*1250L)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) void smt_reset_defaults(struct s_smc *smc, int level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	struct smt_config	*smt ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	int			i ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	u_long			smt_boot_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	smt_init_mib(smc,level) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	smc->os.smc_version = SMC_VERSION ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	smt_boot_time = smt_get_time();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	for( i = 0; i < NUMMACS; i++ )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 		smc->sm.last_tok_time[i] = smt_boot_time ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	smt = &smc->s ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	smt->attach_s = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	smt->build_ring_map = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	smt->sas = SMT_DAS ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	smt->numphys = NUMPHYS ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	smt->pcm_tb_min = DEFAULT_TB_MIN ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	smt->pcm_tb_max = DEFAULT_TB_MAX ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	smt->pcm_c_min = DEFAULT_C_MIN ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	smt->pcm_t_out = DEFAULT_T_OUT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	smt->pcm_tl_min = DEFAULT_TL_MIN ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	smt->pcm_lc_short = DEFAULT_LC_SHORT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	smt->pcm_lc_medium = DEFAULT_LC_MEDIUM ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	smt->pcm_lc_long = DEFAULT_LC_LONG ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	smt->pcm_lc_extended = DEFAULT_LC_EXTENDED ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	smt->pcm_t_next_9 = DEFAULT_T_NEXT_9 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	smt->pcm_ns_max = DEFAULT_NS_MAX ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	smt->ecm_i_max = DEFAULT_I_MAX ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	smt->ecm_in_max = DEFAULT_IN_MAX ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	smt->ecm_td_min = DEFAULT_TD_MIN ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	smt->ecm_test_done = DEFAULT_TEST_DONE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	smt->ecm_check_poll = DEFAULT_CHECK_POLL ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	smt->rmt_t_non_op = DEFAULT_T_NON_OP ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	smt->rmt_t_stuck = DEFAULT_T_STUCK ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	smt->rmt_t_direct = DEFAULT_T_DIRECT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	smt->rmt_t_jam = DEFAULT_T_JAM ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	smt->rmt_t_announce = DEFAULT_T_ANNOUNCE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	smt->rmt_t_poll = DEFAULT_POLL ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)         smt->rmt_dup_mac_behavior = FALSE ;  /* See Struct smt_config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	smt->mac_d_max = DEFAULT_D_MAX ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	smt->lct_short = DEFAULT_LCT_SHORT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	smt->lct_medium = DEFAULT_LCT_MEDIUM ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	smt->lct_long = DEFAULT_LCT_LONG ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	smt->lct_extended = DEFAULT_LCT_EXTEND ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #ifndef	SLIM_SMT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #ifdef	ESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 		smc->ess.sync_bw_available = FALSE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 		smc->mib.fddiESSPayload = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 		smc->mib.fddiESSOverhead = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 		smc->mib.fddiESSMaxTNeg = (u_long)(- MS2BCLK(25)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 		smc->mib.fddiESSMinSegmentSize = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 		smc->mib.fddiESSCategory = SB_STATIC ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 		smc->mib.fddiESSSynchTxMode = FALSE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 		smc->ess.raf_act_timer_poll = FALSE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 		smc->ess.timer_count = 7 ; 	/* first RAF alc req after 3s */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	smc->ess.local_sba_active = FALSE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	smc->ess.sba_reply_pend = NULL ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #ifdef	SBA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	smt_init_sba(smc,level) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #endif	/* no SLIM_SMT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #ifdef	TAG_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 		smc->hw.pci_fix_value = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)  * manufacturer data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) static const char man_data[32] =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) /*	 01234567890123456789012345678901	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	"xxxSK-NET FDDI SMT 7.3 - V2.8.8" ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) static void smt_init_mib(struct s_smc *smc, int level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	struct fddi_mib		*mib ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	struct fddi_mib_p	*pm ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	int			port ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	int			path ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	mib = &smc->mib ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 		 * set EVERYTHING to ZERO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		 * EXCEPT hw and os
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 		memset(((char *)smc)+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 			sizeof(struct s_smt_os)+sizeof(struct s_smt_hw), 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 			sizeof(struct s_smc) -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 			sizeof(struct s_smt_os) - sizeof(struct s_smt_hw)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		mib->fddiSMTRemoteDisconnectFlag = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		mib->fddiSMTPeerWrapFlag = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	mib->fddiSMTOpVersionId = 2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	mib->fddiSMTHiVersionId = 2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	mib->fddiSMTLoVersionId = 2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	memcpy((char *) mib->fddiSMTManufacturerData,man_data,32) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 		strcpy(mib->fddiSMTUserData,OEM_USER_DATA) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	mib->fddiSMTMIBVersionId = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	mib->fddiSMTMac_Ct = NUMMACS ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	mib->fddiSMTConnectionPolicy = POLICY_MM | POLICY_AA | POLICY_BB ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	 * fddiSMTNonMaster_Ct and fddiSMTMaster_Ct are set in smt_fixup_mib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	 * s.sas is not set yet (is set in init driver)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	mib->fddiSMTAvailablePaths = MIB_PATH_P | MIB_PATH_S ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	mib->fddiSMTConfigCapabilities = 0 ;	/* no hold,no wrap_ab*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	mib->fddiSMTTT_Notify = 10 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	mib->fddiSMTStatRptPolicy = TRUE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	mib->fddiSMTTrace_MaxExpiration = SEC2MIB(7) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	mib->fddiSMTMACIndexes = INDEX_MAC ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	mib->fddiSMTStationStatus = MIB_SMT_STASTA_SEPA ;	/* separated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	mib->m[MAC0].fddiMACIndex = INDEX_MAC ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	mib->m[MAC0].fddiMACFrameStatusFunctions = FSC_TYPE0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	mib->m[MAC0].fddiMACRequestedPaths =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 		MIB_P_PATH_LOCAL |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 		MIB_P_PATH_SEC_ALTER |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 		MIB_P_PATH_PRIM_ALTER ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	mib->m[MAC0].fddiMACAvailablePaths = MIB_PATH_P ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	mib->m[MAC0].fddiMACCurrentPath = MIB_PATH_PRIMARY ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	mib->m[MAC0].fddiMACT_MaxCapabilitiy = (u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	mib->m[MAC0].fddiMACTVXCapabilitiy = (u_long)(- US2BCLK(52)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 		mib->m[MAC0].fddiMACTvxValue = (u_long)(- US2BCLK(27)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 		mib->m[MAC0].fddiMACTvxValueMIB = (u_long)(- US2BCLK(27)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 		mib->m[MAC0].fddiMACT_Req = (u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 		mib->m[MAC0].fddiMACT_ReqMIB = (u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 		mib->m[MAC0].fddiMACT_Max = (u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 		mib->m[MAC0].fddiMACT_MaxMIB = (u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 		mib->m[MAC0].fddiMACT_Min = (u_long)(- MS2BCLK(4)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	mib->m[MAC0].fddiMACHardwarePresent = TRUE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	mib->m[MAC0].fddiMACMA_UnitdataEnable = TRUE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	mib->m[MAC0].fddiMACFrameErrorThreshold = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	mib->m[MAC0].fddiMACNotCopiedThreshold = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	 * Path attributes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	for (path = 0 ; path < NUMPATHS ; path++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 		mib->a[path].fddiPATHIndex = INDEX_PATH + path ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 		if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 			mib->a[path].fddiPATHTVXLowerBound =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 				(u_long)(- US2BCLK(27)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 			mib->a[path].fddiPATHT_MaxLowerBound =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 				(u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 			mib->a[path].fddiPATHMaxT_Req =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 				(u_long)(- MS2BCLK(165)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	 * Port attributes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	pm = mib->p ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	for (port = 0 ; port <  NUMPHYS ; port++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 		 * set MIB pointer in phy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 		/* Attention: don't initialize mib pointer here! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 		/*  It must be initialized during phase 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 		smc->y[port].mib = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 		mib->fddiSMTPORTIndexes[port] = port+INDEX_PORT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 		pm->fddiPORTIndex = port+INDEX_PORT ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 		pm->fddiPORTHardwarePresent = TRUE ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 		if (level == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 			pm->fddiPORTLer_Alarm = DEFAULT_LEM_ALARM ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 			pm->fddiPORTLer_Cutoff = DEFAULT_LEM_CUTOFF ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 		/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 		 * fddiPORTRequestedPaths are set in pcmplc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 		 * we don't know the port type yet !
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 		pm->fddiPORTRequestedPaths[1] = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 		pm->fddiPORTRequestedPaths[2] = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 		pm->fddiPORTRequestedPaths[3] = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 		pm->fddiPORTAvailablePaths = MIB_PATH_P ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 		pm->fddiPORTPMDClass = MIB_PMDCLASS_MULTI ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 		pm++ ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	(void) smt_set_mac_opvalues(smc) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) int smt_set_mac_opvalues(struct s_smc *smc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	int	st ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	int	st2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	st = set_min_max(1,smc->mib.m[MAC0].fddiMACTvxValueMIB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 		smc->mib.a[PATH0].fddiPATHTVXLowerBound,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 		&smc->mib.m[MAC0].fddiMACTvxValue) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	st |= set_min_max(0,smc->mib.m[MAC0].fddiMACT_MaxMIB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 		smc->mib.a[PATH0].fddiPATHT_MaxLowerBound,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 		&smc->mib.m[MAC0].fddiMACT_Max) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	st |= (st2 = set_min_max(0,smc->mib.m[MAC0].fddiMACT_ReqMIB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 		smc->mib.a[PATH0].fddiPATHMaxT_Req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 		&smc->mib.m[MAC0].fddiMACT_Req)) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	if (st2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 		/* Treq attribute changed remotely. So send an AIX_EVENT to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 		 * user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 		AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, (u_long)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 			FDDI_SMT_EVENT, (u_long) FDDI_REMOTE_T_REQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 			smt_get_event_word(smc));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	return st;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) void smt_fixup_mib(struct s_smc *smc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #ifdef	CONCENTRATOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	switch (smc->s.sas) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	case SMT_SAS :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 		smc->mib.fddiSMTNonMaster_Ct = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 		break ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	case SMT_DAS :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 		smc->mib.fddiSMTNonMaster_Ct = 2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 		break ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	case SMT_NAC :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 		smc->mib.fddiSMTNonMaster_Ct = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 		break ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	smc->mib.fddiSMTMaster_Ct = NUMPHYS - smc->mib.fddiSMTNonMaster_Ct ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	switch (smc->s.sas) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	case SMT_SAS :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 		smc->mib.fddiSMTNonMaster_Ct = 1 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 		break ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	case SMT_DAS :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 		smc->mib.fddiSMTNonMaster_Ct = 2 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 		break ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	smc->mib.fddiSMTMaster_Ct = 0 ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)  * determine new setting for operational value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)  * if limit is lower than mib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)  *	use limit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)  * else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)  *	use mib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)  * NOTE : numbers are negative, negate comparison !
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) static int set_min_max(int maxflag, u_long mib, u_long limit, u_long *oper)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	u_long	old ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	old = *oper ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	if ((limit > mib) ^ maxflag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 		*oper = limit ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 		*oper = mib ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	return old != *oper;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)