1fe267a55SPedro F. Giffuni /*- 2fe267a55SPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 3fe267a55SPedro F. Giffuni * 4c9f432b7SAlfred Perlstein * Copyright (c) 2006, 2007, 2008, 2009, 2010 QLogic Corporation. 5c9f432b7SAlfred Perlstein * All rights reserved. 6c9f432b7SAlfred Perlstein * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved. 7c9f432b7SAlfred Perlstein * 8c9f432b7SAlfred Perlstein * This software is available to you under a choice of one of two 9c9f432b7SAlfred Perlstein * licenses. You may choose to be licensed under the terms of the GNU 10c9f432b7SAlfred Perlstein * General Public License (GPL) Version 2, available from the file 11c9f432b7SAlfred Perlstein * COPYING in the main directory of this source tree, or the 12c9f432b7SAlfred Perlstein * OpenIB.org BSD license below: 13c9f432b7SAlfred Perlstein * 14c9f432b7SAlfred Perlstein * Redistribution and use in source and binary forms, with or 15c9f432b7SAlfred Perlstein * without modification, are permitted provided that the following 16c9f432b7SAlfred Perlstein * conditions are met: 17c9f432b7SAlfred Perlstein * 18c9f432b7SAlfred Perlstein * - Redistributions of source code must retain the above 19c9f432b7SAlfred Perlstein * copyright notice, this list of conditions and the following 20c9f432b7SAlfred Perlstein * disclaimer. 21c9f432b7SAlfred Perlstein * 22c9f432b7SAlfred Perlstein * - Redistributions in binary form must reproduce the above 23c9f432b7SAlfred Perlstein * copyright notice, this list of conditions and the following 24c9f432b7SAlfred Perlstein * disclaimer in the documentation and/or other materials 25c9f432b7SAlfred Perlstein * provided with the distribution. 26c9f432b7SAlfred Perlstein * 27c9f432b7SAlfred Perlstein * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 28c9f432b7SAlfred Perlstein * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 29c9f432b7SAlfred Perlstein * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 30c9f432b7SAlfred Perlstein * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 31c9f432b7SAlfred Perlstein * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 32c9f432b7SAlfred Perlstein * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 33c9f432b7SAlfred Perlstein * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 34c9f432b7SAlfred Perlstein * SOFTWARE. 35c9f432b7SAlfred Perlstein */ 36c9f432b7SAlfred Perlstein 37c9f432b7SAlfred Perlstein #if !defined(IB_PMA_H) 38c9f432b7SAlfred Perlstein #define IB_PMA_H 39c9f432b7SAlfred Perlstein 40c9f432b7SAlfred Perlstein #include <rdma/ib_mad.h> 41c9f432b7SAlfred Perlstein 42c9f432b7SAlfred Perlstein /* 43c9f432b7SAlfred Perlstein * PMA class portinfo capability mask bits 44c9f432b7SAlfred Perlstein */ 45c9f432b7SAlfred Perlstein #define IB_PMA_CLASS_CAP_ALLPORTSELECT cpu_to_be16(1 << 8) 46c9f432b7SAlfred Perlstein #define IB_PMA_CLASS_CAP_EXT_WIDTH cpu_to_be16(1 << 9) 47478d3005SHans Petter Selasky #define IB_PMA_CLASS_CAP_EXT_WIDTH_NOIETF cpu_to_be16(1 << 10) 48c9f432b7SAlfred Perlstein #define IB_PMA_CLASS_CAP_XMIT_WAIT cpu_to_be16(1 << 12) 49c9f432b7SAlfred Perlstein 50c9f432b7SAlfred Perlstein #define IB_PMA_CLASS_PORT_INFO cpu_to_be16(0x0001) 51c9f432b7SAlfred Perlstein #define IB_PMA_PORT_SAMPLES_CONTROL cpu_to_be16(0x0010) 52c9f432b7SAlfred Perlstein #define IB_PMA_PORT_SAMPLES_RESULT cpu_to_be16(0x0011) 53c9f432b7SAlfred Perlstein #define IB_PMA_PORT_COUNTERS cpu_to_be16(0x0012) 54c9f432b7SAlfred Perlstein #define IB_PMA_PORT_COUNTERS_EXT cpu_to_be16(0x001D) 55c9f432b7SAlfred Perlstein #define IB_PMA_PORT_SAMPLES_RESULT_EXT cpu_to_be16(0x001E) 56c9f432b7SAlfred Perlstein 57c9f432b7SAlfred Perlstein struct ib_pma_mad { 58c9f432b7SAlfred Perlstein struct ib_mad_hdr mad_hdr; 59c9f432b7SAlfred Perlstein u8 reserved[40]; 60c9f432b7SAlfred Perlstein u8 data[192]; 61c9f432b7SAlfred Perlstein } __packed; 62c9f432b7SAlfred Perlstein 63c9f432b7SAlfred Perlstein struct ib_pma_portsamplescontrol { 64c9f432b7SAlfred Perlstein u8 opcode; 65c9f432b7SAlfred Perlstein u8 port_select; 66c9f432b7SAlfred Perlstein u8 tick; 67c9f432b7SAlfred Perlstein u8 counter_width; /* resv: 7:3, counter width: 2:0 */ 68c9f432b7SAlfred Perlstein __be32 counter_mask0_9; /* 2, 10 3-bit fields */ 69c9f432b7SAlfred Perlstein __be16 counter_mask10_14; /* 1, 5 3-bit fields */ 70c9f432b7SAlfred Perlstein u8 sample_mechanisms; 71c9f432b7SAlfred Perlstein u8 sample_status; /* only lower 2 bits */ 72c9f432b7SAlfred Perlstein __be64 option_mask; 73c9f432b7SAlfred Perlstein __be64 vendor_mask; 74c9f432b7SAlfred Perlstein __be32 sample_start; 75c9f432b7SAlfred Perlstein __be32 sample_interval; 76c9f432b7SAlfred Perlstein __be16 tag; 77c9f432b7SAlfred Perlstein __be16 counter_select[15]; 78c9f432b7SAlfred Perlstein __be32 reserved1; 79c9f432b7SAlfred Perlstein __be64 samples_only_option_mask; 80c9f432b7SAlfred Perlstein __be32 reserved2[28]; 81c9f432b7SAlfred Perlstein }; 82c9f432b7SAlfred Perlstein 83c9f432b7SAlfred Perlstein struct ib_pma_portsamplesresult { 84c9f432b7SAlfred Perlstein __be16 tag; 85c9f432b7SAlfred Perlstein __be16 sample_status; /* only lower 2 bits */ 86c9f432b7SAlfred Perlstein __be32 counter[15]; 87c9f432b7SAlfred Perlstein }; 88c9f432b7SAlfred Perlstein 89c9f432b7SAlfred Perlstein struct ib_pma_portsamplesresult_ext { 90c9f432b7SAlfred Perlstein __be16 tag; 91c9f432b7SAlfred Perlstein __be16 sample_status; /* only lower 2 bits */ 92c9f432b7SAlfred Perlstein __be32 extended_width; /* only upper 2 bits */ 93c9f432b7SAlfred Perlstein __be64 counter[15]; 94c9f432b7SAlfred Perlstein }; 95c9f432b7SAlfred Perlstein 96c9f432b7SAlfred Perlstein struct ib_pma_portcounters { 97c9f432b7SAlfred Perlstein u8 reserved; 98c9f432b7SAlfred Perlstein u8 port_select; 99c9f432b7SAlfred Perlstein __be16 counter_select; 100c9f432b7SAlfred Perlstein __be16 symbol_error_counter; 101c9f432b7SAlfred Perlstein u8 link_error_recovery_counter; 102c9f432b7SAlfred Perlstein u8 link_downed_counter; 103c9f432b7SAlfred Perlstein __be16 port_rcv_errors; 104c9f432b7SAlfred Perlstein __be16 port_rcv_remphys_errors; 105c9f432b7SAlfred Perlstein __be16 port_rcv_switch_relay_errors; 106c9f432b7SAlfred Perlstein __be16 port_xmit_discards; 107c9f432b7SAlfred Perlstein u8 port_xmit_constraint_errors; 108c9f432b7SAlfred Perlstein u8 port_rcv_constraint_errors; 109c9f432b7SAlfred Perlstein u8 reserved1; 110c9f432b7SAlfred Perlstein u8 link_overrun_errors; /* LocalLink: 7:4, BufferOverrun: 3:0 */ 111c9f432b7SAlfred Perlstein __be16 reserved2; 112c9f432b7SAlfred Perlstein __be16 vl15_dropped; 113c9f432b7SAlfred Perlstein __be32 port_xmit_data; 114c9f432b7SAlfred Perlstein __be32 port_rcv_data; 115c9f432b7SAlfred Perlstein __be32 port_xmit_packets; 116c9f432b7SAlfred Perlstein __be32 port_rcv_packets; 117c9f432b7SAlfred Perlstein __be32 port_xmit_wait; 118c9f432b7SAlfred Perlstein } __packed; 119c9f432b7SAlfred Perlstein 120c9f432b7SAlfred Perlstein 121c9f432b7SAlfred Perlstein #define IB_PMA_SEL_SYMBOL_ERROR cpu_to_be16(0x0001) 122c9f432b7SAlfred Perlstein #define IB_PMA_SEL_LINK_ERROR_RECOVERY cpu_to_be16(0x0002) 123c9f432b7SAlfred Perlstein #define IB_PMA_SEL_LINK_DOWNED cpu_to_be16(0x0004) 124c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_RCV_ERRORS cpu_to_be16(0x0008) 125c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_RCV_REMPHYS_ERRORS cpu_to_be16(0x0010) 126c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_XMIT_DISCARDS cpu_to_be16(0x0040) 127c9f432b7SAlfred Perlstein #define IB_PMA_SEL_LOCAL_LINK_INTEGRITY_ERRORS cpu_to_be16(0x0200) 128c9f432b7SAlfred Perlstein #define IB_PMA_SEL_EXCESSIVE_BUFFER_OVERRUNS cpu_to_be16(0x0400) 129c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_VL15_DROPPED cpu_to_be16(0x0800) 130c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_XMIT_DATA cpu_to_be16(0x1000) 131c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_RCV_DATA cpu_to_be16(0x2000) 132c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_XMIT_PACKETS cpu_to_be16(0x4000) 133c9f432b7SAlfred Perlstein #define IB_PMA_SEL_PORT_RCV_PACKETS cpu_to_be16(0x8000) 134c9f432b7SAlfred Perlstein 135c9f432b7SAlfred Perlstein struct ib_pma_portcounters_ext { 136c9f432b7SAlfred Perlstein u8 reserved; 137c9f432b7SAlfred Perlstein u8 port_select; 138c9f432b7SAlfred Perlstein __be16 counter_select; 139c9f432b7SAlfred Perlstein __be32 reserved1; 140c9f432b7SAlfred Perlstein __be64 port_xmit_data; 141c9f432b7SAlfred Perlstein __be64 port_rcv_data; 142c9f432b7SAlfred Perlstein __be64 port_xmit_packets; 143c9f432b7SAlfred Perlstein __be64 port_rcv_packets; 144c9f432b7SAlfred Perlstein __be64 port_unicast_xmit_packets; 145c9f432b7SAlfred Perlstein __be64 port_unicast_rcv_packets; 146c9f432b7SAlfred Perlstein __be64 port_multicast_xmit_packets; 147c9f432b7SAlfred Perlstein __be64 port_multicast_rcv_packets; 148c9f432b7SAlfred Perlstein } __packed; 149c9f432b7SAlfred Perlstein 150c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_XMIT_DATA cpu_to_be16(0x0001) 151c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_RCV_DATA cpu_to_be16(0x0002) 152c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_XMIT_PACKETS cpu_to_be16(0x0004) 153c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_RCV_PACKETS cpu_to_be16(0x0008) 154c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_UNI_XMIT_PACKETS cpu_to_be16(0x0010) 155c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_UNI_RCV_PACKETS cpu_to_be16(0x0020) 156c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_MULTI_XMIT_PACKETS cpu_to_be16(0x0040) 157c9f432b7SAlfred Perlstein #define IB_PMA_SELX_PORT_MULTI_RCV_PACKETS cpu_to_be16(0x0080) 158c9f432b7SAlfred Perlstein 159c9f432b7SAlfred Perlstein #endif /* IB_PMA_H */ 160