^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2004 Infinicon Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2004 Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (c) 2004 Topspin Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (c) 2004 Voltaire Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef IB_SMI_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define IB_SMI_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <rdma/ib_mad.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define IB_SMP_DATA_SIZE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define IB_SMP_MAX_PATH_HOPS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) struct ib_smp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) u8 base_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) u8 mgmt_class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) u8 class_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) u8 method;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) __be16 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) u8 hop_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) u8 hop_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __be64 tid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __be16 attr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) __be16 resv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __be32 attr_mod;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __be64 mkey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __be16 dr_slid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __be16 dr_dlid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) u8 reserved[28];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) u8 data[IB_SMP_DATA_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) u8 initial_path[IB_SMP_MAX_PATH_HOPS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) u8 return_path[IB_SMP_MAX_PATH_HOPS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define IB_SMP_DIRECTION cpu_to_be16(0x8000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /* Subnet management attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define IB_SMP_ATTR_NOTICE cpu_to_be16(0x0002)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define IB_SMP_ATTR_NODE_DESC cpu_to_be16(0x0010)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define IB_SMP_ATTR_NODE_INFO cpu_to_be16(0x0011)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define IB_SMP_ATTR_SWITCH_INFO cpu_to_be16(0x0012)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define IB_SMP_ATTR_GUID_INFO cpu_to_be16(0x0014)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define IB_SMP_ATTR_PORT_INFO cpu_to_be16(0x0015)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define IB_SMP_ATTR_PKEY_TABLE cpu_to_be16(0x0016)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define IB_SMP_ATTR_SL_TO_VL_TABLE cpu_to_be16(0x0017)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define IB_SMP_ATTR_VL_ARB_TABLE cpu_to_be16(0x0018)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define IB_SMP_ATTR_LINEAR_FORWARD_TABLE cpu_to_be16(0x0019)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define IB_SMP_ATTR_RANDOM_FORWARD_TABLE cpu_to_be16(0x001A)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define IB_SMP_ATTR_MCAST_FORWARD_TABLE cpu_to_be16(0x001B)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define IB_SMP_ATTR_SM_INFO cpu_to_be16(0x0020)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define IB_SMP_ATTR_VENDOR_DIAG cpu_to_be16(0x0030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define IB_SMP_ATTR_LED_INFO cpu_to_be16(0x0031)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define IB_SMP_ATTR_VENDOR_MASK cpu_to_be16(0xFF00)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) struct ib_port_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __be64 mkey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) __be64 gid_prefix;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __be16 lid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __be16 sm_lid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __be32 cap_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __be16 diag_code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __be16 mkey_lease_period;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u8 local_port_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) u8 link_width_enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) u8 link_width_supported;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u8 link_width_active;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) u8 linkspeed_portstate; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) u8 portphysstate_linkdown; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) u8 mkeyprot_resv_lmc; /* 2 bits, 3, 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) u8 linkspeedactive_enabled; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) u8 neighbormtu_mastersmsl; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) u8 vlcap_inittype; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) u8 vl_high_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) u8 vl_arb_high_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) u8 vl_arb_low_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u8 inittypereply_mtucap; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) u8 vlstallcnt_hoqlife; /* 3 bits, 5 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) u8 operationalvl_pei_peo_fpi_fpo; /* 4 bits, 1, 1, 1, 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) __be16 mkey_violations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) __be16 pkey_violations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) __be16 qkey_violations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) u8 guid_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) u8 clientrereg_resv_subnetto; /* 1 bit, 2 bits, 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) u8 resv_resptimevalue; /* 3 bits, 5 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) u8 localphyerrors_overrunerrors; /* 4 bits, 4 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) __be16 max_credit_hint;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u8 resv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) u8 link_roundtrip_latency[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) struct ib_node_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) u8 base_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) u8 class_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) u8 node_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) u8 num_ports;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) __be64 sys_guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) __be64 node_guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __be64 port_guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) __be16 partition_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __be16 device_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __be32 revision;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) u8 local_port_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) u8 vendor_id[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) struct ib_vl_weight_elem {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) u8 vl; /* IB: VL is low 4 bits, upper 4 bits reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) /* OPA: VL is low 5 bits, upper 3 bits reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) u8 weight;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) static inline u8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) ib_get_smp_direction(struct ib_smp *smp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) return ((smp->status & IB_SMP_DIRECTION) == IB_SMP_DIRECTION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) * SM Trap/Notice numbers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define IB_NOTICE_TRAP_LLI_THRESH cpu_to_be16(129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define IB_NOTICE_TRAP_EBO_THRESH cpu_to_be16(130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define IB_NOTICE_TRAP_FLOW_UPDATE cpu_to_be16(131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define IB_NOTICE_TRAP_CAP_MASK_CHG cpu_to_be16(144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define IB_NOTICE_TRAP_SYS_GUID_CHG cpu_to_be16(145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define IB_NOTICE_TRAP_BAD_MKEY cpu_to_be16(256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define IB_NOTICE_TRAP_BAD_PKEY cpu_to_be16(257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define IB_NOTICE_TRAP_BAD_QKEY cpu_to_be16(258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) * Other local changes flags (trap 144).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define IB_NOTICE_TRAP_LSE_CHG 0x04 /* Link Speed Enable changed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define IB_NOTICE_TRAP_LWE_CHG 0x02 /* Link Width Enable changed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define IB_NOTICE_TRAP_NODE_DESC_CHG 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * M_Key volation flags in dr_trunc_hop (trap 256).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define IB_NOTICE_TRAP_DR_NOTICE 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define IB_NOTICE_TRAP_DR_TRUNC 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #endif /* IB_SMI_H */