xref: /freebsd/sys/ofed/include/rdma/ib_pma.h (revision 95ee2897)
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