]> Git Repo - linux.git/blob - drivers/net/fddi/skfp/h/hwmtm.h
ASoC: simple-card: Use snd_soc_of_parse_aux_devs()
[linux.git] / drivers / net / fddi / skfp / h / hwmtm.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /******************************************************************************
3  *
4  *      (C)Copyright 1998,1999 SysKonnect,
5  *      a business unit of Schneider & Koch & Co. Datensysteme GmbH.
6  *
7  *      The information in this file is provided "AS IS" without warranty.
8  *
9  ******************************************************************************/
10
11 #ifndef _HWM_
12 #define _HWM_
13
14 #include "mbuf.h"
15
16 /*
17  * MACRO for DMA synchronization:
18  *      The descriptor 'desc' is flushed for the device 'flag'.
19  *      Devices are the CPU (DDI_DMA_SYNC_FORCPU) and the
20  *      adapter (DDI_DMA_SYNC_FORDEV).
21  *
22  *      'desc'  Pointer to a Rx or Tx descriptor.
23  *      'flag'  Flag for direction (view for CPU or DEVICE) that
24  *              should be synchronized.
25  *
26  *      Empty macros and defines are specified here. The real macro
27  *      is os-specific and should be defined in osdef1st.h.
28  */
29 #ifndef DRV_BUF_FLUSH
30 #define DRV_BUF_FLUSH(desc,flag)
31 #define DDI_DMA_SYNC_FORCPU
32 #define DDI_DMA_SYNC_FORDEV
33 #endif
34
35         /*
36          * hardware modul dependent receive modes
37          */
38 #define RX_ENABLE_PASS_SMT      21
39 #define RX_DISABLE_PASS_SMT     22
40 #define RX_ENABLE_PASS_NSA      23
41 #define RX_DISABLE_PASS_NSA     24
42 #define RX_ENABLE_PASS_DB       25
43 #define RX_DISABLE_PASS_DB      26
44 #define RX_DISABLE_PASS_ALL     27
45 #define RX_DISABLE_LLC_PROMISC  28
46 #define RX_ENABLE_LLC_PROMISC   29
47
48
49 #ifndef DMA_RD
50 #define DMA_RD          1       /* memory -> hw */
51 #endif
52 #ifndef DMA_WR
53 #define DMA_WR          2       /* hw -> memory */
54 #endif
55 #define SMT_BUF         0x80
56
57         /*
58          * bits of the frame status byte
59          */
60 #define EN_IRQ_EOF      0x02    /* get IRQ after end of frame transmission */
61 #define LOC_TX          0x04    /* send frame to the local SMT */
62 #define LAST_FRAG       0x08    /* last TxD of the frame */
63 #define FIRST_FRAG      0x10    /* first TxD of the frame */
64 #define LAN_TX          0x20    /* send frame to network if set */
65 #define RING_DOWN       0x40    /* error: unable to send, ring down */
66 #define OUT_OF_TXD      0x80    /* error: not enough TxDs available */
67
68
69 #ifndef NULL
70 #define NULL            0
71 #endif
72
73 #define C_INDIC         (1L<<25)
74 #define A_INDIC         (1L<<26)
75 #define RD_FS_LOCAL     0x80
76
77         /*
78          * DEBUG FLAGS
79          */
80 #define DEBUG_SMTF      1
81 #define DEBUG_SMT       2
82 #define DEBUG_ECM       3
83 #define DEBUG_RMT       4
84 #define DEBUG_CFM       5
85 #define DEBUG_PCM       6
86 #define DEBUG_SBA       7
87 #define DEBUG_ESS       8
88
89 #define DB_HWM_RX       10
90 #define DB_HWM_TX       11
91 #define DB_HWM_GEN      12
92
93 struct s_mbuf_pool {
94 #ifndef MB_OUTSIDE_SMC
95         SMbuf           mb[MAX_MBUF] ;          /* mbuf pool */
96 #endif
97         SMbuf           *mb_start ;             /* points to the first mb */
98         SMbuf           *mb_free ;              /* free queue */
99 } ;
100
101 struct hwm_r {
102         /*
103          * hardware modul specific receive variables
104          */
105         u_int                   len ;           /* length of the whole frame */
106         char                    *mb_pos ;       /* SMbuf receive position */
107 } ;
108
109 struct hw_modul {
110         /*
111          * All hardware modul specific variables
112          */
113         struct  s_mbuf_pool     mbuf_pool ;
114         struct  hwm_r   r ;
115
116         union s_fp_descr volatile *descr_p ; /* points to the desriptor area */
117
118         u_short pass_SMT ;              /* pass SMT frames */
119         u_short pass_NSA ;              /* pass all NSA frames */
120         u_short pass_DB ;               /* pass Direct Beacon Frames */
121         u_short pass_llc_promisc ;      /* pass all llc frames (default ON) */
122
123         SMbuf   *llc_rx_pipe ;          /* points to the first queued llc fr */
124         SMbuf   *llc_rx_tail ;          /* points to the last queued llc fr */
125         int     queued_rx_frames ;      /* number of queued frames */
126
127         SMbuf   *txd_tx_pipe ;          /* points to first mb in the txd ring */
128         SMbuf   *txd_tx_tail ;          /* points to last mb in the txd ring */
129         int     queued_txd_mb ;         /* number of SMT MBufs in txd ring */
130
131         int     rx_break ;              /* rev. was breaked because ind. off */
132         int     leave_isr ;             /* leave fddi_isr immedeately if set */
133         int     isr_flag ;              /* set, when HWM is entered from isr */
134         /*
135          * variables for the current transmit frame
136          */
137         struct s_smt_tx_queue *tx_p ;   /* pointer to the transmit queue */
138         u_long  tx_descr ;              /* tx descriptor for FORMAC+ */
139         int     tx_len ;                /* tx frame length */
140         SMbuf   *tx_mb ;                /* SMT tx MBuf pointer */
141         char    *tx_data ;              /* data pointer to the SMT tx Mbuf */
142
143         int     detec_count ;           /* counter for out of RxD condition */
144         u_long  rx_len_error ;          /* rx len FORMAC != sum of fragments */
145 } ;
146
147
148 /*
149  * DEBUG structs and macros
150  */
151
152 #ifdef  DEBUG
153 struct os_debug {
154         int     hwm_rx ;
155         int     hwm_tx ;
156         int     hwm_gen ;
157 } ;
158 #endif
159
160 #ifdef  DEBUG
161 #ifdef  DEBUG_BRD
162 #define DB_P    smc->debug
163 #else
164 #define DB_P    debug
165 #endif
166
167 #define DB_RX(lev, fmt, ...)                                            \
168 do {                                                                    \
169         if (DB_P.d_os.hwm_rx >= (lev))                                  \
170                 printf(fmt "\n", ##__VA_ARGS__);                        \
171 } while (0)
172 #define DB_TX(lev, fmt, ...)                                            \
173 do {                                                                    \
174         if (DB_P.d_os.hwm_tx >= (lev))                                  \
175                 printf(fmt "\n", ##__VA_ARGS__);                        \
176 } while (0)
177 #define DB_GEN(lev, fmt, ...)                                           \
178 do {                                                                    \
179         if (DB_P.d_os.hwm_gen >= (lev))                                 \
180                 printf(fmt "\n", ##__VA_ARGS__);                        \
181 } while (0)
182 #else   /* DEBUG */
183 #define DB_RX(lev, fmt, ...)    no_printk(fmt "\n", ##__VA_ARGS__)
184 #define DB_TX(lev, fmt, ...)    no_printk(fmt "\n", ##__VA_ARGS__)
185 #define DB_GEN(lev, fmt, ...)   no_printk(fmt "\n", ##__VA_ARGS__)
186 #endif  /* DEBUG */
187
188 #ifndef SK_BREAK
189 #define SK_BREAK()
190 #endif
191
192
193 /*
194  * HWM Macros
195  */
196
197 /*
198  *      BEGIN_MANUAL_ENTRY(HWM_GET_TX_PHYS)
199  *      u_long HWM_GET_TX_PHYS(txd)
200  *
201  * function     MACRO           (hardware module, hwmtm.h)
202  *              This macro may be invoked by the OS-specific module to read
203  *              the physical address of the specified TxD.
204  *
205  * para txd     pointer to the TxD
206  *
207  *      END_MANUAL_ENTRY
208  */
209 #define HWM_GET_TX_PHYS(txd)            (u_long)AIX_REVERSE((txd)->txd_tbadr)
210
211 /*
212  *      BEGIN_MANUAL_ENTRY(HWM_GET_TX_LEN)
213  *      int HWM_GET_TX_LEN(txd)
214  *
215  * function     MACRO           (hardware module, hwmtm.h)
216  *              This macro may be invoked by the OS-specific module to read
217  *              the fragment length of the specified TxD
218  *
219  * para rxd     pointer to the TxD
220  *
221  * return       the length of the fragment in bytes
222  *
223  *      END_MANUAL_ENTRY
224  */
225 #define HWM_GET_TX_LEN(txd)     ((int)AIX_REVERSE((txd)->txd_tbctrl)& RD_LENGTH)
226
227 /*
228  *      BEGIN_MANUAL_ENTRY(HWM_GET_TX_USED)
229  *      txd *HWM_GET_TX_USED(smc,queue)
230  *
231  * function     MACRO           (hardware module, hwmtm.h)
232  *              This macro may be invoked by the OS-specific module to get the
233  *              number of used TxDs for the queue, specified by the index.
234  *
235  * para queue   the number of the send queue: Can be specified by
236  *              QUEUE_A0, QUEUE_S or (frame_status & QUEUE_A0)
237  *
238  * return       number of used TxDs for this send queue
239  *
240  *      END_MANUAL_ENTRY
241  */
242 #define HWM_GET_TX_USED(smc,queue)      (int) (smc)->hw.fp.tx_q[queue].tx_used
243
244 /*
245  *      BEGIN_MANUAL_ENTRY(HWM_GET_CURR_TXD)
246  *      txd *HWM_GET_CURR_TXD(smc,queue)
247  *
248  * function     MACRO           (hardware module, hwmtm.h)
249  *              This macro may be invoked by the OS-specific module to get the
250  *              pointer to the TxD which points to the current queue put
251  *              position.
252  *
253  * para queue   the number of the send queue: Can be specified by
254  *              QUEUE_A0, QUEUE_S or (frame_status & QUEUE_A0)
255  *
256  * return       pointer to the current TxD
257  *
258  *      END_MANUAL_ENTRY
259  */
260 #define HWM_GET_CURR_TXD(smc,queue)     (struct s_smt_fp_txd volatile *)\
261                                         (smc)->hw.fp.tx_q[queue].tx_curr_put
262
263 /*
264  *      BEGIN_MANUAL_ENTRY(HWM_GET_RX_FRAG_LEN)
265  *      int HWM_GET_RX_FRAG_LEN(rxd)
266  *
267  * function     MACRO           (hardware module, hwmtm.h)
268  *              This macro may be invoked by the OS-specific module to read
269  *              the fragment length of the specified RxD
270  *
271  * para rxd     pointer to the RxD
272  *
273  * return       the length of the fragment in bytes
274  *
275  *      END_MANUAL_ENTRY
276  */
277 #define HWM_GET_RX_FRAG_LEN(rxd)        ((int)AIX_REVERSE((rxd)->rxd_rbctrl)& \
278                                 RD_LENGTH)
279
280 /*
281  *      BEGIN_MANUAL_ENTRY(HWM_GET_RX_PHYS)
282  *      u_long HWM_GET_RX_PHYS(rxd)
283  *
284  * function     MACRO           (hardware module, hwmtm.h)
285  *              This macro may be invoked by the OS-specific module to read
286  *              the physical address of the specified RxD.
287  *
288  * para rxd     pointer to the RxD
289  *
290  * return       the RxD's physical pointer to the data fragment
291  *
292  *      END_MANUAL_ENTRY
293  */
294 #define HWM_GET_RX_PHYS(rxd)    (u_long)AIX_REVERSE((rxd)->rxd_rbadr)
295
296 /*
297  *      BEGIN_MANUAL_ENTRY(HWM_GET_RX_USED)
298  *      int HWM_GET_RX_USED(smc)
299  *
300  * function     MACRO           (hardware module, hwmtm.h)
301  *              This macro may be invoked by the OS-specific module to get
302  *              the count of used RXDs in receive queue 1.
303  *
304  * return       the used RXD count of receive queue 1
305  *
306  * NOTE: Remember, because of an ASIC bug at least one RXD should be unused
307  *       in the descriptor ring !
308  *
309  *      END_MANUAL_ENTRY
310  */
311 #define HWM_GET_RX_USED(smc)    ((int)(smc)->hw.fp.rx_q[QUEUE_R1].rx_used)
312
313 /*
314  *      BEGIN_MANUAL_ENTRY(HWM_GET_RX_FREE)
315  *      int HWM_GET_RX_FREE(smc)
316  *
317  * function     MACRO           (hardware module, hwmtm.h)
318  *              This macro may be invoked by the OS-specific module to get
319  *              the rxd_free count of receive queue 1.
320  *
321  * return       the rxd_free count of receive queue 1
322  *
323  *      END_MANUAL_ENTRY
324  */
325 #define HWM_GET_RX_FREE(smc)    ((int)(smc)->hw.fp.rx_q[QUEUE_R1].rx_free-1)
326
327 /*
328  *      BEGIN_MANUAL_ENTRY(HWM_GET_CURR_RXD)
329  *      rxd *HWM_GET_CURR_RXD(smc)
330  *
331  * function     MACRO           (hardware module, hwmtm.h)
332  *              This macro may be invoked by the OS-specific module to get the
333  *              pointer to the RxD which points to the current queue put
334  *              position.
335  *
336  * return       pointer to the current RxD
337  *
338  *      END_MANUAL_ENTRY
339  */
340 #define HWM_GET_CURR_RXD(smc)   (struct s_smt_fp_rxd volatile *)\
341                                 (smc)->hw.fp.rx_q[QUEUE_R1].rx_curr_put
342
343 /*
344  *      BEGIN_MANUAL_ENTRY(HWM_RX_CHECK)
345  *      void HWM_RX_CHECK(smc,low_water)
346  *
347  * function     MACRO           (hardware module, hwmtm.h)
348  *              This macro is invoked by the OS-specific before it left the
349  *              function mac_drv_rx_complete. This macro calls mac_drv_fill_rxd
350  *              if the number of used RxDs is equal or lower than the
351  *              the given low water mark.
352  *
353  * para low_water       low water mark of used RxD's
354  *
355  *      END_MANUAL_ENTRY
356  */
357 #ifndef HWM_NO_FLOW_CTL
358 #define HWM_RX_CHECK(smc,low_water) {\
359         if ((low_water) >= (smc)->hw.fp.rx_q[QUEUE_R1].rx_used) {\
360                 mac_drv_fill_rxd(smc) ;\
361         }\
362 }
363 #else
364 #define HWM_RX_CHECK(smc,low_water)             mac_drv_fill_rxd(smc)
365 #endif
366
367 #ifndef HWM_EBASE
368 #define HWM_EBASE       500
369 #endif
370
371 #define HWM_E0001       HWM_EBASE + 1
372 #define HWM_E0001_MSG   "HWM: Wrong size of s_rxd_os struct"
373 #define HWM_E0002       HWM_EBASE + 2
374 #define HWM_E0002_MSG   "HWM: Wrong size of s_txd_os struct"
375 #define HWM_E0003       HWM_EBASE + 3
376 #define HWM_E0003_MSG   "HWM: smt_free_mbuf() called with NULL pointer"
377 #define HWM_E0004       HWM_EBASE + 4
378 #define HWM_E0004_MSG   "HWM: Parity error rx queue 1"
379 #define HWM_E0005       HWM_EBASE + 5
380 #define HWM_E0005_MSG   "HWM: Encoding error rx queue 1"
381 #define HWM_E0006       HWM_EBASE + 6
382 #define HWM_E0006_MSG   "HWM: Encoding error async tx queue"
383 #define HWM_E0007       HWM_EBASE + 7
384 #define HWM_E0007_MSG   "HWM: Encoding error sync tx queue"
385 #define HWM_E0008       HWM_EBASE + 8
386 #define HWM_E0008_MSG   ""
387 #define HWM_E0009       HWM_EBASE + 9
388 #define HWM_E0009_MSG   "HWM: Out of RxD condition detected"
389 #define HWM_E0010       HWM_EBASE + 10
390 #define HWM_E0010_MSG   "HWM: A protocol layer has tried to send a frame with an invalid frame control"
391 #define HWM_E0011       HWM_EBASE + 11
392 #define HWM_E0011_MSG   "HWM: mac_drv_clear_tx_queue was called although the hardware wasn't stopped"
393 #define HWM_E0012       HWM_EBASE + 12
394 #define HWM_E0012_MSG   "HWM: mac_drv_clear_rx_queue was called although the hardware wasn't stopped"
395 #define HWM_E0013       HWM_EBASE + 13
396 #define HWM_E0013_MSG   "HWM: mac_drv_repair_descr was called although the hardware wasn't stopped"
397
398 #endif
This page took 0.054539 seconds and 4 git commands to generate.