0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef _SCMECM_
0012 #define _SCMECM_
0013
0014 #if defined(PCI) && !defined(OSDEF)
0015
0016
0017
0018 #define OSDEF
0019 #endif
0020
0021 #ifdef PCI
0022 #ifndef SUPERNET_3
0023 #define SUPERNET_3
0024 #endif
0025 #ifndef TAG_MODE
0026 #define TAG_MODE
0027 #endif
0028 #endif
0029
0030
0031
0032
0033
0034
0035
0036 #ifdef OSDEF
0037 #include "osdef1st.h"
0038 #endif
0039 #ifdef OEM_CONCEPT
0040 #include "oemdef.h"
0041 #endif
0042 #include "smt.h"
0043 #include "cmtdef.h"
0044 #include "fddimib.h"
0045 #include "targethw.h" /* all target hw dependencies */
0046 #include "targetos.h" /* all target os dependencies */
0047 #ifdef ESS
0048 #include "sba.h"
0049 #endif
0050
0051
0052
0053
0054
0055
0056
0057
0058 struct event_queue {
0059 u_short class ;
0060 u_short event ;
0061 } ;
0062
0063
0064
0065
0066 #ifdef CONCENTRATOR
0067 #define MAX_EVENT 128
0068 #else
0069 #define MAX_EVENT 64
0070 #endif
0071
0072 struct s_queue {
0073
0074 struct event_queue ev_queue[MAX_EVENT];
0075 struct event_queue *ev_put ;
0076 struct event_queue *ev_get ;
0077 } ;
0078
0079
0080
0081
0082
0083 struct s_ecm {
0084 u_char path_test ;
0085 u_char sb_flag ;
0086 u_char DisconnectFlag ;
0087
0088 u_char ecm_line_state ;
0089 u_long trace_prop ;
0090
0091
0092
0093
0094 char ec_pad[2] ;
0095 struct smt_timer ecm_timer ;
0096 } ;
0097
0098
0099
0100
0101
0102
0103 struct s_rmt {
0104 u_char dup_addr_test ;
0105 u_char da_flag ;
0106 u_char loop_avail ;
0107 u_char sm_ma_avail ;
0108 u_char no_flag ;
0109 u_char bn_flag ;
0110 u_char jm_flag ;
0111 u_char rm_join ;
0112 u_char rm_loop ;
0113
0114 long fast_rm_join ;
0115
0116
0117
0118 struct smt_timer rmt_timer0 ;
0119 struct smt_timer rmt_timer1 ;
0120 struct smt_timer rmt_timer2 ;
0121 u_char timer0_exp ;
0122 u_char timer1_exp ;
0123 u_char timer2_exp ;
0124
0125 u_char rm_pad1;
0126 } ;
0127
0128
0129
0130
0131
0132
0133 struct s_cfm {
0134 u_char cf_state;
0135 u_char cf_pad[3] ;
0136 } ;
0137
0138
0139
0140
0141
0142
0143 #ifdef CONCENTRATOR
0144 struct s_cem {
0145 int ce_state ;
0146 int ce_port ;
0147 int ce_type ;
0148 } ;
0149
0150
0151
0152
0153 struct s_c_ring {
0154 struct s_c_ring *c_next ;
0155 char c_entity ;
0156 } ;
0157
0158 struct mib_path_config {
0159 u_long fddimibPATHConfigSMTIndex;
0160 u_long fddimibPATHConfigPATHIndex;
0161 u_long fddimibPATHConfigTokenOrder;
0162 u_long fddimibPATHConfigResourceType;
0163 #define SNMP_RES_TYPE_MAC 2
0164 #define SNMP_RES_TYPE_PORT 4
0165 u_long fddimibPATHConfigResourceIndex;
0166 u_long fddimibPATHConfigCurrentPath;
0167 #define SNMP_PATH_ISOLATED 1
0168 #define SNMP_PATH_LOCAL 2
0169 #define SNMP_PATH_SECONDARY 3
0170 #define SNMP_PATH_PRIMARY 4
0171 #define SNMP_PATH_CONCATENATED 5
0172 #define SNMP_PATH_THRU 6
0173 };
0174
0175
0176 #endif
0177
0178
0179
0180
0181 #define PCM_DISABLED 0
0182 #define PCM_CONNECTING 1
0183 #define PCM_STANDBY 2
0184 #define PCM_ACTIVE 3
0185
0186 struct s_pcm {
0187 u_char pcm_pad[3] ;
0188 } ;
0189
0190
0191
0192
0193
0194 struct s_phy {
0195
0196 struct fddi_mib_p *mib ;
0197
0198 u_char np ;
0199 u_char cf_join ;
0200 u_char cf_loop ;
0201 u_char wc_flag ;
0202 u_char pc_mode ;
0203 u_char pc_lem_fail ;
0204 u_char lc_test ;
0205 u_char scrub ;
0206 char phy_name ;
0207 u_char pmd_type[2] ;
0208 #define PMD_SK_CONN 0
0209 #define PMD_SK_PMD 1
0210 u_char pmd_scramble ;
0211
0212
0213 u_char curr_ls ;
0214 u_char ls_flag ;
0215 u_char rc_flag ;
0216 u_char tc_flag ;
0217 u_char td_flag ;
0218 u_char bitn ;
0219 u_char tr_flag ;
0220 u_char twisted ;
0221 u_char t_val[NUMBITS] ;
0222 u_char r_val[NUMBITS] ;
0223 u_long t_next[NUMBITS] ;
0224 struct smt_timer pcm_timer0 ;
0225 struct smt_timer pcm_timer1 ;
0226 struct smt_timer pcm_timer2 ;
0227 u_char timer0_exp ;
0228 u_char timer1_exp ;
0229 u_char timer2_exp ;
0230 u_char pcm_pad1[1] ;
0231 int cem_pst ;
0232 struct lem_counter lem ;
0233 #ifdef AMDPLC
0234 struct s_plc plc ;
0235 #endif
0236 } ;
0237
0238
0239
0240
0241
0242 struct s_timer {
0243 struct smt_timer *st_queue ;
0244 struct smt_timer st_fast ;
0245 } ;
0246
0247
0248
0249
0250 #define SMT_EVENT_BASE 1
0251 #define SMT_EVENT_MAC_PATH_CHANGE (SMT_EVENT_BASE+0)
0252 #define SMT_EVENT_MAC_NEIGHBOR_CHANGE (SMT_EVENT_BASE+1)
0253 #define SMT_EVENT_PORT_PATH_CHANGE (SMT_EVENT_BASE+2)
0254 #define SMT_EVENT_PORT_CONNECTION (SMT_EVENT_BASE+3)
0255
0256 #define SMT_IS_CONDITION(x) ((x)>=SMT_COND_BASE)
0257
0258 #define SMT_COND_BASE (SMT_EVENT_PORT_CONNECTION+1)
0259 #define SMT_COND_SMT_PEER_WRAP (SMT_COND_BASE+0)
0260 #define SMT_COND_SMT_HOLD (SMT_COND_BASE+1)
0261 #define SMT_COND_MAC_FRAME_ERROR (SMT_COND_BASE+2)
0262 #define SMT_COND_MAC_DUP_ADDR (SMT_COND_BASE+3)
0263 #define SMT_COND_MAC_NOT_COPIED (SMT_COND_BASE+4)
0264 #define SMT_COND_PORT_EB_ERROR (SMT_COND_BASE+5)
0265 #define SMT_COND_PORT_LER (SMT_COND_BASE+6)
0266
0267 #define SR0_WAIT 0
0268 #define SR1_HOLDOFF 1
0269 #define SR2_DISABLED 2
0270
0271 struct s_srf {
0272 u_long SRThreshold ;
0273 u_char RT_Flag ;
0274 u_char sr_state ;
0275 u_char any_report ;
0276 u_long TSR ;
0277 u_short ring_status ;
0278 } ;
0279
0280
0281
0282
0283 #define RS_RES15 (1<<15)
0284 #define RS_HARDERROR (1<<14)
0285 #define RS_SOFTERROR (1<<13)
0286 #define RS_BEACON (1<<12)
0287 #define RS_PATHTEST (1<<11)
0288 #define RS_SELFTEST (1<<10)
0289 #define RS_RES9 (1<< 9)
0290 #define RS_DISCONNECT (1<< 8)
0291 #define RS_RES7 (1<< 7)
0292 #define RS_DUPADDR (1<< 6)
0293 #define RS_NORINGOP (1<< 5)
0294 #define RS_VERSION (1<< 4)
0295 #define RS_STUCKBYPASSS (1<< 3)
0296 #define RS_EVENT (1<< 2)
0297 #define RS_RINGOPCHANGE (1<< 1)
0298 #define RS_RES0 (1<< 0)
0299
0300 #define RS_SET(smc,bit) \
0301 ring_status_indication(smc,smc->srf.ring_status |= bit)
0302 #define RS_CLEAR(smc,bit) \
0303 ring_status_indication(smc,smc->srf.ring_status &= ~bit)
0304
0305 #define RS_CLEAR_EVENT (0xffff & ~(RS_NORINGOP))
0306
0307
0308
0309 #ifndef AIX_EVENT
0310 #define AIX_EVENT(smc,opt0,opt1,opt2,opt3)
0311 #endif
0312
0313 struct s_srf_evc {
0314 u_char evc_code ;
0315 u_char evc_index ;
0316 u_char evc_rep_required ;
0317 u_short evc_para ;
0318 u_char *evc_cond_state ;
0319 u_char *evc_multiple ;
0320 } ;
0321
0322
0323
0324
0325
0326 #define SMT_MAX_TEST 5
0327 #define SMT_TID_NIF 0
0328 #define SMT_TID_NIF_TEST 1
0329 #define SMT_TID_ECF_UNA 2
0330 #define SMT_TID_ECF_DNA 3
0331 #define SMT_TID_ECF 4
0332
0333 struct smt_values {
0334 u_long smt_tvu ;
0335 u_long smt_tvd ;
0336 u_long smt_tid ;
0337 u_long pend[SMT_MAX_TEST] ;
0338 u_long uniq_time ;
0339 u_short uniq_ticks ;
0340 u_short please_reconnect ;
0341 u_long smt_last_lem ;
0342 u_long smt_last_notify ;
0343 struct smt_timer smt_timer ;
0344 u_long last_tok_time[NUMMACS];
0345 } ;
0346
0347
0348
0349
0350 #define SMT_DAS 0
0351 #define SMT_SAS 1
0352 #define SMT_NAC 2
0353
0354 struct smt_config {
0355 u_char attach_s ;
0356 u_char sas ;
0357 u_char build_ring_map ;
0358 u_char numphys ;
0359 u_char sc_pad[1] ;
0360
0361 u_long pcm_tb_min ;
0362 u_long pcm_tb_max ;
0363 u_long pcm_c_min ;
0364 u_long pcm_t_out ;
0365 u_long pcm_tl_min ;
0366 u_long pcm_lc_short ;
0367 u_long pcm_lc_medium ;
0368 u_long pcm_lc_long ;
0369 u_long pcm_lc_extended ;
0370 u_long pcm_t_next_9 ;
0371 u_long pcm_ns_max ;
0372
0373 u_long ecm_i_max ;
0374 u_long ecm_in_max ;
0375 u_long ecm_td_min ;
0376 u_long ecm_test_done ;
0377 u_long ecm_check_poll ;
0378
0379 u_long rmt_t_non_op ;
0380 u_long rmt_t_stuck ;
0381 u_long rmt_t_direct ;
0382 u_long rmt_t_jam ;
0383 u_long rmt_t_announce ;
0384 u_long rmt_t_poll ;
0385 u_long rmt_dup_mac_behavior ;
0386
0387
0388
0389
0390 u_long mac_d_max ;
0391
0392 u_long lct_short ;
0393 u_long lct_medium ;
0394 u_long lct_long ;
0395 u_long lct_extended ;
0396 } ;
0397
0398 #ifdef DEBUG
0399
0400
0401
0402 struct smt_debug {
0403 int d_smtf ;
0404 int d_smt ;
0405 int d_ecm ;
0406 int d_rmt ;
0407 int d_cfm ;
0408 int d_pcm ;
0409 int d_plc ;
0410 #ifdef ESS
0411 int d_ess ;
0412 #endif
0413 #ifdef SBA
0414 int d_sba ;
0415 #endif
0416 struct os_debug d_os;
0417 } ;
0418
0419 #ifndef DEBUG_BRD
0420
0421 extern struct smt_debug debug;
0422 #endif
0423
0424 #endif
0425
0426
0427
0428
0429
0430 struct s_smc {
0431 struct s_smt_os os ;
0432 struct s_smt_hw hw ;
0433
0434
0435
0436
0437
0438 struct smt_config s ;
0439 struct smt_values sm ;
0440 struct s_ecm e ;
0441 struct s_rmt r ;
0442 struct s_cfm cf ;
0443 #ifdef CONCENTRATOR
0444 struct s_cem ce[NUMPHYS] ;
0445 struct s_c_ring cr[NUMPHYS+NUMMACS] ;
0446 #endif
0447 struct s_pcm p ;
0448 struct s_phy y[NUMPHYS] ;
0449 struct s_queue q ;
0450 struct s_timer t ;
0451 struct s_srf srf ;
0452 struct s_srf_evc evcs[6+NUMPHYS*4] ;
0453 struct fddi_mib mib ;
0454 #ifdef SBA
0455 struct s_sba sba ;
0456 #endif
0457 #ifdef ESS
0458 struct s_ess ess ;
0459 #endif
0460 #if defined(DEBUG) && defined(DEBUG_BRD)
0461
0462 struct smt_debug debug;
0463 #endif
0464 } ;
0465
0466 extern const struct fddi_addr fddi_broadcast;
0467
0468 void all_selection_criteria(struct s_smc *smc);
0469 void card_stop(struct s_smc *smc);
0470 void init_board(struct s_smc *smc, u_char *mac_addr);
0471 int init_fplus(struct s_smc *smc);
0472 void init_plc(struct s_smc *smc);
0473 int init_smt(struct s_smc *smc, const u_char *mac_addr);
0474 void mac1_irq(struct s_smc *smc, u_short stu, u_short stl);
0475 void mac2_irq(struct s_smc *smc, u_short code_s2u, u_short code_s2l);
0476 void mac3_irq(struct s_smc *smc, u_short code_s3u, u_short code_s3l);
0477 int pcm_status_twisted(struct s_smc *smc);
0478 void plc1_irq(struct s_smc *smc);
0479 void plc2_irq(struct s_smc *smc);
0480 void read_address(struct s_smc *smc, u_char *mac_addr);
0481 void timer_irq(struct s_smc *smc);
0482
0483 #endif
0484