Blame IbAccess/Common/Inc/stl_sa_types.h

Packit 857059
/* BEGIN_ICS_COPYRIGHT7 ****************************************
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_COPYRIGHT7   ****************************************/
Packit 857059
Packit 857059
/* [ICS VERSION STRING: unknown] */
Packit 857059
Packit 857059
/*
Packit 857059
 * SA MADs
Packit 857059
 *
Packit 857059
 * General Notes:
Packit 857059
 *
Packit 857059
 * (1)	Structures are defined in the most readable manner rather than 
Packit 857059
 *		what might be most useful for the coder or the compiler. Compiler 
Packit 857059
 *		hints (i.e., PACK_SUFFIX) are omitted, blocks of data may be 
Packit 857059
 *		defined as multi-dimensional arrays when useful, and so on.
Packit 857059
 *
Packit 857059
 * (2)	An effort has been made to ensure that 32-bit fields fall on a 4 byte
Packit 857059
 *		boundary and 64-bit fields fall on an 8 byte boundary. In addition,
Packit 857059
 *		SA records are set as multiples of 8-bytes in order to preserve
Packit 857059
 *		alignment across multi-record responses.
Packit 857059
 *
Packit 857059
 * (3)	When extending a LID to 32-bits would break word alignment of other
Packit 857059
 *		fields, the process was to:
Packit 857059
 *			(a) First, remove existing reserved fields if this will restore
Packit 857059
 *				alignment.
Packit 857059
 *			(b) If (a) is not possible, consider moving fields if this will
Packit 857059
 *				restore alignment.
Packit 857059
 *			(c) If (b) fails, add new reserved fields to restore alignment.
Packit 857059
 * 
Packit 857059
 * (4)	In this document, attributes are listed in the same order they appear
Packit 857059
 *		in the IB spec. Where a new attribute is added, it is added after
Packit 857059
 *		the existing attribute it was modeled after.
Packit 857059
 *
Packit 857059
 * (5)	The use of "Jumbo" (>256 byte) MADs are only used when needed. For
Packit 857059
 *		table-based MADs, RMPP is the preferred solution.
Packit 857059
 *
Packit 857059
 */
Packit 857059
Packit 857059
#ifndef __STL_SA_H__
Packit 857059
#define __STL_SA_H__
Packit 857059
Packit 857059
#include "iba/stl_mad_types.h"
Packit 857059
#include "iba/ib_sa_records.h"
Packit 857059
Packit 857059
#if defined (__cplusplus)
Packit 857059
extern "C" {
Packit 857059
#endif
Packit 857059
Packit 857059
#include "iba/public/ipackon.h"
Packit 857059
Packit 857059
#define STL_SA_CLASS_VERSION				0x80
Packit 857059
Packit 857059
/* 
Packit 857059
 * Subnet Administration Attribute IDs Adapted from IB
Packit 857059
 */
Packit 857059
#define	STL_SA_ATTR_CLASS_PORT_INFO				0x0001
Packit 857059
#define	STL_SA_ATTR_NOTICE						0x0002
Packit 857059
#define	STL_SA_ATTR_INFORM_INFO					0x0003
Packit 857059
#define	STL_SA_ATTR_NODE_RECORD					0x0011
Packit 857059
#define STL_SA_ATTR_PORTINFO_RECORD				0x0012
Packit 857059
#define	STL_SA_ATTR_SC_MAPTBL_RECORD			0x0013 // REPLACES SL TO VL!
Packit 857059
#define	STL_SA_ATTR_SWITCHINFO_RECORD			0x0014
Packit 857059
#define	STL_SA_ATTR_LINEAR_FWDTBL_RECORD		0x0015
Packit 857059
//#define	STL_SA_ATTR_RANDOM_FWD_TBL_RECORD	0x0016 // Undefined in STL.
Packit 857059
#define	STL_SA_ATTR_MCAST_FWDTBL_RECORD			0x0017
Packit 857059
#define	STL_SA_ATTR_SMINFO_RECORD				0x0018
Packit 857059
#define STL_SA_ATTR_LINK_SPD_WDTH_PAIRS_RECORD	0x0019 // Defined but never impl'ed
Packit 857059
//Available										0x001A-0x001F
Packit 857059
#define	STL_SA_ATTR_LINK_RECORD					0x0020
Packit 857059
//#define	STL_SA_ATTR_GUIDINFO_RECORD			0x0030 // Undefined in STL.
Packit 857059
#define	STL_SA_ATTR_SERVICE_RECORD				0x0031
Packit 857059
#define	STL_SA_ATTR_P_KEY_TABLE_RECORD			0x0033
Packit 857059
#define	STL_SA_ATTR_PATH_RECORD					0x0035
Packit 857059
#define	STL_SA_ATTR_VLARBTABLE_RECORD			0x0036
Packit 857059
#define	STL_SA_ATTR_MCMEMBER_RECORD				0x0038
Packit 857059
#define	STL_SA_ATTR_TRACE_RECORD				0x0039
Packit 857059
#define	STL_SA_ATTR_MULTIPATH_GID_RECORD		0x003A 
Packit 857059
#define	STL_SA_ATTR_SERVICEASSOCIATION_RECORD	0x003B	/* not implemented */
Packit 857059
//Available										0x003C-0x007F
Packit 857059
#define	STL_SA_ATTR_INFORM_INFO_RECORD			0x00F3
Packit 857059
Packit 857059
/*
Packit 857059
 * Subnet Administration Attribute IDs New for STL
Packit 857059
 */
Packit 857059
#define STL_SA_ATTR_SL2SC_MAPTBL_RECORD			0x0080
Packit 857059
#define STL_SA_ATTR_SC2SL_MAPTBL_RECORD			0x0081 
Packit 857059
#define STL_SA_ATTR_SC2VL_NT_MAPTBL_RECORD		0x0082 
Packit 857059
#define STL_SA_ATTR_SC2VL_T_MAPTBL_RECORD		0x0083 
Packit 857059
#define STL_SA_ATTR_SC2VL_R_MAPTBL_RECORD		0x0084 
Packit 857059
#define	STL_SA_ATTR_PGROUP_FWDTBL_RECORD		0x0085 
Packit 857059
#define	STL_SA_ATTR_MULTIPATH_GUID_RECORD		0x0086 	/* not implemented */
Packit 857059
#define	STL_SA_ATTR_MULTIPATH_LID_RECORD		0x0087 	/* not implemented */
Packit 857059
#define STL_SA_ATTR_CABLE_INFO_RECORD			0x0088 
Packit 857059
#define STL_SA_ATTR_VF_INFO_RECORD				0x0089 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_PORT_STATE_INFO_RECORD		0x008A 
Packit 857059
#define STL_SA_ATTR_PORTGROUP_TABLE_RECORD		0x008B 
Packit 857059
#define STL_SA_ATTR_BUFF_CTRL_TAB_RECORD		0x008C 
Packit 857059
#define STL_SA_ATTR_FABRICINFO_RECORD			0x008D
Packit 857059
#define STL_SA_ATTR_QUARANTINED_NODE_RECORD		0x0090 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_CONGESTION_INFO_RECORD		0x0091 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_SWITCH_CONG_RECORD			0x0092 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_SWITCH_PORT_CONG_RECORD		0x0093 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_HFI_CONG_RECORD				0x0094 // Previously vendor specific
Packit 857059
#define STL_SA_ATTR_HFI_CONG_CTRL_RECORD		0x0095 // Previously vendor specific
Packit 857059
Packit 857059
Packit 857059
Packit 857059
#define STL_SA_ATTR_DG_MEMBER_RECORD			0x009B
Packit 857059
#define STL_SA_ATTR_DG_NAME_RECORD				0x009C
Packit 857059
#define STL_SA_ATTR_DT_MEMBER_RECORD			0x009D
Packit 857059
Packit 857059
Packit 857059
#define STL_SA_ATTR_SWITCH_COST_RECORD			0x00A3
Packit 857059
Packit 857059
//#define STL_SA_ATTR_JOB_ROUTE_RECORD			0xffb2  // Never implemented.
Packit 857059
//#define STL_SA_ATTR_CG_RECORD        			0xff40  // Never implemented.
Packit 857059
//#define STL_SA_ATTR_CG_STATUS_RECORD 			0xff41  // Never implemented.
Packit 857059
//#define STL_SA_ATTR_CFT_RECORD       			0xff42  // Never implemented.
Packit 857059
Packit 857059
/* Subnet Administration MAD status values */
Packit 857059
#define STL_MAD_STATUS_STL_SA_UNAVAILABLE	    0x0100  // SA unavailable
Packit 857059
Packit 857059
/*
Packit 857059
 * SA capability mask defines
Packit 857059
 */
Packit 857059
#define STL_SA_CAPABILITY_MULTICAST_SUPPORT      0x0200
Packit 857059
#define STL_SA_CAPABILITY_MULTIPATH_SUPPORT      0x0400
Packit 857059
#define STL_SA_CAPABILITY_PORTINFO_CAPMASK_MATCH 0x2000
Packit 857059
#define STL_SA_CAPABILITY_PA_SERVICES_SUPPORT    0x8000
Packit 857059
Packit 857059
/* 32 bit values, lower 27 bits are capabilities*/
Packit 857059
#define STL_SA_CAPABILITY2_QOS_SUPPORT            0x0000002
Packit 857059
#define STL_SA_CAPABILITY2_MFTTOP_SUPPORT         0x0000008
Packit 857059
#define STL_SA_CAPABILITY2_FULL_PORTINFO          0x0000040
Packit 857059
#define STL_SA_CAPABILITY2_EXT_SUPPORT            0x0000080
Packit 857059
#define STL_SA_CAPABILITY2_DGDTRECORD_SUPPORT	  0x1000000
Packit 857059
#define STL_SA_CAPABILITY2_SWCOSTRECORD_SUPPORT   0x2000000
Packit 857059
Packit 857059
/* SA Capmask Bits to return on IB SA ClassPortInfo */
Packit 857059
#define IB_SA_CAPABILITY_MASK(capmask) (capmask & \
Packit 857059
	(STL_CLASS_PORT_CAPMASK_TRAP             | \
Packit 857059
	STL_CLASS_PORT_CAPMASK_NOTICE            | \
Packit 857059
	STL_CLASS_PORT_CAPMASK_CM2               | \
Packit 857059
	STL_SA_CAPABILITY_MULTICAST_SUPPORT      | \
Packit 857059
	STL_SA_CAPABILITY_MULTIPATH_SUPPORT      | \
Packit 857059
	STL_SA_CAPABILITY_PORTINFO_CAPMASK_MATCH | \
Packit 857059
	STL_SA_CAPABILITY_PA_SERVICES_SUPPORT))
