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:
Linus Torvalds
2005-04-16 15:20:36 -07:00
commit 1da177e4c3
17291 changed files with 6718755 additions and 0 deletions

763
drivers/net/skfp/h/cmtdef.h Normal file
View 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
View 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_ */

View 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 */

View 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
View 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

View 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
View 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_ */

View 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
View 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

View 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

File diff suppressed because it is too large Load Diff

View 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
View 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
View 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
View 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

View 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

File diff suppressed because it is too large Load Diff

View 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

View 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_

View 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_ */