Linux Audio

Check our new training course

Linux kernel drivers training

Mar 31-Apr 9, 2025, special US time zones
Register
Loading...
Note: File does not exist in v6.8.
  1/******************************************************************************
  2 *
  3 *	(C)Copyright 1998,1999 SysKonnect,
  4 *	a business unit of Schneider & Koch & Co. Datensysteme GmbH.
  5 *
  6 *	See the file "skfddi.c" for further information.
  7 *
  8 *	This program is free software; you can redistribute it and/or modify
  9 *	it under the terms of the GNU General Public License as published by
 10 *	the Free Software Foundation; either version 2 of the License, or
 11 *	(at your option) any later version.
 12 *
 13 *	The information in this file is provided "AS IS" without warranty.
 14 *
 15 ******************************************************************************/
 16
 17/*
 18	Init SMT
 19	call all module level initialization routines
 20*/
 21
 22#include "h/types.h"
 23#include "h/fddi.h"
 24#include "h/smc.h"
 25
 26#ifndef	lint
 27static const char ID_sccs[] = "@(#)smtinit.c	1.15 97/05/06 (C) SK " ;
 28#endif
 29
 30void init_fddi_driver(struct s_smc *smc, u_char *mac_addr);
 31
 32/* define global debug variable */
 33#if defined(DEBUG) && !defined(DEBUG_BRD)
 34struct smt_debug debug;
 35#endif
 36
 37#ifndef MULT_OEM
 38#define OEMID(smc,i)	oem_id[i]
 39	extern u_char	oem_id[] ;
 40#else	/* MULT_OEM */
 41#define OEMID(smc,i)	smc->hw.oem_id->oi_mark[i]
 42	extern struct s_oem_ids	oem_ids[] ;
 43#endif	/* MULT_OEM */
 44
 45/*
 46 * Set OEM specific values
 47 *
 48 * Can not be called in smt_reset_defaults, because it is not sure that
 49 * the OEM ID is already defined.
 50 */
 51static void set_oem_spec_val(struct s_smc *smc)
 52{
 53	struct fddi_mib *mib ;
 54
 55	mib = &smc->mib ;
 56
 57	/*
 58	 * set IBM specific values
 59	 */
 60	if (OEMID(smc,0) == 'I') {
 61		mib->fddiSMTConnectionPolicy = POLICY_MM ;
 62	}
 63}
 64
 65/*
 66 * Init SMT
 67 */
 68int init_smt(struct s_smc *smc, u_char *mac_addr)
 69/* u_char *mac_addr;	canonical address or NULL */
 70{
 71	int	p ;
 72
 73#if defined(DEBUG) && !defined(DEBUG_BRD)
 74	debug.d_smt = 0 ;
 75	debug.d_smtf = 0 ;
 76	debug.d_rmt = 0 ;
 77	debug.d_ecm = 0 ;
 78	debug.d_pcm = 0 ;
 79	debug.d_cfm = 0 ;
 80
 81	debug.d_plc = 0 ;
 82#ifdef	ESS
 83	debug.d_ess = 0 ;
 84#endif
 85#ifdef	SBA
 86	debug.d_sba = 0 ;
 87#endif
 88#endif	/* DEBUG && !DEBUG_BRD */
 89
 90	/* First initialize the ports mib->pointers */
 91	for ( p = 0; p < NUMPHYS; p ++ ) {
 92		smc->y[p].mib = & smc->mib.p[p] ;
 93	}
 94
 95	set_oem_spec_val(smc) ;	
 96	(void) smt_set_mac_opvalues(smc) ;
 97	init_fddi_driver(smc,mac_addr) ;	/* HW driver */
 98	smt_fixup_mib(smc) ;		/* update values that depend on s.sas */
 99
100	ev_init(smc) ;			/* event queue */
101#ifndef	SLIM_SMT
102	smt_init_evc(smc) ;		/* evcs in MIB */
103#endif	/* no SLIM_SMT */
104	smt_timer_init(smc) ;		/* timer package */
105	smt_agent_init(smc) ;		/* SMT frame manager */
106
107	pcm_init(smc) ;			/* PCM state machine */
108	ecm_init(smc) ;			/* ECM state machine */
109	cfm_init(smc) ;			/* CFM state machine */
110	rmt_init(smc) ;			/* RMT state machine */
111
112	for (p = 0 ; p < NUMPHYS ; p++) {
113		pcm(smc,p,0) ;		/* PCM A state machine */
114	}
115	ecm(smc,0) ;			/* ECM state machine */
116	cfm(smc,0) ;			/* CFM state machine */
117	rmt(smc,0) ;			/* RMT state machine */
118
119	smt_agent_task(smc) ;		/* NIF FSM etc */
120
121        PNMI_INIT(smc) ;                /* PNMI initialization */
122
123	return 0;
124}
125