Packit 857059
Packit 857059
/* SA Capmask2 Bits to return on IB SA ClassPortInfo */
Packit 857059
#define IB_SA_CAPABILITY2_MASK(capmask) (capmask & \
Packit 857059
	(STL_SA_CAPABILITY2_QOS_SUPPORT   | \
Packit 857059
	STL_SA_CAPABILITY2_MFTTOP_SUPPORT | \
Packit 857059
	STL_SA_CAPABILITY2_FULL_PORTINFO  | \
Packit 857059
	STL_SA_CAPABILITY2_EXT_SUPPORT))
Packit 857059
Packit 857059
static __inline void
Packit 857059
StlSaClassPortInfoCapMask(char buf[80], uint16 cmask)
Packit 857059
{
Packit 857059
	if (!cmask) {
Packit 857059
		snprintf(buf, 80, "-");
Packit 857059
	} else {
Packit 857059
		snprintf(buf, 80, "%s%s%s%s%s%s%s",
Packit 857059
			(cmask & STL_CLASS_PORT_CAPMASK_TRAP) ? "Trap " : "",
Packit 857059
			(cmask & STL_CLASS_PORT_CAPMASK_NOTICE) ? "Notice " : "",
Packit 857059
			(cmask & STL_CLASS_PORT_CAPMASK_CM2) ? "CapMask2 " : "",
Packit 857059
			/* Class Specific */
Packit 857059
			(cmask & STL_SA_CAPABILITY_MULTICAST_SUPPORT) ? "MultiCast " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY_MULTIPATH_SUPPORT) ? "MultiPath " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY_PORTINFO_CAPMASK_MATCH) ? "PortInfoMask " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY_PA_SERVICES_SUPPORT) ? "PartService " : "");
Packit 857059
	}
Packit 857059
}
Packit 857059
static __inline void
Packit 857059
StlSaClassPortInfoCapMask2(char buf[80], uint32 cmask)
Packit 857059
{
Packit 857059
	if (!cmask) {
Packit 857059
		snprintf(buf, 80, "-");
Packit 857059
	} else {
Packit 857059
		snprintf(buf, 80, "%s%s%s%s%s%s",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_QOS_SUPPORT) ? "QoS " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_MFTTOP_SUPPORT) ? "MFTTop " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_FULL_PORTINFO) ? "FullPortInfo " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_EXT_SUPPORT) ? "ExtSpeed " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_DGDTRECORD_SUPPORT) ? "DG/DT " : "",
Packit 857059
			(cmask & STL_SA_CAPABILITY2_SWCOSTRECORD_SUPPORT) ? "SwCost " : "");
Packit 857059
	}
Packit 857059
}
Packit 857059
Packit 857059
/*
Packit 857059
 * NodeRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Extended LID to 32 bits.
Packit 857059
 *		Reserved added to 8-byte-align structures.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint32		Reserved;				
Packit 857059
Packit 857059
	STL_NODE_INFO NodeInfo;
Packit 857059
	
Packit 857059
	STL_NODE_DESCRIPTION NodeDesc;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_NODE_RECORD;
Packit 857059
Packit 857059
/* ComponentMask bits */
Packit 857059
#define STL_NODE_RECORD_COMP_LID					0x00000001
Packit 857059
/* reserved field									0x00000002 */
Packit 857059
#define STL_NODE_RECORD_COMP_BASEVERSION			0x00000004
Packit 857059
#define STL_NODE_RECORD_COMP_CLASSVERSION			0x00000008
Packit 857059
#define STL_NODE_RECORD_COMP_NODETYPE				0x00000010
Packit 857059
#define STL_NODE_RECORD_COMP_NUMPORTS				0x00000020
Packit 857059
/* reserved field									0x00000040 */
Packit 857059
#define STL_NODE_RECORD_COMP_SYSIMAGEGUID			0x00000080
Packit 857059
#define STL_NODE_RECORD_COMP_NODEGUID				0x00000100
Packit 857059
#define STL_NODE_RECORD_COMP_PORTGUID				0x00000200
Packit 857059
#define STL_NODE_RECORD_COMP_PARTITIONCAP			0x00000400
Packit 857059
#define STL_NODE_RECORD_COMP_DEVICEID				0x00000800
Packit 857059
#define STL_NODE_RECORD_COMP_REVISION				0x00001000
Packit 857059
#define STL_NODE_RECORD_COMP_LOCALPORTNUM			0x00002000
Packit 857059
#define STL_NODE_RECORD_COMP_VENDORID				0x00004000
Packit 857059
#define STL_NODE_RECORD_COMP_NODEDESC				0x00008000
Packit 857059
Packit 857059
/*
Packit 857059
 * PortInfoRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		EndPortLID extended to 32 bits.
Packit 857059
 *		RID.Reserved field changed to a bitfield to comply with proposed
Packit 857059
 *			IBTA 1.3 spec.
Packit 857059
 *		Reserved added to qword-align PortInfoData.
Packit 857059
 *		RID.PortNum for HFI will return HFI port number
Packit 857059
 */
Packit 857059
#define STL_NUM_LINKDOWN_REASONS 8
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint8 Reserved[6];
Packit 857059
	uint8 NeighborLinkDownReason;
Packit 857059
	uint8 LinkDownReason;
Packit 857059
	uint64 Timestamp;
Packit 857059
} PACK_SUFFIX STL_LINKDOWN_REASON;
Packit 857059
Packit 857059
/**
Packit 857059
 * Returns the next index in an array of STL_LINKDOWN_REASONS of size
Packit 857059
 * STL_NUM_LINKDOWN_REASONS to use. Uses the first free space or the
Packit 857059
 * LinkDownReason with the oldest timestamp.
Packit 857059
 */
Packit 857059
static __inline__ int STL_LINKDOWN_REASON_NEXT_INDEX(STL_LINKDOWN_REASON* ldr) {
Packit 857059
	int i;
Packit 857059
	int selectedIndex = 0;
Packit 857059
	uint64 earliestTimestamp = 0xffffffffffffffffll;
Packit 857059
Packit 857059
	for(i = 0; i < STL_NUM_LINKDOWN_REASONS; i++) {
Packit 857059
		if(ldr[i].Timestamp == 0) {
Packit 857059
			return i;
Packit 857059
		} else if(ldr[i].Timestamp < earliestTimestamp){
Packit 857059
			selectedIndex = i;
Packit 857059
			earliestTimestamp = ldr[i].Timestamp;
Packit 857059
		}
Packit 857059
	}
Packit 857059
Packit 857059
	return selectedIndex;
Packit 857059
}
Packit 857059
Packit 857059
/**
Packit 857059
 * Returns the most recent stored LinkDownReason
Packit 857059
 */
