mad.h revision 331769
1/*
2 * Copyright (c) 2004-2009 Voltaire Inc.  All rights reserved.
3 * Copyright (c) 2009 HNR Consulting.  All rights reserved.
4 * Copyright (c) 2009-2011 Mellanox Technologies LTD.  All rights reserved.
5 *
6 * This software is available to you under a choice of one of two
7 * licenses.  You may choose to be licensed under the terms of the GNU
8 * General Public License (GPL) Version 2, available from the file
9 * COPYING in the main directory of this source tree, or the
10 * OpenIB.org BSD license below:
11 *
12 *     Redistribution and use in source and binary forms, with or
13 *     without modification, are permitted provided that the following
14 *     conditions are met:
15 *
16 *      - Redistributions of source code must retain the above
17 *        copyright notice, this list of conditions and the following
18 *        disclaimer.
19 *
20 *      - Redistributions in binary form must reproduce the above
21 *        copyright notice, this list of conditions and the following
22 *        disclaimer in the documentation and/or other materials
23 *        provided with the distribution.
24 *
25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 * SOFTWARE.
33 *
34 */
35#ifndef _MAD_H_
36#define _MAD_H_
37
38#include <infiniband/mad_osd.h>
39
40#ifdef __cplusplus
41#  define BEGIN_C_DECLS extern "C" {
42#  define END_C_DECLS   }
43#else				/* !__cplusplus */
44#  define BEGIN_C_DECLS
45#  define END_C_DECLS
46#endif				/* __cplusplus */
47
48BEGIN_C_DECLS
49#define IB_MAD_RPC_VERSION_MASK	0x0f00
50#define IB_MAD_RPC_VERSION1	(1<<8)
51
52#define IB_SUBNET_PATH_HOPS_MAX	64
53#define IB_DEFAULT_SUBN_PREFIX	0xfe80000000000000ULL
54#define IB_DEFAULT_QP1_QKEY	0x80010000
55#define IB_MAD_SIZE		256
56#define IB_SMP_DATA_OFFS	64
57#define IB_SMP_DATA_SIZE	64
58#define IB_VENDOR_RANGE1_DATA_OFFS	24
59#define IB_VENDOR_RANGE1_DATA_SIZE	(IB_MAD_SIZE - IB_VENDOR_RANGE1_DATA_OFFS)
60#define IB_VENDOR_RANGE2_DATA_OFFS	40
61#define IB_VENDOR_RANGE2_DATA_SIZE	(IB_MAD_SIZE - IB_VENDOR_RANGE2_DATA_OFFS)
62#define IB_SA_DATA_SIZE		200
63#define IB_SA_DATA_OFFS		56
64#define IB_PC_DATA_OFFS		64
65#define IB_PC_DATA_SZ		(IB_MAD_SIZE - IB_PC_DATA_OFFS)
66#define IB_SA_MCM_RECSZ		53
67#define IB_SA_PR_RECSZ		64
68#define IB_SA_NR_RECSZ		108
69#define IB_SA_GIR_RECSZ		72
70#define IB_BM_DATA_OFFS		64
71#define IB_BM_DATA_SZ		(IB_MAD_SIZE - IB_BM_DATA_OFFS)
72#define IB_BM_BKEY_OFFS		24
73#define IB_BM_BKEY_AND_DATA_SZ	(IB_MAD_SIZE - IB_BM_BKEY_OFFS)
74#define IB_CC_DATA_OFFS         64
75#define IB_CC_DATA_SZ           (IB_MAD_SIZE - IB_CC_DATA_OFFS)
76#define IB_CC_LOG_DATA_OFFS     32
77#define IB_CC_LOG_DATA_SZ       (IB_MAD_SIZE - IB_CC_LOG_DATA_OFFS)
78
79enum MAD_CLASSES {
80	IB_SMI_CLASS = 0x1,
81	IB_SMI_DIRECT_CLASS = 0x81,
82	IB_SA_CLASS = 0x3,
83	IB_PERFORMANCE_CLASS = 0x4,
84	IB_BOARD_MGMT_CLASS = 0x5,
85	IB_DEVICE_MGMT_CLASS = 0x6,
86	IB_CM_CLASS = 0x7,
87	IB_SNMP_CLASS = 0x8,
88	IB_VENDOR_RANGE1_START_CLASS = 0x9,
89	IB_VENDOR_RANGE1_END_CLASS = 0x0f,
90	IB_CC_CLASS = 0x21,
91	IB_VENDOR_RANGE2_START_CLASS = 0x30,
92	IB_VENDOR_RANGE2_END_CLASS = 0x4f,
93};
94
95enum MAD_METHODS {
96	IB_MAD_METHOD_GET = 0x1,
97	IB_MAD_METHOD_SET = 0x2,
98	IB_MAD_METHOD_GET_RESPONSE = 0x81,
99
100	IB_MAD_METHOD_SEND = 0x3,
101	IB_MAD_METHOD_TRAP = 0x5,
102	IB_MAD_METHOD_TRAP_REPRESS = 0x7,
103
104	IB_MAD_METHOD_REPORT = 0x6,
105	IB_MAD_METHOD_REPORT_RESPONSE = 0x86,
106	IB_MAD_METHOD_GET_TABLE = 0x12,
107	IB_MAD_METHOD_GET_TABLE_RESPONSE = 0x92,
108	IB_MAD_METHOD_GET_TRACE_TABLE = 0x13,
109	IB_MAD_METHOD_GET_TRACE_TABLE_RESPONSE = 0x93,
110	IB_MAD_METHOD_GETMULTI = 0x14,
111	IB_MAD_METHOD_GETMULTI_RESPONSE = 0x94,
112	IB_MAD_METHOD_DELETE = 0x15,
113	IB_MAD_METHOD_DELETE_RESPONSE = 0x95,
114
115	IB_MAD_RESPONSE = 0x80,
116};
117
118enum MAD_ATTR_ID {
119	CLASS_PORT_INFO = 0x1,
120	NOTICE = 0x2,
121	INFORM_INFO = 0x3,
122};
123
124enum MAD_STATUS {
125	IB_MAD_STS_OK = (0 << 2),
126	IB_MAD_STS_BUSY = (1 << 0),
127	IB_MAD_STS_REDIRECT = (1 << 1),
128	IB_MAD_STS_BAD_BASE_VER_OR_CLASS = (1 << 2),
129	IB_MAD_STS_METHOD_NOT_SUPPORTED = (2 << 2),
130	IB_MAD_STS_METHOD_ATTR_NOT_SUPPORTED = (3 << 2),
131	IB_MAD_STS_INV_ATTR_VALUE = (7 << 2),
132};
133
134enum SMI_ATTR_ID {
135	IB_ATTR_NODE_DESC = 0x10,
136	IB_ATTR_NODE_INFO = 0x11,
137	IB_ATTR_SWITCH_INFO = 0x12,
138	IB_ATTR_GUID_INFO = 0x14,
139	IB_ATTR_PORT_INFO = 0x15,
140	IB_ATTR_PKEY_TBL = 0x16,
141	IB_ATTR_SLVL_TABLE = 0x17,
142	IB_ATTR_VL_ARBITRATION = 0x18,
143	IB_ATTR_LINEARFORWTBL = 0x19,
144	IB_ATTR_MULTICASTFORWTBL = 0x1b,
145	IB_ATTR_LINKSPEEDWIDTHPAIRSTBL = 0x1c,
146	IB_ATTR_VENDORMADSTBL = 0x1d,
147	IB_ATTR_SMINFO = 0x20,
148	IB_ATTR_PORT_INFO_EXT = 0x33,
149	IB_ATTR_LAST,
150
151	IB_ATTR_MLNX_EXT_PORT_INFO = 0xff90,
152};
153
154enum SA_ATTR_ID {
155	IB_SA_ATTR_NOTICE = 0x02,
156	IB_SA_ATTR_INFORMINFO = 0x03,
157	IB_SA_ATTR_NODERECORD = 0x11,
158	IB_SA_ATTR_PORTINFORECORD = 0x12,
159	IB_SA_ATTR_SL2VLTABLERECORD = 0x13,
160	IB_SA_ATTR_SWITCHINFORECORD = 0x14,
161	IB_SA_ATTR_LFTRECORD = 0x15,
162	IB_SA_ATTR_RFTRECORD = 0x16,
163	IB_SA_ATTR_MFTRECORD = 0x17,
164	IB_SA_ATTR_SMINFORECORD = 0x18,
165	IB_SA_ATTR_LINKRECORD = 0x20,
166	IB_SA_ATTR_GUIDINFORECORD = 0x30,
167	IB_SA_ATTR_SERVICERECORD = 0x31,
168	IB_SA_ATTR_PKEYTABLERECORD = 0x33,
169	IB_SA_ATTR_PATHRECORD = 0x35,
170	IB_SA_ATTR_VLARBTABLERECORD = 0x36,
171	IB_SA_ATTR_MCRECORD = 0x38,
172	IB_SA_ATTR_MULTIPATH = 0x3a,
173	IB_SA_ATTR_INFORMINFORECORD = 0xf3,
174
175	IB_SA_ATTR_LAST
176};
177
178enum GSI_ATTR_ID {
179	IB_GSI_PORT_SAMPLES_CONTROL = 0x10,
180	IB_GSI_PORT_SAMPLES_RESULT = 0x11,
181	IB_GSI_PORT_COUNTERS = 0x12,
182	IB_GSI_PORT_RCV_ERROR_DETAILS = 0x15,
183	IB_GSI_PORT_XMIT_DISCARD_DETAILS = 0x16,
184	IB_GSI_PORT_PORT_OP_RCV_COUNTERS = 0x17,
185	IB_GSI_PORT_PORT_FLOW_CTL_COUNTERS = 0x18,
186	IB_GSI_PORT_PORT_VL_OP_PACKETS = 0x19,
187	IB_GSI_PORT_PORT_VL_OP_DATA = 0x1A,
188	IB_GSI_PORT_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS = 0x1B,
189	IB_GSI_PORT_PORT_VL_XMIT_WAIT_COUNTERS = 0x1C,
190	IB_GSI_PORT_COUNTERS_EXT = 0x1D,
191	IB_GSI_PORT_EXT_SPEEDS_COUNTERS = 0x1F,
192	IB_GSI_SW_PORT_VL_CONGESTION = 0x30,
193	IB_GSI_PORT_RCV_CON_CTRL = 0x31,
194	IB_GSI_PORT_SL_RCV_FECN = 0x32,
195	IB_GSI_PORT_SL_RCV_BECN = 0x33,
196	IB_GSI_PORT_XMIT_CON_CTRL = 0x34,
197	IB_GSI_PORT_VL_XMIT_TIME_CONG = 0x35,
198	IB_GSI_PORT_XMIT_DATA_SL = 0x36,
199	IB_GSI_PORT_RCV_DATA_SL = 0x37,
200	IB_GSI_ATTR_LAST
201};
202
203enum BM_ATTR_ID {
204	IB_BM_ATTR_BKEYINFO = 0x10,
205	IB_BM_ATTR_WRITE_VPD = 0x20,
206	IB_BM_ATTR_READ_VPD = 0x21,
207	IB_BM_ATTR_RESET_IBML = 0x22,
208	IB_BM_ATTR_SET_MODULE_PM_CONTROL = 0x23,
209	IB_BM_ATTR_GET_MODULE_PM_CONTROL = 0x24,
210	IB_BM_ATTR_SET_UNIT_PM_CONTROL = 0x25,
211	IB_BM_ATTR_GET_UNIT_PM_CONTROL = 0x26,
212	IB_BM_ATTR_SET_IOC_PM_CONTROL = 0x27,
213	IB_BM_ATTR_GET_IOC_PM_CONTROL = 0x28,
214	IB_BM_ATTR_SET_MODULE_STATE = 0x29,
215	IB_BM_ATTR_SET_MODULE_ATTENTION = 0x2A,
216	IB_BM_ATTR_GET_MODULE_STATUS = 0x2B,
217	IB_BM_ATTR_IB2IBML = 0x2C,
218	IB_BM_ATTR_IB2CME = 0x2D,
219	IB_BM_ATTR_IB2MME = 0x2E,
220	IB_BM_ATTR_OEM = 0x2F,
221
222	IB_BM_ATTR_LAST
223};
224
225enum CC_ATTRI_ID {
226	IB_CC_ATTR_CONGESTION_INFO = 0x11,
227	IB_CC_ATTR_CONGESTION_KEY_INFO = 0x12,
228	IB_CC_ATTR_CONGESTION_LOG = 0x13,
229	IB_CC_ATTR_SWITCH_CONGESTION_SETTING = 0x14,
230	IB_CC_ATTR_SWITCH_PORT_CONGESTION_SETTING = 0x15,
231	IB_CC_ATTR_CA_CONGESTION_SETTING = 0x16,
232	IB_CC_ATTR_CONGESTION_CONTROL_TABLE = 0x17,
233	IB_CC_ATTR_TIMESTAMP = 0x18,
234};
235
236#define IB_VENDOR_OPENIB_PING_CLASS	(IB_VENDOR_RANGE2_START_CLASS + 2)
237#define IB_VENDOR_OPENIB_SYSSTAT_CLASS	(IB_VENDOR_RANGE2_START_CLASS + 3)
238#define IB_OPENIB_OUI			(0x001405)
239
240typedef uint8_t ibmad_gid_t[16];
241#ifdef USE_DEPRECATED_IB_GID_T
242typedef ibmad_gid_t ib_gid_t __attribute__ ((deprecated));
243#endif
244
245typedef struct {
246	int cnt;
247	uint8_t p[IB_SUBNET_PATH_HOPS_MAX];
248	uint16_t drslid;
249	uint16_t drdlid;
250} ib_dr_path_t;
251
252typedef struct {
253	unsigned id;
254	unsigned mod;
255} ib_attr_t;
256
257typedef struct {
258	int mgtclass;
259	int method;
260	ib_attr_t attr;
261	uint32_t rstatus;	/* return status */
262	int dataoffs;
263	int datasz;
264	uint64_t mkey;
265	uint64_t trid;		/* used for out mad if nonzero, return real val */
266	uint64_t mask;		/* for sa mads */
267	unsigned recsz;		/* for sa mads (attribute offset) */
268	int timeout;
269	uint32_t oui;		/* for vendor range 2 mads */
270} ib_rpc_t;
271
272typedef struct {
273	int mgtclass;
274	int method;
275	ib_attr_t attr;
276	uint32_t rstatus;	/* return status */
277	int dataoffs;
278	int datasz;
279	uint64_t mkey;
280	uint64_t trid;		/* used for out mad if nonzero, return real val */
281	uint64_t mask;		/* for sa mads */
282	unsigned recsz;		/* for sa mads (attribute offset) */
283	int timeout;
284	uint32_t oui;		/* for vendor range 2 mads */
285	int error;		/* errno */
286} ib_rpc_v1_t;
287
288typedef struct {
289	int mgtclass;
290	int method;
291	ib_attr_t attr;
292	uint32_t rstatus;       /* return status */
293	int dataoffs;
294	int datasz;
295	uint64_t mkey;
296	uint64_t trid;          /* used for out mad if nonzero, return real val */
297	uint64_t mask;          /* for sa mads */
298	unsigned recsz;         /* for sa mads (attribute offset) */
299	int timeout;
300	uint32_t oui;           /* for vendor range 2 mads */
301	int error;		/* errno */
302	uint64_t cckey;
303} ib_rpc_cc_t;
304
305typedef struct portid {
306	int lid;		/* lid or 0 if directed route */
307	ib_dr_path_t drpath;
308	int grh_present;	/* flag */
309	ibmad_gid_t gid;
310	uint32_t qp;
311	uint32_t qkey;
312	uint8_t sl;
313	unsigned pkey_idx;
314} ib_portid_t;
315
316typedef void (ib_mad_dump_fn) (char *buf, int bufsz, void *val, int valsz);
317
318#define IB_FIELD_NAME_LEN	32
319
320typedef struct ib_field {
321	int bitoffs;
322	int bitlen;
323	char name[IB_FIELD_NAME_LEN];
324	ib_mad_dump_fn *def_dump_fn;
325} ib_field_t;
326
327enum MAD_FIELDS {
328	IB_NO_FIELD,
329
330	IB_GID_PREFIX_F,
331	IB_GID_GUID_F,
332
333	/* first MAD word (0-3 bytes) */
334	IB_MAD_METHOD_F,
335	IB_MAD_RESPONSE_F,
336	IB_MAD_CLASSVER_F,
337	IB_MAD_MGMTCLASS_F,
338	IB_MAD_BASEVER_F,
339
340	/* second MAD word (4-7 bytes) */
341	IB_MAD_STATUS_F,
342
343	/* DRSMP only */
344	IB_DRSMP_HOPCNT_F,
345	IB_DRSMP_HOPPTR_F,
346	IB_DRSMP_STATUS_F,
347	IB_DRSMP_DIRECTION_F,
348
349	/* words 3,4,5,6 (8-23 bytes) */
350	IB_MAD_TRID_F,
351	IB_MAD_ATTRID_F,
352	IB_MAD_ATTRMOD_F,
353
354	/* word 7,8 (24-31 bytes) */
355	IB_MAD_MKEY_F,
356
357	/* word 9 (32-37 bytes) */
358	IB_DRSMP_DRDLID_F,
359	IB_DRSMP_DRSLID_F,
360
361	/* word 10,11 (36-43 bytes) */
362	IB_SA_MKEY_F,
363
364	/* word 12 (44-47 bytes) */
365	IB_SA_ATTROFFS_F,
366
367	/* word 13,14 (48-55 bytes) */
368	IB_SA_COMPMASK_F,
369
370	/* word 13,14 (56-255 bytes) */
371	IB_SA_DATA_F,
372
373	/* bytes 64 - 127 */
374	IB_SM_DATA_F,
375
376	/* bytes 64 - 256 */
377	IB_GS_DATA_F,
378
379	/* bytes 128 - 191 */
380	IB_DRSMP_PATH_F,
381
382	/* bytes 192 - 255 */
383	IB_DRSMP_RPATH_F,
384
385	/*
386	 * PortInfo fields
387	 */
388	IB_PORT_FIRST_F,
389	IB_PORT_MKEY_F = IB_PORT_FIRST_F,
390	IB_PORT_GID_PREFIX_F,
391	IB_PORT_LID_F,
392	IB_PORT_SMLID_F,
393	IB_PORT_CAPMASK_F,
394	IB_PORT_DIAG_F,
395	IB_PORT_MKEY_LEASE_F,
396	IB_PORT_LOCAL_PORT_F,
397	IB_PORT_LINK_WIDTH_ENABLED_F,
398	IB_PORT_LINK_WIDTH_SUPPORTED_F,
399	IB_PORT_LINK_WIDTH_ACTIVE_F,
400	IB_PORT_LINK_SPEED_SUPPORTED_F,
401	IB_PORT_STATE_F,
402	IB_PORT_PHYS_STATE_F,
403	IB_PORT_LINK_DOWN_DEF_F,
404	IB_PORT_MKEY_PROT_BITS_F,
405	IB_PORT_LMC_F,
406	IB_PORT_LINK_SPEED_ACTIVE_F,
407	IB_PORT_LINK_SPEED_ENABLED_F,
408	IB_PORT_NEIGHBOR_MTU_F,
409	IB_PORT_SMSL_F,
410	IB_PORT_VL_CAP_F,
411	IB_PORT_INIT_TYPE_F,
412	IB_PORT_VL_HIGH_LIMIT_F,
413	IB_PORT_VL_ARBITRATION_HIGH_CAP_F,
414	IB_PORT_VL_ARBITRATION_LOW_CAP_F,
415	IB_PORT_INIT_TYPE_REPLY_F,
416	IB_PORT_MTU_CAP_F,
417	IB_PORT_VL_STALL_COUNT_F,
418	IB_PORT_HOQ_LIFE_F,
419	IB_PORT_OPER_VLS_F,
420	IB_PORT_PART_EN_INB_F,
421	IB_PORT_PART_EN_OUTB_F,
422	IB_PORT_FILTER_RAW_INB_F,
423	IB_PORT_FILTER_RAW_OUTB_F,
424	IB_PORT_MKEY_VIOL_F,
425	IB_PORT_PKEY_VIOL_F,
426	IB_PORT_QKEY_VIOL_F,
427	IB_PORT_GUID_CAP_F,
428	IB_PORT_CLIENT_REREG_F,
429	IB_PORT_MCAST_PKEY_SUPR_ENAB_F,
430	IB_PORT_SUBN_TIMEOUT_F,
431	IB_PORT_RESP_TIME_VAL_F,
432	IB_PORT_LOCAL_PHYS_ERR_F,
433	IB_PORT_OVERRUN_ERR_F,
434	IB_PORT_MAX_CREDIT_HINT_F,
435	IB_PORT_LINK_ROUND_TRIP_F,
436	IB_PORT_LAST_F,
437
438	/*
439	 * NodeInfo fields
440	 */
441	IB_NODE_FIRST_F,
442	IB_NODE_BASE_VERS_F = IB_NODE_FIRST_F,
443	IB_NODE_CLASS_VERS_F,
444	IB_NODE_TYPE_F,
445	IB_NODE_NPORTS_F,
446	IB_NODE_SYSTEM_GUID_F,
447	IB_NODE_GUID_F,
448	IB_NODE_PORT_GUID_F,
449	IB_NODE_PARTITION_CAP_F,
450	IB_NODE_DEVID_F,
451	IB_NODE_REVISION_F,
452	IB_NODE_LOCAL_PORT_F,
453	IB_NODE_VENDORID_F,
454	IB_NODE_LAST_F,
455
456	/*
457	 * SwitchInfo fields
458	 */
459	IB_SW_FIRST_F,
460	IB_SW_LINEAR_FDB_CAP_F = IB_SW_FIRST_F,
461	IB_SW_RANDOM_FDB_CAP_F,
462	IB_SW_MCAST_FDB_CAP_F,
463	IB_SW_LINEAR_FDB_TOP_F,
464	IB_SW_DEF_PORT_F,
465	IB_SW_DEF_MCAST_PRIM_F,
466	IB_SW_DEF_MCAST_NOT_PRIM_F,
467	IB_SW_LIFE_TIME_F,
468	IB_SW_STATE_CHANGE_F,
469	IB_SW_OPT_SLTOVL_MAPPING_F,
470	IB_SW_LIDS_PER_PORT_F,
471	IB_SW_PARTITION_ENFORCE_CAP_F,
472	IB_SW_PARTITION_ENF_INB_F,
473	IB_SW_PARTITION_ENF_OUTB_F,
474	IB_SW_FILTER_RAW_INB_F,
475	IB_SW_FILTER_RAW_OUTB_F,
476	IB_SW_ENHANCED_PORT0_F,
477	IB_SW_MCAST_FDB_TOP_F,
478	IB_SW_LAST_F,
479
480	/*
481	 * SwitchLinearForwardingTable fields
482	 */
483	IB_LINEAR_FORW_TBL_F,
484
485	/*
486	 * SwitchMulticastForwardingTable fields
487	 */
488	IB_MULTICAST_FORW_TBL_F,
489
490	/*
491	 * NodeDescription fields
492	 */
493	IB_NODE_DESC_F,
494
495	/*
496	 * Notice/Trap fields
497	 */
498	IB_NOTICE_IS_GENERIC_F,
499	IB_NOTICE_TYPE_F,
500	IB_NOTICE_PRODUCER_F,
501	IB_NOTICE_TRAP_NUMBER_F,
502	IB_NOTICE_ISSUER_LID_F,
503	IB_NOTICE_TOGGLE_F,
504	IB_NOTICE_COUNT_F,
505	IB_NOTICE_DATA_DETAILS_F,
506	IB_NOTICE_DATA_LID_F,
507	IB_NOTICE_DATA_144_LID_F,
508	IB_NOTICE_DATA_144_CAPMASK_F,
509
510	/*
511	 * GS Performance
512	 */
513	IB_PC_FIRST_F,
514	IB_PC_PORT_SELECT_F = IB_PC_FIRST_F,
515	IB_PC_COUNTER_SELECT_F,
516	IB_PC_ERR_SYM_F,
517	IB_PC_LINK_RECOVERS_F,
518	IB_PC_LINK_DOWNED_F,
519	IB_PC_ERR_RCV_F,
520	IB_PC_ERR_PHYSRCV_F,
521	IB_PC_ERR_SWITCH_REL_F,
522	IB_PC_XMT_DISCARDS_F,
523	IB_PC_ERR_XMTCONSTR_F,
524	IB_PC_ERR_RCVCONSTR_F,
525	IB_PC_COUNTER_SELECT2_F,
526	IB_PC_ERR_LOCALINTEG_F,
527	IB_PC_ERR_EXCESS_OVR_F,
528	IB_PC_VL15_DROPPED_F,
529	IB_PC_XMT_BYTES_F,
530	IB_PC_RCV_BYTES_F,
531	IB_PC_XMT_PKTS_F,
532	IB_PC_RCV_PKTS_F,
533	IB_PC_XMT_WAIT_F,
534	IB_PC_LAST_F,
535
536	/*
537	 * SMInfo
538	 */
539	IB_SMINFO_GUID_F,
540	IB_SMINFO_KEY_F,
541	IB_SMINFO_ACT_F,
542	IB_SMINFO_PRIO_F,
543	IB_SMINFO_STATE_F,
544
545	/*
546	 * SA RMPP
547	 */
548	IB_SA_RMPP_VERS_F,
549	IB_SA_RMPP_TYPE_F,
550	IB_SA_RMPP_RESP_F,
551	IB_SA_RMPP_FLAGS_F,
552	IB_SA_RMPP_STATUS_F,
553
554	/* data1 */
555	IB_SA_RMPP_D1_F,
556	IB_SA_RMPP_SEGNUM_F,
557	/* data2 */
558	IB_SA_RMPP_D2_F,
559	IB_SA_RMPP_LEN_F,	/* DATA: Payload len */
560	IB_SA_RMPP_NEWWIN_F,	/* ACK: new window last */
561
562	/*
563	 * SA Multi Path rec
564	 */
565	IB_SA_MP_NPATH_F,
566	IB_SA_MP_NSRC_F,
567	IB_SA_MP_NDEST_F,
568	IB_SA_MP_GID0_F,
569
570	/*
571	 * SA Path rec
572	 */
573	IB_SA_PR_DGID_F,
574	IB_SA_PR_SGID_F,
575	IB_SA_PR_DLID_F,
576	IB_SA_PR_SLID_F,
577	IB_SA_PR_NPATH_F,
578	IB_SA_PR_SL_F,
579
580	/*
581	 * MC Member rec
582	 */
583	IB_SA_MCM_MGID_F,
584	IB_SA_MCM_PORTGID_F,
585	IB_SA_MCM_QKEY_F,
586	IB_SA_MCM_MLID_F,
587	IB_SA_MCM_SL_F,
588	IB_SA_MCM_MTU_F,
589	IB_SA_MCM_RATE_F,
590	IB_SA_MCM_TCLASS_F,
591	IB_SA_MCM_PKEY_F,
592	IB_SA_MCM_FLOW_LABEL_F,
593	IB_SA_MCM_JOIN_STATE_F,
594	IB_SA_MCM_PROXY_JOIN_F,
595
596	/*
597	 * Service record
598	 */
599	IB_SA_SR_ID_F,
600	IB_SA_SR_GID_F,
601	IB_SA_SR_PKEY_F,
602	IB_SA_SR_LEASE_F,
603	IB_SA_SR_KEY_F,
604	IB_SA_SR_NAME_F,
605	IB_SA_SR_DATA_F,
606
607	/*
608	 * ATS SM record - within SA_SR_DATA
609	 */
610	IB_ATS_SM_NODE_ADDR_F,
611	IB_ATS_SM_MAGIC_KEY_F,
612	IB_ATS_SM_NODE_TYPE_F,
613	IB_ATS_SM_NODE_NAME_F,
614
615	/*
616	 * SLTOVL MAPPING TABLE
617	 */
618	IB_SLTOVL_MAPPING_TABLE_F,
619
620	/*
621	 * VL ARBITRATION TABLE
622	 */
623	IB_VL_ARBITRATION_TABLE_F,
624
625	/*
626	 * IB vendor class range 2
627	 */
628	IB_VEND2_OUI_F,
629	IB_VEND2_DATA_F,
630
631	/*
632	 * PortCountersExtended
633	 */
634	IB_PC_EXT_FIRST_F,
635	IB_PC_EXT_PORT_SELECT_F = IB_PC_EXT_FIRST_F,
636	IB_PC_EXT_COUNTER_SELECT_F,
637	IB_PC_EXT_XMT_BYTES_F,
638	IB_PC_EXT_RCV_BYTES_F,
639	IB_PC_EXT_XMT_PKTS_F,
640	IB_PC_EXT_RCV_PKTS_F,
641	IB_PC_EXT_XMT_UPKTS_F,
642	IB_PC_EXT_RCV_UPKTS_F,
643	IB_PC_EXT_XMT_MPKTS_F,
644	IB_PC_EXT_RCV_MPKTS_F,
645	IB_PC_EXT_LAST_F,
646
647	/*
648	 * GUIDInfo fields
649	 */
650	IB_GUID_GUID0_F, /* Obsolete, kept for compatibility
651			    Use IB_GI_GUID0_F going forward */
652
653	/*
654	 * ClassPortInfo fields
655	 */
656	IB_CPI_BASEVER_F,
657	IB_CPI_CLASSVER_F,
658	IB_CPI_CAPMASK_F,
659	IB_CPI_CAPMASK2_F,
660	IB_CPI_RESP_TIME_VALUE_F,
661	IB_CPI_REDIRECT_GID_F,
662	IB_CPI_REDIRECT_TC_F,
663	IB_CPI_REDIRECT_SL_F,
664	IB_CPI_REDIRECT_FL_F,
665	IB_CPI_REDIRECT_LID_F,
666	IB_CPI_REDIRECT_PKEY_F,
667	IB_CPI_REDIRECT_QP_F,
668	IB_CPI_REDIRECT_QKEY_F,
669	IB_CPI_TRAP_GID_F,
670	IB_CPI_TRAP_TC_F,
671	IB_CPI_TRAP_SL_F,
672	IB_CPI_TRAP_FL_F,
673	IB_CPI_TRAP_LID_F,
674	IB_CPI_TRAP_PKEY_F,
675	IB_CPI_TRAP_HL_F,
676	IB_CPI_TRAP_QP_F,
677	IB_CPI_TRAP_QKEY_F,
678
679	/*
680	 * PortXmitDataSL fields
681	 */
682	IB_PC_XMT_DATA_SL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
683	IB_PC_XMT_DATA_SL0_F = IB_PC_XMT_DATA_SL_FIRST_F,
684	IB_PC_XMT_DATA_SL1_F,
685	IB_PC_XMT_DATA_SL2_F,
686	IB_PC_XMT_DATA_SL3_F,
687	IB_PC_XMT_DATA_SL4_F,
688	IB_PC_XMT_DATA_SL5_F,
689	IB_PC_XMT_DATA_SL6_F,
690	IB_PC_XMT_DATA_SL7_F,
691	IB_PC_XMT_DATA_SL8_F,
692	IB_PC_XMT_DATA_SL9_F,
693	IB_PC_XMT_DATA_SL10_F,
694	IB_PC_XMT_DATA_SL11_F,
695	IB_PC_XMT_DATA_SL12_F,
696	IB_PC_XMT_DATA_SL13_F,
697	IB_PC_XMT_DATA_SL14_F,
698	IB_PC_XMT_DATA_SL15_F,
699	IB_PC_XMT_DATA_SL_LAST_F,
700
701	/*
702	 * PortRcvDataSL fields
703	 */
704	IB_PC_RCV_DATA_SL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
705	IB_PC_RCV_DATA_SL0_F = IB_PC_RCV_DATA_SL_FIRST_F,
706	IB_PC_RCV_DATA_SL1_F,
707	IB_PC_RCV_DATA_SL2_F,
708	IB_PC_RCV_DATA_SL3_F,
709	IB_PC_RCV_DATA_SL4_F,
710	IB_PC_RCV_DATA_SL5_F,
711	IB_PC_RCV_DATA_SL6_F,
712	IB_PC_RCV_DATA_SL7_F,
713	IB_PC_RCV_DATA_SL8_F,
714	IB_PC_RCV_DATA_SL9_F,
715	IB_PC_RCV_DATA_SL10_F,
716	IB_PC_RCV_DATA_SL11_F,
717	IB_PC_RCV_DATA_SL12_F,
718	IB_PC_RCV_DATA_SL13_F,
719	IB_PC_RCV_DATA_SL14_F,
720	IB_PC_RCV_DATA_SL15_F,
721	IB_PC_RCV_DATA_SL_LAST_F,
722
723	/*
724	 * PortXmitDiscardDetails fields
725	 */
726	/* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
727	IB_PC_XMT_INACT_DISC_F,
728	IB_PC_XMT_NEIGH_MTU_DISC_F,
729	IB_PC_XMT_SW_LIFE_DISC_F,
730	IB_PC_XMT_SW_HOL_DISC_F,
731	IB_PC_XMT_DISC_LAST_F,
732
733	/*
734	 * PortRcvErrorDetails fields
735	 */
736	/* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
737	IB_PC_RCV_LOCAL_PHY_ERR_F,
738	IB_PC_RCV_MALFORMED_PKT_ERR_F,
739	IB_PC_RCV_BUF_OVR_ERR_F,
740	IB_PC_RCV_DLID_MAP_ERR_F,
741	IB_PC_RCV_VL_MAP_ERR_F,
742	IB_PC_RCV_LOOPING_ERR_F,
743	IB_PC_RCV_ERR_LAST_F,
744
745	/*
746	 * PortSamplesControl fields
747	 */
748	IB_PSC_OPCODE_F,
749	IB_PSC_PORT_SELECT_F,
750	IB_PSC_TICK_F,
751	IB_PSC_COUNTER_WIDTH_F,
752	IB_PSC_COUNTER_MASK0_F,
753	IB_PSC_COUNTER_MASKS1TO9_F,
754	IB_PSC_COUNTER_MASKS10TO14_F,
755	IB_PSC_SAMPLE_MECHS_F,
756	IB_PSC_SAMPLE_STATUS_F,
757	IB_PSC_OPTION_MASK_F,
758	IB_PSC_VENDOR_MASK_F,
759	IB_PSC_SAMPLE_START_F,
760	IB_PSC_SAMPLE_INTVL_F,
761	IB_PSC_TAG_F,
762	IB_PSC_COUNTER_SEL0_F,
763	IB_PSC_COUNTER_SEL1_F,
764	IB_PSC_COUNTER_SEL2_F,
765	IB_PSC_COUNTER_SEL3_F,
766	IB_PSC_COUNTER_SEL4_F,
767	IB_PSC_COUNTER_SEL5_F,
768	IB_PSC_COUNTER_SEL6_F,
769	IB_PSC_COUNTER_SEL7_F,
770	IB_PSC_COUNTER_SEL8_F,
771	IB_PSC_COUNTER_SEL9_F,
772	IB_PSC_COUNTER_SEL10_F,
773	IB_PSC_COUNTER_SEL11_F,
774	IB_PSC_COUNTER_SEL12_F,
775	IB_PSC_COUNTER_SEL13_F,
776	IB_PSC_COUNTER_SEL14_F,
777	IB_PSC_SAMPLES_ONLY_OPT_MASK_F,
778	IB_PSC_LAST_F,
779
780	/*
781	 * GUIDInfo fields
782	 */
783	IB_GI_GUID0_F, /* a duplicate of IB_GUID_GUID0_F for backwards
784			  compatibility */
785	IB_GI_GUID1_F,
786	IB_GI_GUID2_F,
787	IB_GI_GUID3_F,
788	IB_GI_GUID4_F,
789	IB_GI_GUID5_F,
790	IB_GI_GUID6_F,
791	IB_GI_GUID7_F,
792
793	/*
794	 * GUID Info Record
795	 */
796	IB_SA_GIR_LID_F,
797	IB_SA_GIR_BLOCKNUM_F,
798	IB_SA_GIR_GUID0_F,
799	IB_SA_GIR_GUID1_F,
800	IB_SA_GIR_GUID2_F,
801	IB_SA_GIR_GUID3_F,
802	IB_SA_GIR_GUID4_F,
803	IB_SA_GIR_GUID5_F,
804	IB_SA_GIR_GUID6_F,
805	IB_SA_GIR_GUID7_F,
806
807	/*
808	 * More PortInfo fields
809	 */
810	IB_PORT_CAPMASK2_F,
811	IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
812	IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
813	IB_PORT_LINK_SPEED_EXT_ENABLED_F,
814	IB_PORT_LINK_SPEED_EXT_LAST_F,
815
816	/*
817	 * PortExtendedSpeedsCounters fields
818	 */
819	IB_PESC_PORT_SELECT_F,
820	IB_PESC_COUNTER_SELECT_F,
821	IB_PESC_SYNC_HDR_ERR_CTR_F,
822	IB_PESC_UNK_BLOCK_CTR_F,
823	IB_PESC_ERR_DET_CTR_LANE0_F,
824	IB_PESC_ERR_DET_CTR_LANE1_F,
825	IB_PESC_ERR_DET_CTR_LANE2_F,
826	IB_PESC_ERR_DET_CTR_LANE3_F,
827	IB_PESC_ERR_DET_CTR_LANE4_F,
828	IB_PESC_ERR_DET_CTR_LANE5_F,
829	IB_PESC_ERR_DET_CTR_LANE6_F,
830	IB_PESC_ERR_DET_CTR_LANE7_F,
831	IB_PESC_ERR_DET_CTR_LANE8_F,
832	IB_PESC_ERR_DET_CTR_LANE9_F,
833	IB_PESC_ERR_DET_CTR_LANE10_F,
834	IB_PESC_ERR_DET_CTR_LANE11_F,
835	IB_PESC_FEC_CORR_BLOCK_CTR_LANE0_F,
836	IB_PESC_FEC_CORR_BLOCK_CTR_LANE1_F,
837	IB_PESC_FEC_CORR_BLOCK_CTR_LANE2_F,
838	IB_PESC_FEC_CORR_BLOCK_CTR_LANE3_F,
839	IB_PESC_FEC_CORR_BLOCK_CTR_LANE4_F,
840	IB_PESC_FEC_CORR_BLOCK_CTR_LANE5_F,
841	IB_PESC_FEC_CORR_BLOCK_CTR_LANE6_F,
842	IB_PESC_FEC_CORR_BLOCK_CTR_LANE7_F,
843	IB_PESC_FEC_CORR_BLOCK_CTR_LANE8_F,
844	IB_PESC_FEC_CORR_BLOCK_CTR_LANE9_F,
845	IB_PESC_FEC_CORR_BLOCK_CTR_LANE10_F,
846	IB_PESC_FEC_CORR_BLOCK_CTR_LANE11_F,
847	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE0_F,
848	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE1_F,
849	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE2_F,
850	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE3_F,
851	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE4_F,
852	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE5_F,
853	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE6_F,
854	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE7_F,
855	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE8_F,
856	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE9_F,
857	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE10_F,
858	IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE11_F,
859	IB_PESC_LAST_F,
860
861	/*
862	 * PortOpRcvCounters fields
863	 */
864	IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
865	IB_PC_PORT_OP_RCV_PKTS_F = IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
866	IB_PC_PORT_OP_RCV_DATA_F,
867	IB_PC_PORT_OP_RCV_COUNTERS_LAST_F,
868
869	/*
870	 * PortFlowCtlCounters fields
871	 */
872	IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
873	IB_PC_PORT_XMIT_FLOW_PKTS_F = IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
874	IB_PC_PORT_RCV_FLOW_PKTS_F,
875	IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F,
876
877	/*
878	 * PortVLOpPackets fields
879	 */
880	IB_PC_PORT_VL_OP_PACKETS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
881	IB_PC_PORT_VL_OP_PACKETS0_F = IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
882	IB_PC_PORT_VL_OP_PACKETS1_F,
883	IB_PC_PORT_VL_OP_PACKETS2_F,
884	IB_PC_PORT_VL_OP_PACKETS3_F,
885	IB_PC_PORT_VL_OP_PACKETS4_F,
886	IB_PC_PORT_VL_OP_PACKETS5_F,
887	IB_PC_PORT_VL_OP_PACKETS6_F,
888	IB_PC_PORT_VL_OP_PACKETS7_F,
889	IB_PC_PORT_VL_OP_PACKETS8_F,
890	IB_PC_PORT_VL_OP_PACKETS9_F,
891	IB_PC_PORT_VL_OP_PACKETS10_F,
892	IB_PC_PORT_VL_OP_PACKETS11_F,
893	IB_PC_PORT_VL_OP_PACKETS12_F,
894	IB_PC_PORT_VL_OP_PACKETS13_F,
895	IB_PC_PORT_VL_OP_PACKETS14_F,
896	IB_PC_PORT_VL_OP_PACKETS15_F,
897	IB_PC_PORT_VL_OP_PACKETS_LAST_F,
898
899	/*
900	 * PortVLOpData fields
901	 */
902	IB_PC_PORT_VL_OP_DATA_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
903	IB_PC_PORT_VL_OP_DATA0_F = IB_PC_PORT_VL_OP_DATA_FIRST_F,
904	IB_PC_PORT_VL_OP_DATA1_F,
905	IB_PC_PORT_VL_OP_DATA2_F,
906	IB_PC_PORT_VL_OP_DATA3_F,
907	IB_PC_PORT_VL_OP_DATA4_F,
908	IB_PC_PORT_VL_OP_DATA5_F,
909	IB_PC_PORT_VL_OP_DATA6_F,
910	IB_PC_PORT_VL_OP_DATA7_F,
911	IB_PC_PORT_VL_OP_DATA8_F,
912	IB_PC_PORT_VL_OP_DATA9_F,
913	IB_PC_PORT_VL_OP_DATA10_F,
914	IB_PC_PORT_VL_OP_DATA11_F,
915	IB_PC_PORT_VL_OP_DATA12_F,
916	IB_PC_PORT_VL_OP_DATA13_F,
917	IB_PC_PORT_VL_OP_DATA14_F,
918	IB_PC_PORT_VL_OP_DATA15_F,
919	IB_PC_PORT_VL_OP_DATA_LAST_F,
920
921	/*
922	 * PortVLXmitFlowCtlUpdateErrors fields
923	 */
924	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
925	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS0_F = IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
926	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS1_F,
927	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS2_F,
928	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS3_F,
929	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS4_F,
930	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS5_F,
931	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS6_F,
932	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS7_F,
933	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS8_F,
934	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS9_F,
935	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS10_F,
936	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS11_F,
937	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS12_F,
938	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS13_F,
939	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS14_F,
940	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS15_F,
941	IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F,
942
943	/*
944	 * PortVLXmitWaitCounters fields
945	 */
946	IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
947	IB_PC_PORT_VL_XMIT_WAIT0_F = IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
948	IB_PC_PORT_VL_XMIT_WAIT1_F,
949	IB_PC_PORT_VL_XMIT_WAIT2_F,
950	IB_PC_PORT_VL_XMIT_WAIT3_F,
951	IB_PC_PORT_VL_XMIT_WAIT4_F,
952	IB_PC_PORT_VL_XMIT_WAIT5_F,
953	IB_PC_PORT_VL_XMIT_WAIT6_F,
954	IB_PC_PORT_VL_XMIT_WAIT7_F,
955	IB_PC_PORT_VL_XMIT_WAIT8_F,
956	IB_PC_PORT_VL_XMIT_WAIT9_F,
957	IB_PC_PORT_VL_XMIT_WAIT10_F,
958	IB_PC_PORT_VL_XMIT_WAIT11_F,
959	IB_PC_PORT_VL_XMIT_WAIT12_F,
960	IB_PC_PORT_VL_XMIT_WAIT13_F,
961	IB_PC_PORT_VL_XMIT_WAIT14_F,
962	IB_PC_PORT_VL_XMIT_WAIT15_F,
963	IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F,
964
965	/*
966	 * SwPortVLCongestion fields
967	 */
968	IB_PC_SW_PORT_VL_CONGESTION_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
969	IB_PC_SW_PORT_VL_CONGESTION0_F = IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
970	IB_PC_SW_PORT_VL_CONGESTION1_F,
971	IB_PC_SW_PORT_VL_CONGESTION2_F,
972	IB_PC_SW_PORT_VL_CONGESTION3_F,
973	IB_PC_SW_PORT_VL_CONGESTION4_F,
974	IB_PC_SW_PORT_VL_CONGESTION5_F,
975	IB_PC_SW_PORT_VL_CONGESTION6_F,
976	IB_PC_SW_PORT_VL_CONGESTION7_F,
977	IB_PC_SW_PORT_VL_CONGESTION8_F,
978	IB_PC_SW_PORT_VL_CONGESTION9_F,
979	IB_PC_SW_PORT_VL_CONGESTION10_F,
980	IB_PC_SW_PORT_VL_CONGESTION11_F,
981	IB_PC_SW_PORT_VL_CONGESTION12_F,
982	IB_PC_SW_PORT_VL_CONGESTION13_F,
983	IB_PC_SW_PORT_VL_CONGESTION14_F,
984	IB_PC_SW_PORT_VL_CONGESTION15_F,
985	IB_PC_SW_PORT_VL_CONGESTION_LAST_F,
986
987	/*
988	 * PortRcvConCtrl fields
989	 */
990	IB_PC_RCV_CON_CTRL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
991	IB_PC_RCV_CON_CTRL_PKT_RCV_FECN_F = IB_PC_RCV_CON_CTRL_FIRST_F,
992	IB_PC_RCV_CON_CTRL_PKT_RCV_BECN_F,
993	IB_PC_RCV_CON_CTRL_LAST_F,
994
995	/*
996	 * PortSLRcvFECN fields
997	 */
998	IB_PC_SL_RCV_FECN_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
999	IB_PC_SL_RCV_FECN0_F = IB_PC_SL_RCV_FECN_FIRST_F,
1000	IB_PC_SL_RCV_FECN1_F,
1001	IB_PC_SL_RCV_FECN2_F,
1002	IB_PC_SL_RCV_FECN3_F,
1003	IB_PC_SL_RCV_FECN4_F,
1004	IB_PC_SL_RCV_FECN5_F,
1005	IB_PC_SL_RCV_FECN6_F,
1006	IB_PC_SL_RCV_FECN7_F,
1007	IB_PC_SL_RCV_FECN8_F,
1008	IB_PC_SL_RCV_FECN9_F,
1009	IB_PC_SL_RCV_FECN10_F,
1010	IB_PC_SL_RCV_FECN11_F,
1011	IB_PC_SL_RCV_FECN12_F,
1012	IB_PC_SL_RCV_FECN13_F,
1013	IB_PC_SL_RCV_FECN14_F,
1014	IB_PC_SL_RCV_FECN15_F,
1015	IB_PC_SL_RCV_FECN_LAST_F,
1016
1017	/*
1018	 * PortSLRcvBECN fields
1019	 */
1020	IB_PC_SL_RCV_BECN_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
1021	IB_PC_SL_RCV_BECN0_F = IB_PC_SL_RCV_BECN_FIRST_F,
1022	IB_PC_SL_RCV_BECN1_F,
1023	IB_PC_SL_RCV_BECN2_F,
1024	IB_PC_SL_RCV_BECN3_F,
1025	IB_PC_SL_RCV_BECN4_F,
1026	IB_PC_SL_RCV_BECN5_F,
1027	IB_PC_SL_RCV_BECN6_F,
1028	IB_PC_SL_RCV_BECN7_F,
1029	IB_PC_SL_RCV_BECN8_F,
1030	IB_PC_SL_RCV_BECN9_F,
1031	IB_PC_SL_RCV_BECN10_F,
1032	IB_PC_SL_RCV_BECN11_F,
1033	IB_PC_SL_RCV_BECN12_F,
1034	IB_PC_SL_RCV_BECN13_F,
1035	IB_PC_SL_RCV_BECN14_F,
1036	IB_PC_SL_RCV_BECN15_F,
1037	IB_PC_SL_RCV_BECN_LAST_F,
1038
1039	/*
1040	 * PortXmitConCtrl fields
1041	 */
1042	IB_PC_XMIT_CON_CTRL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
1043	IB_PC_XMIT_CON_CTRL_TIME_CONG_F = IB_PC_XMIT_CON_CTRL_FIRST_F,
1044	IB_PC_XMIT_CON_CTRL_LAST_F,
1045
1046	/*
1047	 * PortVLXmitTimeCong fields
1048	 */
1049	IB_PC_VL_XMIT_TIME_CONG_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
1050	IB_PC_VL_XMIT_TIME_CONG0_F = IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
1051	IB_PC_VL_XMIT_TIME_CONG1_F,
1052	IB_PC_VL_XMIT_TIME_CONG2_F,
1053	IB_PC_VL_XMIT_TIME_CONG3_F,
1054	IB_PC_VL_XMIT_TIME_CONG4_F,
1055	IB_PC_VL_XMIT_TIME_CONG5_F,
1056	IB_PC_VL_XMIT_TIME_CONG6_F,
1057	IB_PC_VL_XMIT_TIME_CONG7_F,
1058	IB_PC_VL_XMIT_TIME_CONG8_F,
1059	IB_PC_VL_XMIT_TIME_CONG9_F,
1060	IB_PC_VL_XMIT_TIME_CONG10_F,
1061	IB_PC_VL_XMIT_TIME_CONG11_F,
1062	IB_PC_VL_XMIT_TIME_CONG12_F,
1063	IB_PC_VL_XMIT_TIME_CONG13_F,
1064	IB_PC_VL_XMIT_TIME_CONG14_F,
1065	IB_PC_VL_XMIT_TIME_CONG_LAST_F,
1066
1067	/*
1068	 * Mellanox ExtendedPortInfo fields
1069	 */
1070	IB_MLNX_EXT_PORT_STATE_CHG_ENABLE_F,
1071	IB_MLNX_EXT_PORT_LINK_SPEED_SUPPORTED_F,
1072	IB_MLNX_EXT_PORT_LINK_SPEED_ENABLED_F,
1073	IB_MLNX_EXT_PORT_LINK_SPEED_ACTIVE_F,
1074	IB_MLNX_EXT_PORT_LAST_F,
1075
1076	/*
1077	 * Congestion Control Mad fields
1078	 * bytes 24-31 of congestion control mad
1079	 */
1080	IB_CC_CCKEY_F,
1081
1082	/*
1083	 * CongestionInfo fields
1084	 */
1085	IB_CC_CONGESTION_INFO_FIRST_F,
1086	IB_CC_CONGESTION_INFO_F = IB_CC_CONGESTION_INFO_FIRST_F,
1087	IB_CC_CONGESTION_INFO_CONTROL_TABLE_CAP_F,
1088	IB_CC_CONGESTION_INFO_LAST_F,
1089
1090	/*
1091	 * CongestionKeyInfo fields
1092	 */
1093	IB_CC_CONGESTION_KEY_INFO_FIRST_F,
1094	IB_CC_CONGESTION_KEY_INFO_CC_KEY_F = IB_CC_CONGESTION_KEY_INFO_FIRST_F,
1095	IB_CC_CONGESTION_KEY_INFO_CC_KEY_PROTECT_BIT_F,
1096	IB_CC_CONGESTION_KEY_INFO_CC_KEY_LEASE_PERIOD_F,
1097	IB_CC_CONGESTION_KEY_INFO_CC_KEY_VIOLATIONS_F,
1098	IB_CC_CONGESTION_KEY_INFO_LAST_F,
1099
1100	/*
1101	 * CongestionLog (common) fields
1102	 */
1103	IB_CC_CONGESTION_LOG_FIRST_F,
1104	IB_CC_CONGESTION_LOG_LOGTYPE_F = IB_CC_CONGESTION_LOG_FIRST_F,
1105	IB_CC_CONGESTION_LOG_CONGESTION_FLAGS_F,
1106	IB_CC_CONGESTION_LOG_LAST_F,
1107
1108	/*
1109	 * CongestionLog (Switch) fields
1110	 */
1111	IB_CC_CONGESTION_LOG_SWITCH_FIRST_F,
1112	IB_CC_CONGESTION_LOG_SWITCH_LOG_EVENTS_COUNTER_F = IB_CC_CONGESTION_LOG_SWITCH_FIRST_F,
1113	IB_CC_CONGESTION_LOG_SWITCH_CURRENT_TIME_STAMP_F,
1114	IB_CC_CONGESTION_LOG_SWITCH_PORTMAP_F,
1115	IB_CC_CONGESTION_LOG_SWITCH_LAST_F,
1116
1117	/*
1118	 * CongestionLogEvent (Switch) fields
1119	 */
1120	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_FIRST_F,
1121	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_SLID_F = IB_CC_CONGESTION_LOG_ENTRY_SWITCH_FIRST_F,
1122	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_DLID_F,
1123	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_SL_F,
1124	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_TIMESTAMP_F,
1125	IB_CC_CONGESTION_LOG_ENTRY_SWITCH_LAST_F,
1126
1127	/*
1128	 * CongestionLog (CA) fields
1129	 */
1130	IB_CC_CONGESTION_LOG_CA_FIRST_F,
1131	IB_CC_CONGESTION_LOG_CA_THRESHOLD_EVENT_COUNTER_F = IB_CC_CONGESTION_LOG_CA_FIRST_F,
1132	IB_CC_CONGESTION_LOG_CA_THRESHOLD_CONGESTION_EVENT_MAP_F,
1133	IB_CC_CONGESTION_LOG_CA_CURRENT_TIMESTAMP_F,
1134	IB_CC_CONGESTION_LOG_CA_LAST_F,
1135
1136	/*
1137	 * CongestionLogEvent (CA) fields
1138	 */
1139	IB_CC_CONGESTION_LOG_ENTRY_CA_FIRST_F,
1140	IB_CC_CONGESTION_LOG_ENTRY_CA_LOCAL_QP_CN_ENTRY_F = IB_CC_CONGESTION_LOG_ENTRY_CA_FIRST_F,
1141	IB_CC_CONGESTION_LOG_ENTRY_CA_SL_CN_ENTRY_F,
1142	IB_CC_CONGESTION_LOG_ENTRY_CA_SERVICE_TYPE_CN_ENTRY_F,
1143	IB_CC_CONGESTION_LOG_ENTRY_CA_REMOTE_QP_NUMBER_CN_ENTRY_F,
1144	IB_CC_CONGESTION_LOG_ENTRY_CA_LOCAL_LID_CN_F,
1145	IB_CC_CONGESTION_LOG_ENTRY_CA_REMOTE_LID_CN_ENTRY_F,
1146	IB_CC_CONGESTION_LOG_ENTRY_CA_TIMESTAMP_CN_ENTRY_F,
1147	IB_CC_CONGESTION_LOG_ENTRY_CA_LAST_F,
1148
1149	/*
1150	 * SwitchCongestionSetting fields
1151	 */
1152	IB_CC_SWITCH_CONGESTION_SETTING_FIRST_F,
1153	IB_CC_SWITCH_CONGESTION_SETTING_CONTROL_MAP_F = IB_CC_SWITCH_CONGESTION_SETTING_FIRST_F,
1154	IB_CC_SWITCH_CONGESTION_SETTING_VICTIM_MASK_F,
1155	IB_CC_SWITCH_CONGESTION_SETTING_CREDIT_MASK_F,
1156	IB_CC_SWITCH_CONGESTION_SETTING_THRESHOLD_F,
1157	IB_CC_SWITCH_CONGESTION_SETTING_PACKET_SIZE_F,
1158	IB_CC_SWITCH_CONGESTION_SETTING_CS_THRESHOLD_F,
1159	IB_CC_SWITCH_CONGESTION_SETTING_CS_RETURN_DELAY_F,
1160	IB_CC_SWITCH_CONGESTION_SETTING_MARKING_RATE_F,
1161	IB_CC_SWITCH_CONGESTION_SETTING_LAST_F,
1162
1163	/*
1164	 * SwitchPortCongestionSettingElement fields
1165	 */
1166	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_FIRST_F,
1167	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_VALID_F = IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_FIRST_F,
1168	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_CONTROL_TYPE_F,
1169	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_THRESHOLD_F,
1170	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_PACKET_SIZE_F,
1171	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_CONG_PARM_MARKING_RATE_F,
1172	IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_LAST_F,
1173
1174	/*
1175	 * CACongestionSetting fields
1176	 */
1177	IB_CC_CA_CONGESTION_SETTING_FIRST_F,
1178	IB_CC_CA_CONGESTION_SETTING_PORT_CONTROL_F = IB_CC_CA_CONGESTION_SETTING_FIRST_F,
1179	IB_CC_CA_CONGESTION_SETTING_CONTROL_MAP_F,
1180	IB_CC_CA_CONGESTION_SETTING_LAST_F,
1181
1182	/*
1183	 * CACongestionEntry fields
1184	 */
1185	IB_CC_CA_CONGESTION_ENTRY_FIRST_F,
1186	IB_CC_CA_CONGESTION_ENTRY_CCTI_TIMER_F = IB_CC_CA_CONGESTION_ENTRY_FIRST_F,
1187	IB_CC_CA_CONGESTION_ENTRY_CCTI_INCREASE_F,
1188	IB_CC_CA_CONGESTION_ENTRY_TRIGGER_THRESHOLD_F,
1189	IB_CC_CA_CONGESTION_ENTRY_CCTI_MIN_F,
1190	IB_CC_CA_CONGESTION_ENTRY_LAST_F,
1191
1192	/*
1193	 * CongestionControlTable fields
1194	 */
1195	IB_CC_CONGESTION_CONTROL_TABLE_FIRST_F,
1196	IB_CC_CONGESTION_CONTROL_TABLE_CCTI_LIMIT_F = IB_CC_CONGESTION_CONTROL_TABLE_FIRST_F,
1197	IB_CC_CONGESTION_CONTROL_TABLE_LAST_F,
1198
1199	/*
1200	 * CongestionControlTableEntry fields
1201	 */
1202	IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_FIRST_F,
1203	IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_CCT_SHIFT_F = IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_FIRST_F,
1204	IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_CCT_MULTIPLIER_F,
1205	IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_LAST_F,
1206
1207	/*
1208	 * Timestamp fields
1209	 */
1210	IB_CC_TIMESTAMP_FIRST_F,
1211	IB_CC_TIMESTAMP_F = IB_CC_TIMESTAMP_FIRST_F,
1212	IB_CC_TIMESTAMP_LAST_F,
1213
1214	/*
1215	 * Node Record
1216	 */
1217	IB_SA_NR_FIRST_F,
1218	IB_SA_NR_LID_F = IB_SA_NR_FIRST_F,
1219	IB_SA_NR_BASEVER_F,
1220	IB_SA_NR_CLASSVER_F,
1221	IB_SA_NR_TYPE_F,
1222	IB_SA_NR_NPORTS_F,
1223	IB_SA_NR_SYSTEM_GUID_F,
1224	IB_SA_NR_GUID_F,
1225	IB_SA_NR_PORT_GUID_F,
1226	IB_SA_NR_PARTITION_CAP_F,
1227	IB_SA_NR_DEVID_F,
1228	IB_SA_NR_REVISION_F,
1229	IB_SA_NR_LOCAL_PORT_F,
1230	IB_SA_NR_VENDORID_F,
1231	IB_SA_NR_NODEDESC_F,
1232	IB_SA_NR_LAST_F,
1233
1234	/*
1235	 * PortMirrorRoute fields
1236	 */
1237	IB_PMR_FIRST_F,
1238	IB_PMR_ENCAP_RAW_ETH_TYPE_F = IB_PMR_FIRST_F,
1239	IB_PMR_MAX_MIRROR_LEN_F,
1240	IB_PMR_MT_F,
1241	IB_PMR_BF_F,
1242	IB_PMR_NM_PORT_F,
1243	IB_PMR_LRH_VL_F,
1244	IB_PMR_LRH_LVER_F,
1245	IB_PMR_LRH_SL_F,
1246	IB_PMR_LRH_LNH_F,
1247	IB_PMR_LRH_DLID_F,
1248	IB_PMR_LRH_LEN_F,
1249	IB_PMR_LRH_SLID_F,
1250	IB_PMR_LAST_F,
1251
1252	/*
1253	 * PortMirrorFilter fields
1254	 */
1255	IB_PMF_FIRST_F,
1256	IB_PMF_MIRROR_FILTER0_F = IB_PMF_FIRST_F,
1257	IB_PMF_MIRROR_FILTER1_F,
1258	IB_PMF_MIRROR_MASK0_F,
1259	IB_PMF_MIRROR_MASK1_F,
1260	IB_PMF_MIRROR_MASK2_F,
1261	IB_PMF_MIRROR_MASK3_F,
1262	IB_PMF_B0_F,
1263	IB_PMF_MIRROR_MASK_OFFS_0,
1264	IB_PMF_B1_F,
1265	IB_PMF_MIRROR_MASK_OFFS_1,
1266	IB_PMF_B2_F,
1267	IB_PMF_MIRROR_MASK_OFFS_2,
1268	IB_PMF_B3_F,
1269	IB_PMF_MIRROR_MASK_OFFS_3,
1270	IB_PMF_LAST_F,
1271
1272	/*
1273	 * PortMirrorPorts fields
1274	 */
1275	IB_PMP_FIRST_F,
1276	IB_PMP_TQ_1_F = IB_PMP_FIRST_F,
1277	IB_PMP_RQ_1_F,
1278	IB_PMP_TQ_2_F,
1279	IB_PMP_RQ_2_F,
1280	IB_PMP_TQ_3_F,
1281	IB_PMP_RQ_3_F,
1282	IB_PMP_TQ_4_F,
1283	IB_PMP_RQ_4_F,
1284	IB_PMP_TQ_5_F,
1285	IB_PMP_RQ_5_F,
1286	IB_PMP_TQ_6_F,
1287	IB_PMP_RQ_6_F,
1288	IB_PMP_TQ_7_F,
1289	IB_PMP_RQ_7_F,
1290	IB_PMP_TQ_8_F,
1291	IB_PMP_RQ_8_F,
1292	IB_PMP_TQ_9_F,
1293	IB_PMP_RQ_9_F,
1294	IB_PMP_TQ_10_F,
1295	IB_PMP_RQ_10_F,
1296	IB_PMP_TQ_11_F,
1297	IB_PMP_RQ_11_F,
1298	IB_PMP_TQ_12_F,
1299	IB_PMP_RQ_12_F,
1300	IB_PMP_TQ_13_F,
1301	IB_PMP_RQ_13_F,
1302	IB_PMP_TQ_14_F,
1303	IB_PMP_RQ_14_F,
1304	IB_PMP_TQ_15_F,
1305	IB_PMP_RQ_15_F,
1306	IB_PMP_TQ_16_F,
1307	IB_PMP_RQ_16_F,
1308	IB_PMP_TQ_17_F,
1309	IB_PMP_RQ_17_F,
1310	IB_PMP_TQ_18_F,
1311	IB_PMP_RQ_18_F,
1312	IB_PMP_TQ_19_F,
1313	IB_PMP_RQ_19_F,
1314	IB_PMP_TQ_20_F,
1315	IB_PMP_RQ_20_F,
1316	IB_PMP_TQ_21_F,
1317	IB_PMP_RQ_21_F,
1318	IB_PMP_TQ_22_F,
1319	IB_PMP_RQ_22_F,
1320	IB_PMP_TQ_23_F,
1321	IB_PMP_RQ_23_F,
1322	IB_PMP_TQ_24_F,
1323	IB_PMP_RQ_24_F,
1324	IB_PMP_TQ_25_F,
1325	IB_PMP_RQ_25_F,
1326	IB_PMP_TQ_26_F,
1327	IB_PMP_RQ_26_F,
1328	IB_PMP_TQ_27_F,
1329	IB_PMP_RQ_27_F,
1330	IB_PMP_TQ_28_F,
1331	IB_PMP_RQ_28_F,
1332	IB_PMP_TQ_29_F,
1333	IB_PMP_RQ_29_F,
1334	IB_PMP_TQ_30_F,
1335	IB_PMP_RQ_30_F,
1336	IB_PMP_TQ_31_F,
1337	IB_PMP_RQ_31_F,
1338	IB_PMP_TQ_32_F,
1339	IB_PMP_RQ_32_F,
1340	IB_PMP_TQ_33_F,
1341	IB_PMP_RQ_33_F,
1342	IB_PMP_TQ_34_F,
1343	IB_PMP_RQ_34_F,
1344	IB_PMP_TQ_35_F,
1345	IB_PMP_RQ_35_F,
1346	IB_PMP_TQ_36_F,
1347	IB_PMP_RQ_36_F,
1348	IB_PMP_LAST_F,
1349
1350	/*
1351	 * PortSamplesResult fields
1352	 */
1353	IB_PSR_TAG_F,
1354	IB_PSR_SAMPLE_STATUS_F,
1355	IB_PSR_COUNTER0_F,
1356	IB_PSR_COUNTER1_F,
1357	IB_PSR_COUNTER2_F,
1358	IB_PSR_COUNTER3_F,
1359	IB_PSR_COUNTER4_F,
1360	IB_PSR_COUNTER5_F,
1361	IB_PSR_COUNTER6_F,
1362	IB_PSR_COUNTER7_F,
1363	IB_PSR_COUNTER8_F,
1364	IB_PSR_COUNTER9_F,
1365	IB_PSR_COUNTER10_F,
1366	IB_PSR_COUNTER11_F,
1367	IB_PSR_COUNTER12_F,
1368	IB_PSR_COUNTER13_F,
1369	IB_PSR_COUNTER14_F,
1370	IB_PSR_LAST_F,
1371
1372	/*
1373	 * PortInfoExtended fields
1374	 */
1375	IB_PORT_EXT_FIRST_F,
1376	IB_PORT_EXT_CAPMASK_F = IB_PORT_EXT_FIRST_F,
1377	IB_PORT_EXT_FEC_MODE_ACTIVE_F,
1378	IB_PORT_EXT_FDR_FEC_MODE_SUPPORTED_F,
1379	IB_PORT_EXT_FDR_FEC_MODE_ENABLED_F,
1380	IB_PORT_EXT_EDR_FEC_MODE_SUPPORTED_F,
1381	IB_PORT_EXT_EDR_FEC_MODE_ENABLED_F,
1382	IB_PORT_EXT_LAST_F,
1383
1384	/*
1385	 * PortExtendedSpeedsCounters RSFEC active fields
1386	 */
1387	IB_PESC_RSFEC_PORT_SELECT_F,
1388	IB_PESC_RSFEC_COUNTER_SELECT_F,
1389	IB_PESC_RSFEC_SYNC_HDR_ERR_CTR_F,
1390	IB_PESC_RSFEC_UNK_BLOCK_CTR_F,
1391	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE0_F,
1392	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE1_F,
1393	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE2_F,
1394	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE3_F,
1395	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE4_F,
1396	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE5_F,
1397	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE6_F,
1398	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE7_F,
1399	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE8_F,
1400	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE9_F,
1401	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE10_F,
1402	IB_PESC_RSFEC_FEC_CORR_SYMBOL_CTR_LANE11_F,
1403	IB_PESC_PORT_FEC_CORR_BLOCK_CTR_F,
1404	IB_PESC_PORT_FEC_UNCORR_BLOCK_CTR_F,
1405	IB_PESC_PORT_FEC_CORR_SYMBOL_CTR_F,
1406	IB_PESC_RSFEC_LAST_F,
1407
1408	/*
1409	 * More PortCountersExtended fields
1410	 */
1411	IB_PC_EXT_COUNTER_SELECT2_F,
1412	IB_PC_EXT_ERR_SYM_F,
1413	IB_PC_EXT_LINK_RECOVERS_F,
1414	IB_PC_EXT_LINK_DOWNED_F,
1415	IB_PC_EXT_ERR_RCV_F,
1416	IB_PC_EXT_ERR_PHYSRCV_F,
1417	IB_PC_EXT_ERR_SWITCH_REL_F,
1418	IB_PC_EXT_XMT_DISCARDS_F,
1419	IB_PC_EXT_ERR_XMTCONSTR_F,
1420	IB_PC_EXT_ERR_RCVCONSTR_F,
1421	IB_PC_EXT_ERR_LOCALINTEG_F,
1422	IB_PC_EXT_ERR_EXCESS_OVR_F,
1423	IB_PC_EXT_VL15_DROPPED_F,
1424	IB_PC_EXT_XMT_WAIT_F,
1425	IB_PC_EXT_QP1_DROP_F,
1426	IB_PC_EXT_ERR_LAST_F,
1427
1428	/*
1429	 * Another PortCounters field
1430	 */
1431	IB_PC_QP1_DROP_F,
1432
1433	IB_FIELD_LAST_		/* must be last */
1434};
1435
1436/*
1437 * SA RMPP section
1438 */
1439enum RMPP_TYPE_ENUM {
1440	IB_RMPP_TYPE_NONE,
1441	IB_RMPP_TYPE_DATA,
1442	IB_RMPP_TYPE_ACK,
1443	IB_RMPP_TYPE_STOP,
1444	IB_RMPP_TYPE_ABORT,
1445};
1446
1447enum RMPP_FLAGS_ENUM {
1448	IB_RMPP_FLAG_ACTIVE = 1 << 0,
1449	IB_RMPP_FLAG_FIRST = 1 << 1,
1450	IB_RMPP_FLAG_LAST = 1 << 2,
1451};
1452
1453typedef struct {
1454	int type;
1455	int flags;
1456	int status;
1457	union {
1458		uint32_t u;
1459		uint32_t segnum;
1460	} d1;
1461	union {
1462		uint32_t u;
1463		uint32_t len;
1464		uint32_t newwin;
1465	} d2;
1466} ib_rmpp_hdr_t;
1467
1468enum SA_SIZES_ENUM {
1469	SA_HEADER_SZ = 20,
1470};
1471
1472typedef struct ib_sa_call {
1473	unsigned attrid;
1474	unsigned mod;
1475	uint64_t mask;
1476	unsigned method;
1477
1478	uint64_t trid;		/* used for out mad if nonzero, return real val */
1479	unsigned recsz;		/* return field */
1480	ib_rmpp_hdr_t rmpp;
1481} ib_sa_call_t;
1482
1483typedef struct ib_vendor_call {
1484	unsigned method;
1485	unsigned mgmt_class;
1486	unsigned attrid;
1487	unsigned mod;
1488	uint32_t oui;
1489	unsigned timeout;
1490	ib_rmpp_hdr_t rmpp;
1491} ib_vendor_call_t;
1492
1493typedef struct ib_bm_call {
1494	unsigned method;
1495	unsigned attrid;
1496	unsigned mod;
1497	unsigned timeout;
1498	uint64_t bkey;
1499} ib_bm_call_t;
1500
1501#define IB_MIN_UCAST_LID	1
1502#define IB_MAX_UCAST_LID	(0xc000-1)
1503#define IB_MIN_MCAST_LID	0xc000
1504#define IB_MAX_MCAST_LID	(0xffff-1)
1505
1506#define IB_LID_VALID(lid)	((lid) >= IB_MIN_UCAST_LID && lid <= IB_MAX_UCAST_LID)
1507#define IB_MLID_VALID(lid)	((lid) >= IB_MIN_MCAST_LID && lid <= IB_MAX_MCAST_LID)
1508
1509#define MAD_DEF_RETRIES		3
1510#define MAD_DEF_TIMEOUT_MS	1000
1511
1512enum MAD_DEST {
1513	IB_DEST_LID,
1514	IB_DEST_DRPATH,
1515	IB_DEST_GUID,
1516	IB_DEST_DRSLID,
1517	IB_DEST_GID
1518};
1519
1520enum MAD_NODE_TYPE {
1521	IB_NODE_CA = 1,
1522	IB_NODE_SWITCH,
1523	IB_NODE_ROUTER,
1524	NODE_RNIC,
1525
1526	IB_NODE_MAX = NODE_RNIC
1527};
1528
1529/******************************************************************************/
1530
1531/* portid.c */
1532MAD_EXPORT char *portid2str(ib_portid_t * portid);
1533MAD_EXPORT int portid2portnum(ib_portid_t * portid);
1534MAD_EXPORT int str2drpath(ib_dr_path_t * path, char *routepath, int drslid,
1535			  int drdlid);
1536MAD_EXPORT char *drpath2str(ib_dr_path_t * path, char *dstr, size_t dstr_size);
1537
1538static inline int ib_portid_set(ib_portid_t * portid, int lid, int qp, int qkey)
1539{
1540	portid->lid = lid;
1541	portid->qp = qp;
1542	portid->qkey = qkey;
1543	portid->grh_present = 0;
1544
1545	return 0;
1546}
1547
1548/* fields.c */
1549MAD_EXPORT uint32_t mad_get_field(void *buf, int base_offs,
1550				  enum MAD_FIELDS field);
1551MAD_EXPORT void mad_set_field(void *buf, int base_offs, enum MAD_FIELDS field,
1552			      uint32_t val);
1553/* field must be byte aligned */
1554MAD_EXPORT uint64_t mad_get_field64(void *buf, int base_offs,
1555				    enum MAD_FIELDS field);
1556MAD_EXPORT void mad_set_field64(void *buf, int base_offs, enum MAD_FIELDS field,
1557				uint64_t val);
1558MAD_EXPORT void mad_set_array(void *buf, int base_offs, enum MAD_FIELDS field,
1559			      void *val);
1560MAD_EXPORT void mad_get_array(void *buf, int base_offs, enum MAD_FIELDS field,
1561			      void *val);
1562MAD_EXPORT void mad_decode_field(uint8_t * buf, enum MAD_FIELDS field,
1563				 void *val);
1564MAD_EXPORT void mad_encode_field(uint8_t * buf, enum MAD_FIELDS field,
1565				 void *val);
1566MAD_EXPORT int mad_print_field(enum MAD_FIELDS field, const char *name,
1567			       void *val);
1568MAD_EXPORT char *mad_dump_field(enum MAD_FIELDS field, char *buf, int bufsz,
1569				void *val);
1570MAD_EXPORT char *mad_dump_val(enum MAD_FIELDS field, char *buf, int bufsz,
1571			      void *val);
1572MAD_EXPORT const char *mad_field_name(enum MAD_FIELDS field);
1573
1574/* mad.c */
1575MAD_EXPORT void *mad_encode(void *buf, ib_rpc_t * rpc, ib_dr_path_t * drpath,
1576			    void *data);
1577MAD_EXPORT uint64_t mad_trid(void);
1578MAD_EXPORT int mad_build_pkt(void *umad, ib_rpc_t * rpc, ib_portid_t * dport,
1579			     ib_rmpp_hdr_t * rmpp, void *data);
1580
1581/* New interface */
1582MAD_EXPORT void madrpc_show_errors(int set);
1583MAD_EXPORT int madrpc_set_retries(int retries);
1584MAD_EXPORT int madrpc_set_timeout(int timeout);
1585MAD_EXPORT struct ibmad_port *mad_rpc_open_port(char *dev_name, int dev_port,
1586						int *mgmt_classes,
1587						int num_classes);
1588MAD_EXPORT void mad_rpc_close_port(struct ibmad_port *srcport);
1589
1590/*
1591 * On redirection, the dport argument is updated with the redirection target,
1592 * so subsequent MADs will not go through the redirection process again but
1593 * reach the target directly.
1594 */
1595MAD_EXPORT void *mad_rpc(const struct ibmad_port *srcport, ib_rpc_t * rpc,
1596			 ib_portid_t * dport, void *payload, void *rcvdata);
1597
1598MAD_EXPORT void *mad_rpc_rmpp(const struct ibmad_port *srcport, ib_rpc_t * rpc,
1599			      ib_portid_t * dport, ib_rmpp_hdr_t * rmpp,
1600			      void *data);
1601MAD_EXPORT int mad_rpc_portid(struct ibmad_port *srcport);
1602MAD_EXPORT void mad_rpc_set_retries(struct ibmad_port *port, int retries);
1603MAD_EXPORT void mad_rpc_set_timeout(struct ibmad_port *port, int timeout);
1604MAD_EXPORT int mad_rpc_class_agent(struct ibmad_port *srcport, int cls);
1605
1606MAD_EXPORT int mad_get_timeout(const struct ibmad_port *srcport,
1607			       int override_ms);
1608MAD_EXPORT int mad_get_retries(const struct ibmad_port *srcport);
1609
1610/* register.c */
1611MAD_EXPORT int mad_register_port_client(int port_id, int mgmt,
1612					uint8_t rmpp_version);
1613MAD_EXPORT int mad_register_client(int mgmt, uint8_t rmpp_version) DEPRECATED;
1614MAD_EXPORT int mad_register_server(int mgmt, uint8_t rmpp_version,
1615				   long method_mask[16 / sizeof(long)],
1616				   uint32_t class_oui) DEPRECATED;
1617/* register.c new interface */
1618MAD_EXPORT int mad_register_client_via(int mgmt, uint8_t rmpp_version,
1619				       struct ibmad_port *srcport);
1620MAD_EXPORT int mad_register_server_via(int mgmt, uint8_t rmpp_version,
1621				       long method_mask[16 / sizeof(long)],
1622				       uint32_t class_oui,
1623				       struct ibmad_port *srcport);
1624MAD_EXPORT int mad_class_agent(int mgmt) DEPRECATED;
1625
1626/* serv.c */
1627MAD_EXPORT int mad_send(ib_rpc_t * rpc, ib_portid_t * dport,
1628			ib_rmpp_hdr_t * rmpp, void *data) DEPRECATED;
1629MAD_EXPORT void *mad_receive(void *umad, int timeout) DEPRECATED;
1630MAD_EXPORT int mad_respond(void *umad, ib_portid_t * portid, uint32_t rstatus)
1631    DEPRECATED;
1632
1633/* serv.c new interface */
1634MAD_EXPORT int mad_send_via(ib_rpc_t * rpc, ib_portid_t * dport,
1635			    ib_rmpp_hdr_t * rmpp, void *data,
1636			    struct ibmad_port *srcport);
1637MAD_EXPORT void *mad_receive_via(void *umad, int timeout,
1638				 struct ibmad_port *srcport);
1639MAD_EXPORT int mad_respond_via(void *umad, ib_portid_t * portid,
1640			       uint32_t rstatus, struct ibmad_port *srcport);
1641MAD_EXPORT void *mad_alloc(void);
1642MAD_EXPORT void mad_free(void *umad);
1643
1644/* vendor.c */
1645MAD_EXPORT uint8_t *ib_vendor_call(void *data, ib_portid_t * portid,
1646				   ib_vendor_call_t * call) DEPRECATED;
1647
1648/* vendor.c new interface */
1649MAD_EXPORT uint8_t *ib_vendor_call_via(void *data, ib_portid_t * portid,
1650				       ib_vendor_call_t * call,
1651				       struct ibmad_port *srcport);
1652
1653static inline int mad_is_vendor_range1(int mgmt)
1654{
1655	return mgmt >= 0x9 && mgmt <= 0xf;
1656}
1657
1658static inline int mad_is_vendor_range2(int mgmt)
1659{
1660	return mgmt >= 0x30 && mgmt <= 0x4f;
1661}
1662
1663/* rpc.c */
1664MAD_EXPORT int madrpc_portid(void) DEPRECATED;
1665void *madrpc(ib_rpc_t * rpc, ib_portid_t * dport, void *payload, void *rcvdata)
1666    DEPRECATED;
1667void *madrpc_rmpp(ib_rpc_t * rpc, ib_portid_t * dport, ib_rmpp_hdr_t * rmpp,
1668		  void *data) DEPRECATED;
1669MAD_EXPORT void madrpc_init(char *dev_name, int dev_port, int *mgmt_classes,
1670			    int num_classes) DEPRECATED;
1671void madrpc_save_mad(void *madbuf, int len) DEPRECATED;
1672
1673/* smp.c */
1674MAD_EXPORT uint8_t *smp_query(void *buf, ib_portid_t * id, unsigned attrid,
1675			      unsigned mod, unsigned timeout) DEPRECATED;
1676MAD_EXPORT uint8_t *smp_set(void *buf, ib_portid_t * id, unsigned attrid,
1677			    unsigned mod, unsigned timeout) DEPRECATED;
1678
1679/* smp.c new interface */
1680MAD_EXPORT uint8_t *smp_query_via(void *buf, ib_portid_t * id, unsigned attrid,
1681				  unsigned mod, unsigned timeout,
1682				  const struct ibmad_port *srcport);
1683MAD_EXPORT uint8_t *smp_set_via(void *buf, ib_portid_t * id, unsigned attrid,
1684				unsigned mod, unsigned timeout,
1685				const struct ibmad_port *srcport);
1686MAD_EXPORT uint8_t *smp_query_status_via(void *rcvbuf, ib_portid_t * portid,
1687					 unsigned attrid, unsigned mod,
1688					 unsigned timeout, int *rstatus,
1689					 const struct ibmad_port *srcport);
1690MAD_EXPORT uint8_t *smp_set_status_via(void *data, ib_portid_t * portid,
1691				       unsigned attrid, unsigned mod,
1692				       unsigned timeout, int *rstatus,
1693				       const struct ibmad_port *srcport);
1694MAD_EXPORT void smp_mkey_set(struct ibmad_port *srcport, uint64_t mkey);
1695MAD_EXPORT uint64_t smp_mkey_get(const struct ibmad_port *srcport);
1696
1697/* cc.c */
1698MAD_EXPORT void *cc_query_status_via(void *rcvbuf, ib_portid_t * portid,
1699				     unsigned attrid, unsigned mod, unsigned timeout,
1700				     int *rstatus, const struct ibmad_port * srcport,
1701				     uint64_t cckey);
1702
1703MAD_EXPORT void *cc_config_status_via(void *payload, void *rcvbuf, ib_portid_t * portid,
1704				      unsigned attrid, unsigned mod, unsigned timeout,
1705				      int *rstatus, const struct ibmad_port * srcport,
1706				      uint64_t cckey);
1707
1708/* sa.c */
1709uint8_t *sa_call(void *rcvbuf, ib_portid_t * portid, ib_sa_call_t * sa,
1710		 unsigned timeout) DEPRECATED;
1711MAD_EXPORT int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid,
1712			     ib_portid_t * sm_id, void *buf) DEPRECATED;
1713
1714/* sa.c new interface */
1715MAD_EXPORT uint8_t *sa_rpc_call(const struct ibmad_port *srcport, void *rcvbuf,
1716				ib_portid_t * portid, ib_sa_call_t * sa,
1717				unsigned timeout);
1718MAD_EXPORT int ib_path_query_via(const struct ibmad_port *srcport,
1719				 ibmad_gid_t srcgid, ibmad_gid_t destgid,
1720				 ib_portid_t * sm_id, void *buf);
1721	/* returns lid */
1722MAD_EXPORT int ib_node_query_via(const struct ibmad_port *srcport,
1723				 uint64_t guid, ib_portid_t * sm_id,
1724				 void *buf);
1725
1726/* resolve.c */
1727MAD_EXPORT int ib_resolve_smlid(ib_portid_t * sm_id, int timeout) DEPRECATED;
1728MAD_EXPORT int ib_resolve_portid_str(ib_portid_t * portid, char *addr_str,
1729				     enum MAD_DEST dest, ib_portid_t * sm_id)
1730    DEPRECATED;
1731MAD_EXPORT int ib_resolve_self(ib_portid_t * portid, int *portnum,
1732			       ibmad_gid_t * gid) DEPRECATED;
1733
1734/* resolve.c new interface */
1735MAD_EXPORT int ib_resolve_smlid_via(ib_portid_t * sm_id, int timeout,
1736				    const struct ibmad_port *srcport);
1737MAD_EXPORT int ib_resolve_guid_via(ib_portid_t * portid, uint64_t * guid,
1738				   ib_portid_t * sm_id, int timeout,
1739				   const struct ibmad_port *srcport);
1740MAD_EXPORT int ib_resolve_gid_via(ib_portid_t * portid, ibmad_gid_t gid,
1741				  ib_portid_t * sm_id, int timeout,
1742				  const struct ibmad_port *srcport);
1743MAD_EXPORT int ib_resolve_portid_str_via(ib_portid_t * portid, char *addr_str,
1744					 enum MAD_DEST dest,
1745					 ib_portid_t * sm_id,
1746					 const struct ibmad_port *srcport);
1747MAD_EXPORT int ib_resolve_self_via(ib_portid_t * portid, int *portnum,
1748				   ibmad_gid_t * gid,
1749				   const struct ibmad_port *srcport);
1750
1751/* gs.c new interface */
1752MAD_EXPORT uint8_t *pma_query_via(void *rcvbuf, ib_portid_t * dest, int port,
1753				  unsigned timeout, unsigned id,
1754				  const struct ibmad_port *srcport);
1755MAD_EXPORT uint8_t *performance_reset_via(void *rcvbuf, ib_portid_t * dest,
1756					  int port, unsigned mask,
1757					  unsigned timeout, unsigned id,
1758					  const struct ibmad_port *srcport);
1759
1760/* bm.c */
1761MAD_EXPORT uint8_t *bm_call_via(void *data, ib_portid_t * portid,
1762				ib_bm_call_t * call,
1763				struct ibmad_port *srcport);
1764
1765/* dump.c */
1766MAD_EXPORT ib_mad_dump_fn
1767    mad_dump_int, mad_dump_uint, mad_dump_hex, mad_dump_rhex,
1768    mad_dump_bitfield, mad_dump_array, mad_dump_string,
1769    mad_dump_linkwidth, mad_dump_linkwidthsup, mad_dump_linkwidthen,
1770    mad_dump_linkdowndefstate,
1771    mad_dump_linkspeed, mad_dump_linkspeedsup, mad_dump_linkspeeden,
1772    mad_dump_linkspeedext, mad_dump_linkspeedextsup, mad_dump_linkspeedexten,
1773    mad_dump_portstate, mad_dump_portstates,
1774    mad_dump_physportstate, mad_dump_portcapmask, mad_dump_portcapmask2,
1775    mad_dump_mtu, mad_dump_vlcap, mad_dump_opervls,
1776    mad_dump_node_type, mad_dump_sltovl, mad_dump_vlarbitration,
1777    mad_dump_nodedesc, mad_dump_nodeinfo, mad_dump_portinfo,
1778    mad_dump_switchinfo, mad_dump_perfcounters, mad_dump_perfcounters_ext,
1779    mad_dump_perfcounters_xmt_sl, mad_dump_perfcounters_rcv_sl,
1780    mad_dump_perfcounters_xmt_disc, mad_dump_perfcounters_rcv_err,
1781    mad_dump_portsamples_control, mad_dump_port_ext_speeds_counters,
1782    mad_dump_perfcounters_port_op_rcv_counters, mad_dump_perfcounters_port_flow_ctl_counters,
1783    mad_dump_perfcounters_port_vl_op_packet, mad_dump_perfcounters_port_vl_op_data,
1784    mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors, mad_dump_perfcounters_port_vl_xmit_wait_counters,
1785    mad_dump_perfcounters_sw_port_vl_congestion, mad_dump_perfcounters_rcv_con_ctrl,
1786    mad_dump_perfcounters_sl_rcv_fecn, mad_dump_perfcounters_sl_rcv_becn,
1787    mad_dump_perfcounters_xmit_con_ctrl, mad_dump_perfcounters_vl_xmit_time_cong,
1788    mad_dump_mlnx_ext_port_info, mad_dump_cc_congestioninfo, mad_dump_cc_congestionkeyinfo,
1789    mad_dump_cc_congestionlog, mad_dump_cc_congestionlogswitch,
1790    mad_dump_cc_congestionlogentryswitch, mad_dump_cc_congestionlogca,
1791    mad_dump_cc_congestionlogentryca, mad_dump_cc_switchcongestionsetting,
1792    mad_dump_cc_switchportcongestionsettingelement, mad_dump_cc_cacongestionsetting,
1793    mad_dump_cc_cacongestionentry, mad_dump_cc_congestioncontroltable,
1794    mad_dump_cc_congestioncontroltableentry, mad_dump_cc_timestamp,
1795    mad_dump_classportinfo,  mad_dump_portmirror_route,
1796    mad_dump_portmirror_ports, mad_dump_portsamples_result,
1797    mad_dump_portinfo_ext, mad_dump_port_ext_speeds_counters_rsfec_active;
1798
1799MAD_EXPORT void mad_dump_fields(char *buf, int bufsz, void *val, int valsz,
1800				int start, int end);
1801
1802extern MAD_EXPORT int ibdebug;
1803
1804#if __BYTE_ORDER == __LITTLE_ENDIAN
1805#ifndef ntohll
1806#define ntohll bswap_64
1807#endif
1808#ifndef htonll
1809#define htonll bswap_64
1810#endif
1811#elif __BYTE_ORDER == __BIG_ENDIAN
1812#ifndef ntohll
1813#define ntohll(x) (x)
1814#endif
1815#ifndef htonll
1816#define htonll(x) (x)
1817#endif
1818#endif				/* __BYTE_ORDER == __BIG_ENDIAN */
1819
1820/* Misc. macros: */
1821/** align value \a l to \a size (ceil) */
1822#define ALIGN(l, size) (((l) + ((size) - 1)) / (size) * (size))
1823
1824/** printf style warning MACRO, includes name of function and pid */
1825#define IBWARN(fmt, ...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", \
1826(int)getpid(), __func__, ## __VA_ARGS__)
1827
1828#define IBDEBUG(fmt, ...) fprintf(stdout, "ibdebug: [%d] %s: " fmt "\n", \
1829(int)getpid(), __func__, ## __VA_ARGS__)
1830
1831#define IBVERBOSE(fmt, ...) fprintf(stdout, "[%d] %s: " fmt "\n", \
1832(int)getpid(), __func__, ## __VA_ARGS__)
1833
1834#define IBPANIC(fmt, ...) do { \
1835	fprintf(stderr, "ibpanic: [%d] %s: " fmt ": %m\n", \
1836	(int)getpid(), __func__, ## __VA_ARGS__); \
1837	exit(-1); \
1838} while(0)
1839
1840MAD_EXPORT void xdump(FILE * file, char *msg, void *p, int size);
1841
1842END_C_DECLS
1843#endif				/* _MAD_H_ */
1844