1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2006, 2007, 2008, 2009, 2010 QLogic Corporation. 4*4882a593Smuzhiyun * All rights reserved. 5*4882a593Smuzhiyun * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef IB_PMA_H 9*4882a593Smuzhiyun #define IB_PMA_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <rdma/ib_mad.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * PMA class portinfo capability mask bits 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun #define IB_PMA_CLASS_CAP_ALLPORTSELECT cpu_to_be16(1 << 8) 17*4882a593Smuzhiyun #define IB_PMA_CLASS_CAP_EXT_WIDTH cpu_to_be16(1 << 9) 18*4882a593Smuzhiyun #define IB_PMA_CLASS_CAP_EXT_WIDTH_NOIETF cpu_to_be16(1 << 10) 19*4882a593Smuzhiyun #define IB_PMA_CLASS_CAP_XMIT_WAIT cpu_to_be16(1 << 12) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define IB_PMA_CLASS_PORT_INFO cpu_to_be16(0x0001) 22*4882a593Smuzhiyun #define IB_PMA_PORT_SAMPLES_CONTROL cpu_to_be16(0x0010) 23*4882a593Smuzhiyun #define IB_PMA_PORT_SAMPLES_RESULT cpu_to_be16(0x0011) 24*4882a593Smuzhiyun #define IB_PMA_PORT_COUNTERS cpu_to_be16(0x0012) 25*4882a593Smuzhiyun #define IB_PMA_PORT_COUNTERS_EXT cpu_to_be16(0x001D) 26*4882a593Smuzhiyun #define IB_PMA_PORT_SAMPLES_RESULT_EXT cpu_to_be16(0x001E) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct ib_pma_mad { 29*4882a593Smuzhiyun struct ib_mad_hdr mad_hdr; 30*4882a593Smuzhiyun u8 reserved[40]; 31*4882a593Smuzhiyun u8 data[192]; 32*4882a593Smuzhiyun } __packed; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct ib_pma_portsamplescontrol { 35*4882a593Smuzhiyun u8 opcode; 36*4882a593Smuzhiyun u8 port_select; 37*4882a593Smuzhiyun u8 tick; 38*4882a593Smuzhiyun u8 counter_width; /* resv: 7:3, counter width: 2:0 */ 39*4882a593Smuzhiyun __be32 counter_mask0_9; /* 2, 10 3-bit fields */ 40*4882a593Smuzhiyun __be16 counter_mask10_14; /* 1, 5 3-bit fields */ 41*4882a593Smuzhiyun u8 sample_mechanisms; 42*4882a593Smuzhiyun u8 sample_status; /* only lower 2 bits */ 43*4882a593Smuzhiyun __be64 option_mask; 44*4882a593Smuzhiyun __be64 vendor_mask; 45*4882a593Smuzhiyun __be32 sample_start; 46*4882a593Smuzhiyun __be32 sample_interval; 47*4882a593Smuzhiyun __be16 tag; 48*4882a593Smuzhiyun __be16 counter_select[15]; 49*4882a593Smuzhiyun __be32 reserved1; 50*4882a593Smuzhiyun __be64 samples_only_option_mask; 51*4882a593Smuzhiyun __be32 reserved2[28]; 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun struct ib_pma_portsamplesresult { 55*4882a593Smuzhiyun __be16 tag; 56*4882a593Smuzhiyun __be16 sample_status; /* only lower 2 bits */ 57*4882a593Smuzhiyun __be32 counter[15]; 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun struct ib_pma_portsamplesresult_ext { 61*4882a593Smuzhiyun __be16 tag; 62*4882a593Smuzhiyun __be16 sample_status; /* only lower 2 bits */ 63*4882a593Smuzhiyun __be32 extended_width; /* only upper 2 bits */ 64*4882a593Smuzhiyun __be64 counter[15]; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun struct ib_pma_portcounters { 68*4882a593Smuzhiyun u8 reserved; 69*4882a593Smuzhiyun u8 port_select; 70*4882a593Smuzhiyun __be16 counter_select; 71*4882a593Smuzhiyun __be16 symbol_error_counter; 72*4882a593Smuzhiyun u8 link_error_recovery_counter; 73*4882a593Smuzhiyun u8 link_downed_counter; 74*4882a593Smuzhiyun __be16 port_rcv_errors; 75*4882a593Smuzhiyun __be16 port_rcv_remphys_errors; 76*4882a593Smuzhiyun __be16 port_rcv_switch_relay_errors; 77*4882a593Smuzhiyun __be16 port_xmit_discards; 78*4882a593Smuzhiyun u8 port_xmit_constraint_errors; 79*4882a593Smuzhiyun u8 port_rcv_constraint_errors; 80*4882a593Smuzhiyun u8 reserved1; 81*4882a593Smuzhiyun u8 link_overrun_errors; /* LocalLink: 7:4, BufferOverrun: 3:0 */ 82*4882a593Smuzhiyun __be16 reserved2; 83*4882a593Smuzhiyun __be16 vl15_dropped; 84*4882a593Smuzhiyun __be32 port_xmit_data; 85*4882a593Smuzhiyun __be32 port_rcv_data; 86*4882a593Smuzhiyun __be32 port_xmit_packets; 87*4882a593Smuzhiyun __be32 port_rcv_packets; 88*4882a593Smuzhiyun __be32 port_xmit_wait; 89*4882a593Smuzhiyun } __packed; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define IB_PMA_SEL_SYMBOL_ERROR cpu_to_be16(0x0001) 93*4882a593Smuzhiyun #define IB_PMA_SEL_LINK_ERROR_RECOVERY cpu_to_be16(0x0002) 94*4882a593Smuzhiyun #define IB_PMA_SEL_LINK_DOWNED cpu_to_be16(0x0004) 95*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_RCV_ERRORS cpu_to_be16(0x0008) 96*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_RCV_REMPHYS_ERRORS cpu_to_be16(0x0010) 97*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_XMIT_DISCARDS cpu_to_be16(0x0040) 98*4882a593Smuzhiyun #define IB_PMA_SEL_LOCAL_LINK_INTEGRITY_ERRORS cpu_to_be16(0x0200) 99*4882a593Smuzhiyun #define IB_PMA_SEL_EXCESSIVE_BUFFER_OVERRUNS cpu_to_be16(0x0400) 100*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_VL15_DROPPED cpu_to_be16(0x0800) 101*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_XMIT_DATA cpu_to_be16(0x1000) 102*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_RCV_DATA cpu_to_be16(0x2000) 103*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_XMIT_PACKETS cpu_to_be16(0x4000) 104*4882a593Smuzhiyun #define IB_PMA_SEL_PORT_RCV_PACKETS cpu_to_be16(0x8000) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun struct ib_pma_portcounters_ext { 107*4882a593Smuzhiyun u8 reserved; 108*4882a593Smuzhiyun u8 port_select; 109*4882a593Smuzhiyun __be16 counter_select; 110*4882a593Smuzhiyun __be32 reserved1; 111*4882a593Smuzhiyun __be64 port_xmit_data; 112*4882a593Smuzhiyun __be64 port_rcv_data; 113*4882a593Smuzhiyun __be64 port_xmit_packets; 114*4882a593Smuzhiyun __be64 port_rcv_packets; 115*4882a593Smuzhiyun __be64 port_unicast_xmit_packets; 116*4882a593Smuzhiyun __be64 port_unicast_rcv_packets; 117*4882a593Smuzhiyun __be64 port_multicast_xmit_packets; 118*4882a593Smuzhiyun __be64 port_multicast_rcv_packets; 119*4882a593Smuzhiyun } __packed; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_XMIT_DATA cpu_to_be16(0x0001) 122*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_RCV_DATA cpu_to_be16(0x0002) 123*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_XMIT_PACKETS cpu_to_be16(0x0004) 124*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_RCV_PACKETS cpu_to_be16(0x0008) 125*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_UNI_XMIT_PACKETS cpu_to_be16(0x0010) 126*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_UNI_RCV_PACKETS cpu_to_be16(0x0020) 127*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_MULTI_XMIT_PACKETS cpu_to_be16(0x0040) 128*4882a593Smuzhiyun #define IB_PMA_SELX_PORT_MULTI_RCV_PACKETS cpu_to_be16(0x0080) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #endif /* IB_PMA_H */ 131