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