// 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. * ******************************************************************************/ /* * ******************************************************************* * This SBA code implements the Synchronous Bandwidth Allocation * functions described in the "FDDI Synchronous Forum Implementer's * Agreement" dated December 1th, 1993. * ******************************************************************* * * PURPOSE: The purpose of this function is to control * synchronous allocations on a single FDDI segment. * Allocations are limited to the primary FDDI ring. * The SBM provides recovery mechanisms to recover * unused bandwidth also resolves T_Neg and * reconfiguration changes. Many of the SBM state * machine inputs are sourced by the underlying * FDDI sub-system supporting the SBA application. * * ******************************************************************* */ #include "h/types.h" #include "h/fddi.h" #include "h/smc.h" #include "h/smt_p.h" #ifndef SLIM_SMT #ifdef ESS #ifndef lint #define LINT_USE(x) … #else #define LINT_USE … #endif #define MS2BCLK(x) … /* ------------------------------------------------------------- LOCAL VARIABLES: ------------------------------------------------------------- */ static const u_short plist_raf_alc_res[] = … ; static const u_short plist_raf_chg_req[] = … ; static const struct fddi_addr smt_sba_da = … ; static const struct fddi_addr null_addr = … ; /* ------------------------------------------------------------- GLOBAL VARIABLES: ------------------------------------------------------------- */ /* ------------------------------------------------------------- LOCAL FUNCTIONS: ------------------------------------------------------------- */ static void ess_send_response(struct s_smc *smc, struct smt_header *sm, int sba_cmd); static void ess_config_fifo(struct s_smc *smc); static void ess_send_alc_req(struct s_smc *smc); static void ess_send_frame(struct s_smc *smc, SMbuf *mb); /* ------------------------------------------------------------- EXTERNAL FUNCTIONS: ------------------------------------------------------------- */ /* ------------------------------------------------------------- PUBLIC FUNCTIONS: ------------------------------------------------------------- */ void ess_timer_poll(struct s_smc *smc); void ess_para_change(struct s_smc *smc); int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm, int fs); static int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead); /* * -------------------------------------------------------------------------- * End Station Support (ESS) * -------------------------------------------------------------------------- */ /* * evaluate the RAF frame */ int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm, int fs) { … } /* * 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) { … } static void ess_send_response(struct s_smc *smc, struct smt_header *sm, int sba_cmd) { … } void ess_timer_poll(struct s_smc *smc) { … } static void ess_send_alc_req(struct s_smc *smc) { … } static void ess_send_frame(struct s_smc *smc, SMbuf *mb) { … } void ess_para_change(struct s_smc *smc) { … } static void ess_config_fifo(struct s_smc *smc) { … } #endif /* ESS */ #endif /* no SLIM_SMT */