Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
This commit is contained in:
763
drivers/net/skfp/h/cmtdef.h
Normal file
763
drivers/net/skfp/h/cmtdef.h
Normal file
@@ -0,0 +1,763 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _CMTDEF_
|
||||
#define _CMTDEF_
|
||||
|
||||
/* **************************************************************** */
|
||||
|
||||
/*
|
||||
* implementation specific constants
|
||||
* MODIIFY THE FOLLWOING THREE DEFINES
|
||||
*/
|
||||
#define AMDPLC /* if Amd PLC chip used */
|
||||
#ifdef CONC
|
||||
#define NUMPHYS 12 /* 2 for SAS or DAS, more for Concentrator */
|
||||
#else
|
||||
#ifdef CONC_II
|
||||
#define NUMPHYS 24 /* 2 for SAS or DAS, more for Concentrator */
|
||||
#else
|
||||
#define NUMPHYS 2 /* 2 for SAS or DAS, more for Concentrator */
|
||||
#endif
|
||||
#endif
|
||||
#define NUMMACS 1 /* only 1 supported at the moment */
|
||||
#define NUMPATHS 2 /* primary and secondary path supported */
|
||||
|
||||
/*
|
||||
* DO NOT MODIFY BEYOND THIS POINT
|
||||
*/
|
||||
|
||||
/* **************************************************************** */
|
||||
|
||||
#if NUMPHYS > 2
|
||||
#define CONCENTRATOR
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Definitions for comfortable LINT usage
|
||||
*/
|
||||
#ifdef lint
|
||||
#define LINT_USE(x) (x)=(x)
|
||||
#else
|
||||
#define LINT_USE(x)
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DB_PR(flag,a,b,c) { if (flag) printf(a,b,c) ; }
|
||||
#else
|
||||
#define DB_PR(flag,a,b,c)
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_BRD
|
||||
#define DB_ECM(a,b,c) DB_PR((smc->debug.d_smt&1),a,b,c)
|
||||
#define DB_ECMN(n,a,b,c) DB_PR((smc->debug.d_ecm >=(n)),a,b,c)
|
||||
#define DB_RMT(a,b,c) DB_PR((smc->debug.d_smt&2),a,b,c)
|
||||
#define DB_RMTN(n,a,b,c) DB_PR((smc->debug.d_rmt >=(n)),a,b,c)
|
||||
#define DB_CFM(a,b,c) DB_PR((smc->debug.d_smt&4),a,b,c)
|
||||
#define DB_CFMN(n,a,b,c) DB_PR((smc->debug.d_cfm >=(n)),a,b,c)
|
||||
#define DB_PCM(a,b,c) DB_PR((smc->debug.d_smt&8),a,b,c)
|
||||
#define DB_PCMN(n,a,b,c) DB_PR((smc->debug.d_pcm >=(n)),a,b,c)
|
||||
#define DB_SMT(a,b,c) DB_PR((smc->debug.d_smtf),a,b,c)
|
||||
#define DB_SMTN(n,a,b,c) DB_PR((smc->debug.d_smtf >=(n)),a,b,c)
|
||||
#define DB_SBA(a,b,c) DB_PR((smc->debug.d_sba),a,b,c)
|
||||
#define DB_SBAN(n,a,b,c) DB_PR((smc->debug.d_sba >=(n)),a,b,c)
|
||||
#define DB_ESS(a,b,c) DB_PR((smc->debug.d_ess),a,b,c)
|
||||
#define DB_ESSN(n,a,b,c) DB_PR((smc->debug.d_ess >=(n)),a,b,c)
|
||||
#else
|
||||
#define DB_ECM(a,b,c) DB_PR((debug.d_smt&1),a,b,c)
|
||||
#define DB_ECMN(n,a,b,c) DB_PR((debug.d_ecm >=(n)),a,b,c)
|
||||
#define DB_RMT(a,b,c) DB_PR((debug.d_smt&2),a,b,c)
|
||||
#define DB_RMTN(n,a,b,c) DB_PR((debug.d_rmt >=(n)),a,b,c)
|
||||
#define DB_CFM(a,b,c) DB_PR((debug.d_smt&4),a,b,c)
|
||||
#define DB_CFMN(n,a,b,c) DB_PR((debug.d_cfm >=(n)),a,b,c)
|
||||
#define DB_PCM(a,b,c) DB_PR((debug.d_smt&8),a,b,c)
|
||||
#define DB_PCMN(n,a,b,c) DB_PR((debug.d_pcm >=(n)),a,b,c)
|
||||
#define DB_SMT(a,b,c) DB_PR((debug.d_smtf),a,b,c)
|
||||
#define DB_SMTN(n,a,b,c) DB_PR((debug.d_smtf >=(n)),a,b,c)
|
||||
#define DB_SBA(a,b,c) DB_PR((debug.d_sba),a,b,c)
|
||||
#define DB_SBAN(n,a,b,c) DB_PR((debug.d_sba >=(n)),a,b,c)
|
||||
#define DB_ESS(a,b,c) DB_PR((debug.d_ess),a,b,c)
|
||||
#define DB_ESSN(n,a,b,c) DB_PR((debug.d_ess >=(n)),a,b,c)
|
||||
#endif
|
||||
|
||||
#ifndef SS_NOT_DS
|
||||
#define SK_LOC_DECL(type,var) type var
|
||||
#else
|
||||
#define SK_LOC_DECL(type,var) static type var
|
||||
#endif
|
||||
/*
|
||||
* PHYs and PORTS
|
||||
* Note: Don't touch the definition of PA and PB. Those might be used
|
||||
* by some "for" loops.
|
||||
*/
|
||||
#define PA 0
|
||||
#define PB 1
|
||||
#if defined(SUPERNET_3) || defined(CONC_II)
|
||||
/*
|
||||
* The port indices have to be different,
|
||||
* because the MAC output goes through the 2. PLC
|
||||
* Conc II: It has to be the first port in the row.
|
||||
*/
|
||||
#define PS 0 /* Internal PLC which is the same as PA */
|
||||
#else
|
||||
#define PS 1
|
||||
#endif
|
||||
#define PM 2 /* PM .. PA+NUM_PHYS-1 */
|
||||
|
||||
/*
|
||||
* PHY types - as in path descriptor 'fddiPHYType'
|
||||
*/
|
||||
#define TA 0 /* A port */
|
||||
#define TB 1 /* B port */
|
||||
#define TS 2 /* S port */
|
||||
#define TM 3 /* M port */
|
||||
#define TNONE 4
|
||||
|
||||
|
||||
/*
|
||||
* indexes in MIB
|
||||
*/
|
||||
#define INDEX_MAC 1
|
||||
#define INDEX_PATH 1
|
||||
#define INDEX_PORT 1
|
||||
|
||||
|
||||
/*
|
||||
* policies
|
||||
*/
|
||||
#define POLICY_AA (1<<0) /* reject AA */
|
||||
#define POLICY_AB (1<<1) /* reject AB */
|
||||
#define POLICY_AS (1<<2) /* reject AS */
|
||||
#define POLICY_AM (1<<3) /* reject AM */
|
||||
#define POLICY_BA (1<<4) /* reject BA */
|
||||
#define POLICY_BB (1<<5) /* reject BB */
|
||||
#define POLICY_BS (1<<6) /* reject BS */
|
||||
#define POLICY_BM (1<<7) /* reject BM */
|
||||
#define POLICY_SA (1<<8) /* reject SA */
|
||||
#define POLICY_SB (1<<9) /* reject SB */
|
||||
#define POLICY_SS (1<<10) /* reject SS */
|
||||
#define POLICY_SM (1<<11) /* reject SM */
|
||||
#define POLICY_MA (1<<12) /* reject MA */
|
||||
#define POLICY_MB (1<<13) /* reject MB */
|
||||
#define POLICY_MS (1<<14) /* reject MS */
|
||||
#define POLICY_MM (1<<15) /* reject MM */
|
||||
|
||||
/*
|
||||
* commands
|
||||
*/
|
||||
|
||||
/*
|
||||
* EVENTS
|
||||
* event classes
|
||||
*/
|
||||
#define EVENT_ECM 1 /* event class ECM */
|
||||
#define EVENT_CFM 2 /* event class CFM */
|
||||
#define EVENT_RMT 3 /* event class RMT */
|
||||
#define EVENT_SMT 4 /* event class SMT */
|
||||
#define EVENT_PCM 5 /* event class PCM */
|
||||
#define EVENT_PCMA 5 /* event class PCMA */
|
||||
#define EVENT_PCMB 6 /* event class PCMB */
|
||||
|
||||
/* WARNING :
|
||||
* EVENT_PCM* must be last in the above list
|
||||
* if more than two ports are used, EVENT_PCM .. EVENT_PCMA+NUM_PHYS-1
|
||||
* are used !
|
||||
*/
|
||||
|
||||
#define EV_TOKEN(class,event) (((u_long)(class)<<16L)|((u_long)(event)))
|
||||
#define EV_T_CLASS(token) ((int)((token)>>16)&0xffff)
|
||||
#define EV_T_EVENT(token) ((int)(token)&0xffff)
|
||||
|
||||
/*
|
||||
* ECM events
|
||||
*/
|
||||
#define EC_CONNECT 1 /* connect request */
|
||||
#define EC_DISCONNECT 2 /* disconnect request */
|
||||
#define EC_TRACE_PROP 3 /* trace propagation */
|
||||
#define EC_PATH_TEST 4 /* path test */
|
||||
#define EC_TIMEOUT_TD 5 /* timer TD_min */
|
||||
#define EC_TIMEOUT_TMAX 6 /* timer trace_max */
|
||||
#define EC_TIMEOUT_IMAX 7 /* timer I_max */
|
||||
#define EC_TIMEOUT_INMAX 8 /* timer IN_max */
|
||||
#define EC_TEST_DONE 9 /* path test done */
|
||||
|
||||
/*
|
||||
* CFM events
|
||||
*/
|
||||
#define CF_LOOP 1 /* cf_loop flag from PCM */
|
||||
#define CF_LOOP_A 1 /* cf_loop flag from PCM */
|
||||
#define CF_LOOP_B 2 /* cf_loop flag from PCM */
|
||||
#define CF_JOIN 3 /* cf_join flag from PCM */
|
||||
#define CF_JOIN_A 3 /* cf_join flag from PCM */
|
||||
#define CF_JOIN_B 4 /* cf_join flag from PCM */
|
||||
|
||||
/*
|
||||
* PCM events
|
||||
*/
|
||||
#define PC_START 1
|
||||
#define PC_STOP 2
|
||||
#define PC_LOOP 3
|
||||
#define PC_JOIN 4
|
||||
#define PC_SIGNAL 5
|
||||
#define PC_REJECT 6
|
||||
#define PC_MAINT 7
|
||||
#define PC_TRACE 8
|
||||
#define PC_PDR 9
|
||||
#define PC_ENABLE 10
|
||||
#define PC_DISABLE 11
|
||||
|
||||
/*
|
||||
* must be ordered as in LineStateType
|
||||
*/
|
||||
#define PC_QLS 12
|
||||
#define PC_ILS 13
|
||||
#define PC_MLS 14
|
||||
#define PC_HLS 15
|
||||
#define PC_LS_PDR 16
|
||||
#define PC_LS_NONE 17
|
||||
#define LS2MIB(x) ((x)-PC_QLS)
|
||||
#define MIB2LS(x) ((x)+PC_QLS)
|
||||
|
||||
#define PC_TIMEOUT_TB_MAX 18 /* timer TB_max */
|
||||
#define PC_TIMEOUT_TB_MIN 19 /* timer TB_min */
|
||||
#define PC_TIMEOUT_C_MIN 20 /* timer C_Min */
|
||||
#define PC_TIMEOUT_T_OUT 21 /* timer T_Out */
|
||||
#define PC_TIMEOUT_TL_MIN 22 /* timer TL_Min */
|
||||
#define PC_TIMEOUT_T_NEXT 23 /* timer t_next[] */
|
||||
#define PC_TIMEOUT_LCT 24
|
||||
#define PC_NSE 25 /* NOISE hardware timer */
|
||||
#define PC_LEM 26 /* LEM done */
|
||||
|
||||
/*
|
||||
* RMT events meaning from
|
||||
*/
|
||||
#define RM_RING_OP 1 /* ring operational MAC */
|
||||
#define RM_RING_NON_OP 2 /* ring not operational MAC */
|
||||
#define RM_MY_BEACON 3 /* recvd my beacon MAC */
|
||||
#define RM_OTHER_BEACON 4 /* recvd other beacon MAC */
|
||||
#define RM_MY_CLAIM 5 /* recvd my claim MAC */
|
||||
#define RM_TRT_EXP 6 /* TRT exp MAC */
|
||||
#define RM_VALID_CLAIM 7 /* claim from dup addr MAC */
|
||||
#define RM_JOIN 8 /* signal rm_join CFM */
|
||||
#define RM_LOOP 9 /* signal rm_loop CFM */
|
||||
#define RM_DUP_ADDR 10 /* dup_addr_test hange SMT-NIF */
|
||||
#define RM_ENABLE_FLAG 11 /* enable flag */
|
||||
|
||||
#define RM_TIMEOUT_NON_OP 12 /* timeout T_Non_OP */
|
||||
#define RM_TIMEOUT_T_STUCK 13 /* timeout T_Stuck */
|
||||
#define RM_TIMEOUT_ANNOUNCE 14 /* timeout T_Announce */
|
||||
#define RM_TIMEOUT_T_DIRECT 15 /* timeout T_Direct */
|
||||
#define RM_TIMEOUT_D_MAX 16 /* timeout D_Max */
|
||||
#define RM_TIMEOUT_POLL 17 /* claim/beacon poller */
|
||||
#define RM_TX_STATE_CHANGE 18 /* To restart timer for D_Max */
|
||||
|
||||
/*
|
||||
* SMT events
|
||||
*/
|
||||
#define SM_TIMER 1 /* timer */
|
||||
#define SM_FAST 2 /* smt_force_irq */
|
||||
|
||||
/* PC modes */
|
||||
#define PM_NONE 0
|
||||
#define PM_PEER 1
|
||||
#define PM_TREE 2
|
||||
|
||||
/*
|
||||
* PCM withhold codes
|
||||
* MIB PC-WithholdType ENUM
|
||||
*/
|
||||
#define PC_WH_NONE 0 /* ok */
|
||||
#define PC_WH_M_M 1 /* M to M */
|
||||
#define PC_WH_OTHER 2 /* other incompatible phys */
|
||||
#define PC_WH_PATH 3 /* path not available */
|
||||
/*
|
||||
* LCT duration
|
||||
*/
|
||||
#define LC_SHORT 1 /* short LCT */
|
||||
#define LC_MEDIUM 2 /* medium LCT */
|
||||
#define LC_LONG 3 /* long LCT */
|
||||
#define LC_EXTENDED 4 /* extended LCT */
|
||||
|
||||
/*
|
||||
* path_test values
|
||||
*/
|
||||
#define PT_NONE 0
|
||||
#define PT_TESTING 1 /* test is running */
|
||||
#define PT_PASSED 2 /* test passed */
|
||||
#define PT_FAILED 3 /* test failed */
|
||||
#define PT_PENDING 4 /* path test follows */
|
||||
#define PT_EXITING 5 /* disconnected while in trace/leave */
|
||||
|
||||
/*
|
||||
* duplicate address test
|
||||
* MIB DupAddressTest ENUM
|
||||
*/
|
||||
#define DA_NONE 0 /* */
|
||||
#define DA_PASSED 1 /* test passed */
|
||||
#define DA_FAILED 2 /* test failed */
|
||||
|
||||
|
||||
/*
|
||||
* optical bypass
|
||||
*/
|
||||
#define BP_DEINSERT 0 /* disable bypass */
|
||||
#define BP_INSERT 1 /* enable bypass */
|
||||
|
||||
/*
|
||||
* ODL enable/disable
|
||||
*/
|
||||
#define PM_TRANSMIT_DISABLE 0 /* disable xmit */
|
||||
#define PM_TRANSMIT_ENABLE 1 /* enable xmit */
|
||||
|
||||
/*
|
||||
* parameter for config_mux
|
||||
* note : number is index in config_endec table !
|
||||
*/
|
||||
#define MUX_THRUA 0 /* through A */
|
||||
#define MUX_THRUB 1 /* through B */
|
||||
#define MUX_WRAPA 2 /* wrap A */
|
||||
#define MUX_WRAPB 3 /* wrap B */
|
||||
#define MUX_ISOLATE 4 /* isolated */
|
||||
#define MUX_WRAPS 5 /* SAS */
|
||||
|
||||
/*
|
||||
* MAC control
|
||||
*/
|
||||
#define MA_RESET 0
|
||||
#define MA_BEACON 1
|
||||
#define MA_CLAIM 2
|
||||
#define MA_DIRECTED 3 /* directed beacon */
|
||||
#define MA_TREQ 4 /* change T_Req */
|
||||
#define MA_OFFLINE 5 /* switch MAC to offline */
|
||||
|
||||
|
||||
/*
|
||||
* trace prop
|
||||
* bit map for trace propagation
|
||||
*/
|
||||
#define ENTITY_MAC (NUMPHYS)
|
||||
#define ENTITY_PHY(p) (p)
|
||||
#define ENTITY_BIT(m) (1<<(m))
|
||||
|
||||
/*
|
||||
* Resource Tag Types
|
||||
*/
|
||||
#define PATH_ISO 0 /* isolated */
|
||||
#define PATH_PRIM 3 /* primary path */
|
||||
#define PATH_THRU 5 /* through path */
|
||||
|
||||
#define RES_MAC 2 /* resource type MAC */
|
||||
#define RES_PORT 4 /* resource type PORT */
|
||||
|
||||
|
||||
/*
|
||||
* CFM state
|
||||
* oops: MUST MATCH CF-StateType in SMT7.2 !
|
||||
*/
|
||||
#define SC0_ISOLATED 0 /* isolated */
|
||||
#define SC1_WRAP_A 5 /* wrap A (not used) */
|
||||
#define SC2_WRAP_B 6 /* wrap B (not used) */
|
||||
#define SC4_THRU_A 12 /* through A */
|
||||
#define SC5_THRU_B 7 /* through B (used in SMT 6.2) */
|
||||
#define SC7_WRAP_S 8 /* SAS (not used) */
|
||||
#define SC9_C_WRAP_A 9 /* c wrap A */
|
||||
#define SC10_C_WRAP_B 10 /* c wrap B */
|
||||
#define SC11_C_WRAP_S 11 /* c wrap S */
|
||||
|
||||
/*
|
||||
* convert MIB time in units of 80nS to uS
|
||||
*/
|
||||
#define MIB2US(t) ((t)/12)
|
||||
#define SEC2MIB(s) ((s)*12500000L)
|
||||
/*
|
||||
* SMT timer
|
||||
*/
|
||||
struct smt_timer {
|
||||
struct smt_timer *tm_next ; /* linked list */
|
||||
struct s_smc *tm_smc ; /* pointer to context */
|
||||
u_long tm_delta ; /* delta time */
|
||||
u_long tm_token ; /* token value */
|
||||
u_short tm_active ; /* flag : active/inactive */
|
||||
u_short tm_pad ; /* pad field */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* communication structures
|
||||
*/
|
||||
struct mac_parameter {
|
||||
u_long t_neg ; /* T_Neg parameter */
|
||||
u_long t_pri ; /* T_Pri register in MAC */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* MAC counters
|
||||
*/
|
||||
struct mac_counter {
|
||||
u_long mac_nobuf_counter ; /* MAC SW counter: no buffer */
|
||||
u_long mac_r_restart_counter ; /* MAC SW counter: rx restarted */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* para struct context for SMT parameters
|
||||
*/
|
||||
struct s_pcon {
|
||||
int pc_len ;
|
||||
int pc_err ;
|
||||
int pc_badset ;
|
||||
void *pc_p ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* link error monitor
|
||||
*/
|
||||
#define LEM_AVG 5
|
||||
struct lem_counter {
|
||||
#ifdef AM29K
|
||||
int lem_on ;
|
||||
u_long lem_errors ;
|
||||
u_long lem_symbols ;
|
||||
u_long lem_tsymbols ;
|
||||
int lem_s_count ;
|
||||
int lem_n_s ;
|
||||
int lem_values ;
|
||||
int lem_index ;
|
||||
int lem_avg_ber[LEM_AVG] ;
|
||||
int lem_sum ;
|
||||
#else
|
||||
u_short lem_float_ber ; /* 10E-nn bit error rate */
|
||||
u_long lem_errors ; /* accumulated error count */
|
||||
u_short lem_on ;
|
||||
#endif
|
||||
} ;
|
||||
|
||||
#define NUMBITS 10
|
||||
|
||||
#ifdef AMDPLC
|
||||
|
||||
/*
|
||||
* PLC state table
|
||||
*/
|
||||
struct s_plc {
|
||||
u_short p_state ; /* current state */
|
||||
u_short p_bits ; /* number of bits to send */
|
||||
u_short p_start ; /* first bit pos */
|
||||
u_short p_pad ; /* padding for alignment */
|
||||
u_long soft_err ; /* error counter */
|
||||
u_long parity_err ; /* error counter */
|
||||
u_long ebuf_err ; /* error counter */
|
||||
u_long ebuf_cont ; /* continous error counter */
|
||||
u_long phyinv ; /* error counter */
|
||||
u_long vsym_ctr ; /* error counter */
|
||||
u_long mini_ctr ; /* error counter */
|
||||
u_long tpc_exp ; /* error counter */
|
||||
u_long np_err ; /* error counter */
|
||||
u_long b_pcs ; /* error counter */
|
||||
u_long b_tpc ; /* error counter */
|
||||
u_long b_tne ; /* error counter */
|
||||
u_long b_qls ; /* error counter */
|
||||
u_long b_ils ; /* error counter */
|
||||
u_long b_hls ; /* error counter */
|
||||
} ;
|
||||
#endif
|
||||
|
||||
#ifdef PROTOTYP_INC
|
||||
#include "fddi/driver.pro"
|
||||
#else /* PROTOTYP_INC */
|
||||
/*
|
||||
* function prototypes
|
||||
*/
|
||||
#include "h/mbuf.h" /* Type definitions for MBUFs */
|
||||
#include "h/smtstate.h" /* struct smt_state */
|
||||
|
||||
void hwt_restart(struct s_smc *smc); /* hwt.c */
|
||||
SMbuf *smt_build_frame(struct s_smc *smc, int class, int type,
|
||||
int length); /* smt.c */
|
||||
SMbuf *smt_get_mbuf(struct s_smc *smc); /* drvsr.c */
|
||||
void *sm_to_para(struct s_smc *smc, struct smt_header *sm,
|
||||
int para); /* smt.c */
|
||||
|
||||
#ifndef SK_UNUSED
|
||||
#define SK_UNUSED(var) (void)(var)
|
||||
#endif
|
||||
|
||||
void queue_event(struct s_smc *smc, int class, int event);
|
||||
void ecm(struct s_smc *smc, int event);
|
||||
void ecm_init(struct s_smc *smc);
|
||||
void rmt(struct s_smc *smc, int event);
|
||||
void rmt_init(struct s_smc *smc);
|
||||
void pcm(struct s_smc *smc, const int np, int event);
|
||||
void pcm_init(struct s_smc *smc);
|
||||
void cfm(struct s_smc *smc, int event);
|
||||
void cfm_init(struct s_smc *smc);
|
||||
void smt_timer_start(struct s_smc *smc, struct smt_timer *timer, u_long time,
|
||||
u_long token);
|
||||
void smt_timer_stop(struct s_smc *smc, struct smt_timer *timer);
|
||||
void pcm_status_state(struct s_smc *smc, int np, int *type, int *state,
|
||||
int *remote, int *mac);
|
||||
void plc_config_mux(struct s_smc *smc, int mux);
|
||||
void sm_lem_evaluate(struct s_smc *smc);
|
||||
void smt_clear_una_dna(struct s_smc *smc);
|
||||
void mac_update_counter(struct s_smc *smc);
|
||||
void sm_pm_ls_latch(struct s_smc *smc, int phy, int on_off);
|
||||
void sm_ma_control(struct s_smc *smc, int mode);
|
||||
void sm_mac_check_beacon_claim(struct s_smc *smc);
|
||||
void config_mux(struct s_smc *smc, int mux);
|
||||
void smt_agent_init(struct s_smc *smc);
|
||||
void smt_timer_init(struct s_smc *smc);
|
||||
void smt_received_pack(struct s_smc *smc, SMbuf *mb, int fs);
|
||||
void smt_add_para(struct s_smc *smc, struct s_pcon *pcon, u_short para,
|
||||
int index, int local);
|
||||
void smt_swap_para(struct smt_header *sm, int len, int direction);
|
||||
void ev_init(struct s_smc *smc);
|
||||
void hwt_init(struct s_smc *smc);
|
||||
u_long hwt_read(struct s_smc *smc);
|
||||
void hwt_stop(struct s_smc *smc);
|
||||
void hwt_start(struct s_smc *smc, u_long time);
|
||||
void smt_send_mbuf(struct s_smc *smc, SMbuf *mb, int fc);
|
||||
void smt_free_mbuf(struct s_smc *smc, SMbuf *mb);
|
||||
void sm_pm_bypass_req(struct s_smc *smc, int mode);
|
||||
void rmt_indication(struct s_smc *smc, int i);
|
||||
void cfm_state_change(struct s_smc *smc, int c_state);
|
||||
|
||||
#if defined(DEBUG) || !defined(NO_SMT_PANIC)
|
||||
void smt_panic(struct s_smc *smc, char *text);
|
||||
#else
|
||||
#define smt_panic(smc,text)
|
||||
#endif /* DEBUG || !NO_SMT_PANIC */
|
||||
|
||||
void smt_stat_counter(struct s_smc *smc, int stat);
|
||||
void smt_timer_poll(struct s_smc *smc);
|
||||
u_long smt_get_time(void);
|
||||
u_long smt_get_tid(struct s_smc *smc);
|
||||
void smt_timer_done(struct s_smc *smc);
|
||||
void smt_set_defaults(struct s_smc *smc);
|
||||
void smt_fixup_mib(struct s_smc *smc);
|
||||
void smt_reset_defaults(struct s_smc *smc, int level);
|
||||
void smt_agent_task(struct s_smc *smc);
|
||||
void smt_please_reconnect(struct s_smc *smc, int reconn_time);
|
||||
int smt_check_para(struct s_smc *smc, struct smt_header *sm,
|
||||
const u_short list[]);
|
||||
void driver_get_bia(struct s_smc *smc, struct fddi_addr *bia_addr);
|
||||
|
||||
#ifdef SUPERNET_3
|
||||
void drv_reset_indication(struct s_smc *smc);
|
||||
#endif /* SUPERNET_3 */
|
||||
|
||||
void smt_start_watchdog(struct s_smc *smc);
|
||||
void smt_event(struct s_smc *smc, int event);
|
||||
void timer_event(struct s_smc *smc, u_long token);
|
||||
void ev_dispatcher(struct s_smc *smc);
|
||||
void pcm_get_state(struct s_smc *smc, struct smt_state *state);
|
||||
void ecm_state_change(struct s_smc *smc, int e_state);
|
||||
int sm_pm_bypass_present(struct s_smc *smc);
|
||||
void pcm_state_change(struct s_smc *smc, int plc, int p_state);
|
||||
void rmt_state_change(struct s_smc *smc, int r_state);
|
||||
int sm_pm_get_ls(struct s_smc *smc, int phy);
|
||||
int pcm_get_s_port(struct s_smc *smc);
|
||||
int pcm_rooted_station(struct s_smc *smc);
|
||||
int cfm_get_mac_input(struct s_smc *smc);
|
||||
int cfm_get_mac_output(struct s_smc *smc);
|
||||
int port_to_mib(struct s_smc *smc, int p);
|
||||
int cem_build_path(struct s_smc *smc, char *to, int path_index);
|
||||
int sm_mac_get_tx_state(struct s_smc *smc);
|
||||
char *get_pcmstate(struct s_smc *smc, int np);
|
||||
int smt_action(struct s_smc *smc, int class, int code, int index);
|
||||
u_short smt_online(struct s_smc *smc, int on);
|
||||
void smt_force_irq(struct s_smc *smc);
|
||||
void smt_pmf_received_pack(struct s_smc *smc, SMbuf *mb, int local);
|
||||
void smt_send_frame(struct s_smc *smc, SMbuf *mb, int fc, int local);
|
||||
void smt_set_timestamp(struct s_smc *smc, u_char *p);
|
||||
void mac_set_rx_mode(struct s_smc *smc, int mode);
|
||||
int mac_add_multicast(struct s_smc *smc, struct fddi_addr *addr, int can);
|
||||
int mac_set_func_addr(struct s_smc *smc, u_long f_addr);
|
||||
void mac_del_multicast(struct s_smc *smc, struct fddi_addr *addr, int can);
|
||||
void mac_update_multicast(struct s_smc *smc);
|
||||
void mac_clear_multicast(struct s_smc *smc);
|
||||
void set_formac_tsync(struct s_smc *smc, long sync_bw);
|
||||
void formac_reinit_tx(struct s_smc *smc);
|
||||
void formac_tx_restart(struct s_smc *smc);
|
||||
void process_receive(struct s_smc *smc);
|
||||
void init_driver_fplus(struct s_smc *smc);
|
||||
void rtm_irq(struct s_smc *smc);
|
||||
void rtm_set_timer(struct s_smc *smc);
|
||||
void ring_status_indication(struct s_smc *smc, u_long status);
|
||||
void llc_recover_tx(struct s_smc *smc);
|
||||
void llc_restart_tx(struct s_smc *smc);
|
||||
void plc_clear_irq(struct s_smc *smc, int p);
|
||||
void plc_irq(struct s_smc *smc, int np, unsigned int cmd);
|
||||
int smt_set_mac_opvalues(struct s_smc *smc);
|
||||
|
||||
#ifdef TAG_MODE
|
||||
void mac_drv_pci_fix(struct s_smc *smc, u_long fix_value);
|
||||
void mac_do_pci_fix(struct s_smc *smc);
|
||||
void mac_drv_clear_tx_queue(struct s_smc *smc);
|
||||
void mac_drv_repair_descr(struct s_smc *smc);
|
||||
u_long hwt_quick_read(struct s_smc *smc);
|
||||
void hwt_wait_time(struct s_smc *smc, u_long start, long duration);
|
||||
#endif
|
||||
|
||||
#ifdef SMT_PNMI
|
||||
int pnmi_init(struct s_smc* smc);
|
||||
int pnmi_process_ndis_id(struct s_smc *smc, u_long ndis_oid, void *buf, int len,
|
||||
int *BytesAccessed, int *BytesNeeded, u_char action);
|
||||
#endif
|
||||
|
||||
#ifdef SBA
|
||||
#ifndef _H2INC
|
||||
void sba();
|
||||
#endif
|
||||
void sba_raf_received_pack();
|
||||
void sba_timer_poll();
|
||||
void smt_init_sba();
|
||||
#endif
|
||||
|
||||
#ifdef ESS
|
||||
int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm,
|
||||
int fs);
|
||||
void ess_timer_poll(struct s_smc *smc);
|
||||
void ess_para_change(struct s_smc *smc);
|
||||
#endif
|
||||
|
||||
#ifndef BOOT
|
||||
void smt_init_evc(struct s_smc *smc);
|
||||
void smt_srf_event(struct s_smc *smc, int code, int index, int cond);
|
||||
#else
|
||||
#define smt_init_evc(smc)
|
||||
#define smt_srf_event(smc,code,index,cond)
|
||||
#endif
|
||||
|
||||
#ifndef SMT_REAL_TOKEN_CT
|
||||
void smt_emulate_token_ct(struct s_smc *smc, int mac_index);
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) && !defined(BOOT)
|
||||
void dump_smt(struct s_smc *smc, struct smt_header *sm, char *text);
|
||||
#else
|
||||
#define dump_smt(smc,sm,text)
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
char* addr_to_string(struct fddi_addr *addr);
|
||||
void dump_hex(char *p, int len);
|
||||
#endif
|
||||
|
||||
#endif /* PROTOTYP_INC */
|
||||
|
||||
/* PNMI default defines */
|
||||
#ifndef PNMI_INIT
|
||||
#define PNMI_INIT(smc) /* Nothing */
|
||||
#endif
|
||||
#ifndef PNMI_GET_ID
|
||||
#define PNMI_GET_ID( smc, ndis_oid, buf, len, BytesWritten, BytesNeeded ) \
|
||||
( 1 ? (-1) : (-1) )
|
||||
#endif
|
||||
#ifndef PNMI_SET_ID
|
||||
#define PNMI_SET_ID( smc, ndis_oid, buf, len, BytesRead, BytesNeeded, \
|
||||
set_type) ( 1 ? (-1) : (-1) )
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SMT_PANIC defines
|
||||
*/
|
||||
#ifndef SMT_PANIC
|
||||
#define SMT_PANIC(smc,nr,msg) smt_panic (smc, msg)
|
||||
#endif
|
||||
|
||||
#ifndef SMT_ERR_LOG
|
||||
#define SMT_ERR_LOG(smc,nr,msg) SMT_PANIC (smc, nr, msg)
|
||||
#endif
|
||||
|
||||
#ifndef SMT_EBASE
|
||||
#define SMT_EBASE 100
|
||||
#endif
|
||||
|
||||
#define SMT_E0100 SMT_EBASE + 0
|
||||
#define SMT_E0100_MSG "cfm FSM: invalid ce_type"
|
||||
#define SMT_E0101 SMT_EBASE + 1
|
||||
#define SMT_E0101_MSG "CEM: case ???"
|
||||
#define SMT_E0102 SMT_EBASE + 2
|
||||
#define SMT_E0102_MSG "CEM A: invalid state"
|
||||
#define SMT_E0103 SMT_EBASE + 3
|
||||
#define SMT_E0103_MSG "CEM B: invalid state"
|
||||
#define SMT_E0104 SMT_EBASE + 4
|
||||
#define SMT_E0104_MSG "CEM M: invalid state"
|
||||
#define SMT_E0105 SMT_EBASE + 5
|
||||
#define SMT_E0105_MSG "CEM S: invalid state"
|
||||
#define SMT_E0106 SMT_EBASE + 6
|
||||
#define SMT_E0106_MSG "CFM : invalid state"
|
||||
#define SMT_E0107 SMT_EBASE + 7
|
||||
#define SMT_E0107_MSG "ECM : invalid state"
|
||||
#define SMT_E0108 SMT_EBASE + 8
|
||||
#define SMT_E0108_MSG "prop_actions : NAC in DAS CFM"
|
||||
#define SMT_E0109 SMT_EBASE + 9
|
||||
#define SMT_E0109_MSG "ST2U.FM_SERRSF error in special frame"
|
||||
#define SMT_E0110 SMT_EBASE + 10
|
||||
#define SMT_E0110_MSG "ST2U.FM_SRFRCTOV recv. count. overflow"
|
||||
#define SMT_E0111 SMT_EBASE + 11
|
||||
#define SMT_E0111_MSG "ST2U.FM_SNFSLD NP & FORMAC simult. load"
|
||||
#define SMT_E0112 SMT_EBASE + 12
|
||||
#define SMT_E0112_MSG "ST2U.FM_SRCVFRM single-frame recv.-mode"
|
||||
#define SMT_E0113 SMT_EBASE + 13
|
||||
#define SMT_E0113_MSG "FPLUS: Buffer Memory Error"
|
||||
#define SMT_E0114 SMT_EBASE + 14
|
||||
#define SMT_E0114_MSG "ST2U.FM_SERRSF error in special frame"
|
||||
#define SMT_E0115 SMT_EBASE + 15
|
||||
#define SMT_E0115_MSG "ST3L: parity error in receive queue 2"
|
||||
#define SMT_E0116 SMT_EBASE + 16
|
||||
#define SMT_E0116_MSG "ST3L: parity error in receive queue 1"
|
||||
#define SMT_E0117 SMT_EBASE + 17
|
||||
#define SMT_E0117_MSG "E_SMT_001: RxD count for receive queue 1 = 0"
|
||||
#define SMT_E0118 SMT_EBASE + 18
|
||||
#define SMT_E0118_MSG "PCM : invalid state"
|
||||
#define SMT_E0119 SMT_EBASE + 19
|
||||
#define SMT_E0119_MSG "smt_add_para"
|
||||
#define SMT_E0120 SMT_EBASE + 20
|
||||
#define SMT_E0120_MSG "smt_set_para"
|
||||
#define SMT_E0121 SMT_EBASE + 21
|
||||
#define SMT_E0121_MSG "invalid event in dispatcher"
|
||||
#define SMT_E0122 SMT_EBASE + 22
|
||||
#define SMT_E0122_MSG "RMT : invalid state"
|
||||
#define SMT_E0123 SMT_EBASE + 23
|
||||
#define SMT_E0123_MSG "SBA: state machine has invalid state"
|
||||
#define SMT_E0124 SMT_EBASE + 24
|
||||
#define SMT_E0124_MSG "sba_free_session() called with NULL pointer"
|
||||
#define SMT_E0125 SMT_EBASE + 25
|
||||
#define SMT_E0125_MSG "SBA : invalid session pointer"
|
||||
#define SMT_E0126 SMT_EBASE + 26
|
||||
#define SMT_E0126_MSG "smt_free_mbuf() called with NULL pointer\n"
|
||||
#define SMT_E0127 SMT_EBASE + 27
|
||||
#define SMT_E0127_MSG "sizeof evcs"
|
||||
#define SMT_E0128 SMT_EBASE + 28
|
||||
#define SMT_E0128_MSG "evc->evc_cond_state = 0"
|
||||
#define SMT_E0129 SMT_EBASE + 29
|
||||
#define SMT_E0129_MSG "evc->evc_multiple = 0"
|
||||
#define SMT_E0130 SMT_EBASE + 30
|
||||
#define SMT_E0130_MSG write_mdr_warning
|
||||
#define SMT_E0131 SMT_EBASE + 31
|
||||
#define SMT_E0131_MSG cam_warning
|
||||
#define SMT_E0132 SMT_EBASE + 32
|
||||
#define SMT_E0132_MSG "ST1L.FM_SPCEPDx parity/coding error"
|
||||
#define SMT_E0133 SMT_EBASE + 33
|
||||
#define SMT_E0133_MSG "ST1L.FM_STBURx tx buffer underrun"
|
||||
#define SMT_E0134 SMT_EBASE + 34
|
||||
#define SMT_E0134_MSG "ST1L.FM_SPCEPDx parity error"
|
||||
#define SMT_E0135 SMT_EBASE + 35
|
||||
#define SMT_E0135_MSG "RMT: duplicate MAC address detected. Ring left!"
|
||||
#define SMT_E0136 SMT_EBASE + 36
|
||||
#define SMT_E0136_MSG "Elasticity Buffer hang-up"
|
||||
#define SMT_E0137 SMT_EBASE + 37
|
||||
#define SMT_E0137_MSG "SMT: queue overrun"
|
||||
#define SMT_E0138 SMT_EBASE + 38
|
||||
#define SMT_E0138_MSG "RMT: duplicate MAC address detected. Ring NOT left!"
|
||||
#endif /* _CMTDEF_ */
|
69
drivers/net/skfp/h/fddi.h
Normal file
69
drivers/net/skfp/h/fddi.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _FDDI_
|
||||
#define _FDDI_
|
||||
|
||||
struct fddi_addr {
|
||||
u_char a[6] ;
|
||||
} ;
|
||||
|
||||
#define GROUP_ADDR 0x80 /* MSB in a[0] */
|
||||
|
||||
struct fddi_mac {
|
||||
struct fddi_addr mac_dest ;
|
||||
struct fddi_addr mac_source ;
|
||||
u_char mac_info[4478] ;
|
||||
} ;
|
||||
|
||||
#define FDDI_MAC_SIZE (12)
|
||||
#define FDDI_RAW_MTU (4500-5) /* exl. Pr,SD, ED/FS */
|
||||
#define FDDI_RAW (4500)
|
||||
|
||||
/*
|
||||
* FC values
|
||||
*/
|
||||
#define FC_VOID 0x40 /* void frame */
|
||||
#define FC_TOKEN 0x80 /* token */
|
||||
#define FC_RES_TOKEN 0xc0 /* restricted token */
|
||||
#define FC_SMT_INFO 0x41 /* SMT Info frame */
|
||||
/*
|
||||
* FC_SMT_LAN_LOC && FC_SMT_LOC are SK specific !
|
||||
*/
|
||||
#define FC_SMT_LAN_LOC 0x42 /* local SMT Info frame */
|
||||
#define FC_SMT_LOC 0x43 /* local SMT Info frame */
|
||||
#define FC_SMT_NSA 0x4f /* SMT NSA frame */
|
||||
#define FC_MAC 0xc0 /* MAC frame */
|
||||
#define FC_BEACON 0xc2 /* MAC beacon frame */
|
||||
#define FC_CLAIM 0xc3 /* MAC claim frame */
|
||||
#define FC_SYNC_LLC 0xd0 /* sync. LLC frame */
|
||||
#define FC_ASYNC_LLC 0x50 /* async. LLC frame */
|
||||
#define FC_SYNC_BIT 0x80 /* sync. bit in FC */
|
||||
|
||||
#define FC_LLC_PRIOR 0x07 /* priority bits */
|
||||
|
||||
#define BEACON_INFO 0 /* beacon type */
|
||||
#define DBEACON_INFO 1 /* beacon type DIRECTED */
|
||||
|
||||
|
||||
/*
|
||||
* indicator bits
|
||||
*/
|
||||
#define C_INDICATOR (1<<0)
|
||||
#define A_INDICATOR (1<<1)
|
||||
#define E_INDICATOR (1<<2)
|
||||
#define I_INDICATOR (1<<6) /* SK specific */
|
||||
#define L_INDICATOR (1<<7) /* SK specific */
|
||||
|
||||
#endif /* _FDDI_ */
|
349
drivers/net/skfp/h/fddimib.h
Normal file
349
drivers/net/skfp/h/fddimib.h
Normal file
@@ -0,0 +1,349 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* FDDI MIB
|
||||
*/
|
||||
|
||||
/*
|
||||
* typedefs
|
||||
*/
|
||||
|
||||
typedef u_long Counter ;
|
||||
typedef u_char TimeStamp[8] ;
|
||||
typedef struct fddi_addr LongAddr ;
|
||||
typedef u_long Timer_2 ;
|
||||
typedef u_long Timer ;
|
||||
typedef u_short ResId ;
|
||||
typedef u_short SMTEnum ;
|
||||
typedef u_char SMTFlag ;
|
||||
|
||||
typedef struct {
|
||||
Counter count ;
|
||||
TimeStamp timestamp ;
|
||||
} SetCountType ;
|
||||
|
||||
/*
|
||||
* bits for bit string "available_path"
|
||||
*/
|
||||
#define MIB_PATH_P (1<<0)
|
||||
#define MIB_PATH_S (1<<1)
|
||||
#define MIB_PATH_L (1<<2)
|
||||
|
||||
/*
|
||||
* bits for bit string PermittedPaths & RequestedPaths (SIZE(8))
|
||||
*/
|
||||
#define MIB_P_PATH_LOCAL (1<<0)
|
||||
#define MIB_P_PATH_SEC_ALTER (1<<1)
|
||||
#define MIB_P_PATH_PRIM_ALTER (1<<2)
|
||||
#define MIB_P_PATH_CON_ALTER (1<<3)
|
||||
#define MIB_P_PATH_SEC_PREFER (1<<4)
|
||||
#define MIB_P_PATH_PRIM_PREFER (1<<5)
|
||||
#define MIB_P_PATH_CON_PREFER (1<<6)
|
||||
#define MIB_P_PATH_THRU (1<<7)
|
||||
|
||||
/*
|
||||
* enum current path
|
||||
*/
|
||||
#define MIB_PATH_ISOLATED 0
|
||||
#define MIB_PATH_LOCAL 1
|
||||
#define MIB_PATH_SECONDARY 2
|
||||
#define MIB_PATH_PRIMARY 3
|
||||
#define MIB_PATH_CONCATENATED 4
|
||||
#define MIB_PATH_THRU 5
|
||||
|
||||
/*
|
||||
* enum PMDClass
|
||||
*/
|
||||
#define MIB_PMDCLASS_MULTI 0
|
||||
#define MIB_PMDCLASS_SINGLE1 1
|
||||
#define MIB_PMDCLASS_SINGLE2 2
|
||||
#define MIB_PMDCLASS_SONET 3
|
||||
#define MIB_PMDCLASS_LCF 4
|
||||
#define MIB_PMDCLASS_TP 5
|
||||
#define MIB_PMDCLASS_UNKNOWN 6
|
||||
#define MIB_PMDCLASS_UNSPEC 7
|
||||
|
||||
/*
|
||||
* enum SMTStationStatus
|
||||
*/
|
||||
#define MIB_SMT_STASTA_CON 0
|
||||
#define MIB_SMT_STASTA_SEPA 1
|
||||
#define MIB_SMT_STASTA_THRU 2
|
||||
|
||||
|
||||
struct fddi_mib {
|
||||
/*
|
||||
* private
|
||||
*/
|
||||
u_char fddiPRPMFPasswd[8] ;
|
||||
struct smt_sid fddiPRPMFStation ;
|
||||
|
||||
#ifdef ESS
|
||||
/*
|
||||
* private variables for static allocation of the
|
||||
* End Station Support
|
||||
*/
|
||||
u_long fddiESSPayload ; /* payload for static alloc */
|
||||
u_long fddiESSOverhead ; /* frame ov for static alloc */
|
||||
u_long fddiESSMaxTNeg ; /* maximum of T-NEG */
|
||||
u_long fddiESSMinSegmentSize ; /* min size of the sync frames */
|
||||
u_long fddiESSCategory ; /* category for the Alloc req */
|
||||
short fddiESSSynchTxMode ; /* send all LLC frames as sync */
|
||||
#endif /* ESS */
|
||||
#ifdef SBA
|
||||
/*
|
||||
* private variables for the Synchronous Bandwidth Allocator
|
||||
*/
|
||||
char fddiSBACommand ; /* holds the parsed SBA cmd */
|
||||
u_char fddiSBAAvailable ; /* SBA allocatable value */
|
||||
#endif /* SBA */
|
||||
|
||||
/*
|
||||
* SMT standard mib
|
||||
*/
|
||||
struct smt_sid fddiSMTStationId ;
|
||||
u_short fddiSMTOpVersionId ;
|
||||
u_short fddiSMTHiVersionId ;
|
||||
u_short fddiSMTLoVersionId ;
|
||||
u_char fddiSMTManufacturerData[32] ;
|
||||
u_char fddiSMTUserData[32] ;
|
||||
u_short fddiSMTMIBVersionId ;
|
||||
|
||||
/*
|
||||
* ConfigGrp
|
||||
*/
|
||||
u_char fddiSMTMac_Ct ;
|
||||
u_char fddiSMTNonMaster_Ct ;
|
||||
u_char fddiSMTMaster_Ct ;
|
||||
u_char fddiSMTAvailablePaths ;
|
||||
u_short fddiSMTConfigCapabilities ;
|
||||
u_short fddiSMTConfigPolicy ;
|
||||
u_short fddiSMTConnectionPolicy ;
|
||||
u_short fddiSMTTT_Notify ;
|
||||
u_char fddiSMTStatRptPolicy ;
|
||||
u_long fddiSMTTrace_MaxExpiration ;
|
||||
u_short fddiSMTPORTIndexes[NUMPHYS] ;
|
||||
u_short fddiSMTMACIndexes ;
|
||||
u_char fddiSMTBypassPresent ;
|
||||
|
||||
/*
|
||||
* StatusGrp
|
||||
*/
|
||||
SMTEnum fddiSMTECMState ;
|
||||
SMTEnum fddiSMTCF_State ;
|
||||
SMTEnum fddiSMTStationStatus ;
|
||||
u_char fddiSMTRemoteDisconnectFlag ;
|
||||
u_char fddiSMTPeerWrapFlag ;
|
||||
|
||||
/*
|
||||
* MIBOperationGrp
|
||||
*/
|
||||
TimeStamp fddiSMTTimeStamp ;
|
||||
TimeStamp fddiSMTTransitionTimeStamp ;
|
||||
SetCountType fddiSMTSetCount ;
|
||||
struct smt_sid fddiSMTLastSetStationId ;
|
||||
|
||||
struct fddi_mib_m {
|
||||
u_short fddiMACFrameStatusFunctions ;
|
||||
Timer_2 fddiMACT_MaxCapabilitiy ;
|
||||
Timer_2 fddiMACTVXCapabilitiy ;
|
||||
|
||||
/* ConfigGrp */
|
||||
u_char fddiMACMultiple_N ; /* private */
|
||||
u_char fddiMACMultiple_P ; /* private */
|
||||
u_char fddiMACDuplicateAddressCond ;/* private */
|
||||
u_char fddiMACAvailablePaths ;
|
||||
u_short fddiMACCurrentPath ;
|
||||
LongAddr fddiMACUpstreamNbr ;
|
||||
LongAddr fddiMACDownstreamNbr ;
|
||||
LongAddr fddiMACOldUpstreamNbr ;
|
||||
LongAddr fddiMACOldDownstreamNbr ;
|
||||
SMTEnum fddiMACDupAddressTest ;
|
||||
u_short fddiMACRequestedPaths ;
|
||||
SMTEnum fddiMACDownstreamPORTType ;
|
||||
ResId fddiMACIndex ;
|
||||
|
||||
/* AddressGrp */
|
||||
LongAddr fddiMACSMTAddress ;
|
||||
|
||||
/* OperationGrp */
|
||||
Timer_2 fddiMACT_Min ; /* private */
|
||||
Timer_2 fddiMACT_ReqMIB ;
|
||||
Timer_2 fddiMACT_Req ; /* private */
|
||||
Timer_2 fddiMACT_Neg ;
|
||||
Timer_2 fddiMACT_MaxMIB ;
|
||||
Timer_2 fddiMACT_Max ; /* private */
|
||||
Timer_2 fddiMACTvxValueMIB ;
|
||||
Timer_2 fddiMACTvxValue ; /* private */
|
||||
Timer_2 fddiMACT_Pri0 ;
|
||||
Timer_2 fddiMACT_Pri1 ;
|
||||
Timer_2 fddiMACT_Pri2 ;
|
||||
Timer_2 fddiMACT_Pri3 ;
|
||||
Timer_2 fddiMACT_Pri4 ;
|
||||
Timer_2 fddiMACT_Pri5 ;
|
||||
Timer_2 fddiMACT_Pri6 ;
|
||||
|
||||
/* CountersGrp */
|
||||
Counter fddiMACFrame_Ct ;
|
||||
Counter fddiMACCopied_Ct ;
|
||||
Counter fddiMACTransmit_Ct ;
|
||||
Counter fddiMACToken_Ct ;
|
||||
Counter fddiMACError_Ct ;
|
||||
Counter fddiMACLost_Ct ;
|
||||
Counter fddiMACTvxExpired_Ct ;
|
||||
Counter fddiMACNotCopied_Ct ;
|
||||
Counter fddiMACRingOp_Ct ;
|
||||
|
||||
Counter fddiMACSMTCopied_Ct ; /* private */
|
||||
Counter fddiMACSMTTransmit_Ct ; /* private */
|
||||
|
||||
/* private for delta ratio */
|
||||
Counter fddiMACOld_Frame_Ct ;
|
||||
Counter fddiMACOld_Copied_Ct ;
|
||||
Counter fddiMACOld_Error_Ct ;
|
||||
Counter fddiMACOld_Lost_Ct ;
|
||||
Counter fddiMACOld_NotCopied_Ct ;
|
||||
|
||||
/* FrameErrorConditionGrp */
|
||||
u_short fddiMACFrameErrorThreshold ;
|
||||
u_short fddiMACFrameErrorRatio ;
|
||||
|
||||
/* NotCopiedConditionGrp */
|
||||
u_short fddiMACNotCopiedThreshold ;
|
||||
u_short fddiMACNotCopiedRatio ;
|
||||
|
||||
/* StatusGrp */
|
||||
SMTEnum fddiMACRMTState ;
|
||||
SMTFlag fddiMACDA_Flag ;
|
||||
SMTFlag fddiMACUNDA_Flag ;
|
||||
SMTFlag fddiMACFrameErrorFlag ;
|
||||
SMTFlag fddiMACNotCopiedFlag ;
|
||||
SMTFlag fddiMACMA_UnitdataAvailable ;
|
||||
SMTFlag fddiMACHardwarePresent ;
|
||||
SMTFlag fddiMACMA_UnitdataEnable ;
|
||||
|
||||
} m[NUMMACS] ;
|
||||
#define MAC0 0
|
||||
|
||||
struct fddi_mib_a {
|
||||
ResId fddiPATHIndex ;
|
||||
u_long fddiPATHSbaPayload ;
|
||||
u_long fddiPATHSbaOverhead ;
|
||||
/* fddiPATHConfiguration is built on demand */
|
||||
/* u_long fddiPATHConfiguration ; */
|
||||
Timer fddiPATHT_Rmode ;
|
||||
u_long fddiPATHSbaAvailable ;
|
||||
Timer_2 fddiPATHTVXLowerBound ;
|
||||
Timer_2 fddiPATHT_MaxLowerBound ;
|
||||
Timer_2 fddiPATHMaxT_Req ;
|
||||
} a[NUMPATHS] ;
|
||||
#define PATH0 0
|
||||
|
||||
struct fddi_mib_p {
|
||||
/* ConfigGrp */
|
||||
SMTEnum fddiPORTMy_Type ;
|
||||
SMTEnum fddiPORTNeighborType ;
|
||||
u_char fddiPORTConnectionPolicies ;
|
||||
struct {
|
||||
u_char T_val ;
|
||||
u_char R_val ;
|
||||
} fddiPORTMacIndicated ;
|
||||
SMTEnum fddiPORTCurrentPath ;
|
||||
/* must be 4: is 32 bit in SMT format
|
||||
* indices :
|
||||
* 1 none
|
||||
* 2 tree
|
||||
* 3 peer
|
||||
*/
|
||||
u_char fddiPORTRequestedPaths[4] ;
|
||||
u_short fddiPORTMACPlacement ;
|
||||
u_char fddiPORTAvailablePaths ;
|
||||
u_char fddiPORTConnectionCapabilities ;
|
||||
SMTEnum fddiPORTPMDClass ;
|
||||
ResId fddiPORTIndex ;
|
||||
|
||||
/* OperationGrp */
|
||||
SMTEnum fddiPORTMaint_LS ;
|
||||
SMTEnum fddiPORTPC_LS ;
|
||||
u_char fddiPORTBS_Flag ;
|
||||
|
||||
/* ErrorCtrsGrp */
|
||||
Counter fddiPORTLCTFail_Ct ;
|
||||
Counter fddiPORTEBError_Ct ;
|
||||
Counter fddiPORTOldEBError_Ct ;
|
||||
|
||||
/* LerGrp */
|
||||
Counter fddiPORTLem_Reject_Ct ;
|
||||
Counter fddiPORTLem_Ct ;
|
||||
u_char fddiPORTLer_Estimate ;
|
||||
u_char fddiPORTLer_Cutoff ;
|
||||
u_char fddiPORTLer_Alarm ;
|
||||
|
||||
/* StatusGrp */
|
||||
SMTEnum fddiPORTConnectState ;
|
||||
SMTEnum fddiPORTPCMState ; /* real value */
|
||||
SMTEnum fddiPORTPCMStateX ; /* value for MIB */
|
||||
SMTEnum fddiPORTPC_Withhold ;
|
||||
SMTFlag fddiPORTHardwarePresent ;
|
||||
u_char fddiPORTLerFlag ;
|
||||
|
||||
u_char fddiPORTMultiple_U ; /* private */
|
||||
u_char fddiPORTMultiple_P ; /* private */
|
||||
u_char fddiPORTEB_Condition ; /* private */
|
||||
} p[NUMPHYS] ;
|
||||
struct {
|
||||
Counter fddiPRIVECF_Req_Rx ; /* ECF req received */
|
||||
Counter fddiPRIVECF_Reply_Rx ; /* ECF repl received */
|
||||
Counter fddiPRIVECF_Req_Tx ; /* ECF req transm */
|
||||
Counter fddiPRIVECF_Reply_Tx ; /* ECF repl transm */
|
||||
Counter fddiPRIVPMF_Get_Rx ; /* PMF Get rec */
|
||||
Counter fddiPRIVPMF_Set_Rx ; /* PMF Set rec */
|
||||
Counter fddiPRIVRDF_Rx ; /* RDF received */
|
||||
Counter fddiPRIVRDF_Tx ; /* RDF transmitted */
|
||||
} priv ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* OIDs for statistics
|
||||
*/
|
||||
#define SMT_OID_CF_STATE 1 /* fddiSMTCF_State */
|
||||
#define SMT_OID_PCM_STATE_A 2 /* fddiPORTPCMState port A */
|
||||
#define SMT_OID_PCM_STATE_B 17 /* fddiPORTPCMState port B */
|
||||
#define SMT_OID_RMT_STATE 3 /* fddiMACRMTState */
|
||||
#define SMT_OID_UNA 4 /* fddiMACUpstreamNbr */
|
||||
#define SMT_OID_DNA 5 /* fddiMACOldDownstreamNbr */
|
||||
#define SMT_OID_ERROR_CT 6 /* fddiMACError_Ct */
|
||||
#define SMT_OID_LOST_CT 7 /* fddiMACLost_Ct */
|
||||
#define SMT_OID_LEM_CT 8 /* fddiPORTLem_Ct */
|
||||
#define SMT_OID_LEM_CT_A 11 /* fddiPORTLem_Ct port A */
|
||||
#define SMT_OID_LEM_CT_B 12 /* fddiPORTLem_Ct port B */
|
||||
#define SMT_OID_LCT_FAIL_CT 9 /* fddiPORTLCTFail_Ct */
|
||||
#define SMT_OID_LCT_FAIL_CT_A 13 /* fddiPORTLCTFail_Ct port A */
|
||||
#define SMT_OID_LCT_FAIL_CT_B 14 /* fddiPORTLCTFail_Ct port B */
|
||||
#define SMT_OID_LEM_REJECT_CT 10 /* fddiPORTLem_Reject_Ct */
|
||||
#define SMT_OID_LEM_REJECT_CT_A 15 /* fddiPORTLem_Reject_Ct port A */
|
||||
#define SMT_OID_LEM_REJECT_CT_B 16 /* fddiPORTLem_Reject_Ct port B */
|
||||
|
||||
/*
|
||||
* SK MIB
|
||||
*/
|
||||
#define SMT_OID_ECF_REQ_RX 20 /* ECF requests received */
|
||||
#define SMT_OID_ECF_REPLY_RX 21 /* ECF replies received */
|
||||
#define SMT_OID_ECF_REQ_TX 22 /* ECF requests transmitted */
|
||||
#define SMT_OID_ECF_REPLY_TX 23 /* ECF replies transmitted */
|
||||
#define SMT_OID_PMF_GET_RX 24 /* PMF get requests received */
|
||||
#define SMT_OID_PMF_SET_RX 25 /* PMF set requests received */
|
||||
#define SMT_OID_RDF_RX 26 /* RDF received */
|
||||
#define SMT_OID_RDF_TX 27 /* RDF transmitted */
|
274
drivers/net/skfp/h/fplustm.h
Normal file
274
drivers/net/skfp/h/fplustm.h
Normal file
@@ -0,0 +1,274 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* AMD Fplus in tag mode data structs
|
||||
* defs for fplustm.c
|
||||
*/
|
||||
|
||||
#ifndef _FPLUS_
|
||||
#define _FPLUS_
|
||||
|
||||
#ifndef HW_PTR
|
||||
#define HW_PTR void __iomem *
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fplus error statistic structure
|
||||
*/
|
||||
struct err_st {
|
||||
u_long err_valid ; /* memory status valid */
|
||||
u_long err_abort ; /* memory status receive abort */
|
||||
u_long err_e_indicator ; /* error indicator */
|
||||
u_long err_crc ; /* error detected (CRC or length) */
|
||||
u_long err_llc_frame ; /* LLC frame */
|
||||
u_long err_mac_frame ; /* MAC frame */
|
||||
u_long err_smt_frame ; /* SMT frame */
|
||||
u_long err_imp_frame ; /* implementer frame */
|
||||
u_long err_no_buf ; /* no buffer available */
|
||||
u_long err_too_long ; /* longer than max. buffer */
|
||||
u_long err_bec_stat ; /* beacon state entered */
|
||||
u_long err_clm_stat ; /* claim state entered */
|
||||
u_long err_sifg_det ; /* short interframe gap detect */
|
||||
u_long err_phinv ; /* PHY invalid */
|
||||
u_long err_tkiss ; /* token issued */
|
||||
u_long err_tkerr ; /* token error */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Transmit Descriptor struct
|
||||
*/
|
||||
struct s_smt_fp_txd {
|
||||
u_int txd_tbctrl ; /* transmit buffer control */
|
||||
u_int txd_txdscr ; /* transmit frame status word */
|
||||
u_int txd_tbadr ; /* physical tx buffer address */
|
||||
u_int txd_ntdadr ; /* physical pointer to the next TxD */
|
||||
#ifdef ENA_64BIT_SUP
|
||||
u_int txd_tbadr_hi ; /* physical tx buffer addr (high dword)*/
|
||||
#endif
|
||||
char far *txd_virt ; /* virtual pointer to the data frag */
|
||||
/* virt pointer to the next TxD */
|
||||
struct s_smt_fp_txd volatile far *txd_next ;
|
||||
struct s_txd_os txd_os ; /* OS - specific struct */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Receive Descriptor struct
|
||||
*/
|
||||
struct s_smt_fp_rxd {
|
||||
u_int rxd_rbctrl ; /* receive buffer control */
|
||||
u_int rxd_rfsw ; /* receive frame status word */
|
||||
u_int rxd_rbadr ; /* physical rx buffer address */
|
||||
u_int rxd_nrdadr ; /* physical pointer to the next RxD */
|
||||
#ifdef ENA_64BIT_SUP
|
||||
u_int rxd_rbadr_hi ; /* physical tx buffer addr (high dword)*/
|
||||
#endif
|
||||
char far *rxd_virt ; /* virtual pointer to the data frag */
|
||||
/* virt pointer to the next RxD */
|
||||
struct s_smt_fp_rxd volatile far *rxd_next ;
|
||||
struct s_rxd_os rxd_os ; /* OS - specific struct */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Descriptor Union Definition
|
||||
*/
|
||||
union s_fp_descr {
|
||||
struct s_smt_fp_txd t ; /* pointer to the TxD */
|
||||
struct s_smt_fp_rxd r ; /* pointer to the RxD */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* TxD Ring Control struct
|
||||
*/
|
||||
struct s_smt_tx_queue {
|
||||
struct s_smt_fp_txd volatile *tx_curr_put ; /* next free TxD */
|
||||
struct s_smt_fp_txd volatile *tx_prev_put ; /* shadow put pointer */
|
||||
struct s_smt_fp_txd volatile *tx_curr_get ; /* next TxD to release*/
|
||||
u_short tx_free ; /* count of free TxD's */
|
||||
u_short tx_used ; /* count of used TxD's */
|
||||
HW_PTR tx_bmu_ctl ; /* BMU addr for tx start */
|
||||
HW_PTR tx_bmu_dsc ; /* BMU addr for curr dsc. */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* RxD Ring Control struct
|
||||
*/
|
||||
struct s_smt_rx_queue {
|
||||
struct s_smt_fp_rxd volatile *rx_curr_put ; /* next RxD to queue into */
|
||||
struct s_smt_fp_rxd volatile *rx_prev_put ; /* shadow put pointer */
|
||||
struct s_smt_fp_rxd volatile *rx_curr_get ; /* next RxD to fill */
|
||||
u_short rx_free ; /* count of free RxD's */
|
||||
u_short rx_used ; /* count of used RxD's */
|
||||
HW_PTR rx_bmu_ctl ; /* BMU addr for rx start */
|
||||
HW_PTR rx_bmu_dsc ; /* BMU addr for curr dsc. */
|
||||
} ;
|
||||
|
||||
#define VOID_FRAME_OFF 0x00
|
||||
#define CLAIM_FRAME_OFF 0x08
|
||||
#define BEACON_FRAME_OFF 0x10
|
||||
#define DBEACON_FRAME_OFF 0x18
|
||||
#define RX_FIFO_OFF 0x21 /* to get a prime number for */
|
||||
/* the RX_FIFO_SPACE */
|
||||
|
||||
#define RBC_MEM_SIZE 0x8000
|
||||
#define SEND_ASYNC_AS_SYNC 0x1
|
||||
#define SYNC_TRAFFIC_ON 0x2
|
||||
|
||||
/* big FIFO memory */
|
||||
#define RX_FIFO_SPACE 0x4000 - RX_FIFO_OFF
|
||||
#define TX_FIFO_SPACE 0x4000
|
||||
|
||||
#define TX_SMALL_FIFO 0x0900
|
||||
#define TX_MEDIUM_FIFO TX_FIFO_SPACE / 2
|
||||
#define TX_LARGE_FIFO TX_FIFO_SPACE - TX_SMALL_FIFO
|
||||
|
||||
#define RX_SMALL_FIFO 0x0900
|
||||
#define RX_LARGE_FIFO RX_FIFO_SPACE - RX_SMALL_FIFO
|
||||
|
||||
struct s_smt_fifo_conf {
|
||||
u_short rbc_ram_start ; /* FIFO start address */
|
||||
u_short rbc_ram_end ; /* FIFO size */
|
||||
u_short rx1_fifo_start ; /* rx queue start address */
|
||||
u_short rx1_fifo_size ; /* rx queue size */
|
||||
u_short rx2_fifo_start ; /* rx queue start address */
|
||||
u_short rx2_fifo_size ; /* rx queue size */
|
||||
u_short tx_s_start ; /* sync queue start address */
|
||||
u_short tx_s_size ; /* sync queue size */
|
||||
u_short tx_a0_start ; /* async queue A0 start address */
|
||||
u_short tx_a0_size ; /* async queue A0 size */
|
||||
u_short fifo_config_mode ; /* FIFO configuration mode */
|
||||
} ;
|
||||
|
||||
#define FM_ADDRX (FM_ADDET|FM_EXGPA0|FM_EXGPA1)
|
||||
|
||||
struct s_smt_fp {
|
||||
u_short mdr2init ; /* mode register 2 init value */
|
||||
u_short mdr3init ; /* mode register 3 init value */
|
||||
u_short frselreg_init ; /* frame selection register init val */
|
||||
u_short rx_mode ; /* address mode broad/multi/promisc */
|
||||
u_short nsa_mode ;
|
||||
u_short rx_prom ;
|
||||
u_short exgpa ;
|
||||
|
||||
struct err_st err_stats ; /* error statistics */
|
||||
|
||||
/*
|
||||
* MAC buffers
|
||||
*/
|
||||
struct fddi_mac_sf { /* special frame build buffer */
|
||||
u_char mac_fc ;
|
||||
struct fddi_addr mac_dest ;
|
||||
struct fddi_addr mac_source ;
|
||||
u_char mac_info[0x20] ;
|
||||
} mac_sfb ;
|
||||
|
||||
|
||||
/*
|
||||
* queues
|
||||
*/
|
||||
#define QUEUE_S 0
|
||||
#define QUEUE_A0 1
|
||||
#define QUEUE_R1 0
|
||||
#define QUEUE_R2 1
|
||||
#define USED_QUEUES 2
|
||||
|
||||
/*
|
||||
* queue pointers; points to the queue dependent variables
|
||||
*/
|
||||
struct s_smt_tx_queue *tx[USED_QUEUES] ;
|
||||
struct s_smt_rx_queue *rx[USED_QUEUES] ;
|
||||
|
||||
/*
|
||||
* queue dependent variables
|
||||
*/
|
||||
struct s_smt_tx_queue tx_q[USED_QUEUES] ;
|
||||
struct s_smt_rx_queue rx_q[USED_QUEUES] ;
|
||||
|
||||
/*
|
||||
* FIFO configuration struct
|
||||
*/
|
||||
struct s_smt_fifo_conf fifo ;
|
||||
|
||||
/* last formac status */
|
||||
u_short s2u ;
|
||||
u_short s2l ;
|
||||
|
||||
/* calculated FORMAC+ reg.addr. */
|
||||
HW_PTR fm_st1u ;
|
||||
HW_PTR fm_st1l ;
|
||||
HW_PTR fm_st2u ;
|
||||
HW_PTR fm_st2l ;
|
||||
HW_PTR fm_st3u ;
|
||||
HW_PTR fm_st3l ;
|
||||
|
||||
|
||||
/*
|
||||
* multicast table
|
||||
*/
|
||||
#define FPMAX_MULTICAST 32
|
||||
#define SMT_MAX_MULTI 4
|
||||
struct {
|
||||
struct s_fpmc {
|
||||
struct fddi_addr a ; /* mc address */
|
||||
u_char n ; /* usage counter */
|
||||
u_char perm ; /* flag: permanent */
|
||||
} table[FPMAX_MULTICAST] ;
|
||||
} mc ;
|
||||
struct fddi_addr group_addr ;
|
||||
u_long func_addr ; /* functional address */
|
||||
int smt_slots_used ; /* count of table entries for the SMT */
|
||||
int os_slots_used ; /* count of table entries */
|
||||
/* used by the os-specific module */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* modes for mac_set_rx_mode()
|
||||
*/
|
||||
#define RX_ENABLE_ALLMULTI 1 /* enable all multicasts */
|
||||
#define RX_DISABLE_ALLMULTI 2 /* disable "enable all multicasts" */
|
||||
#define RX_ENABLE_PROMISC 3 /* enable promiscous */
|
||||
#define RX_DISABLE_PROMISC 4 /* disable promiscous */
|
||||
#define RX_ENABLE_NSA 5 /* enable reception of NSA frames */
|
||||
#define RX_DISABLE_NSA 6 /* disable reception of NSA frames */
|
||||
|
||||
|
||||
/*
|
||||
* support for byte reversal in AIX
|
||||
* (descriptors and pointers must be byte reversed in memory
|
||||
* CPU is big endian; M-Channel is little endian)
|
||||
*/
|
||||
#ifdef AIX
|
||||
#define MDR_REV
|
||||
#define AIX_REVERSE(x) ((((x)<<24L)&0xff000000L) + \
|
||||
(((x)<< 8L)&0x00ff0000L) + \
|
||||
(((x)>> 8L)&0x0000ff00L) + \
|
||||
(((x)>>24L)&0x000000ffL))
|
||||
#else
|
||||
#ifndef AIX_REVERSE
|
||||
#define AIX_REVERSE(x) (x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef MDR_REV
|
||||
#define MDR_REVERSE(x) ((((x)<<24L)&0xff000000L) + \
|
||||
(((x)<< 8L)&0x00ff0000L) + \
|
||||
(((x)>> 8L)&0x0000ff00L) + \
|
||||
(((x)>>24L)&0x000000ffL))
|
||||
#else
|
||||
#ifndef MDR_REVERSE
|
||||
#define MDR_REVERSE(x) (x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
424
drivers/net/skfp/h/hwmtm.h
Normal file
424
drivers/net/skfp/h/hwmtm.h
Normal file
@@ -0,0 +1,424 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _HWM_
|
||||
#define _HWM_
|
||||
|
||||
#include "h/mbuf.h"
|
||||
|
||||
/*
|
||||
* MACRO for DMA synchronization:
|
||||
* The descriptor 'desc' is flushed for the device 'flag'.
|
||||
* Devices are the CPU (DDI_DMA_SYNC_FORCPU) and the
|
||||
* adapter (DDI_DMA_SYNC_FORDEV).
|
||||
*
|
||||
* 'desc' Pointer to a Rx or Tx descriptor.
|
||||
* 'flag' Flag for direction (view for CPU or DEVICE) that
|
||||
* should be synchronized.
|
||||
*
|
||||
* Empty macros and defines are specified here. The real macro
|
||||
* is os-specific and should be defined in osdef1st.h.
|
||||
*/
|
||||
#ifndef DRV_BUF_FLUSH
|
||||
#define DRV_BUF_FLUSH(desc,flag)
|
||||
#define DDI_DMA_SYNC_FORCPU
|
||||
#define DDI_DMA_SYNC_FORDEV
|
||||
#endif
|
||||
|
||||
/*
|
||||
* hardware modul dependent receive modes
|
||||
*/
|
||||
#define RX_ENABLE_PASS_SMT 21
|
||||
#define RX_DISABLE_PASS_SMT 22
|
||||
#define RX_ENABLE_PASS_NSA 23
|
||||
#define RX_DISABLE_PASS_NSA 24
|
||||
#define RX_ENABLE_PASS_DB 25
|
||||
#define RX_DISABLE_PASS_DB 26
|
||||
#define RX_DISABLE_PASS_ALL 27
|
||||
#define RX_DISABLE_LLC_PROMISC 28
|
||||
#define RX_ENABLE_LLC_PROMISC 29
|
||||
|
||||
|
||||
#ifndef DMA_RD
|
||||
#define DMA_RD 1 /* memory -> hw */
|
||||
#endif
|
||||
#ifndef DMA_WR
|
||||
#define DMA_WR 2 /* hw -> memory */
|
||||
#endif
|
||||
#define SMT_BUF 0x80
|
||||
|
||||
/*
|
||||
* bits of the frame status byte
|
||||
*/
|
||||
#define EN_IRQ_EOF 0x02 /* get IRQ after end of frame transmission */
|
||||
#define LOC_TX 0x04 /* send frame to the local SMT */
|
||||
#define LAST_FRAG 0x08 /* last TxD of the frame */
|
||||
#define FIRST_FRAG 0x10 /* first TxD of the frame */
|
||||
#define LAN_TX 0x20 /* send frame to network if set */
|
||||
#define RING_DOWN 0x40 /* error: unable to send, ring down */
|
||||
#define OUT_OF_TXD 0x80 /* error: not enough TxDs available */
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#ifdef LITTLE_ENDIAN
|
||||
#define HWM_REVERSE(x) (x)
|
||||
#else
|
||||
#define HWM_REVERSE(x) ((((x)<<24L)&0xff000000L) + \
|
||||
(((x)<< 8L)&0x00ff0000L) + \
|
||||
(((x)>> 8L)&0x0000ff00L) + \
|
||||
(((x)>>24L)&0x000000ffL))
|
||||
#endif
|
||||
|
||||
#define C_INDIC (1L<<25)
|
||||
#define A_INDIC (1L<<26)
|
||||
#define RD_FS_LOCAL 0x80
|
||||
|
||||
/*
|
||||
* DEBUG FLAGS
|
||||
*/
|
||||
#define DEBUG_SMTF 1
|
||||
#define DEBUG_SMT 2
|
||||
#define DEBUG_ECM 3
|
||||
#define DEBUG_RMT 4
|
||||
#define DEBUG_CFM 5
|
||||
#define DEBUG_PCM 6
|
||||
#define DEBUG_SBA 7
|
||||
#define DEBUG_ESS 8
|
||||
|
||||
#define DB_HWM_RX 10
|
||||
#define DB_HWM_TX 11
|
||||
#define DB_HWM_GEN 12
|
||||
|
||||
struct s_mbuf_pool {
|
||||
#ifndef MB_OUTSIDE_SMC
|
||||
SMbuf mb[MAX_MBUF] ; /* mbuf pool */
|
||||
#endif
|
||||
SMbuf *mb_start ; /* points to the first mb */
|
||||
SMbuf *mb_free ; /* free queue */
|
||||
} ;
|
||||
|
||||
struct hwm_r {
|
||||
/*
|
||||
* hardware modul specific receive variables
|
||||
*/
|
||||
u_int len ; /* length of the whole frame */
|
||||
char *mb_pos ; /* SMbuf receive position */
|
||||
} ;
|
||||
|
||||
struct hw_modul {
|
||||
/*
|
||||
* All hardware modul specific variables
|
||||
*/
|
||||
struct s_mbuf_pool mbuf_pool ;
|
||||
struct hwm_r r ;
|
||||
|
||||
union s_fp_descr volatile *descr_p ; /* points to the desriptor area */
|
||||
|
||||
u_short pass_SMT ; /* pass SMT frames */
|
||||
u_short pass_NSA ; /* pass all NSA frames */
|
||||
u_short pass_DB ; /* pass Direct Beacon Frames */
|
||||
u_short pass_llc_promisc ; /* pass all llc frames (default ON) */
|
||||
|
||||
SMbuf *llc_rx_pipe ; /* points to the first queued llc fr */
|
||||
SMbuf *llc_rx_tail ; /* points to the last queued llc fr */
|
||||
int queued_rx_frames ; /* number of queued frames */
|
||||
|
||||
SMbuf *txd_tx_pipe ; /* points to first mb in the txd ring */
|
||||
SMbuf *txd_tx_tail ; /* points to last mb in the txd ring */
|
||||
int queued_txd_mb ; /* number of SMT MBufs in txd ring */
|
||||
|
||||
int rx_break ; /* rev. was breaked because ind. off */
|
||||
int leave_isr ; /* leave fddi_isr immedeately if set */
|
||||
int isr_flag ; /* set, when HWM is entered from isr */
|
||||
/*
|
||||
* varaibles for the current transmit frame
|
||||
*/
|
||||
struct s_smt_tx_queue *tx_p ; /* pointer to the transmit queue */
|
||||
u_long tx_descr ; /* tx descriptor for FORMAC+ */
|
||||
int tx_len ; /* tx frame length */
|
||||
SMbuf *tx_mb ; /* SMT tx MBuf pointer */
|
||||
char *tx_data ; /* data pointer to the SMT tx Mbuf */
|
||||
|
||||
int detec_count ; /* counter for out of RxD condition */
|
||||
u_long rx_len_error ; /* rx len FORMAC != sum of fragments */
|
||||
} ;
|
||||
|
||||
|
||||
/*
|
||||
* DEBUG structs and macros
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
struct os_debug {
|
||||
int hwm_rx ;
|
||||
int hwm_tx ;
|
||||
int hwm_gen ;
|
||||
} ;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifdef DEBUG_BRD
|
||||
#define DB_P smc->debug
|
||||
#else
|
||||
#define DB_P debug
|
||||
#endif
|
||||
|
||||
#define DB_RX(a,b,c,lev) if (DB_P.d_os.hwm_rx >= (lev)) printf(a,b,c)
|
||||
#define DB_TX(a,b,c,lev) if (DB_P.d_os.hwm_tx >= (lev)) printf(a,b,c)
|
||||
#define DB_GEN(a,b,c,lev) if (DB_P.d_os.hwm_gen >= (lev)) printf(a,b,c)
|
||||
#else /* DEBUG */
|
||||
#define DB_RX(a,b,c,lev)
|
||||
#define DB_TX(a,b,c,lev)
|
||||
#define DB_GEN(a,b,c,lev)
|
||||
#endif /* DEBUG */
|
||||
|
||||
#ifndef SK_BREAK
|
||||
#define SK_BREAK()
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* HWM Macros
|
||||
*/
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_TX_PHYS)
|
||||
* u_long HWM_GET_TX_PHYS(txd)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to read
|
||||
* the physical address of the specified TxD.
|
||||
*
|
||||
* para txd pointer to the TxD
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_TX_PHYS(txd) (u_long)AIX_REVERSE((txd)->txd_tbadr)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_TX_LEN)
|
||||
* int HWM_GET_TX_LEN(txd)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to read
|
||||
* the fragment length of the specified TxD
|
||||
*
|
||||
* para rxd pointer to the TxD
|
||||
*
|
||||
* return the length of the fragment in bytes
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_TX_LEN(txd) ((int)AIX_REVERSE((txd)->txd_tbctrl)& RD_LENGTH)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_TX_USED)
|
||||
* txd *HWM_GET_TX_USED(smc,queue)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to get the
|
||||
* number of used TxDs for the queue, specified by the index.
|
||||
*
|
||||
* para queue the number of the send queue: Can be specified by
|
||||
* QUEUE_A0, QUEUE_S or (frame_status & QUEUE_A0)
|
||||
*
|
||||
* return number of used TxDs for this send queue
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_TX_USED(smc,queue) (int) (smc)->hw.fp.tx_q[queue].tx_used
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_CURR_TXD)
|
||||
* txd *HWM_GET_CURR_TXD(smc,queue)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to get the
|
||||
* pointer to the TxD which points to the current queue put
|
||||
* position.
|
||||
*
|
||||
* para queue the number of the send queue: Can be specified by
|
||||
* QUEUE_A0, QUEUE_S or (frame_status & QUEUE_A0)
|
||||
*
|
||||
* return pointer to the current TxD
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_CURR_TXD(smc,queue) (struct s_smt_fp_txd volatile *)\
|
||||
(smc)->hw.fp.tx_q[queue].tx_curr_put
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_TX_CHECK)
|
||||
* void HWM_TX_CHECK(smc,frame_status,low_water)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro is invoked by the OS-specific before it left it's
|
||||
* driver_send function. This macro calls mac_drv_clear_txd
|
||||
* if the free TxDs of the current transmit queue is equal or
|
||||
* lower than the given low water mark.
|
||||
*
|
||||
* para frame_status status of the frame, see design description
|
||||
* low_water low water mark of free TxD's
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#ifndef HWM_NO_FLOW_CTL
|
||||
#define HWM_TX_CHECK(smc,frame_status,low_water) {\
|
||||
if ((low_water)>=(smc)->hw.fp.tx_q[(frame_status)&QUEUE_A0].tx_free) {\
|
||||
mac_drv_clear_txd(smc) ;\
|
||||
}\
|
||||
}
|
||||
#else
|
||||
#define HWM_TX_CHECK(smc,frame_status,low_water) mac_drv_clear_txd(smc)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_RX_FRAG_LEN)
|
||||
* int HWM_GET_RX_FRAG_LEN(rxd)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to read
|
||||
* the fragment length of the specified RxD
|
||||
*
|
||||
* para rxd pointer to the RxD
|
||||
*
|
||||
* return the length of the fragment in bytes
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_RX_FRAG_LEN(rxd) ((int)AIX_REVERSE((rxd)->rxd_rbctrl)& \
|
||||
RD_LENGTH)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_RX_PHYS)
|
||||
* u_long HWM_GET_RX_PHYS(rxd)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to read
|
||||
* the physical address of the specified RxD.
|
||||
*
|
||||
* para rxd pointer to the RxD
|
||||
*
|
||||
* return the RxD's physical pointer to the data fragment
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_RX_PHYS(rxd) (u_long)AIX_REVERSE((rxd)->rxd_rbadr)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_RX_USED)
|
||||
* int HWM_GET_RX_USED(smc)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to get
|
||||
* the count of used RXDs in receive queue 1.
|
||||
*
|
||||
* return the used RXD count of receive queue 1
|
||||
*
|
||||
* NOTE: Remember, because of an ASIC bug at least one RXD should be unused
|
||||
* in the descriptor ring !
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_RX_USED(smc) ((int)(smc)->hw.fp.rx_q[QUEUE_R1].rx_used)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_RX_FREE)
|
||||
* int HWM_GET_RX_FREE(smc)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to get
|
||||
* the rxd_free count of receive queue 1.
|
||||
*
|
||||
* return the rxd_free count of receive queue 1
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_RX_FREE(smc) ((int)(smc)->hw.fp.rx_q[QUEUE_R1].rx_free-1)
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_GET_CURR_RXD)
|
||||
* rxd *HWM_GET_CURR_RXD(smc)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro may be invoked by the OS-specific module to get the
|
||||
* pointer to the RxD which points to the current queue put
|
||||
* position.
|
||||
*
|
||||
* return pointer to the current RxD
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#define HWM_GET_CURR_RXD(smc) (struct s_smt_fp_rxd volatile *)\
|
||||
(smc)->hw.fp.rx_q[QUEUE_R1].rx_curr_put
|
||||
|
||||
/*
|
||||
* BEGIN_MANUAL_ENTRY(HWM_RX_CHECK)
|
||||
* void HWM_RX_CHECK(smc,low_water)
|
||||
*
|
||||
* function MACRO (hardware module, hwmtm.h)
|
||||
* This macro is invoked by the OS-specific before it left the
|
||||
* function mac_drv_rx_complete. This macro calls mac_drv_fill_rxd
|
||||
* if the number of used RxDs is equal or lower than the
|
||||
* the given low water mark.
|
||||
*
|
||||
* para low_water low water mark of used RxD's
|
||||
*
|
||||
* END_MANUAL_ENTRY
|
||||
*/
|
||||
#ifndef HWM_NO_FLOW_CTL
|
||||
#define HWM_RX_CHECK(smc,low_water) {\
|
||||
if ((low_water) >= (smc)->hw.fp.rx_q[QUEUE_R1].rx_used) {\
|
||||
mac_drv_fill_rxd(smc) ;\
|
||||
}\
|
||||
}
|
||||
#else
|
||||
#define HWM_RX_CHECK(smc,low_water) mac_drv_fill_rxd(smc)
|
||||
#endif
|
||||
|
||||
#ifndef HWM_EBASE
|
||||
#define HWM_EBASE 500
|
||||
#endif
|
||||
|
||||
#define HWM_E0001 HWM_EBASE + 1
|
||||
#define HWM_E0001_MSG "HWM: Wrong size of s_rxd_os struct"
|
||||
#define HWM_E0002 HWM_EBASE + 2
|
||||
#define HWM_E0002_MSG "HWM: Wrong size of s_txd_os struct"
|
||||
#define HWM_E0003 HWM_EBASE + 3
|
||||
#define HWM_E0003_MSG "HWM: smt_free_mbuf() called with NULL pointer"
|
||||
#define HWM_E0004 HWM_EBASE + 4
|
||||
#define HWM_E0004_MSG "HWM: Parity error rx queue 1"
|
||||
#define HWM_E0005 HWM_EBASE + 5
|
||||
#define HWM_E0005_MSG "HWM: Encoding error rx queue 1"
|
||||
#define HWM_E0006 HWM_EBASE + 6
|
||||
#define HWM_E0006_MSG "HWM: Encoding error async tx queue"
|
||||
#define HWM_E0007 HWM_EBASE + 7
|
||||
#define HWM_E0007_MSG "HWM: Encoding error sync tx queue"
|
||||
#define HWM_E0008 HWM_EBASE + 8
|
||||
#define HWM_E0008_MSG ""
|
||||
#define HWM_E0009 HWM_EBASE + 9
|
||||
#define HWM_E0009_MSG "HWM: Out of RxD condition detected"
|
||||
#define HWM_E0010 HWM_EBASE + 10
|
||||
#define HWM_E0010_MSG "HWM: A protocol layer has tried to send a frame with an invalid frame control"
|
||||
#define HWM_E0011 HWM_EBASE + 11
|
||||
#define HWM_E0011_MSG "HWM: mac_drv_clear_tx_queue was called although the hardware wasn't stopped"
|
||||
#define HWM_E0012 HWM_EBASE + 12
|
||||
#define HWM_E0012_MSG "HWM: mac_drv_clear_rx_queue was called although the hardware wasn't stopped"
|
||||
#define HWM_E0013 HWM_EBASE + 13
|
||||
#define HWM_E0013_MSG "HWM: mac_drv_repair_descr was called although the hardware wasn't stopped"
|
||||
|
||||
#endif
|
84
drivers/net/skfp/h/lnkstat.h
Normal file
84
drivers/net/skfp/h/lnkstat.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Definition of the Error Log Structure
|
||||
* This structure will be copied into the Error Log buffer
|
||||
* during the NDIS General Request ReadErrorLog by the MAC Driver
|
||||
*/
|
||||
|
||||
struct s_error_log {
|
||||
|
||||
/*
|
||||
* place holder for token ring adapter error log (zeros)
|
||||
*/
|
||||
u_char reserved_0 ; /* byte 0 inside Error Log */
|
||||
u_char reserved_1 ; /* byte 1 */
|
||||
u_char reserved_2 ; /* byte 2 */
|
||||
u_char reserved_3 ; /* byte 3 */
|
||||
u_char reserved_4 ; /* byte 4 */
|
||||
u_char reserved_5 ; /* byte 5 */
|
||||
u_char reserved_6 ; /* byte 6 */
|
||||
u_char reserved_7 ; /* byte 7 */
|
||||
u_char reserved_8 ; /* byte 8 */
|
||||
u_char reserved_9 ; /* byte 9 */
|
||||
u_char reserved_10 ; /* byte 10 */
|
||||
u_char reserved_11 ; /* byte 11 */
|
||||
u_char reserved_12 ; /* byte 12 */
|
||||
u_char reserved_13 ; /* byte 13 */
|
||||
|
||||
/*
|
||||
* FDDI link statistics
|
||||
*/
|
||||
/*
|
||||
* smt error low
|
||||
*/
|
||||
#define SMT_ERL_AEB (1<<15) /* A elast. buffer */
|
||||
#define SMT_ERL_BLC (1<<14) /* B link error condition */
|
||||
#define SMT_ERL_ALC (1<<13) /* A link error condition */
|
||||
#define SMT_ERL_NCC (1<<12) /* not copied condition */
|
||||
#define SMT_ERL_FEC (1<<11) /* frame error condition */
|
||||
|
||||
/*
|
||||
* smt event low
|
||||
*/
|
||||
#define SMT_EVL_NCE (1<<5)
|
||||
|
||||
u_short smt_error_low ; /* byte 14/15 */
|
||||
u_short smt_error_high ; /* byte 16/17 */
|
||||
u_short smt_event_low ; /* byte 18/19 */
|
||||
u_short smt_event_high ; /* byte 20/21 */
|
||||
u_short connection_policy_violation ; /* byte 22/23 */
|
||||
u_short port_event ; /* byte 24/25 */
|
||||
u_short set_count_low ; /* byte 26/27 */
|
||||
u_short set_count_high ; /* byte 28/29 */
|
||||
u_short aci_id_code ; /* byte 30/31 */
|
||||
u_short purge_frame_counter ; /* byte 32/33 */
|
||||
|
||||
/*
|
||||
* CMT and RMT state machines
|
||||
*/
|
||||
u_short ecm_state ; /* byte 34/35 */
|
||||
u_short pcm_a_state ; /* byte 36/37 */
|
||||
u_short pcm_b_state ; /* byte 38/39 */
|
||||
u_short cfm_state ; /* byte 40/41 */
|
||||
u_short rmt_state ; /* byte 42/43 */
|
||||
|
||||
u_short not_used[30] ; /* byte 44-103 */
|
||||
|
||||
u_short ucode_version_level ; /* byte 104/105 */
|
||||
|
||||
u_short not_used_1 ; /* byte 106/107 */
|
||||
u_short not_used_2 ; /* byte 108/109 */
|
||||
} ;
|
54
drivers/net/skfp/h/mbuf.h
Normal file
54
drivers/net/skfp/h/mbuf.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _MBUF_
|
||||
#define _MBUF_
|
||||
|
||||
#ifndef PCI
|
||||
#define M_SIZE 4550
|
||||
#else
|
||||
#define M_SIZE 4504
|
||||
#endif
|
||||
|
||||
#ifndef MAX_MBUF
|
||||
#define MAX_MBUF 4
|
||||
#endif
|
||||
|
||||
#ifndef NO_STD_MBUF
|
||||
#define sm_next m_next
|
||||
#define sm_off m_off
|
||||
#define sm_len m_len
|
||||
#define sm_data m_data
|
||||
#define SMbuf Mbuf
|
||||
#define mtod smtod
|
||||
#define mtodoff smtodoff
|
||||
#endif
|
||||
|
||||
struct s_mbuf {
|
||||
struct s_mbuf *sm_next ; /* low level linked list */
|
||||
short sm_off ; /* offset in m_data */
|
||||
u_int sm_len ; /* len of data */
|
||||
#ifdef PCI
|
||||
int sm_use_count ;
|
||||
#endif
|
||||
char sm_data[M_SIZE] ;
|
||||
} ;
|
||||
|
||||
typedef struct s_mbuf SMbuf ;
|
||||
|
||||
/* mbuf head, to typed data */
|
||||
#define smtod(x,t) ((t)((x)->sm_data + (x)->sm_off))
|
||||
#define smtodoff(x,t,o) ((t)((x)->sm_data + (o)))
|
||||
|
||||
#endif /* _MBUF_ */
|
123
drivers/net/skfp/h/osdef1st.h
Normal file
123
drivers/net/skfp/h/osdef1st.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Operating system-dependent definitions that have to be defined
|
||||
* before any other header files are included.
|
||||
*/
|
||||
|
||||
// HWM (HardWare Module) Definitions
|
||||
// -----------------------
|
||||
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#define LITTLE_ENDIAN
|
||||
#else
|
||||
#define BIG_ENDIAN
|
||||
#endif
|
||||
|
||||
// this is set in the makefile
|
||||
// #define PCI /* only PCI adapters supported by this driver */
|
||||
// #define MEM_MAPPED_IO /* use memory mapped I/O */
|
||||
|
||||
|
||||
#define USE_CAN_ADDR /* DA and SA in MAC header are canonical. */
|
||||
|
||||
#define MB_OUTSIDE_SMC /* SMT Mbufs outside of smc struct. */
|
||||
|
||||
// -----------------------
|
||||
|
||||
|
||||
// SMT Definitions
|
||||
// -----------------------
|
||||
#define SYNC /* allow synchronous frames */
|
||||
|
||||
// #define SBA /* Synchronous Bandwidth Allocator support */
|
||||
/* not available as free source */
|
||||
|
||||
#define ESS /* SBA End Station Support */
|
||||
|
||||
#define SMT_PANIC(smc, nr, msg) printk(KERN_INFO "SMT PANIC: code: %d, msg: %s\n",nr,msg)
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
#define printf(s,args...) printk(KERN_INFO s, ## args)
|
||||
#endif
|
||||
|
||||
// #define HW_PTR u_long
|
||||
// -----------------------
|
||||
|
||||
|
||||
|
||||
// HWM and OS-specific buffer definitions
|
||||
// -----------------------
|
||||
|
||||
// default number of receive buffers.
|
||||
#define NUM_RECEIVE_BUFFERS 10
|
||||
|
||||
// default number of transmit buffers.
|
||||
#define NUM_TRANSMIT_BUFFERS 10
|
||||
|
||||
// Number of SMT buffers (Mbufs).
|
||||
#define NUM_SMT_BUF 4
|
||||
|
||||
// Number of TXDs for asynchronous transmit queue.
|
||||
#define HWM_ASYNC_TXD_COUNT (NUM_TRANSMIT_BUFFERS + NUM_SMT_BUF)
|
||||
|
||||
// Number of TXDs for synchronous transmit queue.
|
||||
#define HWM_SYNC_TXD_COUNT HWM_ASYNC_TXD_COUNT
|
||||
|
||||
|
||||
// Number of RXDs for receive queue #1.
|
||||
// Note: Workaround for ASIC Errata #7: One extra RXD is required.
|
||||
#if (NUM_RECEIVE_BUFFERS > 100)
|
||||
#define SMT_R1_RXD_COUNT (1 + 100)
|
||||
#else
|
||||
#define SMT_R1_RXD_COUNT (1 + NUM_RECEIVE_BUFFERS)
|
||||
#endif
|
||||
|
||||
// Number of RXDs for receive queue #2.
|
||||
#define SMT_R2_RXD_COUNT 0 // Not used.
|
||||
// -----------------------
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* OS-specific part of the transmit/receive descriptor structure (TXD/RXD).
|
||||
*
|
||||
* Note: The size of these structures must follow this rule:
|
||||
*
|
||||
* sizeof(struct) + 2*sizeof(void*) == n * 16, n >= 1
|
||||
*
|
||||
* We use the dma_addr fields under Linux to keep track of the
|
||||
* DMA address of the packet data, for later pci_unmap_single. -DaveM
|
||||
*/
|
||||
|
||||
struct s_txd_os { // os-specific part of transmit descriptor
|
||||
struct sk_buff *skb;
|
||||
dma_addr_t dma_addr;
|
||||
} ;
|
||||
|
||||
struct s_rxd_os { // os-specific part of receive descriptor
|
||||
struct sk_buff *skb;
|
||||
dma_addr_t dma_addr;
|
||||
} ;
|
||||
|
||||
|
||||
/*
|
||||
* So we do not need to make too many modifications to the generic driver
|
||||
* parts, we take advantage of the AIX byte swapping macro interface.
|
||||
*/
|
||||
|
||||
#define AIX_REVERSE(x) ((u32)le32_to_cpu((u32)(x)))
|
||||
#define MDR_REVERSE(x) ((u32)le32_to_cpu((u32)(x)))
|
142
drivers/net/skfp/h/sba.h
Normal file
142
drivers/net/skfp/h/sba.h
Normal file
@@ -0,0 +1,142 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Synchronous Bandwith Allocation (SBA) structs
|
||||
*/
|
||||
|
||||
#ifndef _SBA_
|
||||
#define _SBA_
|
||||
|
||||
#include "h/mbuf.h"
|
||||
#include "h/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
|
76
drivers/net/skfp/h/sba_def.h
Normal file
76
drivers/net/skfp/h/sba_def.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#define PHYS 0 /* physical addr */
|
||||
#define PERM_ADDR 0x80 /* permanet address */
|
||||
#define SB_STATIC 0x00000001
|
||||
#define MAX_PAYLOAD 1562
|
||||
#define PRIMARY_RING 0x00000001
|
||||
#ifndef NULL
|
||||
#define NULL 0x00
|
||||
#endif
|
||||
|
||||
/*********************** SB_Input Variable Values ***********************/
|
||||
/* may be needed when ever the SBA state machine is called */
|
||||
|
||||
#define UNKNOWN_SYNC_SOURCE 0x0001
|
||||
#define REQ_ALLOCATION 0x0002
|
||||
#define REPORT_RESP 0x0003
|
||||
#define CHANGE_RESP 0x0004
|
||||
#define TNEG 0x0005
|
||||
#define NIF 0x0006
|
||||
#define SB_STOP 0x0007
|
||||
#define SB_START 0x0008
|
||||
#define REPORT_TIMER 0x0009
|
||||
#define CHANGE_REQUIRED 0x000A
|
||||
|
||||
#define DEFAULT_OV 50
|
||||
|
||||
#ifdef SBA
|
||||
/**************************** SBA STATES *****************************/
|
||||
|
||||
#define SBA_STANDBY 0x00000000
|
||||
#define SBA_ACTIVE 0x00000001
|
||||
#define SBA_RECOVERY 0x00000002
|
||||
#define SBA_REPORT 0x00000003
|
||||
#define SBA_CHANGE 0x00000004
|
||||
|
||||
/**************************** OTHERS *********************************/
|
||||
|
||||
#define FIFTY_PERCENT 50 /* bytes per second */
|
||||
#define MAX_SESSIONS 150
|
||||
#define TWO_MINUTES 13079 /* 9.175 ms/tick */
|
||||
#define FIFTY_BYTES 50
|
||||
#define SBA_DENIED 0x0000000D
|
||||
#define I_NEED_ONE 0x00000000
|
||||
#define MAX_NODES 50
|
||||
/*#define T_REPORT 0x59682F00L*/ /* 120s/80ns in Hex */
|
||||
#define TWO_MIN 120 /* seconds */
|
||||
#define SBA_ST_UNKNOWN 0x00000002
|
||||
#define SBA_ST_ACTIVE 0x00000001
|
||||
#define S_CLEAR 0x00000000L
|
||||
#define ZERO 0x00000000
|
||||
#define FULL 0x00000000 /* old: 0xFFFFFFFFF */
|
||||
#define S_SET 0x00000001L
|
||||
#define LOW_PRIO 0x02 /* ??????? */
|
||||
#define OK 0x01 /* ??????? */
|
||||
#define NOT_OK 0x00 /* ??????? */
|
||||
|
||||
/****************************************/
|
||||
/* deallocate_status[ni][si] values */
|
||||
/****************************************/
|
||||
#define TX_CHANGE 0X00000001L
|
||||
#define PENDING 0x00000002L
|
||||
#define NONE 0X00000000L
|
||||
#endif
|
1919
drivers/net/skfp/h/skfbi.h
Normal file
1919
drivers/net/skfp/h/skfbi.h
Normal file
File diff suppressed because it is too large
Load Diff
123
drivers/net/skfp/h/skfbiinc.h
Normal file
123
drivers/net/skfp/h/skfbiinc.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _SKFBIINC_
|
||||
#define _SKFBIINC_
|
||||
|
||||
#include "h/supern_2.h"
|
||||
|
||||
/*
|
||||
* special defines for use into .asm files
|
||||
*/
|
||||
#define ERR_FLAGS (FS_MSRABT | FS_SEAC2 | FS_SFRMERR | FS_SFRMTY1)
|
||||
|
||||
#ifdef ISA
|
||||
#define DMA_BUSY_CHECK CSRA
|
||||
#define IMASK_FAST (IS_PLINT1 | IS_PLINT2 | IS_TIMINT)
|
||||
#define HRQR (RQAA+(RQ_RRQ<<1))
|
||||
#define HRQW (RQAA+(RQ_WA2<<1))
|
||||
#define HRQA0 (RQAA+(RQ_WA0<<1))
|
||||
#define HRQSQ (RQAA+(RQ_WSQ<<1))
|
||||
#endif
|
||||
|
||||
#ifdef EISA
|
||||
#define DMA_BUSY_CHECK CSRA
|
||||
#define DMA_HIGH_WORD 0x0400
|
||||
#define DMA_MASK_M 0x0a
|
||||
#define DMA_MODE_M 0x0b
|
||||
#define DMA_BYTE_PTR_M 0x0c
|
||||
#define DMA_MASK_S 0x0d4
|
||||
#define DMA_MODE_S 0x0d6
|
||||
#define DMA_BYTE_PTR_S 0x0d8
|
||||
#define IMASK_FAST (IS_PLINT1 | IS_PLINT2 | IS_TIMINT | IS_TC)
|
||||
#endif /* EISA */
|
||||
|
||||
#ifdef MCA
|
||||
#define IMASK_FAST (IS_PLINT1 | IS_PLINT2 | IS_TIMINT | IS_TOKEN | \
|
||||
IS_CHCK_L | IS_BUSERR)
|
||||
#endif
|
||||
|
||||
#ifdef PCI
|
||||
#define IMASK_FAST (IS_PLINT1 | IS_PLINT2 | IS_TIMINT | IS_TOKEN | \
|
||||
IS_MINTR2 | IS_MINTR3 | IS_R1_P | \
|
||||
IS_R1_C | IS_XA_C | IS_XS_C)
|
||||
#endif
|
||||
|
||||
#ifdef PCI
|
||||
#define ISR_MASK (IS_MINTR1 | IS_R1_F | IS_XS_F| IS_XA_F | IMASK_FAST)
|
||||
#else
|
||||
#define ISR_MASK (IS_MINTR1 | IS_MINTR2 | IMASK_FAST)
|
||||
#endif
|
||||
|
||||
#define FMA_FM_CMDREG1 FMA(FM_CMDREG1)
|
||||
#define FMA_FM_CMDREG2 FMA(FM_CMDREG2)
|
||||
#define FMA_FM_STMCHN FMA(FM_STMCHN)
|
||||
#define FMA_FM_RPR FMA(FM_RPR)
|
||||
#define FMA_FM_WPXA0 FMA(FM_WPXA0)
|
||||
#define FMA_FM_WPXA2 FMA(FM_WPXA2)
|
||||
#define FMA_FM_MARR FMA(FM_MARR)
|
||||
#define FMA_FM_MARW FMA(FM_MARW)
|
||||
#define FMA_FM_MDRU FMA(FM_MDRU)
|
||||
#define FMA_FM_MDRL FMA(FM_MDRL)
|
||||
#define FMA_ST1L FMA(FM_ST1L)
|
||||
#define FMA_ST1U FMA(FM_ST1U)
|
||||
#define FMA_ST2L FMA(FM_ST2L)
|
||||
#define FMA_ST2U FMA(FM_ST2U)
|
||||
#ifdef SUPERNET_3
|
||||
#define FMA_ST3L FMA(FM_ST3L)
|
||||
#define FMA_ST3U FMA(FM_ST3U)
|
||||
#endif
|
||||
|
||||
#define TMODE_RRQ RQ_RRQ
|
||||
#define TMODE_WAQ2 RQ_WA2
|
||||
#define HSRA HSR(0)
|
||||
|
||||
|
||||
#define FMA_FM_ST1L FMA_ST1L
|
||||
#define FMA_FM_ST1U FMA_ST1U
|
||||
#define FMA_FM_ST2L FMA_ST2L
|
||||
#define FMA_FM_ST2U FMA_ST2U
|
||||
#ifdef SUPERNET_3
|
||||
#define FMA_FM_ST3L FMA_ST3L
|
||||
#define FMA_FM_ST3U FMA_ST3U
|
||||
#endif
|
||||
|
||||
#define FMA_FM_SWPR FMA(FM_SWPR)
|
||||
|
||||
#define FMA_FM_RPXA0 FMA(FM_RPXA0)
|
||||
|
||||
#define FMA_FM_RPXS FMA(FM_RPXS)
|
||||
#define FMA_FM_WPXS FMA(FM_WPXS)
|
||||
|
||||
#define FMA_FM_IMSK1U FMA(FM_IMSK1U)
|
||||
#define FMA_FM_IMSK1L FMA(FM_IMSK1L)
|
||||
|
||||
#define FMA_FM_EAS FMA(FM_EAS)
|
||||
#define FMA_FM_EAA0 FMA(FM_EAA0)
|
||||
|
||||
#define TMODE_WAQ0 RQ_WA0
|
||||
#define TMODE_WSQ RQ_WSQ
|
||||
|
||||
/* Define default for DRV_PCM_STATE_CHANGE */
|
||||
#ifndef DRV_PCM_STATE_CHANGE
|
||||
#define DRV_PCM_STATE_CHANGE(smc,plc,p_state) /* nothing */
|
||||
#endif
|
||||
|
||||
/* Define default for DRV_RMT_INDICATION */
|
||||
#ifndef DRV_RMT_INDICATION
|
||||
#define DRV_RMT_INDICATION(smc,i) /* nothing */
|
||||
#endif
|
||||
|
||||
#endif /* n_SKFBIINC_ */
|
||||
|
471
drivers/net/skfp/h/smc.h
Normal file
471
drivers/net/skfp/h/smc.h
Normal file
@@ -0,0 +1,471 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _SCMECM_
|
||||
#define _SCMECM_
|
||||
|
||||
#if defined(PCI) && !defined(OSDEF)
|
||||
/*
|
||||
* In the case of the PCI bus the file osdef1st.h must be present
|
||||
*/
|
||||
#define OSDEF
|
||||
#endif
|
||||
|
||||
#ifdef PCI
|
||||
#ifndef SUPERNET_3
|
||||
#define SUPERNET_3
|
||||
#endif
|
||||
#ifndef TAG_MODE
|
||||
#define TAG_MODE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* include all other files in required order
|
||||
* the following files must have been included before:
|
||||
* types.h
|
||||
* fddi.h
|
||||
*/
|
||||
#ifdef OSDEF
|
||||
#include "h/osdef1st.h"
|
||||
#endif /* OSDEF */
|
||||
#ifdef OEM_CONCEPT
|
||||
#include "oemdef.h"
|
||||
#endif /* OEM_CONCEPT */
|
||||
#include "h/smt.h"
|
||||
#include "h/cmtdef.h"
|
||||
#include "h/fddimib.h"
|
||||
#include "h/targethw.h" /* all target hw dependencies */
|
||||
#include "h/targetos.h" /* all target os dependencies */
|
||||
#ifdef ESS
|
||||
#include "h/sba.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Event Queue
|
||||
* queue.c
|
||||
* events are class/value pairs
|
||||
* class is addressee, e.g. RMT, PCM etc.
|
||||
* value is command, e.g. line state change, ring op change etc.
|
||||
*/
|
||||
struct event_queue {
|
||||
u_short class ; /* event class */
|
||||
u_short event ; /* event value */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* define event queue as circular buffer
|
||||
*/
|
||||
#ifdef CONCENTRATOR
|
||||
#define MAX_EVENT 128
|
||||
#else /* nCONCENTRATOR */
|
||||
#define MAX_EVENT 64
|
||||
#endif /* nCONCENTRATOR */
|
||||
|
||||
struct s_queue {
|
||||
|
||||
struct event_queue ev_queue[MAX_EVENT];
|
||||
struct event_queue *ev_put ;
|
||||
struct event_queue *ev_get ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* ECM - Entity Coordination Management
|
||||
* ecm.c
|
||||
*/
|
||||
struct s_ecm {
|
||||
u_char path_test ; /* ECM path test variable */
|
||||
u_char sb_flag ; /* ECM stuck bypass */
|
||||
u_char DisconnectFlag ; /* jd 05-Aug-1999 Bug #10419
|
||||
* ECM disconnected */
|
||||
u_char ecm_line_state ; /* flag to dispatcher : line states */
|
||||
u_long trace_prop ; /* ECM Trace_Prop flag >= 16 bits !! */
|
||||
/* NUMPHYS note:
|
||||
* this variable must have enough bits to hold all entiies in
|
||||
* the station. So NUMPHYS may not be greater than 31.
|
||||
*/
|
||||
char ec_pad[2] ;
|
||||
struct smt_timer ecm_timer ; /* timer */
|
||||
} ;
|
||||
|
||||
|
||||
/*
|
||||
* RMT - Ring Management
|
||||
* rmt.c
|
||||
*/
|
||||
struct s_rmt {
|
||||
u_char dup_addr_test ; /* state of dupl. addr. test */
|
||||
u_char da_flag ; /* flag : duplicate address det. */
|
||||
u_char loop_avail ; /* flag : MAC available for loopback */
|
||||
u_char sm_ma_avail ; /* flag : MAC available for SMT */
|
||||
u_char no_flag ; /* flag : ring not operational */
|
||||
u_char bn_flag ; /* flag : MAC reached beacon state */
|
||||
u_char jm_flag ; /* flag : jamming in NON_OP_DUP */
|
||||
u_char rm_join ; /* CFM flag RM_Join */
|
||||
u_char rm_loop ; /* CFM flag RM_Loop */
|
||||
|
||||
long fast_rm_join ; /* bit mask of active ports */
|
||||
/*
|
||||
* timer and flags
|
||||
*/
|
||||
struct smt_timer rmt_timer0 ; /* timer 0 */
|
||||
struct smt_timer rmt_timer1 ; /* timer 1 */
|
||||
struct smt_timer rmt_timer2 ; /* timer 2 */
|
||||
u_char timer0_exp ; /* flag : timer 0 expired */
|
||||
u_char timer1_exp ; /* flag : timer 1 expired */
|
||||
u_char timer2_exp ; /* flag : timer 2 expired */
|
||||
|
||||
u_char rm_pad1[1] ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* CFM - Configuration Management
|
||||
* cfm.c
|
||||
* used for SAS and DAS
|
||||
*/
|
||||
struct s_cfm {
|
||||
u_char cf_state; /* CFM state machine current state */
|
||||
u_char cf_pad[3] ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* CEM - Configuration Element Management
|
||||
* cem.c
|
||||
* used for Concentrator
|
||||
*/
|
||||
#ifdef CONCENTRATOR
|
||||
struct s_cem {
|
||||
int ce_state ; /* CEM state */
|
||||
int ce_port ; /* PA PB PM PM+1 .. */
|
||||
int ce_type ; /* TA TB TS TM */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* linked list of CCEs in current token path
|
||||
*/
|
||||
struct s_c_ring {
|
||||
struct s_c_ring *c_next ;
|
||||
char c_entity ;
|
||||
} ;
|
||||
|
||||
struct mib_path_config {
|
||||
u_long fddimibPATHConfigSMTIndex;
|
||||
u_long fddimibPATHConfigPATHIndex;
|
||||
u_long fddimibPATHConfigTokenOrder;
|
||||
u_long fddimibPATHConfigResourceType;
|
||||
#define SNMP_RES_TYPE_MAC 2 /* Resource is a MAC */
|
||||
#define SNMP_RES_TYPE_PORT 4 /* Resource is a PORT */
|
||||
u_long fddimibPATHConfigResourceIndex;
|
||||
u_long fddimibPATHConfigCurrentPath;
|
||||
#define SNMP_PATH_ISOLATED 1 /* Current path is isolated */
|
||||
#define SNMP_PATH_LOCAL 2 /* Current path is local */
|
||||
#define SNMP_PATH_SECONDARY 3 /* Current path is secondary */
|
||||
#define SNMP_PATH_PRIMARY 4 /* Current path is primary */
|
||||
#define SNMP_PATH_CONCATENATED 5 /* Current path is concatenated */
|
||||
#define SNMP_PATH_THRU 6 /* Current path is thru */
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PCM connect states
|
||||
*/
|
||||
#define PCM_DISABLED 0
|
||||
#define PCM_CONNECTING 1
|
||||
#define PCM_STANDBY 2
|
||||
#define PCM_ACTIVE 3
|
||||
|
||||
struct s_pcm {
|
||||
u_char pcm_pad[3] ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* PHY struct
|
||||
* one per physical port
|
||||
*/
|
||||
struct s_phy {
|
||||
/* Inter Module Globals */
|
||||
struct fddi_mib_p *mib ;
|
||||
|
||||
u_char np ; /* index 0 .. NUMPHYS */
|
||||
u_char cf_join ;
|
||||
u_char cf_loop ;
|
||||
u_char wc_flag ; /* withhold connection flag */
|
||||
u_char pc_mode ; /* Holds the negotiated mode of the PCM */
|
||||
u_char pc_lem_fail ; /* flag : LCT failed */
|
||||
u_char lc_test ;
|
||||
u_char scrub ; /* CFM flag Scrub -> PCM */
|
||||
char phy_name ;
|
||||
u_char pmd_type[2] ; /* SK connector/transceiver type codes */
|
||||
#define PMD_SK_CONN 0 /* pmd_type[PMD_SK_CONN] = Connector */
|
||||
#define PMD_SK_PMD 1 /* pmd_type[PMD_SK_PMD] = Xver */
|
||||
u_char pmd_scramble ; /* scrambler on/off */
|
||||
|
||||
/* inner Module Globals */
|
||||
u_char curr_ls ; /* current line state */
|
||||
u_char ls_flag ;
|
||||
u_char rc_flag ;
|
||||
u_char tc_flag ;
|
||||
u_char td_flag ;
|
||||
u_char bitn ;
|
||||
u_char tr_flag ; /* trace recvd while in active */
|
||||
u_char twisted ; /* flag to indicate an A-A or B-B connection */
|
||||
u_char t_val[NUMBITS] ; /* transmit bits for signaling */
|
||||
u_char r_val[NUMBITS] ; /* receive bits for signaling */
|
||||
u_long t_next[NUMBITS] ;
|
||||
struct smt_timer pcm_timer0 ;
|
||||
struct smt_timer pcm_timer1 ;
|
||||
struct smt_timer pcm_timer2 ;
|
||||
u_char timer0_exp ;
|
||||
u_char timer1_exp ;
|
||||
u_char timer2_exp ;
|
||||
u_char pcm_pad1[1] ;
|
||||
int cem_pst ; /* CEM privae state; used for dual homing */
|
||||
struct lem_counter lem ;
|
||||
#ifdef AMDPLC
|
||||
struct s_plc plc ;
|
||||
#endif
|
||||
} ;
|
||||
|
||||
/*
|
||||
* timer package
|
||||
* smttimer.c
|
||||
*/
|
||||
struct s_timer {
|
||||
struct smt_timer *st_queue ;
|
||||
struct smt_timer st_fast ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SRF types and data
|
||||
*/
|
||||
#define SMT_EVENT_BASE 1
|
||||
#define SMT_EVENT_MAC_PATH_CHANGE (SMT_EVENT_BASE+0)
|
||||
#define SMT_EVENT_MAC_NEIGHBOR_CHANGE (SMT_EVENT_BASE+1)
|
||||
#define SMT_EVENT_PORT_PATH_CHANGE (SMT_EVENT_BASE+2)
|
||||
#define SMT_EVENT_PORT_CONNECTION (SMT_EVENT_BASE+3)
|
||||
|
||||
#define SMT_IS_CONDITION(x) ((x)>=SMT_COND_BASE)
|
||||
|
||||
#define SMT_COND_BASE (SMT_EVENT_PORT_CONNECTION+1)
|
||||
#define SMT_COND_SMT_PEER_WRAP (SMT_COND_BASE+0)
|
||||
#define SMT_COND_SMT_HOLD (SMT_COND_BASE+1)
|
||||
#define SMT_COND_MAC_FRAME_ERROR (SMT_COND_BASE+2)
|
||||
#define SMT_COND_MAC_DUP_ADDR (SMT_COND_BASE+3)
|
||||
#define SMT_COND_MAC_NOT_COPIED (SMT_COND_BASE+4)
|
||||
#define SMT_COND_PORT_EB_ERROR (SMT_COND_BASE+5)
|
||||
#define SMT_COND_PORT_LER (SMT_COND_BASE+6)
|
||||
|
||||
#define SR0_WAIT 0
|
||||
#define SR1_HOLDOFF 1
|
||||
#define SR2_DISABLED 2
|
||||
|
||||
struct s_srf {
|
||||
u_long SRThreshold ; /* threshold value */
|
||||
u_char RT_Flag ; /* report transmitted flag */
|
||||
u_char sr_state ; /* state-machine */
|
||||
u_char any_report ; /* any report required */
|
||||
u_long TSR ; /* timer */
|
||||
u_short ring_status ; /* IBM ring status */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* IBM token ring status
|
||||
*/
|
||||
#define RS_RES15 (1<<15) /* reserved */
|
||||
#define RS_HARDERROR (1<<14) /* ring down */
|
||||
#define RS_SOFTERROR (1<<13) /* sent SRF */
|
||||
#define RS_BEACON (1<<12) /* transmitted beacon */
|
||||
#define RS_PATHTEST (1<<11) /* path test failed */
|
||||
#define RS_SELFTEST (1<<10) /* selftest required */
|
||||
#define RS_RES9 (1<< 9) /* reserved */
|
||||
#define RS_DISCONNECT (1<< 8) /* remote disconnect */
|
||||
#define RS_RES7 (1<< 7) /* reserved */
|
||||
#define RS_DUPADDR (1<< 6) /* duplicate address */
|
||||
#define RS_NORINGOP (1<< 5) /* no ring op */
|
||||
#define RS_VERSION (1<< 4) /* SMT version mismatch */
|
||||
#define RS_STUCKBYPASSS (1<< 3) /* stuck bypass */
|
||||
#define RS_EVENT (1<< 2) /* FDDI event occurred */
|
||||
#define RS_RINGOPCHANGE (1<< 1) /* ring op changed */
|
||||
#define RS_RES0 (1<< 0) /* reserved */
|
||||
|
||||
#define RS_SET(smc,bit) \
|
||||
ring_status_indication(smc,smc->srf.ring_status |= bit)
|
||||
#define RS_CLEAR(smc,bit) \
|
||||
ring_status_indication(smc,smc->srf.ring_status &= ~bit)
|
||||
|
||||
#define RS_CLEAR_EVENT (0xffff & ~(RS_NORINGOP))
|
||||
|
||||
/* Define the AIX-event-Notification as null function if it isn't defined */
|
||||
/* in the targetos.h file */
|
||||
#ifndef AIX_EVENT
|
||||
#define AIX_EVENT(smc,opt0,opt1,opt2,opt3) /* nothing */
|
||||
#endif
|
||||
|
||||
struct s_srf_evc {
|
||||
u_char evc_code ; /* event code type */
|
||||
u_char evc_index ; /* index for mult. instances */
|
||||
u_char evc_rep_required ; /* report required */
|
||||
u_short evc_para ; /* SMT Para Number */
|
||||
u_char *evc_cond_state ; /* condition state */
|
||||
u_char *evc_multiple ; /* multiple occurrence */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* Values used by frame based services
|
||||
* smt.c
|
||||
*/
|
||||
#define SMT_MAX_TEST 5
|
||||
#define SMT_TID_NIF 0 /* pending NIF request */
|
||||
#define SMT_TID_NIF_TEST 1 /* pending NIF test */
|
||||
#define SMT_TID_ECF_UNA 2 /* pending ECF UNA test */
|
||||
#define SMT_TID_ECF_DNA 3 /* pending ECF DNA test */
|
||||
#define SMT_TID_ECF 4 /* pending ECF test */
|
||||
|
||||
struct smt_values {
|
||||
u_long smt_tvu ; /* timer valid una */
|
||||
u_long smt_tvd ; /* timer valid dna */
|
||||
u_long smt_tid ; /* transaction id */
|
||||
u_long pend[SMT_MAX_TEST] ; /* TID of requests */
|
||||
u_long uniq_time ; /* unique time stamp */
|
||||
u_short uniq_ticks ; /* unique time stamp */
|
||||
u_short please_reconnect ; /* flag : reconnect */
|
||||
u_long smt_last_lem ;
|
||||
u_long smt_last_notify ;
|
||||
struct smt_timer smt_timer ; /* SMT NIF timer */
|
||||
u_long last_tok_time[NUMMACS]; /* token cnt emulation */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SMT/CMT configurable parameters
|
||||
*/
|
||||
#define SMT_DAS 0 /* dual attach */
|
||||
#define SMT_SAS 1 /* single attach */
|
||||
#define SMT_NAC 2 /* null attach concentrator */
|
||||
|
||||
struct smt_config {
|
||||
u_char attach_s ; /* CFM attach to secondary path */
|
||||
u_char sas ; /* SMT_DAS/SAS/NAC */
|
||||
u_char build_ring_map ; /* build ringmap if TRUE */
|
||||
u_char numphys ; /* number of active phys */
|
||||
u_char sc_pad[1] ;
|
||||
|
||||
u_long pcm_tb_min ; /* PCM : TB_Min timer value */
|
||||
u_long pcm_tb_max ; /* PCM : TB_Max timer value */
|
||||
u_long pcm_c_min ; /* PCM : C_Min timer value */
|
||||
u_long pcm_t_out ; /* PCM : T_Out timer value */
|
||||
u_long pcm_tl_min ; /* PCM : TL_min timer value */
|
||||
u_long pcm_lc_short ; /* PCM : LC_Short timer value */
|
||||
u_long pcm_lc_medium ; /* PCM : LC_Medium timer value */
|
||||
u_long pcm_lc_long ; /* PCM : LC_Long timer value */
|
||||
u_long pcm_lc_extended ; /* PCM : LC_Extended timer value */
|
||||
u_long pcm_t_next_9 ; /* PCM : T_Next[9] timer value */
|
||||
u_long pcm_ns_max ; /* PCM : NS_Max timer value */
|
||||
|
||||
u_long ecm_i_max ; /* ECM : I_Max timer value */
|
||||
u_long ecm_in_max ; /* ECM : IN_Max timer value */
|
||||
u_long ecm_td_min ; /* ECM : TD_Min timer */
|
||||
u_long ecm_test_done ; /* ECM : path test done timer */
|
||||
u_long ecm_check_poll ; /* ECM : check bypass poller */
|
||||
|
||||
u_long rmt_t_non_op ; /* RMT : T_Non_OP timer value */
|
||||
u_long rmt_t_stuck ; /* RMT : T_Stuck timer value */
|
||||
u_long rmt_t_direct ; /* RMT : T_Direct timer value */
|
||||
u_long rmt_t_jam ; /* RMT : T_Jam timer value */
|
||||
u_long rmt_t_announce ; /* RMT : T_Announce timer value */
|
||||
u_long rmt_t_poll ; /* RMT : claim/beacon poller */
|
||||
u_long rmt_dup_mac_behavior ; /* Flag for the beavior of SMT if
|
||||
* a Duplicate MAC Address was detected.
|
||||
* FALSE: SMT will leave finaly the ring
|
||||
* TRUE: SMT will reinstert into the ring
|
||||
*/
|
||||
u_long mac_d_max ; /* MAC : D_Max timer value */
|
||||
|
||||
u_long lct_short ; /* LCT : error threshhold */
|
||||
u_long lct_medium ; /* LCT : error threshhold */
|
||||
u_long lct_long ; /* LCT : error threshhold */
|
||||
u_long lct_extended ; /* LCT : error threshhold */
|
||||
} ;
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Debugging struct sometimes used in smc
|
||||
*/
|
||||
struct smt_debug {
|
||||
int d_smtf ;
|
||||
int d_smt ;
|
||||
int d_ecm ;
|
||||
int d_rmt ;
|
||||
int d_cfm ;
|
||||
int d_pcm ;
|
||||
int d_plc ;
|
||||
#ifdef ESS
|
||||
int d_ess ;
|
||||
#endif
|
||||
#ifdef SBA
|
||||
int d_sba ;
|
||||
#endif
|
||||
struct os_debug d_os; /* Include specific OS DEBUG struct */
|
||||
} ;
|
||||
|
||||
#ifndef DEBUG_BRD
|
||||
/* all boards shall be debugged with one debug struct */
|
||||
extern struct smt_debug debug; /* Declaration of debug struct */
|
||||
#endif /* DEBUG_BRD */
|
||||
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* the SMT Context Struct SMC
|
||||
* this struct contains ALL global variables of SMT
|
||||
*/
|
||||
struct s_smc {
|
||||
struct s_smt_os os ; /* os specific */
|
||||
struct s_smt_hw hw ; /* hardware */
|
||||
|
||||
/*
|
||||
* NOTE: os and hw MUST BE the first two structs
|
||||
* anything beyond hw WILL BE SET TO ZERO in smt_set_defaults()
|
||||
*/
|
||||
struct smt_config s ; /* smt constants */
|
||||
struct smt_values sm ; /* smt variables */
|
||||
struct s_ecm e ; /* ecm */
|
||||
struct s_rmt r ; /* rmt */
|
||||
struct s_cfm cf ; /* cfm/cem */
|
||||
#ifdef CONCENTRATOR
|
||||
struct s_cem ce[NUMPHYS] ; /* cem */
|
||||
struct s_c_ring cr[NUMPHYS+NUMMACS] ;
|
||||
#endif
|
||||
struct s_pcm p ; /* pcm */
|
||||
struct s_phy y[NUMPHYS] ; /* phy */
|
||||
struct s_queue q ; /* queue */
|
||||
struct s_timer t ; /* timer */
|
||||
struct s_srf srf ; /* SRF */
|
||||
struct s_srf_evc evcs[6+NUMPHYS*4] ;
|
||||
struct fddi_mib mib ; /* __THE_MIB__ */
|
||||
#ifdef SBA
|
||||
struct s_sba sba ; /* SBA variables */
|
||||
#endif
|
||||
#ifdef ESS
|
||||
struct s_ess ess ; /* Ess variables */
|
||||
#endif
|
||||
#if defined(DEBUG) && defined(DEBUG_BRD)
|
||||
/* If you want all single board to be debugged separately */
|
||||
struct smt_debug debug; /* Declaration of debug struct */
|
||||
#endif /* DEBUG_BRD && DEBUG */
|
||||
} ;
|
||||
|
||||
#endif /* _SCMECM_ */
|
||||
|
882
drivers/net/skfp/h/smt.h
Normal file
882
drivers/net/skfp/h/smt.h
Normal file
@@ -0,0 +1,882 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* SMT 7.2 frame definitions
|
||||
*/
|
||||
|
||||
#ifndef _SMT_
|
||||
#define _SMT_
|
||||
|
||||
/* #define SMT5_10 */
|
||||
#define SMT6_10
|
||||
#define SMT7_20
|
||||
|
||||
#define OPT_PMF /* if parameter management is supported */
|
||||
#define OPT_SRF /* if status report is supported */
|
||||
|
||||
/*
|
||||
* SMT frame version 5.1
|
||||
*/
|
||||
|
||||
#define SMT_VID 0x0001 /* V 5.1 .. 6.1 */
|
||||
#define SMT_VID_2 0x0002 /* V 7.2 */
|
||||
|
||||
struct smt_sid {
|
||||
u_char sid_oem[2] ; /* implementation spec. */
|
||||
struct fddi_addr sid_node ; /* node address */
|
||||
} ;
|
||||
|
||||
typedef u_char t_station_id[8] ;
|
||||
|
||||
/*
|
||||
* note on alignment :
|
||||
* sizeof(struct smt_header) = 32
|
||||
* all parameters are long aligned
|
||||
* if struct smt_header starts at offset 0, all longs are aligned correctly
|
||||
* (FC starts at offset 3)
|
||||
*/
|
||||
_packed struct smt_header {
|
||||
struct fddi_addr smt_dest ; /* destination address */
|
||||
struct fddi_addr smt_source ; /* source address */
|
||||
u_char smt_class ; /* NIF, SIF ... */
|
||||
u_char smt_type ; /* req., response .. */
|
||||
u_short smt_version ; /* version id */
|
||||
u_int smt_tid ; /* transaction ID */
|
||||
struct smt_sid smt_sid ; /* station ID */
|
||||
u_short smt_pad ; /* pad with 0 */
|
||||
u_short smt_len ; /* length of info field */
|
||||
} ;
|
||||
#define SWAP_SMTHEADER "662sl8ss"
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* MAC FC values
|
||||
*/
|
||||
#define FC_SMT_INFO 0x41 /* SMT info */
|
||||
#define FC_SMT_NSA 0x4f /* SMT Next Station Addressing */
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* type codes
|
||||
*/
|
||||
#define SMT_ANNOUNCE 0x01 /* announcement */
|
||||
#define SMT_REQUEST 0x02 /* request */
|
||||
#define SMT_REPLY 0x03 /* reply */
|
||||
|
||||
/*
|
||||
* class codes
|
||||
*/
|
||||
#define SMT_NIF 0x01 /* neighbor information frames */
|
||||
#define SMT_SIF_CONFIG 0x02 /* station information configuration */
|
||||
#define SMT_SIF_OPER 0x03 /* station information operation */
|
||||
#define SMT_ECF 0x04 /* echo frames */
|
||||
#define SMT_RAF 0x05 /* resource allocation */
|
||||
#define SMT_RDF 0x06 /* request denied */
|
||||
#define SMT_SRF 0x07 /* status report */
|
||||
#define SMT_PMF_GET 0x08 /* parameter management get */
|
||||
#define SMT_PMF_SET 0x09 /* parameter management set */
|
||||
#define SMT_ESF 0xff /* extended service */
|
||||
|
||||
#define SMT_MAX_ECHO_LEN 4458 /* max length of SMT Echo */
|
||||
#if defined(CONC) || defined(CONC_II)
|
||||
#define SMT_TEST_ECHO_LEN 50 /* test length of SMT Echo */
|
||||
#else
|
||||
#define SMT_TEST_ECHO_LEN SMT_MAX_ECHO_LEN /* test length */
|
||||
#endif
|
||||
|
||||
#define SMT_MAX_INFO_LEN (4352-20) /* max length for SMT info */
|
||||
|
||||
|
||||
/*
|
||||
* parameter types
|
||||
*/
|
||||
|
||||
struct smt_para {
|
||||
u_short p_type ; /* type */
|
||||
u_short p_len ; /* length of parameter */
|
||||
} ;
|
||||
|
||||
#define PARA_LEN (sizeof(struct smt_para))
|
||||
|
||||
#define SMTSETPARA(p,t) (p)->para.p_type = (t),\
|
||||
(p)->para.p_len = sizeof(*(p)) - PARA_LEN
|
||||
|
||||
/*
|
||||
* P01 : Upstream Neighbor Address, UNA
|
||||
*/
|
||||
#define SMT_P_UNA 0x0001 /* upstream neighbor address */
|
||||
#define SWAP_SMT_P_UNA "s6"
|
||||
|
||||
struct smt_p_una {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short una_pad ;
|
||||
struct fddi_addr una_node ; /* node address, zero if unknown */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P02 : Station Descriptor
|
||||
*/
|
||||
#define SMT_P_SDE 0x0002 /* station descriptor */
|
||||
#define SWAP_SMT_P_SDE "1111"
|
||||
|
||||
#define SMT_SDE_STATION 0 /* end node */
|
||||
#define SMT_SDE_CONCENTRATOR 1 /* concentrator */
|
||||
|
||||
struct smt_p_sde {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_char sde_type ; /* station type */
|
||||
u_char sde_mac_count ; /* number of MACs */
|
||||
u_char sde_non_master ; /* number of A,B or S ports */
|
||||
u_char sde_master ; /* number of S ports on conc. */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P03 : Station State
|
||||
*/
|
||||
#define SMT_P_STATE 0x0003 /* station state */
|
||||
#define SWAP_SMT_P_STATE "scc"
|
||||
|
||||
struct smt_p_state {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short st_pad ;
|
||||
u_char st_topology ; /* topology */
|
||||
u_char st_dupl_addr ; /* duplicate address detected */
|
||||
} ;
|
||||
#define SMT_ST_WRAPPED (1<<0) /* station wrapped */
|
||||
#define SMT_ST_UNATTACHED (1<<1) /* unattached concentrator */
|
||||
#define SMT_ST_TWISTED_A (1<<2) /* A-A connection, twisted ring */
|
||||
#define SMT_ST_TWISTED_B (1<<3) /* B-B connection, twisted ring */
|
||||
#define SMT_ST_ROOTED_S (1<<4) /* rooted station */
|
||||
#define SMT_ST_SRF (1<<5) /* SRF protocol supported */
|
||||
#define SMT_ST_SYNC_SERVICE (1<<6) /* use synchronous bandwidth */
|
||||
|
||||
#define SMT_ST_MY_DUPA (1<<0) /* my station detected dupl. */
|
||||
#define SMT_ST_UNA_DUPA (1<<1) /* my UNA detected duplicate */
|
||||
|
||||
/*
|
||||
* P04 : timestamp
|
||||
*/
|
||||
#define SMT_P_TIMESTAMP 0x0004 /* time stamp */
|
||||
#define SWAP_SMT_P_TIMESTAMP "8"
|
||||
struct smt_p_timestamp {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_char ts_time[8] ; /* time, resolution 80nS, unique */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P05 : station policies
|
||||
*/
|
||||
#define SMT_P_POLICY 0x0005 /* station policies */
|
||||
#define SWAP_SMT_P_POLICY "ss"
|
||||
|
||||
struct smt_p_policy {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short pl_config ;
|
||||
u_short pl_connect ; /* bit string POLICY_AA ... */
|
||||
} ;
|
||||
#define SMT_PL_HOLD 1 /* hold policy supported (Dual MAC) */
|
||||
|
||||
/*
|
||||
* P06 : latency equivalent
|
||||
*/
|
||||
#define SMT_P_LATENCY 0x0006 /* latency */
|
||||
#define SWAP_SMT_P_LATENCY "ssss"
|
||||
|
||||
/*
|
||||
* note: latency has two phy entries by definition
|
||||
* for a SAS, the 2nd one is null
|
||||
*/
|
||||
struct smt_p_latency {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short lt_phyout_idx1 ; /* index */
|
||||
u_short lt_latency1 ; /* latency , unit : byte clock */
|
||||
u_short lt_phyout_idx2 ; /* 0 if SAS */
|
||||
u_short lt_latency2 ; /* 0 if SAS */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P07 : MAC neighbors
|
||||
*/
|
||||
#define SMT_P_NEIGHBORS 0x0007 /* MAC neighbor description */
|
||||
#define SWAP_SMT_P_NEIGHBORS "ss66"
|
||||
|
||||
struct smt_p_neighbor {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short nb_mib_index ; /* MIB index */
|
||||
u_short nb_mac_index ; /* n+1 .. n+m, m = #MACs, n = #PHYs */
|
||||
struct fddi_addr nb_una ; /* UNA , 0 for unknown */
|
||||
struct fddi_addr nb_dna ; /* DNA , 0 for unknown */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* PHY record
|
||||
*/
|
||||
#define SMT_PHY_A 0 /* A port */
|
||||
#define SMT_PHY_B 1 /* B port */
|
||||
#define SMT_PHY_S 2 /* slave port */
|
||||
#define SMT_PHY_M 3 /* master port */
|
||||
|
||||
#define SMT_CS_DISABLED 0 /* connect state : disabled */
|
||||
#define SMT_CS_CONNECTING 1 /* connect state : connecting */
|
||||
#define SMT_CS_STANDBY 2 /* connect state : stand by */
|
||||
#define SMT_CS_ACTIVE 3 /* connect state : active */
|
||||
|
||||
#define SMT_RM_NONE 0
|
||||
#define SMT_RM_MAC 1
|
||||
|
||||
struct smt_phy_rec {
|
||||
u_short phy_mib_index ; /* MIB index */
|
||||
u_char phy_type ; /* A/B/S/M */
|
||||
u_char phy_connect_state ; /* disabled/connecting/active */
|
||||
u_char phy_remote_type ; /* A/B/S/M */
|
||||
u_char phy_remote_mac ; /* none/remote */
|
||||
u_short phy_resource_idx ; /* 1 .. n */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* MAC record
|
||||
*/
|
||||
struct smt_mac_rec {
|
||||
struct fddi_addr mac_addr ; /* MAC address */
|
||||
u_short mac_resource_idx ; /* n+1 .. n+m */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P08 : path descriptors
|
||||
* should be really an array ; however our environment has a fixed number of
|
||||
* PHYs and MACs
|
||||
*/
|
||||
#define SMT_P_PATH 0x0008 /* path descriptor */
|
||||
#define SWAP_SMT_P_PATH "[6s]"
|
||||
|
||||
struct smt_p_path {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
struct smt_phy_rec pd_phy[2] ; /* PHY A */
|
||||
struct smt_mac_rec pd_mac ; /* MAC record */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P09 : MAC status
|
||||
*/
|
||||
#define SMT_P_MAC_STATUS 0x0009 /* MAC status */
|
||||
#define SWAP_SMT_P_MAC_STATUS "sslllllllll"
|
||||
|
||||
struct smt_p_mac_status {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short st_mib_index ; /* MIB index */
|
||||
u_short st_mac_index ; /* n+1 .. n+m */
|
||||
u_int st_t_req ; /* T_Req */
|
||||
u_int st_t_neg ; /* T_Neg */
|
||||
u_int st_t_max ; /* T_Max */
|
||||
u_int st_tvx_value ; /* TVX_Value */
|
||||
u_int st_t_min ; /* T_Min */
|
||||
u_int st_sba ; /* synchr. bandwidth alloc */
|
||||
u_int st_frame_ct ; /* frame counter */
|
||||
u_int st_error_ct ; /* error counter */
|
||||
u_int st_lost_ct ; /* lost frames counter */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P0A : PHY link error rate monitoring
|
||||
*/
|
||||
#define SMT_P_LEM 0x000a /* link error monitor */
|
||||
#define SWAP_SMT_P_LEM "ssccccll"
|
||||
/*
|
||||
* units of lem_cutoff,lem_alarm,lem_estimate : 10**-x
|
||||
*/
|
||||
struct smt_p_lem {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short lem_mib_index ; /* MIB index */
|
||||
u_short lem_phy_index ; /* 1 .. n */
|
||||
u_char lem_pad2 ; /* be nice and make it even . */
|
||||
u_char lem_cutoff ; /* 0x4 .. 0xf, default 0x7 */
|
||||
u_char lem_alarm ; /* 0x4 .. 0xf, default 0x8 */
|
||||
u_char lem_estimate ; /* 0x0 .. 0xff */
|
||||
u_int lem_reject_ct ; /* 0x00000000 .. 0xffffffff */
|
||||
u_int lem_ct ; /* 0x00000000 .. 0xffffffff */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P0B : MAC frame counters
|
||||
*/
|
||||
#define SMT_P_MAC_COUNTER 0x000b /* MAC frame counters */
|
||||
#define SWAP_SMT_P_MAC_COUNTER "ssll"
|
||||
|
||||
struct smt_p_mac_counter {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short mc_mib_index ; /* MIB index */
|
||||
u_short mc_index ; /* mac index */
|
||||
u_int mc_receive_ct ; /* receive counter */
|
||||
u_int mc_transmit_ct ; /* transmit counter */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P0C : MAC frame not copied counter
|
||||
*/
|
||||
#define SMT_P_MAC_FNC 0x000c /* MAC frame not copied counter */
|
||||
#define SWAP_SMT_P_MAC_FNC "ssl"
|
||||
|
||||
struct smt_p_mac_fnc {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short nc_mib_index ; /* MIB index */
|
||||
u_short nc_index ; /* mac index */
|
||||
u_int nc_counter ; /* not copied counter */
|
||||
} ;
|
||||
|
||||
|
||||
/*
|
||||
* P0D : MAC priority values
|
||||
*/
|
||||
#define SMT_P_PRIORITY 0x000d /* MAC priority values */
|
||||
#define SWAP_SMT_P_PRIORITY "ssl"
|
||||
|
||||
struct smt_p_priority {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short pr_mib_index ; /* MIB index */
|
||||
u_short pr_index ; /* mac index */
|
||||
u_int pr_priority[7] ; /* priority values */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P0E : PHY elasticity buffer status
|
||||
*/
|
||||
#define SMT_P_EB 0x000e /* PHY EB status */
|
||||
#define SWAP_SMT_P_EB "ssl"
|
||||
|
||||
struct smt_p_eb {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short eb_mib_index ; /* MIB index */
|
||||
u_short eb_index ; /* phy index */
|
||||
u_int eb_error_ct ; /* # of eb overflows */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P0F : manufacturer field
|
||||
*/
|
||||
#define SMT_P_MANUFACTURER 0x000f /* manufacturer field */
|
||||
#define SWAP_SMT_P_MANUFACTURER ""
|
||||
|
||||
struct smp_p_manufacturer {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_char mf_data[32] ; /* OUI + arbitrary data */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P10 : user field
|
||||
*/
|
||||
#define SMT_P_USER 0x0010 /* manufacturer field */
|
||||
#define SWAP_SMT_P_USER ""
|
||||
|
||||
struct smp_p_user {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_char us_data[32] ; /* arbitrary data */
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* P11 : echo data
|
||||
*/
|
||||
#define SMT_P_ECHODATA 0x0011 /* echo data */
|
||||
#define SWAP_SMT_P_ECHODATA ""
|
||||
|
||||
struct smt_p_echo {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_char ec_data[SMT_MAX_ECHO_LEN-4] ; /* echo data */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P12 : reason code
|
||||
*/
|
||||
#define SMT_P_REASON 0x0012 /* reason code */
|
||||
#define SWAP_SMT_P_REASON "l"
|
||||
|
||||
struct smt_p_reason {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int rdf_reason ; /* CLASS/VERSION */
|
||||
} ;
|
||||
#define SMT_RDF_CLASS 0x00000001 /* class not supported */
|
||||
#define SMT_RDF_VERSION 0x00000002 /* version not supported */
|
||||
#define SMT_RDF_SUCCESS 0x00000003 /* success (PMF) */
|
||||
#define SMT_RDF_BADSET 0x00000004 /* bad set count (PMF) */
|
||||
#define SMT_RDF_ILLEGAL 0x00000005 /* read only (PMF) */
|
||||
#define SMT_RDF_NOPARAM 0x6 /* paramter not supported (PMF) */
|
||||
#define SMT_RDF_RANGE 0x8 /* out of range */
|
||||
#define SMT_RDF_AUTHOR 0x9 /* not autohorized */
|
||||
#define SMT_RDF_LENGTH 0x0a /* length error */
|
||||
#define SMT_RDF_TOOLONG 0x0b /* length error */
|
||||
#define SMT_RDF_SBA 0x0d /* SBA denied */
|
||||
|
||||
/*
|
||||
* P13 : refused frame beginning
|
||||
*/
|
||||
#define SMT_P_REFUSED 0x0013 /* refused frame beginning */
|
||||
#define SWAP_SMT_P_REFUSED "l"
|
||||
|
||||
struct smt_p_refused {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int ref_fc ; /* 3 bytes 0 + FC */
|
||||
struct smt_header ref_header ; /* refused header */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P14 : supported SMT versions
|
||||
*/
|
||||
#define SMT_P_VERSION 0x0014 /* SMT supported versions */
|
||||
#define SWAP_SMT_P_VERSION "sccss"
|
||||
|
||||
struct smt_p_version {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short v_pad ;
|
||||
u_char v_n ; /* 1 .. 0xff, #versions */
|
||||
u_char v_index ; /* 1 .. 0xff, index of op. v. */
|
||||
u_short v_version[1] ; /* list of min. 1 version */
|
||||
u_short v_pad2 ; /* pad if necessary */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P15 : Resource Type
|
||||
*/
|
||||
#define SWAP_SMT_P0015 "l"
|
||||
|
||||
struct smt_p_0015 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int res_type ; /* recsource type */
|
||||
} ;
|
||||
|
||||
#define SYNC_BW 0x00000001L /* Synchronous Bandwidth */
|
||||
|
||||
/*
|
||||
* P16 : SBA Command
|
||||
*/
|
||||
#define SWAP_SMT_P0016 "l"
|
||||
|
||||
struct smt_p_0016 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int sba_cmd ; /* command for the SBA */
|
||||
} ;
|
||||
|
||||
#define REQUEST_ALLOCATION 0x1 /* req allocation of sync bandwidth */
|
||||
#define REPORT_ALLOCATION 0x2 /* rep of sync bandwidth allocation */
|
||||
#define CHANGE_ALLOCATION 0x3 /* forces a station using sync band-*/
|
||||
/* width to change its current allo-*/
|
||||
/* cation */
|
||||
|
||||
/*
|
||||
* P17 : SBA Payload Request
|
||||
*/
|
||||
#define SWAP_SMT_P0017 "l"
|
||||
|
||||
struct smt_p_0017 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
int sba_pl_req ; /* total sync bandwidth measured in */
|
||||
} ; /* bytes per 125 us */
|
||||
|
||||
/*
|
||||
* P18 : SBA Overhead Request
|
||||
*/
|
||||
#define SWAP_SMT_P0018 "l"
|
||||
|
||||
struct smt_p_0018 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
int sba_ov_req ; /* total sync bandwidth req for overhead*/
|
||||
} ; /* measuered in bytes per T_Neg */
|
||||
|
||||
/*
|
||||
* P19 : SBA Allocation Address
|
||||
*/
|
||||
#define SWAP_SMT_P0019 "s6"
|
||||
|
||||
struct smt_p_0019 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short sba_pad ;
|
||||
struct fddi_addr alloc_addr ; /* Allocation Address */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P1A : SBA Category
|
||||
*/
|
||||
#define SWAP_SMT_P001A "l"
|
||||
|
||||
struct smt_p_001a {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int category ; /* Allocator defined classification */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P1B : Maximum T_Neg
|
||||
*/
|
||||
#define SWAP_SMT_P001B "l"
|
||||
|
||||
struct smt_p_001b {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int max_t_neg ; /* longest T_NEG for the sync service*/
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P1C : Minimum SBA Segment Size
|
||||
*/
|
||||
#define SWAP_SMT_P001C "l"
|
||||
|
||||
struct smt_p_001c {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int min_seg_siz ; /* smallest number of bytes per frame*/
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P1D : SBA Allocatable
|
||||
*/
|
||||
#define SWAP_SMT_P001D "l"
|
||||
|
||||
struct smt_p_001d {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int allocatable ; /* total sync bw available for alloc */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* P20 0B : frame status capabilities
|
||||
* NOTE: not in swap table, is used by smt.c AND PMF table
|
||||
*/
|
||||
#define SMT_P_FSC 0x200b
|
||||
/* #define SWAP_SMT_P_FSC "ssss" */
|
||||
|
||||
struct smt_p_fsc {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_short fsc_pad0 ;
|
||||
u_short fsc_mac_index ; /* mac index 1 .. ff */
|
||||
u_short fsc_pad1 ;
|
||||
u_short fsc_value ; /* FSC_TYPE[0-2] */
|
||||
} ;
|
||||
|
||||
#define FSC_TYPE0 0 /* "normal" node (A/C handling) */
|
||||
#define FSC_TYPE1 1 /* Special A/C indicator forwarding */
|
||||
#define FSC_TYPE2 2 /* Special A/C indicator forwarding */
|
||||
|
||||
/*
|
||||
* P00 21 : user defined authoriziation (see pmf.c)
|
||||
*/
|
||||
#define SMT_P_AUTHOR 0x0021
|
||||
|
||||
/*
|
||||
* notification parameters
|
||||
*/
|
||||
#define SWAP_SMT_P1048 "ll"
|
||||
struct smt_p_1048 {
|
||||
u_int p1048_flag ;
|
||||
u_int p1048_cf_state ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* NOTE: all 2xxx 3xxx and 4xxx must include the INDEX in the swap string,
|
||||
* even so the INDEX is NOT part of the struct.
|
||||
* INDEX is already swapped in pmf.c, format in string is '4'
|
||||
*/
|
||||
#define SWAP_SMT_P208C "4lss66"
|
||||
struct smt_p_208c {
|
||||
u_int p208c_flag ;
|
||||
u_short p208c_pad ;
|
||||
u_short p208c_dupcondition ;
|
||||
struct fddi_addr p208c_fddilong ;
|
||||
struct fddi_addr p208c_fddiunalong ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P208D "4lllll"
|
||||
struct smt_p_208d {
|
||||
u_int p208d_flag ;
|
||||
u_int p208d_frame_ct ;
|
||||
u_int p208d_error_ct ;
|
||||
u_int p208d_lost_ct ;
|
||||
u_int p208d_ratio ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P208E "4llll"
|
||||
struct smt_p_208e {
|
||||
u_int p208e_flag ;
|
||||
u_int p208e_not_copied ;
|
||||
u_int p208e_copied ;
|
||||
u_int p208e_not_copied_ratio ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P208F "4ll6666s6"
|
||||
|
||||
struct smt_p_208f {
|
||||
u_int p208f_multiple ;
|
||||
u_int p208f_nacondition ;
|
||||
struct fddi_addr p208f_old_una ;
|
||||
struct fddi_addr p208f_new_una ;
|
||||
struct fddi_addr p208f_old_dna ;
|
||||
struct fddi_addr p208f_new_dna ;
|
||||
u_short p208f_curren_path ;
|
||||
struct fddi_addr p208f_smt_address ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P2090 "4lssl"
|
||||
|
||||
struct smt_p_2090 {
|
||||
u_int p2090_multiple ;
|
||||
u_short p2090_availablepaths ;
|
||||
u_short p2090_currentpath ;
|
||||
u_int p2090_requestedpaths ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* NOTE:
|
||||
* special kludge for parameters 320b,320f,3210
|
||||
* these parameters are part of RAF frames
|
||||
* RAF frames are parsed in SBA.C and must be swapped
|
||||
* PMF.C has special code to avoid double swapping
|
||||
*/
|
||||
#ifdef LITTLE_ENDIAN
|
||||
#define SBAPATHINDEX (0x01000000L)
|
||||
#else
|
||||
#define SBAPATHINDEX (0x01L)
|
||||
#endif
|
||||
|
||||
#define SWAP_SMT_P320B "42s"
|
||||
|
||||
struct smt_p_320b {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int mib_index ;
|
||||
u_short path_pad ;
|
||||
u_short path_index ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P320F "4l"
|
||||
|
||||
struct smt_p_320f {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int mib_index ;
|
||||
u_int mib_payload ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P3210 "4l"
|
||||
|
||||
struct smt_p_3210 {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int mib_index ;
|
||||
u_int mib_overhead ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P4050 "4l1111ll"
|
||||
|
||||
struct smt_p_4050 {
|
||||
u_int p4050_flag ;
|
||||
u_char p4050_pad ;
|
||||
u_char p4050_cutoff ;
|
||||
u_char p4050_alarm ;
|
||||
u_char p4050_estimate ;
|
||||
u_int p4050_reject_ct ;
|
||||
u_int p4050_ct ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P4051 "4lssss"
|
||||
struct smt_p_4051 {
|
||||
u_int p4051_multiple ;
|
||||
u_short p4051_porttype ;
|
||||
u_short p4051_connectstate ;
|
||||
u_short p4051_pc_neighbor ;
|
||||
u_short p4051_pc_withhold ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P4052 "4ll"
|
||||
struct smt_p_4052 {
|
||||
u_int p4052_flag ;
|
||||
u_int p4052_eberrorcount ;
|
||||
} ;
|
||||
|
||||
#define SWAP_SMT_P4053 "4lsslss"
|
||||
|
||||
struct smt_p_4053 {
|
||||
u_int p4053_multiple ;
|
||||
u_short p4053_availablepaths ;
|
||||
u_short p4053_currentpath ;
|
||||
u_int p4053_requestedpaths ;
|
||||
u_short p4053_mytype ;
|
||||
u_short p4053_neighbortype ;
|
||||
} ;
|
||||
|
||||
|
||||
#define SMT_P_SETCOUNT 0x1035
|
||||
#define SWAP_SMT_P_SETCOUNT "l8"
|
||||
|
||||
struct smt_p_setcount {
|
||||
struct smt_para para ; /* generic parameter header */
|
||||
u_int count ;
|
||||
u_char timestamp[8] ;
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SMT FRAMES
|
||||
*/
|
||||
|
||||
/*
|
||||
* NIF : neighbor information frames
|
||||
*/
|
||||
struct smt_nif {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_una una ; /* UNA */
|
||||
struct smt_p_sde sde ; /* station descriptor */
|
||||
struct smt_p_state state ; /* station state */
|
||||
#ifdef SMT6_10
|
||||
struct smt_p_fsc fsc ; /* frame status cap. */
|
||||
#endif
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SIF : station information frames
|
||||
*/
|
||||
struct smt_sif_config {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_timestamp ts ; /* time stamp */
|
||||
struct smt_p_sde sde ; /* station descriptor */
|
||||
struct smt_p_version version ; /* supported versions */
|
||||
struct smt_p_state state ; /* station state */
|
||||
struct smt_p_policy policy ; /* station policy */
|
||||
struct smt_p_latency latency ; /* path latency */
|
||||
struct smt_p_neighbor neighbor ; /* neighbors, we have only one*/
|
||||
#ifdef OPT_PMF
|
||||
struct smt_p_setcount setcount ; /* Set Count mandatory */
|
||||
#endif
|
||||
/* WARNING : path MUST BE LAST FIELD !!! (see smt.c:smt_fill_path) */
|
||||
struct smt_p_path path ; /* path descriptor */
|
||||
} ;
|
||||
#define SIZEOF_SMT_SIF_CONFIG (sizeof(struct smt_sif_config)- \
|
||||
sizeof(struct smt_p_path))
|
||||
|
||||
struct smt_sif_operation {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_timestamp ts ; /* time stamp */
|
||||
struct smt_p_mac_status status ; /* mac status */
|
||||
struct smt_p_mac_counter mc ; /* MAC counter */
|
||||
struct smt_p_mac_fnc fnc ; /* MAC frame not copied */
|
||||
struct smp_p_manufacturer man ; /* manufacturer field */
|
||||
struct smp_p_user user ; /* user field */
|
||||
#ifdef OPT_PMF
|
||||
struct smt_p_setcount setcount ; /* Set Count mandatory */
|
||||
#endif
|
||||
/* must be last */
|
||||
struct smt_p_lem lem[1] ; /* phy lem status */
|
||||
} ;
|
||||
#define SIZEOF_SMT_SIF_OPERATION (sizeof(struct smt_sif_operation)- \
|
||||
sizeof(struct smt_p_lem))
|
||||
|
||||
/*
|
||||
* ECF : echo frame
|
||||
*/
|
||||
struct smt_ecf {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_echo ec_echo ; /* echo parameter */
|
||||
} ;
|
||||
#define SMT_ECF_LEN (sizeof(struct smt_header)+sizeof(struct smt_para))
|
||||
|
||||
/*
|
||||
* RDF : request denied frame
|
||||
*/
|
||||
struct smt_rdf {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_reason reason ; /* reason code */
|
||||
struct smt_p_version version ; /* supported versions */
|
||||
struct smt_p_refused refused ; /* refused frame fragment */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SBA Request Allocation Responce Frame
|
||||
*/
|
||||
struct smt_sba_alc_res {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_0015 s_type ; /* resource type */
|
||||
struct smt_p_0016 cmd ; /* SBA command */
|
||||
struct smt_p_reason reason ; /* reason code */
|
||||
struct smt_p_320b path ; /* path type */
|
||||
struct smt_p_320f payload ; /* current SBA payload */
|
||||
struct smt_p_3210 overhead ; /* current SBA overhead */
|
||||
struct smt_p_0019 a_addr ; /* Allocation Address */
|
||||
struct smt_p_001a cat ; /* Category - from the request */
|
||||
struct smt_p_001d alloc ; /* SBA Allocatable */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SBA Request Allocation Request Frame
|
||||
*/
|
||||
struct smt_sba_alc_req {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_0015 s_type ; /* resource type */
|
||||
struct smt_p_0016 cmd ; /* SBA command */
|
||||
struct smt_p_320b path ; /* path type */
|
||||
struct smt_p_0017 pl_req ; /* requested payload */
|
||||
struct smt_p_0018 ov_req ; /* requested SBA overhead */
|
||||
struct smt_p_320f payload ; /* current SBA payload */
|
||||
struct smt_p_3210 overhead ; /* current SBA overhead */
|
||||
struct smt_p_0019 a_addr ; /* Allocation Address */
|
||||
struct smt_p_001a cat ; /* Category - from the request */
|
||||
struct smt_p_001b tneg ; /* max T-NEG */
|
||||
struct smt_p_001c segm ; /* minimum segment size */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SBA Change Allocation Request Frame
|
||||
*/
|
||||
struct smt_sba_chg {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_0015 s_type ; /* resource type */
|
||||
struct smt_p_0016 cmd ; /* SBA command */
|
||||
struct smt_p_320b path ; /* path type */
|
||||
struct smt_p_320f payload ; /* current SBA payload */
|
||||
struct smt_p_3210 overhead ; /* current SBA overhead */
|
||||
struct smt_p_001a cat ; /* Category - from the request */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SBA Report Allocation Request Frame
|
||||
*/
|
||||
struct smt_sba_rep_req {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_0015 s_type ; /* resource type */
|
||||
struct smt_p_0016 cmd ; /* SBA command */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* SBA Report Allocation Response Frame
|
||||
*/
|
||||
struct smt_sba_rep_res {
|
||||
struct smt_header smt ; /* generic header */
|
||||
struct smt_p_0015 s_type ; /* resource type */
|
||||
struct smt_p_0016 cmd ; /* SBA command */
|
||||
struct smt_p_320b path ; /* path type */
|
||||
struct smt_p_320f payload ; /* current SBA payload */
|
||||
struct smt_p_3210 overhead ; /* current SBA overhead */
|
||||
} ;
|
||||
|
||||
/*
|
||||
* actions
|
||||
*/
|
||||
#define SMT_STATION_ACTION 1
|
||||
#define SMT_STATION_ACTION_CONNECT 0
|
||||
#define SMT_STATION_ACTION_DISCONNECT 1
|
||||
#define SMT_STATION_ACTION_PATHTEST 2
|
||||
#define SMT_STATION_ACTION_SELFTEST 3
|
||||
#define SMT_STATION_ACTION_DISABLE_A 4
|
||||
#define SMT_STATION_ACTION_DISABLE_B 5
|
||||
#define SMT_STATION_ACTION_DISABLE_M 6
|
||||
|
||||
#define SMT_PORT_ACTION 2
|
||||
#define SMT_PORT_ACTION_MAINT 0
|
||||
#define SMT_PORT_ACTION_ENABLE 1
|
||||
#define SMT_PORT_ACTION_DISABLE 2
|
||||
#define SMT_PORT_ACTION_START 3
|
||||
#define SMT_PORT_ACTION_STOP 4
|
||||
|
||||
#endif /* _SMT_ */
|
326
drivers/net/skfp/h/smt_p.h
Normal file
326
drivers/net/skfp/h/smt_p.h
Normal file
@@ -0,0 +1,326 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* defines for all SMT attributes
|
||||
*/
|
||||
|
||||
/*
|
||||
* this boring file was produced by perl
|
||||
* thanks Larry !
|
||||
*/
|
||||
#define SMT_P0012 0x0012
|
||||
|
||||
#define SMT_P0015 0x0015
|
||||
#define SMT_P0016 0x0016
|
||||
#define SMT_P0017 0x0017
|
||||
#define SMT_P0018 0x0018
|
||||
#define SMT_P0019 0x0019
|
||||
|
||||
#define SMT_P001A 0x001a
|
||||
#define SMT_P001B 0x001b
|
||||
#define SMT_P001C 0x001c
|
||||
#define SMT_P001D 0x001d
|
||||
|
||||
#define SMT_P100A 0x100a
|
||||
#define SMT_P100B 0x100b
|
||||
#define SMT_P100C 0x100c
|
||||
#define SMT_P100D 0x100d
|
||||
#define SMT_P100E 0x100e
|
||||
#define SMT_P100F 0x100f
|
||||
#define SMT_P1010 0x1010
|
||||
#define SMT_P1011 0x1011
|
||||
#define SMT_P1012 0x1012
|
||||
#define SMT_P1013 0x1013
|
||||
#define SMT_P1014 0x1014
|
||||
#define SMT_P1015 0x1015
|
||||
#define SMT_P1016 0x1016
|
||||
#define SMT_P1017 0x1017
|
||||
#define SMT_P1018 0x1018
|
||||
#define SMT_P1019 0x1019
|
||||
#define SMT_P101A 0x101a
|
||||
#define SMT_P101B 0x101b
|
||||
#define SMT_P101C 0x101c
|
||||
#define SMT_P101D 0x101d
|
||||
#define SMT_P101E 0x101e
|
||||
#define SMT_P101F 0x101f
|
||||
#define SMT_P1020 0x1020
|
||||
#define SMT_P1021 0x1021
|
||||
#define SMT_P1022 0x1022
|
||||
#define SMT_P1023 0x1023
|
||||
#define SMT_P1024 0x1024
|
||||
#define SMT_P1025 0x1025
|
||||
#define SMT_P1026 0x1026
|
||||
#define SMT_P1027 0x1027
|
||||
#define SMT_P1028 0x1028
|
||||
#define SMT_P1029 0x1029
|
||||
#define SMT_P102A 0x102a
|
||||
#define SMT_P102B 0x102b
|
||||
#define SMT_P102C 0x102c
|
||||
#define SMT_P102D 0x102d
|
||||
#define SMT_P102E 0x102e
|
||||
#define SMT_P102F 0x102f
|
||||
#define SMT_P1030 0x1030
|
||||
#define SMT_P1031 0x1031
|
||||
#define SMT_P1032 0x1032
|
||||
#define SMT_P1033 0x1033
|
||||
#define SMT_P1034 0x1034
|
||||
#define SMT_P1035 0x1035
|
||||
#define SMT_P1036 0x1036
|
||||
#define SMT_P1037 0x1037
|
||||
#define SMT_P1038 0x1038
|
||||
#define SMT_P1039 0x1039
|
||||
#define SMT_P103A 0x103a
|
||||
#define SMT_P103B 0x103b
|
||||
#define SMT_P103C 0x103c
|
||||
#define SMT_P103D 0x103d
|
||||
#define SMT_P103E 0x103e
|
||||
#define SMT_P103F 0x103f
|
||||
#define SMT_P1040 0x1040
|
||||
#define SMT_P1041 0x1041
|
||||
#define SMT_P1042 0x1042
|
||||
#define SMT_P1043 0x1043
|
||||
#define SMT_P1044 0x1044
|
||||
#define SMT_P1045 0x1045
|
||||
#define SMT_P1046 0x1046
|
||||
#define SMT_P1047 0x1047
|
||||
#define SMT_P1048 0x1048
|
||||
#define SMT_P1049 0x1049
|
||||
#define SMT_P104A 0x104a
|
||||
#define SMT_P104B 0x104b
|
||||
#define SMT_P104C 0x104c
|
||||
#define SMT_P104D 0x104d
|
||||
#define SMT_P104E 0x104e
|
||||
#define SMT_P104F 0x104f
|
||||
#define SMT_P1050 0x1050
|
||||
#define SMT_P1051 0x1051
|
||||
#define SMT_P1052 0x1052
|
||||
#define SMT_P1053 0x1053
|
||||
#define SMT_P1054 0x1054
|
||||
|
||||
#define SMT_P10F0 0x10f0
|
||||
#define SMT_P10F1 0x10f1
|
||||
#ifdef ESS
|
||||
#define SMT_P10F2 0x10f2
|
||||
#define SMT_P10F3 0x10f3
|
||||
#define SMT_P10F4 0x10f4
|
||||
#define SMT_P10F5 0x10f5
|
||||
#define SMT_P10F6 0x10f6
|
||||
#define SMT_P10F7 0x10f7
|
||||
#endif
|
||||
#ifdef SBA
|
||||
#define SMT_P10F8 0x10f8
|
||||
#define SMT_P10F9 0x10f9
|
||||
#endif
|
||||
|
||||
#define SMT_P200A 0x200a
|
||||
#define SMT_P200B 0x200b
|
||||
#define SMT_P200C 0x200c
|
||||
#define SMT_P200D 0x200d
|
||||
#define SMT_P200E 0x200e
|
||||
#define SMT_P200F 0x200f
|
||||
#define SMT_P2010 0x2010
|
||||
#define SMT_P2011 0x2011
|
||||
#define SMT_P2012 0x2012
|
||||
#define SMT_P2013 0x2013
|
||||
#define SMT_P2014 0x2014
|
||||
#define SMT_P2015 0x2015
|
||||
#define SMT_P2016 0x2016
|
||||
#define SMT_P2017 0x2017
|
||||
#define SMT_P2018 0x2018
|
||||
#define SMT_P2019 0x2019
|
||||
#define SMT_P201A 0x201a
|
||||
#define SMT_P201B 0x201b
|
||||
#define SMT_P201C 0x201c
|
||||
#define SMT_P201D 0x201d
|
||||
#define SMT_P201E 0x201e
|
||||
#define SMT_P201F 0x201f
|
||||
#define SMT_P2020 0x2020
|
||||
#define SMT_P2021 0x2021
|
||||
#define SMT_P2022 0x2022
|
||||
#define SMT_P2023 0x2023
|
||||
#define SMT_P2024 0x2024
|
||||
#define SMT_P2025 0x2025
|
||||
#define SMT_P2026 0x2026
|
||||
#define SMT_P2027 0x2027
|
||||
#define SMT_P2028 0x2028
|
||||
#define SMT_P2029 0x2029
|
||||
#define SMT_P202A 0x202a
|
||||
#define SMT_P202B 0x202b
|
||||
#define SMT_P202C 0x202c
|
||||
#define SMT_P202D 0x202d
|
||||
#define SMT_P202E 0x202e
|
||||
#define SMT_P202F 0x202f
|
||||
#define SMT_P2030 0x2030
|
||||
#define SMT_P2031 0x2031
|
||||
#define SMT_P2032 0x2032
|
||||
#define SMT_P2033 0x2033
|
||||
#define SMT_P2034 0x2034
|
||||
#define SMT_P2035 0x2035
|
||||
#define SMT_P2036 0x2036
|
||||
#define SMT_P2037 0x2037
|
||||
#define SMT_P2038 0x2038
|
||||
#define SMT_P2039 0x2039
|
||||
#define SMT_P203A 0x203a
|
||||
#define SMT_P203B 0x203b
|
||||
#define SMT_P203C 0x203c
|
||||
#define SMT_P203D 0x203d
|
||||
#define SMT_P203E 0x203e
|
||||
#define SMT_P203F 0x203f
|
||||
#define SMT_P2040 0x2040
|
||||
#define SMT_P2041 0x2041
|
||||
#define SMT_P2042 0x2042
|
||||
#define SMT_P2043 0x2043
|
||||
#define SMT_P2044 0x2044
|
||||
#define SMT_P2045 0x2045
|
||||
#define SMT_P2046 0x2046
|
||||
#define SMT_P2047 0x2047
|
||||
#define SMT_P2048 0x2048
|
||||
#define SMT_P2049 0x2049
|
||||
#define SMT_P204A 0x204a
|
||||
#define SMT_P204B 0x204b
|
||||
#define SMT_P204C 0x204c
|
||||
#define SMT_P204D 0x204d
|
||||
#define SMT_P204E 0x204e
|
||||
#define SMT_P204F 0x204f
|
||||
#define SMT_P2050 0x2050
|
||||
#define SMT_P2051 0x2051
|
||||
#define SMT_P2052 0x2052
|
||||
#define SMT_P2053 0x2053
|
||||
#define SMT_P2054 0x2054
|
||||
#define SMT_P2055 0x2055
|
||||
#define SMT_P2056 0x2056
|
||||
#define SMT_P2057 0x2057
|
||||
#define SMT_P2058 0x2058
|
||||
#define SMT_P2059 0x2059
|
||||
#define SMT_P205A 0x205a
|
||||
#define SMT_P205B 0x205b
|
||||
#define SMT_P205C 0x205c
|
||||
#define SMT_P205D 0x205d
|
||||
#define SMT_P205E 0x205e
|
||||
#define SMT_P205F 0x205f
|
||||
#define SMT_P2060 0x2060
|
||||
#define SMT_P2061 0x2061
|
||||
#define SMT_P2062 0x2062
|
||||
#define SMT_P2063 0x2063
|
||||
#define SMT_P2064 0x2064
|
||||
#define SMT_P2065 0x2065
|
||||
#define SMT_P2066 0x2066
|
||||
#define SMT_P2067 0x2067
|
||||
#define SMT_P2068 0x2068
|
||||
#define SMT_P2069 0x2069
|
||||
#define SMT_P206A 0x206a
|
||||
#define SMT_P206B 0x206b
|
||||
#define SMT_P206C 0x206c
|
||||
#define SMT_P206D 0x206d
|
||||
#define SMT_P206E 0x206e
|
||||
#define SMT_P206F 0x206f
|
||||
#define SMT_P2070 0x2070
|
||||
#define SMT_P2071 0x2071
|
||||
#define SMT_P2072 0x2072
|
||||
#define SMT_P2073 0x2073
|
||||
#define SMT_P2074 0x2074
|
||||
#define SMT_P2075 0x2075
|
||||
#define SMT_P2076 0x2076
|
||||
|
||||
#define SMT_P208C 0x208c
|
||||
#define SMT_P208D 0x208d
|
||||
#define SMT_P208E 0x208e
|
||||
#define SMT_P208F 0x208f
|
||||
#define SMT_P2090 0x2090
|
||||
|
||||
#define SMT_P20F0 0x20F0
|
||||
#define SMT_P20F1 0x20F1
|
||||
|
||||
#define SMT_P320A 0x320a
|
||||
#define SMT_P320B 0x320b
|
||||
#define SMT_P320C 0x320c
|
||||
#define SMT_P320D 0x320d
|
||||
#define SMT_P320E 0x320e
|
||||
#define SMT_P320F 0x320f
|
||||
#define SMT_P3210 0x3210
|
||||
#define SMT_P3211 0x3211
|
||||
#define SMT_P3212 0x3212
|
||||
#define SMT_P3213 0x3213
|
||||
#define SMT_P3214 0x3214
|
||||
#define SMT_P3215 0x3215
|
||||
#define SMT_P3216 0x3216
|
||||
#define SMT_P3217 0x3217
|
||||
|
||||
#define SMT_P400A 0x400a
|
||||
#define SMT_P400B 0x400b
|
||||
#define SMT_P400C 0x400c
|
||||
#define SMT_P400D 0x400d
|
||||
#define SMT_P400E 0x400e
|
||||
#define SMT_P400F 0x400f
|
||||
#define SMT_P4010 0x4010
|
||||
#define SMT_P4011 0x4011
|
||||
#define SMT_P4012 0x4012
|
||||
#define SMT_P4013 0x4013
|
||||
#define SMT_P4014 0x4014
|
||||
#define SMT_P4015 0x4015
|
||||
#define SMT_P4016 0x4016
|
||||
#define SMT_P4017 0x4017
|
||||
#define SMT_P4018 0x4018
|
||||
#define SMT_P4019 0x4019
|
||||
#define SMT_P401A 0x401a
|
||||
#define SMT_P401B 0x401b
|
||||
#define SMT_P401C 0x401c
|
||||
#define SMT_P401D 0x401d
|
||||
#define SMT_P401E 0x401e
|
||||
#define SMT_P401F 0x401f
|
||||
#define SMT_P4020 0x4020
|
||||
#define SMT_P4021 0x4021
|
||||
#define SMT_P4022 0x4022
|
||||
#define SMT_P4023 0x4023
|
||||
#define SMT_P4024 0x4024
|
||||
#define SMT_P4025 0x4025
|
||||
#define SMT_P4026 0x4026
|
||||
#define SMT_P4027 0x4027
|
||||
#define SMT_P4028 0x4028
|
||||
#define SMT_P4029 0x4029
|
||||
#define SMT_P402A 0x402a
|
||||
#define SMT_P402B 0x402b
|
||||
#define SMT_P402C 0x402c
|
||||
#define SMT_P402D 0x402d
|
||||
#define SMT_P402E 0x402e
|
||||
#define SMT_P402F 0x402f
|
||||
#define SMT_P4030 0x4030
|
||||
#define SMT_P4031 0x4031
|
||||
#define SMT_P4032 0x4032
|
||||
#define SMT_P4033 0x4033
|
||||
#define SMT_P4034 0x4034
|
||||
#define SMT_P4035 0x4035
|
||||
#define SMT_P4036 0x4036
|
||||
#define SMT_P4037 0x4037
|
||||
#define SMT_P4038 0x4038
|
||||
#define SMT_P4039 0x4039
|
||||
#define SMT_P403A 0x403a
|
||||
#define SMT_P403B 0x403b
|
||||
#define SMT_P403C 0x403c
|
||||
#define SMT_P403D 0x403d
|
||||
#define SMT_P403E 0x403e
|
||||
#define SMT_P403F 0x403f
|
||||
#define SMT_P4040 0x4040
|
||||
#define SMT_P4041 0x4041
|
||||
#define SMT_P4042 0x4042
|
||||
#define SMT_P4043 0x4043
|
||||
#define SMT_P4044 0x4044
|
||||
#define SMT_P4045 0x4045
|
||||
#define SMT_P4046 0x4046
|
||||
|
||||
#define SMT_P4050 0x4050
|
||||
#define SMT_P4051 0x4051
|
||||
#define SMT_P4052 0x4052
|
||||
#define SMT_P4053 0x4053
|
106
drivers/net/skfp/h/smtstate.h
Normal file
106
drivers/net/skfp/h/smtstate.h
Normal file
@@ -0,0 +1,106 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _SKFP_H_SMTSTATE_H_
|
||||
#define _SKFP_H_SMTSTATE_H_
|
||||
|
||||
/*
|
||||
* SMT state definitions
|
||||
*/
|
||||
|
||||
#ifndef KERNEL
|
||||
/*
|
||||
* PCM states
|
||||
*/
|
||||
#define PC0_OFF 0
|
||||
#define PC1_BREAK 1
|
||||
#define PC2_TRACE 2
|
||||
#define PC3_CONNECT 3
|
||||
#define PC4_NEXT 4
|
||||
#define PC5_SIGNAL 5
|
||||
#define PC6_JOIN 6
|
||||
#define PC7_VERIFY 7
|
||||
#define PC8_ACTIVE 8
|
||||
#define PC9_MAINT 9
|
||||
|
||||
/*
|
||||
* PCM modes
|
||||
*/
|
||||
#define PM_NONE 0
|
||||
#define PM_PEER 1
|
||||
#define PM_TREE 2
|
||||
|
||||
/*
|
||||
* PCM type
|
||||
*/
|
||||
#define TA 0
|
||||
#define TB 1
|
||||
#define TS 2
|
||||
#define TM 3
|
||||
#define TNONE 4
|
||||
|
||||
/*
|
||||
* CFM states
|
||||
*/
|
||||
#define SC0_ISOLATED 0 /* isolated */
|
||||
#define SC1_WRAP_A 5 /* wrap A */
|
||||
#define SC2_WRAP_B 6 /* wrap B */
|
||||
#define SC4_THRU_A 12 /* through A */
|
||||
#define SC5_THRU_B 7 /* through B (SMt 6.2) */
|
||||
#define SC7_WRAP_S 8 /* SAS */
|
||||
|
||||
/*
|
||||
* ECM states
|
||||
*/
|
||||
#define EC0_OUT 0
|
||||
#define EC1_IN 1
|
||||
#define EC2_TRACE 2
|
||||
#define EC3_LEAVE 3
|
||||
#define EC4_PATH_TEST 4
|
||||
#define EC5_INSERT 5
|
||||
#define EC6_CHECK 6
|
||||
#define EC7_DEINSERT 7
|
||||
|
||||
/*
|
||||
* RMT states
|
||||
*/
|
||||
#define RM0_ISOLATED 0
|
||||
#define RM1_NON_OP 1 /* not operational */
|
||||
#define RM2_RING_OP 2 /* ring operational */
|
||||
#define RM3_DETECT 3 /* detect dupl addresses */
|
||||
#define RM4_NON_OP_DUP 4 /* dupl. addr detected */
|
||||
#define RM5_RING_OP_DUP 5 /* ring oper. with dupl. addr */
|
||||
#define RM6_DIRECTED 6 /* sending directed beacons */
|
||||
#define RM7_TRACE 7 /* trace initiated */
|
||||
#endif
|
||||
|
||||
struct pcm_state {
|
||||
unsigned char pcm_type ; /* TA TB TS TM */
|
||||
unsigned char pcm_state ; /* state PC[0-9]_* */
|
||||
unsigned char pcm_mode ; /* PM_{NONE,PEER,TREE} */
|
||||
unsigned char pcm_neighbor ; /* TA TB TS TM */
|
||||
unsigned char pcm_bsf ; /* flag bs : TRUE/FALSE */
|
||||
unsigned char pcm_lsf ; /* flag ls : TRUE/FALSE */
|
||||
unsigned char pcm_lct_fail ; /* counter lct_fail */
|
||||
unsigned char pcm_ls_rx ; /* rx line state */
|
||||
short pcm_r_val ; /* signaling bits */
|
||||
short pcm_t_val ; /* signaling bits */
|
||||
} ;
|
||||
|
||||
struct smt_state {
|
||||
struct pcm_state pcm_state[NUMPHYS] ; /* port A & port B */
|
||||
} ;
|
||||
|
||||
#endif
|
||||
|
1059
drivers/net/skfp/h/supern_2.h
Normal file
1059
drivers/net/skfp/h/supern_2.h
Normal file
File diff suppressed because it is too large
Load Diff
169
drivers/net/skfp/h/targethw.h
Normal file
169
drivers/net/skfp/h/targethw.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _TARGETHW_
|
||||
#define _TARGETHW_
|
||||
|
||||
/*
|
||||
* PCI Watermark definition
|
||||
*/
|
||||
#ifdef PCI
|
||||
#define RX_WATERMARK 24
|
||||
#define TX_WATERMARK 24
|
||||
#define SK_ML_ID_1 0x20
|
||||
#define SK_ML_ID_2 0x30
|
||||
#endif
|
||||
|
||||
#include "h/skfbi.h"
|
||||
#ifndef TAG_MODE
|
||||
#include "h/fplus.h"
|
||||
#else
|
||||
#include "h/fplustm.h"
|
||||
#endif
|
||||
|
||||
#ifndef HW_PTR
|
||||
#define HW_PTR void __iomem *
|
||||
#endif
|
||||
|
||||
#ifdef MULT_OEM
|
||||
#define OI_STAT_LAST 0 /* end of OEM data base */
|
||||
#define OI_STAT_PRESENT 1 /* entry present but not empty */
|
||||
#define OI_STAT_VALID 2 /* holds valid ID, but is not active */
|
||||
#define OI_STAT_ACTIVE 3 /* holds valid ID, entry is active */
|
||||
/* active = adapter is supported */
|
||||
|
||||
/* Memory representation of IDs must match representation in adapter. */
|
||||
struct s_oem_ids {
|
||||
u_char oi_status ; /* Stat: last, present, valid, active */
|
||||
u_char oi_mark[5] ; /* "PID00" .. "PID07" .. */
|
||||
u_char oi_id[4] ; /* id bytes, representation as */
|
||||
/* defined by hardware, */
|
||||
#ifdef PCI
|
||||
u_char oi_sub_id[4] ; /* sub id bytes, representation as */
|
||||
/* defined by hardware, */
|
||||
#endif
|
||||
#ifdef ISA
|
||||
u_char oi_logo_len ; /* the length of the adapter logo */
|
||||
u_char oi_logo[6] ; /* the adapter logo */
|
||||
u_char oi_reserved1 ;
|
||||
#endif /* ISA */
|
||||
} ;
|
||||
#endif /* MULT_OEM */
|
||||
|
||||
|
||||
struct s_smt_hw {
|
||||
/*
|
||||
* global
|
||||
*/
|
||||
HW_PTR iop ; /* IO base address */
|
||||
short dma ; /* DMA channel */
|
||||
short irq ; /* IRQ level */
|
||||
short eprom ; /* FLASH prom */
|
||||
#ifndef PCI
|
||||
short DmaWriteExtraBytes ; /* add bytes for DMA write */
|
||||
#endif
|
||||
|
||||
#ifndef SYNC
|
||||
u_short n_a_send ; /* pending send requests */
|
||||
#endif
|
||||
|
||||
#if (defined(EISA) || defined(MCA) || defined(PCI))
|
||||
short slot ; /* slot number */
|
||||
short max_slots ; /* maximum number of slots */
|
||||
#endif
|
||||
|
||||
#if (defined(PCI) || defined(MCA))
|
||||
short wdog_used ; /* TRUE if the watch dog is used */
|
||||
#endif
|
||||
|
||||
#ifdef MCA
|
||||
short slot_32 ; /* 32bit slot (1) or 16bit slot (0) */
|
||||
short rev ; /* Board revision (FMx_REV). */
|
||||
short VFullRead ; /* V_full value for DMA read */
|
||||
short VFullWrite ; /* V_full value for DMA write */
|
||||
#endif
|
||||
|
||||
#ifdef EISA
|
||||
short led ; /* LED for FE card */
|
||||
|
||||
short dma_rmode ; /* read mode */
|
||||
short dma_wmode ; /* write mode */
|
||||
short dma_emode ; /* extend mode */
|
||||
|
||||
/* DMA controller channel dependent io addresses */
|
||||
u_short dma_base_word_count ;
|
||||
u_short dma_base_address ;
|
||||
u_short dma_base_address_page ;
|
||||
#endif
|
||||
|
||||
#ifdef PCI
|
||||
u_short pci_handle ; /* handle to access the BIOS func */
|
||||
u_long is_imask ; /* int maske for the int source reg */
|
||||
u_long phys_mem_addr ; /* physical memory address */
|
||||
u_short mc_dummy ; /* work around for MC compiler bug */
|
||||
/*
|
||||
* state of the hardware
|
||||
*/
|
||||
u_short hw_state ; /* started or stopped */
|
||||
|
||||
#define STARTED 1
|
||||
#define STOPPED 0
|
||||
|
||||
int hw_is_64bit ; /* does we have a 64 bit adapter */
|
||||
#endif
|
||||
|
||||
#ifdef TAG_MODE
|
||||
u_long pci_fix_value ; /* value parsed by PCIFIX */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* hwt.c
|
||||
*/
|
||||
u_long t_start ; /* HWT start */
|
||||
u_long t_stop ; /* HWT stop */
|
||||
u_short timer_activ ; /* HWT timer active */
|
||||
|
||||
/*
|
||||
* PIC
|
||||
*/
|
||||
u_char pic_a1 ;
|
||||
u_char pic_21 ;
|
||||
|
||||
/*
|
||||
* GENERIC ; do not modify beyond this line
|
||||
*/
|
||||
|
||||
/*
|
||||
* physical and canonical address
|
||||
*/
|
||||
struct fddi_addr fddi_home_addr ;
|
||||
struct fddi_addr fddi_canon_addr ;
|
||||
struct fddi_addr fddi_phys_addr ;
|
||||
|
||||
/*
|
||||
* mac variables
|
||||
*/
|
||||
struct mac_parameter mac_pa ; /* tmin, tmax, tvx, treq .. */
|
||||
struct mac_counter mac_ct ; /* recv., lost, error */
|
||||
u_short mac_ring_is_up ; /* ring is up flag */
|
||||
|
||||
struct s_smt_fp fp ; /* formac+ */
|
||||
|
||||
#ifdef MULT_OEM
|
||||
struct s_oem_ids *oem_id ; /* pointer to selected id */
|
||||
int oem_min_status ; /* IDs to take care of */
|
||||
#endif /* MULT_OEM */
|
||||
|
||||
} ;
|
||||
#endif
|
165
drivers/net/skfp/h/targetos.h
Normal file
165
drivers/net/skfp/h/targetos.h
Normal file
@@ -0,0 +1,165 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Operating system specific definitions for driver and
|
||||
* hardware module.
|
||||
*/
|
||||
|
||||
#ifndef TARGETOS_H
|
||||
#define TARGETOS_H
|
||||
|
||||
|
||||
//-------- those should go into include/linux/pci.h
|
||||
#define PCI_VENDOR_ID_SK 0x1148
|
||||
#define PCI_DEVICE_ID_SK_FP 0x4000
|
||||
//--------
|
||||
|
||||
|
||||
|
||||
//-------- those should go into include/linux/if_fddi.h
|
||||
#define FDDI_MAC_HDR_LEN 13
|
||||
|
||||
#define FDDI_RII 0x01 /* routing information bit */
|
||||
#define FDDI_RCF_DIR_BIT 0x80
|
||||
#define FDDI_RCF_LEN_MASK 0x1f
|
||||
#define FDDI_RCF_BROADCAST 0x8000
|
||||
#define FDDI_RCF_LIMITED_BROADCAST 0xA000
|
||||
#define FDDI_RCF_FRAME2K 0x20
|
||||
#define FDDI_RCF_FRAME4K 0x30
|
||||
//--------
|
||||
|
||||
|
||||
#undef ADDR
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/fddidevice.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
// is redefined by linux, but we need our definition
|
||||
#undef ADDR
|
||||
#ifdef MEM_MAPPED_IO
|
||||
#define ADDR(a) (smc->hw.iop+(a))
|
||||
#else
|
||||
#define ADDR(a) (((a)>>7) ? (outp(smc->hw.iop+B0_RAP,(a)>>7), (smc->hw.iop+( ((a)&0x7F) | ((a)>>7 ? 0x80:0)) )) : (smc->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0))))
|
||||
#endif
|
||||
|
||||
#include "h/hwmtm.h"
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
// HWM Definitions
|
||||
// -----------------------
|
||||
#define FDDI_TRACE(string, arg1, arg2, arg3) // Performance analysis.
|
||||
#ifdef PCI
|
||||
#define NDD_TRACE(string, arg1, arg2, arg3) // Performance analysis.
|
||||
#endif // PCI
|
||||
#define SMT_PAGESIZE PAGE_SIZE // Size of a memory page (power of 2).
|
||||
// -----------------------
|
||||
|
||||
|
||||
// SMT Definitions
|
||||
// -----------------------
|
||||
#define TICKS_PER_SECOND HZ
|
||||
#define SMC_VERSION 1
|
||||
// -----------------------
|
||||
|
||||
|
||||
// OS-Driver Definitions
|
||||
// -----------------------
|
||||
#define NO_ADDRESS 0xffe0 /* No Device (I/O) Address */
|
||||
#define SKFP_MAX_NUM_BOARDS 8 /* maximum number of PCI boards */
|
||||
|
||||
#define SK_BUS_TYPE_PCI 0
|
||||
#define SK_BUS_TYPE_EISA 1
|
||||
|
||||
#define FP_IO_LEN 256 /* length of IO area used */
|
||||
|
||||
#define u8 unsigned char
|
||||
#define u16 unsigned short
|
||||
#define u32 unsigned int
|
||||
|
||||
#define MAX_TX_QUEUE_LEN 20 // number of packets queued by driver
|
||||
#define MAX_FRAME_SIZE 4550
|
||||
|
||||
#define RX_LOW_WATERMARK NUM_RECEIVE_BUFFERS / 2
|
||||
#define TX_LOW_WATERMARK NUM_TRANSMIT_BUFFERS - 2
|
||||
|
||||
/*
|
||||
** Include the IOCTL stuff
|
||||
*/
|
||||
#include <linux/sockios.h>
|
||||
|
||||
#define SKFPIOCTL SIOCDEVPRIVATE
|
||||
|
||||
struct s_skfp_ioctl {
|
||||
unsigned short cmd; /* Command to run */
|
||||
unsigned short len; /* Length of the data buffer */
|
||||
unsigned char __user *data; /* Pointer to the data buffer */
|
||||
};
|
||||
|
||||
/*
|
||||
** Recognised ioctl commands for the driver
|
||||
*/
|
||||
#define SKFP_GET_STATS 0x05 /* Get the driver statistics */
|
||||
#define SKFP_CLR_STATS 0x06 /* Zero out the driver statistics */
|
||||
|
||||
// The per-adapter driver structure
|
||||
struct s_smt_os {
|
||||
struct net_device *dev;
|
||||
struct net_device *next_module;
|
||||
u32 bus_type; /* bus type (0 == PCI, 1 == EISA) */
|
||||
struct pci_dev pdev; /* PCI device structure */
|
||||
|
||||
unsigned long base_addr;
|
||||
unsigned char factory_mac_addr[8];
|
||||
ulong SharedMemSize;
|
||||
ulong SharedMemHeap;
|
||||
void* SharedMemAddr;
|
||||
dma_addr_t SharedMemDMA;
|
||||
|
||||
ulong QueueSkb;
|
||||
struct sk_buff_head SendSkbQueue;
|
||||
|
||||
ulong MaxFrameSize;
|
||||
u8 ResetRequested;
|
||||
|
||||
// MAC statistics structure
|
||||
struct fddi_statistics MacStat;
|
||||
|
||||
// receive into this local buffer if no skb available
|
||||
// data will be not valid, because multiple RxDs can
|
||||
// point here at the same time, it must be at least
|
||||
// MAX_FRAME_SIZE bytes in size
|
||||
unsigned char *LocalRxBuffer;
|
||||
dma_addr_t LocalRxBufferDMA;
|
||||
|
||||
// Version (required by SMT module).
|
||||
u_long smc_version ;
|
||||
|
||||
// Required by Hardware Module (HWM).
|
||||
struct hw_modul hwm ;
|
||||
|
||||
// For SMP-savety
|
||||
spinlock_t DriverLock;
|
||||
|
||||
};
|
||||
|
||||
typedef struct s_smt_os skfddi_priv;
|
||||
|
||||
#endif // _TARGETOS_
|
39
drivers/net/skfp/h/types.h
Normal file
39
drivers/net/skfp/h/types.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* (C)Copyright 1998,1999 SysKonnect,
|
||||
* a business unit of Schneider & Koch & Co. Datensysteme GmbH.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The information in this file is provided "AS IS" without warranty.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <linux/types.h>
|
||||
/*
|
||||
----------------------
|
||||
Basic SMT system types
|
||||
----------------------
|
||||
*/
|
||||
#ifndef _TYPES_
|
||||
#define _TYPES_
|
||||
|
||||
#define _packed
|
||||
#ifndef far
|
||||
#define far
|
||||
#endif
|
||||
#ifndef _far
|
||||
#define _far
|
||||
#endif
|
||||
|
||||
#define inp(p) ioread8(p)
|
||||
#define inpw(p) ioread16(p)
|
||||
#define inpd(p) ioread32(p)
|
||||
#define outp(p,c) iowrite8(c,p)
|
||||
#define outpw(p,s) iowrite16(s,p)
|
||||
#define outpd(p,l) iowrite32(l,p)
|
||||
|
||||
#endif /* _TYPES_ */
|
Reference in New Issue
Block a user