1/*****************************************************************************
2 *
3 * Name:	skgepnm2.h
4 * Project:	GEnesis, PCI Gigabit Ethernet Adapter
5 * Version:	$Revision: 1.1.1.1 $
6 * Date:	$Date: 2008/10/15 03:26:44 $
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.1.1.1  2008/10/15 03:26:44  james26_jang
30 *	Initial.
31 *
32 *	Revision 1.1.1.1  2008/07/21 09:15:07  james26_jang
33 *	New UI, New QoS, New wireless driver(4.151.10.29), ipmonitor.
34 *
35 *	Revision 1.1  2008/07/17 12:43:35  james26_jang
36 *	*** empty log message ***
37 *
38 *	Revision 1.1.1.1  2007/02/15 12:11:35  jiahao
39 *	initial update
40 *
41 *	Revision 1.1.1.1  2007/01/25 12:51:56  jiahao_jhou
42 *
43 *
44 *	Revision 1.1.1.1  2003/02/03 22:37:48  mhuang
45 *	LINUX_2_4 branch snapshot from linux-mips.org CVS
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#ifndef FALSE
162#define FALSE			0
163#endif
164
165#ifndef TRUE
166#define	TRUE			!(FALSE)
167#endif
168
169/*
170 * General definitions
171 */
172#define SK_PNMI_CHIPSET		1	/* XMAC11800FP */
173
174#define	SK_PNMI_BUS_PCI		1	/* PCI bus*/
175
176/*
177 * Actions
178 */
179#define SK_PNMI_ACT_IDLE	1
180#define SK_PNMI_ACT_RESET	2
181#define SK_PNMI_ACT_SELFTEST	3
182#define SK_PNMI_ACT_RESETCNT	4
183
184/*
185 * VPD releated defines
186 */
187
188#define SK_PNMI_VPD_RW		1
189#define SK_PNMI_VPD_RO		2
190
191#define SK_PNMI_VPD_OK		0
192#define SK_PNMI_VPD_NOTFOUND	1
193#define SK_PNMI_VPD_CUT		2
194#define SK_PNMI_VPD_TIMEOUT	3
195#define SK_PNMI_VPD_FULL	4
196#define SK_PNMI_VPD_NOWRITE	5
197#define SK_PNMI_VPD_FATAL	6
198
199#define SK_PNMI_VPD_IGNORE	0
200#define SK_PNMI_VPD_CREATE	1
201#define SK_PNMI_VPD_DELETE	2
202
203
204/*
205 * RLMT related defines
206 */
207#define SK_PNMI_DEF_RLMT_CHG_THRES	240	/* 4 changes per minute */
208
209/*
210 * Internal table definitions
211 */
212#define SK_PNMI_GET		0
213#define SK_PNMI_PRESET		1
214#define SK_PNMI_SET		2
215
216#define SK_PNMI_RO		0
217#define SK_PNMI_RW		1
218
219typedef struct s_OidTabEntry {
220	SK_U32		Id;
221	SK_U32		InstanceNo;
222	unsigned int	StructSize;
223	unsigned int	Offset;
224	int		Access;
225	int		(* Func)(SK_AC *pAc, SK_IOC pIo, int action,
226				SK_U32 Id, char* pBuf, unsigned int* pLen,
227				SK_U32 Instance, unsigned int TableIndex,
228                                SK_U32 NetNumber);
229	SK_U16		Param;
230} SK_PNMI_TAB_ENTRY;
231
232
233/*
234 * Trap lengths
235 */
236#define SK_PNMI_TRAP_SIMPLE_LEN		17
237#define SK_PNMI_TRAP_SENSOR_LEN_BASE	46
238#define SK_PNMI_TRAP_RLMT_CHANGE_LEN	23
239#define SK_PNMI_TRAP_RLMT_PORT_LEN	23
240
241
242/*
243 * MAC statistic data structures
244 * Only for the first 64 counters: the number relates to the bit in the
245 * XMAC overflow status register
246 */
247#define SK_PNMI_HTX			0
248#define SK_PNMI_HTX_OCTET		1
249#define SK_PNMI_HTX_OCTETHIGH		1
250#define SK_PNMI_HTX_OCTETLOW		2
251#define SK_PNMI_HTX_BROADCAST		3
252#define SK_PNMI_HTX_MULTICAST		4
253#define SK_PNMI_HTX_UNICAST		5
254#define SK_PNMI_HTX_LONGFRAMES		6
255#define SK_PNMI_HTX_BURST		7
256#define SK_PNMI_HTX_PMACC		8
257#define SK_PNMI_HTX_MACC		9
258#define SK_PNMI_HTX_SINGLE_COL		10
259#define SK_PNMI_HTX_MULTI_COL		11
260#define SK_PNMI_HTX_EXCESS_COL		12
261#define SK_PNMI_HTX_LATE_COL		13
262#define SK_PNMI_HTX_DEFFERAL		14
263#define SK_PNMI_HTX_EXCESS_DEF		15
264#define SK_PNMI_HTX_UNDERRUN		16
265#define SK_PNMI_HTX_CARRIER		17
266#define SK_PNMI_HTX_UTILUNDER		18
267#define SK_PNMI_HTX_UTILOVER		19
268#define SK_PNMI_HTX_64			20
269#define SK_PNMI_HTX_127			21
270#define SK_PNMI_HTX_255			22
271#define SK_PNMI_HTX_511			23
272#define SK_PNMI_HTX_1023		24
273#define SK_PNMI_HTX_MAX			25
274#define SK_PNMI_HTX_RESERVED26		26
275#define SK_PNMI_HTX_RESERVED27		27
276#define SK_PNMI_HTX_RESERVED28		28
277#define SK_PNMI_HTX_RESERVED29		29
278#define SK_PNMI_HTX_RESERVED30		30
279#define SK_PNMI_HTX_RESERVED31		31
280#define SK_PNMI_HRX			(32 + 0)
281#define SK_PNMI_HRX_OCTET		(32 + 1)
282#define SK_PNMI_HRX_OCTETHIGH		(32 + 1)
283#define SK_PNMI_HRX_OCTETLOW		(32 + 2)
284#define SK_PNMI_HRX_BROADCAST		(32 + 3)
285#define SK_PNMI_HRX_MULTICAST		(32 + 4)
286#define SK_PNMI_HRX_UNICAST		(32 + 5)
287#define SK_PNMI_HRX_PMACC		(32 + 6)
288#define SK_PNMI_HRX_MACC		(32 + 7)
289#define SK_PNMI_HRX_PMACC_ERR		(32 + 8)
290#define SK_PNMI_HRX_MACC_UNKWN		(32 + 9)
291#define SK_PNMI_HRX_BURST		(32 + 10)
292#define SK_PNMI_HRX_MISSED		(32 + 11)
293#define SK_PNMI_HRX_FRAMING		(32 + 12)
294#define SK_PNMI_HRX_OVERFLOW		(32 + 13)
295#define SK_PNMI_HRX_JABBER		(32 + 14)
296#define SK_PNMI_HRX_CARRIER		(32 + 15)
297#define SK_PNMI_HRX_IRLENGTH		(32 + 16)
298#define SK_PNMI_HRX_SYMBOL		(32 + 17)
299#define SK_PNMI_HRX_SHORTS		(32 + 18)
300#define SK_PNMI_HRX_RUNT		(32 + 19)
301#define SK_PNMI_HRX_TOO_LONG		(32 + 20)
302#define SK_PNMI_HRX_FCS			(32 + 21)
303#define SK_PNMI_HRX_RESERVED22		(32 + 22)
304#define SK_PNMI_HRX_CEXT		(32 + 23)
305#define SK_PNMI_HRX_UTILUNDER		(32 + 24)
306#define SK_PNMI_HRX_UTILOVER		(32 + 25)
307#define SK_PNMI_HRX_64			(32 + 26)
308#define SK_PNMI_HRX_127			(32 + 27)
309#define SK_PNMI_HRX_255			(32 + 28)
310#define SK_PNMI_HRX_511			(32 + 29)
311#define SK_PNMI_HRX_1023		(32 + 30)
312#define SK_PNMI_HRX_MAX			(32 + 31)
313
314#define SK_PNMI_HTX_SYNC		64
315#define SK_PNMI_HTX_SYNC_OCTET		65
316
317#define SK_PNMI_HRX_LONGFRAMES		66
318
319#define SK_PNMI_MAX_IDX			(SK_PNMI_CNT_NO)
320
321/*
322 * MAC specific data
323 */
324typedef struct s_PnmiStatAddr {
325	SK_BOOL		GetOffset;	/* TRUE: Call GetStatVal function */
326	SK_U16		Param;		/* XMAC register containing value */
327} SK_PNMI_STATADDR;
328
329
330/*
331 * SK_PNMI_STRUCT_DATA copy offset evaluation macros
332 */
333#define SK_PNMI_OFF(e)		((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
334#define SK_PNMI_MAI_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_STRUCT_DATA *)0)->e))
335#define SK_PNMI_VPD_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_VPD *)0)->e))
336#define SK_PNMI_SEN_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_SENSOR *)0)->e))
337#define SK_PNMI_CHK_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_CHECKSUM *)0)->e))
338#define SK_PNMI_STA_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_STAT *)0)->e))
339#define SK_PNMI_CNF_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_CONF *)0)->e))
340#define SK_PNMI_RLM_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT *)0)->e))
341#define SK_PNMI_MON_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_RLMT_MONITOR *)0)->e))
342#define SK_PNMI_TRP_OFF(e)	((SK_U32)(SK_UPTR)&(((SK_PNMI_TRAP *)0)->e))
343
344#define SK_PNMI_SET_STAT(b,s,o)	{SK_U32	Val32; char *pVal; \
345					Val32 = (s); \
346					pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
347						&(((SK_PNMI_STRUCT_DATA *)0)-> \
348						ReturnStatus.ErrorStatus)); \
349					SK_PNMI_STORE_U32(pVal, Val32); \
350					Val32 = (o); \
351					pVal = (char *)(b) + ((SK_U32)(SK_UPTR) \
352						&(((SK_PNMI_STRUCT_DATA *)0)-> \
353						ReturnStatus.ErrorOffset)); \
354					SK_PNMI_STORE_U32(pVal, Val32);}
355
356/*
357 * Time macros
358 */
359#if SK_TICKS_PER_SEC == 100
360#define SK_PNMI_HUNDREDS_SEC(t)	(t)
361#else
362#define SK_PNMI_HUNDREDS_SEC(t)	(((t) * 100) / (SK_TICKS_PER_SEC))
363#endif
364
365/*
366 * Macros to work around alignment problems
367 */
368#ifndef SK_PNMI_STORE_U16
369#define SK_PNMI_STORE_U16(p,v)	{*(char *)(p) = *((char *)&(v)); \
370					*((char *)(p) + 1) = \
371						*(((char *)&(v)) + 1);}
372#endif
373
374#ifndef SK_PNMI_STORE_U32
375#define SK_PNMI_STORE_U32(p,v)	{*(char *)(p) = *((char *)&(v)); \
376					*((char *)(p) + 1) = \
377						*(((char *)&(v)) + 1); \
378					*((char *)(p) + 2) = \
379						*(((char *)&(v)) + 2); \
380					*((char *)(p) + 3) = \
381						*(((char *)&(v)) + 3);}
382#endif
383
384#ifndef SK_PNMI_STORE_U64
385#define SK_PNMI_STORE_U64(p,v)	{*(char *)(p) = *((char *)&(v)); \
386					*((char *)(p) + 1) = \
387						*(((char *)&(v)) + 1); \
388					*((char *)(p) + 2) = \
389						*(((char *)&(v)) + 2); \
390					*((char *)(p) + 3) = \
391						*(((char *)&(v)) + 3); \
392					*((char *)(p) + 4) = \
393						*(((char *)&(v)) + 4); \
394					*((char *)(p) + 5) = \
395						*(((char *)&(v)) + 5); \
396					*((char *)(p) + 6) = \
397						*(((char *)&(v)) + 6); \
398					*((char *)(p) + 7) = \
399						*(((char *)&(v)) + 7);}
400#endif
401
402#ifndef SK_PNMI_READ_U16
403#define SK_PNMI_READ_U16(p,v)	{*((char *)&(v)) = *(char *)(p); \
404					*(((char *)&(v)) + 1) = \
405						*((char *)(p) + 1);}
406#endif
407
408#ifndef SK_PNMI_READ_U32
409#define SK_PNMI_READ_U32(p,v)	{*((char *)&(v)) = *(char *)(p); \
410					*(((char *)&(v)) + 1) = \
411						*((char *)(p) + 1); \
412					*(((char *)&(v)) + 2) = \
413						*((char *)(p) + 2); \
414					*(((char *)&(v)) + 3) = \
415						*((char *)(p) + 3);}
416#endif
417
418#ifndef SK_PNMI_READ_U64
419#define SK_PNMI_READ_U64(p,v)	{*((char *)&(v)) = *(char *)(p); \
420					*(((char *)&(v)) + 1) = \
421						*((char *)(p) + 1); \
422					*(((char *)&(v)) + 2) = \
423						*((char *)(p) + 2); \
424					*(((char *)&(v)) + 3) = \
425						*((char *)(p) + 3); \
426					*(((char *)&(v)) + 4) = \
427						*((char *)(p) + 4); \
428					*(((char *)&(v)) + 5) = \
429						*((char *)(p) + 5); \
430					*(((char *)&(v)) + 6) = \
431						*((char *)(p) + 6); \
432					*(((char *)&(v)) + 7) = \
433						*((char *)(p) + 7);}
434#endif
435
436/*
437 * Macros for Debug
438 */
439#ifdef DEBUG
440
441#define SK_PNMI_CHECKFLAGS(vSt)	{if (pAC->Pnmi.MacUpdatedFlag > 0 || \
442					pAC->Pnmi.RlmtUpdatedFlag > 0 || \
443					pAC->Pnmi.SirqUpdatedFlag > 0) { \
444						SK_DBG_MSG(pAC, \
445						SK_DBGMOD_PNMI, \
446						SK_DBGCAT_CTRL,	\
447						("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
448						vSt, \
449						pAC->Pnmi.MacUpdatedFlag, \
450						pAC->Pnmi.RlmtUpdatedFlag, \
451						pAC->Pnmi.SirqUpdatedFlag))}}
452
453#else	/* !DEBUG */
454
455#define SK_PNMI_CHECKFLAGS(vSt)	/* Nothing */
456
457#endif	/* !DEBUG */
458
459#endif	/* _SKGEPNM2_H_ */
460