Blame IbAccess/Common/Inc/stl_sm_types.h

Packit 857059
/* BEGIN_ICS_COPYRIGHT7 ****************************************
Packit 857059
Packit 857059
Copyright (c) 2015-2018, 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
#ifndef __IBA_STL_SM_TYPES_H__
Packit 857059
#define __IBA_STL_SM_TYPES_H__
Packit 857059
Packit 857059
#include "iba/stl_types.h"
Packit 857059
#include "iba/ib_sm_types.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
/*
Packit 857059
 * Defines 
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_SM_CLASS_VERSION				0x80 	/* Subnet Management */
Packit 857059
Packit 857059
/* SMP Attributes */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_NODE_DESCRIPTION	0x0010  /* Node Description */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_NODE_INFO			0x0011  /* Node Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SWITCH_INFO	   	0x0012  /* Switch Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_PORT_INFO 			0x0015  /* Port Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_PART_TABLE			0x0016  /* Partition Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SL_SC_MAPPING_TABLE	0x0017  /* Service Level to */
Packit 857059
															/* Service Channel Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_VL_ARBITRATION		0x0018  /* Lists of VL Arbitration Weights */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_LINEAR_FWD_TABLE	0x0019  /* Linear Forwarding Table */
Packit 857059
// reserved										0x001A	/* (was) Random Forwarding Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_MCAST_FWD_TABLE	0x001B  /* Multicast Forwarding Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SM_INFO			0x0020  /* Subnet Manager Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_LED_INFO			0x0031  /* Turn on/off beaconing LED */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_CABLE_INFO			0x0032  /* Cable Information */
Packit 857059
Packit 857059
#define STL_MCLASS_ATTRIB_ID_AGGREGATE			0x0080  /* Aggregate */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_SC_MAPPING_TABLE	0x0081  /* Service Channel to */
Packit 857059
															/* Service Channel Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_SL_MAPPING_TABLE	0x0082  /* Service Channel to */
Packit 857059
															/* Service Level Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_VLR_MAPPING_TABLE	0x0083  /* Service Channel to Virtual */
Packit 857059
															/* Lane Receive Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_VLT_MAPPING_TABLE	0x0084  /* Service Channel to Virtual */
Packit 857059
															/* Lane Transmit Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_VLNT_MAPPING_TABLE	0x0085  /* Service Channel to Virtual */
Packit 857059
															/* Lane Credit Return Mapping Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_PORT_STATE_INFO		0x0087  /* Port State Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_PORT_GROUP_FWD_TABLE	0x0088  /* Adaptive Routing Port Group Forwarding Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_PORT_GROUP_TABLE		0x0089  /* Adaptive Routing Port Group Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_BUFFER_CONTROL_TABLE	0x008A  /* Buffer Control Table */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_CONGESTION_INFO		0x008B  /* Congestion Information */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SWITCH_CONGESTION_LOG	0x008C  /* Congestion Log */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SWITCH_CONGESTION_SETTING	0x008D	/* Switch Congestion Setting */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SWITCH_PORT_CONGESTION_SETTING	0x008E	/* Switch Congestion Setting */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_HFI_CONGESTION_LOG		0x008F	/* Congestion Log */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_HFI_CONGESTION_SETTING	0x0090	/* HFI Congestion Setting */
Packit 857059
#define STL_MCLASS_ATTRIB_ID_HFI_CONGESTION_CONTROL_TABLE	0x0091	/* HFI Congestion Control Table */
Packit 857059
Packit 857059
#define STL_MCLASS_ATTRIB_ID_SC_SC_MULTI_SET        0x0094  /* Service Channel to Service */
Packit 857059
Packit 857059
/* SMP Attribute Modifiers */
Packit 857059
#define STL_SM_CONF_START_ATTR_MOD 0x00000200  /* PortInfo & PortStateInfo Attr Mod Flag */
Packit 857059
Packit 857059
Packit 857059
/* *************************************************************************
Packit 857059
 * SMPs
Packit 857059
 */
Packit 857059
Packit 857059
/* SMP Fields (LID Routed/Directed Route) */
Packit 857059
Packit 857059
#define STL_MAX_PAYLOAD_SMP_DR	1872	/* Max size of DR SMP payload */
Packit 857059
#define STL_MAX_PAYLOAD_SMP_LR	2016	/* Max size of LR SMP payload */
Packit 857059
Packit 857059
#define STL_MIN_SMP_DR_MAD	(STL_MAD_BLOCK_SIZE - STL_MAX_PAYLOAD_SMP_DR)
Packit 857059
#define STL_MIN_SMP_LR_MAD	(STL_MAD_BLOCK_SIZE - STL_MAX_PAYLOAD_SMP_LR)
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	MAD_COMMON  common;
Packit 857059
	uint64  M_Key;  					/* A 64 bit key, */
Packit 857059
										/* employed for SM authentication */
Packit 857059
	union {
Packit 857059
		struct _STL_LIDRouted {
Packit 857059
			uint8   SMPData[STL_MAX_PAYLOAD_SMP_LR];	/* Up to 'MAX' byte field of SMP */
Packit 857059
														/* data used to contain the */
Packit 857059
														/* method's attribute */
Packit 857059
		} LIDRouted;
Packit 857059
Packit 857059
		struct _STL_DirectedRoute {
Packit 857059
			STL_LID DrSLID; 			/* Directed route source LID */
Packit 857059
			STL_LID DrDLID; 			/* Directed route destination LID */
Packit 857059
			uint8   InitPath[64];   	/* 64-byte field containing the initial */
Packit 857059
										/* directed path */
Packit 857059
			uint8   RetPath[64];		/* 64-byte field containing the */
Packit 857059
										/* returning directed path */
Packit 857059
			uint8   Reserved2[8];		/* For the purpose of aligning the Data */
Packit 857059
										/* field on a 16-byte boundary */
Packit 857059
Packit 857059
			uint8   SMPData[STL_MAX_PAYLOAD_SMP_DR];	/* Up to 'MAX' byte field of SMP */
Packit 857059
														/* data used to contain the */
Packit 857059
														/* method's attribute */
Packit 857059
		} DirectedRoute;
Packit 857059
	}SmpExt;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SMP;
Packit 857059
Packit 857059
Packit 857059
/* **************************************************************************
Packit 857059
 * Attribute specific SMP Packet Formats
Packit 857059
 *
Packit 857059
 * In the attributes which follow member fields are marked (where appropriate)
Packit 857059
 * with usage information as: 'AccessType/NodeType/IB-Only'.  AccessType
Packit 857059
 * refers to how members can be accessed; NodeType refers to which node
Packit 857059
 * types the member applies; IB-Only refers to members which have been
Packit 857059
 * deprecated for STL use but retained to report information about IB nodes.
Packit 857059
 *
Packit 857059
 * AccessType: Read Write ('RW'), Read Only ('RO')
Packit 857059
 *
Packit 857059
 * NodeType: HFI ('H'), External Switch Port ('S'), Base Switch Port 0 ('P'),
Packit 857059
 * Enhanced Switch Port 0 ('E').  NodeType is shown as a 4-character string
Packit 857059
 * with each character representing (in positional order) a node type 'HSPE'.
Packit 857059
 * If a node type is not applicable for a member, its character position is
Packit 857059
 * shown as '-' (ex. 'H-PE').
Packit 857059
 *
Packit 857059
 * Power-On-Default values are shown as 'POD: xxx'
Packit 857059
 * Link-Up-Default values are shown as 'LUD: xxx'
Packit 857059
 * 
Packit 857059
 * Member fields which require a link bounce for new values to become effective
Packit 857059
 * are marked 'LinkBounce'
Packit 857059
 */
Packit 857059
Packit 857059
/*
Packit 857059
 * SMA Notices/Traps (Data field for IB_NOTICE)
Packit 857059
 */
Packit 857059
Packit 857059
/* Trap Numbers */
Packit 857059
#define STL_TRAP_GID_NOW_IN_SERVICE		0x40
Packit 857059
#define STL_TRAP_GID_OUT_OF_SERVICE		0x41
Packit 857059
#define STL_TRAP_ADD_MULTICAST_GROUP	0x42
Packit 857059
#define STL_TRAP_DEL_MULTICAST_GROUP	0x43
Packit 857059
#define STL_TRAP_LINK_PORT_CHANGE_STATE	0x80
Packit 857059
#define STL_TRAP_LINK_INTEGRITY			0x81
Packit 857059
#define STL_TRAP_BUFFER_OVERRUN			0x82
Packit 857059
#define STL_TRAP_FLOW_WATCHDOG			0x83
Packit 857059
#define STL_TRAP_CHANGE_CAPABILITY		0x90
Packit 857059
#define STL_TRAP_CHANGE_SYSGUID			0x91
Packit 857059
#define STL_TRAP_BAD_M_KEY				0x100
Packit 857059
#define STL_TRAP_BAD_P_KEY				0x101
Packit 857059
#define STL_TRAP_BAD_Q_KEY				0x102
Packit 857059
#define STL_TRAP_SWITCH_BAD_PKEY		0x103
Packit 857059
#define STL_SMA_TRAP_LINK_WIDTH			0x800
Packit 857059
#define STL_TRAP_COST_MATRIX_CHANGE		0x801
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	IB_GID		Gid;
Packit 857059
} PACK_SUFFIX STL_TRAP_GID;
Packit 857059
Packit 857059
#define STL_TRAP_GID_NOW_IN_SERVICE_DATA STL_TRAP_GID
Packit 857059
#define STL_TRAP_GID_OUT_OF_SERVICE_DATA STL_TRAP_GID
Packit 857059
#define STL_TRAP_GID_ADD_MULTICAST_GROUP_DATA STL_TRAP_GID
Packit 857059
#define STL_TRAP_GID_DEL_MULTICAST_GROUP_DATA STL_TRAP_GID
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID		Lid;
Packit 857059
} PACK_SUFFIX STL_TRAP_PORT_CHANGE_STATE_DATA;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID		Lid;
Packit 857059
	uint8		Port;
Packit 857059
} PACK_SUFFIX STL_TRAP_LINK;
Packit 857059
#define STL_TRAP_LINK_INTEGRITY_DATA STL_TRAP_LINK
Packit 857059
#define STL_TRAP_BUFFER_OVERRUN_DATA STL_TRAP_LINK
Packit 857059
#define STL_TRAP_FLOW_WATCHDOG_DATA STL_TRAP_LINK
Packit 857059
Packit 857059
typedef STL_FIELDUNION16(STL_CAPABILITY_MASK, 32,
Packit 857059
		CmReserved6:						1,  	/* shall be zero */
Packit 857059
		CmReserved24:						2,  	/* shall be zero */
Packit 857059
		CmReserved5:						2,  	/* shall be zero */
Packit 857059
		CmReserved23:  						4,		/* shall be zero */
Packit 857059
		IsCapabilityMaskNoticeSupported:	1,
Packit 857059
		CmReserved22:						1,		/* shall be zero */
Packit 857059
		IsVendorClassSupported: 			1,
Packit 857059
		IsDeviceManagementSupported:		1,
Packit 857059
		CmReserved21:   					2,		/* shall be zero */
Packit 857059
		IsConnectionManagementSupported:	1,
Packit 857059
		CmReserved25: 					   10,		/* shall be zero */
Packit 857059
		IsAutomaticMigrationSupported:		1,
Packit 857059
		CmReserved2:						1,		/* shall be zero */
Packit 857059
		CmReserved20:						2,
Packit 857059
		IsSM:   							1,
Packit 857059
		CmReserved1:						1 );	/* shall be zero */
Packit 857059
Packit 857059
/* Capability Mask 3 - a bit set to 1 for affirmation of supported capability
Packit 857059
 * by a given port
Packit 857059
 */
Packit 857059
typedef STL_FIELDUNION15(STL_CAPABILITY_MASK3, 16,
Packit 857059
		CmReserved0:					1,
Packit 857059
		CmReserved1:					1,
Packit 857059
		CmReserved2:					1,
Packit 857059
		IsMAXLIDSupported:			1,		/* RO/H--- Does the HFI support the MAX */
Packit 857059
											/* LID being configured */
Packit 857059
		CmReserved3:			 	1,
Packit 857059
		CmReserved4:				1,
Packit 857059
		VLSchedulingConfig:			2,		/* RO/H-PE VL Arbitration */
Packit 857059
											/* see STL_VL_SCHEDULING_MODE */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsSnoopSupported: 			1,		/* RO/--PE Packet snoop */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsAsyncSC2VLSupported:	 	1,		/* RO/H-PE Port 0 indicates whole switch */
Packit 857059
		IsAddrRangeConfigSupported:	1,		/* RO/H-PE Can addr range for Multicast */
Packit 857059
											/* and Collectives be configured */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsPassThroughSupported: 	1,		/* RO/--PE Packet pass through */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsSharedSpaceSupported: 	1,		/* RO/H-PE Shared Space */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsSharedGroupSpaceSupported:1,		/* RO/H-PE Shared Space */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsVLMarkerSupported: 		1,		/* RO/H-PE VL Marker */
Packit 857059
											/* Port 0 indicates whole switch */
Packit 857059
		IsVLrSupported: 			1 );	/* RO/H-PE SC->VL_r table */
Packit 857059
Packit 857059
Packit 857059
typedef enum {
Packit 857059
	VL_SCHED_MODE_VLARB			= 0,	/* VL Arbitration Tables */
Packit 857059
	VL_SCHED_MODE_AUTOMATIC		= 2,	/* harcoded, not configurable */
Packit 857059
	/* reserved 3 */
Packit 857059
} STL_VL_SCHEDULING_MODE;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID					Lid;
Packit 857059
	STL_CAPABILITY_MASK		CapabilityMask;
Packit 857059
	uint16					Reserved;
Packit 857059
	STL_CAPABILITY_MASK3	CapabilityMask3;
Packit 857059
	STL_FIELDUNION5(u,16,
Packit 857059
							Reserved:12,
Packit 857059
							LinkWidthDowngradeEnabledChange:1,	
Packit 857059
							LinkSpeedEnabledChange:1,
Packit 857059
							LinkWidthEnabledChange:1,
Packit 857059
							NodeDescriptionChange:1);
Packit 857059
Packit 857059
} PACK_SUFFIX STL_TRAP_CHANGE_CAPABILITY_DATA;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint64		SystemImageGuid;
Packit 857059
	STL_LID		Lid;
Packit 857059
} PACK_SUFFIX STL_TRAP_SYSGUID_CHANGE_DATA;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID		Lid;
Packit 857059
	STL_LID		DRSLid;
Packit 857059
	/*	8 bytes */
Packit 857059
	uint8		Method;
Packit 857059
	STL_FIELDUNION3(u,8,
Packit 857059
				DRNotice:1,
Packit 857059
				DRPathTruncated:1,
Packit 857059
				DRHopCount:6);
Packit 857059
	uint16		AttributeID;
Packit 857059
	/*	12 bytes */
Packit 857059
	uint32		AttributeModifier;
Packit 857059
	/*	16 bytes */
Packit 857059
	uint64		MKey;
Packit 857059
	/* 	24 bytes */
Packit 857059
	uint8		DRReturnPath[30]; // We can make this longer....
Packit 857059
	/*  54 bytes */
Packit 857059
} PACK_SUFFIX STL_TRAP_BAD_M_KEY_DATA;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_LID		Lid1;
Packit 857059
	STL_LID		Lid2;
Packit 857059
	/*	8 bytes */
Packit 857059
	uint32		Key;	// pkey or qkey
Packit 857059
	STL_FIELDUNION2(u,8,
Packit 857059
				SL:5,
Packit 857059
				Reserved:3);
