Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /******************************************************************************
0003  *
0004  *  (C)Copyright 1998,1999 SysKonnect,
0005  *  a business unit of Schneider & Koch & Co. Datensysteme GmbH.
0006  *
0007  *  The information in this file is provided "AS IS" without warranty.
0008  *
0009  ******************************************************************************/
0010 
0011 #ifndef _CMTDEF_
0012 #define _CMTDEF_
0013 
0014 /* **************************************************************** */
0015 
0016 /*
0017  * implementation specific constants
0018  * MODIIFY THE FOLLOWING THREE DEFINES
0019  */
0020 #define AMDPLC          /* if Amd PLC chip used */
0021 #ifdef  CONC
0022 #define NUMPHYS     12  /* 2 for SAS or DAS, more for Concentrator */
0023 #else
0024 #ifdef  CONC_II
0025 #define NUMPHYS     24  /* 2 for SAS or DAS, more for Concentrator */
0026 #else
0027 #define NUMPHYS     2   /* 2 for SAS or DAS, more for Concentrator */
0028 #endif
0029 #endif
0030 #define NUMMACS     1   /* only 1 supported at the moment */
0031 #define NUMPATHS    2   /* primary and secondary path supported */
0032 
0033 /*
0034  * DO NOT MODIFY BEYOND THIS POINT
0035  */
0036 
0037 /* **************************************************************** */
0038 
0039 #if NUMPHYS > 2
0040 #define CONCENTRATOR
0041 #endif
0042 
0043 /*
0044  * Definitions for comfortable LINT usage
0045  */
0046 #ifdef  lint
0047 #define LINT_USE(x) (x)=(x)
0048 #else
0049 #define LINT_USE(x)
0050 #endif
0051 
0052 #ifdef  DEBUG
0053 #define DB_PR(flag, fmt, ...)                       \
0054     do { if (flag) printf(fmt "\n", ##__VA_ARGS__); } while (0)
0055 #else
0056 #define DB_PR(flag, fmt, ...)   no_printk(fmt "\n", ##__VA_ARGS__)
0057 
0058 #endif
0059 
0060 #ifdef DEBUG_BRD
0061 #define DB_TEST (smc->debug)
0062 #else
0063 #define DB_TEST (debug)
0064 #endif
0065 
0066 #define DB_ECM(fmt, ...)                        \
0067     DB_PR((DB_TEST).d_smt & 1, fmt, ##__VA_ARGS__)
0068 #define DB_ECMN(n, fmt, ...)                        \
0069     DB_PR((DB_TEST).d_ecm >= (n), fmt, ##__VA_ARGS__)
0070 #define DB_RMT(fmt, ...)                        \
0071     DB_PR((DB_TEST).d_smt & 2, fmt, ##__VA_ARGS__)
0072 #define DB_RMTN(n, fmt, ...)                        \
0073     DB_PR((DB_TEST).d_rmt >= (n), fmt, ##__VA_ARGS__)
0074 #define DB_CFM(fmt, ...)                        \
0075     DB_PR((DB_TEST).d_smt & 4, fmt, ##__VA_ARGS__)
0076 #define DB_CFMN(n, fmt, ...)                        \
0077     DB_PR((DB_TEST).d_cfm >= (n), fmt, ##__VA_ARGS__)
0078 #define DB_PCM(fmt, ...)                        \
0079     DB_PR((DB_TEST).d_smt & 8, fmt, ##__VA_ARGS__)
0080 #define DB_PCMN(n, fmt, ...)                        \
0081     DB_PR((DB_TEST).d_pcm >= (n), fmt, ##__VA_ARGS__)
0082 #define DB_SMT(fmt, ...)                        \
0083     DB_PR((DB_TEST).d_smtf, fmt, ##__VA_ARGS__)
0084 #define DB_SMTN(n, fmt, ...)                        \
0085     DB_PR((DB_TEST).d_smtf >= (n), fmt, ##__VA_ARGS__)
0086 #define DB_SBA(fmt, ...)                        \
0087     DB_PR((DB_TEST).d_sba, fmt, ##__VA_ARGS__)
0088 #define DB_SBAN(n, fmt, ...)                        \
0089     DB_PR((DB_TEST).d_sba >= (n), fmt, ##__VA_ARGS__)
0090 #define DB_ESS(fmt, ...)                        \
0091     DB_PR((DB_TEST).d_ess, fmt, ##__VA_ARGS__)
0092 #define DB_ESSN(n, fmt, ...)                        \
0093     DB_PR((DB_TEST).d_ess >= (n), fmt, ##__VA_ARGS__)
0094 
0095 #ifndef SS_NOT_DS
0096 #define SK_LOC_DECL(type,var)   type var
0097 #else
0098 #define SK_LOC_DECL(type,var)   static type var
0099 #endif
0100 /*
0101  * PHYs and PORTS
0102  * Note: Don't touch the definition of PA and PB. Those might be used
0103  *  by some "for" loops.
0104  */
0105 #define PA      0
0106 #define PB      1
0107 #if defined(SUPERNET_3) || defined(CONC_II)
0108 /*
0109  * The port indices have to be different,
0110  * because the MAC output goes through the 2. PLC
0111  * Conc II: It has to be the first port in the row.
0112  */
0113 #define PS      0   /* Internal PLC which is the same as PA */
0114 #else
0115 #define PS      1
0116 #endif
0117 #define PM      2       /* PM .. PA+NUM_PHYS-1 */
0118 
0119 /*
0120  * PHY types - as in path descriptor 'fddiPHYType'
0121  */
0122 #define TA          0   /* A port */
0123 #define TB          1   /* B port */
0124 #define TS          2   /* S port */
0125 #define TM          3   /* M port */
0126 #define TNONE           4
0127 
0128 
0129 /*
0130  * indexes in MIB
0131  */
0132 #define INDEX_MAC   1
0133 #define INDEX_PATH  1
0134 #define INDEX_PORT  1
0135 
0136 
0137 /*
0138  * policies
0139  */
0140 #define POLICY_AA   (1<<0)      /* reject AA */
0141 #define POLICY_AB   (1<<1)      /* reject AB */
0142 #define POLICY_AS   (1<<2)      /* reject AS */
0143 #define POLICY_AM   (1<<3)      /* reject AM */
0144 #define POLICY_BA   (1<<4)      /* reject BA */
0145 #define POLICY_BB   (1<<5)      /* reject BB */
0146 #define POLICY_BS   (1<<6)      /* reject BS */
0147 #define POLICY_BM   (1<<7)      /* reject BM */
0148 #define POLICY_SA   (1<<8)      /* reject SA */
0149 #define POLICY_SB   (1<<9)      /* reject SB */
0150 #define POLICY_SS   (1<<10)     /* reject SS */
0151 #define POLICY_SM   (1<<11)     /* reject SM */
0152 #define POLICY_MA   (1<<12)     /* reject MA */
0153 #define POLICY_MB   (1<<13)     /* reject MB */
0154 #define POLICY_MS   (1<<14)     /* reject MS */
0155 #define POLICY_MM   (1<<15)     /* reject MM */
0156 
0157 /*
0158  * commands
0159  */
0160 
0161 /*
0162  * EVENTS
0163  * event classes
0164  */
0165 #define EVENT_ECM   1       /* event class ECM */
0166 #define EVENT_CFM   2       /* event class CFM */
0167 #define EVENT_RMT   3       /* event class RMT */
0168 #define EVENT_SMT   4       /* event class SMT */
0169 #define EVENT_PCM   5       /* event class PCM */
0170 #define EVENT_PCMA  5       /* event class PCMA */
0171 #define EVENT_PCMB  6       /* event class PCMB */
0172 
0173 /* WARNING :
0174  * EVENT_PCM* must be last in the above list
0175  * if more than two ports are used, EVENT_PCM .. EVENT_PCMA+NUM_PHYS-1
0176  * are used !
0177  */
0178 
0179 #define EV_TOKEN(class,event)   (((u_long)(class)<<16L)|((u_long)(event)))
0180 #define EV_T_CLASS(token)   ((int)((token)>>16)&0xffff)
0181 #define EV_T_EVENT(token)   ((int)(token)&0xffff)
0182 
0183 /*
0184  * ECM events
0185  */
0186 #define EC_CONNECT  1       /* connect request */
0187 #define EC_DISCONNECT   2       /* disconnect request */
0188 #define EC_TRACE_PROP   3       /* trace propagation */
0189 #define EC_PATH_TEST    4       /* path test */
0190 #define EC_TIMEOUT_TD   5       /* timer TD_min */
0191 #define EC_TIMEOUT_TMAX 6       /* timer trace_max */
0192 #define EC_TIMEOUT_IMAX 7       /* timer I_max */
0193 #define EC_TIMEOUT_INMAX 8      /* timer IN_max */
0194 #define EC_TEST_DONE    9       /* path test done */
0195 
0196 /*
0197  * CFM events
0198  */
0199 #define CF_LOOP     1       /* cf_loop flag from PCM */
0200 #define CF_LOOP_A   1       /* cf_loop flag from PCM */
0201 #define CF_LOOP_B   2       /* cf_loop flag from PCM */
0202 #define CF_JOIN     3       /* cf_join flag from PCM */
0203 #define CF_JOIN_A   3       /* cf_join flag from PCM */
0204 #define CF_JOIN_B   4       /* cf_join flag from PCM */
0205 
0206 /*
0207  * PCM events
0208  */
0209 #define PC_START        1
0210 #define PC_STOP         2
0211 #define PC_LOOP         3
0212 #define PC_JOIN         4
0213 #define PC_SIGNAL       5
0214 #define PC_REJECT       6
0215 #define PC_MAINT            7
0216 #define PC_TRACE        8
0217 #define PC_PDR          9
0218 #define PC_ENABLE       10
0219 #define PC_DISABLE      11
0220 
0221 /*
0222  * must be ordered as in LineStateType
0223  */
0224 #define PC_QLS          12
0225 #define PC_ILS          13
0226 #define PC_MLS          14
0227 #define PC_HLS          15
0228 #define PC_LS_PDR       16
0229 #define PC_LS_NONE      17
0230 #define LS2MIB(x)   ((x)-PC_QLS)
0231 #define MIB2LS(x)   ((x)+PC_QLS)
0232 
0233 #define PC_TIMEOUT_TB_MAX   18  /* timer TB_max */
0234 #define PC_TIMEOUT_TB_MIN   19  /* timer TB_min */
0235 #define PC_TIMEOUT_C_MIN    20  /* timer C_Min */
0236 #define PC_TIMEOUT_T_OUT    21  /* timer T_Out */
0237 #define PC_TIMEOUT_TL_MIN   22  /* timer TL_Min */
0238 #define PC_TIMEOUT_T_NEXT   23  /* timer t_next[] */
0239 #define PC_TIMEOUT_LCT      24
0240 #define PC_NSE          25  /* NOISE hardware timer */
0241 #define PC_LEM          26  /* LEM done */
0242 
0243 /*
0244  * RMT events                 meaning       from
0245  */
0246 #define RM_RING_OP  1       /* ring operational MAC */
0247 #define RM_RING_NON_OP  2       /* ring not operational MAC */
0248 #define RM_MY_BEACON    3       /* recvd my beacon  MAC */
0249 #define RM_OTHER_BEACON 4       /* recvd other beacon   MAC */
0250 #define RM_MY_CLAIM 5       /* recvd my claim   MAC */
0251 #define RM_TRT_EXP  6       /* TRT exp      MAC */
0252 #define RM_VALID_CLAIM  7       /* claim from dup addr  MAC */
0253 #define RM_JOIN     8       /* signal rm_join   CFM */
0254 #define RM_LOOP     9       /* signal rm_loop   CFM */
0255 #define RM_DUP_ADDR 10      /* dup_addr_test hange  SMT-NIF */
0256 #define RM_ENABLE_FLAG  11      /* enable flag */
0257 
0258 #define RM_TIMEOUT_NON_OP   12  /* timeout T_Non_OP */
0259 #define RM_TIMEOUT_T_STUCK  13  /* timeout T_Stuck  */
0260 #define RM_TIMEOUT_ANNOUNCE 14  /* timeout T_Announce   */
0261 #define RM_TIMEOUT_T_DIRECT 15  /* timeout T_Direct */
0262 #define RM_TIMEOUT_D_MAX    16  /* timeout D_Max    */
0263 #define RM_TIMEOUT_POLL     17  /* claim/beacon poller  */
0264 #define RM_TX_STATE_CHANGE  18  /* To restart timer for D_Max */
0265 
0266 /*
0267  * SMT events
0268  */
0269 #define SM_TIMER    1       /* timer */
0270 #define SM_FAST     2       /* smt_force_irq */
0271 
0272 /* PC modes */
0273 #define PM_NONE     0
0274 #define PM_PEER     1
0275 #define PM_TREE     2
0276 
0277 /*
0278  * PCM withhold codes
0279  * MIB PC-WithholdType ENUM
0280  */
0281 #define PC_WH_NONE  0       /* ok */
0282 #define PC_WH_M_M   1       /* M to M */
0283 #define PC_WH_OTHER 2       /* other incompatible phys */
0284 #define PC_WH_PATH  3       /* path not available */
0285 /*
0286  * LCT duration
0287  */
0288 #define LC_SHORT    1       /* short LCT */
0289 #define LC_MEDIUM   2       /* medium LCT */
0290 #define LC_LONG     3       /* long LCT */
0291 #define LC_EXTENDED 4       /* extended LCT */
0292 
0293 /*
0294  * path_test values
0295  */
0296 #define PT_NONE     0
0297 #define PT_TESTING  1       /* test is running */
0298 #define PT_PASSED   2       /* test passed */
0299 #define PT_FAILED   3       /* test failed */
0300 #define PT_PENDING  4       /* path test follows */
0301 #define PT_EXITING  5       /* disconnected while in trace/leave */
0302 
0303 /*
0304  * duplicate address test
0305  * MIB DupAddressTest ENUM
0306  */
0307 #define DA_NONE     0       /*      */
0308 #define DA_PASSED   1       /* test passed */
0309 #define DA_FAILED   2       /* test failed */
0310 
0311 
0312 /*
0313  * optical bypass
0314  */
0315 #define BP_DEINSERT 0       /* disable bypass */
0316 #define BP_INSERT   1       /* enable bypass */
0317 
0318 /*
0319  * ODL enable/disable
0320  */
0321 #define PM_TRANSMIT_DISABLE 0   /* disable xmit */
0322 #define PM_TRANSMIT_ENABLE  1   /* enable xmit */
0323 
0324 /*
0325  * parameter for config_mux
0326  * note : number is index in config_endec table !
0327  */
0328 #define MUX_THRUA   0       /* through A */
0329 #define MUX_THRUB   1       /* through B */
0330 #define MUX_WRAPA   2       /* wrap A */
0331 #define MUX_WRAPB   3       /* wrap B */
0332 #define MUX_ISOLATE 4       /* isolated */
0333 #define MUX_WRAPS   5       /* SAS */
0334 
0335 /*
0336  * MAC control
0337  */
0338 #define MA_RESET    0
0339 #define MA_BEACON   1
0340 #define MA_CLAIM    2
0341 #define MA_DIRECTED 3       /* directed beacon */
0342 #define MA_TREQ     4       /* change T_Req */
0343 #define MA_OFFLINE  5       /* switch MAC to offline */
0344 
0345 
0346 /*
0347  * trace prop
0348  * bit map for trace propagation
0349  */
0350 #define ENTITY_MAC  (NUMPHYS)
0351 #define ENTITY_PHY(p)   (p)
0352 #define ENTITY_BIT(m)   (1<<(m))
0353 
0354 /*
0355  * Resource Tag Types
0356  */
0357 #define PATH_ISO    0   /* isolated */
0358 #define PATH_PRIM   3   /* primary path */
0359 #define PATH_THRU   5   /* through path */
0360 
0361 #define RES_MAC     2   /* resource type MAC */
0362 #define RES_PORT    4   /* resource type PORT */
0363 
0364 
0365 /*
0366  * CFM state
0367  * oops: MUST MATCH CF-StateType in SMT7.2 !
0368  */
0369 #define SC0_ISOLATED    0       /* isolated */
0370 #define SC1_WRAP_A  5       /* wrap A (not used) */
0371 #define SC2_WRAP_B  6       /* wrap B (not used) */
0372 #define SC4_THRU_A  12      /* through A */
0373 #define SC5_THRU_B  7       /* through B (used in SMT 6.2) */
0374 #define SC7_WRAP_S  8       /* SAS (not used) */
0375 #define SC9_C_WRAP_A    9       /* c wrap A */
0376 #define SC10_C_WRAP_B   10      /* c wrap B */
0377 #define SC11_C_WRAP_S   11      /* c wrap S */
0378 
0379 /*
0380  * convert MIB time in units of 80nS to uS
0381  */
0382 #define MIB2US(t)       ((t)/12)
0383 #define SEC2MIB(s)  ((s)*12500000L)
0384 /*
0385  * SMT timer
0386  */
0387 struct smt_timer {
0388     struct smt_timer    *tm_next ;  /* linked list */
0389     struct s_smc        *tm_smc ;   /* pointer to context */
0390     u_long          tm_delta ;  /* delta time */
0391     u_long          tm_token ;  /* token value */
0392     u_short         tm_active ; /* flag : active/inactive */
0393     u_short         tm_pad ;    /* pad field */
0394 } ;
0395 
0396 /*
0397  * communication structures
0398  */
0399 struct mac_parameter {
0400     u_long  t_neg ;     /* T_Neg parameter */
0401     u_long  t_pri ;     /* T_Pri register in MAC */
0402 } ;
0403 
0404 /*
0405  * MAC counters
0406  */
0407 struct mac_counter {
0408     u_long  mac_nobuf_counter ; /* MAC SW counter: no buffer */
0409     u_long  mac_r_restart_counter ; /* MAC SW counter: rx restarted */
0410 } ;
0411 
0412 /*
0413  * para struct context for SMT parameters
0414  */
0415 struct s_pcon {
0416     int pc_len ;
0417     int pc_err ;
0418     int pc_badset ;
0419     void    *pc_p ;
0420 } ;
0421 
0422 /*
0423  * link error monitor
0424  */
0425 #define LEM_AVG 5
0426 struct lem_counter {
0427 #ifdef  AM29K
0428     int lem_on  ;
0429     u_long  lem_errors ;
0430     u_long  lem_symbols ;
0431     u_long  lem_tsymbols ;
0432     int lem_s_count ;
0433     int lem_n_s ;
0434     int lem_values ;
0435     int lem_index ;
0436     int lem_avg_ber[LEM_AVG] ;
0437     int lem_sum ;
0438 #else
0439     u_short lem_float_ber ;     /* 10E-nn bit error rate */
0440     u_long  lem_errors ;        /* accumulated error count */
0441     u_short lem_on  ;
0442 #endif
0443 } ;
0444 
0445 #define NUMBITS 10
0446 
0447 #ifdef  AMDPLC
0448 
0449 /*
0450  * PLC state table
0451  */
0452 struct s_plc {
0453     u_short p_state ;       /* current state */
0454     u_short p_bits ;        /* number of bits to send */
0455     u_short p_start ;       /* first bit pos */
0456     u_short p_pad ;         /* padding for alignment */
0457     u_long soft_err ;       /* error counter */
0458     u_long parity_err ;     /* error counter */
0459     u_long ebuf_err ;       /* error counter */
0460     u_long ebuf_cont ;      /* continuous error counter */
0461     u_long phyinv ;         /* error counter */
0462     u_long vsym_ctr ;       /* error counter */
0463     u_long mini_ctr ;       /* error counter */
0464     u_long tpc_exp ;        /* error counter */
0465     u_long np_err ;         /* error counter */
0466     u_long b_pcs ;          /* error counter */
0467     u_long b_tpc ;          /* error counter */
0468     u_long b_tne ;          /* error counter */
0469     u_long b_qls ;          /* error counter */
0470     u_long b_ils ;          /* error counter */
0471     u_long b_hls ;          /* error counter */
0472 } ;
0473 #endif
0474 
0475 #ifdef  PROTOTYP_INC
0476 #include "fddi/driver.pro"
0477 #else   /* PROTOTYP_INC */
0478 /*
0479  * function prototypes
0480  */
0481 #include "mbuf.h"   /* Type definitions for MBUFs */
0482 #include "smtstate.h"   /* struct smt_state */
0483 
0484 void hwt_restart(struct s_smc *smc);    /* hwt.c */
0485 SMbuf *smt_build_frame(struct s_smc *smc, int class, int type,
0486                int length); /* smt.c */
0487 SMbuf *smt_get_mbuf(struct s_smc *smc); /* drvsr.c */
0488 void *sm_to_para(struct s_smc *smc, struct smt_header *sm,
0489          int para);     /* smt.c */
0490 
0491 #ifndef SK_UNUSED
0492 #define SK_UNUSED(var)      (void)(var)
0493 #endif
0494 
0495 void queue_event(struct s_smc *smc, int class, int event);
0496 void ecm(struct s_smc *smc, int event);
0497 void ecm_init(struct s_smc *smc);
0498 void rmt(struct s_smc *smc, int event);
0499 void rmt_init(struct s_smc *smc);
0500 void pcm(struct s_smc *smc, const int np, int event);
0501 void pcm_init(struct s_smc *smc);
0502 void cfm(struct s_smc *smc, int event);
0503 void cfm_init(struct s_smc *smc);
0504 void smt_timer_start(struct s_smc *smc, struct smt_timer *timer, u_long time,
0505              u_long token);
0506 void smt_timer_stop(struct s_smc *smc, struct smt_timer *timer);
0507 void pcm_status_state(struct s_smc *smc, int np, int *type, int *state,
0508               int *remote, int *mac);
0509 void plc_config_mux(struct s_smc *smc, int mux);
0510 void sm_lem_evaluate(struct s_smc *smc);
0511 void mac_update_counter(struct s_smc *smc);
0512 void sm_ma_control(struct s_smc *smc, int mode);
0513 void sm_mac_check_beacon_claim(struct s_smc *smc);
0514 void config_mux(struct s_smc *smc, int mux);
0515 void smt_agent_init(struct s_smc *smc);
0516 void smt_timer_init(struct s_smc *smc);
0517 void smt_received_pack(struct s_smc *smc, SMbuf *mb, int fs);
0518 void smt_add_para(struct s_smc *smc, struct s_pcon *pcon, u_short para,
0519           int index, int local);
0520 void smt_swap_para(struct smt_header *sm, int len, int direction);
0521 void ev_init(struct s_smc *smc);
0522 void hwt_init(struct s_smc *smc);
0523 u_long hwt_read(struct s_smc *smc);
0524 void hwt_stop(struct s_smc *smc);
0525 void hwt_start(struct s_smc *smc, u_long time);
0526 void smt_send_mbuf(struct s_smc *smc, SMbuf *mb, int fc);
0527 void smt_free_mbuf(struct s_smc *smc, SMbuf *mb);
0528 void sm_pm_bypass_req(struct s_smc *smc, int mode);
0529 void rmt_indication(struct s_smc *smc, int i);
0530 void cfm_state_change(struct s_smc *smc, int c_state);
0531 
0532 #if defined(DEBUG) || !defined(NO_SMT_PANIC)
0533 void smt_panic(struct s_smc *smc, char *text);
0534 #else
0535 #define smt_panic(smc,text)
0536 #endif /* DEBUG || !NO_SMT_PANIC */
0537 
0538 void smt_stat_counter(struct s_smc *smc, int stat);
0539 void smt_timer_poll(struct s_smc *smc);
0540 u_long smt_get_time(void);
0541 u_long smt_get_tid(struct s_smc *smc);
0542 void smt_timer_done(struct s_smc *smc);
0543 void smt_fixup_mib(struct s_smc *smc);
0544 void smt_reset_defaults(struct s_smc *smc, int level);
0545 void smt_agent_task(struct s_smc *smc);
0546 int smt_check_para(struct s_smc *smc, struct smt_header *sm,
0547            const u_short list[]);
0548 void driver_get_bia(struct s_smc *smc, struct fddi_addr *bia_addr);
0549 
0550 #ifdef SUPERNET_3
0551 void drv_reset_indication(struct s_smc *smc);
0552 #endif  /* SUPERNET_3 */
0553 
0554 void smt_start_watchdog(struct s_smc *smc);
0555 void smt_event(struct s_smc *smc, int event);
0556 void timer_event(struct s_smc *smc, u_long token);
0557 void ev_dispatcher(struct s_smc *smc);
0558 void pcm_get_state(struct s_smc *smc, struct smt_state *state);
0559 void ecm_state_change(struct s_smc *smc, int e_state);
0560 int sm_pm_bypass_present(struct s_smc *smc);
0561 void pcm_state_change(struct s_smc *smc, int plc, int p_state);
0562 void rmt_state_change(struct s_smc *smc, int r_state);
0563 int sm_pm_get_ls(struct s_smc *smc, int phy);
0564 int pcm_get_s_port(struct s_smc *smc);
0565 int pcm_rooted_station(struct s_smc *smc);
0566 int cfm_get_mac_input(struct s_smc *smc);
0567 int cfm_get_mac_output(struct s_smc *smc);
0568 int cem_build_path(struct s_smc *smc, char *to, int path_index);
0569 int sm_mac_get_tx_state(struct s_smc *smc);
0570 char *get_pcmstate(struct s_smc *smc, int np);
0571 int smt_action(struct s_smc *smc, int class, int code, int index);
0572 u_short smt_online(struct s_smc *smc, int on);
0573 void smt_force_irq(struct s_smc *smc);
0574 void smt_pmf_received_pack(struct s_smc *smc, SMbuf *mb, int local);
0575 void smt_send_frame(struct s_smc *smc, SMbuf *mb, int fc, int local);
0576 void smt_set_timestamp(struct s_smc *smc, u_char *p);
0577 void mac_set_rx_mode(struct s_smc *smc, int mode);
0578 int mac_add_multicast(struct s_smc *smc, struct fddi_addr *addr, int can);
0579 void mac_update_multicast(struct s_smc *smc);
0580 void mac_clear_multicast(struct s_smc *smc);
0581 void set_formac_tsync(struct s_smc *smc, long sync_bw);
0582 void formac_reinit_tx(struct s_smc *smc);
0583 void formac_tx_restart(struct s_smc *smc);
0584 void process_receive(struct s_smc *smc);
0585 void init_driver_fplus(struct s_smc *smc);
0586 void rtm_irq(struct s_smc *smc);
0587 void rtm_set_timer(struct s_smc *smc);
0588 void ring_status_indication(struct s_smc *smc, u_long status);
0589 void llc_recover_tx(struct s_smc *smc);
0590 void llc_restart_tx(struct s_smc *smc);
0591 void plc_clear_irq(struct s_smc *smc, int p);
0592 void plc_irq(struct s_smc *smc, int np, unsigned int cmd);
0593 int smt_set_mac_opvalues(struct s_smc *smc);
0594 
0595 #ifdef TAG_MODE
0596 void mac_do_pci_fix(struct s_smc *smc);
0597 void mac_drv_clear_tx_queue(struct s_smc *smc);
0598 void mac_drv_repair_descr(struct s_smc *smc);
0599 u_long hwt_quick_read(struct s_smc *smc);
0600 void hwt_wait_time(struct s_smc *smc, u_long start, long duration);
0601 #endif
0602 
0603 #ifdef SMT_PNMI
0604 int pnmi_init(struct s_smc* smc);
0605 int pnmi_process_ndis_id(struct s_smc *smc, u_long ndis_oid, void *buf, int len,
0606              int *BytesAccessed, int *BytesNeeded, u_char action);
0607 #endif
0608 
0609 #ifdef  SBA
0610 #ifndef _H2INC
0611 void sba();
0612 #endif
0613 void sba_raf_received_pack();
0614 void sba_timer_poll();
0615 void smt_init_sba();
0616 #endif
0617 
0618 #ifdef  ESS
0619 int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm,
0620               int fs);
0621 void ess_timer_poll(struct s_smc *smc);
0622 void ess_para_change(struct s_smc *smc);
0623 #endif
0624 
0625 #ifndef BOOT
0626 void smt_init_evc(struct s_smc *smc);
0627 void smt_srf_event(struct s_smc *smc, int code, int index, int cond);
0628 #else
0629 #define smt_init_evc(smc)
0630 #define smt_srf_event(smc,code,index,cond)
0631 #endif
0632 
0633 #ifndef SMT_REAL_TOKEN_CT
0634 void smt_emulate_token_ct(struct s_smc *smc, int mac_index);
0635 #endif
0636 
0637 #if defined(DEBUG) && !defined(BOOT)
0638 void dump_smt(struct s_smc *smc, struct smt_header *sm, char *text);
0639 #else
0640 #define dump_smt(smc,sm,text)
0641 #endif
0642 
0643 #ifdef  DEBUG
0644 void dump_hex(char *p, int len);
0645 #endif
0646 
0647 #endif  /* PROTOTYP_INC */
0648 
0649 /* PNMI default defines */
0650 #ifndef PNMI_INIT
0651 #define PNMI_INIT(smc)  /* Nothing */
0652 #endif
0653 
0654 /*
0655  * SMT_PANIC defines
0656  */
0657 #ifndef SMT_PANIC
0658 #define SMT_PANIC(smc,nr,msg)   smt_panic (smc, msg)
0659 #endif
0660 
0661 #ifndef SMT_ERR_LOG
0662 #define SMT_ERR_LOG(smc,nr,msg) SMT_PANIC (smc, nr, msg)
0663 #endif
0664 
0665 #ifndef SMT_EBASE
0666 #define SMT_EBASE   100
0667 #endif
0668 
0669 #define SMT_E0100   SMT_EBASE + 0
0670 #define SMT_E0100_MSG   "cfm FSM: invalid ce_type"
0671 #define SMT_E0101   SMT_EBASE + 1
0672 #define SMT_E0101_MSG   "CEM: case ???"
0673 #define SMT_E0102   SMT_EBASE + 2
0674 #define SMT_E0102_MSG   "CEM A: invalid state"
0675 #define SMT_E0103   SMT_EBASE + 3
0676 #define SMT_E0103_MSG   "CEM B: invalid state"
0677 #define SMT_E0104   SMT_EBASE + 4
0678 #define SMT_E0104_MSG   "CEM M: invalid state"
0679 #define SMT_E0105   SMT_EBASE + 5
0680 #define SMT_E0105_MSG   "CEM S: invalid state"
0681 #define SMT_E0106   SMT_EBASE + 6
0682 #define SMT_E0106_MSG   "CFM : invalid state"
0683 #define SMT_E0107   SMT_EBASE + 7
0684 #define SMT_E0107_MSG   "ECM : invalid state"
0685 #define SMT_E0108   SMT_EBASE + 8
0686 #define SMT_E0108_MSG   "prop_actions : NAC in DAS CFM"
0687 #define SMT_E0109   SMT_EBASE + 9
0688 #define SMT_E0109_MSG   "ST2U.FM_SERRSF error in special frame"
0689 #define SMT_E0110   SMT_EBASE + 10
0690 #define SMT_E0110_MSG   "ST2U.FM_SRFRCTOV recv. count. overflow"
0691 #define SMT_E0111   SMT_EBASE + 11
0692 #define SMT_E0111_MSG   "ST2U.FM_SNFSLD NP & FORMAC simult. load"
0693 #define SMT_E0112   SMT_EBASE + 12
0694 #define SMT_E0112_MSG   "ST2U.FM_SRCVFRM single-frame recv.-mode"
0695 #define SMT_E0113   SMT_EBASE + 13
0696 #define SMT_E0113_MSG   "FPLUS: Buffer Memory Error"
0697 #define SMT_E0114   SMT_EBASE + 14
0698 #define SMT_E0114_MSG   "ST2U.FM_SERRSF error in special frame"
0699 #define SMT_E0115   SMT_EBASE + 15
0700 #define SMT_E0115_MSG   "ST3L: parity error in receive queue 2"
0701 #define SMT_E0116   SMT_EBASE + 16
0702 #define SMT_E0116_MSG   "ST3L: parity error in receive queue 1"
0703 #define SMT_E0117   SMT_EBASE + 17
0704 #define SMT_E0117_MSG   "E_SMT_001: RxD count for receive queue 1 = 0"
0705 #define SMT_E0118   SMT_EBASE + 18
0706 #define SMT_E0118_MSG   "PCM : invalid state"
0707 #define SMT_E0119   SMT_EBASE + 19
0708 #define SMT_E0119_MSG   "smt_add_para"
0709 #define SMT_E0120   SMT_EBASE + 20
0710 #define SMT_E0120_MSG   "smt_set_para"
0711 #define SMT_E0121   SMT_EBASE + 21
0712 #define SMT_E0121_MSG   "invalid event in dispatcher"
0713 #define SMT_E0122   SMT_EBASE + 22
0714 #define SMT_E0122_MSG   "RMT : invalid state"
0715 #define SMT_E0123   SMT_EBASE + 23
0716 #define SMT_E0123_MSG   "SBA: state machine has invalid state"
0717 #define SMT_E0124   SMT_EBASE + 24
0718 #define SMT_E0124_MSG   "sba_free_session() called with NULL pointer"
0719 #define SMT_E0125   SMT_EBASE + 25
0720 #define SMT_E0125_MSG   "SBA : invalid session pointer"
0721 #define SMT_E0126   SMT_EBASE + 26
0722 #define SMT_E0126_MSG   "smt_free_mbuf() called with NULL pointer\n"
0723 #define SMT_E0127   SMT_EBASE + 27
0724 #define SMT_E0127_MSG   "sizeof evcs"
0725 #define SMT_E0128   SMT_EBASE + 28
0726 #define SMT_E0128_MSG   "evc->evc_cond_state = 0"
0727 #define SMT_E0129   SMT_EBASE + 29
0728 #define SMT_E0129_MSG   "evc->evc_multiple = 0"
0729 #define SMT_E0130   SMT_EBASE + 30
0730 #define SMT_E0130_MSG   write_mdr_warning
0731 #define SMT_E0131   SMT_EBASE + 31
0732 #define SMT_E0131_MSG   cam_warning
0733 #define SMT_E0132   SMT_EBASE + 32
0734 #define SMT_E0132_MSG   "ST1L.FM_SPCEPDx parity/coding error"
0735 #define SMT_E0133   SMT_EBASE + 33
0736 #define SMT_E0133_MSG   "ST1L.FM_STBURx tx buffer underrun"
0737 #define SMT_E0134   SMT_EBASE + 34
0738 #define SMT_E0134_MSG   "ST1L.FM_SPCEPDx parity error"
0739 #define SMT_E0135   SMT_EBASE + 35
0740 #define SMT_E0135_MSG   "RMT: duplicate MAC address detected. Ring left!"
0741 #define SMT_E0136   SMT_EBASE + 36
0742 #define SMT_E0136_MSG   "Elasticity Buffer hang-up"
0743 #define SMT_E0137   SMT_EBASE + 37
0744 #define SMT_E0137_MSG   "SMT: queue overrun"
0745 #define SMT_E0138   SMT_EBASE + 38
0746 #define SMT_E0138_MSG   "RMT: duplicate MAC address detected. Ring NOT left!"
0747 #endif  /* _CMTDEF_ */