1/*****************************************************************************
2 *
3 * Name:	skgepnm2.h
4 * Project:	GEnesis, PCI Gigabit Ethernet Adapter
5 * Version:	$Revision: 1.1.1.1 $
6 * Date:	$Date: 2007/08/03 18:52:48 $
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
88typedef 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 */
118enum 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 */
197typedef 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#ifndef SK_PNMI_STORE_U16
241#define SK_PNMI_STORE_U16(p,v)	{*(char *)(p) = *((char *)&(v)); \
242					*((char *)(p) + 1) = \
243						*(((char *)&(v)) + 1);}
244#endif
245
246#ifndef SK_PNMI_STORE_U32
247#define SK_PNMI_STORE_U32(p,v)	{*(char *)(p) = *((char *)&(v)); \
248					*((char *)(p) + 1) = \
249						*(((char *)&(v)) + 1); \
250					*((char *)(p) + 2) = \
251						*(((char *)&(v)) + 2); \
252					*((char *)(p) + 3) = \
253						*(((char *)&(v)) + 3);}
254#endif
255
256#ifndef SK_PNMI_STORE_U64
257#define SK_PNMI_STORE_U64(p,v)	{*(char *)(p) = *((char *)&(v)); \
258					*((char *)(p) + 1) = \
259						*(((char *)&(v)) + 1); \
260					*((char *)(p) + 2) = \
261						*(((char *)&(v)) + 2); \
262					*((char *)(p) + 3) = \
263						*(((char *)&(v)) + 3); \
264					*((char *)(p) + 4) = \
265						*(((char *)&(v)) + 4); \
266					*((char *)(p) + 5) = \
267						*(((char *)&(v)) + 5); \
268					*((char *)(p) + 6) = \
269						*(((char *)&(v)) + 6); \
270					*((char *)(p) + 7) = \
271						*(((char *)&(v)) + 7);}
272#endif
273
274#ifndef SK_PNMI_READ_U16
275#define SK_PNMI_READ_U16(p,v)	{*((char *)&(v)) = *(char *)(p); \
276					*(((char *)&(v)) + 1) = \
277						*((char *)(p) + 1);}
278#endif
279
280#ifndef SK_PNMI_READ_U32
281#define SK_PNMI_READ_U32(p,v)	{*((char *)&(v)) = *(char *)(p); \
282					*(((char *)&(v)) + 1) = \
283						*((char *)(p) + 1); \
284					*(((char *)&(v)) + 2) = \
285						*((char *)(p) + 2); \
286					*(((char *)&(v)) + 3) = \
287						*((char *)(p) + 3);}
288#endif
289
290#ifndef SK_PNMI_READ_U64
291#define SK_PNMI_READ_U64(p,v)	{*((char *)&(v)) = *(char *)(p); \
292					*(((char *)&(v)) + 1) = \
293						*((char *)(p) + 1); \
294					*(((char *)&(v)) + 2) = \
295						*((char *)(p) + 2); \
296					*(((char *)&(v)) + 3) = \
297						*((char *)(p) + 3); \
298					*(((char *)&(v)) + 4) = \
299						*((char *)(p) + 4); \
300					*(((char *)&(v)) + 5) = \
301						*((char *)(p) + 5); \
302					*(((char *)&(v)) + 6) = \
303						*((char *)(p) + 6); \
304					*(((char *)&(v)) + 7) = \
305						*((char *)(p) + 7);}
306#endif
307
308/*
309 * Macros for Debug
310 */
311#ifdef DEBUG
312
313#define SK_PNMI_CHECKFLAGS(vSt)	{if (pAC->Pnmi.MacUpdatedFlag > 0 || \
314					pAC->Pnmi.RlmtUpdatedFlag > 0 || \
315					pAC->Pnmi.SirqUpdatedFlag > 0) { \
316						SK_DBG_MSG(pAC, \
317						SK_DBGMOD_PNMI, \
318						SK_DBGCAT_CTRL,	\
319						("PNMI: ERR: %s MacUFlag=%d, RlmtUFlag=%d, SirqUFlag=%d\n", \
320						vSt, \
321						pAC->Pnmi.MacUpdatedFlag, \
322						pAC->Pnmi.RlmtUpdatedFlag, \
323						pAC->Pnmi.SirqUpdatedFlag))}}
324
325#else	/* !DEBUG */
326
327#define SK_PNMI_CHECKFLAGS(vSt)	/* Nothing */
328
329#endif	/* !DEBUG */
330
331#endif	/* _SKGEPNM2_H_ */
332