1f48ad614SDennis Dalessandro /* 2f48ad614SDennis Dalessandro * Copyright(c) 2015, 2016 Intel Corporation. 3f48ad614SDennis Dalessandro * 4f48ad614SDennis Dalessandro * This file is provided under a dual BSD/GPLv2 license. When using or 5f48ad614SDennis Dalessandro * redistributing this file, you may do so under either license. 6f48ad614SDennis Dalessandro * 7f48ad614SDennis Dalessandro * GPL LICENSE SUMMARY 8f48ad614SDennis Dalessandro * 9f48ad614SDennis Dalessandro * This program is free software; you can redistribute it and/or modify 10f48ad614SDennis Dalessandro * it under the terms of version 2 of the GNU General Public License as 11f48ad614SDennis Dalessandro * published by the Free Software Foundation. 12f48ad614SDennis Dalessandro * 13f48ad614SDennis Dalessandro * This program is distributed in the hope that it will be useful, but 14f48ad614SDennis Dalessandro * WITHOUT ANY WARRANTY; without even the implied warranty of 15f48ad614SDennis Dalessandro * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16f48ad614SDennis Dalessandro * General Public License for more details. 17f48ad614SDennis Dalessandro * 18f48ad614SDennis Dalessandro * BSD LICENSE 19f48ad614SDennis Dalessandro * 20f48ad614SDennis Dalessandro * Redistribution and use in source and binary forms, with or without 21f48ad614SDennis Dalessandro * modification, are permitted provided that the following conditions 22f48ad614SDennis Dalessandro * are met: 23f48ad614SDennis Dalessandro * 24f48ad614SDennis Dalessandro * - Redistributions of source code must retain the above copyright 25f48ad614SDennis Dalessandro * notice, this list of conditions and the following disclaimer. 26f48ad614SDennis Dalessandro * - Redistributions in binary form must reproduce the above copyright 27f48ad614SDennis Dalessandro * notice, this list of conditions and the following disclaimer in 28f48ad614SDennis Dalessandro * the documentation and/or other materials provided with the 29f48ad614SDennis Dalessandro * distribution. 30f48ad614SDennis Dalessandro * - Neither the name of Intel Corporation nor the names of its 31f48ad614SDennis Dalessandro * contributors may be used to endorse or promote products derived 32f48ad614SDennis Dalessandro * from this software without specific prior written permission. 33f48ad614SDennis Dalessandro * 34f48ad614SDennis Dalessandro * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35f48ad614SDennis Dalessandro * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36f48ad614SDennis Dalessandro * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37f48ad614SDennis Dalessandro * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38f48ad614SDennis Dalessandro * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39f48ad614SDennis Dalessandro * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40f48ad614SDennis Dalessandro * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41f48ad614SDennis Dalessandro * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42f48ad614SDennis Dalessandro * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43f48ad614SDennis Dalessandro * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44f48ad614SDennis Dalessandro * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45f48ad614SDennis Dalessandro * 46f48ad614SDennis Dalessandro */ 47f48ad614SDennis Dalessandro #ifndef _HFI1_MAD_H 48f48ad614SDennis Dalessandro #define _HFI1_MAD_H 49f48ad614SDennis Dalessandro 50f48ad614SDennis Dalessandro #include <rdma/ib_pma.h> 51f48ad614SDennis Dalessandro #define USE_PI_LED_ENABLE 1 /* 52f48ad614SDennis Dalessandro * use led enabled bit in struct 53f48ad614SDennis Dalessandro * opa_port_states, if available 54f48ad614SDennis Dalessandro */ 55f48ad614SDennis Dalessandro #include <rdma/opa_smi.h> 56f48ad614SDennis Dalessandro #include <rdma/opa_port_info.h> 57f48ad614SDennis Dalessandro #ifndef PI_LED_ENABLE_SUP 58f48ad614SDennis Dalessandro #define PI_LED_ENABLE_SUP 0 59f48ad614SDennis Dalessandro #endif 60f48ad614SDennis Dalessandro #include "opa_compat.h" 61f48ad614SDennis Dalessandro 62f48ad614SDennis Dalessandro /* 63f48ad614SDennis Dalessandro * OPA Traps 64f48ad614SDennis Dalessandro */ 65f48ad614SDennis Dalessandro #define OPA_TRAP_GID_NOW_IN_SERVICE cpu_to_be16(64) 66f48ad614SDennis Dalessandro #define OPA_TRAP_GID_OUT_OF_SERVICE cpu_to_be16(65) 67f48ad614SDennis Dalessandro #define OPA_TRAP_ADD_MULTICAST_GROUP cpu_to_be16(66) 68f48ad614SDennis Dalessandro #define OPA_TRAL_DEL_MULTICAST_GROUP cpu_to_be16(67) 69f48ad614SDennis Dalessandro #define OPA_TRAP_UNPATH cpu_to_be16(68) 70f48ad614SDennis Dalessandro #define OPA_TRAP_REPATH cpu_to_be16(69) 71f48ad614SDennis Dalessandro #define OPA_TRAP_PORT_CHANGE_STATE cpu_to_be16(128) 72f48ad614SDennis Dalessandro #define OPA_TRAP_LINK_INTEGRITY cpu_to_be16(129) 73f48ad614SDennis Dalessandro #define OPA_TRAP_EXCESSIVE_BUFFER_OVERRUN cpu_to_be16(130) 74f48ad614SDennis Dalessandro #define OPA_TRAP_FLOW_WATCHDOG cpu_to_be16(131) 75f48ad614SDennis Dalessandro #define OPA_TRAP_CHANGE_CAPABILITY cpu_to_be16(144) 76f48ad614SDennis Dalessandro #define OPA_TRAP_CHANGE_SYSGUID cpu_to_be16(145) 77f48ad614SDennis Dalessandro #define OPA_TRAP_BAD_M_KEY cpu_to_be16(256) 78f48ad614SDennis Dalessandro #define OPA_TRAP_BAD_P_KEY cpu_to_be16(257) 79f48ad614SDennis Dalessandro #define OPA_TRAP_BAD_Q_KEY cpu_to_be16(258) 80f48ad614SDennis Dalessandro #define OPA_TRAP_SWITCH_BAD_PKEY cpu_to_be16(259) 81f48ad614SDennis Dalessandro #define OPA_SMA_TRAP_DATA_LINK_WIDTH cpu_to_be16(2048) 82f48ad614SDennis Dalessandro 83f48ad614SDennis Dalessandro /* 84f48ad614SDennis Dalessandro * Generic trap/notice other local changes flags (trap 144). 85f48ad614SDennis Dalessandro */ 86f48ad614SDennis Dalessandro #define OPA_NOTICE_TRAP_LWDE_CHG 0x08 /* Link Width Downgrade Enable 87f48ad614SDennis Dalessandro * changed 88f48ad614SDennis Dalessandro */ 89f48ad614SDennis Dalessandro #define OPA_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */ 90f48ad614SDennis Dalessandro #define OPA_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */ 91f48ad614SDennis Dalessandro #define OPA_NOTICE_TRAP_NODE_DESC_CHG 0x01 92f48ad614SDennis Dalessandro 93f48ad614SDennis Dalessandro struct opa_mad_notice_attr { 94f48ad614SDennis Dalessandro u8 generic_type; 95f48ad614SDennis Dalessandro u8 prod_type_msb; 96f48ad614SDennis Dalessandro __be16 prod_type_lsb; 97f48ad614SDennis Dalessandro __be16 trap_num; 98f48ad614SDennis Dalessandro __be16 toggle_count; 99f48ad614SDennis Dalessandro __be32 issuer_lid; 100f48ad614SDennis Dalessandro __be32 reserved1; 101f48ad614SDennis Dalessandro union ib_gid issuer_gid; 102f48ad614SDennis Dalessandro 103f48ad614SDennis Dalessandro union { 104f48ad614SDennis Dalessandro struct { 105f48ad614SDennis Dalessandro u8 details[64]; 106f48ad614SDennis Dalessandro } raw_data; 107f48ad614SDennis Dalessandro 108f48ad614SDennis Dalessandro struct { 109f48ad614SDennis Dalessandro union ib_gid gid; 110f48ad614SDennis Dalessandro } __packed ntc_64_65_66_67; 111f48ad614SDennis Dalessandro 112f48ad614SDennis Dalessandro struct { 113f48ad614SDennis Dalessandro __be32 lid; 114f48ad614SDennis Dalessandro } __packed ntc_128; 115f48ad614SDennis Dalessandro 116f48ad614SDennis Dalessandro struct { 117f48ad614SDennis Dalessandro __be32 lid; /* where violation happened */ 118f48ad614SDennis Dalessandro u8 port_num; /* where violation happened */ 119f48ad614SDennis Dalessandro } __packed ntc_129_130_131; 120f48ad614SDennis Dalessandro 121f48ad614SDennis Dalessandro struct { 122f48ad614SDennis Dalessandro __be32 lid; /* LID where change occurred */ 123f48ad614SDennis Dalessandro __be32 new_cap_mask; /* new capability mask */ 124f48ad614SDennis Dalessandro __be16 reserved2; 125f48ad614SDennis Dalessandro __be16 cap_mask; 126f48ad614SDennis Dalessandro __be16 change_flags; /* low 4 bits only */ 127f48ad614SDennis Dalessandro } __packed ntc_144; 128f48ad614SDennis Dalessandro 129f48ad614SDennis Dalessandro struct { 130f48ad614SDennis Dalessandro __be64 new_sys_guid; 131f48ad614SDennis Dalessandro __be32 lid; /* lid where sys guid changed */ 132f48ad614SDennis Dalessandro } __packed ntc_145; 133f48ad614SDennis Dalessandro 134f48ad614SDennis Dalessandro struct { 135f48ad614SDennis Dalessandro __be32 lid; 136f48ad614SDennis Dalessandro __be32 dr_slid; 137f48ad614SDennis Dalessandro u8 method; 138f48ad614SDennis Dalessandro u8 dr_trunc_hop; 139f48ad614SDennis Dalessandro __be16 attr_id; 140f48ad614SDennis Dalessandro __be32 attr_mod; 141f48ad614SDennis Dalessandro __be64 mkey; 142f48ad614SDennis Dalessandro u8 dr_rtn_path[30]; 143f48ad614SDennis Dalessandro } __packed ntc_256; 144f48ad614SDennis Dalessandro 145f48ad614SDennis Dalessandro struct { 146f48ad614SDennis Dalessandro __be32 lid1; 147f48ad614SDennis Dalessandro __be32 lid2; 148f48ad614SDennis Dalessandro __be32 key; 149f48ad614SDennis Dalessandro u8 sl; /* SL: high 5 bits */ 150f48ad614SDennis Dalessandro u8 reserved3[3]; 151f48ad614SDennis Dalessandro union ib_gid gid1; 152f48ad614SDennis Dalessandro union ib_gid gid2; 153f48ad614SDennis Dalessandro __be32 qp1; /* high 8 bits reserved */ 154f48ad614SDennis Dalessandro __be32 qp2; /* high 8 bits reserved */ 155f48ad614SDennis Dalessandro } __packed ntc_257_258; 156f48ad614SDennis Dalessandro 157f48ad614SDennis Dalessandro struct { 158f48ad614SDennis Dalessandro __be16 flags; /* low 8 bits reserved */ 159f48ad614SDennis Dalessandro __be16 pkey; 160f48ad614SDennis Dalessandro __be32 lid1; 161f48ad614SDennis Dalessandro __be32 lid2; 162f48ad614SDennis Dalessandro u8 sl; /* SL: high 5 bits */ 163f48ad614SDennis Dalessandro u8 reserved4[3]; 164f48ad614SDennis Dalessandro union ib_gid gid1; 165f48ad614SDennis Dalessandro union ib_gid gid2; 166f48ad614SDennis Dalessandro __be32 qp1; /* high 8 bits reserved */ 167f48ad614SDennis Dalessandro __be32 qp2; /* high 8 bits reserved */ 168f48ad614SDennis Dalessandro } __packed ntc_259; 169f48ad614SDennis Dalessandro 170f48ad614SDennis Dalessandro struct { 171f48ad614SDennis Dalessandro __be32 lid; 172f48ad614SDennis Dalessandro } __packed ntc_2048; 173f48ad614SDennis Dalessandro 174f48ad614SDennis Dalessandro }; 175f48ad614SDennis Dalessandro u8 class_data[0]; 176f48ad614SDennis Dalessandro }; 177f48ad614SDennis Dalessandro 178f48ad614SDennis Dalessandro #define IB_VLARB_LOWPRI_0_31 1 179f48ad614SDennis Dalessandro #define IB_VLARB_LOWPRI_32_63 2 180f48ad614SDennis Dalessandro #define IB_VLARB_HIGHPRI_0_31 3 181f48ad614SDennis Dalessandro #define IB_VLARB_HIGHPRI_32_63 4 182f48ad614SDennis Dalessandro 183f48ad614SDennis Dalessandro #define OPA_MAX_PREEMPT_CAP 32 184f48ad614SDennis Dalessandro #define OPA_VLARB_LOW_ELEMENTS 0 185f48ad614SDennis Dalessandro #define OPA_VLARB_HIGH_ELEMENTS 1 186f48ad614SDennis Dalessandro #define OPA_VLARB_PREEMPT_ELEMENTS 2 187f48ad614SDennis Dalessandro #define OPA_VLARB_PREEMPT_MATRIX 3 188f48ad614SDennis Dalessandro 189f48ad614SDennis Dalessandro #define IB_PMA_PORT_COUNTERS_CONG cpu_to_be16(0xFF00) 190f48ad614SDennis Dalessandro 191f48ad614SDennis Dalessandro struct ib_pma_portcounters_cong { 192f48ad614SDennis Dalessandro u8 reserved; 193f48ad614SDennis Dalessandro u8 reserved1; 194f48ad614SDennis Dalessandro __be16 port_check_rate; 195f48ad614SDennis Dalessandro __be16 symbol_error_counter; 196f48ad614SDennis Dalessandro u8 link_error_recovery_counter; 197f48ad614SDennis Dalessandro u8 link_downed_counter; 198f48ad614SDennis Dalessandro __be16 port_rcv_errors; 199f48ad614SDennis Dalessandro __be16 port_rcv_remphys_errors; 200f48ad614SDennis Dalessandro __be16 port_rcv_switch_relay_errors; 201f48ad614SDennis Dalessandro __be16 port_xmit_discards; 202f48ad614SDennis Dalessandro u8 port_xmit_constraint_errors; 203f48ad614SDennis Dalessandro u8 port_rcv_constraint_errors; 204f48ad614SDennis Dalessandro u8 reserved2; 205f48ad614SDennis Dalessandro u8 link_overrun_errors; /* LocalLink: 7:4, BufferOverrun: 3:0 */ 206f48ad614SDennis Dalessandro __be16 reserved3; 207f48ad614SDennis Dalessandro __be16 vl15_dropped; 208f48ad614SDennis Dalessandro __be64 port_xmit_data; 209f48ad614SDennis Dalessandro __be64 port_rcv_data; 210f48ad614SDennis Dalessandro __be64 port_xmit_packets; 211f48ad614SDennis Dalessandro __be64 port_rcv_packets; 212f48ad614SDennis Dalessandro __be64 port_xmit_wait; 213f48ad614SDennis Dalessandro __be64 port_adr_events; 214f48ad614SDennis Dalessandro } __packed; 215f48ad614SDennis Dalessandro 216f48ad614SDennis Dalessandro #define IB_SMP_UNSUP_VERSION cpu_to_be16(0x0004) 217f48ad614SDennis Dalessandro #define IB_SMP_UNSUP_METHOD cpu_to_be16(0x0008) 218f48ad614SDennis Dalessandro #define IB_SMP_UNSUP_METH_ATTR cpu_to_be16(0x000C) 219f48ad614SDennis Dalessandro #define IB_SMP_INVALID_FIELD cpu_to_be16(0x001C) 220f48ad614SDennis Dalessandro 221f48ad614SDennis Dalessandro #define OPA_MAX_PREEMPT_CAP 32 222f48ad614SDennis Dalessandro #define OPA_VLARB_LOW_ELEMENTS 0 223f48ad614SDennis Dalessandro #define OPA_VLARB_HIGH_ELEMENTS 1 224f48ad614SDennis Dalessandro #define OPA_VLARB_PREEMPT_ELEMENTS 2 225f48ad614SDennis Dalessandro #define OPA_VLARB_PREEMPT_MATRIX 3 226f48ad614SDennis Dalessandro 227f48ad614SDennis Dalessandro #define HFI1_XMIT_RATE_UNSUPPORTED 0x0 228f48ad614SDennis Dalessandro #define HFI1_XMIT_RATE_PICO 0x7 229f48ad614SDennis Dalessandro /* number of 4nsec cycles equaling 2secs */ 230f48ad614SDennis Dalessandro #define HFI1_CONG_TIMER_PSINTERVAL 0x1DCD64EC 231f48ad614SDennis Dalessandro 232f48ad614SDennis Dalessandro #define IB_CC_SVCTYPE_RC 0x0 233f48ad614SDennis Dalessandro #define IB_CC_SVCTYPE_UC 0x1 234f48ad614SDennis Dalessandro #define IB_CC_SVCTYPE_RD 0x2 235f48ad614SDennis Dalessandro #define IB_CC_SVCTYPE_UD 0x3 236f48ad614SDennis Dalessandro 237f48ad614SDennis Dalessandro /* 238f48ad614SDennis Dalessandro * There should be an equivalent IB #define for the following, but 239f48ad614SDennis Dalessandro * I cannot find it. 240f48ad614SDennis Dalessandro */ 241f48ad614SDennis Dalessandro #define OPA_CC_LOG_TYPE_HFI 2 242f48ad614SDennis Dalessandro 243f48ad614SDennis Dalessandro struct opa_hfi1_cong_log_event_internal { 244f48ad614SDennis Dalessandro u32 lqpn; 245f48ad614SDennis Dalessandro u32 rqpn; 246f48ad614SDennis Dalessandro u8 sl; 247f48ad614SDennis Dalessandro u8 svc_type; 248f48ad614SDennis Dalessandro u32 rlid; 249f48ad614SDennis Dalessandro s64 timestamp; /* wider than 32 bits to detect 32 bit rollover */ 250f48ad614SDennis Dalessandro }; 251f48ad614SDennis Dalessandro 252f48ad614SDennis Dalessandro struct opa_hfi1_cong_log_event { 253f48ad614SDennis Dalessandro u8 local_qp_cn_entry[3]; 254f48ad614SDennis Dalessandro u8 remote_qp_number_cn_entry[3]; 255f48ad614SDennis Dalessandro u8 sl_svc_type_cn_entry; /* 5 bits SL, 3 bits svc type */ 256f48ad614SDennis Dalessandro u8 reserved; 257f48ad614SDennis Dalessandro __be32 remote_lid_cn_entry; 258f48ad614SDennis Dalessandro __be32 timestamp_cn_entry; 259f48ad614SDennis Dalessandro } __packed; 260f48ad614SDennis Dalessandro 261f48ad614SDennis Dalessandro #define OPA_CONG_LOG_ELEMS 96 262f48ad614SDennis Dalessandro 263f48ad614SDennis Dalessandro struct opa_hfi1_cong_log { 264f48ad614SDennis Dalessandro u8 log_type; 265f48ad614SDennis Dalessandro u8 congestion_flags; 266f48ad614SDennis Dalessandro __be16 threshold_event_counter; 267f48ad614SDennis Dalessandro __be32 current_time_stamp; 268f48ad614SDennis Dalessandro u8 threshold_cong_event_map[OPA_MAX_SLS / 8]; 269f48ad614SDennis Dalessandro struct opa_hfi1_cong_log_event events[OPA_CONG_LOG_ELEMS]; 270f48ad614SDennis Dalessandro } __packed; 271f48ad614SDennis Dalessandro 272f48ad614SDennis Dalessandro #define IB_CC_TABLE_CAP_DEFAULT 31 273f48ad614SDennis Dalessandro 274f48ad614SDennis Dalessandro /* Port control flags */ 275f48ad614SDennis Dalessandro #define IB_CC_CCS_PC_SL_BASED 0x01 276f48ad614SDennis Dalessandro 277f48ad614SDennis Dalessandro struct opa_congestion_setting_entry { 278f48ad614SDennis Dalessandro u8 ccti_increase; 279f48ad614SDennis Dalessandro u8 reserved; 280f48ad614SDennis Dalessandro __be16 ccti_timer; 281f48ad614SDennis Dalessandro u8 trigger_threshold; 282f48ad614SDennis Dalessandro u8 ccti_min; /* min CCTI for cc table */ 283f48ad614SDennis Dalessandro } __packed; 284f48ad614SDennis Dalessandro 285f48ad614SDennis Dalessandro struct opa_congestion_setting_entry_shadow { 286f48ad614SDennis Dalessandro u8 ccti_increase; 287f48ad614SDennis Dalessandro u8 reserved; 288f48ad614SDennis Dalessandro u16 ccti_timer; 289f48ad614SDennis Dalessandro u8 trigger_threshold; 290f48ad614SDennis Dalessandro u8 ccti_min; /* min CCTI for cc table */ 291f48ad614SDennis Dalessandro } __packed; 292f48ad614SDennis Dalessandro 293f48ad614SDennis Dalessandro struct opa_congestion_setting_attr { 294f48ad614SDennis Dalessandro __be32 control_map; 295f48ad614SDennis Dalessandro __be16 port_control; 296f48ad614SDennis Dalessandro struct opa_congestion_setting_entry entries[OPA_MAX_SLS]; 297f48ad614SDennis Dalessandro } __packed; 298f48ad614SDennis Dalessandro 299f48ad614SDennis Dalessandro struct opa_congestion_setting_attr_shadow { 300f48ad614SDennis Dalessandro u32 control_map; 301f48ad614SDennis Dalessandro u16 port_control; 302f48ad614SDennis Dalessandro struct opa_congestion_setting_entry_shadow entries[OPA_MAX_SLS]; 303f48ad614SDennis Dalessandro } __packed; 304f48ad614SDennis Dalessandro 305f48ad614SDennis Dalessandro #define IB_CC_TABLE_ENTRY_INCREASE_DEFAULT 1 306f48ad614SDennis Dalessandro #define IB_CC_TABLE_ENTRY_TIMER_DEFAULT 1 307f48ad614SDennis Dalessandro 308f48ad614SDennis Dalessandro /* 64 Congestion Control table entries in a single MAD */ 309f48ad614SDennis Dalessandro #define IB_CCT_ENTRIES 64 310f48ad614SDennis Dalessandro #define IB_CCT_MIN_ENTRIES (IB_CCT_ENTRIES * 2) 311f48ad614SDennis Dalessandro 312f48ad614SDennis Dalessandro struct ib_cc_table_entry { 313f48ad614SDennis Dalessandro __be16 entry; /* shift:2, multiplier:14 */ 314f48ad614SDennis Dalessandro }; 315f48ad614SDennis Dalessandro 316f48ad614SDennis Dalessandro struct ib_cc_table_entry_shadow { 317f48ad614SDennis Dalessandro u16 entry; /* shift:2, multiplier:14 */ 318f48ad614SDennis Dalessandro }; 319f48ad614SDennis Dalessandro 320f48ad614SDennis Dalessandro struct ib_cc_table_attr { 321f48ad614SDennis Dalessandro __be16 ccti_limit; /* max CCTI for cc table */ 322f48ad614SDennis Dalessandro struct ib_cc_table_entry ccti_entries[IB_CCT_ENTRIES]; 323f48ad614SDennis Dalessandro } __packed; 324f48ad614SDennis Dalessandro 325f48ad614SDennis Dalessandro struct ib_cc_table_attr_shadow { 326f48ad614SDennis Dalessandro u16 ccti_limit; /* max CCTI for cc table */ 327f48ad614SDennis Dalessandro struct ib_cc_table_entry_shadow ccti_entries[IB_CCT_ENTRIES]; 328f48ad614SDennis Dalessandro } __packed; 329f48ad614SDennis Dalessandro 330f48ad614SDennis Dalessandro #define CC_TABLE_SHADOW_MAX \ 331f48ad614SDennis Dalessandro (IB_CC_TABLE_CAP_DEFAULT * IB_CCT_ENTRIES) 332f48ad614SDennis Dalessandro 333f48ad614SDennis Dalessandro struct cc_table_shadow { 334f48ad614SDennis Dalessandro u16 ccti_limit; /* max CCTI for cc table */ 335f48ad614SDennis Dalessandro struct ib_cc_table_entry_shadow entries[CC_TABLE_SHADOW_MAX]; 336f48ad614SDennis Dalessandro } __packed; 337f48ad614SDennis Dalessandro 338f48ad614SDennis Dalessandro /* 339f48ad614SDennis Dalessandro * struct cc_state combines the (active) per-port congestion control 340f48ad614SDennis Dalessandro * table, and the (active) per-SL congestion settings. cc_state data 341f48ad614SDennis Dalessandro * may need to be read in code paths that we want to be fast, so it 342f48ad614SDennis Dalessandro * is an RCU protected structure. 343f48ad614SDennis Dalessandro */ 344f48ad614SDennis Dalessandro struct cc_state { 345f48ad614SDennis Dalessandro struct rcu_head rcu; 346f48ad614SDennis Dalessandro struct cc_table_shadow cct; 347f48ad614SDennis Dalessandro struct opa_congestion_setting_attr_shadow cong_setting; 348f48ad614SDennis Dalessandro }; 349f48ad614SDennis Dalessandro 350f48ad614SDennis Dalessandro /* 351f48ad614SDennis Dalessandro * OPA BufferControl MAD 352f48ad614SDennis Dalessandro */ 353f48ad614SDennis Dalessandro 354f48ad614SDennis Dalessandro /* attribute modifier macros */ 355f48ad614SDennis Dalessandro #define OPA_AM_NPORT_SHIFT 24 356f48ad614SDennis Dalessandro #define OPA_AM_NPORT_MASK 0xff 357f48ad614SDennis Dalessandro #define OPA_AM_NPORT_SMASK (OPA_AM_NPORT_MASK << OPA_AM_NPORT_SHIFT) 358f48ad614SDennis Dalessandro #define OPA_AM_NPORT(am) (((am) >> OPA_AM_NPORT_SHIFT) & \ 359f48ad614SDennis Dalessandro OPA_AM_NPORT_MASK) 360f48ad614SDennis Dalessandro 361f48ad614SDennis Dalessandro #define OPA_AM_NBLK_SHIFT 24 362f48ad614SDennis Dalessandro #define OPA_AM_NBLK_MASK 0xff 363f48ad614SDennis Dalessandro #define OPA_AM_NBLK_SMASK (OPA_AM_NBLK_MASK << OPA_AM_NBLK_SHIFT) 364f48ad614SDennis Dalessandro #define OPA_AM_NBLK(am) (((am) >> OPA_AM_NBLK_SHIFT) & \ 365f48ad614SDennis Dalessandro OPA_AM_NBLK_MASK) 366f48ad614SDennis Dalessandro 367f48ad614SDennis Dalessandro #define OPA_AM_START_BLK_SHIFT 0 368f48ad614SDennis Dalessandro #define OPA_AM_START_BLK_MASK 0xff 369f48ad614SDennis Dalessandro #define OPA_AM_START_BLK_SMASK (OPA_AM_START_BLK_MASK << \ 370f48ad614SDennis Dalessandro OPA_AM_START_BLK_SHIFT) 371f48ad614SDennis Dalessandro #define OPA_AM_START_BLK(am) (((am) >> OPA_AM_START_BLK_SHIFT) & \ 372f48ad614SDennis Dalessandro OPA_AM_START_BLK_MASK) 373f48ad614SDennis Dalessandro 374f48ad614SDennis Dalessandro #define OPA_AM_PORTNUM_SHIFT 0 375f48ad614SDennis Dalessandro #define OPA_AM_PORTNUM_MASK 0xff 376f48ad614SDennis Dalessandro #define OPA_AM_PORTNUM_SMASK (OPA_AM_PORTNUM_MASK << OPA_AM_PORTNUM_SHIFT) 377f48ad614SDennis Dalessandro #define OPA_AM_PORTNUM(am) (((am) >> OPA_AM_PORTNUM_SHIFT) & \ 378f48ad614SDennis Dalessandro OPA_AM_PORTNUM_MASK) 379f48ad614SDennis Dalessandro 380f48ad614SDennis Dalessandro #define OPA_AM_ASYNC_SHIFT 12 381f48ad614SDennis Dalessandro #define OPA_AM_ASYNC_MASK 0x1 382f48ad614SDennis Dalessandro #define OPA_AM_ASYNC_SMASK (OPA_AM_ASYNC_MASK << OPA_AM_ASYNC_SHIFT) 383f48ad614SDennis Dalessandro #define OPA_AM_ASYNC(am) (((am) >> OPA_AM_ASYNC_SHIFT) & \ 384f48ad614SDennis Dalessandro OPA_AM_ASYNC_MASK) 385f48ad614SDennis Dalessandro 386f48ad614SDennis Dalessandro #define OPA_AM_START_SM_CFG_SHIFT 9 387f48ad614SDennis Dalessandro #define OPA_AM_START_SM_CFG_MASK 0x1 388f48ad614SDennis Dalessandro #define OPA_AM_START_SM_CFG_SMASK (OPA_AM_START_SM_CFG_MASK << \ 389f48ad614SDennis Dalessandro OPA_AM_START_SM_CFG_SHIFT) 390f48ad614SDennis Dalessandro #define OPA_AM_START_SM_CFG(am) (((am) >> OPA_AM_START_SM_CFG_SHIFT) \ 391f48ad614SDennis Dalessandro & OPA_AM_START_SM_CFG_MASK) 392f48ad614SDennis Dalessandro 393f48ad614SDennis Dalessandro #define OPA_AM_CI_ADDR_SHIFT 19 394f48ad614SDennis Dalessandro #define OPA_AM_CI_ADDR_MASK 0xfff 395f48ad614SDennis Dalessandro #define OPA_AM_CI_ADDR_SMASK (OPA_AM_CI_ADDR_MASK << OPA_CI_ADDR_SHIFT) 396f48ad614SDennis Dalessandro #define OPA_AM_CI_ADDR(am) (((am) >> OPA_AM_CI_ADDR_SHIFT) & \ 397f48ad614SDennis Dalessandro OPA_AM_CI_ADDR_MASK) 398f48ad614SDennis Dalessandro 399f48ad614SDennis Dalessandro #define OPA_AM_CI_LEN_SHIFT 13 400f48ad614SDennis Dalessandro #define OPA_AM_CI_LEN_MASK 0x3f 401f48ad614SDennis Dalessandro #define OPA_AM_CI_LEN_SMASK (OPA_AM_CI_LEN_MASK << OPA_CI_LEN_SHIFT) 402f48ad614SDennis Dalessandro #define OPA_AM_CI_LEN(am) (((am) >> OPA_AM_CI_LEN_SHIFT) & \ 403f48ad614SDennis Dalessandro OPA_AM_CI_LEN_MASK) 404f48ad614SDennis Dalessandro 405f48ad614SDennis Dalessandro /* error info macros */ 406f48ad614SDennis Dalessandro #define OPA_EI_STATUS_SMASK 0x80 407f48ad614SDennis Dalessandro #define OPA_EI_CODE_SMASK 0x0f 408f48ad614SDennis Dalessandro 409f48ad614SDennis Dalessandro struct vl_limit { 410f48ad614SDennis Dalessandro __be16 dedicated; 411f48ad614SDennis Dalessandro __be16 shared; 412f48ad614SDennis Dalessandro }; 413f48ad614SDennis Dalessandro 414f48ad614SDennis Dalessandro struct buffer_control { 415f48ad614SDennis Dalessandro __be16 reserved; 416f48ad614SDennis Dalessandro __be16 overall_shared_limit; 417f48ad614SDennis Dalessandro struct vl_limit vl[OPA_MAX_VLS]; 418f48ad614SDennis Dalessandro }; 419f48ad614SDennis Dalessandro 420f48ad614SDennis Dalessandro struct sc2vlnt { 421f48ad614SDennis Dalessandro u8 vlnt[32]; /* 5 bit VL, 3 bits reserved */ 422f48ad614SDennis Dalessandro }; 423f48ad614SDennis Dalessandro 424f48ad614SDennis Dalessandro /* 425f48ad614SDennis Dalessandro * The PortSamplesControl.CounterMasks field is an array of 3 bit fields 426f48ad614SDennis Dalessandro * which specify the N'th counter's capabilities. See ch. 16.1.3.2. 427f48ad614SDennis Dalessandro * We support 5 counters which only count the mandatory quantities. 428f48ad614SDennis Dalessandro */ 429f48ad614SDennis Dalessandro #define COUNTER_MASK(q, n) (q << ((9 - n) * 3)) 430f48ad614SDennis Dalessandro #define COUNTER_MASK0_9 \ 431f48ad614SDennis Dalessandro cpu_to_be32(COUNTER_MASK(1, 0) | \ 432f48ad614SDennis Dalessandro COUNTER_MASK(1, 1) | \ 433f48ad614SDennis Dalessandro COUNTER_MASK(1, 2) | \ 434f48ad614SDennis Dalessandro COUNTER_MASK(1, 3) | \ 435f48ad614SDennis Dalessandro COUNTER_MASK(1, 4)) 436f48ad614SDennis Dalessandro 437*34d351f8SSebastian Sanchez void hfi1_event_pkey_change(struct hfi1_devdata *dd, u8 port); 438*34d351f8SSebastian Sanchez 439f48ad614SDennis Dalessandro #endif /* _HFI1_MAD_H */ 440