]> git.karo-electronics.de Git - karo-tx-uboot.git/blob - drivers/sk98lin/h/skgepnm2.h
Initial revision
[karo-tx-uboot.git] / drivers / sk98lin / h / skgepnm2.h
1 /*****************************************************************************
2  *
3  * Name:        skgepnm2.h
4  * Project:     GEnesis, PCI Gigabit Ethernet Adapter
5  * Version:     $Revision$
6  * Date:        $Date$
7  * Purpose:     Defines for Private Network Management Interface
8  *
9  ****************************************************************************/
10
11 /******************************************************************************
12  *
13  *      (C)Copyright 1998-2001 SysKonnect GmbH.
14  *
15  *      This program is free software; you can redistribute it and/or modify
16  *      it under the terms of the GNU General Public License as published by
17  *      the Free Software Foundation; either version 2 of the License, or
18  *      (at your option) any later version.
19  *
20  *      The information in this file is provided "AS IS" without warranty.
21  *
22  ******************************************************************************/
23
24 /*****************************************************************************
25  *
26  * History:
27  *
28  *      $Log$
29  *      Revision 1.1  2007-03-09 09:43:58  lothar
30  *      Initial revision
31  *
32  *      Revision 1.34  2002/12/16 09:05:18  tschilli
33  *      Code for VCT handling added.
34  *
35  *      Revision 1.33  2002/09/10 09:00:03  rwahl
36  *      Adapted boolean definitions according sktypes.
37  *
38  *      Revision 1.32  2002/08/09 09:47:01  rwahl
39  *      Added write-only flag to oid access defines.
40  *      Editorial changes.
41  *
42  *      Revision 1.31  2002/07/17 19:23:18  rwahl
43  *      - Replaced MAC counter definitions by enumeration.
44  *      - Added definition SK_PNMI_MAC_TYPES.
45  *      - Added chipset defnition for Yukon.
46  *
47  *      Revision 1.30  2001/02/06 10:03:41  mkunz
48  *      - Pnmi V4 dual net support added. Interface functions and macros extended
49  *      - Vpd bug fixed
50  *      - OID_SKGE_MTU added
51  *
52  *      Revision 1.29  2001/01/22 13:41:37  rassmann
53  *      Supporting two nets on dual-port adapters.
54  *
55  *      Revision 1.28  2000/08/03 15:12:48  rwahl
56  *      - Additional comment for MAC statistic data structure.
57  *
58  *      Revision 1.27  2000/08/01 16:10:18  rwahl
59  *      - Added mac statistic data structure for StatRxLongFrame counter.
60  *
61  *      Revision 1.26  2000/03/31 13:51:34  rwahl
62  *      Added SK_UPTR cast to offset calculation for PNMI struct fields;
63  *      missing cast caused compiler warnings by Win64 compiler.
64  *
65  *      Revision 1.25  1999/11/22 13:57:41  cgoos
66  *      Changed license header to GPL.
67  *      Allowing overwrite for SK_PNMI_STORE/_READ defines.
68  *
69  *      Revision 1.24  1999/04/13 15:11:11  mhaveman
70  *      Changed copyright.
71  *
72  *      Revision 1.23  1999/01/28 15:07:12  mhaveman
73  *      Changed default threshold for port switches per hour from 10
74  *      to 240 which means 4 switches per minute. This fits better
75  *      the granularity of 32 for the port switch estimate
76  *      counter.
77  *
78  *      Revision 1.22  1999/01/05 12:52:30  mhaveman
79  *      Removed macro SK_PNMI_MICRO_SEC.
80  *
81  *      Revision 1.21  1999/01/05 12:50:34  mhaveman
82  *      Enlarged macro definition SK_PNMI_HUNDREDS_SEC() so that no 64-bit
83  *      arithmetic is necessary if SK_TICKS_PER_SEC is 100.
84  *
85  *      Revision 1.20  1998/12/09 14:02:53  mhaveman
86  *      Defined macro SK_PNMI_DEF_RLMT_CHG_THRES for default port switch
87  *      threshold.
88  *
89  *      Revision 1.19  1998/12/03 11:28:41  mhaveman
90  *      Removed SK_PNMI_CHECKPTR macro.
91  *
92  *      Revision 1.18  1998/12/03 11:21:00  mhaveman
93  *      -Added pointer check macro SK_PNMI_CHECKPTR
94  *      -Added macros SK_PNMI_VPD_ARR_SIZE and SK_PNMI_VPD_STR_SIZE for
95  *       VPD key evaluation.
96  *
97  *      Revision 1.17  1998/11/20 13:20:33  mhaveman
98  *      Fixed bug in SK_PNMI_SET_STAT macro. ErrorStatus was not correctly set.
99  *
100  *      Revision 1.16  1998/11/20 08:08:49  mhaveman
101  *      Macro SK_PNMI_CHECKFLAGS has got a if clause.
102  *
103  *      Revision 1.15  1998/11/03 13:53:40  mhaveman
104  *      Fixed alignment problem in macor SK_PNMI_SET_STAT macro.
105  *
106  *      Revision 1.14  1998/10/30 15:50:13  mhaveman
107  *      Added macro SK_PNMI_MICRO_SEC()
108  *
109  *      Revision 1.13  1998/10/30 12:32:20  mhaveman
110  *      Added forgotten cast in SK_PNMI_READ_U32 macro.
111  *
112  *      Revision 1.12  1998/10/29 15:40:26  mhaveman
113  *      -Changed SK_PNMI_TRAP_SENSOR_LEN because SensorDescr has now
114  *       variable string length.
115  *      -Defined SK_PNMI_CHECKFLAGS macro
116  *
117  *      Revision 1.11  1998/10/29 08:53:34  mhaveman
118  *      Removed SK_PNMI_RLM_XXX table indexed because these counters need
119  *      not been saved over XMAC resets.
120  *
121  *      Revision 1.10  1998/10/28 08:48:20  mhaveman
122  *      -Added macros for storage according to alignment
123  *      -Changed type of Instance to SK_U32 because of VPD
124  *      -Removed trap structures. Not needed because of alignment problem
125  *      -Changed type of Action form SK_U8 to int
126  *
127  *      Revision 1.9  1998/10/21 13:34:45  mhaveman
128  *      Shit, mismatched calculation of SK_PNMI_HUNDREDS_SEC. Corrected.
129  *
130  *      Revision 1.8  1998/10/21 13:24:58  mhaveman
131  *      Changed calculation of hundreds of seconds.
132  *
133  *      Revision 1.7  1998/10/20 07:31:41  mhaveman
134  *      Made type changes to unsigned int where possible.
135  *
136  *      Revision 1.6  1998/09/04 17:04:05  mhaveman
137  *      Added Sync counters to offset storage to provided settled values on
138  *      port switch.
139  *
140  *      Revision 1.5  1998/09/04 12:45:35  mhaveman
141  *      Removed dummies for SK_DRIVER_ macros. They should be added by driver
142  *      writer in skdrv2nd.h.
143  *
144  *      Revision 1.4  1998/09/04 11:59:50  mhaveman
145  *      Everything compiles now. Driver Macros for counting still missing.
146  *
147  *      Revision 1.3  1998/08/24 12:01:35  mhaveman
148  *      Intermediate state.
149  *
150  *      Revision 1.2  1998/08/17 07:51:40  mhaveman
151  *      Intermediate state.
152  *
153  *      Revision 1.1  1998/08/11 09:08:40  mhaveman
154  *      Intermediate state.
155  *
156  ****************************************************************************/
157
158 #ifndef _SKGEPNM2_H_
159 #define _SKGEPNM2_H_
160
161 /*
162  * General definitions
163  */
164 #define SK_PNMI_CHIPSET_XMAC    1       /* XMAC11800FP */
165 #define SK_PNMI_CHIPSET_YUKON   2       /* YUKON */
166
167 #define SK_PNMI_BUS_PCI         1       /* PCI bus*/
168
169 /*
170  * Actions
171  */
172 #define SK_PNMI_ACT_IDLE                1
173 #define SK_PNMI_ACT_RESET               2
174 #define SK_PNMI_ACT_SELFTEST    3
175 #define SK_PNMI_ACT_RESETCNT    4
176
177 /*
178  * VPD releated defines
179  */
180
181 #define SK_PNMI_VPD_RW          1
182 #define SK_PNMI_VPD_RO          2
183
184 #define SK_PNMI_VPD_OK                  0
185 #define SK_PNMI_VPD_NOTFOUND    1
186 #define SK_PNMI_VPD_CUT                 2
187 #define SK_PNMI_VPD_TIMEOUT             3
188 #define SK_PNMI_VPD_FULL                4
189 #define SK_PNMI_VPD_NOWRITE             5
190 #define SK_PNMI_VPD_FATAL               6
191
192 #define SK_PNMI_VPD_IGNORE      0
193 #define SK_PNMI_VPD_CREATE      1
194 #define SK_PNMI_VPD_DELETE      2
195
196
197 /*
198  * RLMT related defines
199  */
200 #define SK_PNMI_DEF_RLMT_CHG_THRES      240     /* 4 changes per minute */
201
202
203 /*
204  * VCT internal status values
205  */
206 #define SK_PNMI_VCT_PENDING     32
207 #define SK_PNMI_VCT_TEST_DONE   64
208 #define SK_PNMI_VCT_LINK        128
209
210 /*
211  * Internal table definitions
212  */
213 #define SK_PNMI_GET             0
214 #define SK_PNMI_PRESET  1
215 #define SK_PNMI_SET             2
216
217 #define SK_PNMI_RO              0
218 #define SK_PNMI_RW              1
219 #define SK_PNMI_WO              2
220
221 typedef struct s_OidTabEntry {
222         SK_U32                  Id;
223         SK_U32                  InstanceNo;
224         unsigned int    StructSize;
225         unsigned int    Offset;
226         int                             Access;
227         int                             (* Func)(SK_AC *pAc, SK_IOC pIo, int action,
228                                                          SK_U32 Id, char* pBuf, unsigned int* pLen,
229                                                          SK_U32 Instance, unsigned int TableIndex,
230                                                          SK_U32 NetNumber);
231         SK_U16                  Param;
232 } SK_PNMI_TAB_ENTRY;
233
234
235 /*
236  * Trap lengths
237  */
238 #define SK_PNMI_TRAP_SIMPLE_LEN                 17
239 #define SK_PNMI_TRAP_SENSOR_LEN_BASE    46
240 #define SK_PNMI_TRAP_RLMT_CHANGE_LEN    23
241 #define SK_PNMI_TRAP_RLMT_PORT_LEN              23
242
243 /*
244  * Number of MAC types supported
245  */
246 #define SK_PNMI_MAC_TYPES       (SK_MAC_GMAC + 1)
247
248 /*
249  * MAC statistic data list (overall set for MAC types used)
250  */
251 enum SK_MACSTATS {
252         SK_PNMI_HTX                             = 0,
253         SK_PNMI_HTX_OCTET,
254         SK_PNMI_HTX_OCTETHIGH   = SK_PNMI_HTX_OCTET,
255         SK_PNMI_HTX_OCTETLOW,
256         SK_PNMI_HTX_BROADCAST,
257         SK_PNMI_HTX_MULTICAST,
258         SK_PNMI_HTX_UNICAST,
259         SK_PNMI_HTX_BURST,
260         SK_PNMI_HTX_PMACC,
261         SK_PNMI_HTX_MACC,
262         SK_PNMI_HTX_COL,
263         SK_PNMI_HTX_SINGLE_COL,
264         SK_PNMI_HTX_MULTI_COL,
265         SK_PNMI_HTX_EXCESS_COL,
266         SK_PNMI_HTX_LATE_COL,
267         SK_PNMI_HTX_DEFFERAL,
268         SK_PNMI_HTX_EXCESS_DEF,
269         SK_PNMI_HTX_UNDERRUN,
270         SK_PNMI_HTX_CARRIER,
271         SK_PNMI_HTX_UTILUNDER,
272         SK_PNMI_HTX_UTILOVER,
273         SK_PNMI_HTX_64,
274         SK_PNMI_HTX_127,
275         SK_PNMI_HTX_255,
276         SK_PNMI_HTX_511,
277         SK_PNMI_HTX_1023,
278         SK_PNMI_HTX_MAX,
279         SK_PNMI_HTX_LONGFRAMES,
280         SK_PNMI_HTX_SYNC,
281         SK_PNMI_HTX_SYNC_OCTET,
282         SK_PNMI_HTX_RESERVED,
283
284         SK_PNMI_HRX,
285         SK_PNMI_HRX_OCTET,
286         SK_PNMI_HRX_OCTETHIGH   = SK_PNMI_HRX_OCTET,
287         SK_PNMI_HRX_OCTETLOW,
288         SK_PNMI_HRX_BADOCTET,
289         SK_PNMI_HRX_BADOCTETHIGH = SK_PNMI_HRX_BADOCTET,
290         SK_PNMI_HRX_BADOCTETLOW,
291         SK_PNMI_HRX_BROADCAST,
292         SK_PNMI_HRX_MULTICAST,
293         SK_PNMI_HRX_UNICAST,
294         SK_PNMI_HRX_PMACC,
295         SK_PNMI_HRX_MACC,
296         SK_PNMI_HRX_PMACC_ERR,
297         SK_PNMI_HRX_MACC_UNKWN,
298         SK_PNMI_HRX_BURST,
299         SK_PNMI_HRX_MISSED,
300         SK_PNMI_HRX_FRAMING,
301         SK_PNMI_HRX_UNDERSIZE,
302         SK_PNMI_HRX_OVERFLOW,
303         SK_PNMI_HRX_JABBER,
304         SK_PNMI_HRX_CARRIER,
305         SK_PNMI_HRX_IRLENGTH,
306         SK_PNMI_HRX_SYMBOL,
307         SK_PNMI_HRX_SHORTS,
308         SK_PNMI_HRX_RUNT,
309         SK_PNMI_HRX_TOO_LONG,
310         SK_PNMI_HRX_FCS,
311         SK_PNMI_HRX_CEXT,
312         SK_PNMI_HRX_UTILUNDER,
313         SK_PNMI_HRX_UTILOVER,
314         SK_PNMI_HRX_64,
315         SK_PNMI_HRX_127,
316         SK_PNMI_HRX_255,
317         SK_PNMI_HRX_511,
318         SK_PNMI_HRX_1023,
319         SK_PNMI_HRX_MAX,
320         SK_PNMI_HRX_LONGFRAMES,
321
322         SK_PNMI_HRX_RESERVED,
323
324         SK_PNMI_MAX_IDX         /* NOTE: Ensure SK_PNMI_CNT_NO is set to this value */
325 };
326
327 /*
328  * MAC specific data
329  */
330 typedef struct s_PnmiStatAddr {
331         SK_U16          Reg;            /* MAC register containing the value */
332         SK_BOOL         GetOffset;      /* TRUE: Offset managed by PNMI (call GetStatVal())*/
333 } SK_PNMI_STATADDR;
334
335
336 /*
337  * SK_PNMI_STRUCT_DATA copy offset evaluation macros
338  */
339 #define SK_PNMI_OFF(e)          ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
340 #define SK_PNMI_MAI_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
341 #define SK_PNMI_VPD_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_VPD *)0)->e))
342 #define SK_PNMI_SEN_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_SENSOR *)0)->e))
343 #define SK_PNMI_CHK_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_CHECKSUM *)0)->e))
344 #define SK_PNMI_STA_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_STAT *)0)->e))
345 #define SK_PNMI_CNF_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_CONF *)0)->e))
346 #define SK_PNMI_RLM_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT *)0)->e))
347 #define SK_PNMI_MON_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT_MONITOR *)0)->e))
348 #define SK_PNMI_TRP_OFF(e)      ((SK_U32)(SK_UPTR)&(((SK_PNMI_TRAP *)0)->e))
349
350 #define SK_PNMI_SET_STAT(b,s,o) {SK_U32 Val32; char *pVal; \
351                                         Val32 = (s); \
352                                         pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
353                                                 &(((SK_PNMI_STRUCT_DATA *)0)-> \
354                                                 ReturnStatus.ErrorStatus)); \
355                                         SK_PNMI_STORE_U32(pVal, Val32); \
356                                         Val32 = (o); \
357                                         pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
358                                                 &(((SK_PNMI_STRUCT_DATA *)0)-> \
359                                                 ReturnStatus.ErrorOffset)); \
360                                         SK_PNMI_STORE_U32(pVal, Val32);}
361
362 /*
363  * Time macros
364  */
365 #if SK_TICKS_PER_SEC == 100
366 #define SK_PNMI_HUNDREDS_SEC(t) (t)
367 #else
368 #define SK_PNMI_HUNDREDS_SEC(t) (((t) * 100) / (SK_TICKS_PER_SEC))
369 #endif
370
371 /*
372  * Macros to work around alignment problems
373  */
374 #ifndef SK_PNMI_STORE_U16
375 #define SK_PNMI_STORE_U16(p,v)  {*(char *)(p) = *((char *)&(v)); \
376                                         *((char *)(p) + 1) = \
377                                                 *(((char *)&(v)) + 1);}
378 #endif
379
380 #ifndef SK_PNMI_STORE_U32
381 #define SK_PNMI_STORE_U32(p,v)  {*(char *)(p) = *((char *)&(v)); \
382                                         *((char *)(p) + 1) = \
383                                                 *(((char *)&(v)) + 1); \
384                                         *((char *)(p) + 2) = \
385                                                 *(((char *)&(v)) + 2); \
386                                         *((char *)(p) + 3) = \
387                                                 *(((char *)&(v)) + 3);}
388 #endif
389
390 #ifndef SK_PNMI_STORE_U64
391 #define SK_PNMI_STORE_U64(p,v)  {*(char *)(p) = *((char *)&(v)); \
392                                         *((char *)(p) + 1) = \
393                                                 *(((char *)&(v)) + 1); \
394                                         *((char *)(p) + 2) = \
395                                                 *(((char *)&(v)) + 2); \
396                                         *((char *)(p) + 3) = \
397                                                 *(((char *)&(v)) + 3); \
398                                         *((char *)(p) + 4) = \
399                                                 *(((char *)&(v)) + 4); \
400                                         *((char *)(p) + 5) = \
401                                                 *(((char *)&(v)) + 5); \
402                                         *((char *)(p) + 6) = \
403                                                 *(((char *)&(v)) + 6); \
404                                         *((char *)(p) + 7) = \
405                                                 *(((char *)&(v)) + 7);}
406 #endif
407
408 #ifndef SK_PNMI_READ_U16
409 #define SK_PNMI_READ_U16(p,v)   {*((char *)&(v)) = *(char *)(p); \
410                                         *(((char *)&(v)) + 1) = \
411                                                 *((char *)(p) + 1);}
412 #endif
413
414 #ifndef SK_PNMI_READ_U32
415 #define SK_PNMI_READ_U32(p,v)   {*((char *)&(v)) = *(char *)(p); \
416                                         *(((char *)&(v)) + 1) = \
417                                                 *((char *)(p) + 1); \
418                                         *(((char *)&(v)) + 2) = \
419                                                 *((char *)(p) + 2); \
420                                         *(((char *)&(v)) + 3) = \
421                                                 *((char *)(p) + 3);}
422 #endif
423
424 #ifndef SK_PNMI_READ_U64
425 #define SK_PNMI_READ_U64(p,v)   {*((char *)&(v)) = *(char *)(p); \
426                                         *(((char *)&(v)) + 1) = \
427                                                 *((char *)(p) + 1); \
428                                         *(((char *)&(v)) + 2) = \
429                                                 *((char *)(p) + 2); \
430                                         *(((char *)&(v)) + 3) = \
431                                                 *((char *)(p) + 3); \
432                                         *(((char *)&(v)) + 4) = \
433                                                 *((char *)(p) + 4); \
434                                         *(((char *)&(v)) + 5) = \
435                                                 *((char *)(p) + 5); \
436                                         *(((char *)&(v)) + 6) = \
437                                                 *((char *)(p) + 6); \
438                                         *(((char *)&(v)) + 7) = \
439                                                 *((char *)(p) + 7);}
440 #endif
441
442 /*
443  * Macros for Debug
444  */
445 #ifdef DEBUG
446
447 #define SK_PNMI_CHECKFLAGS(vSt) {if (pAC->Pnmi.MacUpdatedFlag > 0 || \
448                                         pAC->Pnmi.RlmtUpdatedFlag > 0 || \
449                                         pAC->Pnmi.SirqUpdatedFlag > 0) { \
450                                                 SK_DBG_MSG(pAC, \
451                                                 SK_DBGMOD_PNMI, \
452                                                 SK_DBGCAT_CTRL, \
453                                                 ("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
454                                                 vSt, \
455                                                 pAC->Pnmi.MacUpdatedFlag, \
456                                                 pAC->Pnmi.RlmtUpdatedFlag, \
457                                                 pAC->Pnmi.SirqUpdatedFlag))}}
458
459 #else   /* !DEBUG */
460
461 #define SK_PNMI_CHECKFLAGS(vSt) /* Nothing */
462
463 #endif  /* !DEBUG */
464
465 #endif  /* _SKGEPNM2_H_ */