1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_IB_MGT_SM_ATTR_H 27 #define _SYS_IB_MGT_SM_ATTR_H 28 29 /* 30 * This file contains the definitions of the various attributes specified 31 * in IB spec volume 1, release 1.1, chapter 14. 32 */ 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 #include <sys/ib/ib_types.h> 39 #include <sys/ib/mgt/ib_mad.h> 40 41 #define SM_MAX_DR_PATH 64 /* max ports in a DR path */ 42 43 /* 44 * LID routed smp class header 45 */ 46 typedef struct sm_lid_class_hdr_s { 47 uint64_t M_Key; 48 uint8_t Reserved[32]; 49 } sm_lid_class_hdr_t; 50 51 /* 52 * Directed route smp mad header 53 */ 54 typedef struct sm_dr_mad_hdr_s { 55 /* Common MAD Header1: 4 bytes, bytes 0-3 of header */ 56 uint8_t BaseVersion; /* version of MAD base format */ 57 uint8_t MgmtClass; /* class of operation */ 58 uint8_t ClassVersion; /* version of MAD class format */ 59 uint8_t R_Method; /* response bit & method to */ 60 /* perform based on mgmtclass */ 61 62 uint16_t D_Status; /* direction, status unused */ 63 uint8_t HopPointer; /* index into Initial/Return Paths */ 64 uint8_t HopCount; /* number of directed route hops */ 65 66 67 /* Common MAD Header2: 16 bytes, bytes 8-23 of header */ 68 uint64_t TransactionID; /* transaction id */ 69 uint16_t AttributeID; /* defines class spec. objects */ 70 uint16_t Reserved; 71 uint32_t AttributeModifier; /* further scope to attributes */ 72 } sm_dr_mad_hdr_t; 73 74 /* Direction bit */ 75 #define SM_DR_SMP_D_OUT 0x0000 /* SMP is outbound from SM */ 76 #define SM_DR_SMP_D_IN 0x8000 /* SMP is inbound to SM */ 77 #define SM_DR_SMP_D_MASK 0x8000 /* direction mask */ 78 79 #define SM_DR_SMP_STATUS_MASK 0x7FFF 80 81 /* 82 * Direct route smp class header: 83 */ 84 typedef struct sm_dr_class_hdr_s { 85 uint64_t M_Key; 86 ib_lid_t DrSLID; 87 ib_lid_t DrDLID; 88 uint8_t Reserved[28]; 89 } sm_dr_class_hdr_t; 90 91 typedef struct sm_dr_data_s { 92 uint8_t Data[64]; 93 uint8_t InitialPath[SM_MAX_DR_PATH]; 94 uint8_t ReturnPath[SM_MAX_DR_PATH]; 95 } sm_dr_data_t; 96 97 /* Traps: Table 118 */ 98 #define SM_GID_IN_SERVICE_TRAP 64 99 #define SM_GID_OUT_OF_SERVICE_TRAP 65 100 #define SM_MGID_CREATED_TRAP 66 101 #define SM_MGID_DESTROYED_TRAP 67 102 #define SM_LINK_STATE_CHANGED_TRAP 128 103 #define SM_LINK_INTEGRITY_THRESHOLD_TRAP 129 104 #define SM_BUFFER_OVERRUN_THRESHOLD_TRAP 130 105 #define SM_WATCHDOG_TIMER_EXPIRED_TRAP 131 106 #define SM_CAP_MASK_CHANGED_TRAP 144 107 #define SM_SYS_IMG_GUID_CHANGED_TRAP 145 108 #define SM_BAD_MKEY_TRAP 256 109 #define SM_BAD_PKEY_TRAP 257 110 #define SM_BAD_QKEY_TRAP 258 111 #define SM_BAD_SWITCH_PKEY_TRAP 259 112 113 /* 114 * Notice Data details for various sm traps 115 */ 116 /* Traps 64, 65, 66,and 67: Table 119 */ 117 typedef struct sm_trap_64_s { 118 uint8_t Reserved[6]; 119 ib_gid_t GIDADDR; /* global identifier */ 120 uint8_t Padding[32]; 121 } sm_trap_64_t; 122 123 typedef sm_trap_64_t sm_trap_65_t; 124 typedef sm_trap_64_t sm_trap_66_t; 125 typedef sm_trap_64_t sm_trap_67_t; 126 127 /* Trap 128: Table 120 */ 128 typedef struct sm_trap_128_s { 129 ib_lid_t LIDADDR; /* trap generator's LID */ 130 uint8_t Padding[52]; 131 } sm_trap_128_t; 132 133 /* Traps 129, 130, and 131: Table 121 */ 134 typedef struct sm_trap_129_s { 135 uint16_t Reserved; 136 ib_lid_t LIDADDR; /* generator's LID */ 137 uint8_t PORTNO; /* generator's port */ 138 uint8_t Padding[49]; 139 } sm_trap_129_t; 140 141 typedef sm_trap_129_t sm_trap_130_t; 142 typedef sm_trap_129_t sm_trap_131_t; 143 144 /* Trap 144: Table 122 */ 145 typedef struct sm_trap_144_s { 146 uint16_t Reserved; 147 ib_lid_t LIDADDR; /* generator's LID */ 148 uint16_t Reserved2; 149 uint32_t CAPABILITYMASK; /* generator's CapMask */ 150 uint8_t Padding[44]; 151 } sm_trap_144_t; 152 153 /* Trap 145: Table 123 */ 154 typedef struct sm_trap_145_s { 155 uint16_t Reserved; 156 ib_lid_t LIDADDR; 157 uint16_t Reserved2; 158 ib_guid_t SYSTEMIMAGEGUID; /* generator's SysImage GUID */ 159 uint8_t Padding[40]; 160 } sm_trap_145_t; 161 162 /* Trap 256: Table 124 */ 163 #if defined(_BIT_FIELDS_HTOL) 164 typedef struct sm_trap_256_s { 165 uint16_t Reserved; 166 ib_lid_t LIDADDR; /* generator's LID */ 167 uint16_t Reserved1; 168 uint8_t METHOD; /* method */ 169 uint8_t Reserved2; 170 uint16_t ATTRIBUTEID; /* attribute casuing the trap */ 171 uint32_t ATTRIBUTEMODIFIER; /* modifier for the attrib */ 172 uint64_t MKEY; 173 uint8_t DRSLID; /* SLID of SMP causing notice */ 174 uint8_t DRNotice :1; /* notice from a dr SMP */ 175 uint8_t DRPathTruncated :1; /* return path is truncated */ 176 uint8_t DRHopCount :6; /* num bytes in return path */ 177 uint8_t DRNoticeReturnPath[30]; /* return path from the SMP */ 178 } sm_trap_256_t; 179 180 #elif defined(_BIT_FIELDS_LTOH) 181 182 typedef struct sm_trap_256_s { 183 uint16_t Reserved; 184 ib_lid_t LIDADDR; /* generator's LID */ 185 uint16_t Reserved1; 186 uint8_t METHOD; /* method */ 187 uint8_t Reserved2; 188 uint16_t ATTRIBUTEID; /* attribute casuing the trap */ 189 uint32_t ATTRIBUTEMODIFIER; /* modifier for the attrib */ 190 uint64_t MKEY; 191 uint8_t DRSLID; /* SLID of SMP causing notice */ 192 uint8_t DRHopCount :6; /* num bytes in return path */ 193 uint8_t DRPathTruncated :1; /* return path is truncated */ 194 uint8_t DRNotice :1; /* notice from a dr SMP */ 195 uint8_t DRNoticeReturnPath[30]; /* return path from the SMP */ 196 } sm_trap_256_t; 197 #else 198 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 199 #endif /* _BIT_FIELDS_HTOL */ 200 201 /* Traps 257 and 258: Table 125 */ 202 #if defined(_BIT_FIELDS_HTOL) 203 typedef struct sm_trap_257_s { 204 uint16_t Reserved; 205 ib_lid_t LIDADDR1; /* see spec description */ 206 ib_lid_t LIDADDR2; 207 uint32_t KEY; /* qkey or pkey */ 208 uint32_t SL :4; /* sl for the trap */ 209 uint32_t Reserved2 :4; /* reserved */ 210 uint32_t QP :24; /* queue pair */ 211 uint32_t Reserved3 :8; 212 uint32_t QP2 :24; /* queue pair */ 213 ib_gid_t GIDADDR1; /* see spec description */ 214 ib_gid_t GIDADDR2; 215 uint8_t Padding[4]; 216 } sm_trap_257_t; 217 218 #elif defined(_BIT_FIELDS_LTOH) 219 220 typedef struct sm_trap_257_s { 221 uint16_t Reserved; 222 ib_lid_t LIDADDR1; /* see spec description */ 223 ib_lid_t LIDADDR2; 224 uint32_t KEY; /* qkey or pkey */ 225 uint32_t QP :24; /* queue pair */ 226 uint32_t Reserved2 :4; /* reserved */ 227 uint32_t SL :4; /* sl for the trap */ 228 uint32_t QP2 :24; /* queue pair */ 229 uint32_t Reserved3 :8; 230 ib_gid_t GIDADDR1; /* see spec description */ 231 ib_gid_t GIDADDR2; 232 uint8_t Padding[4]; 233 } sm_trap_257_t; 234 #else 235 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 236 #endif /* _BIT_FIELDS_HTOL */ 237 238 typedef sm_trap_257_t sm_trap_258_t; 239 240 /* Trap 259: Table 126 */ 241 #if defined(_BIT_FIELDS_HTOL) 242 typedef struct sm_trap_259_s { 243 uint16_t DataValid; /* validity of optional data */ 244 ib_lid_t LIDADDR1; /* see spec description */ 245 ib_lid_t LIDADDR2; 246 uint16_t PKEY; /* pkey */ 247 uint32_t SL :4; /* service level */ 248 uint32_t Reserved :4; 249 uint32_t QP1 :24; /* queue pair */ 250 uint32_t Reserved8 :8; 251 uint32_t QP2 :24; /* queue pair */ 252 ib_gid_t GIDADDR1; /* see spec description */ 253 ib_gid_t GIDADDR2; 254 ib_lid_t SWLIDADDR; /* lid of switch */ 255 uint8_t PORTNO; /* port number */ 256 uint8_t Padding[3]; 257 } sm_trap_259_t; 258 259 #elif defined(_BIT_FIELDS_LTOH) 260 261 typedef struct sm_trap_259_s { 262 uint16_t DataValid; /* validity of optional data */ 263 ib_lid_t LIDADDR1; /* see spec description */ 264 ib_lid_t LIDADDR2; 265 uint16_t PKEY; /* pkey */ 266 uint32_t QP1 :24; /* queue pair */ 267 uint32_t Reserved :4; 268 uint32_t SL :4; /* service level */ 269 uint32_t QP2 :24; /* queue pair */ 270 uint32_t Reserved8 :8; 271 ib_gid_t GIDADDR1; /* see spec description */ 272 ib_gid_t GIDADDR2; 273 ib_lid_t SWLIDADDR; /* lid of switch */ 274 uint8_t PORTNO; /* port number */ 275 uint8_t Padding[3]; 276 } sm_trap_259_t; 277 #else 278 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 279 #endif /* _BIT_FIELDS_HTOL */ 280 281 /* 282 * NodeDescription: Table 127 283 * NodeDescription is applicable to all ports of a node. 284 */ 285 typedef struct sm_nodedesc_s { 286 uint8_t NodeString[64]; /* description string */ 287 } sm_nodedesc_t; 288 289 /* 290 * NodeInfo: Table 128 291 * The value of some NodeInfo components varies by port within a node. 292 */ 293 #if defined(_BIT_FIELDS_HTOL) 294 typedef struct sm_nodeinfo_s { 295 uint8_t BaseVersion; /* supported MAD base version */ 296 uint8_t ClassVersion; /* support SMP version */ 297 uint8_t NodeType; /* node type(CA, switch, etc) */ 298 uint8_t NumPorts; /* # of phys ports on node */ 299 ib_guid_t SystemImageGUID; /* GUID associating this node */ 300 /* with nodes controlled by */ 301 /* common supervisory code */ 302 ib_guid_t NodeGUID; /* GUID of the node itself */ 303 ib_guid_t PortGUID; /* GUID of this port */ 304 uint16_t PartitionCap; /* # of entries in part. tbl. */ 305 uint16_t DeviceID; /* device ID info */ 306 uint32_t Revision; /* device revision */ 307 uint32_t LocalPortNum :8; /* link port # SMP came in on */ 308 uint32_t VendorID :24; /* device vendor, per IEEE */ 309 } sm_nodeinfo_t; 310 311 #elif defined(_BIT_FIELDS_LTOH) 312 313 typedef struct sm_nodeinfo_s { 314 uint8_t BaseVersion; /* supported MAD base version */ 315 uint8_t ClassVersion; /* support SMP version */ 316 uint8_t NodeType; /* node type(CA, switch, etc) */ 317 uint8_t NumPorts; /* # of phys ports on node */ 318 ib_guid_t SystemImageGUID; /* GUID associating this node */ 319 /* with nodes controlled by */ 320 /* common supervisory code */ 321 ib_guid_t NodeGUID; /* GUID of the node itself */ 322 ib_guid_t PortGUID; /* GUID of this port */ 323 uint16_t PartitionCap; /* # of entries in part. tbl. */ 324 uint16_t DeviceID; /* device ID info */ 325 uint32_t Revision; /* device revision */ 326 uint32_t VendorID :24; /* device vendor, per IEEE */ 327 uint32_t LocalPortNum :8; /* link port # SMP came in on */ 328 } sm_nodeinfo_t; 329 #else 330 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 331 #endif /* _BIT_FIELDS_HTOL */ 332 333 /* Defines and Masks that go with NodeInfo */ 334 #define SM_NODE_TYPE_CA 0x01 335 #define SM_NODE_TYPE_SWITCH 0x02 336 #define SM_NODE_TYPE_ROUTER 0x03 337 338 /* SwitchInfo: Table 129 */ 339 #if defined(_BIT_FIELDS_HTOL) 340 typedef struct sm_switchinfo_s { 341 uint16_t LinearFDBCap; /* max # of lin FDB entries */ 342 uint16_t RandomFDBCap; /* max # of ran FDB entries */ 343 uint16_t MulticastFDBCap; /* max # of mc FDB entries */ 344 uint16_t LinearFDBTop; /* top of the linear FDB */ 345 uint8_t DefaultPort; /* port when DLID not in FDB */ 346 uint8_t DefaultMulticastPrimaryPort; /* mcast port when DLID */ 347 /* not in FDB */ 348 uint8_t DefaultMulticastNotPrimaryPort; /* mcast port when */ 349 /* pkts from def port */ 350 /* have DLID not in FDB */ 351 uint8_t LifeTimeValue :5; /* time pkt can live in sw */ 352 uint8_t PortStateChange :1; /* change in port state value */ 353 uint8_t Reserved :2; 354 uint16_t LIDsPerPort; /* max # of LID/LMCs per port */ 355 uint16_t PartitionEnforcementCap; /* max entries in p. enf tbl */ 356 uint8_t PartitionChecks :4; /* switch enforcement knobs */ 357 uint8_t EnhancedPort0 :1; /* enhanced port 0 supported */ 358 uint8_t Reserved2 :3; 359 } sm_switchinfo_t; 360 361 #elif defined(_BIT_FIELDS_LTOH) 362 363 typedef struct sm_switchinfo_s { 364 uint16_t LinearFDBCap; /* max # of lin FDB entries */ 365 uint16_t RandomFDBCap; /* max # of ran FDB entries */ 366 uint16_t MulticastFDBCap; /* max # of mc FDB entries */ 367 uint16_t LinearFDBTop; /* top of the linear FDB */ 368 uint8_t DefaultPort; /* port when DLID not in FDB */ 369 uint8_t DefaultMulticastPrimaryPort; /* mcast port when DLID */ 370 /* not in FDB */ 371 uint8_t DefaultMulticastNotPrimaryPort; /* mcast port when */ 372 /* pkts from def port */ 373 /* have DLID not in FDB */ 374 uint8_t Reserved :2; 375 uint8_t PortStateChange :1; /* change in port state value */ 376 uint8_t LifeTimeValue :5; /* time pkt can live in sw */ 377 uint16_t LIDsPerPort; /* max # of LID/LMCs per port */ 378 uint16_t PartitionEnforcementCap; /* max entries in p. enf tbl */ 379 uint8_t Reserved2 :3; 380 uint8_t EnhancedPort0 :1; /* enhanced port 0 supported */ 381 uint8_t PartitionChecks :4; /* switch enforcement knobs */ 382 } sm_switchinfo_t; 383 #else 384 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 385 #endif /* _BIT_FIELDS_HTOL */ 386 387 /* Defines and Masks that go with SwitchInfo */ 388 #define SM_PORT_STATE_CHANGE_CLEAR 0x1 389 #define SM_SWITCH_PART_ENF_IN 0x8 390 #define SM_SWITCH_PART_ENF_IN_MASK 0x8 391 #define SM_SWITCH_PART_ENF_OUT 0x4 392 #define SM_SWITCH_PART_ENF_OUT_MASK 0x4 393 #define SM_SWITCH_FILTER_RAW_IN 0x2 394 #define SM_SWITCH_FILTER_RAW_IN_MASK 0x2 395 #define SM_SWITCH_FILTER_RAW_OUT 0x1 396 #define SM_SWITCH_FILTER_RAW_OUT_MASK 0x1 397 398 /* GUIDInfo: Table 130 */ 399 typedef struct sm_guidinfo_s { 400 ib_guid_t GUIDBlocks[8]; 401 } sm_guidinfo_t; 402 403 /* defines that go with guid info */ 404 #define SM_GUIDINFO_BLOCK_MAX 31 405 406 /* 407 * PortInfo: Table 132 408 * PortInfo is applicable to all ports of a node. 409 */ 410 #if defined(_BIT_FIELDS_HTOL) 411 typedef struct sm_portinfo_s { 412 uint64_t M_Key; /* M_key */ 413 ib_sn_prefix_t GidPrefix; /* Gid prefix */ 414 ib_lid_t LID; /* base LID of the port */ 415 ib_lid_t MasterSMLID; /* LID of the master SM */ 416 uint32_t CapabilityMask; /* Capability Mask */ 417 uint16_t DiagCode; /* diag code */ 418 uint16_t M_KeyLeasePeriod; /* M_key lease period */ 419 uint8_t LocalPortNum; /* port which recvd the MAD */ 420 uint8_t LinkWidthEnabled; /* link width(s) enabled */ 421 uint8_t LinkWidthSupported; /* widths supported by port */ 422 uint8_t LinkWidthActive; /* Currently active width */ 423 uint8_t LinkSpeedSupported:4; /* link speed supported */ 424 uint8_t PortState :4; /* port state */ 425 uint8_t PortPhysicalState:4; /* port physical state */ 426 uint8_t LinkDownDefaultState:4; /* see spec description */ 427 uint8_t M_KeyProtectBits:2; /* M-key protection bits */ 428 uint8_t Reserved :3; 429 uint8_t LMC :3; /* LID mask count */ 430 uint8_t LinkSpeedActive :4; /* current active link speed */ 431 uint8_t LinkSpeedEnabled:4; /* enabled link speed */ 432 uint8_t NeighborMTU :4; /* Active max MTU for port */ 433 uint8_t MasterSMSL :4; /* admin SL of master SM */ 434 uint8_t VLCap :4; /* virtual lanes supported */ 435 uint8_t InitType :4; /* type of init requested */ 436 uint8_t VLHighLimit; /* VL high pri limit */ 437 uint8_t VLArbitrationHighCap; /* max high pri entries in */ 438 /* VL arbitration table */ 439 uint8_t VLArbitrationLowCap; /* max low pri entries */ 440 uint8_t InitTypeReply :4; /* type of init performed */ 441 uint8_t MTUCap :4; /* max MTU supported */ 442 uint8_t VLStallCount :3; /* # pkts to enter stall st. */ 443 uint8_t HOQLife :5; /* time pkt can live at HOQ */ 444 uint8_t OperationalVLs :4; /* virtual lanes operational */ 445 uint8_t PartitionChecks :4; /* port enforcement knbos */ 446 uint16_t M_KeyViolations; /* count of M_key violations */ 447 uint16_t P_KeyViolations; /* count of P_key violations */ 448 uint16_t Q_KeyViolations; /* count of Q_key violations */ 449 uint8_t GUIDCap; /* number of GUIDs supported */ 450 uint8_t ClientRereg :1; /* Client ReReg supported */ 451 uint8_t Reserved2 :2; 452 uint8_t SubnetTimeOut :5; /* defines subnet prop. dely */ 453 uint8_t Reserved3 :3; 454 uint8_t RespTimeValue :5; /* defines resp time to SMPs */ 455 uint8_t LocalPhyErrors :4; /* threshold for errors */ 456 uint8_t OverrunErrors :4; /* threshold for errors */ 457 } sm_portinfo_t; 458 459 #elif defined(_BIT_FIELDS_LTOH) 460 461 typedef struct sm_portinfo_s { 462 uint64_t M_Key; /* M_key */ 463 ib_sn_prefix_t GidPrefix; /* Gid prefix */ 464 ib_lid_t LID; /* base LID of the port */ 465 ib_lid_t MasterSMLID; /* LID of the master SM */ 466 uint32_t CapabilityMask; /* Capability Mask */ 467 uint16_t DiagCode; /* diag code */ 468 uint16_t M_KeyLeasePeriod; /* M_key lease period */ 469 uint8_t LocalPortNum; /* port which recvd the MAD */ 470 uint8_t LinkWidthEnabled; /* link width(s) enabled */ 471 uint8_t LinkWidthSupported; /* widths supported by port */ 472 uint8_t LinkWidthActive; /* Currently active width */ 473 uint8_t PortState :4; /* port state */ 474 uint8_t LinkSpeedSupported:4; /* link speed supported */ 475 uint8_t LinkDownDefaultState:4; /* see spec description */ 476 uint8_t PortPhysicalState:4; /* port physical state */ 477 uint8_t LMC :3; /* LID mask count */ 478 uint8_t Reserved :3; 479 uint8_t M_KeyProtectBits:2; /* M-key protection bits */ 480 uint8_t LinkSpeedEnabled:4; /* enabled link speed */ 481 uint8_t LinkSpeedActive :4; /* current active link speed */ 482 uint8_t MasterSMSL :4; /* admin SL of master SM */ 483 uint8_t NeighborMTU :4; /* Active max MTU for port */ 484 uint8_t InitType :4; /* type of init requested */ 485 uint8_t VLCap :4; /* virtual lanes supported */ 486 uint8_t VLHighLimit; /* VL high pri limit */ 487 uint8_t VLArbitrationHighCap; /* max high pri entries in */ 488 /* VL arbitration table */ 489 uint8_t VLArbitrationLowCap; /* max low pri entries */ 490 uint8_t MTUCap :4; /* max MTU supported */ 491 uint8_t InitTypeReply :4; /* type of init performed */ 492 uint8_t HOQLife :5; /* time pkt can live at HOQ */ 493 uint8_t VLStallCount :3; /* # pkts to enter stall st. */ 494 uint8_t PartitionChecks :4; /* port enforcement knbos */ 495 uint8_t OperationalVLs :4; /* virtual lanes operational */ 496 uint16_t M_KeyViolations; /* count of M_key violations */ 497 uint16_t P_KeyViolations; /* count of P_key violations */ 498 uint16_t Q_KeyViolations; /* count of Q_key violations */ 499 uint8_t GUIDCap; /* number of GUIDs supported */ 500 uint8_t SubnetTimeOut :5; /* defines subnet prop. dely */ 501 uint8_t Reserved2 :2; 502 uint8_t ClientRereg :1; /* Client ReReg supported */ 503 uint8_t RespTimeValue :5; /* defines resp time to SMPs */ 504 uint8_t Reserved3 :3; 505 uint8_t OverrunErrors :4; /* threshold for errors */ 506 uint8_t LocalPhyErrors :4; /* threshold for errors */ 507 } sm_portinfo_t; 508 #else 509 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 510 #endif /* _BIT_FIELDS_HTOL */ 511 512 /* Defines and Masks that go with PortInfo */ 513 #define SM_CAP_MASK_IS_SM 0x00000002 514 #define SM_CAP_MASK_IS_NOTICE_SUPPD 0x00000004 515 #define SM_CAP_MASK_IS_TRAP_SUPPD 0x00000008 516 #define SM_CAP_MASK_IS_RESET_SUPPD 0x00000010 517 #define SM_CAP_MASK_IS_APM_SUPPD 0x00000020 518 #define SM_CAP_MASK_IS_SLMAPP_SUPPD 0x00000040 519 #define SM_CAP_MASK_IS_NVRAM_MKEY 0x00000080 520 #define SM_CAP_MASK_IS_NVRAM_PKEY 0x00000100 521 #define SM_CAP_MASK_IS_LEDINFO_SUPPD 0x00000200 522 #define SM_CAP_MASK_IS_SM_DISABLED 0x00000400 523 #define SM_CAP_MASK_IS_SYSIMG_GUID_DISABLED 0x00000800 524 #define SM_CAP_MASK_IS_PKEY_SW_TRAP_DISABLED 0x00001000 525 #define SM_CAP_MASK_IS_CM_SUPPD 0x00010000 526 #define SM_CAP_MASK_IS_SNMP_SUPPD 0x00020000 527 #define SM_CAP_MASK_IS_DM_SUPPD 0x00080000 528 #define SM_CAP_MASK_IS_VM_SUPPD 0x00100000 529 #define SM_CAP_MASK_IS_DR_NOTICE_SUPPD 0x00200000 530 #define SM_CAP_MASK_IS_CAP_MASK_NOTICE_SUPPD 0x00400000 531 #define SM_CAP_MASK_IS_BOOT_MGMT_SUPPD 0x00800000 532 #define SM_CAP_MASK_IS_CLNT_REREG_SUPPD 0x02000000 533 534 /* Standard Encoding of DiagCode Bits 3-0: Table 133 */ 535 #define SM_DIAG_CODE_PORT_READY 0x0 536 #define SM_DIAG_CODE_PERFORMING_SELF_TEST 0x1 537 #define SM_DIAG_CODE_INITIALIZING 0x2 538 #define SM_DIAG_CODE_SOFT_ERROR 0x3 539 #define SM_DIAG_CODE_HARD_ERROR 0x4 540 541 #define SM_LINK_WIDTH_ENABLED_NOP 0x00 542 #define SM_LINK_WIDTH_ENABLED_1X 0x01 543 #define SM_LINK_WIDTH_ENABLED_4X 0x02 544 #define SM_LINK_WIDTH_ENABLED_1X_4X 0x03 545 #define SM_LINK_WIDTH_ENABLED_12X 0x08 546 #define SM_LINK_WIDTH_ENABLED_1X_12X 0x09 547 #define SM_LINK_WIDTH_ENABLED_4X_12X 0x0A 548 #define SM_LINK_WIDTH_ENABLED_1X_4X_12X 0x0B 549 #define SM_LINK_WIDTH_ENABLED_SUPPORTED 0xFF 550 551 #define SM_LINK_WIDTH_SUPP_1X 0x01 552 #define SM_LINK_WIDTH_SUPP_1X_4X 0x03 553 #define SM_LINK_WIDTH_SUPP_1X_4X_12X 0x0B 554 555 #define SM_LINK_WIDTH_ACTIVE_1X 0x01 556 #define SM_LINK_WIDTH_ACTIVE_4X 0x02 557 #define SM_LINK_WIDTH_ACTIVE_8X 0x04 558 #define SM_LINK_WIDTH_ACTIVE_12X 0x08 559 560 #define SM_LINK_SPEED_SUPP_2_5_GBPS 0x1 561 562 #define SM_PORT_STATE_NOP 0x0 563 #define SM_PORT_STATE_DOWN 0x1 564 #define SM_PORT_STATE_INITIALIZE 0x2 565 #define SM_PORT_STATE_ARMED 0x3 566 #define SM_PORT_STATE_ACTIVE 0x4 567 568 #define SM_PORT_PHYS_STATE_NOP 0x0 569 #define SM_PORT_PHYS_STATE_SLEEP 0x1 570 #define SM_PORT_PHYS_STATE_POLLING 0x2 571 #define SM_PORT_PHYS_STATE_DISABLED 0x3 572 #define SM_PORT_PHYS_STATE_TRAINING 0x4 573 #define SM_PORT_PHYS_STATE_LINK_UP 0x5 574 #define SM_PORT_PHYS_STATE_LINK_REC 0x6 575 576 #define SM_LINK_DOWN_DEFAULT_NOP 0x0 577 #define SM_LINK_DOWN_DEFAULT_SLEEP 0x1 578 #define SM_LINK_DOWN_DEFAULT_POLLING 0x2 579 580 /* MKey Protection Levels: Table 115 */ 581 #define SM_MKEY_PROT_BITS_ALL_SUCCEED 0x0 582 #define SM_MKEY_PROT_BITS_GETRESP_RESETS 0x1 583 #define SM_MKEY_PROT_BITS_SET_FAIL 0x2 584 #define SM_MKEY_PROT_BITS_SET_FAILX 0x3 585 586 #define SM_LINK_SPEED_ACTIVE_2_5_GBPS 0x1 587 #define SM_LINK_SPEED_ACTIVE_5_GBPS 0x2 588 #define SM_LINK_SPEED_ACTIVE_10_GBPS 0x4 589 590 #define SM_LINK_SPEED_ENABLED_NOP 0x0 591 #define SM_LINK_SPEED_ENABLED_2_5_GBPS 0x1 592 #define SM_LINK_SPEED_ENABLED_SUPP_VALUE 0xF 593 594 #define SM_NEIGHBOR_MTU_256 0x1 595 #define SM_NEIGHBOR_MTU_512 0x2 596 #define SM_NEIGHBOR_MTU_1024 0x3 597 #define SM_NEIGHBOR_MTU_2048 0x4 598 #define SM_NEIGHBOR_MTU_4096 0x5 599 600 #define SM_VL_CAP_VL0 0x1 601 #define SM_VL_CAP_VL0_VL1 0x2 602 #define SM_VL_CAP_VL0_VL3 0x3 603 #define SM_VL_CAP_VL0_VL7 0x4 604 #define SM_VL_CAP_VL0_VL14 0x5 605 606 #define SM_INIT_TYPE_NO_LOAD 0x1 607 #define SM_INIT_TYPE_PRESERVE_CONTENT 0x2 608 #define SM_INIT_TYPE_PRESERVE_PRESENCE 0x4 609 #define SM_INIT_TYPE_DO_NOT_RESUSCITATE 0x8 610 611 #define SM_INIT_TYPE_REPLY_NO_LOAD_REPLY 0x1 612 #define SM_INIT_TYPE_PRESERVE_CONTENT_REPLY 0x2 613 #define SM_INIT_TYPE_PRESERVE_PRESENCE_REPLY 0x4 614 615 #define SM_MTU_CAP_256 0x1 616 #define SM_MTU_CAP_512 0x2 617 #define SM_MTU_CAP_1024 0x3 618 #define SM_MTU_CAP_2048 0x4 619 #define SM_MTU_CAP_4096 0x5 620 621 #define SM_HOQ_LIFE_INFINITY 19 /* from IB spec 18.2.5.4 */ 622 623 #define SM_OPERATIONAL_VLS_NOP 0x0 624 #define SM_OPERATIONAL_VLS_VL0 0x1 625 #define SM_OPERATIONAL_VLS_VL0_VL1 0x2 626 #define SM_OPERATIONAL_VLS_VL0_VL3 0x3 627 #define SM_OPERATIONAL_VLS_VL0_VL7 0x4 628 #define SM_OPERATIONAL_VLS_VLO_VL14 0x5 629 630 #define SM_PART_ENF_IN_BOUND 0x8 631 #define SM_PART_ENF_OUT_BOUND 0x4 632 #define SM_FILTER_RAW_IN_BOUND 0x2 633 #define SM_FILTER_RAW_OUT_BOUND 0x1 634 635 /* P_Key Table: Table 134 */ 636 typedef struct sm_pkey_table_s { 637 uint16_t P_KeyTableBlocks[32]; /* List of 32 P_Key Block Elements */ 638 } sm_pkey_table_t; 639 640 /* P_Key Block Element: Table 135 */ 641 #if defined(_BIT_FIELDS_HTOL) 642 typedef struct sm_pkey_block_element_s { 643 uint16_t MembershipType :1; /* 0 is limited; 1 is full type */ 644 uint16_t P_KeyBase :15; /* base value of P_Key */ 645 } sm_pkey_block_element_t; 646 647 #elif defined(_BIT_FIELDS_LTOH) 648 649 typedef struct sm_pkey_block_element_s { 650 uint16_t P_KeyBase :15; /* base value of P_Key */ 651 uint16_t MembershipType :1; /* 0 is limited; 1 is full type */ 652 } sm_pkey_block_element_t; 653 #else 654 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 655 #endif /* _BIT_FIELDS_HTOL */ 656 657 /* 658 * SLtoVLMapping Table: Table 136 659 * Each field specifies the VL onto which packets using that SL are dropped. 660 */ 661 #if defined(_BIT_FIELDS_HTOL) 662 typedef struct sm_SLtoVL_mapping_table_s { 663 uint8_t SL0toVL :4; 664 uint8_t SL1toVL :4; 665 uint8_t SL2toVL :4; 666 uint8_t SL3toVL :4; 667 uint8_t SL4toVL :4; 668 uint8_t SL5toVL :4; 669 uint8_t SL6toVL :4; 670 uint8_t SL7toVL :4; 671 uint8_t SL8toVL :4; 672 uint8_t SL9toVL :4; 673 uint8_t SL10toVL :4; 674 uint8_t SL11toVL :4; 675 uint8_t SL12toVL :4; 676 uint8_t SL13toVL :4; 677 uint8_t SL14toVL :4; 678 uint8_t SL15toVL :4; 679 } sm_SLtoVL_mapping_table_t; 680 681 #elif defined(_BIT_FIELDS_LTOH) 682 683 typedef struct sm_SLtoVL_mapping_table_s { 684 uint8_t SL1toVL :4; 685 uint8_t SL0toVL :4; 686 uint8_t SL3toVL :4; 687 uint8_t SL2toVL :4; 688 uint8_t SL5toVL :4; 689 uint8_t SL4toVL :4; 690 uint8_t SL7toVL :4; 691 uint8_t SL6toVL :4; 692 uint8_t SL9toVL :4; 693 uint8_t SL8toVL :4; 694 uint8_t SL11toVL :4; 695 uint8_t SL10toVL :4; 696 uint8_t SL13toVL :4; 697 uint8_t SL12toVL :4; 698 uint8_t SL15toVL :4; 699 uint8_t SL14toVL :4; 700 } sm_SLtoVL_mapping_table_t; 701 #else 702 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 703 #endif /* _BIT_FIELDS_HTOL */ 704 705 /* VL/Weight Block Element: Table 138 */ 706 typedef struct sm_VL_weight_block_s { 707 uint8_t Reserved :4; 708 uint8_t VL :4; /* VL assoc. with this element */ 709 uint8_t Weight; /* weight assoc. with this element */ 710 } sm_VL_weight_block_t; 711 712 /* VLArbitration Table: Table 137 */ 713 typedef struct sm_VLarb_table_s { 714 sm_VL_weight_block_t VLWeightPairs[32]; 715 } sm_VLarb_table_t; 716 717 /* Defines and masks that go with VLArbitrationTable & address modifier */ 718 #define SM_LOW_PRI_VL_ARB_LOWER_32 0x1 719 #define SM_LOW_PRI_VL_ARB_UPPER_32 0x2 720 #define SM_HI_PRI_VL_ARB_LOWER_32 0x3 721 #define SM_HI_PRI_VL_ARB_UPPER_32 0x4 722 723 /* Defines that go with the linear forwarding table */ 724 #define SM_LFT_BLOCK_MAX 767 725 #define SM_LFT_PORTS_PER_BLOCK 64 726 727 /* Linear Forwarding Table: Table 139 */ 728 typedef struct sm_linear_forwarding_table_s { 729 uint8_t PortBlocks[64]; 730 } sm_linear_forwarding_table_t; 731 732 /* LID/Port Block Element: Table 142 */ 733 #if defined(_BIT_FIELDS_HTOL) 734 typedef struct sm_lid_port_block_s { 735 ib_lid_t LID; /* base LID */ 736 uint8_t Valid :1; /* this LID/Port pair is valid */ 737 uint8_t LMC :3; /* the LMC of this lid */ 738 uint8_t Reserved :4; 739 uint8_t Port; /* port to forward entries to */ 740 } sm_lid_port_block_t; 741 742 #elif defined(_BIT_FIELDS_LTOH) 743 744 typedef struct sm_lid_port_block_s { 745 ib_lid_t LID; /* base LID */ 746 uint8_t Reserved :4; 747 uint8_t LMC :3; /* the LMC of this lid */ 748 uint8_t Valid :1; /* this LID/Port pair is valid */ 749 uint8_t Port; /* port to forward entries to */ 750 } sm_lid_port_block_t; 751 #else 752 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 753 #endif /* _BIT_FIELDS_HTOL */ 754 755 /* Random Forwarding Table: Table 141 */ 756 typedef struct sm_random_forwarding_table_s { 757 sm_lid_port_block_t LIDPortBlocks[16]; 758 } sm_random_forwarding_table_t; 759 760 /* Multicast Forwarding Table: Table 143 */ 761 typedef struct sm_multicast_forwarding_table_s { 762 uint16_t PortMaskBlocks[32]; 763 } sm_multicast_forwarding_table_t; 764 765 /* 766 * SMInfo: Table 145 767 * SMInfo struct is applicable to all end ports hosting an SM 768 */ 769 #if defined(_BIT_FIELDS_HTOL) 770 typedef struct sm_sminfo_s { 771 ib_guid_t GUID; /* Port GUID hosting the SM */ 772 uint64_t SM_Key; /* Key of the SM */ 773 uint32_t ActCount; /* heartbeat counter */ 774 uint8_t Priority :4; /* priority */ 775 uint8_t SMState :4; /* SM's state */ 776 } sm_sminfo_t; 777 778 #elif defined(_BIT_FIELDS_LTOH) 779 780 typedef struct sm_sminfo_s { 781 ib_guid_t GUID; /* Port GUID hosting the SM */ 782 uint64_t SM_Key; /* Key of the SM */ 783 uint32_t ActCount; /* heartbeat counter */ 784 uint8_t SMState :4; /* SM's state */ 785 uint8_t Priority :4; /* priority */ 786 } sm_sminfo_t; 787 788 #else 789 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 790 #endif /* _BIT_FIELDS_HTOL */ 791 792 /* defines that go with the sminfo structure */ 793 794 /* SMState Defines */ 795 #define SM_SMSTATE_INACTIVE 0 796 #define SM_SMSTATE_DISCOVERING 1 797 #define SM_SMSTATE_STANDBY 2 798 #define SM_SMSTATE_MASTER 3 799 800 /* SMInfo Control Packets: Table 148 */ 801 #define SM_SMINFO_AM_HANDOVER 1 802 #define SM_SMINFO_AM_ACKNOWLEDGE 2 803 #define SM_SMINFO_AM_DISABLE 3 804 #define SM_SMINFO_AM_STANDBY 4 805 #define SM_SMINFO_AM_DISCOVER 5 806 807 /* attribute ID defines */ 808 #define SM_NOTICE_ATTRID 0x02 809 #define SM_NODEDESC_ATTRID 0x10 810 #define SM_NODEINFO_ATTRID 0x11 811 #define SM_SWITCHINFO_ATTRID 0x12 812 #define SM_GUIDINFO_ATTRID 0x14 813 #define SM_PORTINFO_ATTRID 0x15 814 #define SM_PKEY_TABLE_ATTRID 0x16 815 #define SM_SLTOVLTABLE_ATTRID 0x17 816 #define SM_VLARBITRATION_ATTRID 0x18 817 #define SM_LINEARFDB_ATTRID 0x19 818 #define SM_RANDOMFDB_ATTRID 0x1A 819 #define SM_MCASTFDB_ATTRID 0x1B 820 #define SM_SMINFO_ATTRID 0x20 821 #define SM_VENDORDIAG_ATTRID 0x30 822 #define SM_LEDINFO_ATTRID 0x31 823 824 /* VendorDiag: Table 146 */ 825 typedef struct sm_vendor_diag_s { 826 uint16_t NextIndex; /* next attr mod to get diag info */ 827 uint8_t DiagData[62]; /* vendor specific diag info */ 828 } sm_vendor_diag_t; 829 830 /* LedInfo: Table 147 */ 831 #if defined(_BIT_FIELDS_HTOL) 832 typedef struct sm_ledinfo_s { 833 uint32_t LedMask :1; /* 1 for LED on, 0 for off */ 834 uint32_t Reserved :31; 835 } sm_ledinfo_t; 836 837 #elif defined(_BIT_FIELDS_LTOH) 838 839 typedef struct sm_ledinfo_s { 840 uint32_t Reserved :31; 841 uint32_t LedMask :1; /* 1 for LED on, 0 for off */ 842 } sm_ledinfo_t; 843 844 #else 845 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined 846 #endif /* _BIT_FIELDS_HTOL */ 847 848 /* LED Info Defines */ 849 #define SM_LEDINFO_ON 0x1 850 #define SM_LEDINFO_OFF 0x0 851 852 #ifdef __cplusplus 853 } 854 #endif 855 856 #endif /* _SYS_IB_MGT_SM_ATTR_H */ 857