162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * (C)Copyright 1998,1999 SysKonnect, 562306a36Sopenharmony_ci * a business unit of Schneider & Koch & Co. Datensysteme GmbH. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * See the file "skfddi.c" for further information. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * The information in this file is provided "AS IS" without warranty. 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci ******************************************************************************/ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci Init SMT 1562306a36Sopenharmony_ci call all module level initialization routines 1662306a36Sopenharmony_ci*/ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "h/types.h" 1962306a36Sopenharmony_ci#include "h/fddi.h" 2062306a36Sopenharmony_ci#include "h/smc.h" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_civoid init_fddi_driver(struct s_smc *smc, const u_char *mac_addr); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* define global debug variable */ 2562306a36Sopenharmony_ci#if defined(DEBUG) && !defined(DEBUG_BRD) 2662306a36Sopenharmony_cistruct smt_debug debug; 2762306a36Sopenharmony_ci#endif 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#ifndef MULT_OEM 3062306a36Sopenharmony_ci#define OEMID(smc,i) oem_id[i] 3162306a36Sopenharmony_ci extern u_char oem_id[] ; 3262306a36Sopenharmony_ci#else /* MULT_OEM */ 3362306a36Sopenharmony_ci#define OEMID(smc,i) smc->hw.oem_id->oi_mark[i] 3462306a36Sopenharmony_ci extern struct s_oem_ids oem_ids[] ; 3562306a36Sopenharmony_ci#endif /* MULT_OEM */ 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci/* 3862306a36Sopenharmony_ci * Set OEM specific values 3962306a36Sopenharmony_ci * 4062306a36Sopenharmony_ci * Can not be called in smt_reset_defaults, because it is not sure that 4162306a36Sopenharmony_ci * the OEM ID is already defined. 4262306a36Sopenharmony_ci */ 4362306a36Sopenharmony_cistatic void set_oem_spec_val(struct s_smc *smc) 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci struct fddi_mib *mib ; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci mib = &smc->mib ; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci /* 5062306a36Sopenharmony_ci * set IBM specific values 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ci if (OEMID(smc,0) == 'I') { 5362306a36Sopenharmony_ci mib->fddiSMTConnectionPolicy = POLICY_MM ; 5462306a36Sopenharmony_ci } 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* 5862306a36Sopenharmony_ci * Init SMT 5962306a36Sopenharmony_ci */ 6062306a36Sopenharmony_ciint init_smt(struct s_smc *smc, const u_char *mac_addr) 6162306a36Sopenharmony_ci/* u_char *mac_addr; canonical address or NULL */ 6262306a36Sopenharmony_ci{ 6362306a36Sopenharmony_ci int p ; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#if defined(DEBUG) && !defined(DEBUG_BRD) 6662306a36Sopenharmony_ci debug.d_smt = 0 ; 6762306a36Sopenharmony_ci debug.d_smtf = 0 ; 6862306a36Sopenharmony_ci debug.d_rmt = 0 ; 6962306a36Sopenharmony_ci debug.d_ecm = 0 ; 7062306a36Sopenharmony_ci debug.d_pcm = 0 ; 7162306a36Sopenharmony_ci debug.d_cfm = 0 ; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci debug.d_plc = 0 ; 7462306a36Sopenharmony_ci#ifdef ESS 7562306a36Sopenharmony_ci debug.d_ess = 0 ; 7662306a36Sopenharmony_ci#endif 7762306a36Sopenharmony_ci#ifdef SBA 7862306a36Sopenharmony_ci debug.d_sba = 0 ; 7962306a36Sopenharmony_ci#endif 8062306a36Sopenharmony_ci#endif /* DEBUG && !DEBUG_BRD */ 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* First initialize the ports mib->pointers */ 8362306a36Sopenharmony_ci for ( p = 0; p < NUMPHYS; p ++ ) { 8462306a36Sopenharmony_ci smc->y[p].mib = & smc->mib.p[p] ; 8562306a36Sopenharmony_ci } 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci set_oem_spec_val(smc) ; 8862306a36Sopenharmony_ci (void) smt_set_mac_opvalues(smc) ; 8962306a36Sopenharmony_ci init_fddi_driver(smc,mac_addr) ; /* HW driver */ 9062306a36Sopenharmony_ci smt_fixup_mib(smc) ; /* update values that depend on s.sas */ 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci ev_init(smc) ; /* event queue */ 9362306a36Sopenharmony_ci#ifndef SLIM_SMT 9462306a36Sopenharmony_ci smt_init_evc(smc) ; /* evcs in MIB */ 9562306a36Sopenharmony_ci#endif /* no SLIM_SMT */ 9662306a36Sopenharmony_ci smt_timer_init(smc) ; /* timer package */ 9762306a36Sopenharmony_ci smt_agent_init(smc) ; /* SMT frame manager */ 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci pcm_init(smc) ; /* PCM state machine */ 10062306a36Sopenharmony_ci ecm_init(smc) ; /* ECM state machine */ 10162306a36Sopenharmony_ci cfm_init(smc) ; /* CFM state machine */ 10262306a36Sopenharmony_ci rmt_init(smc) ; /* RMT state machine */ 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci for (p = 0 ; p < NUMPHYS ; p++) { 10562306a36Sopenharmony_ci pcm(smc,p,0) ; /* PCM A state machine */ 10662306a36Sopenharmony_ci } 10762306a36Sopenharmony_ci ecm(smc,0) ; /* ECM state machine */ 10862306a36Sopenharmony_ci cfm(smc,0) ; /* CFM state machine */ 10962306a36Sopenharmony_ci rmt(smc,0) ; /* RMT state machine */ 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci smt_agent_task(smc) ; /* NIF FSM etc */ 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci PNMI_INIT(smc) ; /* PNMI initialization */ 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci return 0; 11662306a36Sopenharmony_ci} 11762306a36Sopenharmony_ci 118