OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [net/] [skfp/] [h/] [fplustm.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/******************************************************************************
2
 *
3
 *      (C)Copyright 1998,1999 SysKonnect,
4
 *      a business unit of Schneider & Koch & Co. Datensysteme GmbH.
5
 *
6
 *      This program is free software; you can redistribute it and/or modify
7
 *      it under the terms of the GNU General Public License as published by
8
 *      the Free Software Foundation; either version 2 of the License, or
9
 *      (at your option) any later version.
10
 *
11
 *      The information in this file is provided "AS IS" without warranty.
12
 *
13
 ******************************************************************************/
14
 
15
/*
16
 *      AMD Fplus in tag mode data structs
17
 *      defs for fplustm.c
18
 */
19
 
20
#ifndef _FPLUS_
21
#define _FPLUS_
22
 
23
#ifndef HW_PTR
24
#define HW_PTR  void __iomem *
25
#endif
26
 
27
/*
28
 * fplus error statistic structure
29
 */
30
struct err_st {
31
        u_long err_valid ;              /* memory status valid */
32
        u_long err_abort ;              /* memory status receive abort */
33
        u_long err_e_indicator ;        /* error indicator */
34
        u_long err_crc ;                /* error detected (CRC or length) */
35
        u_long err_llc_frame ;          /* LLC frame */
36
        u_long err_mac_frame ;          /* MAC frame */
37
        u_long err_smt_frame ;          /* SMT frame */
38
        u_long err_imp_frame ;          /* implementer frame */
39
        u_long err_no_buf ;             /* no buffer available */
40
        u_long err_too_long ;           /* longer than max. buffer */
41
        u_long err_bec_stat ;           /* beacon state entered */
42
        u_long err_clm_stat ;           /* claim state entered */
43
        u_long err_sifg_det ;           /* short interframe gap detect */
44
        u_long err_phinv ;              /* PHY invalid */
45
        u_long err_tkiss ;              /* token issued */
46
        u_long err_tkerr ;              /* token error */
47
} ;
48
 
49
/*
50
 *      Transmit Descriptor struct
51
 */
52
struct s_smt_fp_txd {
53
        u_int txd_tbctrl ;              /* transmit buffer control */
54
        u_int txd_txdscr ;              /* transmit frame status word */
55
        u_int txd_tbadr ;               /* physical tx buffer address */
56
        u_int txd_ntdadr ;              /* physical pointer to the next TxD */
57
#ifdef  ENA_64BIT_SUP
58
        u_int txd_tbadr_hi ;            /* physical tx buffer addr (high dword)*/
59
#endif
60
        char far *txd_virt ;            /* virtual pointer to the data frag */
61
                                        /* virt pointer to the next TxD */
62
        struct s_smt_fp_txd volatile far *txd_next ;
63
        struct s_txd_os txd_os ;        /* OS - specific struct */
64
} ;
65
 
66
/*
67
 *      Receive Descriptor struct
68
 */
69
struct s_smt_fp_rxd {
70
        u_int rxd_rbctrl ;              /* receive buffer control */
71
        u_int rxd_rfsw ;                /* receive frame status word */
72
        u_int rxd_rbadr ;               /* physical rx buffer address */
73
        u_int rxd_nrdadr ;              /* physical pointer to the next RxD */
74
#ifdef  ENA_64BIT_SUP
75
        u_int rxd_rbadr_hi ;            /* physical tx buffer addr (high dword)*/
76
#endif
77
        char far *rxd_virt ;            /* virtual pointer to the data frag */
78
                                        /* virt pointer to the next RxD */
79
        struct s_smt_fp_rxd volatile far *rxd_next ;
80
        struct s_rxd_os rxd_os ;        /* OS - specific struct */
81
} ;
82
 
83
/*
84
 *      Descriptor Union Definition
85
 */
86
union s_fp_descr {
87
        struct  s_smt_fp_txd t ;                /* pointer to the TxD */
88
        struct  s_smt_fp_rxd r ;                /* pointer to the RxD */
89
} ;
90
 
91
/*
92
 *      TxD Ring Control struct
93
 */
94
struct s_smt_tx_queue {
95
        struct s_smt_fp_txd volatile *tx_curr_put ; /* next free TxD */
96
        struct s_smt_fp_txd volatile *tx_prev_put ; /* shadow put pointer */
97
        struct s_smt_fp_txd volatile *tx_curr_get ; /* next TxD to release*/
98
        u_short tx_free ;                       /* count of free TxD's */
99
        u_short tx_used ;                       /* count of used TxD's */
100
        HW_PTR tx_bmu_ctl ;                     /* BMU addr for tx start */
101
        HW_PTR tx_bmu_dsc ;                     /* BMU addr for curr dsc. */
102
} ;
103
 
104
/*
105
 *      RxD Ring Control struct
106
 */
107
struct s_smt_rx_queue {
108
        struct s_smt_fp_rxd volatile *rx_curr_put ; /* next RxD to queue into */
109
        struct s_smt_fp_rxd volatile *rx_prev_put ; /* shadow put pointer */
110
        struct s_smt_fp_rxd volatile *rx_curr_get ; /* next RxD to fill */
111
        u_short rx_free ;                       /* count of free RxD's */
112
        u_short rx_used ;                       /* count of used RxD's */
113
        HW_PTR rx_bmu_ctl ;                     /* BMU addr for rx start */
114
        HW_PTR rx_bmu_dsc ;                     /* BMU addr for curr dsc. */
115
} ;
116
 
117
#define VOID_FRAME_OFF          0x00
118
#define CLAIM_FRAME_OFF         0x08
119
#define BEACON_FRAME_OFF        0x10
120
#define DBEACON_FRAME_OFF       0x18
121
#define RX_FIFO_OFF             0x21            /* to get a prime number for */
122
                                                /* the RX_FIFO_SPACE */
123
 
124
#define RBC_MEM_SIZE            0x8000
125
#define SEND_ASYNC_AS_SYNC      0x1
126
#define SYNC_TRAFFIC_ON         0x2
127
 
128
/* big FIFO memory */
129
#define RX_FIFO_SPACE           0x4000 - RX_FIFO_OFF
130
#define TX_FIFO_SPACE           0x4000
131
 
132
#define TX_SMALL_FIFO           0x0900
133
#define TX_MEDIUM_FIFO          TX_FIFO_SPACE / 2       
134
#define TX_LARGE_FIFO           TX_FIFO_SPACE - TX_SMALL_FIFO   
135
 
136
#define RX_SMALL_FIFO           0x0900
137
#define RX_LARGE_FIFO           RX_FIFO_SPACE - RX_SMALL_FIFO   
138
 
139
struct s_smt_fifo_conf {
140
        u_short rbc_ram_start ;         /* FIFO start address */
141
        u_short rbc_ram_end ;           /* FIFO size */
142
        u_short rx1_fifo_start ;        /* rx queue start address */
143
        u_short rx1_fifo_size ;         /* rx queue size */
144
        u_short rx2_fifo_start ;        /* rx queue start address */
145
        u_short rx2_fifo_size ;         /* rx queue size */
146
        u_short tx_s_start ;            /* sync queue start address */
147
        u_short tx_s_size ;             /* sync queue size */
148
        u_short tx_a0_start ;           /* async queue A0 start address */
149
        u_short tx_a0_size ;            /* async queue A0 size */
150
        u_short fifo_config_mode ;      /* FIFO configuration mode */
151
} ;
152
 
153
#define FM_ADDRX        (FM_ADDET|FM_EXGPA0|FM_EXGPA1)
154
 
155
struct s_smt_fp {
156
        u_short mdr2init ;              /* mode register 2 init value */
157
        u_short mdr3init ;              /* mode register 3 init value */
158
        u_short frselreg_init ;         /* frame selection register init val */
159
        u_short rx_mode ;               /* address mode broad/multi/promisc */
160
        u_short nsa_mode ;
161
        u_short rx_prom ;
162
        u_short exgpa ;
163
 
164
        struct err_st err_stats ;       /* error statistics */
165
 
166
        /*
167
         * MAC buffers
168
         */
169
        struct fddi_mac_sf {            /* special frame build buffer */
170
                u_char                  mac_fc ;
171
                struct fddi_addr        mac_dest ;
172
                struct fddi_addr        mac_source ;
173
                u_char                  mac_info[0x20] ;
174
        } mac_sfb ;
175
 
176
 
177
        /*
178
         * queues
179
         */
180
#define QUEUE_S                 0
181
#define QUEUE_A0                1
182
#define QUEUE_R1                0
183
#define QUEUE_R2                1
184
#define USED_QUEUES             2
185
 
186
        /*
187
         * queue pointers; points to the queue dependent variables
188
         */
189
        struct s_smt_tx_queue *tx[USED_QUEUES] ;
190
        struct s_smt_rx_queue *rx[USED_QUEUES] ;
191
 
192
        /*
193
         * queue dependent variables
194
         */
195
        struct s_smt_tx_queue tx_q[USED_QUEUES] ;
196
        struct s_smt_rx_queue rx_q[USED_QUEUES] ;
197
 
198
        /*
199
         * FIFO configuration struct
200
         */
201
        struct  s_smt_fifo_conf fifo ;
202
 
203
        /* last formac status */
204
        u_short  s2u ;
205
        u_short  s2l ;
206
 
207
        /* calculated FORMAC+ reg.addr. */
208
        HW_PTR  fm_st1u ;
209
        HW_PTR  fm_st1l ;
210
        HW_PTR  fm_st2u ;
211
        HW_PTR  fm_st2l ;
212
        HW_PTR  fm_st3u ;
213
        HW_PTR  fm_st3l ;
214
 
215
 
216
        /*
217
         * multicast table
218
         */
219
#define FPMAX_MULTICAST 32 
220
#define SMT_MAX_MULTI   4
221
        struct {
222
                struct s_fpmc {
223
                        struct fddi_addr        a ;     /* mc address */
224
                        u_char                  n ;     /* usage counter */
225
                        u_char                  perm ;  /* flag: permanent */
226
                } table[FPMAX_MULTICAST] ;
227
        } mc ;
228
        struct fddi_addr        group_addr ;
229
        u_long  func_addr ;             /* functional address */
230
        int     smt_slots_used ;        /* count of table entries for the SMT */
231
        int     os_slots_used ;         /* count of table entries */
232
                                        /* used by the os-specific module */
233
} ;
234
 
235
/*
236
 * modes for mac_set_rx_mode()
237
 */
238
#define RX_ENABLE_ALLMULTI      1       /* enable all multicasts */
239
#define RX_DISABLE_ALLMULTI     2       /* disable "enable all multicasts" */
240
#define RX_ENABLE_PROMISC       3       /* enable promiscous */
241
#define RX_DISABLE_PROMISC      4       /* disable promiscous */
242
#define RX_ENABLE_NSA           5       /* enable reception of NSA frames */
243
#define RX_DISABLE_NSA          6       /* disable reception of NSA frames */
244
 
245
 
246
/*
247
 * support for byte reversal in AIX
248
 * (descriptors and pointers must be byte reversed in memory
249
 *  CPU is big endian; M-Channel is little endian)
250
 */
251
#ifdef  AIX
252
#define MDR_REV
253
#define AIX_REVERSE(x)          ((((x)<<24L)&0xff000000L)       +       \
254
                                 (((x)<< 8L)&0x00ff0000L)       +       \
255
                                 (((x)>> 8L)&0x0000ff00L)       +       \
256
                                 (((x)>>24L)&0x000000ffL))
257
#else
258
#ifndef AIX_REVERSE
259
#define AIX_REVERSE(x)  (x)
260
#endif
261
#endif
262
 
263
#ifdef  MDR_REV 
264
#define MDR_REVERSE(x)          ((((x)<<24L)&0xff000000L)       +       \
265
                                 (((x)<< 8L)&0x00ff0000L)       +       \
266
                                 (((x)>> 8L)&0x0000ff00L)       +       \
267
                                 (((x)>>24L)&0x000000ffL))
268
#else
269
#ifndef MDR_REVERSE
270
#define MDR_REVERSE(x)  (x)
271
#endif
272
#endif
273
 
274
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.