root/drivers/net/fddi/skfp/h/sba.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/******************************************************************************
 *
 *      (C)Copyright 1998,1999 SysKonnect,
 *      a business unit of Schneider & Koch & Co. Datensysteme GmbH.
 *
 *      The information in this file is provided "AS IS" without warranty.
 *
 ******************************************************************************/

/*
 * Synchronous Bandwidth Allocation (SBA) structs
 */
 
#ifndef _SBA_
#define _SBA_

#include "mbuf.h"
#include "sba_def.h"

#ifdef  SBA

/* Timer Cell Template */
struct timer_cell {
        struct timer_cell       *next_ptr ;
        struct timer_cell       *prev_ptr ;
        u_long                  start_time ;
        struct s_sba_node_vars  *node_var ;
} ;

/*
 * Node variables
 */
struct s_sba_node_vars {
        u_char                  change_resp_flag ;
        u_char                  report_resp_flag ;
        u_char                  change_req_flag ;
        u_char                  report_req_flag ;
        long                    change_amount ;
        long                    node_overhead ;
        long                    node_payload ;
        u_long                  node_status ;
        u_char                  deallocate_status ;
        u_char                  timer_state ;
        u_short                 report_cnt ;
        long                    lastrep_req_tranid ;
        struct fddi_addr        mac_address ;
        struct s_sba_sessions   *node_sessions ;
        struct timer_cell       timer ;
} ;

/*
 * Session variables
 */
struct s_sba_sessions {
        u_long                  deallocate_status ;
        long                    session_overhead ;
        u_long                  min_segment_size ;
        long                    session_payload ;
        u_long                  session_status ;
        u_long                  sba_category ;
        long                    lastchg_req_tranid ;
        u_short                 session_id ;
        u_char                  class ;
        u_char                  fddi2 ;
        u_long                  max_t_neg ;
        struct s_sba_sessions   *next_session ;
} ;

struct s_sba {

        struct s_sba_node_vars  node[MAX_NODES] ;
        struct s_sba_sessions   session[MAX_SESSIONS] ;

        struct s_sba_sessions   *free_session ; /* points to the first */
                                                /* free session */

        struct timer_cell       *tail_timer ;   /* points to the last timer cell */

        /*
         * variables for allocation actions
         */
        long    total_payload ;         /* Total Payload */
        long    total_overhead ;        /* Total Overhead */
        long    sba_allocatable ;       /* allocatable sync bandwidth */

        /*
         * RAF message receive parameters
         */
        long            msg_path_index ;        /* Path Type */
        long            msg_sba_pl_req ;        /* Payload Request */
        long            msg_sba_ov_req ;        /* Overhead Request */
        long            msg_mib_pl ;            /* Current Payload for this Path */
        long            msg_mib_ov ;            /* Current Overhead for this Path*/
        long            msg_category ;          /* Category of the Allocation */
        u_long          msg_max_t_neg ;         /* longest T_Neg acceptable */
        u_long          msg_min_seg_siz ;       /* minimum segement size */
        struct smt_header       *sm ;           /* points to the rec message */
        struct fddi_addr        *msg_alloc_addr ;       /* Allocation Address */

        /*
         * SBA variables
         */
        u_long  sba_t_neg ;             /* holds the last T_NEG */
        long    sba_max_alloc ;         /* the parsed value of SBAAvailable */  

        /*
         * SBA state machine variables
         */
        short   sba_next_state ;        /* the next state of the SBA */
        char    sba_command ;           /* holds the execuded SBA cmd */
        u_char  sba_available ;         /* parsed value after possible check */
} ;

#endif  /* SBA */

        /*
         * variables for the End Station Support
         */
struct s_ess {

        /*
         * flags and counters
         */
        u_char  sync_bw_available ;     /* is set if sync bw is allocated */
        u_char  local_sba_active ;      /* set when a local sba is available */
        char    raf_act_timer_poll ;    /* activate the timer to send allc req */
        char    timer_count ;           /* counts every timer function call */

        SMbuf   *sba_reply_pend ;       /* local reply for the sba is pending */
        
        /*
         * variables for the ess bandwidth control
         */
        long    sync_bw ;               /* holds the allocaed sync bw */
        u_long  alloc_trans_id ;        /* trans id of the last alloc req */
} ;
#endif