Packit 857059
static __inline__ int STL_LINKDOWN_REASON_LAST_INDEX(STL_LINKDOWN_REASON* ldr) {
Packit 857059
	int i;
Packit 857059
	int selectedIndex = -1;
Packit 857059
	uint64 earliestTimestamp = 0x0ll;
Packit 857059
Packit 857059
	for(i = 0; i < STL_NUM_LINKDOWN_REASONS; i++) {
Packit 857059
		if(ldr[i].Timestamp >  earliestTimestamp){
Packit 857059
			selectedIndex = i;
Packit 857059
			earliestTimestamp = ldr[i].Timestamp;
Packit 857059
		}
Packit 857059
	}
Packit 857059
Packit 857059
	return selectedIndex;
Packit 857059
}
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	EndPortLID;				
Packit 857059
		uint8	PortNum;			/* for switch or HFI: port numnber */
Packit 857059
		uint8	Reserved;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint16		Reserved;	
Packit 857059
Packit 857059
	STL_PORT_INFO PortInfo;
Packit 857059
    STL_LINKDOWN_REASON LinkDownReasons[STL_NUM_LINKDOWN_REASONS];
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_PORTINFO_RECORD;
Packit 857059
Packit 857059
/* ComponentMask bits */
Packit 857059
/* 
Packit 857059
 * The component mask bits for port info deviate from the IB standard
Packit 857059
 * because there are too many fields in port info to enumerate. At
Packit 857059
 * this time only the following mask bits are defined. All other bits
Packit 857059
 * are reserved for future expansion.
Packit 857059
 */
Packit 857059
#define STL_PORTINFO_RECORD_COMP_ENDPORTLID				0x0000000000000001ll
Packit 857059
#define STL_PORTINFO_RECORD_COMP_PORTNUM				0x0000000000000002ll
Packit 857059
#define STL_PORTINFO_RECORD_COMP_OPTIONS				0x0000000000000004ll
Packit 857059
#define STL_PORTINFO_RECORD_COMP_CAPABILITYMASK			0x0000000000000008ll
Packit 857059
Packit 857059
/*
Packit 857059
 * P_KeyTableRecord
Packit 857059
 * 
Packit 857059
 * STL Differences:
Packit 857059
 *		LID extended to 32 bits.
Packit 857059
 *		Reserved shortened to restore alignment.
Packit 857059
 *		RID.PortNum for HFI will return HFI port number
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		uint32	LID;
Packit 857059
		uint16	Blocknum;
Packit 857059
		uint8	PortNum;			/* for switch or HFI: port numnber */
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint8		Reserved;	 
Packit 857059
	
Packit 857059
	STL_PARTITION_TABLE	PKeyTblData;
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_P_KEY_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_PKEYTABLE_RECORD_COMP_LID					0x00000001
Packit 857059
#define STL_PKEYTABLE_RECORD_COMP_BLOCKNUM				0x00000002
Packit 857059
#define STL_PKEYTABLE_RECORD_COMP_PORTNUM				0x00000004
Packit 857059
Packit 857059
/*
Packit 857059
 * SCMappingTableRecord
Packit 857059
 *
Packit 857059
 * Used for querying the SA for SC to SC Mapping information about a 
Packit 857059
 * single input/output pair.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		LID extended to 32 bits. Each entry in the table is widened to 8 bits, 
Packit 857059
 *			the top 3 bits of each entry MUST be zero. This was done in 
Packit 857059
 *			preference to trying to pack 5 bit fields into multiples of 8 bits.
Packit 857059
 *
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;	
Packit 857059
		uint8	InputPort;				
Packit 857059
		uint8	OutputPort;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
			RID_Secondary:1,
Packit 857059
			Reserved2:7);
Packit 857059
	uint8		Reserved;
Packit 857059
Packit 857059
	STL_SC		Map[STL_MAX_SCS]; 	
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SC_MAPPING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_SC2SC_RECORD_COMP_LID 			0x0000000000000001ull
Packit 857059
#define STL_SC2SC_RECORD_COMP_INPUTPORT		0x0000000000000002ull
Packit 857059
#define STL_SC2SC_RECORD_COMP_OUTPUTPORT	0x0000000000000004ull
Packit 857059
Packit 857059
/*
Packit 857059
 * SL2SCMappingTableRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		New for STL.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;	
Packit 857059
		uint16	Reserved;				
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint16		Reserved2;
Packit 857059
	
Packit 857059
	STL_SC		SLSCMap[STL_MAX_SLS]; 	
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_SL2SC_MAPPING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_SL2SC_RECORD_COMP_LID 0x0000000000000001ull
Packit 857059
Packit 857059
/*
Packit 857059
 * SC2SLMappingTableRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		New for STL.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;	
Packit 857059
		uint16	Reserved;				
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint16		Reserved2;
Packit 857059
	
Packit 857059
	STL_SL		SCSLMap[STL_MAX_SCS]; 	
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_SC2SL_MAPPING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_SC2SL_RECORD_COMP_LID 0x0000000000000001ull
Packit 857059
Packit 857059
/*
Packit 857059
 * SC2VL Mapping Table Records
Packit 857059
 *
Packit 857059
 * There are three possible SC to VL mapping tables: NT, T and R. SC2VL_R 
Packit 857059
 * will not be implemented in STL Gen 1. While they are all three separate 
Packit 857059
 * SA MAD attributes, they all have identical structure.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;
Packit 857059
		uint8	Port; 				/* for switch or HFI: port numnber */
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint8		Reserved[3];
Packit 857059
	
Packit 857059
	STL_VL		SCVLMap[STL_MAX_SCS]; 	
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_SC2VL_R_MAPPING_TABLE_RECORD;
Packit 857059
Packit 857059
typedef STL_SC2VL_R_MAPPING_TABLE_RECORD STL_SC2PVL_T_MAPPING_TABLE_RECORD;
Packit 857059
typedef STL_SC2VL_R_MAPPING_TABLE_RECORD STL_SC2PVL_NT_MAPPING_TABLE_RECORD;
Packit 857059
typedef STL_SC2VL_R_MAPPING_TABLE_RECORD STL_SC2PVL_R_MAPPING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_SC2VL_R_RECORD_COMP_LID 0x0000000000000001ull
Packit 857059
#define STL_SC2VL_R_RECORD_COMP_PORT 0x0000000000000002ull
Packit 857059
Packit 857059
/*
Packit 857059
 * SwitchInfoRecord
Packit 857059
 *
Packit 857059
 * STL Differences
Packit 857059
 *		Old LID/Reserved RID replaced with 32 bit LID.
Packit 857059
 *		Reserved added to align SwitchInfoData.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID 	LID;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	uint32		Reserved;		
Packit 857059
Packit 857059
	STL_SWITCH_INFO	SwitchInfoData; 	
Packit 857059
} PACK_SUFFIX STL_SWITCHINFO_RECORD;
Packit 857059
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_LID 				0x0000000000000001ull
Packit 857059
/* Reserved											0x0000000000000002ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_LFDBCAP			0x0000000000000004ull
Packit 857059
/* Reserved											0x0000000000000008ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_MFDBCAP			0x0000000000000010ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_LFDBTOP			0x0000000000000020ull
Packit 857059
/* Reserved											0x0000000000000040ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_MFDBTOP			0x0000000000000080ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_COLLCAP			0x0000000000000100ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_COLLTOP			0x0000000000000200ull
Packit 857059
/* Reserved											0x0000000000000400ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_IPPRIMARY		0x0000000000000800ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_IPSECONDARY		0x0000000000001000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_PORTSTATECHG		0x0000000000020000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_LIFETIME			0x0000000000040000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_PENFCAP			0x0000000000080000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_PORTGROUPCAP 	0x0000000000100000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_PORTGROUPTOP 	0x0000000000200000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_RMODESUPPORTEED	0x0000000000400000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_RMODEENABLED		0x0000000000800000ull
Packit 857059
/* Reserved											0x0000000001000000ull */
Packit 857059
/* Reserved											0x0000000002000000ull */
Packit 857059
/* Reserved											0x0000000004000000ull */
Packit 857059
/* Reserved											0x0000000008000000ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_EP0				0x0000000010000000ull
Packit 857059
/* Reserved											0x0000000020000000ull */
Packit 857059
/* Reserved											0x0000000040000000ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_COLLMASK			0x0000000080000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_MCMASK 			0x0000000100000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARLOSTONLY 		0x0000000200000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARPAUSE 			0x0000000400000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARENABLE 		0x0000000800000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARALGORITHM 		0x0000001000000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARFREQ 			0x0000002000000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_ARTHRESHOLD 		0x0000004000000000ull
Packit 857059
/* Reserved											0x0000008000000000ull */
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_CAPMASK 			0x0000010000000000ull
Packit 857059
#define STL_SWITCHINFO_RECORD_COMP_CMCOLLECTIVES	0x0000020000000000ull
Packit 857059
Packit 857059
/*
Packit 857059
 * LFTRecord 
Packit 857059
 *
Packit 857059
 * Blocks are still defined as 64 bytes long to be consistent with IB.
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *
Packit 857059
 * 	LID extended to 32 bits.
Packit 857059
 *	BlockNum extended to 18 bits.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;	
Packit 857059
		IB_BITFIELD2(uint32, 
Packit 857059
				Reserved:14,
Packit 857059
				BlockNum:18);
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	/* 8 bytes */
Packit 857059
Packit 857059
	uint8 		LinearFdbData[64];
