0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef _FPLUS_
0017 #define _FPLUS_
0018
0019 #ifndef HW_PTR
0020 #define HW_PTR void __iomem *
0021 #endif
0022
0023
0024
0025
0026 struct err_st {
0027 u_long err_valid ;
0028 u_long err_abort ;
0029 u_long err_e_indicator ;
0030 u_long err_crc ;
0031 u_long err_llc_frame ;
0032 u_long err_mac_frame ;
0033 u_long err_smt_frame ;
0034 u_long err_imp_frame ;
0035 u_long err_no_buf ;
0036 u_long err_too_long ;
0037 u_long err_bec_stat ;
0038 u_long err_clm_stat ;
0039 u_long err_sifg_det ;
0040 u_long err_phinv ;
0041 u_long err_tkiss ;
0042 u_long err_tkerr ;
0043 } ;
0044
0045
0046
0047
0048 struct s_smt_fp_txd {
0049 __le32 txd_tbctrl ;
0050 __le32 txd_txdscr ;
0051 __le32 txd_tbadr ;
0052 __le32 txd_ntdadr ;
0053 #ifdef ENA_64BIT_SUP
0054 __le32 txd_tbadr_hi ;
0055 #endif
0056 char far *txd_virt ;
0057
0058 struct s_smt_fp_txd volatile far *txd_next ;
0059 struct s_txd_os txd_os ;
0060 } ;
0061
0062
0063
0064
0065 struct s_smt_fp_rxd {
0066 __le32 rxd_rbctrl ;
0067 __le32 rxd_rfsw ;
0068 __le32 rxd_rbadr ;
0069 __le32 rxd_nrdadr ;
0070 #ifdef ENA_64BIT_SUP
0071 __le32 rxd_rbadr_hi ;
0072 #endif
0073 char far *rxd_virt ;
0074
0075 struct s_smt_fp_rxd volatile far *rxd_next ;
0076 struct s_rxd_os rxd_os ;
0077 } ;
0078
0079
0080
0081
0082 union s_fp_descr {
0083 struct s_smt_fp_txd t ;
0084 struct s_smt_fp_rxd r ;
0085 } ;
0086
0087
0088
0089
0090 struct s_smt_tx_queue {
0091 struct s_smt_fp_txd volatile *tx_curr_put ;
0092 struct s_smt_fp_txd volatile *tx_prev_put ;
0093 struct s_smt_fp_txd volatile *tx_curr_get ;
0094 u_short tx_free ;
0095 u_short tx_used ;
0096 HW_PTR tx_bmu_ctl ;
0097 HW_PTR tx_bmu_dsc ;
0098 } ;
0099
0100
0101
0102
0103 struct s_smt_rx_queue {
0104 struct s_smt_fp_rxd volatile *rx_curr_put ;
0105 struct s_smt_fp_rxd volatile *rx_prev_put ;
0106 struct s_smt_fp_rxd volatile *rx_curr_get ;
0107 u_short rx_free ;
0108 u_short rx_used ;
0109 HW_PTR rx_bmu_ctl ;
0110 HW_PTR rx_bmu_dsc ;
0111 } ;
0112
0113 #define VOID_FRAME_OFF 0x00
0114 #define CLAIM_FRAME_OFF 0x08
0115 #define BEACON_FRAME_OFF 0x10
0116 #define DBEACON_FRAME_OFF 0x18
0117 #define RX_FIFO_OFF 0x21
0118
0119
0120 #define RBC_MEM_SIZE 0x8000
0121 #define SEND_ASYNC_AS_SYNC 0x1
0122 #define SYNC_TRAFFIC_ON 0x2
0123
0124
0125 #define RX_FIFO_SPACE 0x4000 - RX_FIFO_OFF
0126 #define TX_FIFO_SPACE 0x4000
0127
0128 #define TX_SMALL_FIFO 0x0900
0129 #define TX_MEDIUM_FIFO TX_FIFO_SPACE / 2
0130 #define TX_LARGE_FIFO TX_FIFO_SPACE - TX_SMALL_FIFO
0131
0132 #define RX_SMALL_FIFO 0x0900
0133 #define RX_LARGE_FIFO RX_FIFO_SPACE - RX_SMALL_FIFO
0134
0135 struct s_smt_fifo_conf {
0136 u_short rbc_ram_start ;
0137 u_short rbc_ram_end ;
0138 u_short rx1_fifo_start ;
0139 u_short rx1_fifo_size ;
0140 u_short rx2_fifo_start ;
0141 u_short rx2_fifo_size ;
0142 u_short tx_s_start ;
0143 u_short tx_s_size ;
0144 u_short tx_a0_start ;
0145 u_short tx_a0_size ;
0146 u_short fifo_config_mode ;
0147 } ;
0148
0149 #define FM_ADDRX (FM_ADDET|FM_EXGPA0|FM_EXGPA1)
0150
0151 struct s_smt_fp {
0152 u_short mdr2init ;
0153 u_short mdr3init ;
0154 u_short frselreg_init ;
0155 u_short rx_mode ;
0156 u_short nsa_mode ;
0157 u_short rx_prom ;
0158 u_short exgpa ;
0159
0160 struct err_st err_stats ;
0161
0162
0163
0164
0165 struct fddi_mac_sf {
0166 u_char mac_fc ;
0167 struct fddi_addr mac_dest ;
0168 struct fddi_addr mac_source ;
0169 u_char mac_info[0x20] ;
0170 } mac_sfb ;
0171
0172
0173
0174
0175
0176 #define QUEUE_S 0
0177 #define QUEUE_A0 1
0178 #define QUEUE_R1 0
0179 #define QUEUE_R2 1
0180 #define USED_QUEUES 2
0181
0182
0183
0184
0185 struct s_smt_tx_queue *tx[USED_QUEUES] ;
0186 struct s_smt_rx_queue *rx[USED_QUEUES] ;
0187
0188
0189
0190
0191 struct s_smt_tx_queue tx_q[USED_QUEUES] ;
0192 struct s_smt_rx_queue rx_q[USED_QUEUES] ;
0193
0194
0195
0196
0197 struct s_smt_fifo_conf fifo ;
0198
0199
0200 u_short s2u ;
0201 u_short s2l ;
0202
0203
0204 HW_PTR fm_st1u ;
0205 HW_PTR fm_st1l ;
0206 HW_PTR fm_st2u ;
0207 HW_PTR fm_st2l ;
0208 HW_PTR fm_st3u ;
0209 HW_PTR fm_st3l ;
0210
0211
0212
0213
0214
0215 #define FPMAX_MULTICAST 32
0216 #define SMT_MAX_MULTI 4
0217 struct {
0218 struct s_fpmc {
0219 struct fddi_addr a ;
0220 u_char n ;
0221 u_char perm ;
0222 } table[FPMAX_MULTICAST] ;
0223 } mc ;
0224 struct fddi_addr group_addr ;
0225 u_long func_addr ;
0226 int smt_slots_used ;
0227 int os_slots_used ;
0228
0229 } ;
0230
0231
0232
0233
0234 #define RX_ENABLE_ALLMULTI 1
0235 #define RX_DISABLE_ALLMULTI 2
0236 #define RX_ENABLE_PROMISC 3
0237 #define RX_DISABLE_PROMISC 4
0238 #define RX_ENABLE_NSA 5
0239 #define RX_DISABLE_NSA 6
0240
0241
0242
0243
0244
0245
0246
0247 #ifdef AIX
0248 #define MDR_REV
0249 #define AIX_REVERSE(x) ((((x)<<24L)&0xff000000L) + \
0250 (((x)<< 8L)&0x00ff0000L) + \
0251 (((x)>> 8L)&0x0000ff00L) + \
0252 (((x)>>24L)&0x000000ffL))
0253 #else
0254 #ifndef AIX_REVERSE
0255 #define AIX_REVERSE(x) (x)
0256 #endif
0257 #endif
0258
0259 #ifdef MDR_REV
0260 #define MDR_REVERSE(x) ((((x)<<24L)&0xff000000L) + \
0261 (((x)<< 8L)&0x00ff0000L) + \
0262 (((x)>> 8L)&0x0000ff00L) + \
0263 (((x)>>24L)&0x000000ffL))
0264 #else
0265 #ifndef MDR_REVERSE
0266 #define MDR_REVERSE(x) (x)
0267 #endif
0268 #endif
0269
0270 #endif