1*6bf9d8f6SLeon Romanovsky /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 26aea213aSOr Gerlitz /* 36aea213aSOr Gerlitz * Copyright (c) 2006, 2007, 2008, 2009, 2010 QLogic Corporation. 46aea213aSOr Gerlitz * All rights reserved. 56aea213aSOr Gerlitz * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved. 66aea213aSOr Gerlitz */ 76aea213aSOr Gerlitz 8*6bf9d8f6SLeon Romanovsky #ifndef IB_PMA_H 96aea213aSOr Gerlitz #define IB_PMA_H 106aea213aSOr Gerlitz 116aea213aSOr Gerlitz #include <rdma/ib_mad.h> 126aea213aSOr Gerlitz 136aea213aSOr Gerlitz /* 146aea213aSOr Gerlitz * PMA class portinfo capability mask bits 156aea213aSOr Gerlitz */ 166aea213aSOr Gerlitz #define IB_PMA_CLASS_CAP_ALLPORTSELECT cpu_to_be16(1 << 8) 176aea213aSOr Gerlitz #define IB_PMA_CLASS_CAP_EXT_WIDTH cpu_to_be16(1 << 9) 18145d9c54SChristoph Lameter #define IB_PMA_CLASS_CAP_EXT_WIDTH_NOIETF cpu_to_be16(1 << 10) 196aea213aSOr Gerlitz #define IB_PMA_CLASS_CAP_XMIT_WAIT cpu_to_be16(1 << 12) 206aea213aSOr Gerlitz 216aea213aSOr Gerlitz #define IB_PMA_CLASS_PORT_INFO cpu_to_be16(0x0001) 226aea213aSOr Gerlitz #define IB_PMA_PORT_SAMPLES_CONTROL cpu_to_be16(0x0010) 236aea213aSOr Gerlitz #define IB_PMA_PORT_SAMPLES_RESULT cpu_to_be16(0x0011) 246aea213aSOr Gerlitz #define IB_PMA_PORT_COUNTERS cpu_to_be16(0x0012) 256aea213aSOr Gerlitz #define IB_PMA_PORT_COUNTERS_EXT cpu_to_be16(0x001D) 266aea213aSOr Gerlitz #define IB_PMA_PORT_SAMPLES_RESULT_EXT cpu_to_be16(0x001E) 276aea213aSOr Gerlitz 286aea213aSOr Gerlitz struct ib_pma_mad { 296aea213aSOr Gerlitz struct ib_mad_hdr mad_hdr; 306aea213aSOr Gerlitz u8 reserved[40]; 316aea213aSOr Gerlitz u8 data[192]; 326aea213aSOr Gerlitz } __packed; 336aea213aSOr Gerlitz 346aea213aSOr Gerlitz struct ib_pma_portsamplescontrol { 356aea213aSOr Gerlitz u8 opcode; 366aea213aSOr Gerlitz u8 port_select; 376aea213aSOr Gerlitz u8 tick; 386aea213aSOr Gerlitz u8 counter_width; /* resv: 7:3, counter width: 2:0 */ 396aea213aSOr Gerlitz __be32 counter_mask0_9; /* 2, 10 3-bit fields */ 406aea213aSOr Gerlitz __be16 counter_mask10_14; /* 1, 5 3-bit fields */ 416aea213aSOr Gerlitz u8 sample_mechanisms; 426aea213aSOr Gerlitz u8 sample_status; /* only lower 2 bits */ 436aea213aSOr Gerlitz __be64 option_mask; 446aea213aSOr Gerlitz __be64 vendor_mask; 456aea213aSOr Gerlitz __be32 sample_start; 466aea213aSOr Gerlitz __be32 sample_interval; 476aea213aSOr Gerlitz __be16 tag; 486aea213aSOr Gerlitz __be16 counter_select[15]; 496aea213aSOr Gerlitz __be32 reserved1; 506aea213aSOr Gerlitz __be64 samples_only_option_mask; 516aea213aSOr Gerlitz __be32 reserved2[28]; 526aea213aSOr Gerlitz }; 536aea213aSOr Gerlitz 546aea213aSOr Gerlitz struct ib_pma_portsamplesresult { 556aea213aSOr Gerlitz __be16 tag; 566aea213aSOr Gerlitz __be16 sample_status; /* only lower 2 bits */ 576aea213aSOr Gerlitz __be32 counter[15]; 586aea213aSOr Gerlitz }; 596aea213aSOr Gerlitz 606aea213aSOr Gerlitz struct ib_pma_portsamplesresult_ext { 616aea213aSOr Gerlitz __be16 tag; 626aea213aSOr Gerlitz __be16 sample_status; /* only lower 2 bits */ 636aea213aSOr Gerlitz __be32 extended_width; /* only upper 2 bits */ 646aea213aSOr Gerlitz __be64 counter[15]; 656aea213aSOr Gerlitz }; 666aea213aSOr Gerlitz 676aea213aSOr Gerlitz struct ib_pma_portcounters { 686aea213aSOr Gerlitz u8 reserved; 696aea213aSOr Gerlitz u8 port_select; 706aea213aSOr Gerlitz __be16 counter_select; 716aea213aSOr Gerlitz __be16 symbol_error_counter; 726aea213aSOr Gerlitz u8 link_error_recovery_counter; 736aea213aSOr Gerlitz u8 link_downed_counter; 746aea213aSOr Gerlitz __be16 port_rcv_errors; 756aea213aSOr Gerlitz __be16 port_rcv_remphys_errors; 766aea213aSOr Gerlitz __be16 port_rcv_switch_relay_errors; 776aea213aSOr Gerlitz __be16 port_xmit_discards; 786aea213aSOr Gerlitz u8 port_xmit_constraint_errors; 796aea213aSOr Gerlitz u8 port_rcv_constraint_errors; 806aea213aSOr Gerlitz u8 reserved1; 816aea213aSOr Gerlitz u8 link_overrun_errors; /* LocalLink: 7:4, BufferOverrun: 3:0 */ 826aea213aSOr Gerlitz __be16 reserved2; 836aea213aSOr Gerlitz __be16 vl15_dropped; 846aea213aSOr Gerlitz __be32 port_xmit_data; 856aea213aSOr Gerlitz __be32 port_rcv_data; 866aea213aSOr Gerlitz __be32 port_xmit_packets; 876aea213aSOr Gerlitz __be32 port_rcv_packets; 886aea213aSOr Gerlitz __be32 port_xmit_wait; 896aea213aSOr Gerlitz } __packed; 906aea213aSOr Gerlitz 916aea213aSOr Gerlitz 926aea213aSOr Gerlitz #define IB_PMA_SEL_SYMBOL_ERROR cpu_to_be16(0x0001) 936aea213aSOr Gerlitz #define IB_PMA_SEL_LINK_ERROR_RECOVERY cpu_to_be16(0x0002) 946aea213aSOr Gerlitz #define IB_PMA_SEL_LINK_DOWNED cpu_to_be16(0x0004) 956aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_RCV_ERRORS cpu_to_be16(0x0008) 966aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_RCV_REMPHYS_ERRORS cpu_to_be16(0x0010) 976aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_XMIT_DISCARDS cpu_to_be16(0x0040) 986aea213aSOr Gerlitz #define IB_PMA_SEL_LOCAL_LINK_INTEGRITY_ERRORS cpu_to_be16(0x0200) 996aea213aSOr Gerlitz #define IB_PMA_SEL_EXCESSIVE_BUFFER_OVERRUNS cpu_to_be16(0x0400) 1006aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_VL15_DROPPED cpu_to_be16(0x0800) 1016aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_XMIT_DATA cpu_to_be16(0x1000) 1026aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_RCV_DATA cpu_to_be16(0x2000) 1036aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_XMIT_PACKETS cpu_to_be16(0x4000) 1046aea213aSOr Gerlitz #define IB_PMA_SEL_PORT_RCV_PACKETS cpu_to_be16(0x8000) 1056aea213aSOr Gerlitz 1066aea213aSOr Gerlitz struct ib_pma_portcounters_ext { 1076aea213aSOr Gerlitz u8 reserved; 1086aea213aSOr Gerlitz u8 port_select; 1096aea213aSOr Gerlitz __be16 counter_select; 1106aea213aSOr Gerlitz __be32 reserved1; 1116aea213aSOr Gerlitz __be64 port_xmit_data; 1126aea213aSOr Gerlitz __be64 port_rcv_data; 1136aea213aSOr Gerlitz __be64 port_xmit_packets; 1146aea213aSOr Gerlitz __be64 port_rcv_packets; 1156aea213aSOr Gerlitz __be64 port_unicast_xmit_packets; 1166aea213aSOr Gerlitz __be64 port_unicast_rcv_packets; 1176aea213aSOr Gerlitz __be64 port_multicast_xmit_packets; 1186aea213aSOr Gerlitz __be64 port_multicast_rcv_packets; 1196aea213aSOr Gerlitz } __packed; 1206aea213aSOr Gerlitz 1216aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_XMIT_DATA cpu_to_be16(0x0001) 1226aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_RCV_DATA cpu_to_be16(0x0002) 1236aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_XMIT_PACKETS cpu_to_be16(0x0004) 1246aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_RCV_PACKETS cpu_to_be16(0x0008) 1256aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_UNI_XMIT_PACKETS cpu_to_be16(0x0010) 1266aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_UNI_RCV_PACKETS cpu_to_be16(0x0020) 1276aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_MULTI_XMIT_PACKETS cpu_to_be16(0x0040) 1286aea213aSOr Gerlitz #define IB_PMA_SELX_PORT_MULTI_RCV_PACKETS cpu_to_be16(0x0080) 1296aea213aSOr Gerlitz 1306aea213aSOr Gerlitz #endif /* IB_PMA_H */ 131