// SPDX-License-Identifier: GPL-2.0-or-later /****************************************************************************** * * (C)Copyright 1998,1999 SysKonnect, * a business unit of Schneider & Koch & Co. Datensysteme GmbH. * * See the file "skfddi.c" for further information. * * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ /* SMT CFM Configuration Management DAS with single MAC */ /* * Hardware independent state machine implemantation * The following external SMT functions are referenced : * * queue_event() * * The following external HW dependent functions are referenced : * config_mux() * * The following HW dependent events are required : * NONE */ #include "h/types.h" #include "h/fddi.h" #include "h/smc.h" #define KERNEL #include "h/smtstate.h" /* * FSM Macros */ #define AFLAG … #define GO_STATE(x) … #define ACTIONS_DONE() … #define ACTIONS(x) … /* * symbolic state names */ static const char * const cfm_states[] = … ; /* * symbolic event names */ static const char * const cfm_events[] = … ; /* * map from state to downstream port type */ static const unsigned char cf_to_ptype[] = … ; /* * CEM port states */ #define CEM_PST_DOWN … #define CEM_PST_UP … #define CEM_PST_HOLD … /* define portstate array only for A and B port */ /* Do this within the smc structure (use in multiple cards) */ /* * all Globals are defined in smc.h * struct s_cfm */ /* * function declarations */ static void cfm_fsm(struct s_smc *smc, int cmd); /* init CFM state machine clear all CFM vars and flags */ void cfm_init(struct s_smc *smc) { … } /* Some terms conditions used by the selection criteria */ #define THRU_ENABLED(smc) … /* Selection criteria for the ports */ static void selection_criteria (struct s_smc *smc, struct s_phy *phy) { … } void all_selection_criteria(struct s_smc *smc) { … } static void cem_priv_state(struct s_smc *smc, int event) /* State machine for private PORT states: used to optimize dual homing */ { … } /* CFM state machine called by dispatcher do display state change process event until SM is stable */ void cfm(struct s_smc *smc, int event) { … } /* process CFM event */ /*ARGSUSED1*/ static void cfm_fsm(struct s_smc *smc, int cmd) { … } /* * get MAC's input Port * return : * PA or PB */ int cfm_get_mac_input(struct s_smc *smc) { … } /* * get MAC's output Port * return : * PA or PB */ int cfm_get_mac_output(struct s_smc *smc) { … } static char path_iso[] = … ; static char path_wrap_a[] = … ; static char path_wrap_b[] = … ; static char path_thru[] = … ; static char path_wrap_s[] = … ; static char path_iso_s[] = … ; int cem_build_path(struct s_smc *smc, char *to, int path_index) { … }