Packit 857059
	uint8		Reserved[3];
Packit 857059
	/*	16 bytes */
Packit 857059
	IB_GID		Gid1;
Packit 857059
	/*	32 bytes */
Packit 857059
	IB_GID		Gid2;
Packit 857059
	/*	48 bytes */
Packit 857059
	STL_FIELDUNION2(qp1,32,
Packit 857059
				Reserved:8,
Packit 857059
				qp:24);
Packit 857059
	/*	52 bytes */
Packit 857059
	STL_FIELDUNION2(qp2,32,
Packit 857059
				Reserved:8,
Packit 857059
				qp:24);
Packit 857059
	/*	56 bytes */
Packit 857059
} PACK_SUFFIX STL_TRAP_BAD_KEY_DATA;
Packit 857059
	
Packit 857059
#define STL_TRAP_BAD_P_KEY_DATA STL_TRAP_BAD_KEY_DATA
Packit 857059
#define STL_TRAP_BAD_Q_KEY_DATA STL_TRAP_BAD_KEY_DATA
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_FIELDUNION9(u,16,
Packit 857059
				Lid1:1, Lid2:1, PKey:1, SL:1,
Packit 857059
				QP1:1, QP2:1, Gid1:1, Gid2:1,
Packit 857059
				Reserved:8);
Packit 857059
	uint16		PKey;
Packit 857059
	/*	4 bytes */
Packit 857059
	STL_LID		Lid1;
Packit 857059
	STL_LID		Lid2;
Packit 857059
	STL_FIELDUNION2(u2,8,
Packit 857059
				SL:5,
Packit 857059
				Reserved:3);
Packit 857059
	uint8		Reserved[3];
Packit 857059
	/*	16 bytes */
Packit 857059
	IB_GID		Gid1;
Packit 857059
	/*	32 bytes */
Packit 857059
	IB_GID		Gid2;
Packit 857059
	/*	48 bytes */
Packit 857059
	STL_FIELDUNION2(qp1,32,
Packit 857059
				qp:24,
Packit 857059
				Reserved:8);
Packit 857059
	/*	52 bytes */
Packit 857059
	STL_FIELDUNION2(qp2,32,
Packit 857059
				qp:24,
Packit 857059
				Reserved:8);
Packit 857059
	/*	56 bytes */
Packit 857059
} PACK_SUFFIX STL_TRAP_SWITCH_BAD_PKEY_DATA;
Packit 857059
Packit 857059
/* LinkWidth of at least one port of switch at <ReportingLID> has changed */
Packit 857059
typedef struct {
Packit 857059
	STL_LID  ReportingLID;   		
Packit 857059
} PACK_SUFFIX STL_SMA_TRAP_DATA_LINK_WIDTH;
Packit 857059
Packit 857059
/*
Packit 857059
 * NodeInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
Packit 857059
	uint8	BaseVersion;		/* RO Supported MAD Base Version */
Packit 857059
	uint8	ClassVersion;		/* RO Supported Subnet Management Class */
Packit 857059
								/* (SMP) Version */
Packit 857059
	uint8	NodeType;	
Packit 857059
	uint8	NumPorts;			/* RO Number of link ports on this node */
Packit 857059
Packit 857059
	uint32	Reserved;
Packit 857059
Packit 857059
	uint64	SystemImageGUID;		
Packit 857059
Packit 857059
	uint64	NodeGUID;			/* RO GUID of the HFI or switch */
Packit 857059
Packit 857059
	uint64	PortGUID;			/* RO GUID of this end port itself */
Packit 857059
Packit 857059
	uint16	PartitionCap;		/* RO Number of entries in the Partition Table */
Packit 857059
								/* for end ports */
Packit 857059
	uint16	DeviceID;			/* RO Device ID information as assigned by */
Packit 857059
								/* device manufacturer */
Packit 857059
	uint32	Revision;			/* RO Device revision, assigned by manufacturer */
Packit 857059
Packit 857059
	STL_FIELDUNION2(u1, 32, 
Packit 857059
			LocalPortNum:	8,		/* RO The link port number this */
Packit 857059
									/* SMP came on in */
Packit 857059
			VendorID:		24);	/* RO Device vendor, per IEEE */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_NODE_INFO;
Packit 857059
Packit 857059
/*
Packit 857059
 * NodeDescription
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_NODE_DESCRIPTION_ARRAY_SIZE 64
Packit 857059
Packit 857059
typedef struct {
Packit 857059
Packit 857059
    /* Node String is an array of UTF-8 character that */
Packit 857059
    /* describes the node in text format */
Packit 857059
    /* Note that this string MUST BE NULL TERMINATED! */
Packit 857059
    uint8   NodeString[STL_NODE_DESCRIPTION_ARRAY_SIZE];	/* RO */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_NODE_DESCRIPTION;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * SwitchInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
Packit 857059
/* STL Routing Modes */
Packit 857059
#define STL_ROUTE_NOP			0	/* No change */
Packit 857059
#define STL_ROUTE_LINEAR		1	/* Linear routing algorithm */
Packit 857059
Packit 857059
Packit 857059
Packit 857059
typedef	union {
Packit 857059
	uint16	AsReg16;
Packit 857059
	struct { IB_BITFIELD5( uint16,
Packit 857059
		Reserved:						12,
Packit 857059
Packit 857059
		IsExtendedSCSCSupported:		1,	/* RO Extended SCSC */
Packit 857059
		IsAddrRangeConfigSupported:		1,	/* Can addr range for Multicast */
Packit 857059
											/* and Collectives be configured */
Packit 857059
		Reserved2:						1,
Packit 857059
		IsAdaptiveRoutingSupported:		1 )
Packit 857059
	} s; 
Packit 857059
} SWITCH_CAPABILITY_MASK;
Packit 857059
Packit 857059
typedef union {
Packit 857059
	uint16  AsReg16;
Packit 857059
	struct	{
Packit 857059
		uint16  Reserved;
Packit 857059
	} s;
Packit 857059
} CAPABILITY_MASK_COLLECTIVES;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint32  LinearFDBCap;	  	/* RO Number of entries supported in the */
Packit 857059
								/* Linear Unicast Forwarding Database */
Packit 857059
	uint32  PortGroupFDBCap;	/* RO Number of entries supported in the */
Packit 857059
								/* Port Group Forwarding Database */
Packit 857059
	uint32  MulticastFDBCap;	/* RO Number of entries supported in the */
Packit 857059
								/*  Multicast Forwarding Database */
Packit 857059
	STL_LID  LinearFDBTop;		/* RW Indicates the maximum DLID programmed */
Packit 857059
								/*  in the routing tables */
Packit 857059
								/* POD: 0 */
Packit 857059
	STL_LID  MulticastFDBTop;	/* RW Indicates the top of the Multicast */
Packit 857059
								/*  Forwarding Table */
Packit 857059
								/* POD: 0 */
Packit 857059
	uint32  CollectiveCap;   	/* RO Number of entries supported in the */
Packit 857059
								/*  Collective Table */
Packit 857059
								/* Reserved in Gen1 */
Packit 857059
	STL_LID  CollectiveTop;		/* RW Indicates the top of the Collective Table */
Packit 857059
								/* POD: 0 */
Packit 857059
								/* Reserved in Gen1 */
Packit 857059
	uint32  Reserved;
Packit 857059
Packit 857059
	STL_IPV6_IP_ADDR  IPAddrIPV6;	       /* RO IP Address - IPV6 */
Packit 857059
Packit 857059
	STL_IPV4_IP_ADDR  IPAddrIPV4;	       /* RO IP Address - IPV4 */
Packit 857059
Packit 857059
	uint32  Reserved26;
Packit 857059
	uint32  Reserved27;
Packit 857059
Packit 857059
	uint32	Reserved28;
Packit 857059
	uint8	Reserved21;
Packit 857059
	uint8	Reserved22;
Packit 857059
	uint8	Reserved23;
Packit 857059
Packit 857059
	union {
Packit 857059
		uint8   AsReg8;
Packit 857059
		struct { IB_BITFIELD3( uint8,
Packit 857059
			LifeTimeValue:		5,	/* LifeTimeValue */
Packit 857059
			PortStateChange:	1,	/* RW This bit is set to zero by a */
Packit 857059
									/*  management write */
Packit 857059
			Reserved20:		2 )	
Packit 857059
		} s;
Packit 857059
	} u1;
Packit 857059
Packit 857059
	uint16	Reserved24;
Packit 857059
	uint16  PartitionEnforcementCap;	/* RO Specifies the number of entries in the */
Packit 857059
										/*  partition enforcement table */
Packit 857059
	uint8	PortGroupCap;			/* RO Specifies the maximum number of */
Packit 857059
									/* entries in the port group table */
Packit 857059
	uint8	PortGroupTop;			/* RW The current number of entries in */
Packit 857059
									/* port group table. */
Packit 857059
Packit 857059
	struct {					/* RW (see STL_ROUTING_MODE) */
Packit 857059
		uint8   Supported;		/* Supported routing mode */
Packit 857059
		uint8   Enabled;		/* Enabled routing mode */
Packit 857059
	} RoutingMode;
Packit 857059
Packit 857059
	union {
Packit 857059
		uint8   AsReg8;
Packit 857059
		struct { IB_BITFIELD6( uint8,
Packit 857059
			Reserved20:		1,	
Packit 857059
			Reserved21:		1,
Packit 857059
			Reserved22:		1,
Packit 857059
			Reserved23:		1,
Packit 857059
			EnhancedPort0:	1,	
Packit 857059
			Reserved:		3 )
Packit 857059
		} s;
Packit 857059
	} u2;
Packit 857059
Packit 857059
	struct { IB_BITFIELD3( uint8,	/* Multicast/Collectives masks */
Packit 857059
		Reserved:			2,
Packit 857059
		CollectiveMask:		3,	/* RW Num of additional upper 1s in */
Packit 857059
								/* Collective address */
Packit 857059
								/* POD: 1 */
Packit 857059
								/* Reserved in Gen1 */
Packit 857059
		MulticastMask:		3 )	/* RW Num of upper 1s in Multicast address */
Packit 857059
								/* POD: 4 */
Packit 857059
	} MultiCollectMask;
Packit 857059
Packit 857059
	STL_FIELDUNION8(AdaptiveRouting, 16,
Packit 857059
		Enable: 			1,	/* RW Enable/Disable AR */
Packit 857059
		Pause:				1,	/* RW Pause AR when true */
Packit 857059
		Algorithm:			3,	/* RW 0 = Random, 1 = Greedy, */
Packit 857059
								/* 2 = Random Greedy. */
Packit 857059
		Frequency:			3,	/* RW 0-7. Value expands to 2^F*64ms. */
Packit 857059
		LostRoutesOnly:		1,  /* RW. Indicates that AR should only be done */
Packit 857059
								/* for failed links. */
Packit 857059
		Threshold:			3,  /* CCA-level at which switch uses AR. */
Packit 857059
		Reserved2:			1,
Packit 857059
		Reserved:			3);
Packit 857059
Packit 857059
	SWITCH_CAPABILITY_MASK  CapabilityMask;		/* RO */
Packit 857059
Packit 857059
	CAPABILITY_MASK_COLLECTIVES  CapabilityMaskCollectives;	/* RW */
Packit 857059
} PACK_SUFFIX STL_SWITCH_INFO;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * PortInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 00SA PPPP PPPP
Packit 857059
 *                        N:   Number of ports
Packit 857059
 *                        S=1: Start of SM configuration
Packit 857059
 *                        A=1: All ports starting at P (Set only)
Packit 857059
 *                        P:   Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 */
Packit 857059
Packit 857059
/* STL_PORT_STATE values continue from IB_PORT_STATE */
Packit 857059
/* reserved 5-6 */
Packit 857059
Packit 857059
/* STL_PORT_PHYS_STATE values continue from IB_PORT_PHYS_STATE */
Packit 857059
/* reserved 7-8 */
Packit 857059
#define STL_PORT_PHYS_OFFLINE		9		/* offline */
Packit 857059
/* reserved 10 */
Packit 857059
#define STL_PORT_PHYS_TEST			11		/* test */
Packit 857059
Packit 857059
/* Offline Disabled Reason, indicated as follows: */
Packit 857059
#define STL_OFFDIS_REASON_NONE					0	/* Nop/No specified reason */
Packit 857059
#define STL_OFFDIS_REASON_DISCONNECTED			1	/* not connected in design*/
Packit 857059
#define STL_OFFDIS_REASON_LOCAL_MEDIA_NOT_INSTALLED	2	/* Module not installed
Packit 857059
														 * in connector (QSFP,
Packit 857059
													 	 * SiPh_x16, etc) */
Packit 857059
#define STL_OFFDIS_REASON_NOT_INSTALLED			3	/* internal link not
Packit 857059
													 * installed, neighbor FRU
Packit 857059
													 * absent */
Packit 857059
#define STL_OFFDIS_REASON_CHASSIS_CONFIG		4	/* Chassis mgmt forced
Packit 857059
													 * offline due to incompat
Packit 857059
													 * or absent neighbor FRU */
Packit 857059
/* reserved 5 */
Packit 857059
#define STL_OFFDIS_REASON_END_TO_END_NOT_INSTALLED	6	/* local module present
Packit 857059
													 * but unable to detect
Packit 857059
													 * end to optical link */
Packit 857059
/* reserved 7 */
Packit 857059
#define STL_OFFDIS_REASON_POWER_POLICY			8	/* enabling port would
Packit 857059
													 * exceed power policy */
Packit 857059
#define STL_OFFDIS_REASON_LINKSPEED_POLICY		9	/* enabled speed unable to
Packit 857059
													 * be met due to persistent
Packit 857059
													 * cause */
Packit 857059
#define STL_OFFDIS_REASON_LINKWIDTH_POLICY		10	/* enabled width unable to
Packit 857059
													 * be met due to persistent
Packit 857059
													 * cause */
Packit 857059
/* reserved 11 */
Packit 857059
#define STL_OFFDIS_REASON_SWITCH_MGMT			12	/* user disabled via switch
Packit 857059
													 * mangement interface
Packit 857059
													 */
Packit 857059
#define STL_OFFDIS_REASON_SMA_DISABLED			13	/* user disabled via SMA
Packit 857059
													 * Set to phys port state
Packit 857059
													 * disabled */
Packit 857059
/* reserved 14 */
Packit 857059
#define STL_OFFDIS_REASON_TRANSIENT				15	/* Transient offline as part
Packit 857059
													 * of sync with neighbor
Packit 857059
													 * phys port state machine*/
Packit 857059
Packit 857059
/* Link Init Reason, indicated as follows: */
Packit 857059
#define STL_LINKINIT_REASON_NOP			 0	/* None on Get/no change on Set */
Packit 857059
#define STL_LINKINIT_REASON_LINKUP		 1	/* link just came up */
Packit 857059
/* values from 2-7 will not be altered by transistions from Polling to Linkup/Init */
Packit 857059
/* these can represent persistent reasons why the SM is ignoring a link */
Packit 857059
#define STL_LINKINIT_REASON_FLAPPING	 2	/* FM ignoring flapping port */
Packit 857059
/* reserved 3-7 */
Packit 857059
/* values from 8-15 will be altered by transistions from Polling to LinkUp/Init */
Packit 857059
/* these can represent transient reasons why the SM is ignoring a link */
Packit 857059
#define STL_LINKINIT_OUTSIDE_POLICY		 8	/* FM ignoring, width or speed outside FM configured policy */
Packit 857059
#define STL_LINKINIT_QUARANTINED		 9	/* FM ignoring, quarantined for security */
Packit 857059
#define STL_LINKINIT_INSUFIC_CAPABILITY	 10	/* FM ignoring, link has insufficient capabilities*/
Packit 857059
											/* for FM configuration (eg. MTU too small etc) */
