Blame opamgt/src/ib_notice_net.h

Packit 857059
/* BEGIN_ICS_COPYRIGHT5 ****************************************
Packit 857059
Packit 857059
Copyright (c) 2015-2017, Intel Corporation
Packit 857059
Packit 857059
Redistribution and use in source and binary forms, with or without
Packit 857059
modification, are permitted provided that the following conditions are met:
Packit 857059
Packit 857059
    * Redistributions of source code must retain the above copyright notice,
Packit 857059
      this list of conditions and the following disclaimer.
Packit 857059
    * Redistributions in binary form must reproduce the above copyright
Packit 857059
      notice, this list of conditions and the following disclaimer in the
Packit 857059
      documentation and/or other materials provided with the distribution.
Packit 857059
    * Neither the name of Intel Corporation nor the names of its contributors
Packit 857059
      may be used to endorse or promote products derived from this software
Packit 857059
      without specific prior written permission.
Packit 857059
Packit 857059
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit 857059
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 857059
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit 857059
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit 857059
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 857059
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit 857059
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit 857059
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit 857059
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 857059
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 857059
Packit 857059
 * ** END_ICS_COPYRIGHT5   ****************************************/
Packit 857059
/* [ICS VERSION STRING: unknown] */
Packit 857059
Packit 857059
#if !defined(SA_NET_H)
Packit 857059
#define SA_NET_H
Packit 857059
Packit 857059
#include <asm/byteorder.h>
Packit 857059
Packit 857059
#include <infiniband/sa.h>
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_ATTR_NOTICE		= __constant_cpu_to_be16(0x02),
Packit 857059
	IBV_SA_ATTR_INFORM_INFO		= __constant_cpu_to_be16(0x03),
Packit 857059
	IBV_SA_ATTR_MC_MEMBER_REC	= __constant_cpu_to_be16(0x38),
Packit 857059
	IBV_SA_ATTR_INFORM_INFO_REC	= __constant_cpu_to_be16(0xf3)
Packit 857059
};
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_METHOD_GET		= 0x01,
Packit 857059
	IBV_SA_METHOD_SET		= 0x02,
Packit 857059
	IBV_SA_METHOD_DELETE		= 0x15
Packit 857059
};
Packit 857059
Packit 857059
/* Length of SA attributes on the wire */
Packit 857059
enum {
Packit 857059
	IBV_SA_ATTR_NOTICE_LEN		= 80,
Packit 857059
	IBV_SA_ATTR_INFORM_INFO_LEN	= 36,
Packit 857059
	IBV_SA_ATTR_MC_MEMBER_REC_LEN	= 52,
Packit 857059
	IBV_SA_ATTR_INFORM_INFO_REC_LEN	= 60
Packit 857059
};
Packit 857059
Packit 857059
#define IBV_SA_COMP_MASK(n)		__constant_cpu_to_be64(1ull << n)
Packit 857059
Packit 857059
struct ibv_sa_net_mcmember_rec {
Packit 857059
	uint8_t		mgid[16];
Packit 857059
	uint8_t		port_gid[16];
Packit 857059
	uint32_t	qkey;
Packit 857059
	uint16_t	mlid;
Packit 857059
	/* MtuSelector: 2:304, MTU: 6:306 */
Packit 857059
	uint8_t		mtu_info;
Packit 857059
	uint8_t		tclass;
Packit 857059
	uint16_t	pkey;
Packit 857059
	/* RateSelector: 2:336, Rate: 6:338 */
Packit 857059
	uint8_t		rate_info;
Packit 857059
	/* PacketLifeTimeSelector: 2:344, PacketLifeTime: 6:346 */
Packit 857059
	uint8_t		packetlifetime_info;
Packit 857059
	/* SL: 4:352, FlowLabel: 20:356, HopLimit: 8:376 */
Packit 857059
	uint32_t	sl_flow_hop;
Packit 857059
	/* Scope: 4:384, JoinState: 4:388 */
Packit 857059
	uint8_t		scope_join;
Packit 857059
	/* ProxyJoin: 1:392, rsvd: 7:393 */
Packit 857059
	uint8_t		proxy_join;
Packit 857059
	uint8_t		rsvd[2];
Packit 857059
};
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU_SELECTOR_OFFSET		= 304,
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU_SELECTOR_LENGTH		= 2,
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU_OFFSET			= 306,
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU_LENGTH			= 6,
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE_SELECTOR_OFFSET	= 336,
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE_SELECTOR_LENGTH	= 2,
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE_OFFSET			= 338,
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE_LENGTH			= 6,
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKETLIFE_SELECTOR_OFFSET	= 344,
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKETLIFE_SELECTOR_LENGTH	= 2,
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKETLIFE_OFFSET		= 346,
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKETLIFE_LENGTH		= 6,
Packit 857059
	IBV_SA_MCMEMBER_REC_SL_OFFSET			= 352,
