docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / ib / mgt / sm_attr.h
blobe845651b4b7e491f8e744753c356c0922c882435
1 /*
2 * CDDL HEADER START
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]
19 * CDDL HEADER END
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.
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
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 {
47 uint64_t M_Key;
48 uint8_t Reserved[32];
49 } sm_lid_class_hdr_t;
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 */
70 uint16_t Reserved;
71 uint32_t AttributeModifier; /* further scope to attributes */
72 } sm_dr_mad_hdr_t;
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 */
79 #define SM_DR_SMP_STATUS_MASK 0x7FFF
82 * Direct route smp class header:
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;
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;
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 {
118 uint8_t Reserved[6];
119 ib_gid_t GIDADDR; /* global identifier */
120 uint8_t Padding[32];
121 } sm_trap_64_t;
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 */
130 uint8_t Padding[52];
131 } sm_trap_128_t;
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;
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 {
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;
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;
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;
180 #elif defined(_BIT_FIELDS_LTOH)
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 */
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;
218 #elif defined(_BIT_FIELDS_LTOH)
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 */
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 */
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;
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 */
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 */
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 */
287 } sm_nodedesc_t;
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 */
309 } sm_nodeinfo_t;
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 */
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 */
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 */
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;
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 */
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 */
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];
401 } sm_guidinfo_t;
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 */
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;
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 */
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 */
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 */
638 } sm_pkey_table_t;
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;
653 #else
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 {
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;
681 #elif defined(_BIT_FIELDS_LTOH)
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 */
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;
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;
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 */
738 uint8_t Reserved :4;
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 */
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 */
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;
766 * SMInfo: Table 145
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 */
776 } sm_sminfo_t;
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 */
786 } sm_sminfo_t;
788 #else
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 */
828 } sm_vendor_diag_t;
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;
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 */
842 } sm_ledinfo_t;
844 #else
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
852 #ifdef __cplusplus
854 #endif
856 #endif /* _SYS_IB_MGT_SM_ATTR_H */