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