Packit 857059
	
Packit 857059
	/* 72 bytes */
Packit 857059
} PACK_SUFFIX STL_LINEAR_FORWARDING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_LFT_RECORD_COMP_LID 			0x0000000000000001ull
Packit 857059
/* Reserved 								0x0000000000000002ull */
Packit 857059
#define STL_LFT_RECORD_COMP_BLOCKNUM		0x0000000000000004ull
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * MFTRecord 
Packit 857059
 * 
Packit 857059
 * NOTES:
Packit 857059
 * 		In IB the width of the PORTMASK data type was defined as only 16 
Packit 857059
 *		bits, requiring the SM to iterate over 3 different positions values 
Packit 857059
 *		to retrieve the MFTs for a 48-port switch. 
Packit 857059
 *		For this reason PORTMASK is now defined as 64 bits wide, eliminating 
Packit 857059
 *		the need to use the "position" attribute in the Gen 1 & Gen 2 
Packit 857059
 *		generations of hardware. 
Packit 857059
 *
Packit 857059
 *		As above, a "block" is defined as 64 bytes; therefore a single block 
Packit 857059
 *		will contain 8 MFT records. The consumer should use GetTable() and 
Packit 857059
 *		RMPP to retrieve more than one block. As with the RFT, BlockNum is 
Packit 857059
 *		defined as 21 bits, providing for a total of 2^24 LIDs.
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		PORTMASK is now 64 bits.
Packit 857059
 *		LID is now 32 bits.
Packit 857059
 *		Position is now 2 bits.
Packit 857059
 *		Reserved is now 9 bits.
Packit 857059
 *		BlockNum is now 21 bits.
Packit 857059
 *		Reserved2 removed to preserve word alignment.
Packit 857059
 */
Packit 857059
 
Packit 857059
#define STL_MFTB_WIDTH 64
Packit 857059
#define STL_MFTB_MAX_POSITION 4
Packit 857059
typedef struct _STL_MULTICAST_FORWARDING_TABLE_RECORD {
Packit 857059
	struct {
Packit 857059
		STL_LID		LID; 				// Port 0 of the switch.	
Packit 857059
	
Packit 857059
		STL_FIELDUNION3(u1, 32,
Packit 857059
				Position:2,			
Packit 857059
				Reserved:9,
Packit 857059
				BlockNum:21);
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	STL_MULTICAST_FORWARDING_TABLE MftTable;
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_MULTICAST_FORWARDING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_MFTB_RECORD_COMP_LID 			0x0000000000000001ull
Packit 857059
#define STL_MFTB_RECORD_COMP_POSITIONl		0x0000000000000002ull
Packit 857059
/* Reserved 								0x0000000000000004ull */
Packit 857059
#define STL_MFTB_RECORD_COMP_BLOCKNUM		0x0000000000000008ull
Packit 857059
Packit 857059
/*
Packit 857059
 * Port Group Table Record 
Packit 857059
 * 
Packit 857059
 * Defines which ports are associated with which port groups. 
Packit 857059
 * For each query, BlockNum defines a block of port groups, from 0-31,
Packit 857059
 * with each block containing 8 port groups. Position identifies a group 
Packit 857059
 * of ports with 0 being ports 1-64, 1 being ports 65-128, etc.
Packit 857059
 *
Packit 857059
 * This is nearly optimal; only switches that support more than 248 port groups
Packit 857059
 * will require two queries to read the entire table.
Packit 857059
 *
Packit 857059
 */
Packit 857059
#define STL_PGTB_NUM_ENTRIES_PER_BLOCK  8
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;
Packit 857059
		IB_BITFIELD3(uint16,
Packit 857059
				Position:2,
Packit 857059
				Reserved:9,
Packit 857059
				BlockNum:5);
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint16		Reserved2;
Packit 857059
				
Packit 857059
	STL_PORTMASK GroupBlock[STL_PGTB_NUM_ENTRIES_PER_BLOCK];
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_PORT_GROUP_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_PGTB_RECORD_COMP_LID 			0x0000000000000001ull
Packit 857059
#define STL_PGTB_RECORD_COMP_POSITION		0x0000000000000002ull
Packit 857059
#define STL_PGTB_RECORD_COMP_BLOCKNUM		0x0000000000000004ull
Packit 857059
Packit 857059
/*
Packit 857059
 * Port Group Forwarding Table Record 
Packit 857059
 * 
Packit 857059
 * Maps LIDs to Port Groups.
Packit 857059
 *
Packit 857059
 * New for STL. Similar to the preceding forwarding table records. 
Packit 857059
 *
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_PGFDB_NUM_ENTRIES_PER_BLOCK 64
Packit 857059
typedef struct {	
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;	
Packit 857059
	
Packit 857059
		STL_FIELDUNION2(u1, 32,
Packit 857059
				Reserved:14, 
Packit 857059
				BlockNum:18);
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	PORT 		PGFdbData[STL_PGFDB_NUM_ENTRIES_PER_BLOCK];
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_PORT_GROUP_FORWARDING_TABLE_RECORD;
Packit 857059
Packit 857059
#define STL_PGFWDTB_RECORD_COMP_LID 			0x0000000000000001ull
Packit 857059
#define STL_PGFWDTB_RECORD_COMP_BLOCKNUM		0x0000000000000002ull
Packit 857059
Packit 857059
/*
Packit 857059
 * VLArbitrationRecord
Packit 857059
 * 
Packit 857059
 * STL Differences:
Packit 857059
 *		Switch LID extended.
Packit 857059
 *		Blocknum now defined as 0 - 3 as per the VL Arbitration Table MAD.
Packit 857059
 *		Length of Low, High tables extended to 128 bytes.
Packit 857059
 *		Preempt table added.
Packit 857059
 *		RID.OutputPortNum for HFI will return port number
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;				
Packit 857059
		uint8	OutputPortNum;		/* for switch or HFI: port numnber */
Packit 857059
		uint8	BlockNum;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	uint16		Reserved;
Packit 857059
	
Packit 857059
	STL_VLARB_TABLE VLArbTable;
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_VLARBTABLE_RECORD;
Packit 857059
#define STL_VLARB_COMPONENTMASK_LID 		0x0000000000000001ul
Packit 857059
#define STL_VLARB_COMPONENTMASK_OUTPORTNUM 	0x0000000000000002ul
Packit 857059
#define STL_VLARB_COMPONENTMASK_BLOCKNUM 	0x0000000000000004ul
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * MCMemberRecord
Packit 857059
 * 
Packit 857059
 * STL Differences:
Packit 857059
 *		MLID moved to new location for flit alignment.
Packit 857059
 *		SL Lengthened to 5 bits.
Packit 857059
 *		FlowLabel removed.
Packit 857059
 *		Record is now 16 bits longer.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		IB_GID MGID;
Packit 857059
		/* 16 bytes */
Packit 857059
Packit 857059
		IB_GID PortGID;
Packit 857059
Packit 857059
		/* 32 bytes */
Packit 857059
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	uint32 Q_Key;
Packit 857059
Packit 857059
	uint16 Reserved; // Used to be MLID.
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
			MtuSelector:2,
Packit 857059
			Mtu:6);
Packit 857059
	uint8 TClass;
Packit 857059
Packit 857059
	/* 40 bytes */
Packit 857059
	uint16 P_Key;
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
			RateSelector:2,
Packit 857059
			Rate:6);
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
			PktLifeTimeSelector:2,
Packit 857059
			PktLifeTime:6);
Packit 857059
Packit 857059
	IB_BITFIELD3(uint32,
Packit 857059
			SL:5,
Packit 857059
			Reserved5:19,
Packit 857059
			HopLimit:8);
Packit 857059
Packit 857059
	/* 48 bytes */
Packit 857059
	IB_BITFIELD5(uint8,
Packit 857059
			Scope:4,
Packit 857059
			Reserved4:1,
Packit 857059
			JoinSendOnlyMember:1, // NOTE: Treat these 4 JoinStates as 1 attr.
Packit 857059
			JoinNonMember:1,
Packit 857059
			JoinFullMember:1);
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
			ProxyJoin:1,
Packit 857059
			Reserved2:7);
Packit 857059
Packit 857059
	uint16 Reserved3; 
Packit 857059
Packit 857059
	STL_LID MLID; // Moved for alignment.
Packit 857059
Packit 857059
	/* 56 bytes */