Packit 857059
/* reserved 11-15 */
Packit 857059
Packit 857059
Packit 857059
/* these correspond to locally initiated link bounce due to PortErrorAction */
Packit 857059
/* See Section 9.8.3, “Error Counters”, Table 9-23 */
Packit 857059
#define STL_LINKDOWN_REASON_NONE				0	/* No specified reason */
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_0			1
Packit 857059
#define STL_LINKDOWN_REASON_BAD_PKT_LEN			2
Packit 857059
#define STL_LINKDOWN_REASON_PKT_TOO_LONG		3
Packit 857059
#define STL_LINKDOWN_REASON_PKT_TOO_SHORT		4
Packit 857059
#define STL_LINKDOWN_REASON_BAD_SLID			5
Packit 857059
#define STL_LINKDOWN_REASON_BAD_DLID			6
Packit 857059
#define STL_LINKDOWN_REASON_BAD_L2				7
Packit 857059
#define STL_LINKDOWN_REASON_BAD_SC				8
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_8			9
Packit 857059
#define STL_LINKDOWN_REASON_BAD_MID_TAIL		10
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_10		11
Packit 857059
#define STL_LINKDOWN_REASON_PREEMPT_ERROR		12
Packit 857059
#define STL_LINKDOWN_REASON_PREEMPT_VL15		13
Packit 857059
#define STL_LINKDOWN_REASON_BAD_VL_MARKER		14
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_14		15
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_15		16
Packit 857059
#define STL_LINKDOWN_REASON_BAD_HEAD_DIST		17
Packit 857059
#define STL_LINKDOWN_REASON_BAD_TAIL_DIST		18
Packit 857059
#define STL_LINKDOWN_REASON_BAD_CTRL_DIST		19
Packit 857059
#define STL_LINKDOWN_REASON_BAD_CREDIT_ACK		20
Packit 857059
#define STL_LINKDOWN_REASON_UNSUPPORTED_VL_MARKER 21
Packit 857059
#define STL_LINKDOWN_REASON_BAD_PREEMPT			22
Packit 857059
#define STL_LINKDOWN_REASON_BAD_CONTROL_FLIT	23
Packit 857059
#define STL_LINKDOWN_REASON_EXCEED_MULTICAST_LIMIT	24
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_24		25
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_25		26
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_26		27
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_27		28
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_28		29
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_29		30
Packit 857059
#define STL_LINKDOWN_REASON_RCV_ERROR_30		31
Packit 857059
#define STL_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN 32
Packit 857059
/* the next two correspond to locally initiated intentional link down */
Packit 857059
#define STL_LINKDOWN_REASON_UNKNOWN				33
Packit 857059
			/* code 33 is used for locally initiated link downs which don't */
Packit 857059
			/* match any of these reason code */
Packit 857059
/* reserved 34 */
Packit 857059
#define STL_LINKDOWN_REASON_REBOOT				35 /* reboot or device reset */
Packit 857059
#define STL_LINKDOWN_REASON_NEIGHBOR_UNKNOWN	36
Packit 857059
			/* This indicates the link down was not locally initiated */
Packit 857059
			/* but no LinkGoingDown idle flit was received */
Packit 857059
			/* See Section 6.3.11.1.2, "PlannedDownInform Substate" */
Packit 857059
/* reserved 37 - 38 */
Packit 857059
/*These correspond to locally initiated intentional link down */
Packit 857059
#define STL_LINKDOWN_REASON_FM_BOUNCE			39	/* FM initiated bounce */
Packit 857059
													/* by transitioning from linkup to Polling */
Packit 857059
#define STL_LINKDOWN_REASON_SPEED_POLICY		40 /* link outside speed policy */
Packit 857059
#define STL_LINKDOWN_REASON_WIDTH_POLICY		41 /* link downgrade outside */
Packit 857059
													/* LinkWidthDowngrade.Enabled policy */
Packit 857059
/* reserved 42-47 */
Packit 857059
/* these correspond to locally initiated link down via transition to Offline or Disabled */
Packit 857059
/* See Section 6.6.2, “Offline/Disabled Reasons”, Table 6-38*/
Packit 857059
/* All values in that section are provided for here, although in practice a few */
Packit 857059
/* such as 49 (Disconnected) represent links which can never reach LinkUp and hence */
Packit 857059
/* could not have a transition to LinkDown */
Packit 857059
/* reserved 48 */
Packit 857059
#define STL_LINKDOWN_REASON_DISCONNECTED		49
Packit 857059
#define STL_LINKDOWN_REASON_LOCAL_MEDIA_NOT_INSTALLED 50
Packit 857059
#define STL_LINKDOWN_REASON_NOT_INSTALLED		51
Packit 857059
#define STL_LINKDOWN_REASON_CHASSIS_CONFIG		52
Packit 857059
/* reserved 53 */
Packit 857059
#define STL_LINKDOWN_REASON_END_TO_END_NOT_INSTALLED 54
Packit 857059
/* reserved 55 */
Packit 857059
#define STL_LINKDOWN_REASON_POWER_POLICY		56
Packit 857059
#define STL_LINKDOWN_REASON_LINKSPEED_POLICY	57
Packit 857059
#define STL_LINKDOWN_REASON_LINKWIDTH_POLICY	58
Packit 857059
/* reserved 59 */
Packit 857059
#define STL_LINKDOWN_REASON_SWITCH_MGMT			60
Packit 857059
#define STL_LINKDOWN_REASON_SMA_DISABLED		61
Packit 857059
/* reserved 62 */
Packit 857059
#define STL_LINKDOWN_REASON_TRANSIENT			63
Packit 857059
/* reserved 64-255 */
Packit 857059
Packit 857059
Packit 857059
/* STL PORT TYPE values imply cable info availabilty and format */
Packit 857059
#define STL_PORT_TYPE_UNKNOWN		0
Packit 857059
#define STL_PORT_TYPE_DISCONNECTED		1	/* the port is not currently usable � CableInfo not available */
Packit 857059
#define STL_PORT_TYPE_FIXED				2	/* A fixed backplane port in a director class switch � All STL ASICS */
Packit 857059
#define STL_PORT_TYPE_VARIABLE			3	/* A backplane port in a blade system � possibly mixed configuration */
Packit 857059
#define STL_PORT_TYPE_STANDARD			4	/* implies a SFF-8636 defined format for CableInfo (QSFP) */
Packit 857059
#define STL_PORT_TYPE_SI_PHOTONICS		5	/* A silicon photonics module � 
Packit 857059
											 * implies TBD defined format for CableInfo as defined by Intel SFO group */
Packit 857059
/* 6 - 15 Reserved */
Packit 857059
Packit 857059
/* STL NEIGHBOR NODE TYPE indicate whether the neighbor is an HFI or 
Packit 857059
 * a switch. */
Packit 857059
#define STL_NEIGH_NODE_TYPE_HFI		0	/* Gen 1 HFIs are considered "untrusted" */
Packit 857059
#define STL_NEIGH_NODE_TYPE_SW		1	/* Gen 1 Switches are considered "trusted" */
Packit 857059
/* Values 2 & 3 are reserved in Gen1. */
Packit 857059
Packit 857059
typedef union {
Packit 857059
	uint32  AsReg32;
Packit 857059
	struct { IB_BITFIELD8( uint32,	/* Port states */
Packit 857059
		Reserved:					9,
Packit 857059
		LEDEnabled:					1, 	/* RO/HS-- Set to 1 if the port LED is active. */
Packit 857059
		IsSMConfigurationStarted: 	1,  /* RO/HS-E - POD/LUD: 0 */
Packit 857059
		NeighborNormal:				1,	/* RO/HS-- */
Packit 857059
										/* POD/LUD: 0 */
Packit 857059
		OfflineDisabledReason:		4,	/* RO/HS-E Reason for Offline (see STL_OFFDIS_REASON_XXX) */
Packit 857059
		Reserved2:					8,	
Packit 857059
		PortPhysicalState:			4,	/* RW/HS-E Port Physical State (see STL_PORT_PHYS_XXX) */
Packit 857059
		PortState:					4 )	/* RW/HS-E Port State (see STL_PORT_XXX) */
Packit 857059
	} s;
Packit 857059
} STL_PORT_STATES;
Packit 857059
Packit 857059
typedef union {
Packit 857059
	uint8   AsReg8;
Packit 857059
	struct { IB_BITFIELD2( uint8,	/* RW/HS-E Neighbor MTU values per VL */
Packit 857059
									/* LUD: 2048 MTU for STL VL15 */
Packit 857059
				VL0_to_MTU:		4,
Packit 857059
				VL1_to_MTU:		4 )
Packit 857059
	} s;
Packit 857059
} STL_VL_TO_MTU;
Packit 857059
Packit 857059
#define	STL_VL0_VL31		6
Packit 857059
Packit 857059
/* STL Link speed, continued from IB_LINK_SPEED and indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_LINK_SPEED_NOP		 0		/* LinkSpeed.Enabled: no change */
Packit 857059
										/* LinkSpeeed.Active: link is LinkDown*/
Packit 857059
#define STL_LINK_SPEED_12_5G	 0x0001	/* 12.5 Gbps */
Packit 857059
#define STL_LINK_SPEED_25G		 0x0002	/* 25.78125? Gbps (EDR) */
Packit 857059
Packit 857059
Packit 857059
/* STL Link width, continued from IB_LINK_WIDTH and indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
Packit 857059
Packit 857059
#define		STL_LINK_WIDTH_NOP					 0	/* LinkWidth.Enabled: no changeon set (nop) */
Packit 857059
													/* LinkWidth.Active: link is LinkDown*/
Packit 857059
													/* LinkWidthDowngrade.Supported: unsupported */
Packit 857059
													/* LinkWidthDowngrade.Enable: disabled */
Packit 857059
													/* LinkWidthDowngrade.TxActive: link is LinkDown*/
Packit 857059
													/* LinkWidthDowngrade.RxActive: link is LinkDown */
Packit 857059
#define 	STL_LINK_WIDTH_1X					 0x0001
Packit 857059
#define		STL_LINK_WIDTH_2X					 0x0002
Packit 857059
#define		STL_LINK_WIDTH_3X					 0x0004
Packit 857059
#define 	STL_LINK_WIDTH_4X					 0x0008
Packit 857059
Packit 857059
/* STL Port link mode, indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
#define STL_PORT_LINK_MODE_NOP	0		/* No change */
Packit 857059
/* reserved 1 */
Packit 857059
/* reserved 2 */
Packit 857059
#define STL_PORT_LINK_MODE_STL	4		/* Port mode is STL */
Packit 857059
Packit 857059
/* STL Port link formats, indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
#define STL_PORT_PACKET_FORMAT_NOP	0		/* No change */
Packit 857059
#define STL_PORT_PACKET_FORMAT_8B	1		/* Format 8B */
Packit 857059
#define STL_PORT_PACKET_FORMAT_9B	2		/* Format 9B */
Packit 857059
#define STL_PORT_PACKET_FORMAT_10B	4		/* Format 10B */
Packit 857059
#define STL_PORT_PACKET_FORMAT_16B	8		/* Format 16B */
Packit 857059
Packit 857059
/* STL Port LTP CRC mode, indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
#define STL_PORT_LTP_CRC_MODE_NONE	0	/* No change */
Packit 857059
#define STL_PORT_LTP_CRC_MODE_14	1	/* 14-bit LTP CRC mode (optional) */
Packit 857059
#define STL_PORT_LTP_CRC_MODE_16	2	/* 16-bit LTP CRC mode */
Packit 857059
#define STL_PORT_LTP_CRC_MODE_48	4	/* 48-bit LTP CRC mode (optional) */
Packit 857059
#define STL_PORT_LTP_CRC_MODE_12_16_PER_LANE 8	/* 12/16-bit per lane LTP CRC mode */
Packit 857059
Packit 857059
/* STL Port Flit distance mode, indicated as follows:
Packit 857059
 * values are additive for Supported and Enabled fields
Packit 857059
 */
Packit 857059
#define STL_PORT_FLIT_DISTANCE_MODE_NONE	0	/* No change */
Packit 857059
#define STL_PORT_FLIT_DISTANCE_MODE_1		1	/* STL1 mode */
Packit 857059
#define STL_PORT_FLIT_DISTANCE_MODE_2		2	/* STL2 mode */
Packit 857059
Packit 857059
/* STL VL Scheduling mode, indicated as follows:
Packit 857059
 */
Packit 857059
#define STL_VL_SCHED_MODE_VLARB		0	/* Gen1 VLARB */
Packit 857059
#define STL_VL_SCHED_MODE_AUTOMATIC	2	/* hardcoded, not configurable */
Packit 857059
Packit 857059
/* STL Port Flit preemption limits of unlimited */
Packit 857059
#define STL_PORT_PREEMPTION_LIMIT_NONE		255 /* Unlimited */
Packit 857059
Packit 857059
#define BYTES_PER_LTP 128
Packit 857059
Packit 857059
/* NOTE - first-pass ordering of PortInfo members:
Packit 857059
 *   1  RW members before RO members;
Packit 857059
 *   2  Roughly prioritize RW and RO sections;
Packit 857059
 *   3  No separation of RO and RW members within sub-structures.
Packit 857059
 *
Packit 857059
 *   Attribute Modifier as NNNN NNNN 0000 0000 0000 000A PPPP PPPP
Packit 857059
 *
Packit 857059
 *   N = number of ports
Packit 857059
 *   A = 1 - All ports starting at P
Packit 857059
 *   P = port number
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_LID LID;					/* RW/HSPE H-PE: base LID of this node */
Packit 857059
									/*               POD: 0 */
Packit 857059
									/*         -S--: base LID of neighbor node */
Packit 857059
									/*               POD/LUD: 0 */
Packit 857059
Packit 857059
	uint32  FlowControlMask;		/* RW/-S-- Flow control mask (1 bit per VL) */
Packit 857059
									/* POD/LUD: flow control enabled all VLs except VL15 */
Packit 857059
Packit 857059
	struct {
Packit 857059
		uint8	PreemptCap;		/* RO/HS-E size of Preempting VL Arbitration table */
Packit 857059
						/* only used when VLSchedulingConfig */
Packit 857059
						/* is VL_SCHED_MODE_VLARB, otherwise reserved */
Packit 857059
Packit 857059
		struct { IB_BITFIELD2( uint8,
Packit 857059
			Reserved:		3,
Packit 857059
			Cap:			5 )		/* RO/HS-E Virtual Lanes supported on this port */
Packit 857059
		} s2;
Packit 857059
Packit 857059
		uint16  HighLimit;		/* RW/HS-E Limit of high priority component of */
Packit 857059
						/*  VL Arbitration table */
Packit 857059
						/* only used when VLSchedulingConfig */
Packit 857059
						/* is VL_SCHED_MODE_VLARB, otherwise reserved */
Packit 857059
						/* POD: 0 */
Packit 857059
		uint16  PreemptingLimit;	/* RW/HS-E Limit of preempt component of */
Packit 857059
						/*  VL Arbitration table */
Packit 857059
						/* only used when VLSchedulingConfig */
Packit 857059
						/* is VL_SCHED_MODE_VLARB, otherwise reserved */
Packit 857059
						/* POD: 0 */
Packit 857059
Packit 857059
		union {
Packit 857059
			uint8   ArbitrationHighCap;	/* RO/HS-E VL Arbitration table cap */
Packit 857059
						/* only used when VLSchedulingConfig */
Packit 857059
						/* is VL_SCHED_MODE_VLARB, otherwise reserved */
Packit 857059
		};
Packit 857059
Packit 857059
		uint8   ArbitrationLowCap;	/* RO/HS-E VL Arbitration table cap */
Packit 857059
						/* only used when VLSchedulingConfig */
Packit 857059
						/* is VL_SCHED_MODE_VLARB, otherwise reserved */
Packit 857059
	} VL;