Packit 857059
	IBV_SA_MCMEMBER_REC_SL_LENGTH			= 4,
Packit 857059
	IBV_SA_MCMEMBER_REC_FLOW_LABEL_OFFSET		= 356,
Packit 857059
	IBV_SA_MCMEMBER_REC_FLOW_LABEL_LENGTH		= 20,
Packit 857059
	IBV_SA_MCMEMBER_REC_HOP_LIMIT_OFFSET		= 376,
Packit 857059
	IBV_SA_MCMEMBER_REC_HOP_LIMIT_LENGTH		= 8,
Packit 857059
	IBV_SA_MCMEMBER_REC_SCOPE_OFFSET		= 384,
Packit 857059
	IBV_SA_MCMEMBER_REC_SCOPE_LENGTH		= 4,
Packit 857059
	IBV_SA_MCMEMBER_REC_JOIN_STATE_OFFSET		= 388,
Packit 857059
	IBV_SA_MCMEMBER_REC_JOIN_STATE_LENGTH		= 4,
Packit 857059
	IBV_SA_MCMEMBER_REC_PROXY_JOIN_OFFSET		= 392,
Packit 857059
	IBV_SA_MCMEMBER_REC_PROXY_JOIN_LENGTH		= 1
Packit 857059
};
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_MCMEMBER_REC_MGID			= IBV_SA_COMP_MASK(0),
Packit 857059
	IBV_SA_MCMEMBER_REC_PORT_GID			= IBV_SA_COMP_MASK(1),
Packit 857059
	IBV_SA_MCMEMBER_REC_QKEY			= IBV_SA_COMP_MASK(2),
Packit 857059
	IBV_SA_MCMEMBER_REC_MLID			= IBV_SA_COMP_MASK(3),
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU_SELECTOR		= IBV_SA_COMP_MASK(4),
Packit 857059
	IBV_SA_MCMEMBER_REC_MTU				= IBV_SA_COMP_MASK(5),
Packit 857059
	IBV_SA_MCMEMBER_REC_TRAFFIC_CLASS		= IBV_SA_COMP_MASK(6),
Packit 857059
	IBV_SA_MCMEMBER_REC_PKEY			= IBV_SA_COMP_MASK(7),
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE_SELECTOR		= IBV_SA_COMP_MASK(8),
Packit 857059
	IBV_SA_MCMEMBER_REC_RATE			= IBV_SA_COMP_MASK(9),
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR	= IBV_SA_COMP_MASK(10),
Packit 857059
	IBV_SA_MCMEMBER_REC_PACKET_LIFE_TIME		= IBV_SA_COMP_MASK(11),
Packit 857059
	IBV_SA_MCMEMBER_REC_SL				= IBV_SA_COMP_MASK(12),
Packit 857059
	IBV_SA_MCMEMBER_REC_FLOW_LABEL			= IBV_SA_COMP_MASK(13),
Packit 857059
	IBV_SA_MCMEMBER_REC_HOP_LIMIT			= IBV_SA_COMP_MASK(14),
Packit 857059
	IBV_SA_MCMEMBER_REC_SCOPE			= IBV_SA_COMP_MASK(15),
Packit 857059
	IBV_SA_MCMEMBER_REC_JOIN_STATE			= IBV_SA_COMP_MASK(16),
Packit 857059
	IBV_SA_MCMEMBER_REC_PROXY_JOIN			= IBV_SA_COMP_MASK(17)