Packit 857059
} PACK_SUFFIX STL_MCMEMBER_RECORD;
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_MGID		0x0000000000000001ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_PORTGID 	0x0000000000000002ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_QKEY		0x0000000000000004ull
Packit 857059
/* Reserved									0x0000000000000008ull */
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_MTU_SEL 	0x0000000000000010ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_MTU 		0x0000000000000020ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_OK_MTU	( STL_MCMEMBER_COMPONENTMASK_MTU_SEL \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_MTU )
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_TCLASS	0x0000000000000040ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_PKEY 	0x0000000000000080ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_RATE_SEL 0x0000000000000100ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_RATE 	0x0000000000000200ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_OK_RATE 	( STL_MCMEMBER_COMPONENTMASK_RATE \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_RATE_SEL )
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_LIFE_SEL	0x0000000000000400ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_LIFE		0x0000000000000800ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_OK_LIFE	( STL_MCMEMBER_COMPONENTMASK_LIFE_SEL \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_LIFE )
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_SL		0x0000000000001000ull
Packit 857059
/* Reserved									0x0000000000002000ull */
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_HOP		0x0000000000004000ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_SCOPE	0x0000000000008000ull
Packit 857059
/* Reserved									0x0000000000010000ull */
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_JNSTATE	0x0000000000020000ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_OK_JOIN	( STL_MCMEMBER_COMPONENTMASK_MGID \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_JNSTATE \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_PORTGID )
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_PROXYJN	0x0000000000040000ull
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_MLID		0x0000000000080000ull
Packit 857059
Packit 857059
#define STL_MCMEMBER_COMPONENTMASK_OK_CREATE	( STL_MCMEMBER_COMPONENTMASK_PKEY \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_QKEY \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_SL \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_TCLASS \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_JNSTATE \
Packit 857059
						| STL_MCMEMBER_COMPONENTMASK_PORTGID )
Packit 857059
Packit 857059
#define STL_MCMRECORD_GETJOINSTATE(REC)		( (REC)->JoinSendOnlyMember \
Packit 857059
						| (REC)->JoinNonMember \
Packit 857059
						| (REC)->JoinFullMember )
Packit 857059
Packit 857059
/*
Packit 857059
 * SMInfoRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		LID extended to 32 bits.
Packit 857059
 * 		Added Reserved to ensure word-alignment of SMInfo.
Packit 857059
 * 		Added Reserved2 to ensure word-alignment of GetTable() responses.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint32		Reserved;
Packit 857059
	
Packit 857059
	STL_SM_INFO		SMInfo;
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_SMINFO_RECORD;
Packit 857059
Packit 857059
#define STL_SMINFO_RECORD_COMP_LID 					0x0000000000000001ull
Packit 857059
/* Reserved											0x0000000000000002ull */
Packit 857059
#define STL_SMINFO_RECORD_COMP_GUID					0x0000000000000004ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_SMKEY				0x0000000000000008ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_ACTCOUNT 			0x0000000000000010ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_ETIME				0x0000000000000020ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_PRIORITY				0x0000000000000040ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_SMSTATEELEV			0x0000000000000080ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_SMSTATEINIT			0x0000000000000100ull
Packit 857059
#define STL_SMINFO_RECORD_COMP_SMSTATECURR			0x0000000000000200ull
Packit 857059
Packit 857059
/*
Packit 857059
 * InformInfoRecord
Packit 857059
 *
Packit 857059
 * Length is TBD.
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		Replaced SubscriberGID with SubscriberLID.
Packit 857059
 *		Reserved adjusted to preserve alignment.
Packit 857059
 *
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	SubscriberLID;	
Packit 857059
		uint16	Enum;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint16		Reserved;
Packit 857059
Packit 857059
	STL_INFORM_INFO InformInfoData;	
Packit 857059
} PACK_SUFFIX STL_INFORM_INFO_RECORD;
Packit 857059
Packit 857059
#define STL_INFORM_INFO_REC_COMP_SUBSCRIBER_LID		0x0000000000000001ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_SUBSCRIBER_ENUM	0x0000000000000002ll
Packit 857059
/* reserved											0x0000000000000004ll */
Packit 857059
#define STL_INFORM_INFO_REC_COMP_GID				0x0000000000000008ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RANGE_BEGIN	0x0000000000000010ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RANGE_END		0x0000000000000020ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RANGE_GENERIC	0x0000000000000040ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RANGE_SUBSCRIBE 0x0000000000000080ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RANGE_TYPE		0x0000000000000100ll
Packit 857059
/* reserved											0x0000000000000200ll */
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_TRAP_NUMBER	0x0000000000000400ll
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_QPN			0x0000000000000800ll
Packit 857059
/* reserved											0x0000000000001000ll */
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_RESP_TIME		0x0000000000002000ll
Packit 857059
/* reserved											0x0000000000004000ll */
Packit 857059
#define STL_INFORM_INFO_REC_COMP_LID_PRODUCER_TYPE	0x0000000000008000ll
Packit 857059
Packit 857059
/*
Packit 857059
 * LinkRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		LIDs lengthened
Packit 857059
 *		Reserved field added to preserve alignment.
Packit 857059
 *		RID.FromPort and ToPort for HFI will return HFI port number
Packit 857059
 *		LinkCondition field added to describe which link errors apply to the link when asking for this data.
Packit 857059
 *		ErrorMask field added to provide detailed information on the particular errors that led to the LinkCondition error.
Packit 857059
 */
