This source file includes following definitions.
- opa_get_smp_direction
 
- opa_get_smp_data
 
- opa_get_smp_data_size
 
- opa_get_smp_header_size
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 #if !defined(OPA_SMI_H)
  34 #define OPA_SMI_H
  35 
  36 #include <rdma/ib_mad.h>
  37 #include <rdma/ib_smi.h>
  38 
  39 #define OPA_SMP_LID_DATA_SIZE                   2016
  40 #define OPA_SMP_DR_DATA_SIZE                    1872
  41 #define OPA_SMP_MAX_PATH_HOPS                   64
  42 
  43 #define OPA_MAX_VLS                             32
  44 #define OPA_MAX_SLS                             32
  45 #define OPA_MAX_SCS                             32
  46 
  47 #define OPA_LID_PERMISSIVE                      cpu_to_be32(0xFFFFFFFF)
  48 
  49 struct opa_smp {
  50         u8      base_version;
  51         u8      mgmt_class;
  52         u8      class_version;
  53         u8      method;
  54         __be16  status;
  55         u8      hop_ptr;
  56         u8      hop_cnt;
  57         __be64  tid;
  58         __be16  attr_id;
  59         __be16  resv;
  60         __be32  attr_mod;
  61         __be64  mkey;
  62         union {
  63                 struct {
  64                         uint8_t data[OPA_SMP_LID_DATA_SIZE];
  65                 } lid;
  66                 struct {
  67                         __be32  dr_slid;
  68                         __be32  dr_dlid;
  69                         u8      initial_path[OPA_SMP_MAX_PATH_HOPS];
  70                         u8      return_path[OPA_SMP_MAX_PATH_HOPS];
  71                         u8      reserved[8];
  72                         u8      data[OPA_SMP_DR_DATA_SIZE];
  73                 } dr;
  74         } route;
  75 } __packed;
  76 
  77 
  78 
  79 
  80 #define OPA_ATTRIB_ID_NODE_DESCRIPTION          cpu_to_be16(0x0010)
  81 #define OPA_ATTRIB_ID_NODE_INFO                 cpu_to_be16(0x0011)
  82 #define OPA_ATTRIB_ID_PORT_INFO                 cpu_to_be16(0x0015)
  83 #define OPA_ATTRIB_ID_PARTITION_TABLE           cpu_to_be16(0x0016)
  84 #define OPA_ATTRIB_ID_SL_TO_SC_MAP              cpu_to_be16(0x0017)
  85 #define OPA_ATTRIB_ID_VL_ARBITRATION            cpu_to_be16(0x0018)
  86 #define OPA_ATTRIB_ID_SM_INFO                   cpu_to_be16(0x0020)
  87 #define OPA_ATTRIB_ID_CABLE_INFO                cpu_to_be16(0x0032)
  88 #define OPA_ATTRIB_ID_AGGREGATE                 cpu_to_be16(0x0080)
  89 #define OPA_ATTRIB_ID_SC_TO_SL_MAP              cpu_to_be16(0x0082)
  90 #define OPA_ATTRIB_ID_SC_TO_VLR_MAP             cpu_to_be16(0x0083)
  91 #define OPA_ATTRIB_ID_SC_TO_VLT_MAP             cpu_to_be16(0x0084)
  92 #define OPA_ATTRIB_ID_SC_TO_VLNT_MAP            cpu_to_be16(0x0085)
  93 
  94 #define OPA_ATTRIB_ID_PORT_STATE_INFO           cpu_to_be16(0x0087)
  95 
  96 #define OPA_ATTRIB_ID_BUFFER_CONTROL_TABLE      cpu_to_be16(0x008A)
  97 
  98 
  99 struct opa_node_description {
 100         u8 data[64];
 101 } __packed;
 102 
 103 struct opa_node_info {
 104         u8      base_version;
 105         u8      class_version;
 106         u8      node_type;
 107         u8      num_ports;
 108         __be32  reserved;
 109         __be64  system_image_guid;
 110         __be64  node_guid;
 111         __be64  port_guid;
 112         __be16  partition_cap;
 113         __be16  device_id;
 114         __be32  revision;
 115         u8      local_port_num;
 116         u8      vendor_id[3];   
 117 } __packed;
 118 
 119 #define OPA_PARTITION_TABLE_BLK_SIZE 32
 120 
 121 static inline u8
 122 opa_get_smp_direction(struct opa_smp *smp)
 123 {
 124         return ib_get_smp_direction((struct ib_smp *)smp);
 125 }
 126 
 127 static inline u8 *opa_get_smp_data(struct opa_smp *smp)
 128 {
 129         if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
 130                 return smp->route.dr.data;
 131 
 132         return smp->route.lid.data;
 133 }
 134 
 135 static inline size_t opa_get_smp_data_size(struct opa_smp *smp)
 136 {
 137         if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
 138                 return sizeof(smp->route.dr.data);
 139 
 140         return sizeof(smp->route.lid.data);
 141 }
 142 
 143 static inline size_t opa_get_smp_header_size(struct opa_smp *smp)
 144 {
 145         if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
 146                 return sizeof(*smp) - sizeof(smp->route.dr.data);
 147 
 148         return sizeof(*smp) - sizeof(smp->route.lid.data);
 149 }
 150 
 151 #endif