Packit 857059
Packit 857059
	STL_PORT_STATES  PortStates;		/* Port states */
Packit 857059
Packit 857059
	STL_FIELDUNION2(PortPhysConfig,8,
Packit 857059
			Reserved:4,				/* Reserved */
Packit 857059
			PortType:4);            /* RO/HS-- PORT_TYPE */
Packit 857059
						/* Switch port 0 shall report Fixed */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
Packit 857059
	struct { IB_BITFIELD3( uint8,	/* Multicast/Collectives masks */
Packit 857059
		Reserved:			2,
Packit 857059
		CollectiveMask:		3,	/* RW/H--- Num of additional upper 1s in */
Packit 857059
								/* Collective address */
Packit 857059
								/* POD: 1 */
Packit 857059
								/* Reserved in Gen1 */
Packit 857059
		MulticastMask:		3 )	/* RW/H--- Num of upper 1s in Multicast address */
Packit 857059
								/* POD: 4 */
Packit 857059
	} MultiCollectMask;
Packit 857059
Packit 857059
	struct { IB_BITFIELD3( uint8,
Packit 857059
		M_KeyProtectBits:   2,		/* RW/H-PE see mgmt key usage */
Packit 857059
		Reserved:   		2,  	/* reserved, shall be zero */
Packit 857059
		LMC:				4 )		/* RW/HSPE LID mask for multipath support */
Packit 857059
									/*    H---: POD: 0 */
Packit 857059
									/*    --PE: POD/LUD: 0 */
Packit 857059
									/*    -S--: LID mask for Neighbor node */
Packit 857059
									/*      POD/LUD: 0 */
Packit 857059
	} s1;
Packit 857059
Packit 857059
	struct { IB_BITFIELD2( uint8,
Packit 857059
		Reserved:			3,
Packit 857059
		MasterSMSL:			5 )	/* RW/H-PE The adminstrative SL of the master */
Packit 857059
								/* SM that is managing this port */
Packit 857059
	} s2;
Packit 857059
Packit 857059
	struct { IB_BITFIELD5( uint8,
Packit 857059
		LinkInitReason:					4,  /*RW/HSPE POD: 1, see STL_LINKINIT_REASON */
Packit 857059
		PartitionEnforcementInbound:	1,	/* RW/-S-- */
Packit 857059
											/* LUD: 1 neighbor is HFI, 0 else */
Packit 857059
		PartitionEnforcementOutbound:   1,	/* RW/-S-- */
Packit 857059
											/* LUD: 1 neighbor is HFI, 0 else */
Packit 857059
		Reserved20:			1,
Packit 857059
		Reserved21:			1 )	
Packit 857059
	} s3;
Packit 857059
Packit 857059
	struct { IB_BITFIELD2( uint8,
Packit 857059
		Reserved:			3,
Packit 857059
		OperationalVL:		5 )			/* RW/HS-E Virtual Lanes operational this port */
Packit 857059
	} s4;
Packit 857059
Packit 857059
	struct {						/* STL Partial P_Keys */
Packit 857059
		uint16  P_Key_8B;			/* RW/HS-E Implicit 8B P_Key */
Packit 857059
		uint16  P_Key_10B;			/* RW/HS-E Partial upper 10B P_Key */
Packit 857059
									/*  (12 bits, lower 4 bits reserved) */
Packit 857059
	} P_Keys;						/* POD/LUD: 0 */
Packit 857059
Packit 857059
	struct {
Packit 857059
		uint16  M_Key;		/* RW/H-PE */
Packit 857059
		uint16  P_Key;		/* RW/H-PE */
Packit 857059
		uint16  Q_Key;		/* RW/H-PE */
Packit 857059
	} Violations;			/* POD: 0 */
Packit 857059
Packit 857059
	STL_FIELDUNION2(SM_TrapQP, 32,
Packit 857059
		Reserved: 	8,
Packit 857059
		QueuePair:	24 );		/* RW/HS-E SM Trap QP. POD/LUD: 0 */
Packit 857059
Packit 857059
	STL_FIELDUNION2(SA_QP, 32,
Packit 857059
		Reserved:	8,
Packit 857059
		QueuePair:	24 );		/* RW/HS-E SA QP. POD/LUD: 1 */
Packit 857059
Packit 857059
	uint8   NeighborPortNum;	/* RO/HS-- Port number of neighbor node */
Packit 857059
Packit 857059
	uint8   LinkDownReason;		/* RW/HS-E Link Down Reason (see STL_LINKDOWN_REASON_XXX) */
Packit 857059
								/* POD: 0 */
Packit 857059
Packit 857059
	uint8	NeighborLinkDownReason;/* RW/HS-E Neighbor Link Down Reason - STL_LINKDOWN_REASON */
Packit 857059
								/* POD: 0 */
Packit 857059
Packit 857059
	struct { IB_BITFIELD3( uint8,
Packit 857059
		ClientReregister:	1,	/* RW/H-PE POD/LUD: 0 */
Packit 857059
		MulticastPKeyTrapSuppressionEnabled:2,	/* RW/H-PE */
Packit 857059
		Timeout:			5 )	/* RW/H-PE Timer value used for subnet timeout */
Packit 857059
	} Subnet;
Packit 857059
Packit 857059
	struct {					/* Link speed (see STL_LINK_SPEED_XXX) LinkBounce */
Packit 857059
		uint16  Supported;  	/* RO/HS-E Supported link speed */
Packit 857059
		uint16  Enabled;		/* RW/HS-E Enabled link speed POD: = supported */
Packit 857059
		uint16  Active;			/* RO/HS-E Active link speed */
Packit 857059
	} LinkSpeed;
Packit 857059
Packit 857059
	struct {					/* 9(12) of each 16 bits used (see STL_LINK_WIDTH_XXX) */
Packit 857059
								/* LinkBounce */
Packit 857059
		uint16  Supported;		/* RO/HS-E Supported link width */
Packit 857059
		uint16  Enabled;		/* RW/HS-E Enabled link width POD: = supported */
Packit 857059
		uint16  Active;			/* RO/HS-E link width negotiated by LNI*/
Packit 857059
	} LinkWidth;
Packit 857059
Packit 857059
	struct {					/* Downgrade of link on error (see STL_LINK_WIDTH_XXX) */
Packit 857059
		uint16  Supported;		/* RO/HS-E Supported downgraded link width */
Packit 857059
		uint16  Enabled;		/* RW/HS-E Enabled link width downgrade */
Packit 857059
								/* POD/LUD: = supported */
Packit 857059
		uint16  TxActive;		/* RO/HS-E Currently active link width in tx dir */
Packit 857059
		uint16	RxActive;		/* RO/HS-- Currently active link width in rx dir */
Packit 857059
	} LinkWidthDowngrade;
Packit 857059
Packit 857059
	STL_FIELDUNION4(PortLinkMode,16, 	/* STL/Eth Port Link Modes */
Packit 857059
									/* (see STL_PORT_LINK_MODE_XXX) */
Packit 857059
		Reserved:	1,
Packit 857059
		Supported:	5,					/* RO/HS-E Supported port link mode */
Packit 857059
		Enabled:	5,					/* RW/HS-E Enabled port link mode POD: from FW INI */
Packit 857059
		Active:		5 );				/* RO/HS-E Active port link mode */
Packit 857059
Packit 857059
	STL_FIELDUNION4(PortLTPCRCMode, 16,	/* STL Port LTP CRC Modes */
Packit 857059
						/* (see STL_PORT_LTP_CRC_MODE_XXX) */
Packit 857059
		Reserved:   4,
Packit 857059
		Supported:	4,		/* RO/HS-E Supported port LTP mode */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
		Enabled:	4,		/* RW/HS-E Enabled port LTP mode POD: from FW INI */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
		Active:		4 );		/* RO/HS-E Active port LTP mode */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
Packit 857059
	STL_FIELDUNION7(PortMode, 16, 		/* General port modes */
Packit 857059
		Reserved:				9,
Packit 857059
		IsActiveOptimizeEnabled:	1,	/* RW/HS-- Optimized Active handling */
Packit 857059
										/* POD/LUD: 0 */
Packit 857059
		IsPassThroughEnabled:	1,		/* RW/-S-- Pass-Through LUD: 0 */
Packit 857059
		IsVLMarkerEnabled:		1,		/* RW/HS-- VL Marker LUD: 0 */
Packit 857059
		Reserved2:				2,
Packit 857059
		Is16BTrapQueryEnabled:	1,		/* RW/H-PE 16B Traps & SA/PA Queries (else 9B) */
Packit 857059
										/* LUD: 0 */
Packit 857059
		Reserved3:				1 );	/* RW/-S-- SMA Security Checking */
Packit 857059
										/* LUD: 1 */
Packit 857059
Packit 857059
	struct {						/* Packet formats */
Packit 857059
									/* (see STL_PORT_PACKET_FORMAT_XXX) */
Packit 857059
		uint16  Supported;			/* RO/HSPE Supported formats */
Packit 857059
		uint16  Enabled;			/* RW/HSPE Enabled formats */
Packit 857059
	} PortPacketFormats;
Packit 857059
Packit 857059
	struct {						/* Flit control LinkBounce */
Packit 857059
		union {
Packit 857059
			uint16  AsReg16;
Packit 857059
			struct { IB_BITFIELD5( uint16,	/* Flit interleaving */
Packit 857059
				Reserved:			2,
Packit 857059
				DistanceSupported:	2,	/* RO/HS-E Supported Flit distance mode */
Packit 857059
										/* (see STL_PORT_FLIT_DISTANCE_MODE_XXX) */
Packit 857059
				DistanceEnabled:	2,	/* RW/HS-E Enabled Flit distance mode */
Packit 857059
										/* (see STL_PORT_FLIT_DISTANCE_MODE_XXX) */
Packit 857059
										/* LUD: mode1 */
Packit 857059
				MaxNestLevelTxEnabled:		5,	/* RW/HS-E Max nest level enabled Flit Tx */
Packit 857059
												/* LUD: 0 */
Packit 857059
				MaxNestLevelRxSupported:	5 )	/* RO/HS-E Max nest level supported Flit Rx */
Packit 857059
			} s;
Packit 857059
		} Interleave;
Packit 857059
Packit 857059
		struct Preemption_t {				/* Flit preemption */
Packit 857059
			uint16  MinInitial;	/* RW/HS-E Min bytes before preemption Head Flit */
Packit 857059
									/* Range 8 to 10240 bytes */
Packit 857059
			uint16  MinTail;	/* RW/HS-E Min bytes before preemption Tail Flit */
Packit 857059
									/* Range 8 to 10240 bytes */
Packit 857059
			uint8   LargePktLimit;	/* RW/HS-E Size of packet that can be preempted */
Packit 857059
									/* Packet Size >= 512+(512*LargePktLimit) */
Packit 857059
									/* Packet Size Range >=512 to >=8192 bytes */
Packit 857059
			uint8   SmallPktLimit;	/* RW/HS-E Size of packet that can preempt */
Packit 857059
									/* Packet Size <= 32+(32*SmallPktLimit) */
Packit 857059
									/* Packet Size Range <=32 to <=8192 bytes */
Packit 857059
									/* MaxSmallPktLimit sets upper bound allowed */
Packit 857059
			uint8   MaxSmallPktLimit;/* RO/HS-E Max value for SmallPktLimit */
Packit 857059
									/* Packet Size <= 32+(32*MaxSmallPktLimit) */
Packit 857059
									/* Packet Size Range <=32 to <=8192 bytes */
Packit 857059
			uint8   PreemptionLimit;/* RW/HS-E Num bytes of preemption */
Packit 857059
									/* limit = (256*PreemptionLimit) */
Packit 857059
									/* Limit range 0 to 65024, 0xff=unlimited */
Packit 857059
		} Preemption;
Packit 857059
Packit 857059
	} FlitControl;
Packit 857059
Packit 857059
	STL_LID  MaxLID;					/* RW/H---: POD: 0xBFFF */
Packit 857059
Packit 857059
	union _PortErrorAction {
Packit 857059
		uint32  AsReg32;
Packit 857059
		struct { IB_BITFIELD25( uint32,		/* RW/HS-E Port Error Action Mask */
Packit 857059
											/* POD: 0 */
Packit 857059
			ExcessiveBufferOverrun:			1,
Packit 857059
			Reserved:						7,
Packit 857059
			FmConfigErrorExceedMulticastLimit:	1,
Packit 857059
			FmConfigErrorBadControlFlit:	1,
Packit 857059
			FmConfigErrorBadPreempt:		1,
Packit 857059
			FmConfigErrorUnsupportedVLMarker:	1,
Packit 857059
			FmConfigErrorBadCrdtAck:		1,
Packit 857059
			FmConfigErrorBadCtrlDist:		1,
Packit 857059
			FmConfigErrorBadTailDist:		1,
Packit 857059
			FmConfigErrorBadHeadDist:		1,
Packit 857059
			Reserved2:						2,
Packit 857059
			PortRcvErrorBadVLMarker:		1,
Packit 857059
			PortRcvErrorPreemptVL15:		1,
Packit 857059
			PortRcvErrorPreemptError:		1,
Packit 857059
			Reserved3:						1,
Packit 857059
			PortRcvErrorBadMidTail:			1,
Packit 857059
			PortRcvErrorReserved:			1,
Packit 857059
			PortRcvErrorBadSC:				1,
Packit 857059
			PortRcvErrorBadL2:				1,
Packit 857059
			PortRcvErrorBadDLID:			1,
Packit 857059
			PortRcvErrorBadSLID:			1,
Packit 857059
			PortRcvErrorPktLenTooShort:		1,
Packit 857059
			PortRcvErrorPktLenTooLong:		1,
Packit 857059
			PortRcvErrorBadPktLen:			1,
Packit 857059
			Reserved4:						1 )
Packit 857059
		} s;
Packit 857059
	} PortErrorAction;
Packit 857059
Packit 857059
	struct {					/* Pass through mode control */
Packit 857059
		uint8   EgressPort;		/* RW/-S-- Egress port: 0-disable pass through */
Packit 857059
								/* LUD: 0 */
Packit 857059
Packit 857059
		IB_BITFIELD2( uint8,
Packit 857059
		Reserved:	7,
Packit 857059
		DRControl:	1 )			/* RW/-S-- DR: 0-normal process, 1-repeat on egress port */
Packit 857059
								/* LUD: 0 */
Packit 857059
Packit 857059
	} PassThroughControl;
Packit 857059
Packit 857059
	uint16  M_KeyLeasePeriod;   /* RW/H-PE LUD: 0 */
Packit 857059
Packit 857059
	STL_FIELDUNION5(BufferUnits, 32, /* VL bfr & ack unit sizes (bytes) */
Packit 857059
		Reserved:		9,
Packit 857059
		VL15Init:		12,		/* RO/HS-E Initial VL15 units (N) */
Packit 857059
		VL15CreditRate:	5,		/* RW/HS-E VL15 Credit rate (32*2^N) */
Packit 857059
									/* LUD: if neighbor is STL HFI: 18, otherwise 0 */
Packit 857059
		CreditAck:		3,		/* RO/HS-E Credit ack unit (BufferAlloc*2^N) */
Packit 857059
		BufferAlloc:	3 );	/* RO/HS-E Buffer alloc unit (8*2^N) */