Packit 857059
typedef struct _STL_LINK_RECORD {
Packit 857059
	struct {
Packit 857059
		STL_LID	FromLID;		
Packit 857059
		uint8	FromPort;		/* for switch or HFI: port number */
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint8		ToPort;			/* for switch or HFI: port number */
Packit 857059
Packit 857059
	uint16		Reserved;
Packit 857059
	
Packit 857059
	STL_LID		ToLID;	
Packit 857059
} PACK_SUFFIX STL_LINK_RECORD;
Packit 857059
Packit 857059
#define STL_LINK_REC_COMP_FROM_LID				0x0000000000000001ll
Packit 857059
#define STL_LINK_REC_COMP_FROM_PORT				0x0000000000000002ll
Packit 857059
#define STL_LINK_REC_COMP_TO_PORT				0x0000000000000004ll
Packit 857059
#define STL_LINK_REC_LINK_CONDITION				0x0000000000000008ll
Packit 857059
#define STL_LINK_REC_COMP_TO_LID				0x0000000000000010ll
Packit 857059
#define STL_LINK_REC_COMP_ERROR_MASK			0x0000000000000020ll
Packit 857059
Packit 857059
/* These constants are used to describe the applicable link condition(s) */
Packit 857059
#define STL_LINK_REC_SLOWLINKS					0x0000000000000001ll
Packit 857059
#define STL_LINK_REC_MISCONFIGLINKS				0x0000000000000002ll
Packit 857059
#define STL_LINK_REC_MISCONNLINKS				0x0000000000000004ll
Packit 857059
Packit 857059
/*
Packit 857059
 * ServiceRecord
Packit 857059
 *
Packit 857059
 * STL Differences
Packit 857059
 *		Added of ServiceLID
Packit 857059
 *		Moved Reserved field to maintain alignment.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		uint64	ServiceID;
Packit 857059
	
Packit 857059
		STL_LID	ServiceLID;
Packit 857059
		uint16	ServiceP_Key;
Packit 857059
		uint16	Reserved;
Packit 857059
Packit 857059
		IB_GID	ServiceGID;
Packit 857059
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint32		ServiceLease;	
Packit 857059
							
Packit 857059
	uint32		Reserved;
Packit 857059
	
Packit 857059
	uint8		ServiceKey[16];		
Packit 857059
	
Packit 857059
	uint8		ServiceName[64];	
Packit 857059
	
Packit 857059
	uint8		ServiceData8[16];
Packit 857059
Packit 857059
	uint16		ServiceData16[8];
Packit 857059
	
Packit 857059
	uint32		ServiceData32[4];
Packit 857059
	
Packit 857059
	uint64		ServiceData64[2];
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_SERVICE_RECORD;
Packit 857059
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICEID			0x0000000000000001ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICELID			0x0000000000000002ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICEPKEY			0x0000000000000004ull
Packit 857059
/* Reserved											0x0000000000000008ull */
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICEGID			0x0000000000000010ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICELEASE		0x0000000000000020ull
Packit 857059
/* Reserved											0x0000000000000040ull */
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICEKEY			0x0000000000000080ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICENAME			0x0000000000000100ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_1			0x0000000000000200ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_2			0x0000000000000400ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_3			0x0000000000000800ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_4			0x0000000000001000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_5			0x0000000000002000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_6			0x0000000000004000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_7			0x0000000000008000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_8			0x0000000000010000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_9			0x0000000000020000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_10		0x0000000000040000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_11		0x0000000000080000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_12		0x0000000000100000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_13		0x0000000000200000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_14		0x0000000000400000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_15		0x0000000000800000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_8_16		0x0000000001000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_1		0x0000000002000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_2		0x0000000004000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_3		0x0000000008000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_4		0x0000000010000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_5		0x0000000020000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_6		0x0000000040000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_7		0x0000000080000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_16_8		0x0000000100000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_32_1		0x0000000200000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_32_2		0x0000000400000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_32_3		0x0000000800000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_32_4		0x0000001000000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_64_1		0x0000002000000000ull
Packit 857059
#define STL_SERVICE_RECORD_COMP_SERVICE_64_2		0x0000004000000000ull
Packit 857059
 
Packit 857059
/*
Packit 857059
 * ServiceAssociationRecord
Packit 857059
 *
Packit 857059
 * NOTE: No changes from IB version.
Packit 857059
 */
Packit 857059
typedef IB_SERVICEASSOCIATION_RECORD STL_SERVICEASSOCIATION_RECORD;
Packit 857059
 
Packit 857059
/*
Packit 857059
 * TraceRecord
Packit 857059
 *
Packit 857059
 * STL Differences
Packit 857059
 *
Packit 857059
 *		GIDPrefix deleted.
Packit 857059
 *		EntryPort, ExitPort moved for alignment.
Packit 857059
 * 		Reserved2 added to word/qword-align NodeID.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	uint16		IDGeneration;
Packit 857059
	uint8		Reserved;
Packit 857059
	uint8		NodeType;
Packit 857059
	uint8		EntryPort;
Packit 857059
	uint8		ExitPort;
Packit 857059
	uint16		Reserved2;
Packit 857059
	
Packit 857059
	uint64		NodeID;
Packit 857059
	uint64		ChassisID;
Packit 857059
	uint64		EntryPortID;
Packit 857059
	uint64		ExitPortID;
Packit 857059
	
Packit 857059
} PACK_SUFFIX STL_TRACE_RECORD;
Packit 857059
Packit 857059
/*
Packit 857059
 * MultiPathRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		RawTraffic is now reserved.
Packit 857059
 * 		Reserved2 moved, shortened.
Packit 857059
 * 		SL lengthened.
Packit 857059
 * 		L2 settings added.
Packit 857059
 * 		Reserved3 added to ensure alignment of gids.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	IB_BITFIELD3(uint32,
Packit 857059
				Reserved1:4,
Packit 857059
				FlowLabel:20,
Packit 857059
				HopLimit:8);		
Packit 857059
Packit 857059
	uint8		TClass;				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				Reversible:1,
Packit 857059
				NumbPath:7);
Packit 857059
Packit 857059
	uint16		P_Key;
Packit 857059
	
Packit 857059
	IB_BITFIELD4(uint16,
Packit 857059
				QoSType:2,
Packit 857059
				QoSPriority:8,
Packit 857059
				Reserved2:1,
Packit 857059
				SL:5);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				MtuSelector:2,
Packit 857059
				Mtu:6);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				RateSelector:2,
Packit 857059
				Rate:6);
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				PktLifeTimeSelector:2,
Packit 857059
				PktLifeTime:6);
Packit 857059
	
Packit 857059
	IB_BITFIELD3(uint8,
Packit 857059
				IndependenceSelector:2,
Packit 857059
				SGIDScope:3,
Packit 857059
				DGIDScope:3);
Packit 857059
	
Packit 857059
	uint8		SGIDCount;
Packit 857059
Packit 857059
	uint8		DGIDCount;
Packit 857059
Packit 857059
	uint64		ServiceID;	
Packit 857059
	
Packit 857059
	IB_BITFIELD5(uint8,
Packit 857059
				L2_8B:1,			// True if path supports this L2.
Packit 857059
				L2_10B:1,			// True if path supports this L2.
Packit 857059
				L2_9B:1,			// True if path supports this L2.
Packit 857059
				L2_16B:1,			// True if path supports this L2.
Packit 857059
				Reserved:4);		
Packit 857059
Packit 857059
	uint8		Reserved3[7];				
Packit 857059
				
Packit 857059
	IB_GID		GIDList[0];		// SGIDCount + DGIDCount entries.
Packit 857059
} PACK_SUFFIX STL_MULTIPATH_RECORD_GID;
Packit 857059
Packit 857059
/*
Packit 857059
 * MultiPathRecord (GUID)
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		New for STL
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	IB_BITFIELD3(uint32,
Packit 857059
				Reserved1:4,
Packit 857059
				FlowLabel:20,
Packit 857059
				HopLimit:8);		
Packit 857059
Packit 857059
	uint8		TClass;				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				Reversible:1,
Packit 857059
				NumbPath:7);
Packit 857059
Packit 857059
	uint16		P_Key;
Packit 857059
	
Packit 857059
	IB_BITFIELD4(uint16,
Packit 857059
				QoSType:2,
Packit 857059
				QoSPriority:8,
Packit 857059
				Reserved2:1,
Packit 857059
				SL:5);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				MtuSelector:2,
Packit 857059
				Mtu:6);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				RateSelector:2,
Packit 857059
				Rate:6);
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				PktLifeTimeSelector:2,
Packit 857059
				PktLifeTime:6);
Packit 857059
	
Packit 857059
	IB_BITFIELD3(uint8,
Packit 857059
				IndependenceSelector:2,
Packit 857059
				SGUIDScope:3,
Packit 857059
				DGUIDScope:3);
Packit 857059
	
Packit 857059
	uint16		SGUIDCount;
Packit 857059
Packit 857059
	uint16		DGUIDCount;
Packit 857059
Packit 857059
	IB_BITFIELD5(uint8,
Packit 857059
				L2_8B:1,			// True if path supports this L2.
Packit 857059
				L2_10B:1,			// True if path supports this L2.
Packit 857059
				L2_9B:1,			// True if path supports this L2.
Packit 857059
				L2_16B:1,			// True if path supports this L2.
Packit 857059
				Reserved:4);		
Packit 857059
Packit 857059
	uint8		Reserved3[5];				
Packit 857059
				
Packit 857059
	uint64		ServiceID;	
Packit 857059
	
Packit 857059
	uint64		SubnetPrefix;
Packit 857059
Packit 857059
	uint64		GUIDList[0];		// SGUIDCount + DGUIDCount entries.
Packit 857059
} PACK_SUFFIX STL_MULTIPATH_RECORD_GUID;
Packit 857059
Packit 857059
/*
Packit 857059
 * MultiPathRecord (LID)
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		New for STL
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	IB_BITFIELD3(uint32,
Packit 857059
				Reserved1:4,
Packit 857059
				FlowLabel:20,
Packit 857059
				HopLimit:8);		
Packit 857059
Packit 857059
	uint8		TClass;				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				Reversible:1,
Packit 857059
				NumbPath:7);
Packit 857059
Packit 857059
	uint16		P_Key;
Packit 857059
	
Packit 857059
	IB_BITFIELD4(uint16,
Packit 857059
				QoSType:2,
Packit 857059
				QoSPriority:8,
Packit 857059
				Reserved2:1,
Packit 857059
				SL:5);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				MtuSelector:2,
Packit 857059
				Mtu:6);				
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				RateSelector:2,
Packit 857059
				Rate:6);
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				PktLifeTimeSelector:2,
Packit 857059
				PktLifeTime:6);
Packit 857059
	
Packit 857059
	IB_BITFIELD3(uint8,
Packit 857059
				IndependenceSelector:2,
Packit 857059
				SGUIDScope:3,
Packit 857059
				DGUIDScope:3);
Packit 857059
	
Packit 857059
	uint16		SLIDCount;
Packit 857059
Packit 857059
	uint16		DLIDCount;
Packit 857059
Packit 857059
	IB_BITFIELD5(uint8,
Packit 857059
				L2_8B:1,			// True if path supports this L2.
Packit 857059
				L2_10B:1,			// True if path supports this L2.
Packit 857059
				L2_9B:1,			// True if path supports this L2.
Packit 857059
				L2_16B:1,			// True if path supports this L2.
Packit 857059
				Reserved:4);		
Packit 857059
Packit 857059
	uint8		Reserved3[5];				
Packit 857059
				
Packit 857059
	uint64		ServiceID;	
Packit 857059
	
Packit 857059
	STL_LID		LIDList[0];			// SLIDCount + DLIDCount entries
Packit 857059
} PACK_SUFFIX STL_MULTIPATH_RECORD_LID;
Packit 857059
Packit 857059
/*
Packit 857059
 * CableInfoRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		LID lengthened to 32 bits.
Packit 857059
 * 		Reserved2 field shortened from 20 bits to 4 to preserve word-alignment.
Packit 857059
 * 		RID.Port for HFI will return HFI port number
Packit 857059
 */
Packit 857059
#define STL_CIR_DATA_SIZE		64
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID	LID;
Packit 857059
		uint8	Port;				/* for switch or HFI: port numnber */
Packit 857059
		IB_BITFIELD2(uint8,
Packit 857059
				Length:7,
Packit 857059
				Reserved:1);
Packit 857059
		STL_FIELDUNION2(u1, 16,
Packit 857059
				 Address:12,
Packit 857059
				 PortType:4); /* Port type for response only */
Packit 857059
	};
Packit 857059
	
