Merge branch 'upstream' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
[linux-2.6] / drivers / net / sk98lin / h / skgepnm2.h
1 /*****************************************************************************
2  *
3  * Name:        skgepnm2.h
4  * Project:     GEnesis, PCI Gigabit Ethernet Adapter
5  * Version:     $Revision: 1.36 $
6  * Date:        $Date: 2003/05/23 12:45:13 $
7  * Purpose:     Defines for Private Network Management Interface
8  *
9  ****************************************************************************/
10
11 /******************************************************************************
12  *
13  *      (C)Copyright 1998-2002 SysKonnect GmbH.
14  *      (C)Copyright 2002-2003 Marvell.
15  *
16  *      This program is free software; you can redistribute it and/or modify
17  *      it under the terms of the GNU General Public License as published by
18  *      the Free Software Foundation; either version 2 of the License, or
19  *      (at your option) any later version.
20  *
21  *      The information in this file is provided "AS IS" without warranty.
22  *
23  ******************************************************************************/
24
25 #ifndef _SKGEPNM2_H_
26 #define _SKGEPNM2_H_
27
28 /*
29  * General definitions
30  */
31 #define SK_PNMI_CHIPSET_XMAC    1       /* XMAC11800FP */
32 #define SK_PNMI_CHIPSET_YUKON   2       /* YUKON */
33
34 #define SK_PNMI_BUS_PCI         1       /* PCI bus*/
35
36 /*
37  * Actions
38  */
39 #define SK_PNMI_ACT_IDLE                1
40 #define SK_PNMI_ACT_RESET               2
41 #define SK_PNMI_ACT_SELFTEST    3
42 #define SK_PNMI_ACT_RESETCNT    4
43
44 /*
45  * VPD releated defines
46  */
47
48 #define SK_PNMI_VPD_RW          1
49 #define SK_PNMI_VPD_RO          2
50
51 #define SK_PNMI_VPD_OK                  0
52 #define SK_PNMI_VPD_NOTFOUND    1
53 #define SK_PNMI_VPD_CUT                 2
54 #define SK_PNMI_VPD_TIMEOUT             3
55 #define SK_PNMI_VPD_FULL                4
56 #define SK_PNMI_VPD_NOWRITE             5
57 #define SK_PNMI_VPD_FATAL               6
58
59 #define SK_PNMI_VPD_IGNORE      0
60 #define SK_PNMI_VPD_CREATE      1
61 #define SK_PNMI_VPD_DELETE      2
62
63
64 /*
65  * RLMT related defines
66  */
67 #define SK_PNMI_DEF_RLMT_CHG_THRES      240     /* 4 changes per minute */
68
69
70 /*
71  * VCT internal status values
72  */
73 #define SK_PNMI_VCT_PENDING     32
74 #define SK_PNMI_VCT_TEST_DONE   64
75 #define SK_PNMI_VCT_LINK        128
76
77 /*
78  * Internal table definitions
79  */
80 #define SK_PNMI_GET             0
81 #define SK_PNMI_PRESET  1
82 #define SK_PNMI_SET             2
83
84 #define SK_PNMI_RO              0
85 #define SK_PNMI_RW              1
86 #define SK_PNMI_WO              2
87
88 typedef struct s_OidTabEntry {
89         SK_U32                  Id;
90         SK_U32                  InstanceNo;
91         unsigned int    StructSize;
92         unsigned int    Offset;
93         int                             Access;
94         int                             (* Func)(SK_AC *pAc, SK_IOC pIo, int action,
95                                                          SK_U32 Id, char* pBuf, unsigned int* pLen,
96                                                          SK_U32 Instance, unsigned int TableIndex,
97                                                          SK_U32 NetNumber);
98         SK_U16                  Param;
99 } SK_PNMI_TAB_ENTRY;
100
101
102 /*
103  * Trap lengths
104  */
105 #define SK_PNMI_TRAP_SIMPLE_LEN                 17
106 #define SK_PNMI_TRAP_SENSOR_LEN_BASE    46
107 #define SK_PNMI_TRAP_RLMT_CHANGE_LEN    23
108 #define SK_PNMI_TRAP_RLMT_PORT_LEN              23
109
110 /*
111  * Number of MAC types supported
112  */
113 #define SK_PNMI_MAC_TYPES       (SK_MAC_GMAC + 1)
114
115 /*
116  * MAC statistic data list (overall set for MAC types used)
117  */
118 enum SK_MACSTATS {
119         SK_PNMI_HTX                             = 0,
120         SK_PNMI_HTX_OCTET,
121         SK_PNMI_HTX_OCTETHIGH   = SK_PNMI_HTX_OCTET,
122         SK_PNMI_HTX_OCTETLOW,
123         SK_PNMI_HTX_BROADCAST,
124         SK_PNMI_HTX_MULTICAST,
125         SK_PNMI_HTX_UNICAST,
126         SK_PNMI_HTX_BURST,
127         SK_PNMI_HTX_PMACC,
128         SK_PNMI_HTX_MACC,
129         SK_PNMI_HTX_COL,
130         SK_PNMI_HTX_SINGLE_COL,
131         SK_PNMI_HTX_MULTI_COL,
132         SK_PNMI_HTX_EXCESS_COL,
133         SK_PNMI_HTX_LATE_COL,
134         SK_PNMI_HTX_DEFFERAL,
135         SK_PNMI_HTX_EXCESS_DEF,
136         SK_PNMI_HTX_UNDERRUN,
137         SK_PNMI_HTX_CARRIER,
138         SK_PNMI_HTX_UTILUNDER,
139         SK_PNMI_HTX_UTILOVER,
140         SK_PNMI_HTX_64,
141         SK_PNMI_HTX_127,
142         SK_PNMI_HTX_255,
143         SK_PNMI_HTX_511,
144         SK_PNMI_HTX_1023,
145         SK_PNMI_HTX_MAX,
146         SK_PNMI_HTX_LONGFRAMES,
147         SK_PNMI_HTX_SYNC,
148         SK_PNMI_HTX_SYNC_OCTET,
149         SK_PNMI_HTX_RESERVED,
150         
151         SK_PNMI_HRX,
152         SK_PNMI_HRX_OCTET,
153         SK_PNMI_HRX_OCTETHIGH   = SK_PNMI_HRX_OCTET,
154         SK_PNMI_HRX_OCTETLOW,
155         SK_PNMI_HRX_BADOCTET,
156         SK_PNMI_HRX_BADOCTETHIGH = SK_PNMI_HRX_BADOCTET,
157         SK_PNMI_HRX_BADOCTETLOW,
158         SK_PNMI_HRX_BROADCAST,
159         SK_PNMI_HRX_MULTICAST,
160         SK_PNMI_HRX_UNICAST,
161         SK_PNMI_HRX_PMACC,
162         SK_PNMI_HRX_MACC,
163         SK_PNMI_HRX_PMACC_ERR,
164         SK_PNMI_HRX_MACC_UNKWN,
165         SK_PNMI_HRX_BURST,
166         SK_PNMI_HRX_MISSED,
167         SK_PNMI_HRX_FRAMING,
168         SK_PNMI_HRX_UNDERSIZE,
169         SK_PNMI_HRX_OVERFLOW,
170         SK_PNMI_HRX_JABBER,
171         SK_PNMI_HRX_CARRIER,
172         SK_PNMI_HRX_IRLENGTH,
173         SK_PNMI_HRX_SYMBOL,
174         SK_PNMI_HRX_SHORTS,
175         SK_PNMI_HRX_RUNT,
176         SK_PNMI_HRX_TOO_LONG,
177         SK_PNMI_HRX_FCS,
178         SK_PNMI_HRX_CEXT,
179         SK_PNMI_HRX_UTILUNDER,
180         SK_PNMI_HRX_UTILOVER,
181         SK_PNMI_HRX_64,
182         SK_PNMI_HRX_127,
183         SK_PNMI_HRX_255,
184         SK_PNMI_HRX_511,
185         SK_PNMI_HRX_1023,
186         SK_PNMI_HRX_MAX,
187         SK_PNMI_HRX_LONGFRAMES,
188         
189         SK_PNMI_HRX_RESERVED,
190         
191         SK_PNMI_MAX_IDX         /* NOTE: Ensure SK_PNMI_CNT_NO is set to this value */
192 };
193
194 /*
195  * MAC specific data
196  */
197 typedef struct s_PnmiStatAddr {
198         SK_U16          Reg;            /* MAC register containing the value */
199         SK_BOOL         GetOffset;      /* TRUE: Offset managed by PNMI (call GetStatVal())*/
200 } SK_PNMI_STATADDR;
201
202
203 /*
204  * SK_PNMI_STRUCT_DATA copy offset evaluation macros
205  */
206 #define SK_PNMI_OFF(e)          ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
207 #define SK_PNMI_MAI_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
208 #define SK_PNMI_VPD_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_VPD *)0)->e))
209 #define SK_PNMI_SEN_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_SENSOR *)0)->e))
210 #define SK_PNMI_CHK_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_CHECKSUM *)0)->e))
211 #define SK_PNMI_STA_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_STAT *)0)->e))
212 #define SK_PNMI_CNF_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_CONF *)0)->e))
213 #define SK_PNMI_RLM_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT *)0)->e))
214 #define SK_PNMI_MON_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT_MONITOR *)0)->e))
215 #define SK_PNMI_TRP_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_TRAP *)0)->e))
216
217 #define SK_PNMI_SET_STAT(b,s,o) {SK_U32 Val32; char *pVal; \
218                                         Val32 = (s); \
219                                         pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
220                                                 &(((SK_PNMI_STRUCT_DATA *)0)-> \
221                                                 ReturnStatus.ErrorStatus)); \
222                                         SK_PNMI_STORE_U32(pVal, Val32); \
223                                         Val32 = (o); \
224                                         pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
225                                                 &(((SK_PNMI_STRUCT_DATA *)0)-> \
226                                                 ReturnStatus.ErrorOffset)); \
227                                         SK_PNMI_STORE_U32(pVal, Val32);}
228
229 /*
230  * Time macros
231  */
232 #ifndef SK_PNMI_HUNDREDS_SEC
233 #if SK_TICKS_PER_SEC == 100
234 #define SK_PNMI_HUNDREDS_SEC(t) (t)
235 #else
236 #define SK_PNMI_HUNDREDS_SEC(t) (((t) * 100) / (SK_TICKS_PER_SEC))
237 #endif /* !SK_TICKS_PER_SEC */
238 #endif /* !SK_PNMI_HUNDREDS_SEC */
239
240 /*
241  * Macros to work around alignment problems
242  */
243 #ifndef SK_PNMI_STORE_U16
244 #define SK_PNMI_STORE_U16(p,v)  {*(char *)(p) = *((char *)&(v)); \
245                                         *((char *)(p) + 1) = \
246                                                 *(((char *)&(v)) + 1);}
247 #endif
248
249 #ifndef SK_PNMI_STORE_U32
250 #define SK_PNMI_STORE_U32(p,v)  {*(char *)(p) = *((char *)&(v)); \
251                                         *((char *)(p) + 1) = \
252                                                 *(((char *)&(v)) + 1); \
253                                         *((char *)(p) + 2) = \
254                                                 *(((char *)&(v)) + 2); \
255                                         *((char *)(p) + 3) = \
256                                                 *(((char *)&(v)) + 3);}
257 #endif
258
259 #ifndef SK_PNMI_STORE_U64
260 #define SK_PNMI_STORE_U64(p,v)  {*(char *)(p) = *((char *)&(v)); \
261                                         *((char *)(p) + 1) = \
262                                                 *(((char *)&(v)) + 1); \
263                                         *((char *)(p) + 2) = \
264                                                 *(((char *)&(v)) + 2); \
265                                         *((char *)(p) + 3) = \
266                                                 *(((char *)&(v)) + 3); \
267                                         *((char *)(p) + 4) = \
268                                                 *(((char *)&(v)) + 4); \
269                                         *((char *)(p) + 5) = \
270                                                 *(((char *)&(v)) + 5); \
271                                         *((char *)(p) + 6) = \
272                                                 *(((char *)&(v)) + 6); \
273                                         *((char *)(p) + 7) = \
274                                                 *(((char *)&(v)) + 7);}
275 #endif
276
277 #ifndef SK_PNMI_READ_U16
278 #define SK_PNMI_READ_U16(p,v)   {*((char *)&(v)) = *(char *)(p); \
279                                         *(((char *)&(v)) + 1) = \
280                                                 *((char *)(p) + 1);}
281 #endif
282
283 #ifndef SK_PNMI_READ_U32
284 #define SK_PNMI_READ_U32(p,v)   {*((char *)&(v)) = *(char *)(p); \
285                                         *(((char *)&(v)) + 1) = \
286                                                 *((char *)(p) + 1); \
287                                         *(((char *)&(v)) + 2) = \
288                                                 *((char *)(p) + 2); \
289                                         *(((char *)&(v)) + 3) = \
290                                                 *((char *)(p) + 3);}
291 #endif
292
293 #ifndef SK_PNMI_READ_U64
294 #define SK_PNMI_READ_U64(p,v)   {*((char *)&(v)) = *(char *)(p); \
295                                         *(((char *)&(v)) + 1) = \
296                                                 *((char *)(p) + 1); \
297                                         *(((char *)&(v)) + 2) = \
298                                                 *((char *)(p) + 2); \
299                                         *(((char *)&(v)) + 3) = \
300                                                 *((char *)(p) + 3); \
301                                         *(((char *)&(v)) + 4) = \
302                                                 *((char *)(p) + 4); \
303                                         *(((char *)&(v)) + 5) = \
304                                                 *((char *)(p) + 5); \
305                                         *(((char *)&(v)) + 6) = \
306                                                 *((char *)(p) + 6); \
307                                         *(((char *)&(v)) + 7) = \
308                                                 *((char *)(p) + 7);}
309 #endif
310
311 /*
312  * Macros for Debug
313  */
314 #ifdef DEBUG
315
316 #define SK_PNMI_CHECKFLAGS(vSt) {if (pAC->Pnmi.MacUpdatedFlag > 0 || \
317                                         pAC->Pnmi.RlmtUpdatedFlag > 0 || \
318                                         pAC->Pnmi.SirqUpdatedFlag > 0) { \
319                                                 SK_DBG_MSG(pAC, \
320                                                 SK_DBGMOD_PNMI, \
321                                                 SK_DBGCAT_CTRL, \
322                                                 ("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
323                                                 vSt, \
324                                                 pAC->Pnmi.MacUpdatedFlag, \
325                                                 pAC->Pnmi.RlmtUpdatedFlag, \
326                                                 pAC->Pnmi.SirqUpdatedFlag))}}
327
328 #else   /* !DEBUG */
329
330 #define SK_PNMI_CHECKFLAGS(vSt) /* Nothing */
331
332 #endif  /* !DEBUG */
333
334 #endif  /* _SKGEPNM2_H_ */