Packit 857059
};
Packit 857059
Packit 857059
/* InformInfo:Type */
Packit 857059
enum {
Packit 857059
	IBV_SA_EVENT_TYPE_FATAL		= __constant_cpu_to_be16(0x0),
Packit 857059
	IBV_SA_EVENT_TYPE_URGENT	= __constant_cpu_to_be16(0x1),
Packit 857059
	IBV_SA_EVENT_TYPE_SECURITY	= __constant_cpu_to_be16(0x2),
Packit 857059
	IBV_SA_EVENT_TYPE_SM		= __constant_cpu_to_be16(0x3),
Packit 857059
	IBV_SA_EVENT_TYPE_INFO		= __constant_cpu_to_be16(0x4),
Packit 857059
	IBV_SA_EVENT_TYPE_EMPTY		= __constant_cpu_to_be16(0x7F),
Packit 857059
	IBV_SA_EVENT_TYPE_ALL		= __constant_cpu_to_be16(0xFFFF)
Packit 857059
};
Packit 857059
Packit 857059
/* InformInfo:TrapNumber */
Packit 857059
enum {
Packit 857059
	IBV_SA_SM_TRAP_GID_IN_SERVICE		   = __constant_cpu_to_be16(64),
Packit 857059
	IBV_SA_SM_TRAP_GID_OUT_OF_SERVICE	   = __constant_cpu_to_be16(65),
Packit 857059
	IBV_SA_SM_TRAP_CREATE_MC_GROUP		   = __constant_cpu_to_be16(66),
Packit 857059
	IBV_SA_SM_TRAP_DELETE_MC_GROUP		   = __constant_cpu_to_be16(67),
Packit 857059
	IBV_SA_SM_TRAP_PORT_CHANGE_STATE	   = __constant_cpu_to_be16(128),
Packit 857059
	IBV_SA_SM_TRAP_LINK_INTEGRITY		   = __constant_cpu_to_be16(129),
Packit 857059
	IBV_SA_SM_TRAP_EXCESSIVE_BUFFER_OVERRUN	   = __constant_cpu_to_be16(130),
Packit 857059
	IBV_SA_SM_TRAP_FLOW_CONTROL_UPDATE_EXPIRED = __constant_cpu_to_be16(131),
Packit 857059
	IBV_SA_SM_TRAP_BAD_M_KEY		   = __constant_cpu_to_be16(256),
Packit 857059
	IBV_SA_SM_TRAP_BAD_P_KEY		   = __constant_cpu_to_be16(257),
Packit 857059
	IBV_SA_SM_TRAP_BAD_Q_KEY		   = __constant_cpu_to_be16(258),
Packit 857059
	IBV_SA_SM_TRAP_ALL			   = __constant_cpu_to_be16(0xFFFF)
Packit 857059
};
Packit 857059
Packit 857059
/* InformInfo:ProducerType */
Packit 857059
enum {
Packit 857059
	IBV_SA_EVENT_PRODUCER_TYPE_CA		 = __constant_cpu_to_be32(0x1),
Packit 857059
	IBV_SA_EVENT_PRODUCER_TYPE_SWITCH	 = __constant_cpu_to_be32(0x2),
Packit 857059
	IBV_SA_EVENT_PRODUCER_TYPE_ROUTER	 = __constant_cpu_to_be32(0x3),
Packit 857059
	IBV_SA_EVENT_PRODUCER_TYPE_CLASS_MANAGER = __constant_cpu_to_be32(0x4),
Packit 857059
	IBV_SA_EVENT_PRODUCER_TYPE_ALL		 = __constant_cpu_to_be32(0xFFFFFF)
Packit 857059
};
Packit 857059
Packit 857059
struct ibv_sa_net_inform_info {
Packit 857059
	uint8_t		gid[16];
Packit 857059
	uint16_t	lid_range_begin;
Packit 857059
	uint16_t	lid_range_end;
Packit 857059
	uint16_t	rsvd;
Packit 857059
	uint8_t		is_generic;
Packit 857059
	uint8_t		subscribe;
Packit 857059
	uint16_t	type;
Packit 857059
	/* TrapNumber/DeviceID */
Packit 857059
	uint16_t	trap_num_device_id;
Packit 857059
	/* QPN: 24:224, rsvd: 3:248, RespTimeValue: 5:251 */
Packit 857059
	uint32_t	qpn_resptime;
Packit 857059
	/* rsvd: 8:256, ProducerType/VendorID: 24:264 */
Packit 857059
	uint32_t	producer_type_vendor_id;
Packit 857059
};
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_INFORM_INFO_QPN_OFFSET			= 224,
Packit 857059
	IBV_SA_INFORM_INFO_QPN_LENGTH			= 24,
Packit 857059
	IBV_SA_INFORM_INFO_RESP_TIME_OFFSET		= 251,
Packit 857059
	IBV_SA_INFORM_INFO_RESP_TIME_LENGTH		= 5,
Packit 857059
	IBV_SA_INFORM_INFO_PRODUCER_TYPE_OFFSET		= 264,
Packit 857059
	IBV_SA_INFORM_INFO_PRODUCER_TYPE_LENGTH		= 24,
Packit 857059
	IBV_SA_INFORM_INFO_VENDOR_ID_OFFSET		= 264,
Packit 857059
	IBV_SA_INFORM_INFO_VENDOR_ID_LENGTH		= 24