Packit 857059
	uint8		Data[STL_CIR_DATA_SIZE];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO_RECORD;
Packit 857059
Packit 857059
#define STL_CIR_COMP_LID 	0x1ul
Packit 857059
#define STL_CIR_COMP_PORT	0x2ul
Packit 857059
#define STL_CIR_COMP_LEN	0x4ul
Packit 857059
//Reserved					0x8ul
Packit 857059
#define STL_CIR_COMP_ADDR	0x10ul
Packit 857059
//Reserved2					0x20ul
Packit 857059
Packit 857059
#define STL_VFABRIC_NAME_LEN 64
Packit 857059
/*
Packit 857059
 * VFInfoRecord
Packit 857059
 * 
Packit 857059
 * STL Differences:
Packit 857059
 *		Was a Vendor-specific MAD in IB
Packit 857059
 *		SL lengthened to 5 bits.
Packit 857059
 *		Reserved fields renamed.
Packit 857059
 *
Packit 857059
 *	TBD - adjust to report multiple SLs (perhaps a mask) for TrafficClass 
Packit 857059
 *	concept in prep for STL2
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	uint16		vfIndex;		/* The index assigned to the VF */
Packit 857059
	uint16		pKey;			/* PKey associated with the VF */
Packit 857059
	uint32		rsvd1;
Packit 857059
	
Packit 857059
	/* 8 bytes */
Packit 857059
	
Packit 857059
	uint8		vfName[STL_VFABRIC_NAME_LEN]; /* The name of the VF. Must be \0 terminated. */
Packit 857059
	
Packit 857059
	/* 72 bytes */
Packit 857059
	
Packit 857059
	uint64		ServiceID;		/* for query only */
Packit 857059
	
Packit 857059
	/* 80 bytes */
Packit 857059
	
Packit 857059
	IB_GID		MGID;			/* for query only */
Packit 857059
	
Packit 857059
	/* 96 bytes */
Packit 857059
	
Packit 857059
	struct {
Packit 857059
		IB_BITFIELD3(uint8,
Packit 857059
				selectFlags:2, 	/* 1 bit to indicate SL in queries, 1 bit for pkey */
Packit 857059
				rsvd2:1,
Packit 857059
				slBase:5);		/* service level - 5 bits */
Packit 857059
		IB_BITFIELD3(uint8,
Packit 857059
				mtuSpecified:1,	/* mtu specified for VF - 1 bit */
Packit 857059
				rsvd3:1,    
Packit 857059
				mtu:6);			/* max mtu assigned to VF - 6 bits */
Packit 857059
Packit 857059
		IB_BITFIELD3(uint8,
Packit 857059
				rateSpecified:1, /* rate specified for VF - 1 bit */
Packit 857059
				rsvd4:1,
Packit 857059
				rate:6);		/* max rate assigned to VF - 6 bits */
Packit 857059
Packit 857059
		IB_BITFIELD3(uint8,
Packit 857059
				pktLifeSpecified:1, /* pkt life time specified for VF - 1 bit */
Packit 857059
				rsvd5:4,
Packit 857059
				pktLifeTimeInc:3); /* pkt life time assigned to VF - 3 bits */
Packit 857059
	} PACK_SUFFIX s1;
Packit 857059
Packit 857059
	uint8		optionFlags;		/* security bit, QoS bit, reliable flow disable, 5 reserved */
Packit 857059
	uint8		bandwidthPercent;	/* bandwidth percentage, 8 bits */
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				rsvd6:7,
Packit 857059
				priority:1);		/* priority, 1 bit */
Packit 857059
Packit 857059
	uint8		routingSLs; /* Always 1 */
Packit 857059
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				rsvd7:1,
Packit 857059
				preemptionRank:7);
Packit 857059
	
Packit 857059
	IB_BITFIELD2(uint8,
Packit 857059
				rsvd8:3,
Packit 857059
				hoqLife:5);
Packit 857059
Packit 857059
	IB_BITFIELD3(uint8,
Packit 857059
				slResponseSpecified:1, /* slResponse field is set - 1 bit */
Packit 857059
				rsvd9:2,
Packit 857059
				slResponse:5); /* service level - 5 bits */
Packit 857059
Packit 857059
	IB_BITFIELD3(uint8,
Packit 857059
				slMulticastSpecified:1, /* slMulticast field is set - 1 bit */
Packit 857059
				rsvd10:2,
Packit 857059
				slMulticast:5); /* service level - 5 bits */
Packit 857059
Packit 857059
	uint8		rsvd11[20];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_VFINFO_RECORD;
Packit 857059
Packit 857059
#define STL_VFINFO_REC_COMP_INDEX				0x0000000000000001ll
Packit 857059
#define STL_VFINFO_REC_COMP_PKEY				0x0000000000000002ll
Packit 857059
#define STL_VFINFO_REC_COMP_NAME				0x0000000000000008ll
Packit 857059
#define STL_VFINFO_REC_COMP_SERVICEID			0x0000000000000010ll
Packit 857059
#define STL_VFINFO_REC_COMP_MGID				0x0000000000000020ll
Packit 857059
#define STL_VFINFO_REC_COMP_SL					0x0000000000000080ll
Packit 857059
Packit 857059
/* selectFlags */
Packit 857059
#define STL_VFINFO_REC_SEL_PKEY_QUERY			0x01
Packit 857059
#define STL_VFINFO_REC_SEL_SL_QUERY				0x02
Packit 857059
Packit 857059
/* optionFlags */
Packit 857059
#define STL_VFINFO_REC_OPT_SECURITY				0x01
Packit 857059
#define STL_VFINFO_REC_OPT_QOS					0x02
Packit 857059
#define STL_VFINFO_REC_OPT_FLOW_DISABLE			0x04
Packit 857059
Packit 857059
/*
Packit 857059
 * QuarantinedNodeRecord
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 *		New for STL
Packit 857059
 *
Packit 857059
 * NOTE: GET TABLE is the only supported method for this query.
Packit 857059
 * Component Mask must be zero.
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_QUARANTINE_REASON_SPOOF_GENERIC 		0x00000001
Packit 857059
#define STL_QUARANTINE_REASON_TOPO_NODE_GUID 		0x00000002
Packit 857059
#define STL_QUARANTINE_REASON_TOPO_NODE_DESC 		0x00000004
Packit 857059
#define STL_QUARANTINE_REASON_TOPO_PORT_GUID 		0x00000008
Packit 857059
#define STL_QUARANTINE_REASON_TOPO_UNDEFINED_LINK 	0x00000010
Packit 857059
#define STL_QUARANTINE_REASON_VL_COUNT 				0x00000020
Packit 857059
#define STL_QUARANTINE_REASON_SMALL_MTU_SIZE 		0x00000040
Packit 857059
#define STL_QUARANTINE_REASON_BAD_PACKET_FORMATS    0x00000080
Packit 857059
#define STL_QUARANTINE_REASON_MAXLID				0x00000100
Packit 857059
#define STL_QUARANTINE_REASON_UNKNOWN 				0x00000000
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_NODE_DESCRIPTION nodeDesc;
Packit 857059
	uint64 nodeGUID;
Packit 857059
	uint64 portGUID;
Packit 857059
} PACK_SUFFIX STL_EXPECTED_NODE_INFO;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID trustedLid;
Packit 857059
	uint8 trustedPortNum;
Packit 857059
	uint8 Reserved[3];
Packit 857059
	uint64 trustedNodeGUID;
Packit 857059
	uint64 trustedNeighborNodeGUID;
Packit 857059
Packit 857059
	STL_NODE_DESCRIPTION NodeDesc;
Packit 857059
	STL_NODE_INFO NodeInfo;
Packit 857059
Packit 857059
	uint32 quarantineReasons;
Packit 857059
	// expectedNodeInfo only valid if quarantineReasons != 0
Packit 857059
	STL_EXPECTED_NODE_INFO expectedNodeInfo;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_QUARANTINED_NODE_RECORD;
Packit 857059
Packit 857059
/*
Packit 857059
 * Congestion Info Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Was Vendor Specific in IB.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_LID				LID;
Packit 857059
	uint32				reserved;				
Packit 857059
	STL_CONGESTION_INFO CongestionInfo;
Packit 857059
} PACK_SUFFIX STL_CONGESTION_INFO_RECORD;
Packit 857059
Packit 857059
#define CIR_COMPONENTMASK_COMP_LID	    0x00000001
Packit 857059
Packit 857059
/*
Packit 857059
 * Switch Congestion Setting Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Was Vendor Specific in IB.
Packit 857059
 */