Packit 857059
Packit 857059
	uint16  Reserved14;
Packit 857059
	uint8   BundleNextPort;		/* RO/HS-- next logical port in a bundled connector */
Packit 857059
	uint8   BundleLane;			/* RO/HS-- first lane in connector associated with this port */
Packit 857059
Packit 857059
	STL_LID MasterSMLID;		/* RW/H-PE The base LID of the master SM that is */
Packit 857059
								/* managing this port */
Packit 857059
								/* POD/LUD: 0 */
Packit 857059
Packit 857059
	uint64  M_Key;  			/* RW/H-PE The 8-byte management key */
Packit 857059
								/* POD/LUD: 0 */
Packit 857059
Packit 857059
	uint64  SubnetPrefix;   	/* RW/H-PE Subnet prefix for this port */
Packit 857059
								/* Set to default value if no */
Packit 857059
								/* other subnet interaction */
Packit 857059
								/* POD: 0xf8000000:00000000 */
Packit 857059
Packit 857059
	STL_VL_TO_MTU  NeighborMTU[STL_MAX_VLS / 2];	/* RW/HS-E Neighbor MTU values per VL */
Packit 857059
													/* VL15 LUD: 2048 STL mode */
Packit 857059
Packit 857059
	struct XmitQ_s { IB_BITFIELD2( uint8,	/* Transmitter Queueing Controls */
Packit 857059
									/* per VL */
Packit 857059
		VLStallCount:   3,			/* RW/-S-- Applies to switches only */
Packit 857059
									/* LUD: 7 */
Packit 857059
		HOQLife:		5 )			/* RW/-S-- Applies to routers & switches only */
Packit 857059
									/* LUD: infinite */
Packit 857059
	} XmitQ[STL_MAX_VLS];
Packit 857059
Packit 857059
/* END OF RW SECTION */
Packit 857059
Packit 857059
/* BEGINNING OF RO SECTION */
Packit 857059
	STL_IPV6_IP_ADDR  IPAddrIPV6;	/* RO/H-PE IP Address - IPV6 */
Packit 857059
Packit 857059
	STL_IPV4_IP_ADDR  IPAddrIPV4;	/* RO/H-PE IP Address - IPV4 */
Packit 857059
Packit 857059
	uint32  Reserved26;
Packit 857059
	uint32  Reserved27;
Packit 857059
Packit 857059
	uint32 Reserved28;
Packit 857059
Packit 857059
	uint64  NeighborNodeGUID;   /* RO/-S-E GUID of neighbor connected to this port */
Packit 857059
Packit 857059
	STL_CAPABILITY_MASK  CapabilityMask;	/* RO/H-PE Capability Mask */
Packit 857059
Packit 857059
	uint16  Reserved20;
Packit 857059
Packit 857059
	STL_CAPABILITY_MASK3  CapabilityMask3;	/* RO/H-PE Capability Mask 3 */
Packit 857059
Packit 857059
	uint32	Reserved23;
Packit 857059
Packit 857059
	uint16  OverallBufferSpace;		/* RO/HS-E Overall dedicated + shared space */
Packit 857059
Packit 857059
	struct {				/* most significant 8 bits of Replay depths */
Packit 857059
		uint8   BufferDepthH;		/* RO/HS-- Replay buffer depth MSB */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
		uint8   WireDepthH;		/* RO/HS-- Replay wire depth MSB */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
	} ReplayDepthH;
Packit 857059
Packit 857059
	STL_FIELDUNION3(DiagCode, 16, 	/* RO/H-PE Diagnostic code, Refer Node Diagnostics */
Packit 857059
		UniversalDiagCode:		4,
Packit 857059
		VendorDiagCode:			11,
Packit 857059
		Chain:			        1 );
Packit 857059
Packit 857059
	struct {				/* least significant 8 bits of Replay depths */
Packit 857059
		uint8   BufferDepth;		/* RO/HS-E Replay buffer depth LSB */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
		uint8   WireDepth;		/* RO/HS-E Replay wire depth LSB */
Packit 857059
						/* reserved when PortLinkMode.Active is not STL */
Packit 857059
	} ReplayDepth;
Packit 857059
Packit 857059
	struct { IB_BITFIELD4( uint8,	/* RO/HS-E Port modes based on neighbor */
Packit 857059
		Reserved:				4,
Packit 857059
		MgmtAllowed:			1,	/* RO/H--- neighbor allows this node to be mgmt */
Packit 857059
									/* Switch: mgmt is allowed for neighbor */
Packit 857059
									/* EP0: mgmt is allowed for port */
Packit 857059
		NeighborFWAuthenBypass:	1,	/* RO/-S-E 0=Authenticated, 1=Not Authenticated */
Packit 857059
		NeighborNodeType:		2 )	/* RO/-S-E 0=HFI (not trusted), 1=Switch (trusted) */
Packit 857059
	} PortNeighborMode;
Packit 857059
Packit 857059
	struct { IB_BITFIELD2( uint8,
Packit 857059
		Reserved20:		4,			
Packit 857059
		Cap:			4 )			/* RO/HS-E Max MTU supported by this port */
Packit 857059
	} MTU;
Packit 857059
Packit 857059
	struct { IB_BITFIELD2( uint8,
Packit 857059
		Reserved:	3,
Packit 857059
		TimeValue:	5 )				/* RO/H-PE */
Packit 857059
	} Resp;
Packit 857059
	
Packit 857059
	uint8   LocalPortNum;			/* RO/HSPE The link port number this SMP came on in */
Packit 857059
Packit 857059
	uint8   Reserved25;
Packit 857059
	uint8	Reserved24;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PORT_INFO;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * PartitionTable
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN PPPP PPPP 0000 0BBB BBBB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        P:   Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The (max) PartitionTable is 2**16 entries (P_Keys) long, 16 bits wide.
Packit 857059
 * Each PartitionTable block is 32 entries long, 16 bits wide.  The Partition
Packit 857059
 * Table is a linear array of blocks[2**11].
Packit 857059
 */
