]>
Commit | Line | Data |
---|---|---|
f931551b | 1 | /* |
36a8f01c MM |
2 | * Copyright (c) 2012 Intel Corporation. All rights reserved. |
3 | * Copyright (c) 2006 - 2012 QLogic Corporation. All rights reserved. | |
f931551b RC |
4 | * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved. |
5 | * | |
6 | * This software is available to you under a choice of one of two | |
7 | * licenses. You may choose to be licensed under the terms of the GNU | |
8 | * General Public License (GPL) Version 2, available from the file | |
9 | * COPYING in the main directory of this source tree, or the | |
10 | * OpenIB.org BSD license below: | |
11 | * | |
12 | * Redistribution and use in source and binary forms, with or | |
13 | * without modification, are permitted provided that the following | |
14 | * conditions are met: | |
15 | * | |
16 | * - Redistributions of source code must retain the above | |
17 | * copyright notice, this list of conditions and the following | |
18 | * disclaimer. | |
19 | * | |
20 | * - Redistributions in binary form must reproduce the above | |
21 | * copyright notice, this list of conditions and the following | |
22 | * disclaimer in the documentation and/or other materials | |
23 | * provided with the distribution. | |
24 | * | |
25 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
26 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
27 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
28 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |
29 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |
30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
32 | * SOFTWARE. | |
33 | */ | |
36a8f01c MM |
34 | #ifndef _QIB_MAD_H |
35 | #define _QIB_MAD_H | |
f931551b | 36 | |
6aea213a OG |
37 | #include <rdma/ib_pma.h> |
38 | ||
d4ab3470 DD |
39 | #define IB_SMP_UNSUP_VERSION \ |
40 | cpu_to_be16(IB_MGMT_MAD_STATUS_BAD_VERSION) | |
f931551b | 41 | |
d4ab3470 DD |
42 | #define IB_SMP_UNSUP_METHOD \ |
43 | cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD) | |
f931551b | 44 | |
d4ab3470 DD |
45 | #define IB_SMP_UNSUP_METH_ATTR \ |
46 | cpu_to_be16(IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB) | |
f931551b | 47 | |
d4ab3470 DD |
48 | #define IB_SMP_INVALID_FIELD \ |
49 | cpu_to_be16(IB_MGMT_MAD_STATUS_INVALID_ATTRIB_VALUE) | |
f931551b RC |
50 | |
51 | #define IB_VLARB_LOWPRI_0_31 1 | |
52 | #define IB_VLARB_LOWPRI_32_63 2 | |
53 | #define IB_VLARB_HIGHPRI_0_31 3 | |
54 | #define IB_VLARB_HIGHPRI_32_63 4 | |
55 | ||
f931551b RC |
56 | #define IB_PMA_PORT_COUNTERS_CONG cpu_to_be16(0xFF00) |
57 | ||
f931551b RC |
58 | struct ib_pma_portcounters_cong { |
59 | u8 reserved; | |
60 | u8 reserved1; | |
61 | __be16 port_check_rate; | |
62 | __be16 symbol_error_counter; | |
63 | u8 link_error_recovery_counter; | |
64 | u8 link_downed_counter; | |
65 | __be16 port_rcv_errors; | |
66 | __be16 port_rcv_remphys_errors; | |
67 | __be16 port_rcv_switch_relay_errors; | |
68 | __be16 port_xmit_discards; | |
69 | u8 port_xmit_constraint_errors; | |
70 | u8 port_rcv_constraint_errors; | |
71 | u8 reserved2; | |
6aea213a | 72 | u8 link_overrun_errors; /* LocalLink: 7:4, BufferOverrun: 3:0 */ |
f931551b RC |
73 | __be16 reserved3; |
74 | __be16 vl15_dropped; | |
75 | __be64 port_xmit_data; | |
76 | __be64 port_rcv_data; | |
77 | __be64 port_xmit_packets; | |
78 | __be64 port_rcv_packets; | |
79 | __be64 port_xmit_wait; | |
80 | __be64 port_adr_events; | |
78a58864 | 81 | } __packed; |
f931551b RC |
82 | |
83 | #define IB_PMA_CONG_HW_CONTROL_TIMER 0x00 | |
84 | #define IB_PMA_CONG_HW_CONTROL_SAMPLE 0x01 | |
85 | ||
86 | #define QIB_XMIT_RATE_UNSUPPORTED 0x0 | |
87 | #define QIB_XMIT_RATE_PICO 0x7 | |
88 | /* number of 4nsec cycles equaling 2secs */ | |
89 | #define QIB_CONG_TIMER_PSINTERVAL 0x1DCD64EC | |
90 | ||
f931551b RC |
91 | #define IB_PMA_SEL_CONG_ALL 0x01 |
92 | #define IB_PMA_SEL_CONG_PORT_DATA 0x02 | |
93 | #define IB_PMA_SEL_CONG_XMIT 0x04 | |
94 | #define IB_PMA_SEL_CONG_ROUTING 0x08 | |
95 | ||
36a8f01c MM |
96 | /* |
97 | * Congestion control class attributes | |
98 | */ | |
99 | #define IB_CC_ATTR_CLASSPORTINFO cpu_to_be16(0x0001) | |
100 | #define IB_CC_ATTR_NOTICE cpu_to_be16(0x0002) | |
101 | #define IB_CC_ATTR_CONGESTION_INFO cpu_to_be16(0x0011) | |
102 | #define IB_CC_ATTR_CONGESTION_KEY_INFO cpu_to_be16(0x0012) | |
103 | #define IB_CC_ATTR_CONGESTION_LOG cpu_to_be16(0x0013) | |
104 | #define IB_CC_ATTR_SWITCH_CONGESTION_SETTING cpu_to_be16(0x0014) | |
105 | #define IB_CC_ATTR_SWITCH_PORT_CONGESTION_SETTING cpu_to_be16(0x0015) | |
106 | #define IB_CC_ATTR_CA_CONGESTION_SETTING cpu_to_be16(0x0016) | |
107 | #define IB_CC_ATTR_CONGESTION_CONTROL_TABLE cpu_to_be16(0x0017) | |
108 | #define IB_CC_ATTR_TIME_STAMP cpu_to_be16(0x0018) | |
109 | ||
110 | /* generalizations for threshold values */ | |
111 | #define IB_CC_THRESHOLD_NONE 0x0 | |
112 | #define IB_CC_THRESHOLD_MIN 0x1 | |
113 | #define IB_CC_THRESHOLD_MAX 0xf | |
114 | ||
115 | /* CCA MAD header constants */ | |
116 | #define IB_CC_MAD_LOGDATA_LEN 32 | |
117 | #define IB_CC_MAD_MGMTDATA_LEN 192 | |
118 | ||
119 | struct ib_cc_mad { | |
120 | u8 base_version; | |
121 | u8 mgmt_class; | |
122 | u8 class_version; | |
123 | u8 method; | |
124 | __be16 status; | |
125 | __be16 class_specific; | |
126 | __be64 tid; | |
127 | __be16 attr_id; | |
128 | __be16 resv; | |
129 | __be32 attr_mod; | |
130 | __be64 cckey; | |
131 | ||
132 | /* For CongestionLog attribute only */ | |
133 | u8 log_data[IB_CC_MAD_LOGDATA_LEN]; | |
134 | ||
135 | u8 mgmt_data[IB_CC_MAD_MGMTDATA_LEN]; | |
136 | } __packed; | |
137 | ||
138 | /* | |
139 | * Congestion Control class portinfo capability mask bits | |
140 | */ | |
141 | #define IB_CC_CPI_CM_TRAP_GEN cpu_to_be16(1 << 0) | |
142 | #define IB_CC_CPI_CM_GET_SET_NOTICE cpu_to_be16(1 << 1) | |
143 | #define IB_CC_CPI_CM_CAP2 cpu_to_be16(1 << 2) | |
144 | #define IB_CC_CPI_CM_ENHANCEDPORT0_CC cpu_to_be16(1 << 8) | |
145 | ||
146 | struct ib_cc_classportinfo_attr { | |
147 | u8 base_version; | |
148 | u8 class_version; | |
149 | __be16 cap_mask; | |
150 | u8 reserved[3]; | |
151 | u8 resp_time_value; /* only lower 5 bits */ | |
152 | union ib_gid redirect_gid; | |
153 | __be32 redirect_tc_sl_fl; /* 8, 4, 20 bits respectively */ | |
154 | __be16 redirect_lid; | |
155 | __be16 redirect_pkey; | |
156 | __be32 redirect_qp; /* only lower 24 bits */ | |
157 | __be32 redirect_qkey; | |
158 | union ib_gid trap_gid; | |
159 | __be32 trap_tc_sl_fl; /* 8, 4, 20 bits respectively */ | |
160 | __be16 trap_lid; | |
161 | __be16 trap_pkey; | |
162 | __be32 trap_hl_qp; /* 8, 24 bits respectively */ | |
163 | __be32 trap_qkey; | |
164 | } __packed; | |
165 | ||
166 | /* Congestion control traps */ | |
167 | #define IB_CC_TRAP_KEY_VIOLATION 0x0000 | |
168 | ||
169 | struct ib_cc_trap_key_violation_attr { | |
170 | __be16 source_lid; | |
171 | u8 method; | |
172 | u8 reserved1; | |
173 | __be16 attrib_id; | |
174 | __be32 attrib_mod; | |
175 | __be32 qp; | |
176 | __be64 cckey; | |
177 | u8 sgid[16]; | |
178 | u8 padding[24]; | |
179 | } __packed; | |
180 | ||
181 | /* Congestion info flags */ | |
182 | #define IB_CC_CI_FLAGS_CREDIT_STARVATION 0x1 | |
183 | #define IB_CC_TABLE_CAP_DEFAULT 31 | |
184 | ||
185 | struct ib_cc_info_attr { | |
186 | __be16 congestion_info; | |
187 | u8 control_table_cap; /* Multiple of 64 entry unit CCTs */ | |
188 | } __packed; | |
189 | ||
190 | struct ib_cc_key_info_attr { | |
191 | __be64 cckey; | |
192 | u8 protect; | |
193 | __be16 lease_period; | |
194 | __be16 violations; | |
195 | } __packed; | |
196 | ||
197 | #define IB_CC_CL_CA_LOGEVENTS_LEN 208 | |
198 | ||
199 | struct ib_cc_log_attr { | |
200 | u8 log_type; | |
201 | u8 congestion_flags; | |
202 | __be16 threshold_event_counter; | |
203 | __be16 threshold_congestion_event_map; | |
204 | __be16 current_time_stamp; | |
205 | u8 log_events[IB_CC_CL_CA_LOGEVENTS_LEN]; | |
206 | } __packed; | |
207 | ||
208 | #define IB_CC_CLEC_SERVICETYPE_RC 0x0 | |
209 | #define IB_CC_CLEC_SERVICETYPE_UC 0x1 | |
210 | #define IB_CC_CLEC_SERVICETYPE_RD 0x2 | |
211 | #define IB_CC_CLEC_SERVICETYPE_UD 0x3 | |
212 | ||
213 | struct ib_cc_log_event { | |
214 | u8 local_qp_cn_entry; | |
215 | u8 remote_qp_number_cn_entry[3]; | |
216 | u8 sl_cn_entry:4; | |
217 | u8 service_type_cn_entry:4; | |
218 | __be32 remote_lid_cn_entry; | |
219 | __be32 timestamp_cn_entry; | |
220 | } __packed; | |
221 | ||
222 | /* Sixteen congestion entries */ | |
223 | #define IB_CC_CCS_ENTRIES 16 | |
224 | ||
225 | /* Port control flags */ | |
226 | #define IB_CC_CCS_PC_SL_BASED 0x01 | |
227 | ||
228 | struct ib_cc_congestion_entry { | |
229 | u8 ccti_increase; | |
230 | __be16 ccti_timer; | |
231 | u8 trigger_threshold; | |
232 | u8 ccti_min; /* min CCTI for cc table */ | |
233 | } __packed; | |
234 | ||
235 | struct ib_cc_congestion_entry_shadow { | |
236 | u8 ccti_increase; | |
237 | u16 ccti_timer; | |
238 | u8 trigger_threshold; | |
239 | u8 ccti_min; /* min CCTI for cc table */ | |
240 | } __packed; | |
241 | ||
242 | struct ib_cc_congestion_setting_attr { | |
243 | __be16 port_control; | |
244 | __be16 control_map; | |
245 | struct ib_cc_congestion_entry entries[IB_CC_CCS_ENTRIES]; | |
246 | } __packed; | |
247 | ||
248 | struct ib_cc_congestion_setting_attr_shadow { | |
249 | u16 port_control; | |
250 | u16 control_map; | |
251 | struct ib_cc_congestion_entry_shadow entries[IB_CC_CCS_ENTRIES]; | |
252 | } __packed; | |
253 | ||
254 | #define IB_CC_TABLE_ENTRY_INCREASE_DEFAULT 1 | |
255 | #define IB_CC_TABLE_ENTRY_TIMER_DEFAULT 1 | |
256 | ||
257 | /* 64 Congestion Control table entries in a single MAD */ | |
258 | #define IB_CCT_ENTRIES 64 | |
259 | #define IB_CCT_MIN_ENTRIES (IB_CCT_ENTRIES * 2) | |
260 | ||
261 | struct ib_cc_table_entry { | |
262 | __be16 entry; /* shift:2, multiplier:14 */ | |
263 | }; | |
264 | ||
265 | struct ib_cc_table_entry_shadow { | |
266 | u16 entry; /* shift:2, multiplier:14 */ | |
267 | }; | |
268 | ||
269 | struct ib_cc_table_attr { | |
270 | __be16 ccti_limit; /* max CCTI for cc table */ | |
271 | struct ib_cc_table_entry ccti_entries[IB_CCT_ENTRIES]; | |
272 | } __packed; | |
273 | ||
274 | struct ib_cc_table_attr_shadow { | |
275 | u16 ccti_limit; /* max CCTI for cc table */ | |
276 | struct ib_cc_table_entry_shadow ccti_entries[IB_CCT_ENTRIES]; | |
277 | } __packed; | |
278 | ||
279 | #define CC_TABLE_SHADOW_MAX \ | |
280 | (IB_CC_TABLE_CAP_DEFAULT * IB_CCT_ENTRIES) | |
281 | ||
282 | struct cc_table_shadow { | |
283 | u16 ccti_last_entry; | |
284 | struct ib_cc_table_entry_shadow entries[CC_TABLE_SHADOW_MAX]; | |
285 | } __packed; | |
286 | ||
f931551b RC |
287 | /* |
288 | * The PortSamplesControl.CounterMasks field is an array of 3 bit fields | |
289 | * which specify the N'th counter's capabilities. See ch. 16.1.3.2. | |
290 | * We support 5 counters which only count the mandatory quantities. | |
291 | */ | |
292 | #define COUNTER_MASK(q, n) (q << ((9 - n) * 3)) | |
293 | #define COUNTER_MASK0_9 \ | |
294 | cpu_to_be32(COUNTER_MASK(1, 0) | \ | |
295 | COUNTER_MASK(1, 1) | \ | |
296 | COUNTER_MASK(1, 2) | \ | |
297 | COUNTER_MASK(1, 3) | \ | |
298 | COUNTER_MASK(1, 4)) | |
0318f685 IW |
299 | |
300 | #endif /* _QIB_MAD_H */ |