2 * Copyright (c) 2004-2009 Voltaire Inc. All rights reserved.
3 * Copyright (c) 2007 Xsigo Systems Inc. All rights reserved.
4 * Copyright (c) 2009-2011 Mellanox Technologies LTD. All rights reserved.
5 * Copyright (c) 2009 HNR Consulting. All rights reserved.
7 * This software is available to you under a choice of one of two
8 * licenses. You may choose to be licensed under the terms of the GNU
9 * General Public License (GPL) Version 2, available from the file
10 * COPYING in the main directory of this source tree, or the
11 * OpenIB.org BSD license below:
13 * Redistribution and use in source and binary forms, with or
14 * without modification, are permitted provided that the following
17 * - Redistributions of source code must retain the above
18 * copyright notice, this list of conditions and the following
21 * - Redistributions in binary form must reproduce the above
22 * copyright notice, this list of conditions and the following
23 * disclaimer in the documentation and/or other materials
24 * provided with the distribution.
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39 #endif /* HAVE_CONFIG_H */
45 #include <infiniband/mad.h>
47 void mad_dump_int(char *buf, int bufsz, void *val, int valsz)
51 snprintf(buf, bufsz, "%d", *(uint32_t *) val & 0xff);
54 snprintf(buf, bufsz, "%d", *(uint32_t *) val & 0xffff);
58 snprintf(buf, bufsz, "%d", *(uint32_t *) val);
64 snprintf(buf, bufsz, "%" PRIu64, *(uint64_t *) val);
67 IBWARN("bad int sz %d", valsz);
72 void mad_dump_uint(char *buf, int bufsz, void *val, int valsz)
76 snprintf(buf, bufsz, "%u", *(uint32_t *) val & 0xff);
79 snprintf(buf, bufsz, "%u", *(uint32_t *) val & 0xffff);
83 snprintf(buf, bufsz, "%u", *(uint32_t *) val);
89 snprintf(buf, bufsz, "%" PRIu64, *(uint64_t *) val);
92 IBWARN("bad int sz %u", valsz);
97 void mad_dump_hex(char *buf, int bufsz, void *val, int valsz)
101 snprintf(buf, bufsz, "0x%02x", *(uint32_t *) val & 0xff);
104 snprintf(buf, bufsz, "0x%04x", *(uint32_t *) val & 0xffff);
107 snprintf(buf, bufsz, "0x%06x", *(uint32_t *) val & 0xffffff);
110 snprintf(buf, bufsz, "0x%08x", *(uint32_t *) val);
113 snprintf(buf, bufsz, "0x%010" PRIx64,
114 *(uint64_t *) val & (uint64_t) 0xffffffffffULL);
117 snprintf(buf, bufsz, "0x%012" PRIx64,
118 *(uint64_t *) val & (uint64_t) 0xffffffffffffULL);
121 snprintf(buf, bufsz, "0x%014" PRIx64,
122 *(uint64_t *) val & (uint64_t) 0xffffffffffffffULL);
125 snprintf(buf, bufsz, "0x%016" PRIx64, *(uint64_t *) val);
128 IBWARN("bad int sz %d", valsz);
133 void mad_dump_rhex(char *buf, int bufsz, void *val, int valsz)
137 snprintf(buf, bufsz, "%02x", *(uint32_t *) val & 0xff);
140 snprintf(buf, bufsz, "%04x", *(uint32_t *) val & 0xffff);
143 snprintf(buf, bufsz, "%06x", *(uint32_t *) val & 0xffffff);
146 snprintf(buf, bufsz, "%08x", *(uint32_t *) val);
149 snprintf(buf, bufsz, "%010" PRIx64,
150 *(uint64_t *) val & (uint64_t) 0xffffffffffULL);
153 snprintf(buf, bufsz, "%012" PRIx64,
154 *(uint64_t *) val & (uint64_t) 0xffffffffffffULL);
157 snprintf(buf, bufsz, "%014" PRIx64,
158 *(uint64_t *) val & (uint64_t) 0xffffffffffffffULL);
161 snprintf(buf, bufsz, "%016" PRIx64, *(uint64_t *) val);
164 IBWARN("bad int sz %d", valsz);
169 void mad_dump_linkwidth(char *buf, int bufsz, void *val, int valsz)
171 int width = *(int *)val;
175 snprintf(buf, bufsz, "1X");
178 snprintf(buf, bufsz, "4X");
181 snprintf(buf, bufsz, "8X");
184 snprintf(buf, bufsz, "12X");
187 snprintf(buf, bufsz, "2X");
190 IBWARN("bad width %d", width);
191 snprintf(buf, bufsz, "undefined (%d)", width);
196 static void dump_linkwidth(char *buf, int bufsz, int width)
201 n += snprintf(buf + n, bufsz - n, "1X or ");
202 if (n < bufsz && (width & 0x2))
203 n += snprintf(buf + n, bufsz - n, "4X or ");
204 if (n < bufsz && (width & 0x4))
205 n += snprintf(buf + n, bufsz - n, "8X or ");
206 if (n < bufsz && (width & 0x8))
207 n += snprintf(buf + n, bufsz - n, "12X or ");
208 if (n < bufsz && (width & 0x10))
209 n += snprintf(buf + n, bufsz - n, "2X or ");
213 else if (width == 0 || (width >> 5))
214 snprintf(buf + n, bufsz - n, "undefined (%d)", width);
219 void mad_dump_linkwidthsup(char *buf, int bufsz, void *val, int valsz)
221 int width = *(int *)val;
223 dump_linkwidth(buf, bufsz, width);
240 snprintf(buf + strlen(buf), bufsz - strlen(buf),
246 void mad_dump_linkwidthen(char *buf, int bufsz, void *val, int valsz)
248 int width = *(int *)val;
250 dump_linkwidth(buf, bufsz, width);
253 void mad_dump_linkspeed(char *buf, int bufsz, void *val, int valsz)
255 int speed = *(int *)val;
259 snprintf(buf, bufsz, "Extended speed");
262 snprintf(buf, bufsz, "2.5 Gbps");
265 snprintf(buf, bufsz, "5.0 Gbps");
268 snprintf(buf, bufsz, "10.0 Gbps");
271 snprintf(buf, bufsz, "undefined (%d)", speed);
276 static void dump_linkspeed(char *buf, int bufsz, int speed)
281 n += snprintf(buf + n, bufsz - n, "2.5 Gbps or ");
282 if (n < bufsz && (speed & 0x2))
283 n += snprintf(buf + n, bufsz - n, "5.0 Gbps or ");
284 if (n < bufsz && (speed & 0x4))
285 n += snprintf(buf + n, bufsz - n, "10.0 Gbps or ");
289 else if (speed == 0 || (speed >> 3)) {
290 n += snprintf(buf + n, bufsz - n, "undefined (%d)", speed);
293 } else if (bufsz > 3) {
306 snprintf(buf + n, bufsz - n, " (IBA extension)");
311 void mad_dump_linkspeedsup(char *buf, int bufsz, void *val, int valsz)
313 int speed = *(int *)val;
315 dump_linkspeed(buf, bufsz, speed);
318 void mad_dump_linkspeeden(char *buf, int bufsz, void *val, int valsz)
320 int speed = *(int *)val;
322 dump_linkspeed(buf, bufsz, speed);
325 void mad_dump_linkspeedext(char *buf, int bufsz, void *val, int valsz)
327 int speed = *(int *)val;
331 snprintf(buf, bufsz, "No Extended Speed");
334 snprintf(buf, bufsz, "14.0625 Gbps");
337 snprintf(buf, bufsz, "25.78125 Gbps");
340 snprintf(buf, bufsz, "undefined (%d)", speed);
345 static void dump_linkspeedext(char *buf, int bufsz, int speed)
350 sprintf(buf, "%d", speed);
355 n += snprintf(buf + n, bufsz - n, "14.0625 Gbps or ");
356 if (n < bufsz && speed & 0x2)
357 n += snprintf(buf + n, bufsz - n, "25.78125 Gbps or ");
365 n += snprintf(buf + n, bufsz - n, "undefined (%d)", speed);
367 } else if (bufsz > 3)
371 void mad_dump_linkspeedextsup(char *buf, int bufsz, void *val, int valsz)
373 int speed = *(int *)val;
375 dump_linkspeedext(buf, bufsz, speed);
378 void mad_dump_linkspeedexten(char *buf, int bufsz, void *val, int valsz)
380 int speed = *(int *)val;
383 sprintf(buf, "%s", "Extended link speeds disabled");
386 dump_linkspeedext(buf, bufsz, speed);
389 void mad_dump_portstate(char *buf, int bufsz, void *val, int valsz)
391 int state = *(int *)val;
395 snprintf(buf, bufsz, "NoChange");
398 snprintf(buf, bufsz, "Down");
401 snprintf(buf, bufsz, "Initialize");
404 snprintf(buf, bufsz, "Armed");
407 snprintf(buf, bufsz, "Active");
410 snprintf(buf, bufsz, "?(%d)", state);
414 void mad_dump_linkdowndefstate(char *buf, int bufsz, void *val, int valsz)
416 int state = *(int *)val;
420 snprintf(buf, bufsz, "NoChange");
423 snprintf(buf, bufsz, "Sleep");
426 snprintf(buf, bufsz, "Polling");
429 snprintf(buf, bufsz, "?(%d)", state);
434 void mad_dump_physportstate(char *buf, int bufsz, void *val, int valsz)
436 int state = *(int *)val;
440 snprintf(buf, bufsz, "NoChange");
443 snprintf(buf, bufsz, "Sleep");
446 snprintf(buf, bufsz, "Polling");
449 snprintf(buf, bufsz, "Disabled");
452 snprintf(buf, bufsz, "PortConfigurationTraining");
455 snprintf(buf, bufsz, "LinkUp");
458 snprintf(buf, bufsz, "LinkErrorRecovery");
461 snprintf(buf, bufsz, "PhyTest");
464 snprintf(buf, bufsz, "?(%d)", state);
468 void mad_dump_mtu(char *buf, int bufsz, void *val, int valsz)
470 int mtu = *(int *)val;
474 snprintf(buf, bufsz, "256");
477 snprintf(buf, bufsz, "512");
480 snprintf(buf, bufsz, "1024");
483 snprintf(buf, bufsz, "2048");
486 snprintf(buf, bufsz, "4096");
489 snprintf(buf, bufsz, "?(%d)", mtu);
493 void mad_dump_vlcap(char *buf, int bufsz, void *val, int valsz)
495 int vlcap = *(int *)val;
499 snprintf(buf, bufsz, "VL0");
502 snprintf(buf, bufsz, "VL0-1");
505 snprintf(buf, bufsz, "VL0-3");
508 snprintf(buf, bufsz, "VL0-7");
511 snprintf(buf, bufsz, "VL0-14");
514 snprintf(buf, bufsz, "?(%d)", vlcap);
518 void mad_dump_opervls(char *buf, int bufsz, void *val, int valsz)
520 int opervls = *(int *)val;
524 snprintf(buf, bufsz, "No change");
527 snprintf(buf, bufsz, "VL0");
530 snprintf(buf, bufsz, "VL0-1");
533 snprintf(buf, bufsz, "VL0-3");
536 snprintf(buf, bufsz, "VL0-7");
539 snprintf(buf, bufsz, "VL0-14");
542 snprintf(buf, bufsz, "?(%d)", opervls);
546 void mad_dump_portcapmask(char *buf, int bufsz, void *val, int valsz)
548 unsigned mask = *(unsigned *)val;
551 s += sprintf(s, "0x%x\n", mask);
553 s += sprintf(s, "\t\t\t\tIsSM\n");
555 s += sprintf(s, "\t\t\t\tIsNoticeSupported\n");
557 s += sprintf(s, "\t\t\t\tIsTrapSupported\n");
559 s += sprintf(s, "\t\t\t\tIsOptionalIPDSupported\n");
561 s += sprintf(s, "\t\t\t\tIsAutomaticMigrationSupported\n");
563 s += sprintf(s, "\t\t\t\tIsSLMappingSupported\n");
565 s += sprintf(s, "\t\t\t\tIsMKeyNVRAM\n");
567 s += sprintf(s, "\t\t\t\tIsPKeyNVRAM\n");
569 s += sprintf(s, "\t\t\t\tIsLedInfoSupported\n");
570 if (mask & (1 << 10))
571 s += sprintf(s, "\t\t\t\tIsSMdisabled\n");
572 if (mask & (1 << 11))
573 s += sprintf(s, "\t\t\t\tIsSystemImageGUIDsupported\n");
574 if (mask & (1 << 12))
576 "\t\t\t\tIsPkeySwitchExternalPortTrapSupported\n");
577 if (mask & (1 << 14))
578 s += sprintf(s, "\t\t\t\tIsExtendedSpeedsSupported\n");
579 if (mask & (1 << 15))
580 s += sprintf(s, "\t\t\t\tIsCapabilityMask2Supported\n");
581 if (mask & (1 << 16))
582 s += sprintf(s, "\t\t\t\tIsCommunicatonManagementSupported\n");
583 if (mask & (1 << 17))
584 s += sprintf(s, "\t\t\t\tIsSNMPTunnelingSupported\n");
585 if (mask & (1 << 18))
586 s += sprintf(s, "\t\t\t\tIsReinitSupported\n");
587 if (mask & (1 << 19))
588 s += sprintf(s, "\t\t\t\tIsDeviceManagementSupported\n");
589 if (mask & (1 << 20))
590 s += sprintf(s, "\t\t\t\tIsVendorClassSupported\n");
591 if (mask & (1 << 21))
592 s += sprintf(s, "\t\t\t\tIsDRNoticeSupported\n");
593 if (mask & (1 << 22))
594 s += sprintf(s, "\t\t\t\tIsCapabilityMaskNoticeSupported\n");
595 if (mask & (1 << 23))
596 s += sprintf(s, "\t\t\t\tIsBootManagementSupported\n");
597 if (mask & (1 << 24))
598 s += sprintf(s, "\t\t\t\tIsLinkRoundTripLatencySupported\n");
599 if (mask & (1 << 25))
600 s += sprintf(s, "\t\t\t\tIsClientRegistrationSupported\n");
601 if (mask & (1 << 26))
602 s += sprintf(s, "\t\t\t\tIsOtherLocalChangesNoticeSupported\n");
603 if (mask & (1 << 27))
605 "\t\t\t\tIsLinkSpeedWidthPairsTableSupported\n");
606 if (mask & (1 << 28))
607 s += sprintf(s, "\t\t\t\tIsVendorSpecificMadsTableSupported\n");
608 if (mask & (1 << 29))
609 s += sprintf(s, "\t\t\t\tIsMcastPkeyTrapSuppressionSupported\n");
610 if (mask & (1 << 30))
611 s += sprintf(s, "\t\t\t\tIsMulticastFDBTopSupported\n");
612 if (mask & (1 << 31))
613 s += sprintf(s, "\t\t\t\tIsHierarchyInfoSupported\n");
619 void mad_dump_portcapmask2(char *buf, int bufsz, void *val, int valsz)
621 int mask = *(int *)val;
624 s += sprintf(s, "0x%x\n", mask);
626 s += sprintf(s, "\t\t\t\tIsSetNodeDescriptionSupported\n");
628 s += sprintf(s, "\t\t\t\tIsPortInfoExtendedSupported\n");
630 s += sprintf(s, "\t\t\t\tIsVirtualizationSupported\n");
632 s += sprintf(s, "\t\t\t\tIsSwitchPortStateTableSupported\n");
634 s += sprintf(s, "\t\t\t\tIsLinkWidth2xSupported\n");
640 void mad_dump_bitfield(char *buf, int bufsz, void *val, int valsz)
642 snprintf(buf, bufsz, "0x%x", *(uint32_t *) val);
645 void mad_dump_array(char *buf, int bufsz, void *val, int valsz)
647 uint8_t *p = val, *e;
650 if (bufsz < valsz * 2)
653 for (p = val, e = p + valsz; p < e; p++, s += 2)
654 sprintf(s, "%02x", *p);
657 void mad_dump_string(char *buf, int bufsz, void *val, int valsz)
662 snprintf(buf, valsz, "'%s'", (char *)val);
665 void mad_dump_node_type(char *buf, int bufsz, void *val, int valsz)
667 int nodetype = *(int *)val;
671 snprintf(buf, bufsz, "Channel Adapter");
674 snprintf(buf, bufsz, "Switch");
677 snprintf(buf, bufsz, "Router");
680 snprintf(buf, bufsz, "?(%d)?", nodetype);
685 #define IB_MAX_NUM_VLS 16
686 #define IB_MAX_NUM_VLS_TO_U8 ((IB_MAX_NUM_VLS)/2)
688 typedef struct _ib_slvl_table {
689 uint8_t vl_by_sl_num[IB_MAX_NUM_VLS_TO_U8];
692 static inline void ib_slvl_get_i(ib_slvl_table_t * tbl, int i, uint8_t * vl)
694 *vl = (tbl->vl_by_sl_num[i >> 1] >> ((!(i & 1)) << 2)) & 0xf;
697 #define IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK 32
699 typedef struct _ib_vl_arb_table {
703 } vl_entry[IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK];
706 static inline void ib_vl_arb_get_vl(uint8_t res_vl, uint8_t * const vl)
711 void mad_dump_sltovl(char *buf, int bufsz, void *val, int valsz)
713 ib_slvl_table_t *p_slvl_tbl = val;
716 n = snprintf(buf, bufsz, "|");
717 for (i = 0; i < 16; i++) {
718 ib_slvl_get_i(p_slvl_tbl, i, &vl);
719 n += snprintf(buf + n, bufsz - n, "%2u|", vl);
723 snprintf(buf + n, bufsz - n, "\n");
726 void mad_dump_vlarbitration(char *buf, int bufsz, void *val, int num)
728 ib_vl_arb_table_t *p_vla_tbl = val;
732 num /= sizeof(p_vla_tbl->vl_entry[0]);
734 n = snprintf(buf, bufsz, "\nVL : |");
737 for (i = 0; i < num; i++) {
738 ib_vl_arb_get_vl(p_vla_tbl->vl_entry[i].res_vl, &vl);
739 n += snprintf(buf + n, bufsz - n, "0x%-2X|", vl);
744 n += snprintf(buf + n, bufsz - n, "\nWEIGHT: |");
747 for (i = 0; i < num; i++) {
748 n += snprintf(buf + n, bufsz - n, "0x%-2X|",
749 p_vla_tbl->vl_entry[i].weight);
754 snprintf(buf + n, bufsz - n, "\n");
757 static int _dump_fields(char *buf, int bufsz, void *data, int start, int end)
763 for (field = start; field < end && bufsz > 0; field++) {
764 mad_decode_field(data, field, val);
765 if (!mad_dump_field(field, s, bufsz-1, val))
775 return (int)(s - buf);
778 void mad_dump_fields(char *buf, int bufsz, void *val, int valsz, int start,
781 _dump_fields(buf, bufsz, val, start, end);
784 void mad_dump_nodedesc(char *buf, int bufsz, void *val, int valsz)
786 strncpy(buf, val, bufsz);
792 void mad_dump_nodeinfo(char *buf, int bufsz, void *val, int valsz)
794 _dump_fields(buf, bufsz, val, IB_NODE_FIRST_F, IB_NODE_LAST_F);
797 void mad_dump_portinfo(char *buf, int bufsz, void *val, int valsz)
801 cnt = _dump_fields(buf, bufsz, val, IB_PORT_FIRST_F, IB_PORT_LAST_F);
805 _dump_fields(buf + cnt, bufsz - cnt, val,
806 IB_PORT_CAPMASK2_F, IB_PORT_LINK_SPEED_EXT_LAST_F);
809 void mad_dump_portstates(char *buf, int bufsz, void *val, int valsz)
811 _dump_fields(buf, bufsz, val, IB_PORT_STATE_F, IB_PORT_LINK_DOWN_DEF_F);
814 void mad_dump_switchinfo(char *buf, int bufsz, void *val, int valsz)
816 _dump_fields(buf, bufsz, val, IB_SW_FIRST_F, IB_SW_LAST_F);
819 void mad_dump_perfcounters(char *buf, int bufsz, void *val, int valsz)
823 cnt = _dump_fields(buf, bufsz, val,
824 IB_PC_FIRST_F, IB_PC_VL15_DROPPED_F);
828 cnt2 = _dump_fields(buf + cnt, bufsz - cnt, val,
829 IB_PC_QP1_DROP_F, IB_PC_QP1_DROP_F + 1);
833 _dump_fields(buf + cnt + cnt2, bufsz - cnt - cnt2, val,
834 IB_PC_VL15_DROPPED_F, IB_PC_LAST_F);
837 void mad_dump_perfcounters_ext(char *buf, int bufsz, void *val, int valsz)
841 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_FIRST_F, IB_PC_EXT_LAST_F);
845 _dump_fields(buf + cnt, bufsz - cnt, val,
846 IB_PC_EXT_COUNTER_SELECT2_F, IB_PC_EXT_ERR_LAST_F);
849 void mad_dump_perfcounters_xmt_sl(char *buf, int bufsz, void *val, int valsz)
853 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
854 IB_PC_EXT_XMT_BYTES_F);
858 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_XMT_DATA_SL_FIRST_F,
859 IB_PC_XMT_DATA_SL_LAST_F);
862 void mad_dump_perfcounters_rcv_sl(char *buf, int bufsz, void *val, int valsz)
866 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
867 IB_PC_EXT_XMT_BYTES_F);
871 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_RCV_DATA_SL_FIRST_F,
872 IB_PC_RCV_DATA_SL_LAST_F);
875 void mad_dump_perfcounters_xmt_disc(char *buf, int bufsz, void *val, int valsz)
879 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
880 IB_PC_EXT_XMT_BYTES_F);
884 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_XMT_INACT_DISC_F,
885 IB_PC_XMT_DISC_LAST_F);
888 void mad_dump_perfcounters_rcv_err(char *buf, int bufsz, void *val, int valsz)
892 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
893 IB_PC_EXT_XMT_BYTES_F);
897 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_RCV_LOCAL_PHY_ERR_F,
898 IB_PC_RCV_ERR_LAST_F);
901 void mad_dump_portsamples_control(char *buf, int bufsz, void *val, int valsz)
903 _dump_fields(buf, bufsz, val, IB_PSC_OPCODE_F, IB_PSC_LAST_F);
906 void mad_dump_port_ext_speeds_counters_rsfec_active(char *buf, int bufsz,
907 void *val, int valsz)
909 _dump_fields(buf, bufsz, val, IB_PESC_RSFEC_PORT_SELECT_F,
910 IB_PESC_RSFEC_LAST_F);
913 void mad_dump_port_ext_speeds_counters(char *buf, int bufsz, void *val, int valsz)
915 _dump_fields(buf, bufsz, val, IB_PESC_PORT_SELECT_F, IB_PESC_LAST_F);
918 void mad_dump_perfcounters_port_op_rcv_counters(char *buf, int bufsz, void *val, int valsz)
922 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
923 IB_PC_EXT_XMT_BYTES_F);
927 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
928 IB_PC_PORT_OP_RCV_COUNTERS_LAST_F);
931 void mad_dump_perfcounters_port_flow_ctl_counters(char *buf, int bufsz, void *val, int valsz)
935 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
936 IB_PC_EXT_XMT_BYTES_F);
940 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
941 IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F);
944 void mad_dump_perfcounters_port_vl_op_packet(char *buf, int bufsz, void *val, int valsz)
948 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
949 IB_PC_EXT_XMT_BYTES_F);
953 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
954 IB_PC_PORT_VL_OP_PACKETS_LAST_F);
957 void mad_dump_perfcounters_port_vl_op_data(char *buf, int bufsz, void *val, int valsz)
961 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
962 IB_PC_EXT_XMT_BYTES_F);
966 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_VL_OP_DATA_FIRST_F,
967 IB_PC_PORT_VL_OP_DATA_LAST_F);
970 void mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors(char *buf, int bufsz, void *val, int valsz)
974 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
975 IB_PC_EXT_XMT_BYTES_F);
979 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
980 IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F);
983 void mad_dump_perfcounters_port_vl_xmit_wait_counters(char *buf, int bufsz, void *val, int valsz)
987 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
988 IB_PC_EXT_XMT_BYTES_F);
992 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
993 IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F);
996 void mad_dump_perfcounters_sw_port_vl_congestion(char *buf, int bufsz, void *val, int valsz)
1000 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1001 IB_PC_EXT_XMT_BYTES_F);
1005 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
1006 IB_PC_SW_PORT_VL_CONGESTION_LAST_F);
1009 void mad_dump_perfcounters_rcv_con_ctrl(char *buf, int bufsz, void *val, int valsz)
1013 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1014 IB_PC_EXT_XMT_BYTES_F);
1018 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_RCV_CON_CTRL_FIRST_F,
1019 IB_PC_RCV_CON_CTRL_LAST_F);
1023 void mad_dump_perfcounters_sl_rcv_fecn(char *buf, int bufsz, void *val, int valsz)
1027 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1028 IB_PC_EXT_XMT_BYTES_F);
1032 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_SL_RCV_FECN_FIRST_F,
1033 IB_PC_SL_RCV_FECN_LAST_F);
1036 void mad_dump_perfcounters_sl_rcv_becn(char *buf, int bufsz, void *val, int valsz)
1040 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1041 IB_PC_EXT_XMT_BYTES_F);
1045 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_SL_RCV_BECN_FIRST_F,
1046 IB_PC_SL_RCV_BECN_LAST_F);
1049 void mad_dump_perfcounters_xmit_con_ctrl(char *buf, int bufsz, void *val, int valsz)
1053 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1054 IB_PC_EXT_XMT_BYTES_F);
1058 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_XMIT_CON_CTRL_FIRST_F,
1059 IB_PC_XMIT_CON_CTRL_LAST_F);
1062 void mad_dump_perfcounters_vl_xmit_time_cong(char *buf, int bufsz, void *val, int valsz)
1066 cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
1067 IB_PC_EXT_XMT_BYTES_F);
1071 _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
1072 IB_PC_VL_XMIT_TIME_CONG_LAST_F);
1075 void mad_dump_mlnx_ext_port_info(char *buf, int bufsz, void *val, int valsz)
1077 _dump_fields(buf, bufsz, val, IB_MLNX_EXT_PORT_STATE_CHG_ENABLE_F,
1078 IB_MLNX_EXT_PORT_LAST_F);
1081 void mad_dump_portsamples_result(char *buf, int bufsz, void *val, int valsz)
1083 _dump_fields(buf, bufsz, val, IB_PSR_TAG_F, IB_PSR_LAST_F);
1086 void mad_dump_cc_congestioninfo(char *buf, int bufsz, void *val, int valsz)
1088 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_INFO_FIRST_F,
1089 IB_CC_CONGESTION_INFO_LAST_F);
1092 void mad_dump_cc_congestionkeyinfo(char *buf, int bufsz, void *val, int valsz)
1094 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_KEY_INFO_FIRST_F,
1095 IB_CC_CONGESTION_KEY_INFO_LAST_F);
1098 void mad_dump_cc_congestionlog(char *buf, int bufsz, void *val, int valsz)
1100 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_LOG_FIRST_F,
1101 IB_CC_CONGESTION_LOG_LAST_F);
1104 void mad_dump_cc_congestionlogswitch(char *buf, int bufsz, void *val, int valsz)
1106 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_LOG_SWITCH_FIRST_F,
1107 IB_CC_CONGESTION_LOG_SWITCH_LAST_F);
1110 void mad_dump_cc_congestionlogentryswitch(char *buf, int bufsz, void *val, int valsz)
1112 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_LOG_ENTRY_SWITCH_FIRST_F,
1113 IB_CC_CONGESTION_LOG_ENTRY_SWITCH_LAST_F);
1116 void mad_dump_cc_congestionlogca(char *buf, int bufsz, void *val, int valsz)
1118 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_LOG_CA_FIRST_F,
1119 IB_CC_CONGESTION_LOG_CA_LAST_F);
1122 void mad_dump_cc_congestionlogentryca(char *buf, int bufsz, void *val, int valsz)
1124 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_LOG_ENTRY_CA_FIRST_F,
1125 IB_CC_CONGESTION_LOG_ENTRY_CA_LAST_F);
1128 void mad_dump_cc_switchcongestionsetting(char *buf, int bufsz, void *val, int valsz)
1130 _dump_fields(buf, bufsz, val, IB_CC_SWITCH_CONGESTION_SETTING_FIRST_F,
1131 IB_CC_SWITCH_CONGESTION_SETTING_LAST_F);
1134 void mad_dump_cc_switchportcongestionsettingelement(char *buf, int bufsz, void *val, int valsz)
1136 _dump_fields(buf, bufsz, val, IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_FIRST_F,
1137 IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_LAST_F);
1140 void mad_dump_cc_cacongestionsetting(char *buf, int bufsz, void *val, int valsz)
1142 _dump_fields(buf, bufsz, val, IB_CC_CA_CONGESTION_SETTING_FIRST_F,
1143 IB_CC_CA_CONGESTION_SETTING_LAST_F);
1146 void mad_dump_cc_cacongestionentry(char *buf, int bufsz, void *val, int valsz)
1148 _dump_fields(buf, bufsz, val, IB_CC_CA_CONGESTION_ENTRY_FIRST_F,
1149 IB_CC_CA_CONGESTION_ENTRY_LAST_F);
1152 void mad_dump_cc_congestioncontroltable(char *buf, int bufsz, void *val, int valsz)
1154 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_CONTROL_TABLE_FIRST_F,
1155 IB_CC_CONGESTION_CONTROL_TABLE_LAST_F);
1158 void mad_dump_cc_congestioncontroltableentry(char *buf, int bufsz, void *val, int valsz)
1160 _dump_fields(buf, bufsz, val, IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_FIRST_F,
1161 IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_LAST_F);
1164 void mad_dump_cc_timestamp(char *buf, int bufsz, void *val, int valsz)
1166 _dump_fields(buf, bufsz, val, IB_CC_TIMESTAMP_FIRST_F,
1167 IB_CC_TIMESTAMP_LAST_F);
1170 void mad_dump_classportinfo(char *buf, int bufsz, void *val, int valsz)
1172 /* no FIRST_F and LAST_F for CPI field enums, must do a hack */
1173 _dump_fields(buf, bufsz, val, IB_CPI_BASEVER_F, IB_CPI_TRAP_QKEY_F + 1);
1176 void mad_dump_portmirror_route(char *buf, int bufsz, void *val, int valsz)
1178 _dump_fields(buf, bufsz, val, IB_PMR_FIRST_F, IB_PMR_LAST_F);
1181 void mad_dump_portmirror_filter(char *buf, int bufsz, void *val, int valsz)
1183 _dump_fields(buf, bufsz, val, IB_PMF_FIRST_F, IB_PMF_LAST_F);
1186 void mad_dump_portmirror_ports(char *buf, int bufsz, void *val, int valsz)
1188 _dump_fields(buf, bufsz, val, IB_PMP_FIRST_F, IB_PMP_LAST_F);
1191 void mad_dump_portinfo_ext(char *buf, int bufsz, void *val, int valsz)
1193 _dump_fields(buf, bufsz, val, IB_PORT_EXT_CAPMASK_F,
1194 IB_PORT_EXT_LAST_F);
1197 void xdump(FILE * file, char *msg, void *p, int size)
1199 #define HEX(x) ((x) < 10 ? '0' + (x) : 'a' + ((x) -10))
1206 for (i = 0; i < size;) {
1207 fputc(HEX(*cp >> 4), file);
1208 fputc(HEX(*cp & 0xf), file);
1211 fputc(HEX(cp[1] >> 4), file);
1212 fputc(HEX(cp[1] & 0xf), file);