smtinit.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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. Init SMT
  18. call all module level initialization routines
  19. */
  20. #include "h/types.h"
  21. #include "h/fddi.h"
  22. #include "h/smc.h"
  23. #ifndef lint
  24. static const char ID_sccs[] = "@(#)smtinit.c 1.15 97/05/06 (C) SK " ;
  25. #endif
  26. extern void init_fddi_driver() ;
  27. /* define global debug variable */
  28. #if defined(DEBUG) && !defined(DEBUG_BRD)
  29. struct smt_debug debug;
  30. #endif
  31. #ifndef MULT_OEM
  32. #define OEMID(smc,i) oem_id[i]
  33. extern u_char oem_id[] ;
  34. #else /* MULT_OEM */
  35. #define OEMID(smc,i) smc->hw.oem_id->oi_mark[i]
  36. extern struct s_oem_ids oem_ids[] ;
  37. #endif /* MULT_OEM */
  38. /*
  39.  * Set OEM specific values
  40.  *
  41.  * Can not be called in smt_reset_defaults, because it is not sure that
  42.  * the OEM ID is already defined.
  43.  */
  44. static void set_oem_spec_val(smc)
  45. struct s_smc *smc ;
  46. {
  47. struct fddi_mib *mib ;
  48. mib = &smc->mib ;
  49. /*
  50.  * set IBM specific values
  51.  */
  52. if (OEMID(smc,0) == 'I') {
  53. mib->fddiSMTConnectionPolicy = POLICY_MM ;
  54. }
  55. }
  56. /*
  57.  * Init SMT
  58.  */
  59. int init_smt(smc,mac_addr)
  60. struct s_smc *smc ;
  61. u_char *mac_addr ; /* canonical address or NULL */
  62. {
  63. int p ;
  64. #if defined(DEBUG) && !defined(DEBUG_BRD)
  65. debug.d_smt = 0 ;
  66. debug.d_smtf = 0 ;
  67. debug.d_rmt = 0 ;
  68. debug.d_ecm = 0 ;
  69. debug.d_pcm = 0 ;
  70. debug.d_cfm = 0 ;
  71. debug.d_plc = 0 ;
  72. #ifdef ESS
  73. debug.d_ess = 0 ;
  74. #endif
  75. #ifdef SBA
  76. debug.d_sba = 0 ;
  77. #endif
  78. #endif /* DEBUG && !DEBUG_BRD */
  79. /* First initialize the ports mib->pointers */
  80. for ( p = 0; p < NUMPHYS; p ++ ) {
  81. smc->y[p].mib = & smc->mib.p[p] ;
  82. }
  83. set_oem_spec_val(smc) ;
  84. (void) smt_set_mac_opvalues(smc) ;
  85. init_fddi_driver(smc,mac_addr) ; /* HW driver */
  86. smt_fixup_mib(smc) ; /* update values that depend on s.sas */
  87. ev_init(smc) ; /* event queue */
  88. #ifndef SLIM_SMT
  89. smt_init_evc(smc) ; /* evcs in MIB */
  90. #endif /* no SLIM_SMT */
  91. smt_timer_init(smc) ; /* timer package */
  92. smt_agent_init(smc) ; /* SMT frame manager */
  93. pcm_init(smc) ; /* PCM state machine */
  94. ecm_init(smc) ; /* ECM state machine */
  95. cfm_init(smc) ; /* CFM state machine */
  96. rmt_init(smc) ; /* RMT state machine */
  97. for (p = 0 ; p < NUMPHYS ; p++) {
  98. pcm(smc,p,0) ; /* PCM A state machine */
  99. }
  100. ecm(smc,0) ; /* ECM state machine */
  101. cfm(smc,0) ; /* CFM state machine */
  102. rmt(smc,0) ; /* RMT state machine */
  103. smt_agent_task(smc) ; /* NIF FSM etc */
  104.         PNMI_INIT(smc) ;                /* PNMI initialization */
  105. return(0) ;
  106. }