| /* | |
| * Copyright (c) 2004 Topspin Communications. All rights reserved. | |
| * Copyright (c) 2005 Voltaire, Inc. All rights reserved. | |
| * Copyright (c) 2006, 2010 Intel Corporation. All rights reserved. | |
| * Copyright (c) 2014 Mellanox Technologies LTD. All rights reserved. | |
| * | |
| * This software is available to you under a choice of one of two | |
| * licenses. You may choose to be licensed under the terms of the GNU | |
| * General Public License (GPL) Version 2, available from the file | |
| * COPYING in the main directory of this source tree, or the | |
| * OpenIB.org BSD license below: | |
| * | |
| * Redistribution and use in source and binary forms, with or | |
| * without modification, are permitted provided that the following | |
| * conditions are met: | |
| * | |
| * - Redistributions of source code must retain the above | |
| * copyright notice, this list of conditions and the following | |
| * disclaimer. | |
| * | |
| * - Redistributions in binary form must reproduce the above | |
| * copyright notice, this list of conditions and the following | |
| * disclaimer in the documentation and/or other materials | |
| * provided with the distribution. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | |
| * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |
| * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| * SOFTWARE. | |
| * | |
| */ | |
| #ifndef _UMAD_SA_H | |
| #define _UMAD_SA_H | |
| #include <infiniband/umad_types.h> | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /* SA specific methods */ | |
| enum { | |
| UMAD_SA_CLASS_VERSION = 2, /* IB spec version 1.1/1.2 */ | |
| UMAD_SA_METHOD_GET_TABLE = 0x12, | |
| UMAD_SA_METHOD_GET_TABLE_RESP = 0x92, | |
| UMAD_SA_METHOD_DELETE = 0x15, | |
| UMAD_SA_METHOD_DELETE_RESP = 0x95, | |
| UMAD_SA_METHOD_GET_MULTI = 0x14, | |
| UMAD_SA_METHOD_GET_MULTI_RESP = 0x94, | |
| UMAD_SA_METHOD_GET_TRACE_TABLE = 0x13 | |
| }; | |
| enum { | |
| UMAD_SA_STATUS_SUCCESS = 0, | |
| UMAD_SA_STATUS_NO_RESOURCES = 1, | |
| UMAD_SA_STATUS_REQ_INVALID = 2, | |
| UMAD_SA_STATUS_NO_RECORDS = 3, | |
| UMAD_SA_STATUS_TOO_MANY_RECORDS = 4, | |
| UMAD_SA_STATUS_INVALID_GID = 5, | |
| UMAD_SA_STATUS_INSUF_COMPS = 6, | |
| UMAD_SA_STATUS_REQ_DENIED = 7, | |
| UMAD_SA_STATUS_PRI_SUGGESTED = 8 | |
| }; | |
| /* SA attributes */ | |
| enum { | |
| UMAD_SA_ATTR_NODE_REC = 0x0011, | |
| UMAD_SA_ATTR_PORT_INFO_REC = 0x0012, | |
| UMAD_SA_ATTR_SLVL_REC = 0x0013, | |
| UMAD_SA_ATTR_SWITCH_INFO_REC = 0x0014, | |
| UMAD_SA_ATTR_LINEAR_FT_REC = 0x0015, | |
| UMAD_SA_ATTR_RANDOM_FT_REC = 0x0016, | |
| UMAD_SA_ATTR_MCAST_FT_REC = 0x0017, | |
| UMAD_SA_ATTR_SM_INFO_REC = 0x0018, | |
| UMAD_SA_ATTR_LINK_SPD_WIDTH_TABLE_REC = 0x0019, | |
| UMAD_SA_ATTR_INFORM_INFO_REC = 0x00F3, | |
| UMAD_SA_ATTR_LINK_REC = 0x0020, | |
| UMAD_SA_ATTR_GUID_INFO_REC = 0x0030, | |
| UMAD_SA_ATTR_SERVICE_REC = 0x0031, | |
| UMAD_SA_ATTR_PKEY_TABLE_REC = 0x0033, | |
| UMAD_SA_ATTR_PATH_REC = 0x0035, | |
| UMAD_SA_ATTR_VL_ARB_REC = 0x0036, | |
| UMAD_SA_ATTR_MCMEMBER_REC = 0x0038, | |
| UMAD_SA_ATTR_TRACE_REC = 0x0039, | |
| UMAD_SA_ATTR_MULTI_PATH_REC = 0x003A, | |
| UMAD_SA_ATTR_SERVICE_ASSOC_REC = 0x003B, | |
| UMAD_SA_ATTR_HIERARCHY_INFO_REC = 0x003C, | |
| UMAD_SA_ATTR_CABLE_INFO_REC = 0x003D, | |
| UMAD_SA_ATTR_PORT_INFO_EXT_REC = 0x003E | |
| }; | |
| enum { | |
| UMAD_LEN_SA_DATA = 200 | |
| }; | |
| /* CM bits */ | |
| enum { | |
| UMAD_SA_CAP_MASK_IS_SUBNET_OPT_REC_SUP = (1 << 8), | |
| UMAD_SA_CAP_MASK_IS_UD_MCAST_SUP = (1 << 9), | |
| UMAD_SA_CAP_MASK_IS_MULTIPATH_SUP = (1 << 10), | |
| UMAD_SA_CAP_MASK_IS_REINIT_SUP = (1 << 11), | |
| UMAD_SA_CAP_MASK_IS_GID_SCOPED_MULTIPATH_SUP = (1 << 12), | |
| UMAD_SA_CAP_MASK_IS_PORTINFO_CAP_MASK_MATCH_SUP = (1 << 13), | |
| UMAD_SA_CAP_MASK_IS_LINK_SPEED_WIDTH_PAIRS_REC_SUP = (1 << 14), | |
| UMAD_SA_CAP_MASK_IS_PA_SERVICES_SUP = (1 << 15) | |
| }; | |
| /* CM2 bits */ | |
| enum { | |
| UMAD_SA_CAP_MASK2_IS_UNPATH_REPATH_SUP = (1 << 0), | |
| UMAD_SA_CAP_MASK2_IS_QOS_SUP = (1 << 1), | |
| UMAD_SA_CAP_MASK2_IS_REV_PATH_PKEY_MEM_BIT_SUP = (1 << 2), | |
| UMAD_SA_CAP_MASK2_IS_MCAST_TOP_SUP = (1 << 3), | |
| UMAD_SA_CAP_MASK2_IS_HIERARCHY_INFO_SUP = (1 << 4), | |
| UMAD_SA_CAP_MASK2_IS_ADDITIONAL_GUID_SUP = (1 << 5), | |
| UMAD_SA_CAP_MASK2_IS_FULL_PORTINFO_REC_SUP = (1 << 6), | |
| UMAD_SA_CAP_MASK2_IS_EXT_SPEEDS_SUP = (1 << 7), | |
| UMAD_SA_CAP_MASK2_IS_MCAST_SERVICE_REC_SUP = (1 << 8), | |
| UMAD_SA_CAP_MASK2_IS_CABLE_INFO_REC_SUP = (1 << 9), | |
| UMAD_SA_CAP_MASK2_IS_PORT_INFO_CAPMASK2_MATCH_SUP = (1 << 10), | |
| UMAD_SA_CAP_MASK2_IS_PORT_INFO_EXT_REC_SUP = (1 << 11) | |
| }; | |
| /* | |
| * Shared by SA MCMemberRecord, PathRecord, and MultiPathRecord | |
| */ | |
| enum { | |
| UMAD_SA_SELECTOR_GREATER_THAN = 0, | |
| UMAD_SA_SELECTOR_LESS_THAN = 1, | |
| UMAD_SA_SELECTOR_EXACTLY = 2, | |
| UMAD_SA_SELECTOR_LARGEST_AVAIL = 3, /* rate & MTU */ | |
| UMAD_SA_SELECTOR_SMALLEST_AVAIL = 3 /* packet lifetime */ | |
| }; | |
| #define UMAD_SA_SELECTOR_SHIFT 6 | |
| #define UMAD_SA_RATE_MTU_PKT_LIFE_MASK 0x3f | |
| #define UMAD_SA_SELECTOR_MASK 0x3 | |
| /* | |
| * sm_key is not aligned on an 8-byte boundary, so is defined as a byte array | |
| */ | |
| struct umad_sa_packet { | |
| struct umad_hdr mad_hdr; | |
| struct umad_rmpp_hdr rmpp_hdr; | |
| uint8_t sm_key[8]; /* network-byte order */ | |
| __be16 attr_offset; | |
| __be16 reserved; | |
| __be64 comp_mask; | |
| uint8_t data[UMAD_LEN_SA_DATA]; /* network-byte order */ | |
| }; | |
| static inline uint8_t | |
| umad_sa_get_rate_mtu_or_life(uint8_t rate_mtu_or_life) | |
| { | |
| return (rate_mtu_or_life & UMAD_SA_RATE_MTU_PKT_LIFE_MASK); | |
| } | |
| static inline uint8_t | |
| umad_sa_set_rate_mtu_or_life(uint8_t selector, uint8_t rate_mtu_or_life) | |
| { | |
| return (((selector & UMAD_SA_SELECTOR_MASK) << UMAD_SA_SELECTOR_SHIFT) | | |
| (rate_mtu_or_life & UMAD_SA_RATE_MTU_PKT_LIFE_MASK)); | |
| } | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _UMAD_SA_H */ |