1 /* 2 * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. 3 * Copyright (c) 2004 Infinicon Corporation. All rights reserved. 4 * Copyright (c) 2004, 2010 Intel Corporation. All rights reserved. 5 * Copyright (c) 2004 Topspin Corporation. All rights reserved. 6 * Copyright (c) 2004-2006 Voltaire Corporation. All rights reserved. 7 * 8 * This software is available to you under a choice of one of two 9 * licenses. You may choose to be licensed under the terms of the GNU 10 * General Public License (GPL) Version 2, available from the file 11 * COPYING in the main directory of this source tree, or the 12 * OpenIB.org BSD license below: 13 * 14 * Redistribution and use in source and binary forms, with or 15 * without modification, are permitted provided that the following 16 * conditions are met: 17 * 18 * - Redistributions of source code must retain the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer. 21 * 22 * - Redistributions in binary form must reproduce the above 23 * copyright notice, this list of conditions and the following 24 * disclaimer in the documentation and/or other materials 25 * provided with the distribution. 26 * 27 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 28 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 29 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 30 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 31 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 32 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 33 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 34 * SOFTWARE. 35 * 36 */ 37 #ifndef _UMAD_TYPES_H 38 #define _UMAD_TYPES_H 39 40 #include <stdint.h> 41 #include <infiniband/umad.h> 42 43 #ifdef __cplusplus 44 # define BEGIN_C_DECLS extern "C" { 45 # define END_C_DECLS } 46 #else /* !__cplusplus */ 47 # define BEGIN_C_DECLS 48 # define END_C_DECLS 49 #endif /* __cplusplus */ 50 51 BEGIN_C_DECLS 52 53 #define UMAD_BASE_VERSION 1 54 #define UMAD_QKEY 0x80010000 55 56 /* Management classes */ 57 enum { 58 UMAD_CLASS_SUBN_LID_ROUTED = 0x01, 59 UMAD_CLASS_SUBN_DIRECTED_ROUTE = 0x81, 60 UMAD_CLASS_SUBN_ADM = 0x03, 61 UMAD_CLASS_PERF_MGMT = 0x04, 62 UMAD_CLASS_BM = 0x05, 63 UMAD_CLASS_DEVICE_MGMT = 0x06, 64 UMAD_CLASS_CM = 0x07, 65 UMAD_CLASS_SNMP = 0x08, 66 UMAD_CLASS_VENDOR_RANGE1_START = 0x09, 67 UMAD_CLASS_VENDOR_RANGE1_END = 0x0F, 68 UMAD_CLASS_APPLICATION_START = 0x10, 69 UMAD_CLASS_DEVICE_ADM = UMAD_CLASS_APPLICATION_START, 70 UMAD_CLASS_BOOT_MGMT = 0x11, 71 UMAD_CLASS_BIS = 0x12, 72 UMAD_CLASS_CONG_MGMT = 0x21, 73 UMAD_CLASS_APPLICATION_END = 0x2F, 74 UMAD_CLASS_VENDOR_RANGE2_START = 0x30, 75 UMAD_CLASS_VENDOR_RANGE2_END = 0x4F 76 }; 77 78 /* Management methods */ 79 enum { 80 UMAD_METHOD_GET = 0x01, 81 UMAD_METHOD_SET = 0x02, 82 UMAD_METHOD_GET_RESP = 0x81, 83 UMAD_METHOD_SEND = 0x03, 84 UMAD_METHOD_TRAP = 0x05, 85 UMAD_METHOD_REPORT = 0x06, 86 UMAD_METHOD_REPORT_RESP = 0x86, 87 UMAD_METHOD_TRAP_REPRESS = 0x07, 88 UMAD_METHOD_RESP_MASK = 0x80 89 }; 90 91 enum { 92 UMAD_STATUS_SUCCESS = 0x0000, 93 UMAD_STATUS_BUSY = 0x0001, 94 UMAD_STATUS_REDIRECT = 0x0002, 95 96 /* Invalid fields, bits 2-4 */ 97 UMAD_STATUS_BAD_VERSION = (1 << 2), 98 UMAD_STATUS_METHOD_NOT_SUPPORTED = (2 << 2), 99 UMAD_STATUS_ATTR_NOT_SUPPORTED = (3 << 2), 100 UMAD_STATUS_INVALID_ATTR_VALUE = (7 << 2), 101 102 UMAD_STATUS_INVALID_FIELD_MASK = 0x001C, 103 UMAD_STATUS_CLASS_MASK = 0xFF00 104 }; 105 106 /* Attributes common to multiple classes */ 107 enum { 108 UMAD_ATTR_CLASS_PORT_INFO = 0x0001, 109 UMAD_ATTR_NOTICE = 0x0002, 110 UMAD_ATTR_INFORM_INFO = 0x0003 111 }; 112 113 /* RMPP information */ 114 #define UMAD_RMPP_VERSION 1 115 enum { 116 UMAD_RMPP_FLAG_ACTIVE = 1, 117 }; 118 119 enum { 120 UMAD_LEN_DATA = 232, 121 UMAD_LEN_RMPP_DATA = 220, 122 UMAD_LEN_DM_DATA = 192, 123 UMAD_LEN_VENDOR_DATA = 216, 124 }; 125 126 struct umad_hdr { 127 uint8_t base_version; 128 uint8_t mgmt_class; 129 uint8_t class_version; 130 uint8_t method; 131 __be16 status; 132 __be16 class_specific; 133 __be64 tid; 134 __be16 attr_id; 135 __be16 resv; 136 __be32 attr_mod; 137 }; 138 139 struct umad_rmpp_hdr { 140 uint8_t rmpp_version; 141 uint8_t rmpp_type; 142 uint8_t rmpp_rtime_flags; 143 uint8_t rmpp_status; 144 __be32 seg_num; 145 __be32 paylen_newwin; 146 }; 147 148 struct umad_packet { 149 struct umad_hdr mad_hdr; 150 uint8_t data[UMAD_LEN_DATA]; /* network-byte order */ 151 }; 152 153 struct umad_rmpp_packet { 154 struct umad_hdr mad_hdr; 155 struct umad_rmpp_hdr rmpp_hdr; 156 uint8_t data[UMAD_LEN_RMPP_DATA]; /* network-byte order */ 157 }; 158 159 struct umad_dm_packet { 160 struct umad_hdr mad_hdr; 161 uint8_t reserved[40]; 162 uint8_t data[UMAD_LEN_DM_DATA]; /* network-byte order */ 163 }; 164 165 struct umad_vendor_packet { 166 struct umad_hdr mad_hdr; 167 struct umad_rmpp_hdr rmpp_hdr; 168 uint8_t reserved; 169 uint8_t oui[3]; /* network-byte order */ 170 uint8_t data[UMAD_LEN_VENDOR_DATA]; /* network-byte order */ 171 }; 172 173 enum { 174 UMAD_OPENIB_OUI = 0x001405 175 }; 176 177 enum { 178 UMAD_CLASS_RESP_TIME_MASK = 0x1F 179 }; 180 struct umad_class_port_info { 181 uint8_t base_ver; 182 uint8_t class_ver; 183 __be16 cap_mask; 184 __be32 cap_mask2_resp_time; 185 union { 186 uint8_t redir_gid[16] __attribute__((deprecated)); /* network byte order */ 187 union umad_gid redirgid; 188 }; 189 __be32 redir_tc_sl_fl; 190 __be16 redir_lid; 191 __be16 redir_pkey; 192 __be32 redir_qp; 193 __be32 redir_qkey; 194 union { 195 uint8_t trap_gid[16] __attribute__((deprecated)); /* network byte order */ 196 union umad_gid trapgid; 197 }; 198 __be32 trap_tc_sl_fl; 199 __be16 trap_lid; 200 __be16 trap_pkey; 201 __be32 trap_hl_qp; 202 __be32 trap_qkey; 203 }; 204 static inline uint32_t 205 umad_class_cap_mask2(struct umad_class_port_info *cpi) 206 { 207 return (be32toh(cpi->cap_mask2_resp_time) >> 5); 208 } 209 static inline uint8_t 210 umad_class_resp_time(struct umad_class_port_info *cpi) 211 { 212 return (uint8_t)(be32toh(cpi->cap_mask2_resp_time) 213 & UMAD_CLASS_RESP_TIME_MASK); 214 } 215 216 END_C_DECLS 217 #endif /* _UMAD_TYPES_H */ 218