Packit 857059
Packit 857059
#define NUM_PKEY_ELEMENTS_BLOCK		(32)	/* Num elements per block; currently same as IB */
Packit 857059
#define MAX_PKEY_BLOCK_NUM			0x7FF
Packit 857059
#define PKEY_BLOCK_NUM_MASK			0x7FF
Packit 857059
#define STL_DEFAULT_PKEY		    0x7FFF
Packit 857059
#define STL_DEFAULT_APP_PKEY		0x8001
Packit 857059
#define STL_DEFAULT_FM_PKEY         0xFFFF
Packit 857059
#define STL_DEFAULT_CLIENT_PKEY		0x7FFF
Packit 857059
#define STL_DEFAULT_APP_PKEY_IDX	0
Packit 857059
#define STL_DEFAULT_CLIENT_PKEY_IDX	1
Packit 857059
#define STL_DEFAULT_FM_PKEY_IDX     2
Packit 857059
#define STL_MIN_PKEY_COUNT          3
Packit 857059
Packit 857059
typedef union {
Packit 857059
	uint16  AsReg16;
Packit 857059
	struct { IB_BITFIELD2( uint16,
Packit 857059
		MembershipType:		1,				/* 0=Limited, 1=Full */
Packit 857059
		P_KeyBase:			15 )			/* Base value of the P_Key that */
Packit 857059
											/*  the endnode will use to check */
Packit 857059
											/*  against incoming packets */
Packit 857059
	} s;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PKEY_ELEMENT;
Packit 857059
Packit 857059
#define STL_NUM_PKEY_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_PARTITION_TABLE)))
Packit 857059
#define STL_NUM_PKEY_BLOCKS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_PARTITION_TABLE)))
Packit 857059
Packit 857059
typedef struct {
Packit 857059
Packit 857059
	STL_PKEY_ELEMENT PartitionTableBlock[NUM_PKEY_ELEMENTS_BLOCK];	/* RW List of P_Key Block elements */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PARTITION_TABLE;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * SL_TO_SC Mapping table
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 *
Packit 857059
 * This Attribute is used only for HFIs and switch port 0
Packit 857059
 *
Packit 857059
 * Each block contains 32 bytes of SL->SC data, 1 byte per SL.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_SC  SLSCMap[STL_MAX_SLS];	/* RW/HSPE */
Packit 857059
									/*    H---: POD: SLn_to_SCn (1-to-1) */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SLSCMAP;
Packit 857059
Packit 857059
/*
Packit 857059
 * SC_TO_SC Mapping table
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 00AB IIII IIII EEEE EEEE
Packit 857059
 *                        N:   Number of blocks (egress ports (B=0),
Packit 857059
 *								 but if B=1 then ingress ports)
Packit 857059
 *                        A=1: All ingress ports starting at I (Set only; excludes port 0)
Packit 857059
 *                        B=1: All egress ports starting at E (Set only; excludes port 0)
Packit 857059
 *                        I:   Ingress port number (0 - reserved, switches only)
Packit 857059
 *                        E:   Egress port number (0 - reserved, switches only)
Packit 857059
 *
Packit 857059
 * This attribute is not applicable to HFIs.
Packit 857059
 *
Packit 857059
 * Each block contains 32 bytes of SC->SC data, 1 byte per SC.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_SC  SCSCMap[STL_MAX_SCS];	/* RW/HSPE */
Packit 857059
									/*    -SPE: POD: SCn_to_SCn (1-to-1) */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SCSCMAP;
Packit 857059
Packit 857059
#define STL_NUM_SCSC_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_SCSCMAP)))
Packit 857059
#define STL_NUM_SCSC_BLOCKS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_SCSCMAP)))
Packit 857059
Packit 857059
/*
Packit 857059
 * SC_TO_SC MultiSet
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 0000 0000 0000
Packit 857059
 *						N:	Number of Multi-Set Blocks
Packit 857059
 *
Packit 857059
 * This attribute is not applicable to HFIs.
Packit 857059
 *
Packit 857059
 * Each block contains 32 bytes of SC->SC data, 1 byte per SC and ingress/egress port masks
Packit 857059
 */
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_PORTMASK    IngressPortMask[STL_MAX_PORTMASK];
Packit 857059
	STL_PORTMASK    EgressPortMask[STL_MAX_PORTMASK];
Packit 857059
	STL_SCSCMAP		SCSCMap;				/* RW/HSPE */
Packit 857059
											/*    -SPE: POD: SCn_to_SCn (1-to-1) */
Packit 857059
} PACK_SUFFIX STL_SCSC_MULTISET;
Packit 857059
Packit 857059
Packit 857059
#define STL_NUM_SCSC_MULTI_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_SCSC_MULTISET)))
Packit 857059
#define STL_NUM_SCSC_MULTI_BLOCKS_PER_LRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_SCSC_MULTISET)))
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * SC_TO_SL Mapping table
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 *
Packit 857059
 * This Attribute is used only for HFIs and switch port 0
Packit 857059
 *
Packit 857059
 * Each block contains 32 bytes of SC->SL data, 1 byte per SC.
Packit 857059
 */
Packit 857059
typedef struct {					/* RW POD: SCn_to_SLn (1-to-1) */
Packit 857059
	STL_SL  SCSLMap[STL_MAX_SCS];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SCSLMAP;
Packit 857059
Packit 857059
/*
Packit 857059
 * SC_TO_VL Mapping table
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 000Y 000A PPPP PPPP
Packit 857059
 *                        N:   Number of blocks (ports)
Packit 857059
 *                        Y=1: Async update (Set of SC-to-VLt only with link state Armed or Active)
Packit 857059
 *                        A=1: All ports starting at P (Set only)
Packit 857059
 *                        P:   Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 *
Packit 857059
 * Each block contains 32 bytes of SC->VL data, 1 byte per SC.
Packit 857059
 *
Packit 857059
 * NOTE: this attribute applies for all SC-to-VL tables (SC-to-VLr, SC-to-VLt,
Packit 857059
 * SC-to-VLnt); Port is ingress port or egress port as applicable.
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_VL  SCVLMap[STL_MAX_SCS];   /* RW/HSPE POD: SCn_to_VLn (1-to-1) */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SCVLMAP;
Packit 857059
Packit 857059
#define STL_NUM_SCVL_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_SCVLMAP)))
Packit 857059
#define STL_NUM_SCVL_BLOCKS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_SCVLMAP))) 
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * VL Arbitration Table (aka VL Arbitration Table 2)
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN SSSS SSSS 0000 000A PPPP PPPP
Packit 857059
 *                        N:   Number of ports
Packit 857059
 *                        S:   Section of Table as:
Packit 857059
 *                             0: Arbitration Low Elements
Packit 857059
 *                             1: Arbitration High Elements
Packit 857059
 *                             2: Preemption Elements
Packit 857059
 *                             3: Preemption Matrix
Packit 857059
 *                             4-255: Reserved
Packit 857059
 *                        A=1: All ports starting at P (Set only)
Packit 857059
 *                        P:   Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_MAX_LOW_CAP             128 /* Also applies to High but not Preempt */
Packit 857059
#define STL_MAX_PREEMPT_CAP         32  /* MAX Preempt table size is 32 */
Packit 857059
#define STL_VLARB_LOW_ELEMENTS       0
Packit 857059
#define STL_VLARB_HIGH_ELEMENTS      1
Packit 857059
#define STL_VLARB_PREEMPT_ELEMENTS   2
Packit 857059
#define STL_VLARB_PREEMPT_MATRIX     3
Packit 857059
#define STL_VLARB_NUM_SECTIONS		 4
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	struct { IB_BITFIELD2( uint8,
Packit 857059
		Reserved:		3,
Packit 857059
		VL:				5 )		/* RW */
Packit 857059
	} s;
Packit 857059
Packit 857059
	uint8   Weight;				/* RW */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_VLARB_TABLE_ELEMENT;
Packit 857059
Packit 857059
#define VLARB_TABLE_LENGTH 128
Packit 857059
typedef union {
Packit 857059
	STL_VLARB_TABLE_ELEMENT  Elements[VLARB_TABLE_LENGTH]; /* RW */
Packit 857059
	uint32                   Matrix[STL_MAX_VLS];	/* RW */
Packit 857059
													/* POD: 0 */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_VLARB_TABLE;
Packit 857059
Packit 857059
#define STL_NUM_VLARB_PORTS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_VLARB_TABLE)))
Packit 857059
#define STL_NUM_VLARB_PORTS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_VLARB_TABLE))) 
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Linear Forwarding Table (LFT)
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0ABB BBBB BBBB BBBB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        A=1: All blocks starting at B (Set only)
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The (max) LFT is 2**24 entries (LIDs) long (STL_LID_24), 8 bits wide.
Packit 857059
 * Each LFT block is 64 entries long, 8 bits wide.  The LFT is a
Packit 857059
 * linear array of blocks[2**18].
Packit 857059
 */
Packit 857059
Packit 857059
#define MAX_LFT_ELEMENTS_BLOCK	(64)	/* Max elements per block; currently same as IB */
Packit 857059
#define MAX_LFT_BLOCK_NUM	0x3FFFF
Packit 857059
Packit 857059
#define STL_NUM_LFT_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR/MAX_LFT_ELEMENTS_BLOCK))
Packit 857059
typedef struct {
Packit 857059
	PORT  LftBlock[MAX_LFT_ELEMENTS_BLOCK];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_LINEAR_FORWARDING_TABLE;
Packit 857059
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Multicast Forwarding Table (MFT)
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN PP0A BBBB BBBB BBBB BBBB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        P:   Position number
Packit 857059
 *                        A=1: All blocks starting at B (Set only)
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The (max) MFT is 2**23 entries (LIDs) long (STL_LID_24 / 2), 256 bits wide.
Packit 857059
 * Each MFT block is 8 entries long, 64 bits wide.  The MFT is a
Packit 857059
 * 2-dimensional array of blocks[2**20][4].
Packit 857059
 */
Packit 857059
Packit 857059
Packit 857059
#define STL_NUM_MFT_ELEMENTS_BLOCK	8	/* Num elements per block */
Packit 857059
#define STL_NUM_MFT_POSITIONS_MASK	4	/* Num positions per 256-bit port mask */
Packit 857059
#define STL_MAX_MFT_BLOCK_NUM		0xFFFFF
Packit 857059
#define STL_PORT_MASK_WIDTH			64		/* Width of STL_PORTMASK in bits */
Packit 857059
#define STL_MAX_PORTS				255
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_PORTMASK  MftBlock[STL_NUM_MFT_ELEMENTS_BLOCK];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_MULTICAST_FORWARDING_TABLE;
Packit 857059
Packit 857059
#define STL_NUM_MFT_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR/sizeof(STL_MULTICAST_FORWARDING_TABLE)))
Packit 857059
Packit 857059
/*
Packit 857059
 * SMInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	uint64  PortGUID;   		/* RO This SM's perception of the PortGUID */
Packit 857059
								/* of the master SM */
Packit 857059
	uint64  SM_Key; 			/* RO Key of this SM. This is shown as 0 unless */
Packit 857059
								/* the requesting SM is proven to be the */
Packit 857059
								/* master, or the requester is otherwise */
Packit 857059
								/* authenticated */
Packit 857059
	uint32  ActCount;   		/* RO Counter that increments each time the SM */
Packit 857059
								/* issues a SMP or performs other management */
Packit 857059
								/* activities. Used as a 'heartbeat' indicator */
Packit 857059
								/* by standby SMs */
Packit 857059
	uint32  ElapsedTime;   		/* RO Time (in seconds): time Master SM has been */
Packit 857059
								/* Master, or time since Standby SM was last */
Packit 857059
								/* updated by Master */
Packit 857059
	union {
Packit 857059
		uint16  AsReg16;
Packit 857059
		struct { IB_BITFIELD4( uint16,
Packit 857059
			Priority:			4, 	/* RO Administratively assigned priority for this */
Packit 857059
									/* SM. Can be reset by master SM */
Packit 857059
			ElevatedPriority:	4,	/* RO This SM's elevated priority */
Packit 857059
			InitialPriority:	4,	/* RO This SM's initial priority */
Packit 857059
			SMStateCurrent:		4 )	/* RO This SM's current state (see SM_STATE) */
Packit 857059
		} s;
Packit 857059
	} u;
Packit 857059
		
Packit 857059
} PACK_SUFFIX STL_SM_INFO;
Packit 857059
Packit 857059
Packit 857059
/* 
Packit 857059
 * LEDInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 000A PPPP PPPP
Packit 857059
 *                        N:   Number of ports
Packit 857059
 *                        A=1: All ports starting at P (Set only)
Packit 857059
 *                        P:   Port number (must be 0 for HFI)
Packit 857059
 */
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	union { 
Packit 857059
		uint32 AsReg32;
Packit 857059
		struct { IB_BITFIELD2( uint32,
Packit 857059
			LedMask: 	1,			/* RW POD: 0 */
Packit 857059
			Reserved:	31 );
Packit 857059
		} s;
Packit 857059
	} u;
Packit 857059
	uint32 Reserved2;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_LED_INFO;
Packit 857059
Packit 857059
/*
Packit 857059
 * CableInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0AAA AAAA AAAA ALLL LLL0 0000 PPPP PPPP
Packit 857059
 *                        A: Starting address of cable data
Packit 857059
 *                        L: Length (bytes) of cable data - 1
Packit 857059
 *                           (L+1 bytes of data read)  
Packit 857059
 *                        P: Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 *
Packit 857059
 * NOTE: Cable Info is mapped onto a linear 4096-byte address space (0-4095).
Packit 857059
 * Cable Info can only be read within 128-byte pages; that is, a single
Packit 857059
 * read cannot cross a 128-byte (page) boundary.
Packit 857059
 */
Packit 857059
#define STL_CABLE_INFO_DATA_SIZE 	64
Packit 857059
typedef struct {
Packit 857059
	uint8   Data[STL_CABLE_INFO_DATA_SIZE];			/* RO Cable Info data (up to 64 bytes) */
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO;
Packit 857059
Packit 857059
#define STL_CABLE_INFO_PAGESZ 	128
Packit 857059
#define STL_CABLE_INFO_MAXADDR 	4095
Packit 857059
#define STL_CABLE_INFO_MAXLEN 	63
Packit 857059
Packit 857059
// Note: Even though the entire cable memory is available to be read,
Packit 857059
//  tools only interpret one page of cable info memory which contains
Packit 857059
//  relevant data.
Packit 857059
Packit 857059
// These are for PortType Standard, uses of these can assume START and END
Packit 857059
// will be on and STL_CABLE_INFO_DATA_SIZE boundary
Packit 857059
#define STL_CIB_STD_LOW_PAGE_ADDR		0
Packit 857059
#define STL_CIB_STD_HIGH_PAGE_ADDR		128
Packit 857059
#define STL_CIB_STD_END_ADDR		(STL_CIB_STD_HIGH_PAGE_ADDR+STL_CABLE_INFO_PAGESZ-1)
Packit 857059
#define STL_CIB_STD_LEN				(STL_CABLE_INFO_PAGESZ)
Packit 857059
Packit 857059
Packit 857059
#define STL_CIB_STD_MAX_STRING			16		// Max ASCII string in STD CableInfo field
Packit 857059
Packit 857059
// Byte 0 and byte 128: identifier (SFF-8024)
Packit 857059
#define STL_CIB_STD_QSFP				0xC		// QSFP transceiver identifier value
Packit 857059
#define STL_CIB_STD_QSFP_PLUS			0xD		// QSFP+ transceiver identifier value
Packit 857059
#define STL_CIB_STD_QSFP_28				0x11	// QSFP28 transceiver identifier value
Packit 857059
#define STL_CIB_STD_QSFP_DD				0x18	// QSFP-DD transceiver identifier value
Packit 857059
Packit 857059
// Byte 129: pwr_class_low, pwr_class_high
Packit 857059
#define STL_CIB_STD_PWRLOW_1_5			0		// Pwr class low class 1 (1.5 W)
Packit 857059
#define STL_CIB_STD_PWRLOW_2_0			1		// Pwr class low class 2 (2.0 W)
Packit 857059
#define STL_CIB_STD_PWRLOW_2_5			2		// Pwr class low class 3 (2.5 W)
Packit 857059
#define STL_CIB_STD_PWRLOW_3_5			3		// Pwr class low class 4 (3.5 W)
Packit 857059
#define STL_CIB_STD_PWRHIGH_LEGACY		0		// Pwr class high legacy settings
Packit 857059
#define STL_CIB_STD_PWRHIGH_4_0			1		// Pwr class high class 5 (4.0 W)
Packit 857059
#define STL_CIB_STD_PWRHIGH_4_5			2		// Pwr class high class 6 (4.5 W)
Packit 857059
#define STL_CIB_STD_PWRHIGH_5_0			3		// Pwr class high class 7 (5.0 W)
Packit 857059
Packit 857059
// Byte 130: connector
Packit 857059
#define STL_CIB_STD_CONNECTOR_MPO1x12	0x0C	// Connector type is MPO 1x12
Packit 857059
#define STL_CIB_STD_CONNECTOR_MPO2x16	0x0D	// Connector type is MPO 2x16
Packit 857059
#define STL_CIB_STD_CONNECTOR_NO_SEP	0x23	// Connector type is non-separable
Packit 857059
#define STL_CIB_STD_CONNECTOR_MXC2x16	0x24	// Connector type is MXC 2x16
Packit 857059
Packit 857059
// Byte 140: bit_rate_low
Packit 857059
#define STL_CIB_STD_RATELOW_NONE		0		// Nominal bit rate low not specified 
Packit 857059
#define STL_CIB_STD_RATELOW_EXCEED		0xFF	// Nominal bit rate low > 25.4 Gbps
Packit 857059
Packit 857059
// Byte 147: dev_tech.xmit_tech
Packit 857059
#define STL_CIB_STD_TXTECH_850_VCSEL		0x0	// Tx tech 850 nm VCSEL
Packit 857059
#define STL_CIB_STD_TXTECH_1310_VCSEL		0x1	// Tx tech 1310 nm VCSEL
Packit 857059
#define STL_CIB_STD_TXTECH_1550_VCSEL		0x2	// Tx tech 1550 nm VCSEL
Packit 857059
#define STL_CIB_STD_TXTECH_1310_FP			0x3	// Tx tech 1310 nm FP
Packit 857059
#define STL_CIB_STD_TXTECH_1310_DFB			0x4	// Tx tech 1310 nm DFB
Packit 857059
#define STL_CIB_STD_TXTECH_1550_DFB			0x5	// Tx tech 1550 nm DFB
Packit 857059
#define STL_CIB_STD_TXTECH_1310_EML			0x6	// Tx tech 1310 nm EML
Packit 857059
#define STL_CIB_STD_TXTECH_1550_EML			0x7	// Tx tech 1550 nm EML
Packit 857059
#define STL_CIB_STD_TXTECH_OTHER			0x8	// Tx tech Other/Undefined
Packit 857059
#define STL_CIB_STD_TXTECH_1490_DFB			0x9	// Tx tech 1490 nm DFB
Packit 857059
#define STL_CIB_STD_TXTECH_CU_UNEQ			0xA	// Tx tech Cu unequalized
Packit 857059
#define STL_CIB_STD_TXTECH_CU_PASSIVEQ		0xB	// Tx tech Cu passive equalized
Packit 857059
#define STL_CIB_STD_TXTECH_CU_NFELIMACTEQ	0xC	// Tx tech Cu near & far end limiting active equalizers
Packit 857059
#define STL_CIB_STD_TXTECH_CU_FELIMACTEQ	0xD	// Tx tech Cu far end limiting active equalizers
Packit 857059
#define STL_CIB_STD_TXTECH_CU_NELIMACTEQ	0xE	// Tx tech Cu near end limiting active equalizers
Packit 857059
#define STL_CIB_STD_TXTECH_CU_LINACTEQ		0xF	// Tx tech Cu linear active equalizers
Packit 857059
#define STL_CIB_STD_TXTECH_MAX				0xF	// Tx tech max value
Packit 857059
Packit 857059
// Byte 250: opa_cert_cable
Packit 857059
#define STL_CIB_STD_OPA_CERTIFIED_CABLE		0xAB	// OPA certified cable
Packit 857059
Packit 857059
// Byte 252: opa_cert_data_rate
Packit 857059
#define STL_CIB_STD_OPACERTRATE_4X25G		0x02	// Certified data rate 4x25G
Packit 857059
Packit 857059
// The following structure represents CableInfo page 0 Lower in memory.
Packit 857059
// (based on Rev 2.9.2 SFF-8636 memory map)
Packit 857059
typedef struct {
Packit 857059
	uint8	ident;					// 0: Identifier
Packit 857059
	uint8	status[2];				// 1-2: Status
Packit 857059
	uint8	interruptFlags[19];		// 3-21: Interrupt Flags
Packit 857059
	uint16	temperature; 			// 22-23: Module temperature
Packit 857059
	uint8	moduleMonitors1[2];		// 24-25: Module level Monitors
Packit 857059
	uint16	voltage; 				// 26-27: Supply Voltage
Packit 857059
	uint8	moduleMonitors2[6];		// 28-33: Module level Monitors
Packit 857059
	uint16	rxOpticalPwr1;			// 34-35: rx Optical Power 1
Packit 857059
	uint16	rxOpticalPwr2;			// 36-37: rx Optical Power 2
Packit 857059
	uint16	rxOpticalPwr3;			// 38-39: rx Optical Power 3
Packit 857059
	uint16	rxOpticalPwr4;			// 40-41: rx Optical Power 4
Packit 857059
	uint8	laneMonitors1[8];		// 42-49: Lane Specific Monitors
Packit 857059
	uint16	txOpticalPwr1;			// 50-51: tx Optical Power 1
Packit 857059
	uint16	txOpticalPwr2;			// 52-53: tx Optical Power 2
Packit 857059
	uint16	txOpticalPwr3;			// 54-55: tx Optical Power 3
Packit 857059
	uint16	txOpticalPwr4;			// 56-57: tx Optical Power 4
Packit 857059
	uint8	laneMonitors2[24];		// 34-81: Lane Specific Monitors
Packit 857059
	uint8	reserved1[4];			// 82-85: Reserved
Packit 857059
	uint8	controlBytes[14];		// 86-99: Control bytes
Packit 857059
	uint8	laneInterruptMasks[3];	// 100-102: Lane specific Indicator Interrupt Masks
Packit 857059
	uint8	moduleInterruptMasks[4];// 103-106: Module level interrupt masks
Packit 857059
	uint8	moduleProperties1[4];	// 107-110: Module Properties
Packit 857059
	uint8	assignedPCI[2];			// 111-112: Module type advertising code
Packit 857059
	uint8	moduleProperties2[3];	// 113-115: Module Properties
Packit 857059
	uint8	secondaryExtSpecCode;	// 116: Secondary Extended Spec Compliance Code
Packit 857059
	uint8	reserved2[2];			// 117-118: Reserved
Packit 857059
	uint8	passwordChangeArea[4];	// 119-122: Password Change Area
Packit 857059
	uint8	passwordEntryArea[4];	// 123-126: Password Entry Area
Packit 857059
	uint8	pageSelectType;			// 127: Page Select Type
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO_LOW0_STD;
Packit 857059
Packit 857059
// The following structure represents STD CableInfo page 0 upper in memory.
Packit 857059
// (based on SFF-8636 Rev 2-5)
Packit 857059
typedef struct {
Packit 857059
	// Page 0 upper, bytes 128-255
Packit 857059
	uint8	ident;					// 128: Identifier
Packit 857059
	union {
Packit 857059
		uint8	AsReg8;
Packit 857059
		struct { IB_BITFIELD5( uint8,	// 129: Extended identifier:
Packit 857059
			pwr_class_low:	2,			//		Power class low
Packit 857059
			other:			2,			//		Other settings
Packit 857059
			tx_cdr_supp:	1,			//		Tx CDR support
Packit 857059
			rx_cdr_supp:	1,			//		Rx CDR support
Packit 857059
			pwr_class_high:	2)			//		Power class low
Packit 857059
		} s;
Packit 857059
	} ext_ident;				
Packit 857059
	uint8	connector;				// 130: Connector (see STL_CIB_CONNECTOR_TYPE_xxx)
Packit 857059
	uint8	spec_comp[8];			// 131-138: Elec/optical compliance code
Packit 857059
	uint8	encode;					// 139: Encoding algorithm
Packit 857059
	uint8	bit_rate_low;			// 140: Nominal bit rate low (units 100 Mbps)
Packit 857059
									//		(0xFF see bit_rate_high)
Packit 857059
	uint8	ext_rate_comp;			// 141: Extended rate compliance code
Packit 857059
	uint8	len_smf;				// 142: Link len SMF fiber (units km)
Packit 857059
	uint8	len_om3;				// 143: Link len OM3 fiber (units 2m)
Packit 857059
	uint8	len_om2;				// 144: Link len OM2 fiber (units 1m)
Packit 857059
	uint8	len_om1;				// 145: Link len OM1 fiber (units 1m)
Packit 857059
	uint8	len_om4;				// 146: Link len OM4 copper or fiber (units 1m or 2m)
Packit 857059
	union {
Packit 857059
		uint8	AsReg8;
Packit 857059
		struct { IB_BITFIELD2( uint8,	// 147: Device technology:
Packit 857059
			xmit_tech:	4,				//		Transmitter technology
Packit 857059
			other:		4)				//		Other settings
Packit 857059
		} s;
Packit 857059
	} dev_tech;				
Packit 857059
	uint8	vendor_name[16];		// 148-163: Vendor name
Packit 857059
	uint8	ext_mod;				// 164: Extended module code
Packit 857059
	uint8	vendor_oui[3];			// 165-167: Vendor OUI
Packit 857059
	uint8	vendor_pn[16];			// 168-183: Vendor part number
Packit 857059
	uint8	vendor_rev[2];			// 184-185: Vendor revision
Packit 857059
	uint8	wave_atten[2];			// 186-187: Wave length (value/20 nm) or
Packit 857059
									//			copper attenuation (units dB)
Packit 857059
	uint8	wave_tol[2];			// 188-189: Wave length tolerance (value/200 nm)
Packit 857059
	uint8	max_case_temp;			// 190: Max case temperature (degrees C)
Packit 857059
	uint8	cc_base;				// 191: Checksum addresses 128-190
Packit 857059
	uint8	link_codes;				// 192: Link codes
Packit 857059
	union {
Packit 857059
		uint8	AsReg8;
Packit 857059
		struct { IB_BITFIELD5( uint8,   // 193: RxTx options: equalization & emphasis
Packit 857059
			reserved:		4,			//		Reserved
Packit 857059
			tx_inpeq_autadp_cap:	1,	//		Tx inp equal auto-adaptive capable
Packit 857059
			tx_inpeq_fixpro_cap:	1,	//		Tx inp equal fixed-prog capable
Packit 857059
			rx_outemp_fixpro_cap:	1,	//		Rx outp emphasis fixed-prog capable
Packit 857059
			rx_outamp_fixpro_cap:	1)	//		Rx outp amplitude fixed-prog capable
Packit 857059
		} s;
Packit 857059
	} rxtx_opt_equemp;
Packit 857059
	union {
Packit 857059
		uint8	AsReg8;
Packit 857059
		struct { IB_BITFIELD8( uint8,   // 194: RxTx options: CDR, LOL, squelch
Packit 857059
			tx_cdr_ctrl:	1,			//		Tx CDR On/Off ctrl implemented
Packit 857059
			rx_cdr_ctrl:	1,			//		Rx CDR On/Off ctrl implemented
Packit 857059
			tx_cdr_lol:		1,			//		Tx CDR loss of lock flag implemented
Packit 857059
			rx_cdr_lol:		1,			//		Rx CDR loss of lock flag implemented
Packit 857059
			rx_squel_dis:	1,			//		Rx squelch disable implemented
Packit 857059
			rx_out_dis:		1,			//		Rx output disable implemented
Packit 857059
			tx_squel_dis:	1,			//		Tx squelch disable implemented
Packit 857059
			tx_squel:		1)			//		Tx squelch implemented
Packit 857059
		} s;
Packit 857059
	} rxtx_opt_cdrsquel;
Packit 857059
	union {
Packit 857059
		uint8	AsReg8;
Packit 857059
		struct { IB_BITFIELD8( uint8,   // 195: MemTx options: pages 1 & 2, implementations
Packit 857059
			page_2:				1,		//		Mem page 2 implemented
Packit 857059
			page_1:				1,		//		Mem page 1 implemented
Packit 857059
			rate_sel:			1,		//		Rate select implemented
Packit 857059
			tx_dis:				1,		//		Tx disable implemented
Packit 857059
			tx_fault:			1,		//		Tx fault signal implemented
Packit 857059
			tx_squel_omapav:	1,		//		Tx squelch OMA/Pave
Packit 857059
			tx_los:				1,		//		Tx loss of signal implemented
Packit 857059
			reserved:			1)		//		Reserved
Packit 857059
		} s;
Packit 857059
	} memtx_opt_pagesquel;
Packit 857059
	uint8	vendor_sn[16];			// 196-211: Vendor serial number
Packit 857059
	uint8	date_code[8];			// 212-219: Vendor manufacture date code
Packit 857059
	uint8	diag_mon_type;			// 220: Diagnostic monitoring type
Packit 857059
	uint8	options_enh;			// 221: Enhanced options
Packit 857059
	uint8	bit_rate_high;			// 222: Nominal bit rate high (units 250 Mbps)
Packit 857059
									//		(see also bit_rate_low)
Packit 857059
	uint8	cc_ext;					// 223: Checksum addresses 192-222
Packit 857059
	uint8	vendor[26];				// 224-249: Vendor specific
Packit 857059
	uint8	opa_cert_cable;			// 250: OPA certified cable (see STL_CIB_CERTIFIED_CABLE)
Packit 857059
	uint8	vendor2;				// 251: Vendor specific
Packit 857059
	uint8	opa_cert_data_rate;		// 252: OPA certified data rate
Packit 857059
	uint8	vendor3[3];				// 253-255: Vendor specific
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO_STD;
Packit 857059
Packit 857059
// The following structure represents CableInfo page 0 Lower(DD) in memory.
Packit 857059
// (based on Rev 3.0 Memory map)
Packit 857059
typedef struct {
Packit 857059
	uint8	ident;					// 0: Identifier
Packit 857059
	uint8	versionID;				// 1: version ID
Packit 857059
	uint8	interrupt[2];			// 2-3: Flat mem, Interrupt
Packit 857059
	uint8	bankLaneFlag[4];		// 4-7: Bank Lane Flag summary
Packit 857059
	uint8	moduleFlags[6];			// 8-13: Module Flags
Packit 857059
	uint16	temperature;			// 14-15: Module temperature
Packit 857059
	uint16	voltage;				// 16-17: Supply Voltage
Packit 857059
	uint8	moduleMonitors[8];		// 14-25: Module Monitors
Packit 857059
	uint8	moduleGlobalCtrls[5];	// 26-30: Module Global Monitors
Packit 857059
	uint8	moduleMasks[6];			// 31-36: Module masks
Packit 857059
	uint8	reserved1[27];			// 37-63: Reserved
Packit 857059
	uint8	custom[21];				// 64-84: custom
Packit 857059
	uint8	moduleType;				// 85: Module type advertising code
Packit 857059
	uint8	moduleHostMediaInf[32];	// 86-117: Module Host-Media Interface Options
Packit 857059
	uint8	password[8];			// 118-125: Password Area
Packit 857059
	uint8	bankSelectType;			// 126: Bank Select Type
Packit 857059
	uint8	pageSelectType;			// 127: Page Select Type
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO_LOW0_DD;
Packit 857059
Packit 857059
// The following structure represents CableInfo page 0 upper (DD) in memory.
Packit 857059
// (based on Rev 0.61 frozen memory map)
Packit 857059
typedef struct {
Packit 857059
	uint8	ident;					// 128: Identifier
Packit 857059
	uint8	vendor_name[16];		// 129-144: Vendor name
Packit 857059
	uint8	vendor_oui[3];			// 145-147: Vendor OUI
Packit 857059
	uint8	vendor_pn[16];			// 148-163: Vendor part number
Packit 857059
	uint8	vendor_rev[2];			// 164-165: Vendor revision
Packit 857059
	uint8	vendor_sn[16];			// 166-181: Vendor serial number
Packit 857059
	uint8	date_code[8];			// 182-189: Vendor manufacture date code
Packit 857059
	uint8	reserved1[11];			// 190-200: Reserved
Packit 857059
	uint8	powerMax;				// 201: Max power dissipation, in 0.25W increments
Packit 857059
	uint8	cableLengthEnc;			// 202: Cable assembly length
Packit 857059
	uint8	connector;				// 203: Connector (see STL_CIB_CONNECTOR_TYPE_xxx)
Packit 857059
	uint8	reserved2[8];			// 204-211: Reserved
Packit 857059
	uint8	cable_type;				// 212: Cable type (optics/passive/active Cu)
Packit 857059
	uint8	reserved3[43];			// 213-255: Reserved
Packit 857059
} PACK_SUFFIX STL_CABLE_INFO_UP0_DD;
Packit 857059
Packit 857059
/*
Packit 857059
 * Aggregate
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0000 0000 0000 0000 0000 0000 NNNN NNNN
Packit 857059
 *                        N: Number of aggregated attributes
Packit 857059
 *                            (1-MAX_AGGREGATE_ATTRIBUTES)
Packit 857059
 *
Packit 857059
 * A wrapper attribute, containing a sequence of AttributeID/AttributeModifier/Payload
Packit 857059
 * segments.  Each segment begins on an 8-byte boundary and contains a payload
Packit 857059
 * length specified by RequestLength (in 8-byte units).  RequestLength is
Packit 857059
 * supplied by the Requester and specifies the amount of data in the request
Packit 857059
 * and the response.  The offset from the beginning of one segment to the
Packit 857059
 * next is determined by RequestLength.  If a request or response does not fit
Packit 857059
 * within RequestLength then an error is set in Status; response data is undefined
Packit 857059
 * in this situation.
Packit 857059
 */
Packit 857059
										/* Max number of aggregate attributes */
Packit 857059
#define MAX_AGGREGATE_ATTRIBUTES  (STL_MAX_PAYLOAD_SMP_DR / 16)
Packit 857059
#define STL_MAX_PAYLOAD_AGGREGATE 1016
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint16  AttributeID;
Packit 857059
	union {
Packit 857059
		uint16  AsReg16;
Packit 857059
		struct { IB_BITFIELD3( uint16,
Packit 857059
			Error:			1,	/* 1: Error (Invalid AttributeID/Modifier, */
Packit 857059
								/*	   RequestLength, Attribute Data) */
Packit 857059
			Reserved:		8,
Packit 857059
			RequestLength:	7 )	/* Request length (8-byte units) */
Packit 857059
		} s;
Packit 857059
Packit 857059
	} Result;
Packit 857059
Packit 857059
	uint32  AttributeModifier;
Packit 857059
Packit 857059
	uint8   Data[0];
Packit 857059
} PACK_SUFFIX STL_AGGREGATE;
Packit 857059
Packit 857059
/*
Packit 857059
 * Returns a pointer to the first member of an aggregate MAD.
Packit 857059
 * Header must be in HOST byte order.
Packit 857059
 */
Packit 857059
#define STL_AGGREGATE_FIRST(smp) (STL_AGGREGATE*)((smp->common.MgmtClass == MCLASS_SM_LID_ROUTED)?(smp->SmpExt.LIDRouted.SMPData):(smp->SmpExt.DirectedRoute.SMPData))
Packit 857059
Packit 857059
/*
Packit 857059
 * Given an STL_AGGREGATE member, returns the next member.
Packit 857059
 * Member header must be in HOST byte order. Does not range check.
Packit 857059
 */ 
Packit 857059
#define STL_AGGREGATE_NEXT(pAggr) ((STL_AGGREGATE*)((uint8*)(pAggr)+((pAggr)->Result.s.RequestLength*8)+sizeof(STL_AGGREGATE)))
Packit 857059
Packit 857059
/*
Packit 857059
 * PortStateInfo
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 00S0 PPPP PPPP
Packit 857059
 *                        N: Number of ports
Packit 857059
 *                        S=1: Start of SM configuration
Packit 857059
 *                        P: Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 *
Packit 857059
 * A list of port state information, one entry per port (starting at port P).
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	STL_PORT_STATES  PortStates;		/* RW */
Packit 857059
	uint16 LinkWidthDowngradeTxActive;  /* RO */
Packit 857059
	uint16 LinkWidthDowngradeRxActive;	/* RO */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PORT_STATE_INFO;
Packit 857059
#define STL_NUM_PORT_STATE_INFO_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / sizeof(STL_PORT_STATES)))
Packit 857059
#define STL_NUM_PORT_STATE_INFO_BLOCKS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / sizeof(STL_PORT_STATES)))
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Port Group Forwarding Table (PGFT)
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0ABB BBBB BBBB BBBB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        A=1: All blocks starting at B (Set only)
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The (max) PGFT is 2**24 entries (LIDs) long (STL_LID_24), 8 bits wide.
Packit 857059
 * Each PGFT block is 64 entries long, 8 bits wide.  The PGFT is a
Packit 857059
 * linear array of blocks[2**18].
Packit 857059
 */
Packit 857059
Packit 857059
#define NUM_PGFT_ELEMENTS_BLOCK	0x40		/* Num elements per block */
Packit 857059
#define DEFAULT_MAX_PGFT_BLOCK_NUM 0x80		/* Cap for alpha PRR is 128 blocks. */
Packit 857059
#define DEFAULT_MAX_PGFT_LID ((DEFAULT_MAX_PGFT_BLOCK_NUM * NUM_PGFT_ELEMENTS_BLOCK) - 1)
Packit 857059
#define STL_NUM_PGFT_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR/NUM_PGFT_ELEMENTS_BLOCK))
Packit 857059
Packit 857059
typedef struct {							/* RW POD: PGFTn=0xFF */
Packit 857059
	PORT   PgftBlock[NUM_PGFT_ELEMENTS_BLOCK];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PORT_GROUP_FORWARDING_TABLE;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Port Group Table (PGT)
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN PP00 0000 0000 0000 00AB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        P:   Position number
Packit 857059
 *                        A=1: All blocks starting at B (Set only)
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The PGT is 256 entries long, 256 bits wide.
Packit 857059
 * Each PGT block is 8 entries long, 64 bits wide.  The PGT is a
Packit 857059
 * 2-dimensional array of blocks[32][4].
Packit 857059
 */
Packit 857059
Packit 857059
#define NUM_PGT_ELEMENTS_BLOCK	8		/* Num elements per block */
Packit 857059
#define MAX_PGT_BLOCK_NUM	0x1F
Packit 857059
#define MAX_PGT_ELEMENTS 256
Packit 857059
#define STL_NUM_PGTABLE_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR/NUM_PGFT_ELEMENTS_BLOCK))
Packit 857059
Packit 857059
typedef struct {						/* RW POD: PGTn=0 */
Packit 857059
	STL_PORTMASK  PgtBlock[NUM_PGT_ELEMENTS_BLOCK];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_PORT_GROUP_TABLE;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * BufferControlTable
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 000A PPPP PPPP
Packit 857059
 *                        N:   Number of ports
Packit 857059
 *                        A=1: All ports starting at P (Set only)
Packit 857059
 *                        P:   Port number (0 - management port, switches only;
Packit 857059
 *								for HFIs P is ignored and the attribute is
Packit 857059
 *								applicable only to the port that receives the packet)
Packit 857059
 * Note:
Packit 857059
 *   All receive values in buffer allocation units of this receiver
Packit 857059
 *   All transmit values in buffer allocation units of neighbor receiver
Packit 857059
 */
Packit 857059
typedef struct {
Packit 857059
	uint16  Reserved;
Packit 857059
	uint16  TxOverallSharedLimit;			/* RW Overall shared limit */
Packit 857059
		
Packit 857059
	struct STL_BUFFER_CONTROL_TABLE_VL_s {	/* Per VL data */
Packit 857059
		uint16  TxDedicatedLimit;			/* RW Dedicated limit */
Packit 857059
		uint16  TxSharedLimit;				/* RW Shared limit */
Packit 857059
	} VL[STL_MAX_VLS];
Packit 857059
		
Packit 857059
} PACK_SUFFIX STL_BUFFER_CONTROL_TABLE;
Packit 857059
Packit 857059
// NOTE: STL_BUFFER_CONTROL_TABLE is NOT 8 byte aligned. When doing multiblock queries, each block
Packit 857059
// *MUST* be rounded to the nearest 8 byte boundary, or PRR will reject any SMA request for more than
Packit 857059
// one block. In the future we may just want to pad out the structure, for now the following macros should
Packit 857059
// be used when working with BCT blocks inside of SMAs.
Packit 857059
#define STL_BFRCTRLTAB_PAD_SIZE ((sizeof(STL_BUFFER_CONTROL_TABLE)+7)&~0x7)
Packit 857059
#define STL_NUM_BFRCTLTAB_BLOCKS_PER_DRSMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_DR / STL_BFRCTRLTAB_PAD_SIZE))
Packit 857059
#define STL_NUM_BFRCTLTAB_BLOCKS_PER_LID_SMP ((uint8_t)(STL_MAX_PAYLOAD_SMP_LR / STL_BFRCTRLTAB_PAD_SIZE))
Packit 857059
Packit 857059
/*
Packit 857059
 * Congestion Info
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
Packit 857059
#define CC_CONGESTION_INFO_CREDIT_STARVATION 0x0001		/* Supports credit starvation (switch only) */
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint16	CongestionInfo;				/* RO Defined in IBTA V1.2.1 A10.4.3.3. */
Packit 857059
	uint8	ControlTableCap;			/* RO Number of supported entries in */
Packit 857059
										/* HFI Congestion Control Table */
Packit 857059
	uint8	CongestionLogLength;		/* RO. Legal values are 0 <= N <= 96 */
Packit 857059
} STL_CONGESTION_INFO;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Switch Congestion Log
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 *
Packit 857059
 * The Log is up to 96 entries long.  Each Log is 96 entries long.
Packit 857059
 * If a request asks for more entries than the device supports, the
Packit 857059
 * remainder should be zero-filled.
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_NUM_CONGESTION_LOG_ELEMENTS	96		/* Max num elements in log (SW and HFI) */
Packit 857059
Packit 857059
typedef struct {						/* POD: 0 */
Packit 857059
	STL_LID	SLID;
Packit 857059
	STL_LID	DLID;
Packit 857059
Packit 857059
	IB_BITFIELD2( uint8,
Packit 857059
		SC:			5,
Packit 857059
		Reserved:	3 );
Packit 857059
Packit 857059
	uint8	Reserved2;
Packit 857059
	uint16	Reserved3;
Packit 857059
Packit 857059
	uint32	TimeStamp;
Packit 857059
Packit 857059
} STL_SWITCH_CONGESTION_LOG_EVENT;
Packit 857059
Packit 857059
typedef struct {						/* RO */
Packit 857059
	uint8   LogType;					/* shall be 1 in response from a switch */
Packit 857059
	uint8   CongestionFlags;
Packit 857059
	uint16  LogEventsCounter;				/* POD: 0 */
Packit 857059
	uint32  CurrentTimeStamp;				/* POD: 0 */
Packit 857059
	uint8   PortMap[256/8];
Packit 857059
Packit 857059
	STL_SWITCH_CONGESTION_LOG_EVENT  CongestionEntryList[STL_NUM_CONGESTION_LOG_ELEMENTS];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SWITCH_CONGESTION_LOG;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Switch Congestion Setting
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 */
Packit 857059
Packit 857059
/* bitfields for Control_Map */
Packit 857059
#define CC_SWITCH_CONTROL_MAP_VICTIM_VALID		0x00000001		/* Victim_Mask */
Packit 857059
#define CC_SWITCH_CONTROL_MAP_CREDIT_VALID		0x00000002		/* Credit_Mask */
Packit 857059
#define CC_SWITCH_CONTROL_MAP_CC_VALID			0x00000004		/* Threshold & Packet_Size */
Packit 857059
#define CC_SWITCH_CONTROL_MAP_CS_VALID			0x00000008		/* CS_threshold & CS_ReturnDelay */
Packit 857059
#define CC_SWITCH_CONTROL_MAP_MARKING_VALID		0x00000010		/* Marking Rate */
Packit 857059
Packit 857059
typedef struct {						/* RW */
Packit 857059
	uint32  Control_Map;				/* POD: 0 */
Packit 857059
	uint8   Victim_Mask[256/8];			/* POD: 0 */
Packit 857059
	uint8   Credit_Mask[256/8];			/* POD: 0 */
Packit 857059
Packit 857059
	IB_BITFIELD2( uint8,
Packit 857059
		Threshold:	4,					/* POD: 0 */
Packit 857059
		Reserved:	4 );
Packit 857059
Packit 857059
	uint8   Packet_Size;				/* in 64 byte units */
Packit 857059
										/* POD: 0 */
Packit 857059
Packit 857059
	IB_BITFIELD2( uint8,
Packit 857059
		CS_Threshold:	4,				/* POD: 0 */
Packit 857059
		Reserved2:		4 );
Packit 857059
Packit 857059
	uint8   Reserved3;
Packit 857059
Packit 857059
	uint16  CS_ReturnDelay;				/* POD: 0 */
Packit 857059
	uint16  Marking_Rate;				/* POD: 0 */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SWITCH_CONGESTION_SETTING;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * Switch Port Congestion Setting
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 0000 PPPP PPPP
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        P:   Port number
Packit 857059
 */
Packit 857059
Packit 857059
// Values for Control_Type
Packit 857059
#define SWITCH_PORT_CONGESTION_CONTROL_TYPE_CC			0
Packit 857059
#define SWITCH_PORT_CONGESTION_CONTROL_TYPE_STARVATION	1
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	IB_BITFIELD4( uint8,			/* POD: 0 */
Packit 857059
		Valid:			1,
Packit 857059
		Control_Type:	1,
Packit 857059
		Reserved:		2,
Packit 857059
		Threshold:      4 );		/* 0-15 where 0 = no marking and       */
Packit 857059
									/* 15 = most aggressive                */
Packit 857059
Packit 857059
	uint8 Packet_Size;				/* POD: 0. When Control_Type == 1      */
Packit 857059
									/* this field is reserved. When Control*/
Packit 857059
									/* _Type == 0, this field contains the */
Packit 857059
									/* minimum size of a packet which may  */
Packit 857059
									/* be marked with a FECN. Packets      */
Packit 857059
									/* smaller than this size will not be  */
Packit 857059
									/* marked. Packet_Size is specified in */
Packit 857059
									/* credits.                            */
Packit 857059
	uint16 Marking_Rate;			/* POD: 0. When Control_Type == 0 this */
Packit 857059
									/* contains the port marking rate,     */
Packit 857059
									/* defined as the minimum number of    */
Packit 857059
									/* packets between marking eligible    */
Packit 857059
									/* packets with a FECN.                */
Packit 857059
} PACK_SUFFIX STL_SWITCH_PORT_CONGESTION_SETTING_ELEMENT;
Packit 857059
Packit 857059
typedef struct {					/* RW */
Packit 857059
Packit 857059
STL_SWITCH_PORT_CONGESTION_SETTING_ELEMENT  Elements[1];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_SWITCH_PORT_CONGESTION_SETTING;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * HFI Congestion Log
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 *
Packit 857059
 * The Log is up to 96 entries long.  Each Log is 96 entries long.
Packit 857059
 * If a request asks for more entries than the device supports, the
Packit 857059
 * remainder should be zero-filled.
Packit 857059
 */
Packit 857059
#define CC_RC_TYPE 0
Packit 857059
#define CC_UC_TYPE 1
Packit 857059
#define CC_RD_TYPE 2
Packit 857059
#define CC_UD_TYPE 3
Packit 857059
Packit 857059
typedef struct {					/* POD: 0 */
Packit 857059
	struct {
Packit 857059
		uint8   AsReg8s[3];
Packit 857059
	} Local_QP_CN_Entry;			/* 0->port threshold reached */
Packit 857059
Packit 857059
	struct {
Packit 857059
		uint8   AsReg8s[3];
Packit 857059
	} Remote_QP_Number_CN_Entry;	/* 0 for UD */
Packit 857059
Packit 857059
	IB_BITFIELD2( uint8,
Packit 857059
		SL_CN_Entry:			5,
Packit 857059
		Service_Type_CN_Entry:	3 );
Packit 857059
Packit 857059
	uint8   Reserved;
Packit 857059
Packit 857059
	STL_LID  Remote_LID_CN_Entry;	/* IBTA already used 32 bits for this */
Packit 857059
Packit 857059
	uint32  TimeStamp_CN_Entry;
Packit 857059
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_LOG_EVENT;
Packit 857059
Packit 857059
typedef struct {						/* RO */
Packit 857059
	uint8   LogType;					/* shall be 0x2 in a response from an HFI */
Packit 857059
	uint8   CongestionFlags;
Packit 857059
	uint16  ThresholdEventCounter;		/* POD: 0 */
Packit 857059
	uint32  CurrentTimeStamp;			/* POD: 0 */
Packit 857059
	uint8   ThresholdCongestionEventMap[STL_MAX_SLS/8];	/* 1 bit per SL */
Packit 857059
Packit 857059
	STL_HFI_CONGESTION_LOG_EVENT  CongestionEntryList[STL_NUM_CONGESTION_LOG_ELEMENTS];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_LOG;
Packit 857059
Packit 857059
/*
Packit 857059
 * HFI Congestion Setting
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: 0 (not used)
Packit 857059
 *
Packit 857059
 * This attribute applicable to HFIs or Enhanced Switch Port 0.
Packit 857059
 */
Packit 857059
Packit 857059
/* Port_Control field bit values */
Packit 857059
#define CC_HFI_CONGESTION_SETTING_SL_PORT	0x0001		/* SL/Port control */
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	uint8   CCTI_Increase;				/* POD: 0 */
Packit 857059
	uint8   Reserved;
Packit 857059
	uint16  CCTI_Timer;					/* POD: 0 */
Packit 857059
	uint8   TriggerThreshold;			/* POD: 0 */
Packit 857059
	uint8   CCTI_Min;					/* POD: 0 */
Packit 857059
} STL_HFI_CONGESTION_SETTING_ENTRY;
Packit 857059
Packit 857059
typedef struct {						/* RW */
Packit 857059
	uint32  Control_Map;				/* POD: 0 */
Packit 857059
	uint16  Port_Control;				/* POD: 0 */
Packit 857059
Packit 857059
	STL_HFI_CONGESTION_SETTING_ENTRY  HFICongestionEntryList[STL_MAX_SLS];
Packit 857059
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_SETTING;
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * HFI Congestion Control Table
Packit 857059
 *
Packit 857059
 * Attribute Modifier as: NNNN NNNN 0000 0000 0000 0000 BBBB BBBB
Packit 857059
 *                        N:   Number of blocks
Packit 857059
 *                        B:   Block number
Packit 857059
 *
Packit 857059
 * The HFI Congestion Control Table is up to 2**14 entries long.  Each block
Packit 857059
 * is 64 entries long.  Table is a linear array of blocks[2**8].
Packit 857059
 */
Packit 857059
Packit 857059
#define STL_NUM_CONGESTION_CONTROL_ELEMENTS_BLOCK_ENTRIES	64		/* Num elements per block */
Packit 857059
#define STL_NUM_CONGESTION_CONTROL_ELEMENTS_BLOCKS			256		/* Max num blocks per table */
Packit 857059
#define STL_CONGESTION_CONTROL_ENTRY_MAX_VALUE				16384	/* 2**14 max multiplier value*/
Packit 857059
Packit 857059
typedef union {
Packit 857059
	uint16  AsReg16;
Packit 857059
	struct { IB_BITFIELD2( uint16,
Packit 857059
		CCT_Shift:			2,			/* POD: 0 */
Packit 857059
		CCT_Multiplier:		14 );		/* POD: 0 */
Packit 857059
	} s;
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_CONTROL_TABLE_ENTRY;
Packit 857059
Packit 857059
typedef struct {
Packit 857059
	STL_HFI_CONGESTION_CONTROL_TABLE_ENTRY	CCT_Entry_List[STL_NUM_CONGESTION_CONTROL_ELEMENTS_BLOCK_ENTRIES];
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_CONTROL_TABLE_BLOCK;
Packit 857059
Packit 857059
typedef struct {						/* RW */
Packit 857059
	uint16  CCTI_Limit;					/* POD: 0 */
Packit 857059
	STL_HFI_CONGESTION_CONTROL_TABLE_BLOCK  CCT_Block_List[1]; /* 1 or more blocks */
Packit 857059
Packit 857059
} PACK_SUFFIX STL_HFI_CONGESTION_CONTROL_TABLE;
Packit 857059
Packit 857059
#define CONGESTION_CONTROL_TABLE_CCTILIMIT_SZ	(sizeof(uint16))
Packit 857059
Packit 857059
/* this is conservative and considers the least payload */
Packit 857059
#define CONGESTION_CONTROL_TABLE_BLOCKS_PER_MAD \
Packit 857059
    ((MIN(STL_MAX_PAYLOAD_SMP_DR, STL_MAX_PAYLOAD_SMP_LR) - CONGESTION_CONTROL_TABLE_CCTILIMIT_SZ) / sizeof(STL_HFI_CONGESTION_CONTROL_TABLE_BLOCK))
Packit 857059
#define CONGESTION_CONTROL_TABLE_ENTRIES_PER_MAD \
Packit 857059
		(CONGESTION_CONTROL_TABLE_BLOCKS_PER_MAD  * \
Packit 857059
			STL_NUM_CONGESTION_CONTROL_ELEMENTS_BLOCK_ENTRIES)
Packit 857059
#define CONGESTION_CONTROL_IMPLEMENTATION_LIMIT 895
Packit 857059
Packit 857059
typedef struct {
Packit 857059
   uint64  M_Key;  			/* A 64 bit key, */
Packit 857059
   STL_LID DrSLID;            /* Directed route source LID */
Packit 857059
   STL_LID DrDLID;            /* Directed route destination LID */
Packit 857059
   uint8   InitPath[64];      /* 64-byte field containing the initial */
Packit 857059
                              /* directed path */
Packit 857059
   uint8   RetPath[64];       /* 64-byte field containing the */
Packit 857059
                              /* returning directed path */
Packit 857059
   uint8   Reserved2[8];      /* For the purpose of aligning the Data */
Packit 857059
                              /* field on a 16-byte boundary */
Packit 857059
   uint8   SMPData[STL_MAX_PAYLOAD_SMP_DR];  /* Up to 'MAX' byte field of SMP */
Packit 857059
                                             /* data used to contain the */
Packit 857059
                                             /* method's attribute */
Packit 857059
} PACK_SUFFIX DRStlSmp_t; 
Packit 857059
#define STL_SMP_DR_HDR_LEN      (sizeof(DRStlSmp_t) - STL_MAX_PAYLOAD_SMP_DR)
Packit 857059
Packit 857059
typedef struct {
Packit 857059
   uint64  M_Key;  			/* A 64 bit key, */
Packit 857059
   uint8   SMPData[STL_MAX_PAYLOAD_SMP_LR];  /* Up to 'MAX' byte field of SMP */
Packit 857059
                                             /* data used to contain the */
Packit 857059
                                             /* method's attribute */
Packit 857059
   
Packit 857059
} PACK_SUFFIX LRStlSmp_t; 
Packit 857059
#define STL_SMP_LR_HDR_LEN      (sizeof(LRStlSmp_t) - STL_MAX_PAYLOAD_SMP_LR)
Packit 857059
Packit 857059
#include "iba/public/ipackoff.h"
Packit 857059
Packit 857059
#if defined (__cplusplus)
Packit 857059
};
Packit 857059
#endif
Packit 857059
Packit 857059
#endif /* __IBA_STL_SM_TYPES_H__ */