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.
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.
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]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_IB_MGT_SM_ATTR_H
27 #define _SYS_IB_MGT_SM_ATTR_H
30 * This file contains the definitions of the various attributes specified
31 * in IB spec volume 1, release 1.1, chapter 14.
38 #include <sys/ib/ib_types.h>
39 #include <sys/ib/mgt/ib_mad.h>
41 #define SM_MAX_DR_PATH 64 /* max ports in a DR path */
44 * LID routed smp class header
46 typedef struct sm_lid_class_hdr_s
{
52 * Directed route smp mad header
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 */
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 */
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 */
71 uint32_t AttributeModifier
; /* further scope to attributes */
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 */
79 #define SM_DR_SMP_STATUS_MASK 0x7FFF
82 * Direct route smp class header:
84 typedef struct sm_dr_class_hdr_s
{
91 typedef struct sm_dr_data_s
{
93 uint8_t InitialPath
[SM_MAX_DR_PATH
];
94 uint8_t ReturnPath
[SM_MAX_DR_PATH
];
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
114 * Notice Data details for various sm traps
116 /* Traps 64, 65, 66,and 67: Table 119 */
117 typedef struct sm_trap_64_s
{
119 ib_gid_t GIDADDR
; /* global identifier */
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
;
127 /* Trap 128: Table 120 */
128 typedef struct sm_trap_128_s
{
129 ib_lid_t LIDADDR
; /* trap generator's LID */
133 /* Traps 129, 130, and 131: Table 121 */
134 typedef struct sm_trap_129_s
{
136 ib_lid_t LIDADDR
; /* generator's LID */
137 uint8_t PORTNO
; /* generator's port */
141 typedef sm_trap_129_t sm_trap_130_t
;
142 typedef sm_trap_129_t sm_trap_131_t
;
144 /* Trap 144: Table 122 */
145 typedef struct sm_trap_144_s
{
147 ib_lid_t LIDADDR
; /* generator's LID */
149 uint32_t CAPABILITYMASK
; /* generator's CapMask */
153 /* Trap 145: Table 123 */
154 typedef struct sm_trap_145_s
{
158 ib_guid_t SYSTEMIMAGEGUID
; /* generator's SysImage GUID */
162 /* Trap 256: Table 124 */
163 #if defined(_BIT_FIELDS_HTOL)
164 typedef struct sm_trap_256_s
{
166 ib_lid_t LIDADDR
; /* generator's LID */
168 uint8_t METHOD
; /* method */
170 uint16_t ATTRIBUTEID
; /* attribute casuing the trap */
171 uint32_t ATTRIBUTEMODIFIER
; /* modifier for the attrib */
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 */
180 #elif defined(_BIT_FIELDS_LTOH)
182 typedef struct sm_trap_256_s
{
184 ib_lid_t LIDADDR
; /* generator's LID */
186 uint8_t METHOD
; /* method */
188 uint16_t ATTRIBUTEID
; /* attribute casuing the trap */
189 uint32_t ATTRIBUTEMODIFIER
; /* modifier for the attrib */
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 */
198 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
199 #endif /* _BIT_FIELDS_HTOL */
201 /* Traps 257 and 258: Table 125 */
202 #if defined(_BIT_FIELDS_HTOL)
203 typedef struct sm_trap_257_s
{
205 ib_lid_t LIDADDR1
; /* see spec description */
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 */
218 #elif defined(_BIT_FIELDS_LTOH)
220 typedef struct sm_trap_257_s
{
222 ib_lid_t LIDADDR1
; /* see spec description */
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 */
235 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
236 #endif /* _BIT_FIELDS_HTOL */
238 typedef sm_trap_257_t sm_trap_258_t
;
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 */
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 */
254 ib_lid_t SWLIDADDR
; /* lid of switch */
255 uint8_t PORTNO
; /* port number */
259 #elif defined(_BIT_FIELDS_LTOH)
261 typedef struct sm_trap_259_s
{
262 uint16_t DataValid
; /* validity of optional data */
263 ib_lid_t LIDADDR1
; /* see spec description */
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 */
273 ib_lid_t SWLIDADDR
; /* lid of switch */
274 uint8_t PORTNO
; /* port number */
278 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
279 #endif /* _BIT_FIELDS_HTOL */
282 * NodeDescription: Table 127
283 * NodeDescription is applicable to all ports of a node.
285 typedef struct sm_nodedesc_s
{
286 uint8_t NodeString
[64]; /* description string */
290 * NodeInfo: Table 128
291 * The value of some NodeInfo components varies by port within a node.
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 */
311 #elif defined(_BIT_FIELDS_LTOH)
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 */
330 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
331 #endif /* _BIT_FIELDS_HTOL */
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
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 */
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 */
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;
361 #elif defined(_BIT_FIELDS_LTOH)
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 */
371 uint8_t DefaultMulticastNotPrimaryPort
; /* mcast port when */
372 /* pkts from def port */
373 /* have DLID not in FDB */
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 */
384 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
385 #endif /* _BIT_FIELDS_HTOL */
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
398 /* GUIDInfo: Table 130 */
399 typedef struct sm_guidinfo_s
{
400 ib_guid_t GUIDBlocks
[8];
403 /* defines that go with guid info */
404 #define SM_GUIDINFO_BLOCK_MAX 31
407 * PortInfo: Table 132
408 * PortInfo is applicable to all ports of a node.
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 */
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 */
459 #elif defined(_BIT_FIELDS_LTOH)
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 */
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 */
509 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
510 #endif /* _BIT_FIELDS_HTOL */
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
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
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
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
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
560 #define SM_LINK_SPEED_SUPP_2_5_GBPS 0x1
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
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
576 #define SM_LINK_DOWN_DEFAULT_NOP 0x0
577 #define SM_LINK_DOWN_DEFAULT_SLEEP 0x1
578 #define SM_LINK_DOWN_DEFAULT_POLLING 0x2
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
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
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
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
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
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
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
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
621 #define SM_HOQ_LIFE_INFINITY 19 /* from IB spec 18.2.5.4 */
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
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
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 */
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
;
647 #elif defined(_BIT_FIELDS_LTOH)
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
;
654 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
655 #endif /* _BIT_FIELDS_HTOL */
658 * SLtoVLMapping Table: Table 136
659 * Each field specifies the VL onto which packets using that SL are dropped.
661 #if defined(_BIT_FIELDS_HTOL)
662 typedef struct sm_SLtoVL_mapping_table_s
{
679 } sm_SLtoVL_mapping_table_t
;
681 #elif defined(_BIT_FIELDS_LTOH)
683 typedef struct sm_SLtoVL_mapping_table_s
{
700 } sm_SLtoVL_mapping_table_t
;
702 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
703 #endif /* _BIT_FIELDS_HTOL */
705 /* VL/Weight Block Element: Table 138 */
706 typedef struct sm_VL_weight_block_s
{
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
;
712 /* VLArbitration Table: Table 137 */
713 typedef struct sm_VLarb_table_s
{
714 sm_VL_weight_block_t VLWeightPairs
[32];
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
723 /* Defines that go with the linear forwarding table */
724 #define SM_LFT_BLOCK_MAX 767
725 #define SM_LFT_PORTS_PER_BLOCK 64
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
;
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 */
739 uint8_t Port
; /* port to forward entries to */
740 } sm_lid_port_block_t
;
742 #elif defined(_BIT_FIELDS_LTOH)
744 typedef struct sm_lid_port_block_s
{
745 ib_lid_t LID
; /* base LID */
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
;
752 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
753 #endif /* _BIT_FIELDS_HTOL */
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
;
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
;
767 * SMInfo struct is applicable to all end ports hosting an SM
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 */
778 #elif defined(_BIT_FIELDS_LTOH)
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 */
789 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
790 #endif /* _BIT_FIELDS_HTOL */
792 /* defines that go with the sminfo structure */
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
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
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
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 */
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;
837 #elif defined(_BIT_FIELDS_LTOH)
839 typedef struct sm_ledinfo_s
{
840 uint32_t Reserved
:31;
841 uint32_t LedMask
:1; /* 1 for LED on, 0 for off */
845 #error One of _BIT_FIELDS_HTOL or _BIT_FIELDS_LTOH must be defined
846 #endif /* _BIT_FIELDS_HTOL */
848 /* LED Info Defines */
849 #define SM_LEDINFO_ON 0x1
850 #define SM_LEDINFO_OFF 0x0
856 #endif /* _SYS_IB_MGT_SM_ATTR_H */