1/*****************************************************************************
2 *
3 * Name:	skgepnmi.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: skgepnmi.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.48  2001/02/23 14:34:24  mkunz
48 *	Changed macro PHYS2INST. Added pAC to Interface
49 *
50 *	Revision 1.47  2001/02/07 08:28:23  mkunz
51 *	- Added Oids: 	OID_SKGE_DIAG_ACTION
52 *					OID_SKGE_DIAG_RESULT
53 *					OID_SKGE_MULTICAST_LIST
54 *					OID_SKGE_CURRENT_PACKET_FILTER
55 *					OID_SKGE_INTERMEDIATE_SUPPORT
56 *	- Changed value of OID_SKGE_MTU
57 *
58 *	Revision 1.46  2001/02/06 10:01:41  mkunz
59 *	- Pnmi V4 dual net support added. Interface functions and macros extended
60 *	- Vpd bug fixed
61 *	- OID_SKGE_MTU added
62 *
63 *	Revision 1.45  2001/01/22 13:41:37  rassmann
64 *	Supporting two nets on dual-port adapters.
65 *
66 *	Revision 1.44  2000/09/07 07:35:27  rwahl
67 *	- removed NDIS counter specific data type.
68 *	- fixed spelling for OID_SKGE_RLMT_PORT_PREFERRED.
69 *
70 *	Revision 1.43  2000/08/04 11:41:08  rwahl
71 *	- Fixed compiler warning (port is always >= 0) for macros
72 *	  SK_PNMI_CNT_RX_LONGFRAMES & SK_PNMI_CNT_SYNC_OCTETS
73 *
74 *	Revision 1.42  2000/08/03 15:14:07  rwahl
75 *	- Corrected error in driver macros addressing a physical port.
76 *
77 *	Revision 1.41  2000/08/01 16:22:29  rwahl
78 *	- Changed MDB version to 3.1.
79 *	- Added definitions for StatRxLongFrames counter.
80 *	- Added macro to be used by driver to count long frames received.
81 *	- Added directive to control width (default = 32bit) of NDIS statistic
82 *	  counters (SK_NDIS_64BIT_CTR).
83 *
84 *	Revision 1.40  2000/03/31 13:51:34  rwahl
85 *	Added SK_UPTR cast to offset calculation for PNMI struct fields;
86 *	missing cast caused compiler warnings by Win64 compiler.
87 *
88 *	Revision 1.39  1999/12/06 10:09:47  rwahl
89 *	Added new error log message.
90 *
91 *	Revision 1.38  1999/11/22 13:57:55  cgoos
92 *	Changed license header to GPL.
93 *
94 *	Revision 1.37  1999/09/14 14:25:32  rwahl
95 *	Set MDB version for 1000Base-T (sensors, Master/Slave) changes.
96 *
97 *	Revision 1.36  1999/05/20 09:24:56  cgoos
98 *	Changes for 1000Base-T (sensors, Master/Slave).
99 *
100 *	Revision 1.35  1999/04/13 15:10:51  mhaveman
101 *	Replaced RLMT macros SK_RLMT_CHECK_xxx again by those of PNMI to
102 *	grant unified interface. But PNMI macros will store the same
103 *	value as RLMT macros.
104 *
105 *	Revision 1.34  1999/04/13 15:03:49  mhaveman
106 *	-Changed copyright
107 *	-Removed SK_PNMI_RLMT_MODE_CHK_xxx macros. Those of RLMT should be
108 *	 used.
109 *
110 *	Revision 1.33  1999/03/23 10:41:02  mhaveman
111 *	Changed comments.
112 *
113 *	Revision 1.32  1999/01/25 15:01:33  mhaveman
114 *	Added support for multiple simultaniously active ports.
115 *
116 *	Revision 1.31  1999/01/19 10:06:26  mhaveman
117 *	Added new error log message.
118 *
119 *	Revision 1.30  1999/01/05 10:34:49  mhaveman
120 *	Fixed little error in RlmtChangeEstimate calculation.
121 *
122 *	Revision 1.29  1999/01/05 09:59:41  mhaveman
123 *	Redesigned port switch average calculation to avoid 64bit
124 *	arithmetic.
125 *
126 *	Revision 1.28  1998/12/08 10:05:48  mhaveman
127 *	Defined macro SK_PNMI_MIN_STRUCT_SIZE.
128 *
129 *	Revision 1.27  1998/12/03 14:39:35  mhaveman
130 *	Fixed problem that LSTAT was enumerated wrong.
131 *
132 *	Revision 1.26  1998/12/03 11:19:51  mhaveman
133 *	Changed contents of errlog message SK_PNMI_ERR016MSG
134 *
135 *	Revision 1.25  1998/12/01 10:40:04  mhaveman
136 *	Changed size of SensorNumber, ChecksumNumber and RlmtPortNumber in
137 *	SK_PNMI_STRUCT_DATA to be conform with OID definition.
138 *
139 *	Revision 1.24  1998/11/20 08:09:27  mhaveman
140 *	Added macros to convert between logical, physical port indexes and
141 *	instances.
142 *
143 *	Revision 1.23  1998/11/10 13:41:13  mhaveman
144 *	Needed to change interface, because NT driver needs a return value
145 *	of needed buffer space on TOO_SHORT errors. Therefore all
146 *	SkPnmiGet/Preset/Set functions now have a pointer to the length
147 *	parameter, where the needed space on error is returned.
148 *
149 *	Revision 1.22  1998/11/03 12:05:51  mhaveman
150 *	Added pAC parameter to counter macors.
151 *
152 *	Revision 1.21  1998/11/02 10:47:36  mhaveman
153 *	Added syslog messages for internal errors.
154 *
155 *	Revision 1.20  1998/10/30 15:49:36  mhaveman
156 *	-Removed unused SK_PNMI_UTILIZATION_BASE and EstOldCnt.
157 *	-Redefined SK_PNMI_CHG_EST_BASE to hundreds of seconds.
158 *
159 *	Revision 1.19  1998/10/29 15:38:44  mhaveman
160 *	Changed string lengths of PNMI_STRUCT_DATA structure because
161 *	string OIDs are now encoded with leading length ocetet.
162 *
163 *	Revision 1.18  1998/10/29 08:52:27  mhaveman
164 *	-Added byte to strings in PNMI_STRUCT_DATA structure.
165 *	-Shortened SK_PNMI_RLMT structure to SK_MAX_MACS elements.
166 *
167 *	Revision 1.17  1998/10/28 08:49:50  mhaveman
168 *	-Changed type of Instance back to SK_U32 because of VPD
169 *	-Changed type from SK_U8 to char of PciBusSpeed, PciBusWidth, PMD,
170 *	 and Connector.
171 *
172 *	Revision 1.16  1998/10/22 10:42:31  mhaveman
173 *	-Removed (SK_U32) casts for OIDs
174 *	-excluded NDIS OIDs when they are already defined with ifndef _NDIS_
175 *
176 *	Revision 1.15  1998/10/20 13:56:28  mhaveman
177 *	Headerfile includes now directly other header files to comile correctly.
178 *
179 *	Revision 1.14  1998/10/20 07:31:09  mhaveman
180 *	Made type changes to unsigned int where possible.
181 *
182 *	Revision 1.13  1998/10/19 10:53:13  mhaveman
183 *	-Casted OID definitions to SK_U32
184 *	-Renamed RlmtMAC... to RlmtPort...
185 *	-Changed wrong type of VpdEntriesList from SK_U32 to char *
186 *
187 *	Revision 1.12  1998/10/13 07:42:27  mhaveman
188 *	-Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA
189 *	-Removed old cvs history entries
190 *	-Renamed MacNumber to PortNumber
191 *
192 *	Revision 1.11  1998/10/07 10:55:24  mhaveman
193 *	-Added OID_MDB_VERSION. Therefore was a renumbering of the VPD OIDs
194 *	 necessary.
195 *	-Added OID_GEN_ Ids to support the windows driver.
196 *
197 *	Revision 1.10  1998/09/30 13:41:10  mhaveman
198 *	Renamed some OIDs to reduce usage of 'MAC' which is replaced by 'PORT'.
199 *
200 *	Revision 1.9  1998/09/04 17:06:17  mhaveman
201 *	-Added SyncCounter as macro.
202 *	-Renamed OID_SKGE_.._NO_DESCR_CTS to OID_SKGE_.._NO_BUF_CTS.
203 *	-Added macros for driver description and version strings.
204 *
205 *	Revision 1.8  1998/09/04 14:36:52  mhaveman
206 *	Added OIDs and Structure to access value of macro counters which are
207 *	counted by the driver.
208 *
209 *	Revision 1.7  1998/09/04 11:59:36  mhaveman
210 *	Everything compiles now. Driver Macros for counting still missing.
211 *
212 ****************************************************************************/
213
214#ifndef _SKGEPNMI_H_
215#define _SKGEPNMI_H_
216
217/*
218 * Include dependencies
219 */
220#include "h/sktypes.h"
221#include "h/skerror.h"
222#include "h/sktimer.h"
223#include "h/ski2c.h"
224#include "h/skaddr.h"
225#include "h/skrlmt.h"
226#include "h/skvpd.h"
227
228/*
229 * Management Database Version
230 */
231#define SK_PNMI_MDB_VERSION		0x00030001	/* 3.1 */
232
233
234/*
235 * Event definitions
236 */
237#define SK_PNMI_EVT_SIRQ_OVERFLOW		1	/* Counter overflow */
238#define SK_PNMI_EVT_SEN_WAR_LOW			2	/* Lower war thres exceeded */
239#define SK_PNMI_EVT_SEN_WAR_UPP			3	/* Upper war thres exceeded */
240#define SK_PNMI_EVT_SEN_ERR_LOW			4	/* Lower err thres exceeded */
241#define SK_PNMI_EVT_SEN_ERR_UPP			5	/* Upper err thres exceeded */
242#define SK_PNMI_EVT_CHG_EST_TIMER		6	/* Timer event for RLMT Chg */
243#define SK_PNMI_EVT_UTILIZATION_TIMER	7	/* Timer event for Utiliza. */
244#define SK_PNMI_EVT_CLEAR_COUNTER		8	/* Clear statistic counters */
245#define SK_PNMI_EVT_XMAC_RESET			9	/* XMAC will be reset */
246
247#define SK_PNMI_EVT_RLMT_PORT_UP		10	/* Port came logically up */
248#define SK_PNMI_EVT_RLMT_PORT_DOWN		11	/* Port went logically down */
249#define SK_PNMI_EVT_RLMT_SEGMENTATION	13	/* Two SP root bridges found */
250#define SK_PNMI_EVT_RLMT_ACTIVE_DOWN	14	/* Port went logically down */
251#define SK_PNMI_EVT_RLMT_ACTIVE_UP		15	/* Port came logically up */
252#define SK_PNMI_EVT_RLMT_SET_NETS		16	/* 1. Parameter is number of nets
253												1 = single net; 2 = dual net */
254
255/*
256 * Return values
257 */
258#define SK_PNMI_ERR_OK			0
259#define SK_PNMI_ERR_GENERAL		1
260#define SK_PNMI_ERR_TOO_SHORT		2
261#define SK_PNMI_ERR_BAD_VALUE		3
262#define SK_PNMI_ERR_READ_ONLY		4
263#define SK_PNMI_ERR_UNKNOWN_OID		5
264#define SK_PNMI_ERR_UNKNOWN_INST	6
265#define SK_PNMI_ERR_UNKNOWN_NET 	7
266
267
268/*
269 * Return values of driver reset function SK_DRIVER_RESET() and
270 * driver event function SK_DRIVER_EVENT()
271 */
272#define SK_PNMI_ERR_OK			0
273#define SK_PNMI_ERR_FAIL		1
274
275
276/*
277 * Return values of driver test function SK_DRIVER_SELFTEST()
278 */
279#define SK_PNMI_TST_UNKNOWN		(1 << 0)
280#define SK_PNMI_TST_TRANCEIVER		(1 << 1)
281#define SK_PNMI_TST_ASIC		(1 << 2)
282#define SK_PNMI_TST_SENSOR		(1 << 3)
283#define SK_PNMI_TST_POWERMGMT		(1 << 4)
284#define SK_PNMI_TST_PCI			(1 << 5)
285#define SK_PNMI_TST_MAC			(1 << 6)
286
287
288/*
289 * RLMT specific definitions
290 */
291#define SK_PNMI_RLMT_STATUS_STANDBY	1
292#define SK_PNMI_RLMT_STATUS_ACTIVE	2
293#define SK_PNMI_RLMT_STATUS_ERROR	3
294
295#define SK_PNMI_RLMT_LSTAT_PHY_DOWN	1
296#define SK_PNMI_RLMT_LSTAT_AUTONEG	2
297#define SK_PNMI_RLMT_LSTAT_LOG_DOWN	3
298#define SK_PNMI_RLMT_LSTAT_LOG_UP	4
299#define SK_PNMI_RLMT_LSTAT_INDETERMINATED 5
300
301#define SK_PNMI_RLMT_MODE_CHK_LINK	(SK_RLMT_CHECK_LINK)
302#define SK_PNMI_RLMT_MODE_CHK_RX	(SK_RLMT_CHECK_LOC_LINK)
303#define SK_PNMI_RLMT_MODE_CHK_SPT	(SK_RLMT_CHECK_SEG)
304/* #define SK_PNMI_RLMT_MODE_CHK_EX */
305
306/*
307 * OID definition
308 */
309#ifndef _NDIS_	    /* Check, whether NDIS already included OIDs */
310
311#define OID_GEN_XMIT_OK			0x00020101
312#define OID_GEN_RCV_OK			0x00020102
313#define OID_GEN_XMIT_ERROR		0x00020103
314#define OID_GEN_RCV_ERROR		0x00020104
315#define OID_GEN_RCV_NO_BUFFER		0x00020105
316
317/* #define OID_GEN_DIRECTED_BYTES_XMIT	0x00020201 */
318#define OID_GEN_DIRECTED_FRAMES_XMIT	0x00020202
319/* #define OID_GEN_MULTICAST_BYTES_XMIT	0x00020203 */
320#define OID_GEN_MULTICAST_FRAMES_XMIT	0x00020204
321/* #define OID_GEN_BROADCAST_BYTES_XMIT	0x00020205 */
322#define OID_GEN_BROADCAST_FRAMES_XMIT	0x00020206
323/* #define OID_GEN_DIRECTED_BYTES_RCV	0x00020207 */
324#define OID_GEN_DIRECTED_FRAMES_RCV	0x00020208
325/* #define OID_GEN_MULTICAST_BYTES_RCV	0x00020209 */
326#define OID_GEN_MULTICAST_FRAMES_RCV	0x0002020A
327/* #define OID_GEN_BROADCAST_BYTES_RCV	0x0002020B */
328#define OID_GEN_BROADCAST_FRAMES_RCV	0x0002020C
329#define OID_GEN_RCV_CRC_ERROR		0x0002020D
330#define OID_GEN_TRANSMIT_QUEUE_LENGTH	0x0002020E
331
332#define OID_802_3_PERMANENT_ADDRESS	0x01010101
333#define OID_802_3_CURRENT_ADDRESS	0x01010102
334/* #define OID_802_3_MULTICAST_LIST	0x01010103 */
335/* #define OID_802_3_MAXIMUM_LIST_SIZE	0x01010104 */
336/* #define OID_802_3_MAC_OPTIONS	0x01010105 */
337
338#define OID_802_3_RCV_ERROR_ALIGNMENT	0x01020101
339#define OID_802_3_XMIT_ONE_COLLISION	0x01020102
340#define OID_802_3_XMIT_MORE_COLLISIONS	0x01020103
341#define OID_802_3_XMIT_DEFERRED		0x01020201
342#define OID_802_3_XMIT_MAX_COLLISIONS	0x01020202
343#define OID_802_3_RCV_OVERRUN		0x01020203
344#define OID_802_3_XMIT_UNDERRUN		0x01020204
345#define OID_802_3_XMIT_TIMES_CRS_LOST	0x01020206
346#define OID_802_3_XMIT_LATE_COLLISIONS	0x01020207
347
348#endif /* _NDIS_ */
349
350#define OID_SKGE_MDB_VERSION		0xFF010100
351#define OID_SKGE_SUPPORTED_LIST		0xFF010101
352#define OID_SKGE_VPD_FREE_BYTES		0xFF010102
353#define OID_SKGE_VPD_ENTRIES_LIST	0xFF010103
354#define OID_SKGE_VPD_ENTRIES_NUMBER	0xFF010104
355#define OID_SKGE_VPD_KEY		0xFF010105
356#define OID_SKGE_VPD_VALUE		0xFF010106
357#define OID_SKGE_VPD_ACCESS		0xFF010107
358#define OID_SKGE_VPD_ACTION		0xFF010108
359
360#define OID_SKGE_PORT_NUMBER		0xFF010110
361#define OID_SKGE_DEVICE_TYPE		0xFF010111
362#define OID_SKGE_DRIVER_DESCR		0xFF010112
363#define OID_SKGE_DRIVER_VERSION		0xFF010113
364#define OID_SKGE_HW_DESCR		0xFF010114
365#define OID_SKGE_HW_VERSION		0xFF010115
366#define OID_SKGE_CHIPSET		0xFF010116
367#define OID_SKGE_ACTION			0xFF010117
368#define OID_SKGE_RESULT			0xFF010118
369#define OID_SKGE_BUS_TYPE		0xFF010119
370#define OID_SKGE_BUS_SPEED		0xFF01011A
371#define OID_SKGE_BUS_WIDTH		0xFF01011B
372
373/*#define OID_SKGE_MULTICAST_LIST		0xFF01011C*/
374
375#define OID_SKGE_SENSOR_NUMBER		0xFF020100
376#define OID_SKGE_SENSOR_INDEX		0xFF020101
377#define OID_SKGE_SENSOR_DESCR		0xFF020102
378#define OID_SKGE_SENSOR_TYPE		0xFF020103
379#define OID_SKGE_SENSOR_VALUE		0xFF020104
380#define OID_SKGE_SENSOR_WAR_THRES_LOW	0xFF020105
381#define OID_SKGE_SENSOR_WAR_THRES_UPP	0xFF020106
382#define OID_SKGE_SENSOR_ERR_THRES_LOW	0xFF020107
383#define OID_SKGE_SENSOR_ERR_THRES_UPP	0xFF020108
384#define OID_SKGE_SENSOR_STATUS		0xFF020109
385#define OID_SKGE_SENSOR_WAR_CTS		0xFF02010A
386#define OID_SKGE_SENSOR_ERR_CTS		0xFF02010B
387#define OID_SKGE_SENSOR_WAR_TIME	0xFF02010C
388#define OID_SKGE_SENSOR_ERR_TIME	0xFF02010D
389
390#define OID_SKGE_CHKSM_NUMBER		0xFF020110
391#define OID_SKGE_CHKSM_RX_OK_CTS	0xFF020111
392#define OID_SKGE_CHKSM_RX_UNABLE_CTS	0xFF020112
393#define OID_SKGE_CHKSM_RX_ERR_CTS	0xFF020113
394#define OID_SKGE_CHKSM_TX_OK_CTS	0xFF020114
395#define OID_SKGE_CHKSM_TX_UNABLE_CTS	0xFF020115
396
397#define OID_SKGE_STAT_TX		0xFF020120
398#define OID_SKGE_STAT_TX_OCTETS		0xFF020121
399#define OID_SKGE_STAT_TX_BROADCAST	0xFF020122
400#define OID_SKGE_STAT_TX_MULTICAST	0xFF020123
401#define OID_SKGE_STAT_TX_UNICAST	0xFF020124
402#define OID_SKGE_STAT_TX_LONGFRAMES	0xFF020125
403#define OID_SKGE_STAT_TX_BURST		0xFF020126
404#define OID_SKGE_STAT_TX_PFLOWC		0xFF020127
405#define OID_SKGE_STAT_TX_FLOWC		0xFF020128
406#define OID_SKGE_STAT_TX_SINGLE_COL	0xFF020129
407#define OID_SKGE_STAT_TX_MULTI_COL	0xFF02012A
408#define OID_SKGE_STAT_TX_EXCESS_COL	0xFF02012B
409#define OID_SKGE_STAT_TX_LATE_COL	0xFF02012C
410#define OID_SKGE_STAT_TX_DEFFERAL	0xFF02012D
411#define OID_SKGE_STAT_TX_EXCESS_DEF	0xFF02012E
412#define OID_SKGE_STAT_TX_UNDERRUN	0xFF02012F
413#define OID_SKGE_STAT_TX_CARRIER	0xFF020130
414/* #define OID_SKGE_STAT_TX_UTIL		0xFF020131 */
415#define OID_SKGE_STAT_TX_64		0xFF020132
416#define OID_SKGE_STAT_TX_127		0xFF020133
417#define OID_SKGE_STAT_TX_255		0xFF020134
418#define OID_SKGE_STAT_TX_511		0xFF020135
419#define OID_SKGE_STAT_TX_1023		0xFF020136
420#define OID_SKGE_STAT_TX_MAX		0xFF020137
421#define OID_SKGE_STAT_TX_SYNC		0xFF020138
422#define OID_SKGE_STAT_TX_SYNC_OCTETS	0xFF020139
423#define OID_SKGE_STAT_RX		0xFF02013A
424#define OID_SKGE_STAT_RX_OCTETS		0xFF02013B
425#define OID_SKGE_STAT_RX_BROADCAST	0xFF02013C
426#define OID_SKGE_STAT_RX_MULTICAST	0xFF02013D
427#define OID_SKGE_STAT_RX_UNICAST	0xFF02013E
428#define OID_SKGE_STAT_RX_PFLOWC		0xFF02013F
429#define OID_SKGE_STAT_RX_FLOWC		0xFF020140
430#define OID_SKGE_STAT_RX_PFLOWC_ERR	0xFF020141
431#define OID_SKGE_STAT_RX_FLOWC_UNKWN	0xFF020142
432#define OID_SKGE_STAT_RX_BURST		0xFF020143
433#define OID_SKGE_STAT_RX_MISSED		0xFF020144
434#define OID_SKGE_STAT_RX_FRAMING	0xFF020145
435#define OID_SKGE_STAT_RX_OVERFLOW	0xFF020146
436#define OID_SKGE_STAT_RX_JABBER		0xFF020147
437#define OID_SKGE_STAT_RX_CARRIER	0xFF020148
438#define OID_SKGE_STAT_RX_IR_LENGTH	0xFF020149
439#define OID_SKGE_STAT_RX_SYMBOL		0xFF02014A
440#define OID_SKGE_STAT_RX_SHORTS		0xFF02014B
441#define OID_SKGE_STAT_RX_RUNT		0xFF02014C
442#define OID_SKGE_STAT_RX_CEXT		0xFF02014D
443#define OID_SKGE_STAT_RX_TOO_LONG	0xFF02014E
444#define OID_SKGE_STAT_RX_FCS		0xFF02014F
445/* #define OID_SKGE_STAT_RX_UTIL		0xFF020150 */
446#define OID_SKGE_STAT_RX_64		0xFF020151
447#define OID_SKGE_STAT_RX_127		0xFF020152
448#define OID_SKGE_STAT_RX_255		0xFF020153
449#define OID_SKGE_STAT_RX_511		0xFF020154
450#define OID_SKGE_STAT_RX_1023		0xFF020155
451#define OID_SKGE_STAT_RX_MAX		0xFF020156
452#define OID_SKGE_STAT_RX_LONGFRAMES	0xFF020157
453
454#define OID_SKGE_DIAG_ACTION		0xFF01011D
455#define OID_SKGE_DIAG_RESULT		0xFF01011E
456#define OID_SKGE_MTU		0xFF01011F
457#define OID_SKGE_PHYS_CUR_ADDR		0xFF010120
458#define OID_SKGE_PHYS_FAC_ADDR		0xFF010121
459#define OID_SKGE_PMD			0xFF010122
460#define OID_SKGE_CONNECTOR		0xFF010123
461#define OID_SKGE_LINK_CAP		0xFF010124
462#define OID_SKGE_LINK_MODE		0xFF010125
463#define OID_SKGE_LINK_MODE_STATUS	0xFF010126
464#define OID_SKGE_LINK_STATUS		0xFF010127
465#define OID_SKGE_FLOWCTRL_CAP		0xFF010128
466#define OID_SKGE_FLOWCTRL_MODE		0xFF010129
467#define OID_SKGE_FLOWCTRL_STATUS	0xFF01012A
468#define OID_SKGE_PHY_OPERATION_CAP	0xFF01012B
469#define OID_SKGE_PHY_OPERATION_MODE	0xFF01012C
470#define OID_SKGE_PHY_OPERATION_STATUS	0xFF01012D
471#define OID_SKGE_MULTICAST_LIST		0xFF01012E
472#define OID_SKGE_CURRENT_PACKET_FILTER		0xFF01012F
473
474#define OID_SKGE_TRAP			0xFF010130
475#define OID_SKGE_TRAP_NUMBER		0xFF010131
476
477#define OID_SKGE_RLMT_MODE		0xFF010140
478#define OID_SKGE_RLMT_PORT_NUMBER	0xFF010141
479#define OID_SKGE_RLMT_PORT_ACTIVE	0xFF010142
480#define OID_SKGE_RLMT_PORT_PREFERRED	0xFF010143
481#define OID_SKGE_INTERMEDIATE_SUPPORT		0xFF010160
482#define OID_SKGE_RLMT_CHANGE_CTS	0xFF020160
483#define OID_SKGE_RLMT_CHANGE_TIME	0xFF020161
484#define OID_SKGE_RLMT_CHANGE_ESTIM	0xFF020162
485#define OID_SKGE_RLMT_CHANGE_THRES	0xFF020163
486
487#define OID_SKGE_RLMT_PORT_INDEX	0xFF020164
488#define OID_SKGE_RLMT_STATUS		0xFF020165
489#define OID_SKGE_RLMT_TX_HELLO_CTS	0xFF020166
490#define OID_SKGE_RLMT_RX_HELLO_CTS	0xFF020167
491#define OID_SKGE_RLMT_TX_SP_REQ_CTS	0xFF020168
492#define OID_SKGE_RLMT_RX_SP_CTS		0xFF020169
493
494#define OID_SKGE_RLMT_MONITOR_NUMBER	0xFF010150
495#define OID_SKGE_RLMT_MONITOR_INDEX	0xFF010151
496#define OID_SKGE_RLMT_MONITOR_ADDR	0xFF010152
497#define OID_SKGE_RLMT_MONITOR_ERRS	0xFF010153
498#define OID_SKGE_RLMT_MONITOR_TIMESTAMP	0xFF010154
499#define OID_SKGE_RLMT_MONITOR_ADMIN	0xFF010155
500
501#define OID_SKGE_TX_SW_QUEUE_LEN	0xFF020170
502#define OID_SKGE_TX_SW_QUEUE_MAX	0xFF020171
503#define OID_SKGE_TX_RETRY		0xFF020172
504#define OID_SKGE_RX_INTR_CTS		0xFF020173
505#define OID_SKGE_TX_INTR_CTS		0xFF020174
506#define OID_SKGE_RX_NO_BUF_CTS		0xFF020175
507#define OID_SKGE_TX_NO_BUF_CTS		0xFF020176
508#define OID_SKGE_TX_USED_DESCR_NO	0xFF020177
509#define OID_SKGE_RX_DELIVERED_CTS	0xFF020178
510#define OID_SKGE_RX_OCTETS_DELIV_CTS	0xFF020179
511#define OID_SKGE_RX_HW_ERROR_CTS	0xFF02017A
512#define OID_SKGE_TX_HW_ERROR_CTS	0xFF02017B
513#define OID_SKGE_IN_ERRORS_CTS		0xFF02017C
514#define OID_SKGE_OUT_ERROR_CTS		0xFF02017D
515#define OID_SKGE_ERR_RECOVERY_CTS	0xFF02017E
516#define OID_SKGE_SYSUPTIME		0xFF02017F
517
518#define OID_SKGE_ALL_DATA		0xFF020190
519
520
521#define	OID_SKGE_TRAP_SEN_WAR_LOW	500
522#define OID_SKGE_TRAP_SEN_WAR_UPP	501
523#define	OID_SKGE_TRAP_SEN_ERR_LOW	502
524#define OID_SKGE_TRAP_SEN_ERR_UPP	503
525#define OID_SKGE_TRAP_RLMT_CHANGE_THRES	520
526#define OID_SKGE_TRAP_RLMT_CHANGE_PORT	521
527#define OID_SKGE_TRAP_RLMT_PORT_DOWN	522
528#define OID_SKGE_TRAP_RLMT_PORT_UP	523
529#define OID_SKGE_TRAP_RLMT_SEGMENTATION	524
530
531
532/*
533 * Define error numbers and messages for syslog
534 */
535#define SK_PNMI_ERR001		(SK_ERRBASE_PNMI + 1)
536#define SK_PNMI_ERR001MSG	"SkPnmiGetStruct: Unknown OID"
537#define SK_PNMI_ERR002		(SK_ERRBASE_PNMI + 2)
538#define SK_PNMI_ERR002MSG	"SkPnmiGetStruct: Cannot read VPD keys"
539#define SK_PNMI_ERR003		(SK_ERRBASE_PNMI + 3)
540#define SK_PNMI_ERR003MSG	"OidStruct: Called with wrong OID"
541#define SK_PNMI_ERR004		(SK_ERRBASE_PNMI + 4)
542#define SK_PNMI_ERR004MSG	"OidStruct: Called with wrong action"
543#define SK_PNMI_ERR005		(SK_ERRBASE_PNMI + 5)
544#define SK_PNMI_ERR005MSG	"Perform: Cannot reset driver"
545#define SK_PNMI_ERR006		(SK_ERRBASE_PNMI + 6)
546#define SK_PNMI_ERR006MSG	"Perform: Unknown OID action command"
547#define SK_PNMI_ERR007		(SK_ERRBASE_PNMI + 7)
548#define SK_PNMI_ERR007MSG	"General: Driver description not initialized"
549#define SK_PNMI_ERR008		(SK_ERRBASE_PNMI + 8)
550#define SK_PNMI_ERR008MSG	"Addr: Tried to get unknown OID"
551#define SK_PNMI_ERR009		(SK_ERRBASE_PNMI + 9)
552#define SK_PNMI_ERR009MSG	"Addr: Unknown OID"
553#define SK_PNMI_ERR010		(SK_ERRBASE_PNMI + 10)
554#define SK_PNMI_ERR010MSG	"CsumStat: Unknown OID"
555#define SK_PNMI_ERR011		(SK_ERRBASE_PNMI + 11)
556#define SK_PNMI_ERR011MSG	"SensorStat: Sensor descr string too long"
557#define SK_PNMI_ERR012		(SK_ERRBASE_PNMI + 12)
558#define SK_PNMI_ERR012MSG	"SensorStat: Unknown OID"
559#define SK_PNMI_ERR013		(SK_ERRBASE_PNMI + 13)
560#define SK_PNMI_ERR013MSG	"SensorStat: Unknown OID should be errored before"
561#define SK_PNMI_ERR014		(SK_ERRBASE_PNMI + 14)
562#define SK_PNMI_ERR014MSG	"Vpd: Cannot read VPD keys"
563#define SK_PNMI_ERR015		(SK_ERRBASE_PNMI + 15)
564#define SK_PNMI_ERR015MSG	"Vpd: Internal array for VPD keys to small"
565#define SK_PNMI_ERR016		(SK_ERRBASE_PNMI + 16)
566#define SK_PNMI_ERR016MSG	"Vpd: Key string too long"
567#define SK_PNMI_ERR017		(SK_ERRBASE_PNMI + 17)
568#define SK_PNMI_ERR017MSG	"Vpd: Invalid VPD status pointer"
569#define SK_PNMI_ERR018		(SK_ERRBASE_PNMI + 18)
570#define SK_PNMI_ERR018MSG	"Vpd: VPD data not valid"
571#define SK_PNMI_ERR019		(SK_ERRBASE_PNMI + 19)
572#define SK_PNMI_ERR019MSG	"Vpd: VPD entries list string too long"
573#define SK_PNMI_ERR021		(SK_ERRBASE_PNMI + 21)
574#define SK_PNMI_ERR021MSG	"Vpd: VPD data string too long"
575#define SK_PNMI_ERR022		(SK_ERRBASE_PNMI + 22)
576#define SK_PNMI_ERR022MSG	"Vpd: VPD data string too long should be errored before"
577#define SK_PNMI_ERR023		(SK_ERRBASE_PNMI + 23)
578#define SK_PNMI_ERR023MSG	"Vpd: Unknown OID in get action"
579#define SK_PNMI_ERR024		(SK_ERRBASE_PNMI + 24)
580#define SK_PNMI_ERR024MSG	"Vpd: Unknown OID in preset/set action"
581#define SK_PNMI_ERR025		(SK_ERRBASE_PNMI + 25)
582#define SK_PNMI_ERR025MSG	"Vpd: Cannot write VPD after modify entry"
583#define SK_PNMI_ERR026		(SK_ERRBASE_PNMI + 26)
584#define SK_PNMI_ERR026MSG	"Vpd: Cannot update VPD"
585#define SK_PNMI_ERR027		(SK_ERRBASE_PNMI + 27)
586#define SK_PNMI_ERR027MSG	"Vpd: Cannot delete VPD entry"
587#define SK_PNMI_ERR028		(SK_ERRBASE_PNMI + 28)
588#define SK_PNMI_ERR028MSG	"Vpd: Cannot update VPD after delete entry"
589#define SK_PNMI_ERR029		(SK_ERRBASE_PNMI + 29)
590#define SK_PNMI_ERR029MSG	"General: Driver description string too long"
591#define SK_PNMI_ERR030		(SK_ERRBASE_PNMI + 30)
592#define SK_PNMI_ERR030MSG	"General: Driver version not initialized"
593#define SK_PNMI_ERR031		(SK_ERRBASE_PNMI + 31)
594#define SK_PNMI_ERR031MSG	"General: Driver version string too long"
595#define SK_PNMI_ERR032		(SK_ERRBASE_PNMI + 32)
596#define SK_PNMI_ERR032MSG	"General: Cannot read VPD Name for HW descr"
597#define SK_PNMI_ERR033		(SK_ERRBASE_PNMI + 33)
598#define SK_PNMI_ERR033MSG	"General: HW description string too long"
599#define SK_PNMI_ERR034		(SK_ERRBASE_PNMI + 34)
600#define SK_PNMI_ERR034MSG	"General: Unknown OID"
601#define SK_PNMI_ERR035		(SK_ERRBASE_PNMI + 35)
602#define SK_PNMI_ERR035MSG	"Rlmt: Unknown OID"
603#define SK_PNMI_ERR036		(SK_ERRBASE_PNMI + 36)
604#define SK_PNMI_ERR036MSG	"Rlmt: Unknown OID should be errored before"
605#define SK_PNMI_ERR037		(SK_ERRBASE_PNMI + 37)
606#define SK_PNMI_ERR037MSG	"Rlmt: SK_RLMT_MODE_CHANGE event return not 0"
607#define SK_PNMI_ERR038		(SK_ERRBASE_PNMI + 38)
608#define SK_PNMI_ERR038MSG	"Rlmt: SK_RLMT_PREFPORT_CHANGE event return not 0"
609#define SK_PNMI_ERR039		(SK_ERRBASE_PNMI + 39)
610#define SK_PNMI_ERR039MSG	"RlmtStat: Unknown OID"
611#define SK_PNMI_ERR040		(SK_ERRBASE_PNMI + 40)
612#define SK_PNMI_ERR040MSG	"RlmtStat: Unknown OID should be errored before"
613#define SK_PNMI_ERR041		(SK_ERRBASE_PNMI + 41)
614#define SK_PNMI_ERR041MSG	"MacPrivateConf: Unknown OID"
615#define SK_PNMI_ERR042		(SK_ERRBASE_PNMI + 42)
616#define SK_PNMI_ERR042MSG	"MacPrivateConf: Unknown OID should be errored before"
617#define SK_PNMI_ERR043		(SK_ERRBASE_PNMI + 43)
618#define SK_PNMI_ERR043MSG	"MacPrivateConf: SK_HWEV_SET_LMODE returned not 0"
619#define SK_PNMI_ERR044		(SK_ERRBASE_PNMI + 44)
620#define SK_PNMI_ERR044MSG	"MacPrivateConf: SK_HWEV_SET_FLOWMODE returned not 0"
621#define SK_PNMI_ERR045		(SK_ERRBASE_PNMI + 45)
622#define SK_PNMI_ERR045MSG	"MacPrivateConf: Unknown OID in set action"
623#define SK_PNMI_ERR046		(SK_ERRBASE_PNMI + 46)
624#define SK_PNMI_ERR046MSG	"Monitor: Unknown OID"
625#define SK_PNMI_ERR047		(SK_ERRBASE_PNMI + 47)
626#define SK_PNMI_ERR047MSG	"SirqUpdate: Event function returns not 0"
627#define SK_PNMI_ERR048		(SK_ERRBASE_PNMI + 48)
628#define SK_PNMI_ERR048MSG	"RlmtUpdate: Event function returns not 0"
629#define SK_PNMI_ERR049		(SK_ERRBASE_PNMI + 49)
630#define SK_PNMI_ERR049MSG	""
631#define SK_PNMI_ERR050		(SK_ERRBASE_PNMI + 50)
632#define SK_PNMI_ERR050MSG	"MacUpdate: Cannot update statistic counter"
633#define SK_PNMI_ERR051		(SK_ERRBASE_PNMI + 51)
634#define SK_PNMI_ERR051MSG	"SkPnmiEvent: Port switch suspicious"
635#define SK_PNMI_ERR052		(SK_ERRBASE_PNMI + 52)
636#define SK_PNMI_ERR052MSG	"MacPrivateConf: SK_HWEV_SET_ROLE returned not 0"
637
638/*
639 * Management counter macros called by the driver
640 */
641#define SK_PNMI_SET_DRIVER_DESCR(pAC,v)	((pAC)->Pnmi.pDriverDescription = \
642	(char *)(v))
643
644#define SK_PNMI_SET_DRIVER_VER(pAC,v)	((pAC)->Pnmi.pDriverVersion = \
645	(char *)(v))
646
647
648#define SK_PNMI_CNT_TX_QUEUE_LEN(pAC,v,p) \
649	{ \
650		(pAC)->Pnmi.Port[p].TxSwQueueLen = (SK_U64)(v); \
651		if ((pAC)->Pnmi.Port[p].TxSwQueueLen > (pAC)->Pnmi.Port[p].TxSwQueueMax) { \
652			(pAC)->Pnmi.Port[p].TxSwQueueMax = (pAC)->Pnmi.Port[p].TxSwQueueLen; \
653		} \
654	}
655#define SK_PNMI_CNT_TX_RETRY(pAC,p)	(((pAC)->Pnmi.Port[p].TxRetryCts)++)
656#define SK_PNMI_CNT_RX_INTR(pAC,p)	(((pAC)->Pnmi.Port[p].RxIntrCts)++)
657#define SK_PNMI_CNT_TX_INTR(pAC,p)	(((pAC)->Pnmi.Port[p].TxIntrCts)++)
658#define SK_PNMI_CNT_NO_RX_BUF(pAC,p)	(((pAC)->Pnmi.Port[p].RxNoBufCts)++)
659#define SK_PNMI_CNT_NO_TX_BUF(pAC,p)	(((pAC)->Pnmi.Port[p].TxNoBufCts)++)
660#define SK_PNMI_CNT_USED_TX_DESCR(pAC,v,p) \
661	((pAC)->Pnmi.Port[p].TxUsedDescrNo=(SK_U64)(v));
662#define SK_PNMI_CNT_RX_OCTETS_DELIVERED(pAC,v,p) \
663	{ \
664		((pAC)->Pnmi.Port[p].RxDeliveredCts)++; \
665		(pAC)->Pnmi.Port[p].RxOctetsDeliveredCts += (SK_U64)(v); \
666	}
667#define SK_PNMI_CNT_ERR_RECOVERY(pAC,p)	(((pAC)->Pnmi.Port[p].ErrRecoveryCts)++);
668
669#define SK_PNMI_CNT_SYNC_OCTETS(pAC,p,v) \
670	{ \
671		if ((p) < SK_MAX_MACS) { \
672			((pAC)->Pnmi.Port[p].StatSyncCts)++; \
673			(pAC)->Pnmi.Port[p].StatSyncOctetsCts += (SK_U64)(v); \
674		} \
675	}
676
677#define SK_PNMI_CNT_RX_LONGFRAMES(pAC,p) \
678	{ \
679		if ((p) < SK_MAX_MACS) { \
680			((pAC)->Pnmi.Port[p].StatRxLongFrameCts)++; \
681		} \
682	}
683
684/*
685 * Conversion Macros
686 */
687#define SK_PNMI_PORT_INST2LOG(i)	((unsigned int)(i) - 1)
688#define SK_PNMI_PORT_LOG2INST(l)	((unsigned int)(l) + 1)
689#define SK_PNMI_PORT_PHYS2LOG(p)	((unsigned int)(p) + 1)
690#define SK_PNMI_PORT_LOG2PHYS(pAC,l)	((unsigned int)(l) - 1)
691#define SK_PNMI_PORT_PHYS2INST(pAC,p)	\
692	(pAC->Pnmi.DualNetActiveFlag ? 2 : ((unsigned int)(p) + 2))
693#define SK_PNMI_PORT_INST2PHYS(pAC,i)	((unsigned int)(i) - 2)
694
695/*
696 * Structure definition for SkPnmiGetStruct and SkPnmiSetStruct
697 */
698#define SK_PNMI_VPD_KEY_SIZE	5
699#define SK_PNMI_VPD_BUFSIZE		(VPD_SIZE)
700#define SK_PNMI_VPD_ENTRIES		(VPD_SIZE / 4)
701#define SK_PNMI_VPD_DATALEN		128 /*  Number of data bytes */
702
703#define SK_PNMI_MULTICAST_LISTLEN	64
704#define SK_PNMI_SENSOR_ENTRIES		(SK_MAX_SENSORS)
705#define SK_PNMI_CHECKSUM_ENTRIES	3
706#define SK_PNMI_MAC_ENTRIES		(SK_MAX_MACS + 1)
707#define SK_PNMI_MONITOR_ENTRIES		20
708#define SK_PNMI_TRAP_ENTRIES		10
709#define SK_PNMI_TRAPLEN			128
710#define SK_PNMI_STRINGLEN1		80
711#define SK_PNMI_STRINGLEN2		25
712#define SK_PNMI_TRAP_QUEUE_LEN		512
713
714typedef struct s_PnmiVpd {
715	char			VpdKey[SK_PNMI_VPD_KEY_SIZE];
716	char			VpdValue[SK_PNMI_VPD_DATALEN];
717	SK_U8			VpdAccess;
718	SK_U8			VpdAction;
719} SK_PNMI_VPD;
720
721typedef struct s_PnmiSensor {
722	SK_U8			SensorIndex;
723	char			SensorDescr[SK_PNMI_STRINGLEN2];
724	SK_U8			SensorType;
725	SK_U32			SensorValue;
726	SK_U32			SensorWarningThresholdLow;
727	SK_U32			SensorWarningThresholdHigh;
728	SK_U32			SensorErrorThresholdLow;
729	SK_U32			SensorErrorThresholdHigh;
730	SK_U8			SensorStatus;
731	SK_U64			SensorWarningCts;
732	SK_U64			SensorErrorCts;
733	SK_U64			SensorWarningTimestamp;
734	SK_U64			SensorErrorTimestamp;
735} SK_PNMI_SENSOR;
736
737typedef struct s_PnmiChecksum {
738	SK_U64			ChecksumRxOkCts;
739	SK_U64			ChecksumRxUnableCts;
740	SK_U64			ChecksumRxErrCts;
741	SK_U64			ChecksumTxOkCts;
742	SK_U64			ChecksumTxUnableCts;
743} SK_PNMI_CHECKSUM;
744
745typedef struct s_PnmiStat {
746	SK_U64			StatTxOkCts;
747	SK_U64			StatTxOctetsOkCts;
748	SK_U64			StatTxBroadcastOkCts;
749	SK_U64			StatTxMulticastOkCts;
750	SK_U64			StatTxUnicastOkCts;
751	SK_U64			StatTxLongFramesCts;
752	SK_U64			StatTxBurstCts;
753	SK_U64			StatTxPauseMacCtrlCts;
754	SK_U64			StatTxMacCtrlCts;
755	SK_U64			StatTxSingleCollisionCts;
756	SK_U64			StatTxMultipleCollisionCts;
757	SK_U64			StatTxExcessiveCollisionCts;
758	SK_U64			StatTxLateCollisionCts;
759	SK_U64			StatTxDeferralCts;
760	SK_U64			StatTxExcessiveDeferralCts;
761	SK_U64			StatTxFifoUnderrunCts;
762	SK_U64			StatTxCarrierCts;
763	SK_U64			Dummy1; /* StatTxUtilization */
764	SK_U64			StatTx64Cts;
765	SK_U64			StatTx127Cts;
766	SK_U64			StatTx255Cts;
767	SK_U64			StatTx511Cts;
768	SK_U64			StatTx1023Cts;
769	SK_U64			StatTxMaxCts;
770	SK_U64			StatTxSyncCts;
771	SK_U64			StatTxSyncOctetsCts;
772	SK_U64			StatRxOkCts;
773	SK_U64			StatRxOctetsOkCts;
774	SK_U64			StatRxBroadcastOkCts;
775	SK_U64			StatRxMulticastOkCts;
776	SK_U64			StatRxUnicastOkCts;
777	SK_U64			StatRxLongFramesCts;
778	SK_U64			StatRxPauseMacCtrlCts;
779	SK_U64			StatRxMacCtrlCts;
780	SK_U64			StatRxPauseMacCtrlErrorCts;
781	SK_U64			StatRxMacCtrlUnknownCts;
782	SK_U64			StatRxBurstCts;
783	SK_U64			StatRxMissedCts;
784	SK_U64			StatRxFramingCts;
785	SK_U64			StatRxFifoOverflowCts;
786	SK_U64			StatRxJabberCts;
787	SK_U64			StatRxCarrierCts;
788	SK_U64			StatRxIRLengthCts;
789	SK_U64			StatRxSymbolCts;
790	SK_U64			StatRxShortsCts;
791	SK_U64			StatRxRuntCts;
792	SK_U64			StatRxCextCts;
793	SK_U64			StatRxTooLongCts;
794	SK_U64			StatRxFcsCts;
795	SK_U64			Dummy2; /* StatRxUtilization */
796	SK_U64			StatRx64Cts;
797	SK_U64			StatRx127Cts;
798	SK_U64			StatRx255Cts;
799	SK_U64			StatRx511Cts;
800	SK_U64			StatRx1023Cts;
801	SK_U64			StatRxMaxCts;
802} SK_PNMI_STAT;
803
804typedef struct s_PnmiConf {
805	char			ConfMacCurrentAddr[6];
806	char			ConfMacFactoryAddr[6];
807	SK_U8			ConfPMD;
808	SK_U8			ConfConnector;
809	SK_U8			ConfLinkCapability;
810	SK_U8			ConfLinkMode;
811	SK_U8			ConfLinkModeStatus;
812	SK_U8			ConfLinkStatus;
813	SK_U8			ConfFlowCtrlCapability;
814	SK_U8			ConfFlowCtrlMode;
815	SK_U8			ConfFlowCtrlStatus;
816	SK_U8			ConfPhyOperationCapability;
817	SK_U8			ConfPhyOperationMode;
818	SK_U8			ConfPhyOperationStatus;
819} SK_PNMI_CONF;
820
821typedef struct s_PnmiRlmt {
822	SK_U32			RlmtIndex;
823	SK_U32			RlmtStatus;
824	SK_U64			RlmtTxHelloCts;
825	SK_U64			RlmtRxHelloCts;
826	SK_U64			RlmtTxSpHelloReqCts;
827	SK_U64			RlmtRxSpHelloCts;
828} SK_PNMI_RLMT;
829
830typedef struct s_PnmiRlmtMonitor {
831	SK_U32			RlmtMonitorIndex;
832	char			RlmtMonitorAddr[6];
833	SK_U64			RlmtMonitorErrorCts;
834	SK_U64			RlmtMonitorTimestamp;
835	SK_U8			RlmtMonitorAdmin;
836} SK_PNMI_RLMT_MONITOR;
837
838typedef struct s_PnmiRequestStatus {
839	SK_U32			ErrorStatus;
840	SK_U32			ErrorOffset;
841} SK_PNMI_REQUEST_STATUS;
842
843typedef struct s_PnmiStrucData {
844	SK_U32			MgmtDBVersion;
845	SK_PNMI_REQUEST_STATUS	ReturnStatus;
846	SK_U32			VpdFreeBytes;
847	char			VpdEntriesList[SK_PNMI_VPD_ENTRIES * SK_PNMI_VPD_KEY_SIZE];
848	SK_U32			VpdEntriesNumber;
849	SK_PNMI_VPD		Vpd[SK_PNMI_VPD_ENTRIES];
850	SK_U32			PortNumber;
851	SK_U32			DeviceType;
852	char			DriverDescr[SK_PNMI_STRINGLEN1];
853	char			DriverVersion[SK_PNMI_STRINGLEN2];
854	char			HwDescr[SK_PNMI_STRINGLEN1];
855	char			HwVersion[SK_PNMI_STRINGLEN2];
856	SK_U16			Chipset;
857	SK_U32			MtuSize;
858	SK_U32			Action;
859	SK_U32			TestResult;
860	SK_U8			BusType;
861	SK_U8			BusSpeed;
862	SK_U8			BusWidth;
863	SK_U8			SensorNumber;
864	SK_PNMI_SENSOR		Sensor[SK_PNMI_SENSOR_ENTRIES];
865	SK_U8			ChecksumNumber;
866	SK_PNMI_CHECKSUM	Checksum[SK_PNMI_CHECKSUM_ENTRIES];
867	SK_PNMI_STAT		Stat[SK_PNMI_MAC_ENTRIES];
868	SK_PNMI_CONF		Conf[SK_PNMI_MAC_ENTRIES];
869	SK_U8			RlmtMode;
870	SK_U32			RlmtPortNumber;
871	SK_U8			RlmtPortActive;
872	SK_U8			RlmtPortPreferred;
873	SK_U64			RlmtChangeCts;
874	SK_U64			RlmtChangeTime;
875	SK_U64			RlmtChangeEstimate;
876	SK_U64			RlmtChangeThreshold;
877	SK_PNMI_RLMT		Rlmt[SK_MAX_MACS];
878	SK_U32			RlmtMonitorNumber;
879	SK_PNMI_RLMT_MONITOR	RlmtMonitor[SK_PNMI_MONITOR_ENTRIES];
880	SK_U32			TrapNumber;
881	SK_U8			Trap[SK_PNMI_TRAP_QUEUE_LEN];
882	SK_U64			TxSwQueueLen;
883	SK_U64			TxSwQueueMax;
884	SK_U64			TxRetryCts;
885	SK_U64			RxIntrCts;
886	SK_U64			TxIntrCts;
887	SK_U64			RxNoBufCts;
888	SK_U64			TxNoBufCts;
889	SK_U64			TxUsedDescrNo;
890	SK_U64			RxDeliveredCts;
891	SK_U64			RxOctetsDeliveredCts;
892	SK_U64			RxHwErrorsCts;
893	SK_U64			TxHwErrorsCts;
894	SK_U64			InErrorsCts;
895	SK_U64			OutErrorsCts;
896	SK_U64			ErrRecoveryCts;
897	SK_U64			SysUpTime;
898} SK_PNMI_STRUCT_DATA;
899
900#define SK_PNMI_STRUCT_SIZE	(sizeof(SK_PNMI_STRUCT_DATA))
901#define SK_PNMI_MIN_STRUCT_SIZE	((unsigned int)(SK_UPTR)\
902				 &(((SK_PNMI_STRUCT_DATA *)0)->VpdFreeBytes))
903							/*
904							 * ReturnStatus field
905							 * must be located
906							 * before VpdFreeBytes
907							 */
908
909/*
910 * Various definitions
911 */
912#define SK_PNMI_MAX_PROTOS		3
913
914#define SK_PNMI_SCNT_NOT		64
915#define SK_PNMI_CNT_NO			67
916
917/*
918 * Estimate data structure
919 */
920typedef struct s_PnmiEstimate {
921	unsigned int		EstValueIndex;
922	SK_U64			EstValue[7];
923	SK_U64			Estimate;
924	SK_TIMER		EstTimer;
925} SK_PNMI_ESTIMATE;
926
927
928/*
929 * PNMI specific adatper context structure
930 */
931typedef struct s_PnmiPort {
932	SK_U32			CounterHigh[SK_PNMI_SCNT_NOT];
933	SK_U64			CounterOffset[SK_PNMI_CNT_NO];
934	SK_U64			StatSyncCts;
935	SK_U64			StatSyncOctetsCts;
936	SK_U64			StatRxLongFrameCts;
937	SK_BOOL			ActiveFlag;
938	SK_U64			TxSwQueueLen;
939	SK_U64			TxSwQueueMax;
940	SK_U64			TxRetryCts;
941	SK_U64			RxIntrCts;
942	SK_U64			TxIntrCts;
943	SK_U64			RxNoBufCts;
944	SK_U64			TxNoBufCts;
945	SK_U64			TxUsedDescrNo;
946	SK_U64			RxDeliveredCts;
947	SK_U64			RxOctetsDeliveredCts;
948	SK_U64			RxHwErrorsCts;
949	SK_U64			TxHwErrorsCts;
950	SK_U64			InErrorsCts;
951	SK_U64			OutErrorsCts;
952	SK_U64			ErrRecoveryCts;
953} SK_PNMI_PORT;
954
955
956typedef struct s_PnmiData {
957	SK_PNMI_PORT		Port[SK_MAX_MACS];
958	SK_U64			VirtualCounterOffset[SK_PNMI_CNT_NO];
959	SK_U32			TestResult;
960	char			HwVersion[10];
961
962	char			*pDriverDescription;
963	char			*pDriverVersion;
964
965	char			TrapBuf[SK_PNMI_TRAP_QUEUE_LEN];
966	unsigned int		TrapBufFree;
967	unsigned int		TrapQueueBeg;
968	unsigned int		TrapQueueEnd;
969	unsigned int		TrapBufPad;
970	unsigned int		TrapUnique;
971
972	int			MacUpdatedFlag;
973	int			RlmtUpdatedFlag;
974	int			SirqUpdatedFlag;
975
976	SK_U64			RlmtChangeCts;
977	SK_U64			RlmtChangeTime;
978	SK_PNMI_ESTIMATE	RlmtChangeEstimate;
979	SK_U64			RlmtChangeThreshold;
980
981	SK_U32			DeviceType;
982	char			PciBusSpeed;
983	char			PciBusWidth;
984	char			PMD;
985	char			Connector;
986	SK_U64			StartUpTime;
987	SK_BOOL			DualNetActiveFlag;
988} SK_PNMI;
989
990
991/*
992 * Function prototypes
993 */
994extern int SkPnmiInit(SK_AC *pAc, SK_IOC IoC, int level);
995extern int SkPnmiGetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
996	unsigned int* pLen, SK_U32 Instance, SK_U32 NetIndex);
997extern int SkPnmiPreSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id,
998	void* pBuf, unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
999extern int SkPnmiSetVar(SK_AC *pAc, SK_IOC IoC, SK_U32 Id, void* pBuf,
1000	unsigned int *pLen, SK_U32 Instance, SK_U32 NetIndex);
1001extern int SkPnmiGetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
1002	unsigned int *pLen, SK_U32 NetIndex);
1003extern int SkPnmiPreSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
1004	unsigned int *pLen, SK_U32 NetIndex);
1005extern int SkPnmiSetStruct(SK_AC *pAc, SK_IOC IoC, void* pBuf,
1006	unsigned int *pLen, SK_U32 NetIndex);
1007extern int SkPnmiEvent(SK_AC *pAc, SK_IOC IoC, SK_U32 Event,
1008	SK_EVPARA Param);
1009
1010#endif
1011