root/include/rdma/opa_smi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. opa_get_smp_direction
  2. opa_get_smp_data
  3. opa_get_smp_data_size
  4. opa_get_smp_header_size

   1 /*
   2  * Copyright (c) 2014 Intel Corporation.  All rights reserved.
   3  *
   4  * This software is available to you under a choice of one of two
   5  * licenses.  You may choose to be licensed under the terms of the GNU
   6  * General Public License (GPL) Version 2, available from the file
   7  * COPYING in the main directory of this source tree, or the
   8  * OpenIB.org BSD license below:
   9  *
  10  *     Redistribution and use in source and binary forms, with or
  11  *     without modification, are permitted provided that the following
  12  *     conditions are met:
  13  *
  14  *      - Redistributions of source code must retain the above
  15  *        copyright notice, this list of conditions and the following
  16  *        disclaimer.
  17  *
  18  *      - Redistributions in binary form must reproduce the above
  19  *        copyright notice, this list of conditions and the following
  20  *        disclaimer in the documentation and/or other materials
  21  *        provided with the distribution.
  22  *
  23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30  * SOFTWARE.
  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 /* Subnet management attributes */
  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];   /* network byte order */
 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 /* OPA_SMI_H */

/* [<][>][^][v][top][bottom][index][help] */