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