1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky * Copyright (c) 2004-2009 Voltaire Inc. All rights reserved.
3*d6b92ffaSHans Petter Selasky * Copyright (c) 2009 HNR Consulting. All rights reserved.
4*d6b92ffaSHans Petter Selasky * Copyright (c) 2009-2011 Mellanox Technologies LTD. All rights reserved.
5*d6b92ffaSHans Petter Selasky *
6*d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two
7*d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU
8*d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file
9*d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the
10*d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below:
11*d6b92ffaSHans Petter Selasky *
12*d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or
13*d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following
14*d6b92ffaSHans Petter Selasky * conditions are met:
15*d6b92ffaSHans Petter Selasky *
16*d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above
17*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
18*d6b92ffaSHans Petter Selasky * disclaimer.
19*d6b92ffaSHans Petter Selasky *
20*d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above
21*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
22*d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials
23*d6b92ffaSHans Petter Selasky * provided with the distribution.
24*d6b92ffaSHans Petter Selasky *
25*d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26*d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27*d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28*d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29*d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30*d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31*d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32*d6b92ffaSHans Petter Selasky * SOFTWARE.
33*d6b92ffaSHans Petter Selasky *
34*d6b92ffaSHans Petter Selasky */
35*d6b92ffaSHans Petter Selasky
36*d6b92ffaSHans Petter Selasky #if HAVE_CONFIG_H
37*d6b92ffaSHans Petter Selasky # include <config.h>
38*d6b92ffaSHans Petter Selasky #endif /* HAVE_CONFIG_H */
39*d6b92ffaSHans Petter Selasky
40*d6b92ffaSHans Petter Selasky #include <stdio.h>
41*d6b92ffaSHans Petter Selasky #include <stdlib.h>
42*d6b92ffaSHans Petter Selasky #include <string.h>
43*d6b92ffaSHans Petter Selasky
44*d6b92ffaSHans Petter Selasky #include <infiniband/mad.h>
45*d6b92ffaSHans Petter Selasky
46*d6b92ffaSHans Petter Selasky /*
47*d6b92ffaSHans Petter Selasky * BITSOFFS and BE_OFFS are required due the fact that the bit offsets are inconsistently
48*d6b92ffaSHans Petter Selasky * encoded in the IB spec - IB headers are encoded such that the bit offsets
49*d6b92ffaSHans Petter Selasky * are in big endian convention (BE_OFFS), while the SMI/GSI queries data fields bit
50*d6b92ffaSHans Petter Selasky * offsets are specified using real bit offset (?!)
51*d6b92ffaSHans Petter Selasky * The following macros normalize everything to big endian offsets.
52*d6b92ffaSHans Petter Selasky */
53*d6b92ffaSHans Petter Selasky #define BITSOFFS(o, w) (((o) & ~31) | ((32 - ((o) & 31) - (w)))), (w)
54*d6b92ffaSHans Petter Selasky #define BE_OFFS(o, w) (o), (w)
55*d6b92ffaSHans Petter Selasky #define BE_TO_BITSOFFS(o, w) (((o) & ~31) | ((32 - ((o) & 31) - (w))))
56*d6b92ffaSHans Petter Selasky
57*d6b92ffaSHans Petter Selasky static const ib_field_t ib_mad_f[] = {
58*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_NO_FIELD - reserved as invalid */
59*d6b92ffaSHans Petter Selasky
60*d6b92ffaSHans Petter Selasky {0, 64, "GidPrefix", mad_dump_rhex},
61*d6b92ffaSHans Petter Selasky {64, 64, "GidGuid", mad_dump_rhex},
62*d6b92ffaSHans Petter Selasky
63*d6b92ffaSHans Petter Selasky /*
64*d6b92ffaSHans Petter Selasky * MAD: common MAD fields (IB spec 13.4.2)
65*d6b92ffaSHans Petter Selasky * SMP: Subnet Management packets - lid routed (IB spec 14.2.1.1)
66*d6b92ffaSHans Petter Selasky * DSMP: Subnet Management packets - direct route (IB spec 14.2.1.2)
67*d6b92ffaSHans Petter Selasky * SA: Subnet Administration packets (IB spec 15.2.1.1)
68*d6b92ffaSHans Petter Selasky */
69*d6b92ffaSHans Petter Selasky
70*d6b92ffaSHans Petter Selasky /* first MAD word (0-3 bytes) */
71*d6b92ffaSHans Petter Selasky {BE_OFFS(0, 7), "MadMethod", mad_dump_hex}, /* TODO: add dumper */
72*d6b92ffaSHans Petter Selasky {BE_OFFS(7, 1), "MadIsResponse", mad_dump_uint}, /* TODO: add dumper */
73*d6b92ffaSHans Petter Selasky {BE_OFFS(8, 8), "MadClassVersion", mad_dump_uint},
74*d6b92ffaSHans Petter Selasky {BE_OFFS(16, 8), "MadMgmtClass", mad_dump_uint}, /* TODO: add dumper */
75*d6b92ffaSHans Petter Selasky {BE_OFFS(24, 8), "MadBaseVersion", mad_dump_uint},
76*d6b92ffaSHans Petter Selasky
77*d6b92ffaSHans Petter Selasky /* second MAD word (4-7 bytes) */
78*d6b92ffaSHans Petter Selasky {BE_OFFS(48, 16), "MadStatus", mad_dump_hex}, /* TODO: add dumper */
79*d6b92ffaSHans Petter Selasky
80*d6b92ffaSHans Petter Selasky /* DR SMP only */
81*d6b92ffaSHans Petter Selasky {BE_OFFS(32, 8), "DrSmpHopCnt", mad_dump_uint},
82*d6b92ffaSHans Petter Selasky {BE_OFFS(40, 8), "DrSmpHopPtr", mad_dump_uint},
83*d6b92ffaSHans Petter Selasky {BE_OFFS(48, 15), "DrSmpStatus", mad_dump_hex}, /* TODO: add dumper */
84*d6b92ffaSHans Petter Selasky {BE_OFFS(63, 1), "DrSmpDirection", mad_dump_uint}, /* TODO: add dumper */
85*d6b92ffaSHans Petter Selasky
86*d6b92ffaSHans Petter Selasky /* words 3,4,5,6 (8-23 bytes) */
87*d6b92ffaSHans Petter Selasky {64, 64, "MadTRID", mad_dump_hex},
88*d6b92ffaSHans Petter Selasky {BE_OFFS(144, 16), "MadAttr", mad_dump_hex}, /* TODO: add dumper */
89*d6b92ffaSHans Petter Selasky {160, 32, "MadModifier", mad_dump_hex}, /* TODO: add dumper */
90*d6b92ffaSHans Petter Selasky
91*d6b92ffaSHans Petter Selasky /* word 7,8 (24-31 bytes) */
92*d6b92ffaSHans Petter Selasky {192, 64, "MadMkey", mad_dump_hex},
93*d6b92ffaSHans Petter Selasky
94*d6b92ffaSHans Petter Selasky /* word 9 (32-37 bytes) */
95*d6b92ffaSHans Petter Selasky {BE_OFFS(256, 16), "DrSmpDLID", mad_dump_uint},
96*d6b92ffaSHans Petter Selasky {BE_OFFS(272, 16), "DrSmpSLID", mad_dump_uint},
97*d6b92ffaSHans Petter Selasky
98*d6b92ffaSHans Petter Selasky /* word 10,11 (36-43 bytes) */
99*d6b92ffaSHans Petter Selasky {288, 64, "SaSMkey", mad_dump_hex},
100*d6b92ffaSHans Petter Selasky
101*d6b92ffaSHans Petter Selasky /* word 12 (44-47 bytes) */
102*d6b92ffaSHans Petter Selasky {BE_OFFS(46 * 8, 16), "SaAttrOffs", mad_dump_uint},
103*d6b92ffaSHans Petter Selasky
104*d6b92ffaSHans Petter Selasky /* word 13,14 (48-55 bytes) */
105*d6b92ffaSHans Petter Selasky {48 * 8, 64, "SaCompMask", mad_dump_hex},
106*d6b92ffaSHans Petter Selasky
107*d6b92ffaSHans Petter Selasky /* word 13,14 (56-255 bytes) */
108*d6b92ffaSHans Petter Selasky {56 * 8, (256 - 56) * 8, "SaData", mad_dump_hex},
109*d6b92ffaSHans Petter Selasky
110*d6b92ffaSHans Petter Selasky /* bytes 64 - 127 */
111*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_SM_DATA_F - reserved as invalid */
112*d6b92ffaSHans Petter Selasky
113*d6b92ffaSHans Petter Selasky /* bytes 64 - 256 */
114*d6b92ffaSHans Petter Selasky {64 * 8, (256 - 64) * 8, "GsData", mad_dump_hex},
115*d6b92ffaSHans Petter Selasky
116*d6b92ffaSHans Petter Selasky /* bytes 128 - 191 */
117*d6b92ffaSHans Petter Selasky {1024, 512, "DrSmpPath", mad_dump_hex},
118*d6b92ffaSHans Petter Selasky
119*d6b92ffaSHans Petter Selasky /* bytes 192 - 255 */
120*d6b92ffaSHans Petter Selasky {1536, 512, "DrSmpRetPath", mad_dump_hex},
121*d6b92ffaSHans Petter Selasky
122*d6b92ffaSHans Petter Selasky /*
123*d6b92ffaSHans Petter Selasky * PortInfo fields
124*d6b92ffaSHans Petter Selasky */
125*d6b92ffaSHans Petter Selasky {0, 64, "Mkey", mad_dump_hex},
126*d6b92ffaSHans Petter Selasky {64, 64, "GidPrefix", mad_dump_hex},
127*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "Lid", mad_dump_uint},
128*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "SMLid", mad_dump_uint},
129*d6b92ffaSHans Petter Selasky {160, 32, "CapMask", mad_dump_portcapmask},
130*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "DiagCode", mad_dump_hex},
131*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 16), "MkeyLeasePeriod", mad_dump_uint},
132*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 8), "LocalPort", mad_dump_uint},
133*d6b92ffaSHans Petter Selasky {BITSOFFS(232, 8), "LinkWidthEnabled", mad_dump_linkwidthen},
134*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 8), "LinkWidthSupported", mad_dump_linkwidthsup},
135*d6b92ffaSHans Petter Selasky {BITSOFFS(248, 8), "LinkWidthActive", mad_dump_linkwidth},
136*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 4), "LinkSpeedSupported", mad_dump_linkspeedsup},
137*d6b92ffaSHans Petter Selasky {BITSOFFS(260, 4), "LinkState", mad_dump_portstate},
138*d6b92ffaSHans Petter Selasky {BITSOFFS(264, 4), "PhysLinkState", mad_dump_physportstate},
139*d6b92ffaSHans Petter Selasky {BITSOFFS(268, 4), "LinkDownDefState", mad_dump_linkdowndefstate},
140*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 2), "ProtectBits", mad_dump_uint},
141*d6b92ffaSHans Petter Selasky {BITSOFFS(277, 3), "LMC", mad_dump_uint},
142*d6b92ffaSHans Petter Selasky {BITSOFFS(280, 4), "LinkSpeedActive", mad_dump_linkspeed},
143*d6b92ffaSHans Petter Selasky {BITSOFFS(284, 4), "LinkSpeedEnabled", mad_dump_linkspeeden},
144*d6b92ffaSHans Petter Selasky {BITSOFFS(288, 4), "NeighborMTU", mad_dump_mtu},
145*d6b92ffaSHans Petter Selasky {BITSOFFS(292, 4), "SMSL", mad_dump_uint},
146*d6b92ffaSHans Petter Selasky {BITSOFFS(296, 4), "VLCap", mad_dump_vlcap},
147*d6b92ffaSHans Petter Selasky {BITSOFFS(300, 4), "InitType", mad_dump_hex},
148*d6b92ffaSHans Petter Selasky {BITSOFFS(304, 8), "VLHighLimit", mad_dump_uint},
149*d6b92ffaSHans Petter Selasky {BITSOFFS(312, 8), "VLArbHighCap", mad_dump_uint},
150*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 8), "VLArbLowCap", mad_dump_uint},
151*d6b92ffaSHans Petter Selasky {BITSOFFS(328, 4), "InitReply", mad_dump_hex},
152*d6b92ffaSHans Petter Selasky {BITSOFFS(332, 4), "MtuCap", mad_dump_mtu},
153*d6b92ffaSHans Petter Selasky {BITSOFFS(336, 3), "VLStallCount", mad_dump_uint},
154*d6b92ffaSHans Petter Selasky {BITSOFFS(339, 5), "HoqLife", mad_dump_uint},
155*d6b92ffaSHans Petter Selasky {BITSOFFS(344, 4), "OperVLs", mad_dump_opervls},
156*d6b92ffaSHans Petter Selasky {BITSOFFS(348, 1), "PartEnforceInb", mad_dump_uint},
157*d6b92ffaSHans Petter Selasky {BITSOFFS(349, 1), "PartEnforceOutb", mad_dump_uint},
158*d6b92ffaSHans Petter Selasky {BITSOFFS(350, 1), "FilterRawInb", mad_dump_uint},
159*d6b92ffaSHans Petter Selasky {BITSOFFS(351, 1), "FilterRawOutb", mad_dump_uint},
160*d6b92ffaSHans Petter Selasky {BITSOFFS(352, 16), "MkeyViolations", mad_dump_uint},
161*d6b92ffaSHans Petter Selasky {BITSOFFS(368, 16), "PkeyViolations", mad_dump_uint},
162*d6b92ffaSHans Petter Selasky {BITSOFFS(384, 16), "QkeyViolations", mad_dump_uint},
163*d6b92ffaSHans Petter Selasky {BITSOFFS(400, 8), "GuidCap", mad_dump_uint},
164*d6b92ffaSHans Petter Selasky {BITSOFFS(408, 1), "ClientReregister", mad_dump_uint},
165*d6b92ffaSHans Petter Selasky {BITSOFFS(409, 1), "McastPkeyTrapSuppressionEnabled", mad_dump_uint},
166*d6b92ffaSHans Petter Selasky {BITSOFFS(411, 5), "SubnetTimeout", mad_dump_uint},
167*d6b92ffaSHans Petter Selasky {BITSOFFS(419, 5), "RespTimeVal", mad_dump_uint},
168*d6b92ffaSHans Petter Selasky {BITSOFFS(424, 4), "LocalPhysErr", mad_dump_uint},
169*d6b92ffaSHans Petter Selasky {BITSOFFS(428, 4), "OverrunErr", mad_dump_uint},
170*d6b92ffaSHans Petter Selasky {BITSOFFS(432, 16), "MaxCreditHint", mad_dump_uint},
171*d6b92ffaSHans Petter Selasky {BITSOFFS(456, 24), "RoundTrip", mad_dump_uint},
172*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PORT_LAST_F */
173*d6b92ffaSHans Petter Selasky
174*d6b92ffaSHans Petter Selasky /*
175*d6b92ffaSHans Petter Selasky * NodeInfo fields
176*d6b92ffaSHans Petter Selasky */
177*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 8), "BaseVers", mad_dump_uint},
178*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "ClassVers", mad_dump_uint},
179*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 8), "NodeType", mad_dump_node_type},
180*d6b92ffaSHans Petter Selasky {BITSOFFS(24, 8), "NumPorts", mad_dump_uint},
181*d6b92ffaSHans Petter Selasky {32, 64, "SystemGuid", mad_dump_hex},
182*d6b92ffaSHans Petter Selasky {96, 64, "Guid", mad_dump_hex},
183*d6b92ffaSHans Petter Selasky {160, 64, "PortGuid", mad_dump_hex},
184*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "PartCap", mad_dump_uint},
185*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "DevId", mad_dump_hex},
186*d6b92ffaSHans Petter Selasky {256, 32, "Revision", mad_dump_hex},
187*d6b92ffaSHans Petter Selasky {BITSOFFS(288, 8), "LocalPort", mad_dump_uint},
188*d6b92ffaSHans Petter Selasky {BITSOFFS(296, 24), "VendorId", mad_dump_hex},
189*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_NODE_LAST_F */
190*d6b92ffaSHans Petter Selasky
191*d6b92ffaSHans Petter Selasky /*
192*d6b92ffaSHans Petter Selasky * SwitchInfo fields
193*d6b92ffaSHans Petter Selasky */
194*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "LinearFdbCap", mad_dump_uint},
195*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "RandomFdbCap", mad_dump_uint},
196*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "McastFdbCap", mad_dump_uint},
197*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "LinearFdbTop", mad_dump_uint},
198*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 8), "DefPort", mad_dump_uint},
199*d6b92ffaSHans Petter Selasky {BITSOFFS(72, 8), "DefMcastPrimPort", mad_dump_uint},
200*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 8), "DefMcastNotPrimPort", mad_dump_uint},
201*d6b92ffaSHans Petter Selasky {BITSOFFS(88, 5), "LifeTime", mad_dump_uint},
202*d6b92ffaSHans Petter Selasky {BITSOFFS(93, 1), "StateChange", mad_dump_uint},
203*d6b92ffaSHans Petter Selasky {BITSOFFS(94, 2), "OptSLtoVLMapping", mad_dump_uint},
204*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "LidsPerPort", mad_dump_uint},
205*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "PartEnforceCap", mad_dump_uint},
206*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 1), "InboundPartEnf", mad_dump_uint},
207*d6b92ffaSHans Petter Selasky {BITSOFFS(129, 1), "OutboundPartEnf", mad_dump_uint},
208*d6b92ffaSHans Petter Selasky {BITSOFFS(130, 1), "FilterRawInbound", mad_dump_uint},
209*d6b92ffaSHans Petter Selasky {BITSOFFS(131, 1), "FilterRawOutbound", mad_dump_uint},
210*d6b92ffaSHans Petter Selasky {BITSOFFS(132, 1), "EnhancedPort0", mad_dump_uint},
211*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "MulticastFDBTop", mad_dump_hex},
212*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_SW_LAST_F */
213*d6b92ffaSHans Petter Selasky
214*d6b92ffaSHans Petter Selasky /*
215*d6b92ffaSHans Petter Selasky * SwitchLinearForwardingTable fields
216*d6b92ffaSHans Petter Selasky */
217*d6b92ffaSHans Petter Selasky {0, 512, "LinearForwTbl", mad_dump_array},
218*d6b92ffaSHans Petter Selasky
219*d6b92ffaSHans Petter Selasky /*
220*d6b92ffaSHans Petter Selasky * SwitchMulticastForwardingTable fields
221*d6b92ffaSHans Petter Selasky */
222*d6b92ffaSHans Petter Selasky {0, 512, "MulticastForwTbl", mad_dump_array},
223*d6b92ffaSHans Petter Selasky
224*d6b92ffaSHans Petter Selasky /*
225*d6b92ffaSHans Petter Selasky * NodeDescription fields
226*d6b92ffaSHans Petter Selasky */
227*d6b92ffaSHans Petter Selasky {0, 64 * 8, "NodeDesc", mad_dump_string},
228*d6b92ffaSHans Petter Selasky
229*d6b92ffaSHans Petter Selasky /*
230*d6b92ffaSHans Petter Selasky * Notice/Trap fields
231*d6b92ffaSHans Petter Selasky */
232*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 1), "NoticeIsGeneric", mad_dump_uint},
233*d6b92ffaSHans Petter Selasky {BITSOFFS(1, 7), "NoticeType", mad_dump_uint},
234*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 24), "NoticeProducerType", mad_dump_node_type},
235*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "NoticeTrapNumber", mad_dump_uint},
236*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "NoticeIssuerLID", mad_dump_uint},
237*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 1), "NoticeToggle", mad_dump_uint},
238*d6b92ffaSHans Petter Selasky {BITSOFFS(65, 15), "NoticeCount", mad_dump_uint},
239*d6b92ffaSHans Petter Selasky {80, 432, "NoticeDataDetails", mad_dump_array},
240*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "NoticeDataLID", mad_dump_uint},
241*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "NoticeDataTrap144LID", mad_dump_uint},
242*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 32), "NoticeDataTrap144CapMask", mad_dump_uint},
243*d6b92ffaSHans Petter Selasky
244*d6b92ffaSHans Petter Selasky /*
245*d6b92ffaSHans Petter Selasky * Port counters
246*d6b92ffaSHans Petter Selasky */
247*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
248*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "CounterSelect", mad_dump_hex},
249*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "SymbolErrorCounter", mad_dump_uint},
250*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 8), "LinkErrorRecoveryCounter", mad_dump_uint},
251*d6b92ffaSHans Petter Selasky {BITSOFFS(56, 8), "LinkDownedCounter", mad_dump_uint},
252*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "PortRcvErrors", mad_dump_uint},
253*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "PortRcvRemotePhysicalErrors", mad_dump_uint},
254*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "PortRcvSwitchRelayErrors", mad_dump_uint},
255*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "PortXmitDiscards", mad_dump_uint},
256*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 8), "PortXmitConstraintErrors", mad_dump_uint},
257*d6b92ffaSHans Petter Selasky {BITSOFFS(136, 8), "PortRcvConstraintErrors", mad_dump_uint},
258*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 8), "CounterSelect2", mad_dump_hex},
259*d6b92ffaSHans Petter Selasky {BITSOFFS(152, 4), "LocalLinkIntegrityErrors", mad_dump_uint},
260*d6b92ffaSHans Petter Selasky {BITSOFFS(156, 4), "ExcessiveBufferOverrunErrors", mad_dump_uint},
261*d6b92ffaSHans Petter Selasky {BITSOFFS(176, 16), "VL15Dropped", mad_dump_uint},
262*d6b92ffaSHans Petter Selasky {192, 32, "PortXmitData", mad_dump_uint},
263*d6b92ffaSHans Petter Selasky {224, 32, "PortRcvData", mad_dump_uint},
264*d6b92ffaSHans Petter Selasky {256, 32, "PortXmitPkts", mad_dump_uint},
265*d6b92ffaSHans Petter Selasky {288, 32, "PortRcvPkts", mad_dump_uint},
266*d6b92ffaSHans Petter Selasky {320, 32, "PortXmitWait", mad_dump_uint},
267*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_LAST_F */
268*d6b92ffaSHans Petter Selasky
269*d6b92ffaSHans Petter Selasky /*
270*d6b92ffaSHans Petter Selasky * SMInfo
271*d6b92ffaSHans Petter Selasky */
272*d6b92ffaSHans Petter Selasky {0, 64, "SmInfoGuid", mad_dump_hex},
273*d6b92ffaSHans Petter Selasky {64, 64, "SmInfoKey", mad_dump_hex},
274*d6b92ffaSHans Petter Selasky {128, 32, "SmActivity", mad_dump_uint},
275*d6b92ffaSHans Petter Selasky {BITSOFFS(160, 4), "SmPriority", mad_dump_uint},
276*d6b92ffaSHans Petter Selasky {BITSOFFS(164, 4), "SmState", mad_dump_uint},
277*d6b92ffaSHans Petter Selasky
278*d6b92ffaSHans Petter Selasky /*
279*d6b92ffaSHans Petter Selasky * SA RMPP
280*d6b92ffaSHans Petter Selasky */
281*d6b92ffaSHans Petter Selasky {BE_OFFS(24 * 8 + 24, 8), "RmppVers", mad_dump_uint},
282*d6b92ffaSHans Petter Selasky {BE_OFFS(24 * 8 + 16, 8), "RmppType", mad_dump_uint},
283*d6b92ffaSHans Petter Selasky {BE_OFFS(24 * 8 + 11, 5), "RmppResp", mad_dump_uint},
284*d6b92ffaSHans Petter Selasky {BE_OFFS(24 * 8 + 8, 3), "RmppFlags", mad_dump_hex},
285*d6b92ffaSHans Petter Selasky {BE_OFFS(24 * 8 + 0, 8), "RmppStatus", mad_dump_hex},
286*d6b92ffaSHans Petter Selasky
287*d6b92ffaSHans Petter Selasky /* data1 */
288*d6b92ffaSHans Petter Selasky {28 * 8, 32, "RmppData1", mad_dump_hex},
289*d6b92ffaSHans Petter Selasky {28 * 8, 32, "RmppSegNum", mad_dump_uint},
290*d6b92ffaSHans Petter Selasky /* data2 */
291*d6b92ffaSHans Petter Selasky {32 * 8, 32, "RmppData2", mad_dump_hex},
292*d6b92ffaSHans Petter Selasky {32 * 8, 32, "RmppPayload", mad_dump_uint},
293*d6b92ffaSHans Petter Selasky {32 * 8, 32, "RmppNewWin", mad_dump_uint},
294*d6b92ffaSHans Petter Selasky
295*d6b92ffaSHans Petter Selasky /*
296*d6b92ffaSHans Petter Selasky * SA Get Multi Path
297*d6b92ffaSHans Petter Selasky */
298*d6b92ffaSHans Petter Selasky {BITSOFFS(41, 7), "MultiPathNumPath", mad_dump_uint},
299*d6b92ffaSHans Petter Selasky {BITSOFFS(120, 8), "MultiPathNumSrc", mad_dump_uint},
300*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 8), "MultiPathNumDest", mad_dump_uint},
301*d6b92ffaSHans Petter Selasky {192, 128, "MultiPathGid", mad_dump_array},
302*d6b92ffaSHans Petter Selasky
303*d6b92ffaSHans Petter Selasky /*
304*d6b92ffaSHans Petter Selasky * SA Path rec
305*d6b92ffaSHans Petter Selasky */
306*d6b92ffaSHans Petter Selasky {64, 128, "PathRecDGid", mad_dump_array},
307*d6b92ffaSHans Petter Selasky {192, 128, "PathRecSGid", mad_dump_array},
308*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 16), "PathRecDLid", mad_dump_uint},
309*d6b92ffaSHans Petter Selasky {BITSOFFS(336, 16), "PathRecSLid", mad_dump_uint},
310*d6b92ffaSHans Petter Selasky {BITSOFFS(393, 7), "PathRecNumPath", mad_dump_uint},
311*d6b92ffaSHans Petter Selasky {BITSOFFS(428, 4), "PathRecSL", mad_dump_uint},
312*d6b92ffaSHans Petter Selasky
313*d6b92ffaSHans Petter Selasky /*
314*d6b92ffaSHans Petter Selasky * MC Member rec
315*d6b92ffaSHans Petter Selasky */
316*d6b92ffaSHans Petter Selasky {0, 128, "McastMemMGid", mad_dump_array},
317*d6b92ffaSHans Petter Selasky {128, 128, "McastMemPortGid", mad_dump_array},
318*d6b92ffaSHans Petter Selasky {256, 32, "McastMemQkey", mad_dump_hex},
319*d6b92ffaSHans Petter Selasky {BITSOFFS(288, 16), "McastMemMLid", mad_dump_hex},
320*d6b92ffaSHans Petter Selasky {BITSOFFS(352, 4), "McastMemSL", mad_dump_uint},
321*d6b92ffaSHans Petter Selasky {BITSOFFS(306, 6), "McastMemMTU", mad_dump_uint},
322*d6b92ffaSHans Petter Selasky {BITSOFFS(338, 6), "McastMemRate", mad_dump_uint},
323*d6b92ffaSHans Petter Selasky {BITSOFFS(312, 8), "McastMemTClass", mad_dump_uint},
324*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 16), "McastMemPkey", mad_dump_uint},
325*d6b92ffaSHans Petter Selasky {BITSOFFS(356, 20), "McastMemFlowLbl", mad_dump_uint},
326*d6b92ffaSHans Petter Selasky {BITSOFFS(388, 4), "McastMemJoinState", mad_dump_uint},
327*d6b92ffaSHans Petter Selasky {BITSOFFS(392, 1), "McastMemProxyJoin", mad_dump_uint},
328*d6b92ffaSHans Petter Selasky
329*d6b92ffaSHans Petter Selasky /*
330*d6b92ffaSHans Petter Selasky * Service record
331*d6b92ffaSHans Petter Selasky */
332*d6b92ffaSHans Petter Selasky {0, 64, "ServRecID", mad_dump_hex},
333*d6b92ffaSHans Petter Selasky {64, 128, "ServRecGid", mad_dump_array},
334*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "ServRecPkey", mad_dump_hex},
335*d6b92ffaSHans Petter Selasky {224, 32, "ServRecLease", mad_dump_hex},
336*d6b92ffaSHans Petter Selasky {256, 128, "ServRecKey", mad_dump_hex},
337*d6b92ffaSHans Petter Selasky {384, 512, "ServRecName", mad_dump_string},
338*d6b92ffaSHans Petter Selasky {896, 512, "ServRecData", mad_dump_array}, /* ATS for example */
339*d6b92ffaSHans Petter Selasky
340*d6b92ffaSHans Petter Selasky /*
341*d6b92ffaSHans Petter Selasky * ATS SM record - within SA_SR_DATA
342*d6b92ffaSHans Petter Selasky */
343*d6b92ffaSHans Petter Selasky {12 * 8, 32, "ATSNodeAddr", mad_dump_hex},
344*d6b92ffaSHans Petter Selasky {BITSOFFS(16 * 8, 16), "ATSMagicKey", mad_dump_hex},
345*d6b92ffaSHans Petter Selasky {BITSOFFS(18 * 8, 16), "ATSNodeType", mad_dump_hex},
346*d6b92ffaSHans Petter Selasky {32 * 8, 32 * 8, "ATSNodeName", mad_dump_string},
347*d6b92ffaSHans Petter Selasky
348*d6b92ffaSHans Petter Selasky /*
349*d6b92ffaSHans Petter Selasky * SLTOVL MAPPING TABLE
350*d6b92ffaSHans Petter Selasky */
351*d6b92ffaSHans Petter Selasky {0, 64, "SLToVLMap", mad_dump_hex},
352*d6b92ffaSHans Petter Selasky
353*d6b92ffaSHans Petter Selasky /*
354*d6b92ffaSHans Petter Selasky * VL ARBITRATION TABLE
355*d6b92ffaSHans Petter Selasky */
356*d6b92ffaSHans Petter Selasky {0, 512, "VLArbTbl", mad_dump_array},
357*d6b92ffaSHans Petter Selasky
358*d6b92ffaSHans Petter Selasky /*
359*d6b92ffaSHans Petter Selasky * IB vendor classes range 2
360*d6b92ffaSHans Petter Selasky */
361*d6b92ffaSHans Petter Selasky {BE_OFFS(36 * 8, 24), "OUI", mad_dump_array},
362*d6b92ffaSHans Petter Selasky {40 * 8, (256 - 40) * 8, "Vendor2Data", mad_dump_array},
363*d6b92ffaSHans Petter Selasky
364*d6b92ffaSHans Petter Selasky /*
365*d6b92ffaSHans Petter Selasky * Extended port counters
366*d6b92ffaSHans Petter Selasky */
367*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
368*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "CounterSelect", mad_dump_hex},
369*d6b92ffaSHans Petter Selasky {64, 64, "PortXmitData", mad_dump_uint},
370*d6b92ffaSHans Petter Selasky {128, 64, "PortRcvData", mad_dump_uint},
371*d6b92ffaSHans Petter Selasky {192, 64, "PortXmitPkts", mad_dump_uint},
372*d6b92ffaSHans Petter Selasky {256, 64, "PortRcvPkts", mad_dump_uint},
373*d6b92ffaSHans Petter Selasky {320, 64, "PortUnicastXmitPkts", mad_dump_uint},
374*d6b92ffaSHans Petter Selasky {384, 64, "PortUnicastRcvPkts", mad_dump_uint},
375*d6b92ffaSHans Petter Selasky {448, 64, "PortMulticastXmitPkts", mad_dump_uint},
376*d6b92ffaSHans Petter Selasky {512, 64, "PortMulticastRcvPkts", mad_dump_uint},
377*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_EXT_LAST_F */
378*d6b92ffaSHans Petter Selasky
379*d6b92ffaSHans Petter Selasky /*
380*d6b92ffaSHans Petter Selasky * GUIDInfo fields
381*d6b92ffaSHans Petter Selasky */
382*d6b92ffaSHans Petter Selasky {0, 64, "GUID0", mad_dump_hex},
383*d6b92ffaSHans Petter Selasky
384*d6b92ffaSHans Petter Selasky /*
385*d6b92ffaSHans Petter Selasky * ClassPortInfo fields
386*d6b92ffaSHans Petter Selasky */
387*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 8), "BaseVersion", mad_dump_uint},
388*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "ClassVersion", mad_dump_uint},
389*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "CapabilityMask", mad_dump_hex},
390*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 27), "CapabilityMask2", mad_dump_hex},
391*d6b92ffaSHans Petter Selasky {BITSOFFS(59, 5), "RespTimeVal", mad_dump_uint},
392*d6b92ffaSHans Petter Selasky {64, 128, "RedirectGID", mad_dump_array},
393*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 8), "RedirectTC", mad_dump_hex},
394*d6b92ffaSHans Petter Selasky {BITSOFFS(200, 4), "RedirectSL", mad_dump_uint},
395*d6b92ffaSHans Petter Selasky {BITSOFFS(204, 20), "RedirectFL", mad_dump_hex},
396*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "RedirectLID", mad_dump_uint},
397*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "RedirectPKey", mad_dump_hex},
398*d6b92ffaSHans Petter Selasky {BITSOFFS(264, 24), "RedirectQP", mad_dump_hex},
399*d6b92ffaSHans Petter Selasky {288, 32, "RedirectQKey", mad_dump_hex},
400*d6b92ffaSHans Petter Selasky {320, 128, "TrapGID", mad_dump_array},
401*d6b92ffaSHans Petter Selasky {BITSOFFS(448, 8), "TrapTC", mad_dump_hex},
402*d6b92ffaSHans Petter Selasky {BITSOFFS(456, 4), "TrapSL", mad_dump_uint},
403*d6b92ffaSHans Petter Selasky {BITSOFFS(460, 20), "TrapFL", mad_dump_hex},
404*d6b92ffaSHans Petter Selasky {BITSOFFS(480, 16), "TrapLID", mad_dump_uint},
405*d6b92ffaSHans Petter Selasky {BITSOFFS(496, 16), "TrapPKey", mad_dump_hex},
406*d6b92ffaSHans Petter Selasky {BITSOFFS(512, 8), "TrapHL", mad_dump_uint},
407*d6b92ffaSHans Petter Selasky {BITSOFFS(520, 24), "TrapQP", mad_dump_hex},
408*d6b92ffaSHans Petter Selasky {544, 32, "TrapQKey", mad_dump_hex},
409*d6b92ffaSHans Petter Selasky
410*d6b92ffaSHans Petter Selasky /*
411*d6b92ffaSHans Petter Selasky * PortXmitDataSL fields
412*d6b92ffaSHans Petter Selasky */
413*d6b92ffaSHans Petter Selasky {32, 32, "XmtDataSL0", mad_dump_uint},
414*d6b92ffaSHans Petter Selasky {64, 32, "XmtDataSL1", mad_dump_uint},
415*d6b92ffaSHans Petter Selasky {96, 32, "XmtDataSL2", mad_dump_uint},
416*d6b92ffaSHans Petter Selasky {128, 32, "XmtDataSL3", mad_dump_uint},
417*d6b92ffaSHans Petter Selasky {160, 32, "XmtDataSL4", mad_dump_uint},
418*d6b92ffaSHans Petter Selasky {192, 32, "XmtDataSL5", mad_dump_uint},
419*d6b92ffaSHans Petter Selasky {224, 32, "XmtDataSL6", mad_dump_uint},
420*d6b92ffaSHans Petter Selasky {256, 32, "XmtDataSL7", mad_dump_uint},
421*d6b92ffaSHans Petter Selasky {288, 32, "XmtDataSL8", mad_dump_uint},
422*d6b92ffaSHans Petter Selasky {320, 32, "XmtDataSL9", mad_dump_uint},
423*d6b92ffaSHans Petter Selasky {352, 32, "XmtDataSL10", mad_dump_uint},
424*d6b92ffaSHans Petter Selasky {384, 32, "XmtDataSL11", mad_dump_uint},
425*d6b92ffaSHans Petter Selasky {416, 32, "XmtDataSL12", mad_dump_uint},
426*d6b92ffaSHans Petter Selasky {448, 32, "XmtDataSL13", mad_dump_uint},
427*d6b92ffaSHans Petter Selasky {480, 32, "XmtDataSL14", mad_dump_uint},
428*d6b92ffaSHans Petter Selasky {512, 32, "XmtDataSL15", mad_dump_uint},
429*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_XMT_DATA_SL_LAST_F */
430*d6b92ffaSHans Petter Selasky
431*d6b92ffaSHans Petter Selasky /*
432*d6b92ffaSHans Petter Selasky * PortRcvDataSL fields
433*d6b92ffaSHans Petter Selasky */
434*d6b92ffaSHans Petter Selasky {32, 32, "RcvDataSL0", mad_dump_uint},
435*d6b92ffaSHans Petter Selasky {64, 32, "RcvDataSL1", mad_dump_uint},
436*d6b92ffaSHans Petter Selasky {96, 32, "RcvDataSL2", mad_dump_uint},
437*d6b92ffaSHans Petter Selasky {128, 32, "RcvDataSL3", mad_dump_uint},
438*d6b92ffaSHans Petter Selasky {160, 32, "RcvDataSL4", mad_dump_uint},
439*d6b92ffaSHans Petter Selasky {192, 32, "RcvDataSL5", mad_dump_uint},
440*d6b92ffaSHans Petter Selasky {224, 32, "RcvDataSL6", mad_dump_uint},
441*d6b92ffaSHans Petter Selasky {256, 32, "RcvDataSL7", mad_dump_uint},
442*d6b92ffaSHans Petter Selasky {288, 32, "RcvDataSL8", mad_dump_uint},
443*d6b92ffaSHans Petter Selasky {320, 32, "RcvDataSL9", mad_dump_uint},
444*d6b92ffaSHans Petter Selasky {352, 32, "RcvDataSL10", mad_dump_uint},
445*d6b92ffaSHans Petter Selasky {384, 32, "RcvDataSL11", mad_dump_uint},
446*d6b92ffaSHans Petter Selasky {416, 32, "RcvDataSL12", mad_dump_uint},
447*d6b92ffaSHans Petter Selasky {448, 32, "RcvDataSL13", mad_dump_uint},
448*d6b92ffaSHans Petter Selasky {480, 32, "RcvDataSL14", mad_dump_uint},
449*d6b92ffaSHans Petter Selasky {512, 32, "RcvDataSL15", mad_dump_uint},
450*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_RCV_DATA_SL_LAST_F */
451*d6b92ffaSHans Petter Selasky
452*d6b92ffaSHans Petter Selasky /*
453*d6b92ffaSHans Petter Selasky * PortXmitDiscardDetails fields
454*d6b92ffaSHans Petter Selasky */
455*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "PortInactiveDiscards", mad_dump_uint},
456*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "PortNeighborMTUDiscards", mad_dump_uint},
457*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "PortSwLifetimeLimitDiscards", mad_dump_uint},
458*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "PortSwHOQLifetimeLimitDiscards", mad_dump_uint},
459*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_XMT_DISC_LAST_F */
460*d6b92ffaSHans Petter Selasky
461*d6b92ffaSHans Petter Selasky /*
462*d6b92ffaSHans Petter Selasky * PortRcvErrorDetails fields
463*d6b92ffaSHans Petter Selasky */
464*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "PortLocalPhysicalErrors", mad_dump_uint},
465*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "PortMalformedPktErrors", mad_dump_uint},
466*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "PortBufferOverrunErrors", mad_dump_uint},
467*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "PortDLIDMappingErrors", mad_dump_uint},
468*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "PortVLMappingErrors", mad_dump_uint},
469*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "PortLoopingErrors", mad_dump_uint},
470*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_RCV_ERR_LAST_F */
471*d6b92ffaSHans Petter Selasky
472*d6b92ffaSHans Petter Selasky /*
473*d6b92ffaSHans Petter Selasky * PortSamplesControl fields
474*d6b92ffaSHans Petter Selasky */
475*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 8), "OpCode", mad_dump_hex},
476*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
477*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 8), "Tick", mad_dump_hex},
478*d6b92ffaSHans Petter Selasky {BITSOFFS(29, 3), "CounterWidth", mad_dump_uint},
479*d6b92ffaSHans Petter Selasky {BITSOFFS(34, 3), "CounterMask0", mad_dump_hex},
480*d6b92ffaSHans Petter Selasky {BITSOFFS(37, 27), "CounterMasks1to9", mad_dump_hex},
481*d6b92ffaSHans Petter Selasky {BITSOFFS(65, 15), "CounterMasks10to14", mad_dump_hex},
482*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 8), "SampleMechanisms", mad_dump_uint},
483*d6b92ffaSHans Petter Selasky {BITSOFFS(94, 2), "SampleStatus", mad_dump_uint},
484*d6b92ffaSHans Petter Selasky {96, 64, "OptionMask", mad_dump_hex},
485*d6b92ffaSHans Petter Selasky {160, 64, "VendorMask", mad_dump_hex},
486*d6b92ffaSHans Petter Selasky {224, 32, "SampleStart", mad_dump_uint},
487*d6b92ffaSHans Petter Selasky {256, 32, "SampleInterval", mad_dump_uint},
488*d6b92ffaSHans Petter Selasky {BITSOFFS(288, 16), "Tag", mad_dump_hex},
489*d6b92ffaSHans Petter Selasky {BITSOFFS(304, 16), "CounterSelect0", mad_dump_hex},
490*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 16), "CounterSelect1", mad_dump_hex},
491*d6b92ffaSHans Petter Selasky {BITSOFFS(336, 16), "CounterSelect2", mad_dump_hex},
492*d6b92ffaSHans Petter Selasky {BITSOFFS(352, 16), "CounterSelect3", mad_dump_hex},
493*d6b92ffaSHans Petter Selasky {BITSOFFS(368, 16), "CounterSelect4", mad_dump_hex},
494*d6b92ffaSHans Petter Selasky {BITSOFFS(384, 16), "CounterSelect5", mad_dump_hex},
495*d6b92ffaSHans Petter Selasky {BITSOFFS(400, 16), "CounterSelect6", mad_dump_hex},
496*d6b92ffaSHans Petter Selasky {BITSOFFS(416, 16), "CounterSelect7", mad_dump_hex},
497*d6b92ffaSHans Petter Selasky {BITSOFFS(432, 16), "CounterSelect8", mad_dump_hex},
498*d6b92ffaSHans Petter Selasky {BITSOFFS(448, 16), "CounterSelect9", mad_dump_hex},
499*d6b92ffaSHans Petter Selasky {BITSOFFS(464, 16), "CounterSelect10", mad_dump_hex},
500*d6b92ffaSHans Petter Selasky {BITSOFFS(480, 16), "CounterSelect11", mad_dump_hex},
501*d6b92ffaSHans Petter Selasky {BITSOFFS(496, 16), "CounterSelect12", mad_dump_hex},
502*d6b92ffaSHans Petter Selasky {BITSOFFS(512, 16), "CounterSelect13", mad_dump_hex},
503*d6b92ffaSHans Petter Selasky {BITSOFFS(528, 16), "CounterSelect14", mad_dump_hex},
504*d6b92ffaSHans Petter Selasky {576, 64, "SamplesOnlyOptionMask", mad_dump_hex},
505*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PSC_LAST_F */
506*d6b92ffaSHans Petter Selasky
507*d6b92ffaSHans Petter Selasky /* GUIDInfo fields */
508*d6b92ffaSHans Petter Selasky {0, 64, "GUID0", mad_dump_hex},
509*d6b92ffaSHans Petter Selasky {64, 64, "GUID1", mad_dump_hex},
510*d6b92ffaSHans Petter Selasky {128, 64, "GUID2", mad_dump_hex},
511*d6b92ffaSHans Petter Selasky {192, 64, "GUID3", mad_dump_hex},
512*d6b92ffaSHans Petter Selasky {256, 64, "GUID4", mad_dump_hex},
513*d6b92ffaSHans Petter Selasky {320, 64, "GUID5", mad_dump_hex},
514*d6b92ffaSHans Petter Selasky {384, 64, "GUID6", mad_dump_hex},
515*d6b92ffaSHans Petter Selasky {448, 64, "GUID7", mad_dump_hex},
516*d6b92ffaSHans Petter Selasky
517*d6b92ffaSHans Petter Selasky /* GUID Info Record */
518*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "Lid", mad_dump_uint},
519*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 8), "BlockNum", mad_dump_uint},
520*d6b92ffaSHans Petter Selasky {64, 64, "Guid0", mad_dump_hex},
521*d6b92ffaSHans Petter Selasky {128, 64, "Guid1", mad_dump_hex},
522*d6b92ffaSHans Petter Selasky {192, 64, "Guid2", mad_dump_hex},
523*d6b92ffaSHans Petter Selasky {256, 64, "Guid3", mad_dump_hex},
524*d6b92ffaSHans Petter Selasky {320, 64, "Guid4", mad_dump_hex},
525*d6b92ffaSHans Petter Selasky {384, 64, "Guid5", mad_dump_hex},
526*d6b92ffaSHans Petter Selasky {448, 64, "Guid6", mad_dump_hex},
527*d6b92ffaSHans Petter Selasky {512, 64, "Guid7", mad_dump_hex},
528*d6b92ffaSHans Petter Selasky
529*d6b92ffaSHans Petter Selasky /*
530*d6b92ffaSHans Petter Selasky * More PortInfo fields
531*d6b92ffaSHans Petter Selasky */
532*d6b92ffaSHans Petter Selasky {BITSOFFS(480, 16), "CapabilityMask2", mad_dump_portcapmask2},
533*d6b92ffaSHans Petter Selasky {BITSOFFS(496, 4), "LinkSpeedExtActive", mad_dump_linkspeedext},
534*d6b92ffaSHans Petter Selasky {BITSOFFS(500, 4), "LinkSpeedExtSupported", mad_dump_linkspeedextsup},
535*d6b92ffaSHans Petter Selasky {BITSOFFS(507, 5), "LinkSpeedExtEnabled", mad_dump_linkspeedexten},
536*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PORT_LINK_SPEED_EXT_LAST_F */
537*d6b92ffaSHans Petter Selasky
538*d6b92ffaSHans Petter Selasky /*
539*d6b92ffaSHans Petter Selasky * PortExtendedSpeedsCounters fields
540*d6b92ffaSHans Petter Selasky */
541*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
542*d6b92ffaSHans Petter Selasky {64, 64, "CounterSelect", mad_dump_hex},
543*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "SyncHeaderErrorCounter", mad_dump_uint},
544*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "UnknownBlockCounter", mad_dump_uint},
545*d6b92ffaSHans Petter Selasky {BITSOFFS(160, 16), "ErrorDetectionCounterLane0", mad_dump_uint},
546*d6b92ffaSHans Petter Selasky {BITSOFFS(176, 16), "ErrorDetectionCounterLane1", mad_dump_uint},
547*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "ErrorDetectionCounterLane2", mad_dump_uint},
548*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 16), "ErrorDetectionCounterLane3", mad_dump_uint},
549*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "ErrorDetectionCounterLane4", mad_dump_uint},
550*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "ErrorDetectionCounterLane5", mad_dump_uint},
551*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 16), "ErrorDetectionCounterLane6", mad_dump_uint},
552*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 16), "ErrorDetectionCounterLane7", mad_dump_uint},
553*d6b92ffaSHans Petter Selasky {BITSOFFS(288, 16), "ErrorDetectionCounterLane8", mad_dump_uint},
554*d6b92ffaSHans Petter Selasky {BITSOFFS(304, 16), "ErrorDetectionCounterLane9", mad_dump_uint},
555*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 16), "ErrorDetectionCounterLane10", mad_dump_uint},
556*d6b92ffaSHans Petter Selasky {BITSOFFS(336, 16), "ErrorDetectionCounterLane11", mad_dump_uint},
557*d6b92ffaSHans Petter Selasky {352, 32, "FECCorrectableBlockCtrLane0", mad_dump_uint},
558*d6b92ffaSHans Petter Selasky {384, 32, "FECCorrectableBlockCtrLane1", mad_dump_uint},
559*d6b92ffaSHans Petter Selasky {416, 32, "FECCorrectableBlockCtrLane2", mad_dump_uint},
560*d6b92ffaSHans Petter Selasky {448, 32, "FECCorrectableBlockCtrLane3", mad_dump_uint},
561*d6b92ffaSHans Petter Selasky {480, 32, "FECCorrectableBlockCtrLane4", mad_dump_uint},
562*d6b92ffaSHans Petter Selasky {512, 32, "FECCorrectableBlockCtrLane5", mad_dump_uint},
563*d6b92ffaSHans Petter Selasky {544, 32, "FECCorrectableBlockCtrLane6", mad_dump_uint},
564*d6b92ffaSHans Petter Selasky {576, 32, "FECCorrectableBlockCtrLane7", mad_dump_uint},
565*d6b92ffaSHans Petter Selasky {608, 32, "FECCorrectableBlockCtrLane8", mad_dump_uint},
566*d6b92ffaSHans Petter Selasky {640, 32, "FECCorrectableBlockCtrLane9", mad_dump_uint},
567*d6b92ffaSHans Petter Selasky {672, 32, "FECCorrectableBlockCtrLane10", mad_dump_uint},
568*d6b92ffaSHans Petter Selasky {704, 32, "FECCorrectableBlockCtrLane11", mad_dump_uint},
569*d6b92ffaSHans Petter Selasky {736, 32, "FECUncorrectableBlockCtrLane0", mad_dump_uint},
570*d6b92ffaSHans Petter Selasky {768, 32, "FECUncorrectableBlockCtrLane1", mad_dump_uint},
571*d6b92ffaSHans Petter Selasky {800, 32, "FECUncorrectableBlockCtrLane2", mad_dump_uint},
572*d6b92ffaSHans Petter Selasky {832, 32, "FECUncorrectableBlockCtrLane3", mad_dump_uint},
573*d6b92ffaSHans Petter Selasky {864, 32, "FECUncorrectableBlockCtrLane4", mad_dump_uint},
574*d6b92ffaSHans Petter Selasky {896, 32, "FECUncorrectableBlockCtrLane5", mad_dump_uint},
575*d6b92ffaSHans Petter Selasky {928, 32, "FECUncorrectableBlockCtrLane6", mad_dump_uint},
576*d6b92ffaSHans Petter Selasky {960, 32, "FECUncorrectableBlockCtrLane7", mad_dump_uint},
577*d6b92ffaSHans Petter Selasky {992, 32, "FECUncorrectableBlockCtrLane8", mad_dump_uint},
578*d6b92ffaSHans Petter Selasky {1024, 32, "FECUncorrectableBlockCtrLane9", mad_dump_uint},
579*d6b92ffaSHans Petter Selasky {1056, 32, "FECUncorrectableBlockCtrLane10", mad_dump_uint},
580*d6b92ffaSHans Petter Selasky {1088, 32, "FECUncorrectableBlockCtrLane11", mad_dump_uint},
581*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PESC_LAST_F */
582*d6b92ffaSHans Petter Selasky
583*d6b92ffaSHans Petter Selasky
584*d6b92ffaSHans Petter Selasky
585*d6b92ffaSHans Petter Selasky /*
586*d6b92ffaSHans Petter Selasky * PortOpRcvCounters fields
587*d6b92ffaSHans Petter Selasky */
588*d6b92ffaSHans Petter Selasky {32, 32, "PortOpRcvPkts", mad_dump_uint},
589*d6b92ffaSHans Petter Selasky {64, 32, "PortOpRcvData", mad_dump_uint},
590*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_OP_RCV_COUNTERS_LAST_F */
591*d6b92ffaSHans Petter Selasky
592*d6b92ffaSHans Petter Selasky /*
593*d6b92ffaSHans Petter Selasky * PortFlowCtlCounters fields
594*d6b92ffaSHans Petter Selasky */
595*d6b92ffaSHans Petter Selasky {32, 32, "PortXmitFlowPkts", mad_dump_uint},
596*d6b92ffaSHans Petter Selasky {64, 32, "PortRcvFlowPkts", mad_dump_uint},
597*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F */
598*d6b92ffaSHans Petter Selasky
599*d6b92ffaSHans Petter Selasky /*
600*d6b92ffaSHans Petter Selasky * PortVLOpPackets fields
601*d6b92ffaSHans Petter Selasky */
602*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "PortVLOpPackets0", mad_dump_uint},
603*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "PortVLOpPackets1", mad_dump_uint},
604*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "PortVLOpPackets2", mad_dump_uint},
605*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "PortVLOpPackets3", mad_dump_uint},
606*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "PortVLOpPackets4", mad_dump_uint},
607*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "PortVLOpPackets5", mad_dump_uint},
608*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "PortVLOpPackets6", mad_dump_uint},
609*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "PortVLOpPackets7", mad_dump_uint},
610*d6b92ffaSHans Petter Selasky {BITSOFFS(160, 16), "PortVLOpPackets8", mad_dump_uint},
611*d6b92ffaSHans Petter Selasky {BITSOFFS(176, 16), "PortVLOpPackets9", mad_dump_uint},
612*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "PortVLOpPackets10", mad_dump_uint},
613*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 16), "PortVLOpPackets11", mad_dump_uint},
614*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "PortVLOpPackets12", mad_dump_uint},
615*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "PortVLOpPackets13", mad_dump_uint},
616*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 16), "PortVLOpPackets14", mad_dump_uint},
617*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 16), "PortVLOpPackets15", mad_dump_uint},
618*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_VL_OP_PACKETS_LAST_F */
619*d6b92ffaSHans Petter Selasky
620*d6b92ffaSHans Petter Selasky /*
621*d6b92ffaSHans Petter Selasky * PortVLOpData fields
622*d6b92ffaSHans Petter Selasky */
623*d6b92ffaSHans Petter Selasky {32, 32, "PortVLOpData0", mad_dump_uint},
624*d6b92ffaSHans Petter Selasky {64, 32, "PortVLOpData1", mad_dump_uint},
625*d6b92ffaSHans Petter Selasky {96, 32, "PortVLOpData2", mad_dump_uint},
626*d6b92ffaSHans Petter Selasky {128, 32, "PortVLOpData3", mad_dump_uint},
627*d6b92ffaSHans Petter Selasky {160, 32, "PortVLOpData4", mad_dump_uint},
628*d6b92ffaSHans Petter Selasky {192, 32, "PortVLOpData5", mad_dump_uint},
629*d6b92ffaSHans Petter Selasky {224, 32, "PortVLOpData6", mad_dump_uint},
630*d6b92ffaSHans Petter Selasky {256, 32, "PortVLOpData7", mad_dump_uint},
631*d6b92ffaSHans Petter Selasky {288, 32, "PortVLOpData8", mad_dump_uint},
632*d6b92ffaSHans Petter Selasky {320, 32, "PortVLOpData9", mad_dump_uint},
633*d6b92ffaSHans Petter Selasky {352, 32, "PortVLOpData10", mad_dump_uint},
634*d6b92ffaSHans Petter Selasky {384, 32, "PortVLOpData11", mad_dump_uint},
635*d6b92ffaSHans Petter Selasky {416, 32, "PortVLOpData12", mad_dump_uint},
636*d6b92ffaSHans Petter Selasky {448, 32, "PortVLOpData13", mad_dump_uint},
637*d6b92ffaSHans Petter Selasky {480, 32, "PortVLOpData14", mad_dump_uint},
638*d6b92ffaSHans Petter Selasky {512, 32, "PortVLOpData15", mad_dump_uint},
639*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_VL_OP_DATA_LAST_F */
640*d6b92ffaSHans Petter Selasky
641*d6b92ffaSHans Petter Selasky /*
642*d6b92ffaSHans Petter Selasky * PortVLXmitFlowCtlUpdateErrors fields
643*d6b92ffaSHans Petter Selasky */
644*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 2), "PortVLXmitFlowCtlUpdateErrors0", mad_dump_uint},
645*d6b92ffaSHans Petter Selasky {BITSOFFS(34, 2), "PortVLXmitFlowCtlUpdateErrors1", mad_dump_uint},
646*d6b92ffaSHans Petter Selasky {BITSOFFS(36, 2), "PortVLXmitFlowCtlUpdateErrors2", mad_dump_uint},
647*d6b92ffaSHans Petter Selasky {BITSOFFS(38, 2), "PortVLXmitFlowCtlUpdateErrors3", mad_dump_uint},
648*d6b92ffaSHans Petter Selasky {BITSOFFS(40, 2), "PortVLXmitFlowCtlUpdateErrors4", mad_dump_uint},
649*d6b92ffaSHans Petter Selasky {BITSOFFS(42, 2), "PortVLXmitFlowCtlUpdateErrors5", mad_dump_uint},
650*d6b92ffaSHans Petter Selasky {BITSOFFS(44, 2), "PortVLXmitFlowCtlUpdateErrors6", mad_dump_uint},
651*d6b92ffaSHans Petter Selasky {BITSOFFS(46, 2), "PortVLXmitFlowCtlUpdateErrors7", mad_dump_uint},
652*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 2), "PortVLXmitFlowCtlUpdateErrors8", mad_dump_uint},
653*d6b92ffaSHans Petter Selasky {BITSOFFS(50, 2), "PortVLXmitFlowCtlUpdateErrors9", mad_dump_uint},
654*d6b92ffaSHans Petter Selasky {BITSOFFS(52, 2), "PortVLXmitFlowCtlUpdateErrors10", mad_dump_uint},
655*d6b92ffaSHans Petter Selasky {BITSOFFS(54, 2), "PortVLXmitFlowCtlUpdateErrors11", mad_dump_uint},
656*d6b92ffaSHans Petter Selasky {BITSOFFS(56, 2), "PortVLXmitFlowCtlUpdateErrors12", mad_dump_uint},
657*d6b92ffaSHans Petter Selasky {BITSOFFS(58, 2), "PortVLXmitFlowCtlUpdateErrors13", mad_dump_uint},
658*d6b92ffaSHans Petter Selasky {BITSOFFS(60, 2), "PortVLXmitFlowCtlUpdateErrors14", mad_dump_uint},
659*d6b92ffaSHans Petter Selasky {BITSOFFS(62, 2), "PortVLXmitFlowCtlUpdateErrors15", mad_dump_uint},
660*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F */
661*d6b92ffaSHans Petter Selasky
662*d6b92ffaSHans Petter Selasky /*
663*d6b92ffaSHans Petter Selasky * PortVLXmitWaitCounters fields
664*d6b92ffaSHans Petter Selasky */
665*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "PortVLXmitWait0", mad_dump_uint},
666*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "PortVLXmitWait1", mad_dump_uint},
667*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "PortVLXmitWait2", mad_dump_uint},
668*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "PortVLXmitWait3", mad_dump_uint},
669*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "PortVLXmitWait4", mad_dump_uint},
670*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "PortVLXmitWait5", mad_dump_uint},
671*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "PortVLXmitWait6", mad_dump_uint},
672*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "PortVLXmitWait7", mad_dump_uint},
673*d6b92ffaSHans Petter Selasky {BITSOFFS(160, 16), "PortVLXmitWait8", mad_dump_uint},
674*d6b92ffaSHans Petter Selasky {BITSOFFS(176, 16), "PortVLXmitWait9", mad_dump_uint},
675*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "PortVLXmitWait10", mad_dump_uint},
676*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 16), "PortVLXmitWait11", mad_dump_uint},
677*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "PortVLXmitWait12", mad_dump_uint},
678*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "PortVLXmitWait13", mad_dump_uint},
679*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 16), "PortVLXmitWait14", mad_dump_uint},
680*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 16), "PortVLXmitWait15", mad_dump_uint},
681*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F */
682*d6b92ffaSHans Petter Selasky
683*d6b92ffaSHans Petter Selasky /*
684*d6b92ffaSHans Petter Selasky * SwPortVLCongestion fields
685*d6b92ffaSHans Petter Selasky */
686*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "SWPortVLCongestion0", mad_dump_uint},
687*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "SWPortVLCongestion1", mad_dump_uint},
688*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "SWPortVLCongestion2", mad_dump_uint},
689*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "SWPortVLCongestion3", mad_dump_uint},
690*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "SWPortVLCongestion4", mad_dump_uint},
691*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "SWPortVLCongestion5", mad_dump_uint},
692*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "SWPortVLCongestion6", mad_dump_uint},
693*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "SWPortVLCongestion7", mad_dump_uint},
694*d6b92ffaSHans Petter Selasky {BITSOFFS(160, 16), "SWPortVLCongestion8", mad_dump_uint},
695*d6b92ffaSHans Petter Selasky {BITSOFFS(176, 16), "SWPortVLCongestion9", mad_dump_uint},
696*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 16), "SWPortVLCongestion10", mad_dump_uint},
697*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 16), "SWPortVLCongestion11", mad_dump_uint},
698*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 16), "SWPortVLCongestion12", mad_dump_uint},
699*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 16), "SWPortVLCongestion13", mad_dump_uint},
700*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 16), "SWPortVLCongestion14", mad_dump_uint},
701*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 16), "SWPortVLCongestion15", mad_dump_uint},
702*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_SW_PORT_VL_CONGESTION_LAST_F */
703*d6b92ffaSHans Petter Selasky
704*d6b92ffaSHans Petter Selasky /*
705*d6b92ffaSHans Petter Selasky * PortRcvConCtrl fields
706*d6b92ffaSHans Petter Selasky */
707*d6b92ffaSHans Petter Selasky {32, 32, "PortPktRcvFECN", mad_dump_uint},
708*d6b92ffaSHans Petter Selasky {64, 32, "PortPktRcvBECN", mad_dump_uint},
709*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_RCV_CON_CTRL_LAST_F */
710*d6b92ffaSHans Petter Selasky
711*d6b92ffaSHans Petter Selasky /*
712*d6b92ffaSHans Petter Selasky * PortSLRcvFECN fields
713*d6b92ffaSHans Petter Selasky */
714*d6b92ffaSHans Petter Selasky {32, 32, "PortSLRcvFECN0", mad_dump_uint},
715*d6b92ffaSHans Petter Selasky {64, 32, "PortSLRcvFECN1", mad_dump_uint},
716*d6b92ffaSHans Petter Selasky {96, 32, "PortSLRcvFECN2", mad_dump_uint},
717*d6b92ffaSHans Petter Selasky {128, 32, "PortSLRcvFECN3", mad_dump_uint},
718*d6b92ffaSHans Petter Selasky {160, 32, "PortSLRcvFECN4", mad_dump_uint},
719*d6b92ffaSHans Petter Selasky {192, 32, "PortSLRcvFECN5", mad_dump_uint},
720*d6b92ffaSHans Petter Selasky {224, 32, "PortSLRcvFECN6", mad_dump_uint},
721*d6b92ffaSHans Petter Selasky {256, 32, "PortSLRcvFECN7", mad_dump_uint},
722*d6b92ffaSHans Petter Selasky {288, 32, "PortSLRcvFECN8", mad_dump_uint},
723*d6b92ffaSHans Petter Selasky {320, 32, "PortSLRcvFECN9", mad_dump_uint},
724*d6b92ffaSHans Petter Selasky {352, 32, "PortSLRcvFECN10", mad_dump_uint},
725*d6b92ffaSHans Petter Selasky {384, 32, "PortSLRcvFECN11", mad_dump_uint},
726*d6b92ffaSHans Petter Selasky {416, 32, "PortSLRcvFECN12", mad_dump_uint},
727*d6b92ffaSHans Petter Selasky {448, 32, "PortSLRcvFECN13", mad_dump_uint},
728*d6b92ffaSHans Petter Selasky {480, 32, "PortSLRcvFECN14", mad_dump_uint},
729*d6b92ffaSHans Petter Selasky {512, 32, "PortSLRcvFECN15", mad_dump_uint},
730*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_SL_RCV_FECN_LAST_F */
731*d6b92ffaSHans Petter Selasky
732*d6b92ffaSHans Petter Selasky /*
733*d6b92ffaSHans Petter Selasky * PortSLRcvBECN fields
734*d6b92ffaSHans Petter Selasky */
735*d6b92ffaSHans Petter Selasky {32, 32, "PortSLRcvBECN0", mad_dump_uint},
736*d6b92ffaSHans Petter Selasky {64, 32, "PortSLRcvBECN1", mad_dump_uint},
737*d6b92ffaSHans Petter Selasky {96, 32, "PortSLRcvBECN2", mad_dump_uint},
738*d6b92ffaSHans Petter Selasky {128, 32, "PortSLRcvBECN3", mad_dump_uint},
739*d6b92ffaSHans Petter Selasky {160, 32, "PortSLRcvBECN4", mad_dump_uint},
740*d6b92ffaSHans Petter Selasky {192, 32, "PortSLRcvBECN5", mad_dump_uint},
741*d6b92ffaSHans Petter Selasky {224, 32, "PortSLRcvBECN6", mad_dump_uint},
742*d6b92ffaSHans Petter Selasky {256, 32, "PortSLRcvBECN7", mad_dump_uint},
743*d6b92ffaSHans Petter Selasky {288, 32, "PortSLRcvBECN8", mad_dump_uint},
744*d6b92ffaSHans Petter Selasky {320, 32, "PortSLRcvBECN9", mad_dump_uint},
745*d6b92ffaSHans Petter Selasky {352, 32, "PortSLRcvBECN10", mad_dump_uint},
746*d6b92ffaSHans Petter Selasky {384, 32, "PortSLRcvBECN11", mad_dump_uint},
747*d6b92ffaSHans Petter Selasky {416, 32, "PortSLRcvBECN12", mad_dump_uint},
748*d6b92ffaSHans Petter Selasky {448, 32, "PortSLRcvBECN13", mad_dump_uint},
749*d6b92ffaSHans Petter Selasky {480, 32, "PortSLRcvBECN14", mad_dump_uint},
750*d6b92ffaSHans Petter Selasky {512, 32, "PortSLRcvBECN15", mad_dump_uint},
751*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_SL_RCV_BECN_LAST_F */
752*d6b92ffaSHans Petter Selasky
753*d6b92ffaSHans Petter Selasky /*
754*d6b92ffaSHans Petter Selasky * PortXmitConCtrl fields
755*d6b92ffaSHans Petter Selasky */
756*d6b92ffaSHans Petter Selasky {32, 32, "PortXmitTimeCong", mad_dump_uint},
757*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_XMIT_CON_CTRL_LAST_F */
758*d6b92ffaSHans Petter Selasky
759*d6b92ffaSHans Petter Selasky /*
760*d6b92ffaSHans Petter Selasky * PortVLXmitTimeCong fields
761*d6b92ffaSHans Petter Selasky */
762*d6b92ffaSHans Petter Selasky {32, 32, "PortVLXmitTimeCong0", mad_dump_uint},
763*d6b92ffaSHans Petter Selasky {64, 32, "PortVLXmitTimeCong1", mad_dump_uint},
764*d6b92ffaSHans Petter Selasky {96, 32, "PortVLXmitTimeCong2", mad_dump_uint},
765*d6b92ffaSHans Petter Selasky {128, 32, "PortVLXmitTimeCong3", mad_dump_uint},
766*d6b92ffaSHans Petter Selasky {160, 32, "PortVLXmitTimeCong4", mad_dump_uint},
767*d6b92ffaSHans Petter Selasky {192, 32, "PortVLXmitTimeCong5", mad_dump_uint},
768*d6b92ffaSHans Petter Selasky {224, 32, "PortVLXmitTimeCong6", mad_dump_uint},
769*d6b92ffaSHans Petter Selasky {256, 32, "PortVLXmitTimeCong7", mad_dump_uint},
770*d6b92ffaSHans Petter Selasky {288, 32, "PortVLXmitTimeCong8", mad_dump_uint},
771*d6b92ffaSHans Petter Selasky {320, 32, "PortVLXmitTimeCong9", mad_dump_uint},
772*d6b92ffaSHans Petter Selasky {352, 32, "PortVLXmitTimeCong10", mad_dump_uint},
773*d6b92ffaSHans Petter Selasky {384, 32, "PortVLXmitTimeCong11", mad_dump_uint},
774*d6b92ffaSHans Petter Selasky {416, 32, "PortVLXmitTimeCong12", mad_dump_uint},
775*d6b92ffaSHans Petter Selasky {448, 32, "PortVLXmitTimeCong13", mad_dump_uint},
776*d6b92ffaSHans Petter Selasky {480, 32, "PortVLXmitTimeCong14", mad_dump_uint},
777*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_VL_XMIT_TIME_CONG_LAST_F */
778*d6b92ffaSHans Petter Selasky
779*d6b92ffaSHans Petter Selasky /*
780*d6b92ffaSHans Petter Selasky * Mellanox ExtendedPortInfo fields
781*d6b92ffaSHans Petter Selasky */
782*d6b92ffaSHans Petter Selasky {BITSOFFS(24, 8), "StateChangeEnable", mad_dump_hex},
783*d6b92ffaSHans Petter Selasky {BITSOFFS(56, 8), "LinkSpeedSupported", mad_dump_hex},
784*d6b92ffaSHans Petter Selasky {BITSOFFS(88, 8), "LinkSpeedEnabled", mad_dump_hex},
785*d6b92ffaSHans Petter Selasky {BITSOFFS(120, 8), "LinkSpeedActive", mad_dump_hex},
786*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_MLNX_EXT_PORT_LAST_F */
787*d6b92ffaSHans Petter Selasky
788*d6b92ffaSHans Petter Selasky /*
789*d6b92ffaSHans Petter Selasky * Congestion Control Mad fields
790*d6b92ffaSHans Petter Selasky * bytes 24-31 of congestion control mad
791*d6b92ffaSHans Petter Selasky */
792*d6b92ffaSHans Petter Selasky {192, 64, "CC_Key", mad_dump_hex}, /* IB_CC_CCKEY_F */
793*d6b92ffaSHans Petter Selasky
794*d6b92ffaSHans Petter Selasky /*
795*d6b92ffaSHans Petter Selasky * CongestionInfo fields
796*d6b92ffaSHans Petter Selasky */
797*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "CongestionInfo", mad_dump_hex},
798*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 8), "ControlTableCap", mad_dump_uint},
799*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_INFO_LAST_F */
800*d6b92ffaSHans Petter Selasky
801*d6b92ffaSHans Petter Selasky /*
802*d6b92ffaSHans Petter Selasky * CongestionKeyInfo fields
803*d6b92ffaSHans Petter Selasky */
804*d6b92ffaSHans Petter Selasky {0, 64, "CC_Key", mad_dump_hex},
805*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 1), "CC_KeyProtectBit", mad_dump_uint},
806*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "CC_KeyLeasePeriod", mad_dump_uint},
807*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "CC_KeyViolations", mad_dump_uint},
808*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_KEY_INFO_LAST_F */
809*d6b92ffaSHans Petter Selasky
810*d6b92ffaSHans Petter Selasky /*
811*d6b92ffaSHans Petter Selasky * CongestionLog (common) fields
812*d6b92ffaSHans Petter Selasky */
813*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 8), "LogType", mad_dump_uint},
814*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "CongestionFlags", mad_dump_hex},
815*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_LOG_LAST_F */
816*d6b92ffaSHans Petter Selasky
817*d6b92ffaSHans Petter Selasky /*
818*d6b92ffaSHans Petter Selasky * CongestionLog (Switch) fields
819*d6b92ffaSHans Petter Selasky */
820*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "LogEventsCounter", mad_dump_uint},
821*d6b92ffaSHans Petter Selasky {32, 32, "CurrentTimeStamp", mad_dump_uint},
822*d6b92ffaSHans Petter Selasky {64, 256, "PortMap", mad_dump_array},
823*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_LOG_SWITCH_LAST_F */
824*d6b92ffaSHans Petter Selasky
825*d6b92ffaSHans Petter Selasky /*
826*d6b92ffaSHans Petter Selasky * CongestionLogEvent (Switch) fields
827*d6b92ffaSHans Petter Selasky */
828*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "SLID", mad_dump_uint},
829*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "DLID", mad_dump_uint},
830*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 4), "SL", mad_dump_uint},
831*d6b92ffaSHans Petter Selasky {64, 32, "Timestamp", mad_dump_uint},
832*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_LOG_ENTRY_SWITCH_LAST_F */
833*d6b92ffaSHans Petter Selasky
834*d6b92ffaSHans Petter Selasky /*
835*d6b92ffaSHans Petter Selasky * CongestionLog (CA) fields
836*d6b92ffaSHans Petter Selasky */
837*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "ThresholdEventCounter", mad_dump_uint},
838*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "ThresholdCongestionEventMap", mad_dump_hex},
839*d6b92ffaSHans Petter Selasky /* XXX: Q3/2010 errata lists offset 48, but that means field is not
840*d6b92ffaSHans Petter Selasky * word aligned. Assume will be aligned to offset 64 later.
841*d6b92ffaSHans Petter Selasky */
842*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 32), "CurrentTimeStamp", mad_dump_uint},
843*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_LOG_CA_LAST_F */
844*d6b92ffaSHans Petter Selasky
845*d6b92ffaSHans Petter Selasky /*
846*d6b92ffaSHans Petter Selasky * CongestionLogEvent (CA) fields
847*d6b92ffaSHans Petter Selasky */
848*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 24), "Local_QP_CN_Entry", mad_dump_uint},
849*d6b92ffaSHans Petter Selasky {BITSOFFS(24, 4), "SL_CN_Entry", mad_dump_uint},
850*d6b92ffaSHans Petter Selasky {BITSOFFS(28, 4), "Service_Type_CN_Entry", mad_dump_hex},
851*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 24), "Remote_QP_Number_CN_Entry", mad_dump_uint},
852*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "Local_LID_CN", mad_dump_uint},
853*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "Remote_LID_CN_Entry", mad_dump_uint},
854*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 32), "Timestamp_CN_Entry", mad_dump_uint},
855*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_LOG_ENTRY_CA_LAST_F */
856*d6b92ffaSHans Petter Selasky
857*d6b92ffaSHans Petter Selasky /*
858*d6b92ffaSHans Petter Selasky * SwitchCongestionSetting fields
859*d6b92ffaSHans Petter Selasky */
860*d6b92ffaSHans Petter Selasky {0, 32, "Control_Map", mad_dump_hex},
861*d6b92ffaSHans Petter Selasky {32, 256, "Victim_Mask", mad_dump_array},
862*d6b92ffaSHans Petter Selasky {288, 256, "Credit_Mask", mad_dump_array},
863*d6b92ffaSHans Petter Selasky {BITSOFFS(544, 4), "Threshold", mad_dump_hex},
864*d6b92ffaSHans Petter Selasky {BITSOFFS(552, 8), "Packet_Size", mad_dump_uint},
865*d6b92ffaSHans Petter Selasky {BITSOFFS(560, 4), "CS_Threshold", mad_dump_hex},
866*d6b92ffaSHans Petter Selasky {BITSOFFS(576, 16), "CS_ReturnDelay", mad_dump_hex}, /* TODO: CCT dump */
867*d6b92ffaSHans Petter Selasky {BITSOFFS(592, 16), "Marking_Rate", mad_dump_uint},
868*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_SWITCH_CONGESTION_SETTING_LAST_F */
869*d6b92ffaSHans Petter Selasky
870*d6b92ffaSHans Petter Selasky /*
871*d6b92ffaSHans Petter Selasky * SwitchPortCongestionSettingElement fields
872*d6b92ffaSHans Petter Selasky */
873*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 1), "Valid", mad_dump_uint},
874*d6b92ffaSHans Petter Selasky {BITSOFFS(1, 1), "Control_Type", mad_dump_uint},
875*d6b92ffaSHans Petter Selasky {BITSOFFS(4, 4), "Threshold", mad_dump_hex},
876*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "Packet_Size", mad_dump_uint},
877*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "Cong_Parm_Marking_Rate", mad_dump_uint},
878*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_LAST_F */
879*d6b92ffaSHans Petter Selasky
880*d6b92ffaSHans Petter Selasky /*
881*d6b92ffaSHans Petter Selasky * CACongestionSetting fields
882*d6b92ffaSHans Petter Selasky */
883*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "Port_Control", mad_dump_hex},
884*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 16), "Control_Map", mad_dump_hex},
885*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CA_CONGESTION_SETTING_LAST_F */
886*d6b92ffaSHans Petter Selasky
887*d6b92ffaSHans Petter Selasky /*
888*d6b92ffaSHans Petter Selasky * CACongestionEntry fields
889*d6b92ffaSHans Petter Selasky */
890*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "CCTI_Timer", mad_dump_uint},
891*d6b92ffaSHans Petter Selasky {BITSOFFS(16, 8), "CCTI_Increase", mad_dump_uint},
892*d6b92ffaSHans Petter Selasky {BITSOFFS(24, 8), "Trigger_Threshold", mad_dump_uint},
893*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 8), "CCTI_Min", mad_dump_uint},
894*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CA_CONGESTION_SETTING_ENTRY_LAST_F */
895*d6b92ffaSHans Petter Selasky
896*d6b92ffaSHans Petter Selasky /*
897*d6b92ffaSHans Petter Selasky * CongestionControlTable fields
898*d6b92ffaSHans Petter Selasky */
899*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "CCTI_Limit", mad_dump_uint},
900*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_CONTROL_TABLE_LAST_F */
901*d6b92ffaSHans Petter Selasky
902*d6b92ffaSHans Petter Selasky /*
903*d6b92ffaSHans Petter Selasky * CongestionControlTableEntry fields
904*d6b92ffaSHans Petter Selasky */
905*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 2), "CCT_Shift", mad_dump_uint},
906*d6b92ffaSHans Petter Selasky {BITSOFFS(2, 14), "CCT_Multiplier", mad_dump_uint},
907*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_LAST_F */
908*d6b92ffaSHans Petter Selasky
909*d6b92ffaSHans Petter Selasky /*
910*d6b92ffaSHans Petter Selasky * Timestamp fields
911*d6b92ffaSHans Petter Selasky */
912*d6b92ffaSHans Petter Selasky {0, 32, "Timestamp", mad_dump_uint},
913*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_CC_TIMESTAMP_LAST_F */
914*d6b92ffaSHans Petter Selasky
915*d6b92ffaSHans Petter Selasky /* Node Record */
916*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "Lid", mad_dump_uint},
917*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 8), "BaseVers", mad_dump_uint},
918*d6b92ffaSHans Petter Selasky {BITSOFFS(40, 8), "ClassVers", mad_dump_uint},
919*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 8), "NodeType", mad_dump_node_type},
920*d6b92ffaSHans Petter Selasky {BITSOFFS(56, 8), "NumPorts", mad_dump_uint},
921*d6b92ffaSHans Petter Selasky {64, 64, "SystemGuid", mad_dump_hex},
922*d6b92ffaSHans Petter Selasky {128, 64, "Guid", mad_dump_hex},
923*d6b92ffaSHans Petter Selasky {192, 64, "PortGuid", mad_dump_hex},
924*d6b92ffaSHans Petter Selasky {BITSOFFS(256, 16), "PartCap", mad_dump_uint},
925*d6b92ffaSHans Petter Selasky {BITSOFFS(272, 16), "DevId", mad_dump_hex},
926*d6b92ffaSHans Petter Selasky {288, 32, "Revision", mad_dump_hex},
927*d6b92ffaSHans Petter Selasky {BITSOFFS(320, 8), "LocalPort", mad_dump_uint},
928*d6b92ffaSHans Petter Selasky {BITSOFFS(328, 24), "VendorId", mad_dump_hex},
929*d6b92ffaSHans Petter Selasky {352, 64 * 8, "NodeDesc", mad_dump_string},
930*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_SA_NR_LAST_F */
931*d6b92ffaSHans Petter Selasky
932*d6b92ffaSHans Petter Selasky /*
933*d6b92ffaSHans Petter Selasky * PortMirrorRoute fields
934*d6b92ffaSHans Petter Selasky */
935*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "EncapRawEthType", mad_dump_hex},
936*d6b92ffaSHans Petter Selasky {BITSOFFS(20, 12), "MaxMirrorLen", mad_dump_hex},
937*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 3), "MT", mad_dump_hex},
938*d6b92ffaSHans Petter Selasky {BITSOFFS(35, 1), "BF", mad_dump_hex},
939*d6b92ffaSHans Petter Selasky {BITSOFFS(56, 8), "NMPort", mad_dump_hex},
940*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 4), "EncapLRHVL", mad_dump_hex},
941*d6b92ffaSHans Petter Selasky {BITSOFFS(68, 4), "EncapLRHLVer", mad_dump_hex},
942*d6b92ffaSHans Petter Selasky {BITSOFFS(72, 4), "EncapLRHSL", mad_dump_hex},
943*d6b92ffaSHans Petter Selasky {BITSOFFS(78, 2), "EncapLRHLNH", mad_dump_hex},
944*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "EncapLRHDLID", mad_dump_hex},
945*d6b92ffaSHans Petter Selasky {BITSOFFS(101, 11), "EncapLRHLength", mad_dump_hex},
946*d6b92ffaSHans Petter Selasky {BITSOFFS(112, 16), "EncapLRHSLID", mad_dump_hex},
947*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PMR_LAST_F */
948*d6b92ffaSHans Petter Selasky
949*d6b92ffaSHans Petter Selasky /*
950*d6b92ffaSHans Petter Selasky * PortMirrorFilter fields
951*d6b92ffaSHans Petter Selasky */
952*d6b92ffaSHans Petter Selasky {0, 32, "MirrorFilter0", mad_dump_hex},
953*d6b92ffaSHans Petter Selasky {32, 32, "MirrorFilter1", mad_dump_hex},
954*d6b92ffaSHans Petter Selasky {64, 32, "MirrorMask0", mad_dump_hex},
955*d6b92ffaSHans Petter Selasky {96, 32, "MirrorMask1", mad_dump_hex},
956*d6b92ffaSHans Petter Selasky {128, 32, "MirrorMask2", mad_dump_hex},
957*d6b92ffaSHans Petter Selasky {160, 32, "MirrorMask3", mad_dump_hex},
958*d6b92ffaSHans Petter Selasky {BITSOFFS(192, 1), "B0", mad_dump_hex},
959*d6b92ffaSHans Petter Selasky {BITSOFFS(196, 12), "MirrorMaskOffset0", mad_dump_hex},
960*d6b92ffaSHans Petter Selasky {BITSOFFS(208, 1), "B1", mad_dump_hex},
961*d6b92ffaSHans Petter Selasky {BITSOFFS(212, 12), "MirrorMaskOffset1", mad_dump_hex},
962*d6b92ffaSHans Petter Selasky {BITSOFFS(224, 1), "B2", mad_dump_hex},
963*d6b92ffaSHans Petter Selasky {BITSOFFS(228, 12), "MirrorMaskOffset2", mad_dump_hex},
964*d6b92ffaSHans Petter Selasky {BITSOFFS(240, 1), "B3", mad_dump_hex},
965*d6b92ffaSHans Petter Selasky {BITSOFFS(244, 12), "MirrorMaskOffset3", mad_dump_hex},
966*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PMF_LAST_F */
967*d6b92ffaSHans Petter Selasky
968*d6b92ffaSHans Petter Selasky /*
969*d6b92ffaSHans Petter Selasky * PortMirrorPorts fields
970*d6b92ffaSHans Petter Selasky */
971*d6b92ffaSHans Petter Selasky {BITSOFFS(10, 2), "TQ1", mad_dump_hex},
972*d6b92ffaSHans Petter Selasky {BITSOFFS(14, 2), "RQ1", mad_dump_hex},
973*d6b92ffaSHans Petter Selasky {BITSOFFS(18, 2), "TQ2", mad_dump_hex},
974*d6b92ffaSHans Petter Selasky {BITSOFFS(22, 2), "RQ2", mad_dump_hex},
975*d6b92ffaSHans Petter Selasky {BITSOFFS(26, 2), "TQ3", mad_dump_hex},
976*d6b92ffaSHans Petter Selasky {BITSOFFS(30, 2), "RQ3", mad_dump_hex},
977*d6b92ffaSHans Petter Selasky {BITSOFFS(34, 2), "TQ4", mad_dump_hex},
978*d6b92ffaSHans Petter Selasky {BITSOFFS(38, 2), "RQ4", mad_dump_hex},
979*d6b92ffaSHans Petter Selasky {BITSOFFS(42, 2), "TQ5", mad_dump_hex},
980*d6b92ffaSHans Petter Selasky {BITSOFFS(46, 2), "RQ5", mad_dump_hex},
981*d6b92ffaSHans Petter Selasky {BITSOFFS(50, 2), "TQ6", mad_dump_hex},
982*d6b92ffaSHans Petter Selasky {BITSOFFS(54, 2), "RQ6", mad_dump_hex},
983*d6b92ffaSHans Petter Selasky {BITSOFFS(58, 2), "TQ7", mad_dump_hex},
984*d6b92ffaSHans Petter Selasky {BITSOFFS(62, 2), "RQ7", mad_dump_hex},
985*d6b92ffaSHans Petter Selasky {BITSOFFS(66, 2), "TQ8", mad_dump_hex},
986*d6b92ffaSHans Petter Selasky {BITSOFFS(70, 2), "RQ8", mad_dump_hex},
987*d6b92ffaSHans Petter Selasky {BITSOFFS(74, 2), "TQ9", mad_dump_hex},
988*d6b92ffaSHans Petter Selasky {BITSOFFS(78, 2), "RQ9", mad_dump_hex},
989*d6b92ffaSHans Petter Selasky {BITSOFFS(82, 2), "TQ10", mad_dump_hex},
990*d6b92ffaSHans Petter Selasky {BITSOFFS(86, 2), "RQ10", mad_dump_hex},
991*d6b92ffaSHans Petter Selasky {BITSOFFS(90, 2), "TQ11", mad_dump_hex},
992*d6b92ffaSHans Petter Selasky {BITSOFFS(94, 2), "RQ11", mad_dump_hex},
993*d6b92ffaSHans Petter Selasky {BITSOFFS(98, 2), "TQ12", mad_dump_hex},
994*d6b92ffaSHans Petter Selasky {BITSOFFS(102, 2), "RQ12", mad_dump_hex},
995*d6b92ffaSHans Petter Selasky {BITSOFFS(106, 2), "TQ13", mad_dump_hex},
996*d6b92ffaSHans Petter Selasky {BITSOFFS(110, 2), "RQ13", mad_dump_hex},
997*d6b92ffaSHans Petter Selasky {BITSOFFS(114, 2), "TQ14", mad_dump_hex},
998*d6b92ffaSHans Petter Selasky {BITSOFFS(118, 2), "RQ14", mad_dump_hex},
999*d6b92ffaSHans Petter Selasky {BITSOFFS(122, 2), "TQ15", mad_dump_hex},
1000*d6b92ffaSHans Petter Selasky {BITSOFFS(126, 2), "RQ15", mad_dump_hex},
1001*d6b92ffaSHans Petter Selasky {BITSOFFS(130, 2), "TQ16", mad_dump_hex},
1002*d6b92ffaSHans Petter Selasky {BITSOFFS(134, 2), "RQ16", mad_dump_hex},
1003*d6b92ffaSHans Petter Selasky {BITSOFFS(138, 2), "TQ17", mad_dump_hex},
1004*d6b92ffaSHans Petter Selasky {BITSOFFS(142, 2), "RQ17", mad_dump_hex},
1005*d6b92ffaSHans Petter Selasky {BITSOFFS(146, 2), "TQ18", mad_dump_hex},
1006*d6b92ffaSHans Petter Selasky {BITSOFFS(150, 2), "RQ18", mad_dump_hex},
1007*d6b92ffaSHans Petter Selasky {BITSOFFS(154, 2), "TQ19", mad_dump_hex},
1008*d6b92ffaSHans Petter Selasky {BITSOFFS(158, 2), "RQ19", mad_dump_hex},
1009*d6b92ffaSHans Petter Selasky {BITSOFFS(162, 2), "TQ20", mad_dump_hex},
1010*d6b92ffaSHans Petter Selasky {BITSOFFS(166, 2), "RQ20", mad_dump_hex},
1011*d6b92ffaSHans Petter Selasky {BITSOFFS(170, 2), "TQ21", mad_dump_hex},
1012*d6b92ffaSHans Petter Selasky {BITSOFFS(174, 2), "RQ21", mad_dump_hex},
1013*d6b92ffaSHans Petter Selasky {BITSOFFS(178, 2), "TQ22", mad_dump_hex},
1014*d6b92ffaSHans Petter Selasky {BITSOFFS(182, 2), "RQ22", mad_dump_hex},
1015*d6b92ffaSHans Petter Selasky {BITSOFFS(186, 2), "TQ23", mad_dump_hex},
1016*d6b92ffaSHans Petter Selasky {BITSOFFS(190, 2), "RQ23", mad_dump_hex},
1017*d6b92ffaSHans Petter Selasky {BITSOFFS(194, 2), "TQ24", mad_dump_hex},
1018*d6b92ffaSHans Petter Selasky {BITSOFFS(198, 2), "RQ24", mad_dump_hex},
1019*d6b92ffaSHans Petter Selasky {BITSOFFS(202, 2), "TQ25", mad_dump_hex},
1020*d6b92ffaSHans Petter Selasky {BITSOFFS(206, 2), "RQ25", mad_dump_hex},
1021*d6b92ffaSHans Petter Selasky {BITSOFFS(210, 2), "TQ26", mad_dump_hex},
1022*d6b92ffaSHans Petter Selasky {BITSOFFS(214, 2), "RQ26", mad_dump_hex},
1023*d6b92ffaSHans Petter Selasky {BITSOFFS(218, 2), "TQ27", mad_dump_hex},
1024*d6b92ffaSHans Petter Selasky {BITSOFFS(222, 2), "RQ27", mad_dump_hex},
1025*d6b92ffaSHans Petter Selasky {BITSOFFS(226, 2), "TQ28", mad_dump_hex},
1026*d6b92ffaSHans Petter Selasky {BITSOFFS(230, 2), "RQ28", mad_dump_hex},
1027*d6b92ffaSHans Petter Selasky {BITSOFFS(234, 2), "TQ29", mad_dump_hex},
1028*d6b92ffaSHans Petter Selasky {BITSOFFS(238, 2), "RQ29", mad_dump_hex},
1029*d6b92ffaSHans Petter Selasky {BITSOFFS(242, 2), "TQ30", mad_dump_hex},
1030*d6b92ffaSHans Petter Selasky {BITSOFFS(246, 2), "RQ30", mad_dump_hex},
1031*d6b92ffaSHans Petter Selasky {BITSOFFS(250, 2), "TQ31", mad_dump_hex},
1032*d6b92ffaSHans Petter Selasky {BITSOFFS(254, 2), "RQ31", mad_dump_hex},
1033*d6b92ffaSHans Petter Selasky {BITSOFFS(258, 2), "TQ32", mad_dump_hex},
1034*d6b92ffaSHans Petter Selasky {BITSOFFS(262, 2), "RQ32", mad_dump_hex},
1035*d6b92ffaSHans Petter Selasky {BITSOFFS(266, 2), "TQ33", mad_dump_hex},
1036*d6b92ffaSHans Petter Selasky {BITSOFFS(270, 2), "RQ33", mad_dump_hex},
1037*d6b92ffaSHans Petter Selasky {BITSOFFS(274, 2), "TQ34", mad_dump_hex},
1038*d6b92ffaSHans Petter Selasky {BITSOFFS(278, 2), "RQ34", mad_dump_hex},
1039*d6b92ffaSHans Petter Selasky {BITSOFFS(282, 2), "TQ35", mad_dump_hex},
1040*d6b92ffaSHans Petter Selasky {BITSOFFS(286, 2), "RQ35", mad_dump_hex},
1041*d6b92ffaSHans Petter Selasky {BITSOFFS(290, 2), "TQ36", mad_dump_hex},
1042*d6b92ffaSHans Petter Selasky {BITSOFFS(294, 2), "RQ36", mad_dump_hex},
1043*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_FIELD_LAST_ */
1044*d6b92ffaSHans Petter Selasky
1045*d6b92ffaSHans Petter Selasky /*
1046*d6b92ffaSHans Petter Selasky * PortSamplesResult fields
1047*d6b92ffaSHans Petter Selasky */
1048*d6b92ffaSHans Petter Selasky {BITSOFFS(0, 16), "Tag", mad_dump_hex},
1049*d6b92ffaSHans Petter Selasky {BITSOFFS(30, 2), "SampleStatus", mad_dump_hex},
1050*d6b92ffaSHans Petter Selasky {32, 32, "Counter0", mad_dump_uint},
1051*d6b92ffaSHans Petter Selasky {64, 32, "Counter1", mad_dump_uint},
1052*d6b92ffaSHans Petter Selasky {96, 32, "Counter2", mad_dump_uint},
1053*d6b92ffaSHans Petter Selasky {128, 32, "Counter3", mad_dump_uint},
1054*d6b92ffaSHans Petter Selasky {160, 32, "Counter4", mad_dump_uint},
1055*d6b92ffaSHans Petter Selasky {192, 32, "Counter5", mad_dump_uint},
1056*d6b92ffaSHans Petter Selasky {224, 32, "Counter6", mad_dump_uint},
1057*d6b92ffaSHans Petter Selasky {256, 32, "Counter7", mad_dump_uint},
1058*d6b92ffaSHans Petter Selasky {288, 32, "Counter8", mad_dump_uint},
1059*d6b92ffaSHans Petter Selasky {320, 32, "Counter9", mad_dump_uint},
1060*d6b92ffaSHans Petter Selasky {352, 32, "Counter10", mad_dump_uint},
1061*d6b92ffaSHans Petter Selasky {384, 32, "Counter11", mad_dump_uint},
1062*d6b92ffaSHans Petter Selasky {416, 32, "Counter12", mad_dump_uint},
1063*d6b92ffaSHans Petter Selasky {448, 32, "Counter13", mad_dump_uint},
1064*d6b92ffaSHans Petter Selasky {480, 32, "Counter14", mad_dump_uint},
1065*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PSR_LAST_F */
1066*d6b92ffaSHans Petter Selasky
1067*d6b92ffaSHans Petter Selasky /*
1068*d6b92ffaSHans Petter Selasky * PortInfoExtended fields
1069*d6b92ffaSHans Petter Selasky */
1070*d6b92ffaSHans Petter Selasky {0, 32, "CapMask", mad_dump_hex},
1071*d6b92ffaSHans Petter Selasky {BITSOFFS(32, 16), "FECModeActive", mad_dump_uint},
1072*d6b92ffaSHans Petter Selasky {BITSOFFS(48, 16), "FDRFECModeSupported", mad_dump_uint},
1073*d6b92ffaSHans Petter Selasky {BITSOFFS(64, 16), "FDRFECModeEnabled", mad_dump_uint},
1074*d6b92ffaSHans Petter Selasky {BITSOFFS(80, 16), "EDRFECModeSupported", mad_dump_uint},
1075*d6b92ffaSHans Petter Selasky {BITSOFFS(96, 16), "EDRFECModeEnabled", mad_dump_uint},
1076*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PORT_EXT_LAST_F */
1077*d6b92ffaSHans Petter Selasky
1078*d6b92ffaSHans Petter Selasky /*
1079*d6b92ffaSHans Petter Selasky * PortExtendedSpeedsCounters RSFEC Active fields
1080*d6b92ffaSHans Petter Selasky */
1081*d6b92ffaSHans Petter Selasky {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
1082*d6b92ffaSHans Petter Selasky {64, 64, "CounterSelect", mad_dump_hex},
1083*d6b92ffaSHans Petter Selasky {BITSOFFS(128, 16), "SyncHeaderErrorCounter", mad_dump_uint},
1084*d6b92ffaSHans Petter Selasky {BITSOFFS(144, 16), "UnknownBlockCounter", mad_dump_uint},
1085*d6b92ffaSHans Petter Selasky {352, 32, "FECCorrectableSymbolCtrLane0", mad_dump_uint},
1086*d6b92ffaSHans Petter Selasky {384, 32, "FECCorrectableSymbolCtrLane1", mad_dump_uint},
1087*d6b92ffaSHans Petter Selasky {416, 32, "FECCorrectableSymbolCtrLane2", mad_dump_uint},
1088*d6b92ffaSHans Petter Selasky {448, 32, "FECCorrectableSymbolCtrLane3", mad_dump_uint},
1089*d6b92ffaSHans Petter Selasky {480, 32, "FECCorrectableSymbolCtrLane4", mad_dump_uint},
1090*d6b92ffaSHans Petter Selasky {512, 32, "FECCorrectableSymbolCtrLane5", mad_dump_uint},
1091*d6b92ffaSHans Petter Selasky {544, 32, "FECCorrectableSymbolCtrLane6", mad_dump_uint},
1092*d6b92ffaSHans Petter Selasky {576, 32, "FECCorrectableSymbolCtrLane7", mad_dump_uint},
1093*d6b92ffaSHans Petter Selasky {608, 32, "FECCorrectableSymbolCtrLane8", mad_dump_uint},
1094*d6b92ffaSHans Petter Selasky {640, 32, "FECCorrectableSymbolCtrLane9", mad_dump_uint},
1095*d6b92ffaSHans Petter Selasky {672, 32, "FECCorrectableSymbolCtrLane10", mad_dump_uint},
1096*d6b92ffaSHans Petter Selasky {704, 32, "FECCorrectableSymbolCtrLane11", mad_dump_uint},
1097*d6b92ffaSHans Petter Selasky {1120, 32, "PortFECCorrectableBlockCtr", mad_dump_uint},
1098*d6b92ffaSHans Petter Selasky {1152, 32, "PortFECUncorrectableBlockCtr", mad_dump_uint},
1099*d6b92ffaSHans Petter Selasky {1184, 32, "PortFECCorrectedSymbolCtr", mad_dump_uint},
1100*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PESC_RSFEC_LAST_F */
1101*d6b92ffaSHans Petter Selasky
1102*d6b92ffaSHans Petter Selasky /*
1103*d6b92ffaSHans Petter Selasky * More PortCountersExtended fields
1104*d6b92ffaSHans Petter Selasky */
1105*d6b92ffaSHans Petter Selasky {32, 32, "CounterSelect2", mad_dump_hex},
1106*d6b92ffaSHans Petter Selasky {576, 64, "SymbolErrorCounter", mad_dump_uint},
1107*d6b92ffaSHans Petter Selasky {640, 64, "LinkErrorRecoveryCounter", mad_dump_uint},
1108*d6b92ffaSHans Petter Selasky {704, 64, "LinkDownedCounter", mad_dump_uint},
1109*d6b92ffaSHans Petter Selasky {768, 64, "PortRcvErrors", mad_dump_uint},
1110*d6b92ffaSHans Petter Selasky {832, 64, "PortRcvRemotePhysicalErrors", mad_dump_uint},
1111*d6b92ffaSHans Petter Selasky {896, 64, "PortRcvSwitchRelayErrors", mad_dump_uint},
1112*d6b92ffaSHans Petter Selasky {960, 64, "PortXmitDiscards", mad_dump_uint},
1113*d6b92ffaSHans Petter Selasky {1024, 64, "PortXmitConstraintErrors", mad_dump_uint},
1114*d6b92ffaSHans Petter Selasky {1088, 64, "PortRcvConstraintErrors", mad_dump_uint},
1115*d6b92ffaSHans Petter Selasky {1152, 64, "LocalLinkIntegrityErrors", mad_dump_uint},
1116*d6b92ffaSHans Petter Selasky {1216, 64, "ExcessiveBufferOverrunErrors", mad_dump_uint},
1117*d6b92ffaSHans Petter Selasky {1280, 64, "VL15Dropped", mad_dump_uint},
1118*d6b92ffaSHans Petter Selasky {1344, 64, "PortXmitWait", mad_dump_uint},
1119*d6b92ffaSHans Petter Selasky {1408, 64, "QP1Dropped", mad_dump_uint},
1120*d6b92ffaSHans Petter Selasky {0, 0}, /* IB_PC_EXT_ERR_LAST_F */
1121*d6b92ffaSHans Petter Selasky
1122*d6b92ffaSHans Petter Selasky /*
1123*d6b92ffaSHans Petter Selasky * Another PortCounters field
1124*d6b92ffaSHans Petter Selasky */
1125*d6b92ffaSHans Petter Selasky {160, 16, "QP1Dropped", mad_dump_uint},
1126*d6b92ffaSHans Petter Selasky
1127*d6b92ffaSHans Petter Selasky {0, 0} /* IB_FIELD_LAST_ */
1128*d6b92ffaSHans Petter Selasky };
1129*d6b92ffaSHans Petter Selasky
_set_field64(void * buf,int base_offs,const ib_field_t * f,uint64_t val)1130*d6b92ffaSHans Petter Selasky static void _set_field64(void *buf, int base_offs, const ib_field_t * f,
1131*d6b92ffaSHans Petter Selasky uint64_t val)
1132*d6b92ffaSHans Petter Selasky {
1133*d6b92ffaSHans Petter Selasky uint64_t nval;
1134*d6b92ffaSHans Petter Selasky
1135*d6b92ffaSHans Petter Selasky nval = htonll(val);
1136*d6b92ffaSHans Petter Selasky memcpy(((void *)(char *)buf + base_offs + f->bitoffs / 8),
1137*d6b92ffaSHans Petter Selasky (void *)&nval, sizeof(uint64_t));
1138*d6b92ffaSHans Petter Selasky }
1139*d6b92ffaSHans Petter Selasky
_get_field64(void * buf,int base_offs,const ib_field_t * f)1140*d6b92ffaSHans Petter Selasky static uint64_t _get_field64(void *buf, int base_offs, const ib_field_t * f)
1141*d6b92ffaSHans Petter Selasky {
1142*d6b92ffaSHans Petter Selasky uint64_t val;
1143*d6b92ffaSHans Petter Selasky memcpy((void *)&val, (void *)((char *)buf + base_offs + f->bitoffs / 8),
1144*d6b92ffaSHans Petter Selasky sizeof(uint64_t));
1145*d6b92ffaSHans Petter Selasky return ntohll(val);
1146*d6b92ffaSHans Petter Selasky }
1147*d6b92ffaSHans Petter Selasky
_set_field(void * buf,int base_offs,const ib_field_t * f,uint32_t val)1148*d6b92ffaSHans Petter Selasky static void _set_field(void *buf, int base_offs, const ib_field_t * f,
1149*d6b92ffaSHans Petter Selasky uint32_t val)
1150*d6b92ffaSHans Petter Selasky {
1151*d6b92ffaSHans Petter Selasky int prebits = (8 - (f->bitoffs & 7)) & 7;
1152*d6b92ffaSHans Petter Selasky int postbits = (f->bitoffs + f->bitlen) & 7;
1153*d6b92ffaSHans Petter Selasky int bytelen = f->bitlen / 8;
1154*d6b92ffaSHans Petter Selasky unsigned idx = base_offs + f->bitoffs / 8;
1155*d6b92ffaSHans Petter Selasky char *p = (char *)buf;
1156*d6b92ffaSHans Petter Selasky
1157*d6b92ffaSHans Petter Selasky if (!bytelen && (f->bitoffs & 7) + f->bitlen < 8) {
1158*d6b92ffaSHans Petter Selasky p[3 ^ idx] &= ~((((1 << f->bitlen) - 1)) << (f->bitoffs & 7));
1159*d6b92ffaSHans Petter Selasky p[3 ^ idx] |=
1160*d6b92ffaSHans Petter Selasky (val & ((1 << f->bitlen) - 1)) << (f->bitoffs & 7);
1161*d6b92ffaSHans Petter Selasky return;
1162*d6b92ffaSHans Petter Selasky }
1163*d6b92ffaSHans Petter Selasky
1164*d6b92ffaSHans Petter Selasky if (prebits) { /* val lsb in byte msb */
1165*d6b92ffaSHans Petter Selasky p[3 ^ idx] &= (1 << (8 - prebits)) - 1;
1166*d6b92ffaSHans Petter Selasky p[3 ^ idx++] |= (val & ((1 << prebits) - 1)) << (8 - prebits);
1167*d6b92ffaSHans Petter Selasky val >>= prebits;
1168*d6b92ffaSHans Petter Selasky }
1169*d6b92ffaSHans Petter Selasky
1170*d6b92ffaSHans Petter Selasky /* BIG endian byte order */
1171*d6b92ffaSHans Petter Selasky for (; bytelen--; val >>= 8)
1172*d6b92ffaSHans Petter Selasky p[3 ^ idx++] = val & 0xff;
1173*d6b92ffaSHans Petter Selasky
1174*d6b92ffaSHans Petter Selasky if (postbits) { /* val msb in byte lsb */
1175*d6b92ffaSHans Petter Selasky p[3 ^ idx] &= ~((1 << postbits) - 1);
1176*d6b92ffaSHans Petter Selasky p[3 ^ idx] |= val;
1177*d6b92ffaSHans Petter Selasky }
1178*d6b92ffaSHans Petter Selasky }
1179*d6b92ffaSHans Petter Selasky
_get_field(void * buf,int base_offs,const ib_field_t * f)1180*d6b92ffaSHans Petter Selasky static uint32_t _get_field(void *buf, int base_offs, const ib_field_t * f)
1181*d6b92ffaSHans Petter Selasky {
1182*d6b92ffaSHans Petter Selasky int prebits = (8 - (f->bitoffs & 7)) & 7;
1183*d6b92ffaSHans Petter Selasky int postbits = (f->bitoffs + f->bitlen) & 7;
1184*d6b92ffaSHans Petter Selasky int bytelen = f->bitlen / 8;
1185*d6b92ffaSHans Petter Selasky unsigned idx = base_offs + f->bitoffs / 8;
1186*d6b92ffaSHans Petter Selasky uint8_t *p = (uint8_t *) buf;
1187*d6b92ffaSHans Petter Selasky uint32_t val = 0, v = 0, i;
1188*d6b92ffaSHans Petter Selasky
1189*d6b92ffaSHans Petter Selasky if (!bytelen && (f->bitoffs & 7) + f->bitlen < 8)
1190*d6b92ffaSHans Petter Selasky return (p[3 ^ idx] >> (f->bitoffs & 7)) & ((1 << f->bitlen) -
1191*d6b92ffaSHans Petter Selasky 1);
1192*d6b92ffaSHans Petter Selasky
1193*d6b92ffaSHans Petter Selasky if (prebits) /* val lsb from byte msb */
1194*d6b92ffaSHans Petter Selasky v = p[3 ^ idx++] >> (8 - prebits);
1195*d6b92ffaSHans Petter Selasky
1196*d6b92ffaSHans Petter Selasky if (postbits) { /* val msb from byte lsb */
1197*d6b92ffaSHans Petter Selasky i = base_offs + (f->bitoffs + f->bitlen) / 8;
1198*d6b92ffaSHans Petter Selasky val = (p[3 ^ i] & ((1 << postbits) - 1));
1199*d6b92ffaSHans Petter Selasky }
1200*d6b92ffaSHans Petter Selasky
1201*d6b92ffaSHans Petter Selasky /* BIG endian byte order */
1202*d6b92ffaSHans Petter Selasky for (idx += bytelen - 1; bytelen--; idx--)
1203*d6b92ffaSHans Petter Selasky val = (val << 8) | p[3 ^ idx];
1204*d6b92ffaSHans Petter Selasky
1205*d6b92ffaSHans Petter Selasky return (val << prebits) | v;
1206*d6b92ffaSHans Petter Selasky }
1207*d6b92ffaSHans Petter Selasky
1208*d6b92ffaSHans Petter Selasky /* field must be byte aligned */
_set_array(void * buf,int base_offs,const ib_field_t * f,void * val)1209*d6b92ffaSHans Petter Selasky static void _set_array(void *buf, int base_offs, const ib_field_t * f,
1210*d6b92ffaSHans Petter Selasky void *val)
1211*d6b92ffaSHans Petter Selasky {
1212*d6b92ffaSHans Petter Selasky int bitoffs = f->bitoffs;
1213*d6b92ffaSHans Petter Selasky
1214*d6b92ffaSHans Petter Selasky if (f->bitlen < 32)
1215*d6b92ffaSHans Petter Selasky bitoffs = BE_TO_BITSOFFS(bitoffs, f->bitlen);
1216*d6b92ffaSHans Petter Selasky
1217*d6b92ffaSHans Petter Selasky memcpy((uint8_t *) buf + base_offs + bitoffs / 8, val, f->bitlen / 8);
1218*d6b92ffaSHans Petter Selasky }
1219*d6b92ffaSHans Petter Selasky
_get_array(void * buf,int base_offs,const ib_field_t * f,void * val)1220*d6b92ffaSHans Petter Selasky static void _get_array(void *buf, int base_offs, const ib_field_t * f,
1221*d6b92ffaSHans Petter Selasky void *val)
1222*d6b92ffaSHans Petter Selasky {
1223*d6b92ffaSHans Petter Selasky int bitoffs = f->bitoffs;
1224*d6b92ffaSHans Petter Selasky
1225*d6b92ffaSHans Petter Selasky if (f->bitlen < 32)
1226*d6b92ffaSHans Petter Selasky bitoffs = BE_TO_BITSOFFS(bitoffs, f->bitlen);
1227*d6b92ffaSHans Petter Selasky
1228*d6b92ffaSHans Petter Selasky memcpy(val, (uint8_t *) buf + base_offs + bitoffs / 8, f->bitlen / 8);
1229*d6b92ffaSHans Petter Selasky }
1230*d6b92ffaSHans Petter Selasky
mad_get_field(void * buf,int base_offs,enum MAD_FIELDS field)1231*d6b92ffaSHans Petter Selasky uint32_t mad_get_field(void *buf, int base_offs, enum MAD_FIELDS field)
1232*d6b92ffaSHans Petter Selasky {
1233*d6b92ffaSHans Petter Selasky return _get_field(buf, base_offs, ib_mad_f + field);
1234*d6b92ffaSHans Petter Selasky }
1235*d6b92ffaSHans Petter Selasky
mad_set_field(void * buf,int base_offs,enum MAD_FIELDS field,uint32_t val)1236*d6b92ffaSHans Petter Selasky void mad_set_field(void *buf, int base_offs, enum MAD_FIELDS field,
1237*d6b92ffaSHans Petter Selasky uint32_t val)
1238*d6b92ffaSHans Petter Selasky {
1239*d6b92ffaSHans Petter Selasky _set_field(buf, base_offs, ib_mad_f + field, val);
1240*d6b92ffaSHans Petter Selasky }
1241*d6b92ffaSHans Petter Selasky
mad_get_field64(void * buf,int base_offs,enum MAD_FIELDS field)1242*d6b92ffaSHans Petter Selasky uint64_t mad_get_field64(void *buf, int base_offs, enum MAD_FIELDS field)
1243*d6b92ffaSHans Petter Selasky {
1244*d6b92ffaSHans Petter Selasky return _get_field64(buf, base_offs, ib_mad_f + field);
1245*d6b92ffaSHans Petter Selasky }
1246*d6b92ffaSHans Petter Selasky
mad_set_field64(void * buf,int base_offs,enum MAD_FIELDS field,uint64_t val)1247*d6b92ffaSHans Petter Selasky void mad_set_field64(void *buf, int base_offs, enum MAD_FIELDS field,
1248*d6b92ffaSHans Petter Selasky uint64_t val)
1249*d6b92ffaSHans Petter Selasky {
1250*d6b92ffaSHans Petter Selasky _set_field64(buf, base_offs, ib_mad_f + field, val);
1251*d6b92ffaSHans Petter Selasky }
1252*d6b92ffaSHans Petter Selasky
mad_set_array(void * buf,int base_offs,enum MAD_FIELDS field,void * val)1253*d6b92ffaSHans Petter Selasky void mad_set_array(void *buf, int base_offs, enum MAD_FIELDS field, void *val)
1254*d6b92ffaSHans Petter Selasky {
1255*d6b92ffaSHans Petter Selasky _set_array(buf, base_offs, ib_mad_f + field, val);
1256*d6b92ffaSHans Petter Selasky }
1257*d6b92ffaSHans Petter Selasky
mad_get_array(void * buf,int base_offs,enum MAD_FIELDS field,void * val)1258*d6b92ffaSHans Petter Selasky void mad_get_array(void *buf, int base_offs, enum MAD_FIELDS field, void *val)
1259*d6b92ffaSHans Petter Selasky {
1260*d6b92ffaSHans Petter Selasky _get_array(buf, base_offs, ib_mad_f + field, val);
1261*d6b92ffaSHans Petter Selasky }
1262*d6b92ffaSHans Petter Selasky
mad_decode_field(uint8_t * buf,enum MAD_FIELDS field,void * val)1263*d6b92ffaSHans Petter Selasky void mad_decode_field(uint8_t * buf, enum MAD_FIELDS field, void *val)
1264*d6b92ffaSHans Petter Selasky {
1265*d6b92ffaSHans Petter Selasky const ib_field_t *f = ib_mad_f + field;
1266*d6b92ffaSHans Petter Selasky
1267*d6b92ffaSHans Petter Selasky if (!field) {
1268*d6b92ffaSHans Petter Selasky *(int *)val = *(int *)buf;
1269*d6b92ffaSHans Petter Selasky return;
1270*d6b92ffaSHans Petter Selasky }
1271*d6b92ffaSHans Petter Selasky if (f->bitlen <= 32) {
1272*d6b92ffaSHans Petter Selasky *(uint32_t *) val = _get_field(buf, 0, f);
1273*d6b92ffaSHans Petter Selasky return;
1274*d6b92ffaSHans Petter Selasky }
1275*d6b92ffaSHans Petter Selasky if (f->bitlen == 64) {
1276*d6b92ffaSHans Petter Selasky *(uint64_t *) val = _get_field64(buf, 0, f);
1277*d6b92ffaSHans Petter Selasky return;
1278*d6b92ffaSHans Petter Selasky }
1279*d6b92ffaSHans Petter Selasky _get_array(buf, 0, f, val);
1280*d6b92ffaSHans Petter Selasky }
1281*d6b92ffaSHans Petter Selasky
mad_encode_field(uint8_t * buf,enum MAD_FIELDS field,void * val)1282*d6b92ffaSHans Petter Selasky void mad_encode_field(uint8_t * buf, enum MAD_FIELDS field, void *val)
1283*d6b92ffaSHans Petter Selasky {
1284*d6b92ffaSHans Petter Selasky const ib_field_t *f = ib_mad_f + field;
1285*d6b92ffaSHans Petter Selasky
1286*d6b92ffaSHans Petter Selasky if (!field) {
1287*d6b92ffaSHans Petter Selasky *(int *)buf = *(int *)val;
1288*d6b92ffaSHans Petter Selasky return;
1289*d6b92ffaSHans Petter Selasky }
1290*d6b92ffaSHans Petter Selasky if (f->bitlen <= 32) {
1291*d6b92ffaSHans Petter Selasky _set_field(buf, 0, f, *(uint32_t *) val);
1292*d6b92ffaSHans Petter Selasky return;
1293*d6b92ffaSHans Petter Selasky }
1294*d6b92ffaSHans Petter Selasky if (f->bitlen == 64) {
1295*d6b92ffaSHans Petter Selasky _set_field64(buf, 0, f, *(uint64_t *) val);
1296*d6b92ffaSHans Petter Selasky return;
1297*d6b92ffaSHans Petter Selasky }
1298*d6b92ffaSHans Petter Selasky _set_array(buf, 0, f, val);
1299*d6b92ffaSHans Petter Selasky }
1300*d6b92ffaSHans Petter Selasky
1301*d6b92ffaSHans Petter Selasky /************************/
1302*d6b92ffaSHans Petter Selasky
_mad_dump_val(const ib_field_t * f,char * buf,int bufsz,void * val)1303*d6b92ffaSHans Petter Selasky static char *_mad_dump_val(const ib_field_t * f, char *buf, int bufsz,
1304*d6b92ffaSHans Petter Selasky void *val)
1305*d6b92ffaSHans Petter Selasky {
1306*d6b92ffaSHans Petter Selasky f->def_dump_fn(buf, bufsz, val, ALIGN(f->bitlen, 8) / 8);
1307*d6b92ffaSHans Petter Selasky buf[bufsz - 1] = 0;
1308*d6b92ffaSHans Petter Selasky
1309*d6b92ffaSHans Petter Selasky return buf;
1310*d6b92ffaSHans Petter Selasky }
1311*d6b92ffaSHans Petter Selasky
_mad_dump_field(const ib_field_t * f,const char * name,char * buf,int bufsz,void * val)1312*d6b92ffaSHans Petter Selasky static char *_mad_dump_field(const ib_field_t * f, const char *name, char *buf,
1313*d6b92ffaSHans Petter Selasky int bufsz, void *val)
1314*d6b92ffaSHans Petter Selasky {
1315*d6b92ffaSHans Petter Selasky char dots[128];
1316*d6b92ffaSHans Petter Selasky int l, n;
1317*d6b92ffaSHans Petter Selasky
1318*d6b92ffaSHans Petter Selasky if (bufsz <= 32)
1319*d6b92ffaSHans Petter Selasky return NULL; /* buf too small */
1320*d6b92ffaSHans Petter Selasky
1321*d6b92ffaSHans Petter Selasky if (!name)
1322*d6b92ffaSHans Petter Selasky name = f->name;
1323*d6b92ffaSHans Petter Selasky
1324*d6b92ffaSHans Petter Selasky l = strlen(name);
1325*d6b92ffaSHans Petter Selasky if (l < 32) {
1326*d6b92ffaSHans Petter Selasky memset(dots, '.', 32 - l);
1327*d6b92ffaSHans Petter Selasky dots[32 - l] = 0;
1328*d6b92ffaSHans Petter Selasky }
1329*d6b92ffaSHans Petter Selasky
1330*d6b92ffaSHans Petter Selasky n = snprintf(buf, bufsz, "%s:%s", name, dots);
1331*d6b92ffaSHans Petter Selasky _mad_dump_val(f, buf + n, bufsz - n, val);
1332*d6b92ffaSHans Petter Selasky buf[bufsz - 1] = 0;
1333*d6b92ffaSHans Petter Selasky
1334*d6b92ffaSHans Petter Selasky return buf;
1335*d6b92ffaSHans Petter Selasky }
1336*d6b92ffaSHans Petter Selasky
_mad_dump(ib_mad_dump_fn * fn,const char * name,void * val,int valsz)1337*d6b92ffaSHans Petter Selasky static int _mad_dump(ib_mad_dump_fn * fn, const char *name, void *val,
1338*d6b92ffaSHans Petter Selasky int valsz)
1339*d6b92ffaSHans Petter Selasky {
1340*d6b92ffaSHans Petter Selasky ib_field_t f;
1341*d6b92ffaSHans Petter Selasky char buf[512];
1342*d6b92ffaSHans Petter Selasky
1343*d6b92ffaSHans Petter Selasky f.def_dump_fn = fn;
1344*d6b92ffaSHans Petter Selasky f.bitlen = valsz * 8;
1345*d6b92ffaSHans Petter Selasky
1346*d6b92ffaSHans Petter Selasky return printf("%s\n", _mad_dump_field(&f, name, buf, sizeof buf, val));
1347*d6b92ffaSHans Petter Selasky }
1348*d6b92ffaSHans Petter Selasky
_mad_print_field(const ib_field_t * f,const char * name,void * val,int valsz)1349*d6b92ffaSHans Petter Selasky static int _mad_print_field(const ib_field_t * f, const char *name, void *val,
1350*d6b92ffaSHans Petter Selasky int valsz)
1351*d6b92ffaSHans Petter Selasky {
1352*d6b92ffaSHans Petter Selasky return _mad_dump(f->def_dump_fn, name ? name : f->name, val,
1353*d6b92ffaSHans Petter Selasky valsz ? valsz : ALIGN(f->bitlen, 8) / 8);
1354*d6b92ffaSHans Petter Selasky }
1355*d6b92ffaSHans Petter Selasky
mad_print_field(enum MAD_FIELDS field,const char * name,void * val)1356*d6b92ffaSHans Petter Selasky int mad_print_field(enum MAD_FIELDS field, const char *name, void *val)
1357*d6b92ffaSHans Petter Selasky {
1358*d6b92ffaSHans Petter Selasky if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
1359*d6b92ffaSHans Petter Selasky return -1;
1360*d6b92ffaSHans Petter Selasky return _mad_print_field(ib_mad_f + field, name, val, 0);
1361*d6b92ffaSHans Petter Selasky }
1362*d6b92ffaSHans Petter Selasky
mad_dump_field(enum MAD_FIELDS field,char * buf,int bufsz,void * val)1363*d6b92ffaSHans Petter Selasky char *mad_dump_field(enum MAD_FIELDS field, char *buf, int bufsz, void *val)
1364*d6b92ffaSHans Petter Selasky {
1365*d6b92ffaSHans Petter Selasky if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
1366*d6b92ffaSHans Petter Selasky return NULL;
1367*d6b92ffaSHans Petter Selasky return _mad_dump_field(ib_mad_f + field, 0, buf, bufsz, val);
1368*d6b92ffaSHans Petter Selasky }
1369*d6b92ffaSHans Petter Selasky
mad_dump_val(enum MAD_FIELDS field,char * buf,int bufsz,void * val)1370*d6b92ffaSHans Petter Selasky char *mad_dump_val(enum MAD_FIELDS field, char *buf, int bufsz, void *val)
1371*d6b92ffaSHans Petter Selasky {
1372*d6b92ffaSHans Petter Selasky if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
1373*d6b92ffaSHans Petter Selasky return NULL;
1374*d6b92ffaSHans Petter Selasky return _mad_dump_val(ib_mad_f + field, buf, bufsz, val);
1375*d6b92ffaSHans Petter Selasky }
1376*d6b92ffaSHans Petter Selasky
mad_field_name(enum MAD_FIELDS field)1377*d6b92ffaSHans Petter Selasky const char *mad_field_name(enum MAD_FIELDS field)
1378*d6b92ffaSHans Petter Selasky {
1379*d6b92ffaSHans Petter Selasky return (ib_mad_f[field].name);
1380*d6b92ffaSHans Petter Selasky }
1381