Packit 857059
typedef struct {	/* all fields are RW */
Packit 857059
	STL_LID				LID;
Packit 857059
	uint32				reserved;				
Packit 857059
	STL_SWITCH_CONGESTION_SETTING SwitchCongestionSetting;
Packit 857059
} PACK_SUFFIX STL_SWITCH_CONGESTION_SETTING_RECORD;
Packit 857059
Packit 857059
#define SWCSR_COMPONENTMASK_COMP_LID	    0x00000001
Packit 857059
Packit 857059
/*
Packit 857059
 * Switch Port Congestion Setting Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Was Vendor Specific in IB.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID			LID;
Packit 857059
		uint8			Port;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	
Packit 857059
	uint8				Reserved[3];
Packit 857059
	
Packit 857059
	/*	8 bytes */
Packit 857059
	
Packit 857059
	STL_SWITCH_PORT_CONGESTION_SETTING SwitchPortCongestionSetting;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SWITCH_PORT_CONGESTION_SETTING_RECORD;
Packit 857059
Packit 857059
#define SWPCSR_COMPONENTMASK_COMP_LID	    0x00000001
Packit 857059
#define SWPCSR_COMPONENTMASK_COMP_PORT	    0x00000002
Packit 857059
Packit 857059
/*
Packit 857059
 * HFI Congestion Setting Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Was Vendor Specific in IB.
Packit 857059
 */
Packit 857059
typedef struct {	/* all fields are RW */
Packit 857059
	STL_LID				LID;	
Packit 857059
	uint32				reserved;			
Packit 857059
	STL_HFI_CONGESTION_SETTING HFICongestionSetting;
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_SETTING_RECORD;
Packit 857059
Packit 857059
#define HCSR_COMPONENTMASK_COMP_LID	    0x00000001
Packit 857059
Packit 857059
/*
Packit 857059
 * HFI Congestion Control Table Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		Was Vendor Specific in IB.
Packit 857059
 */
Packit 857059
typedef struct {	/* all fields are RW */
Packit 857059
	struct {
Packit 857059
		STL_LID			LID;
Packit 857059
		uint16			BlockNum;
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
	uint16				reserved;				
Packit 857059
	STL_HFI_CONGESTION_CONTROL_TABLE HFICongestionControlTable;
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_CONTROL_TABLE_RECORD;
Packit 857059
#define HCCTR_COMPONENTMASK_COMP_LID	    0x00000001
Packit 857059
#define HCCTR_COMPONENTMASK_COMP_BLOCK	    0x00000002
Packit 857059
Packit 857059
/*
Packit 857059
 * Buffer Control Table Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		New for STL
Packit 857059
 * 		At this time, Component Mask is only supported for LID and Port.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	struct {
Packit 857059
		STL_LID			LID;
Packit 857059
		uint8			Port;			/* for switch or HFI: port numnber */
Packit 857059
	} PACK_SUFFIX RID;
Packit 857059
Packit 857059
	uint8				Reserved[3];
Packit 857059
Packit 857059
	STL_BUFFER_CONTROL_TABLE BufferControlTable;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_BUFFER_CONTROL_TABLE_RECORD;
Packit 857059
Packit 857059
#define BFCTRL_COMPONENTMASK_COMP_LID	0x00000001
Packit 857059
#define BFCTRL_COMPONENTMASK_COMP_PORT	0x00000002
Packit 857059
Packit 857059
/*
Packit 857059
 * FabricInfo Record
Packit 857059
 *
Packit 857059
 * STL Differences:
Packit 857059
 * 		New for STL
Packit 857059
 * 		supports only Get, Component Mask N/A
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	uint32	NumHFIs;				/* HFI Nodes */
Packit 857059
	uint32	NumSwitches;			/* Switch Nodes (ASICs) */
Packit 857059
		/* Internal = in same SystemImageGuid */
Packit 857059
		/* HFI = HFI to switch and HFI to HFI links */
Packit 857059
		/* ISL = switch to switch links */
Packit 857059
		/* links which are Omitted will not be considered for Degraded checks */
Packit 857059
		/* switch port 0 is not counted as a link */
Packit 857059
	uint32	NumInternalHFILinks;	/* HFI to switch (or HFI) links */
Packit 857059
	uint32	NumExternalHFILinks;	/* HFI to switch (or HFI) links */
Packit 857059
	uint32	NumInternalISLs;		/* switch to switch links */
Packit 857059
	uint32	NumExternalISLs;		/* switch to switch links */
Packit 857059
	uint32	NumDegradedHFILinks;	/* links with one or both sides below best enabled */
Packit 857059
	uint32	NumDegradedISLs;		/* links with one or both sides below best enabled */
Packit 857059
	uint32	NumOmittedHFILinks;		/* links quarantined or left in Init */
Packit 857059
	uint32	NumOmittedISLs;			/* links quarantined or left in Init */
Packit 857059
	uint32	rsvd5[92];
Packit 857059
} PACK_SUFFIX STL_FABRICINFO_RECORD;
Packit 857059
Packit 857059
Packit 857059
#define MAX_DG_NAME 64
Packit 857059
Packit 857059
/*
Packit 857059
 * DeviceGroupNameRecord
Packit 857059
 */ 
Packit 857059
typedef struct {
Packit 857059
	uint8 	DeviceGroupName[MAX_DG_NAME];		/* Must be \0 terminated. */
Packit 857059
} PACK_SUFFIX STL_DEVICE_GROUP_NAME_RECORD;
Packit 857059
Packit 857059
Packit 857059
#define STL_DEVICE_GROUP_COMPONENTMASK_LID		0x0000000000000001ull
Packit 857059
#define STL_DEVICE_GROUP_COMPONENTMASK_PORT		0x0000000000000002ull
Packit 857059
/* reserved field								0x0000000000000004ull */
Packit 857059
#define STL_DEVICE_GROUP_COMPONENTMASK_DGNAME	0x0000000000000008ull
Packit 857059
#define STL_DEVICE_GROUP_COMPONENTMASK_GUID		0x0000000000000010ull
Packit 857059
#define STL_DEVICE_GROUP_COMPONENTMASK_NODEDESC	0x0000000000000020ull
Packit 857059
Packit 857059
/*
Packit 857059
 * DeviceGroupMemberRecord
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_LID 				LID;
Packit 857059
	uint8					Port;
Packit 857059
	uint8					Reserved1[3];
Packit 857059
	uint8					DeviceGroupName[MAX_DG_NAME];	/* Must be \0 terminated. */
Packit 857059
	uint64					GUID;
Packit 857059
	STL_NODE_DESCRIPTION	NodeDescription;
Packit 857059
} PACK_SUFFIX STL_DEVICE_GROUP_MEMBER_RECORD;
Packit 857059
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_LID		0x0000000000000001ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_NUMPORTS		0x0000000000000002ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_NODETYPE		0x0000000000000004ull
Packit 857059
/* reserved field					0x0000000000000008ull */
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_PORTSTATEMASKACT	0x0000000000000010ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_PORTSTATEMASKETH	0x0000000000000020ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_GUID		0x0000000000000040ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_SYSIMAGEGUID	0x0000000000000080ull
Packit 857059
#define STL_DEVICE_TREE_COMPONENTMASK_NODEDESC		0x0000000000000100ull
Packit 857059
/* reserved field					0x0000000000000200ull */
Packit 857059
Packit 857059
/*
Packit 857059
 * DeviceTreeMemberRecord
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_LID					LID;
Packit 857059
	uint8					NumPorts;
Packit 857059
	uint8					NodeType;
Packit 857059
	uint8					Reserved1[2];
Packit 857059
	STL_PORTMASK			portMaskAct[STL_MAX_PORTMASK];
Packit 857059
Packit 857059
	STL_PORTMASK			portMaskReserved[STL_MAX_PORTMASK];
Packit 857059
Packit 857059
	STL_PORTMASK			portMaskPortLinkMode[STL_MAX_PORTMASK];
Packit 857059
Packit 857059
	uint64					GUID;
Packit 857059
	uint64					SystemImageGUID;
Packit 857059
	STL_NODE_DESCRIPTION	NodeDescription;
Packit 857059
	uint64					Reserved2[4];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_DEVICE_TREE_MEMBER_RECORD;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * SwitchCost Record
Packit 857059
 */
Packit 857059
#define STL_SWITCH_COST_NUM_ENTRIES 64
Packit 857059
typedef struct _STL_SWITCH_COST {
Packit 857059
	STL_LID DLID;
Packit 857059
	uint16 value;
Packit 857059
	uint16 Reserved;
Packit 857059
} PACK_SUFFIX STL_SWITCH_COST;
Packit 857059
Packit 857059
typedef struct _STL_SWITCH_COST_RECORD {
Packit 857059
	STL_LID SLID;
Packit 857059
	STL_SWITCH_COST Cost[STL_SWITCH_COST_NUM_ENTRIES];
Packit 857059
} PACK_SUFFIX STL_SWITCH_COST_RECORD;
Packit 857059
Packit 857059
#define STL_SWITCH_COST_REC_COMP_SLID 0x0000000000000001ull
Packit 857059
Packit 857059
#if defined (__cplusplus)
Packit 857059
}
Packit 857059
#endif
Packit 857059
#endif // __STL_SA_H__