Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/net/fddi/skfp/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  queue.c   Sprache: C

 
// 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 Event Queue Management
*/


#include "h/types.h"
#include "h/fddi.h"
#include "h/smc.h"

#define PRINTF(a,b,c)

/*
 * init event queue management
 */

void ev_init(struct s_smc *smc)
{
 smc->q.ev_put = smc->q.ev_get = smc->q.ev_queue ;
}

/*
 * add event to queue
 */

void queue_event(struct s_smc *smc, int classint event)
{
 PRINTF("queue class %d event %d\n",class,event) ;
 smc->q.ev_put->class = class ;
 smc->q.ev_put->event = event ;
 if (++smc->q.ev_put == &smc->q.ev_queue[MAX_EVENT])
  smc->q.ev_put = smc->q.ev_queue ;

 if (smc->q.ev_put == smc->q.ev_get) {
  SMT_ERR_LOG(smc,SMT_E0137, SMT_E0137_MSG) ;
 }
}

/*
 * timer_event is called from HW timer package.
 */

void timer_event(struct s_smc *smc, u_long token)
{
 PRINTF("timer event class %d token %d\n",
  EV_T_CLASS(token),
  EV_T_EVENT(token)) ;
 queue_event(smc,EV_T_CLASS(token),EV_T_EVENT(token));
}

/*
 * event dispatcher
 * while event queue is not empty
 * get event from queue
 * send command to state machine
 * end
 */

void ev_dispatcher(struct s_smc *smc)
{
 struct event_queue *ev ; /* pointer into queue */
 int  class ;

 ev = smc->q.ev_get ;
 PRINTF("dispatch get %x put %x\n",ev,smc->q.ev_put) ;
 while (ev != smc->q.ev_put) {
  PRINTF("dispatch class %d event %d\n",ev->class,ev->event) ;
  switch(class = ev->class) {
  case EVENT_ECM :  /* Entity Corordination  Man. */
   ecm(smc,(int)ev->event) ;
   break ;
  case EVENT_CFM :  /* Configuration Man. */
   cfm(smc,(int)ev->event) ;
   break ;
  case EVENT_RMT :  /* Ring Man. */
   rmt(smc,(int)ev->event) ;
   break ;
  case EVENT_SMT :
   smt_event(smc,(int)ev->event) ;
   break ;
#ifdef CONCENTRATOR
  case 99 :
   timer_test_event(smc,(int)ev->event) ;
   break ;
#endif
  case EVENT_PCMA :  /* PHY A */
  case EVENT_PCMB :  /* PHY B */
  default :
   if (class >= EVENT_PCMA &&
       class < EVENT_PCMA + NUMPHYS) {
    pcm(smc,class - EVENT_PCMA,(int)ev->event) ;
    break ;
   }
   SMT_PANIC(smc,SMT_E0121, SMT_E0121_MSG) ;
   return ;
  }

  if (++ev == &smc->q.ev_queue[MAX_EVENT])
   ev = smc->q.ev_queue ;

  /* Renew get: it is used in queue_events to detect overruns */
  smc->q.ev_get = ev;
 }
}

/*
 * smt_online connects to or disconnects from the ring
 * MUST be called to initiate connection establishment
 *
 * on 0 disconnect
 * on 1 connect
 */

u_short smt_online(struct s_smc *smc, int on)
{
 queue_event(smc,EVENT_ECM,on ? EC_CONNECT : EC_DISCONNECT) ;
 ev_dispatcher(smc) ;
 return smc->mib.fddiSMTCF_State;
}

/*
 * set SMT flag to value
 * flag flag name
 * value flag value
 * dump current flag setting
 */

#ifdef CONCENTRATOR
void do_smt_flag(struct s_smc *smc, char *flag, int value)
{
#ifdef DEBUG
 struct smt_debug *deb;

 SK_UNUSED(smc) ;

#ifdef DEBUG_BRD
 deb = &smc->debug;
#else
 deb = &debug;
#endif
 if (!strcmp(flag,"smt"))
  deb->d_smt = value ;
 else if (!strcmp(flag,"smtf"))
  deb->d_smtf = value ;
 else if (!strcmp(flag,"pcm"))
  deb->d_pcm = value ;
 else if (!strcmp(flag,"rmt"))
  deb->d_rmt = value ;
 else if (!strcmp(flag,"cfm"))
  deb->d_cfm = value ;
 else if (!strcmp(flag,"ecm"))
  deb->d_ecm = value ;
 printf("smt %d\n",deb->d_smt) ;
 printf("smtf %d\n",deb->d_smtf) ;
 printf("pcm %d\n",deb->d_pcm) ;
 printf("rmt %d\n",deb->d_rmt) ;
 printf("cfm %d\n",deb->d_cfm) ;
 printf("ecm %d\n",deb->d_ecm) ;
#endif /* DEBUG */
}
#endif

Messung V0.5
C=79 H=97 G=88

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.