Packit 857059
};
Packit 857059
Packit 857059
struct ibv_sa_net_notice {
Packit 857059
	/* IsGeneric: 1:0, Type: 7:1, ProducerType/VendorID: 24:8 */
Packit 857059
	uint32_t	generic_type_producer;
Packit 857059
	/* TrapNumber/DeviceID */
Packit 857059
	uint16_t	trap_num_device_id;
Packit 857059
	uint16_t	issuer_lid;
Packit 857059
	/* NoticeToggle: 1:64, NoticeCount: 15:65 */
Packit 857059
	uint16_t	toggle_count;
Packit 857059
	uint8_t		data_details[54];
Packit 857059
	uint8_t		issuer_gid[16];
Packit 857059
};
Packit 857059
Packit 857059
enum {
Packit 857059
	IBV_SA_NOTICE_IS_GENERIC_OFFSET			= 0,
Packit 857059
	IBV_SA_NOTICE_IS_GENERIC_LENGTH			= 1,
Packit 857059
	IBV_SA_NOTICE_TYPE_OFFSET			= 1,
Packit 857059
	IBV_SA_NOTICE_TYPE_LENGTH			= 7,
Packit 857059
	IBV_SA_NOTICE_PRODUCER_TYPE_OFFSET		= 8,
Packit 857059
	IBV_SA_NOTICE_PRODUCER_TYPE_LENGTH		= 24,
Packit 857059
	IBV_SA_NOTICE_VENDOR_ID_OFFSET			= 8,
Packit 857059
	IBV_SA_NOTICE_VENDOR_IF_LENGTH			= 24,
Packit 857059
	IBV_SA_NOTICE_TOGGLE_OFFSET			= 64,
Packit 857059
	IBV_SA_NOTICE_TOGGLE_LENGTH			= 1,
Packit 857059
	IBV_SA_NOTICE_COUNT_OFFSET			= 65,
Packit 857059
	IBV_SA_NOTICE_COUNT_LENGTH			= 15,
Packit 857059
};
Packit 857059
Packit 857059
/*
Packit 857059
 * SM notice data details for:
Packit 857059
 *
Packit 857059
 * IB_SA_SM_TRAP_GID_IN_SERVICE		= 64
Packit 857059
 * IB_SA_SM_TRAP_GID_OUT_OF_SERVICE	= 65
Packit 857059
 * IB_SA_SM_TRAP_CREATE_MC_GROUP	= 66
Packit 857059
 * IB_SA_SM_TRAP_DELETE_MC_GROUP	= 67
Packit 857059
 */
Packit 857059
struct ibv_sa_net_notice_data_gid {
Packit 857059
	uint8_t	reserved[6];
Packit 857059
	uint8_t	gid[16];
Packit 857059
	uint8_t	padding[32];
Packit 857059
};
Packit 857059
Packit 857059
/*
Packit 857059
 * SM notice data details for:
Packit 857059
 *
Packit 857059
 * IB_SA_SM_TRAP_PORT_CHANGE_STATE	= 128
Packit 857059
 */
Packit 857059
struct ibv_sa_net_notice_data_port_change {
Packit 857059
	uint16_t lid;
Packit 857059
	uint8_t	 padding[52];
Packit 857059
};
Packit 857059
Packit 857059
/*
Packit 857059
 * SM notice data details for:
Packit 857059
 *
Packit 857059
 * IB_SA_SM_TRAP_LINK_INTEGRITY			= 129
Packit 857059
 * IB_SA_SM_TRAP_EXCESSIVE_BUFFER_OVERRUN	= 130
Packit 857059
 * IB_SA_SM_TRAP_FLOW_CONTROL_UPDATE_EXPIRED	= 131
Packit 857059
 */
Packit 857059
struct ibv_sa_net_notice_data_port_error {
Packit 857059
	uint8_t	 reserved[2];
Packit 857059
	uint16_t lid;
Packit 857059
	uint8_t	 port_num;
Packit 857059
	uint8_t	 padding[49];
Packit 857059
};
Packit 857059
Packit 857059
/**
Packit 857059
 * ibv_sa_get_field - Extract a bit field value from a structure.
Packit 857059
 * @data: Pointer to the start of the structure.
Packit 857059
 * @offset: Bit offset of field from start of structure.
Packit 857059
 * @size: Size of field, in bits.
Packit 857059
 *
Packit 857059
 * The structure must be in network-byte order.  The returned value is in
Packit 857059
 * host-byte order.
Packit 857059
 */
Packit 857059
uint32_t ibv_sa_get_field(void *data, int offset, int size);
Packit 857059
Packit 857059
/**
Packit 857059
 * ibv_sa_set_field - Set a bit field value in a structure.
Packit 857059
 * @data: Pointer to the start of the structure.
Packit 857059
 * @value: Value to assign to field.
Packit 857059
 * @offset: Bit offset of field from start of structure.
Packit 857059
 * @size: Size of field, in bits.
Packit 857059
 *
Packit 857059
 * The structure must be in network-byte order.  The value to set is in
Packit 857059
 * host-byte order.
Packit 857059
 */
Packit 857059
void ibv_sa_set_field(void *data, uint32_t value, int offset, int size);
Packit 857059
Packit 857059
#endif /* SA_NET_H */