[INCLUDE] update from Linux ib_types.h .
[mirror/winof/.git] / inc / iba / ib_types.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. \r
4  *\r
5  * This software is available to you under the OpenIB.org BSD license\r
6  * below:\r
7  *\r
8  *     Redistribution and use in source and binary forms, with or\r
9  *     without modification, are permitted provided that the following\r
10  *     conditions are met:\r
11  *\r
12  *      - Redistributions of source code must retain the above\r
13  *        copyright notice, this list of conditions and the following\r
14  *        disclaimer.\r
15  *\r
16  *      - Redistributions in binary form must reproduce the above\r
17  *        copyright notice, this list of conditions and the following\r
18  *        disclaimer in the documentation and/or other materials\r
19  *        provided with the distribution.\r
20  *\r
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
25  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
26  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
28  * SOFTWARE.\r
29  *\r
30  * $Id$\r
31  */\r
32 \r
33 \r
34 #if !defined(__IB_TYPES_H__)\r
35 #define __IB_TYPES_H__\r
36 \r
37 #include <complib/cl_types.h>\r
38 #include <complib/cl_byteswap.h>\r
39 \r
40 #ifdef CL_KERNEL\r
41         #define AL_EXPORT\r
42         #define AL_API\r
43         #define AL_INLINE       static inline\r
44 #else\r
45         #if defined( EXPORT_AL_SYMBOLS )\r
46                 #define AL_EXPORT       __declspec(dllexport)\r
47         #else\r
48                 #define AL_EXPORT       __declspec(dllimport)\r
49         #endif\r
50         #define AL_API          __stdcall\r
51         #define AL_INLINE       AL_EXPORT inline\r
52 #endif  /* CL_KERNEL */\r
53 \r
54 \r
55 #ifdef __cplusplus\r
56 extern "C"\r
57 {\r
58 #endif  /* __cplusplus */\r
59 \r
60 \r
61 /****h* IBA Base/Constants\r
62 * NAME\r
63 *       Constants\r
64 *\r
65 * DESCRIPTION\r
66 *       The following constants are used throughout the IBA code base.\r
67 *\r
68 *       Definitions are from the InfiniBand Architecture Specification v1.2\r
69 *\r
70 *********/\r
71 \r
72 /****d* IBA Base: Constants/MAD_BLOCK_SIZE\r
73 * NAME\r
74 *       MAD_BLOCK_SIZE\r
75 *\r
76 * DESCRIPTION\r
77 *       Size of a non-RMPP MAD datagram.\r
78 *\r
79 * SOURCE\r
80 */\r
81 #define MAD_BLOCK_SIZE                                          256\r
82 /**********/\r
83 \r
84 /****d* IBA Base: Constants/MAD_RMPP_HDR_SIZE\r
85 * NAME\r
86 *       MAD_RMPP_HDR_SIZE\r
87 *\r
88 * DESCRIPTION\r
89 *       Size of an RMPP header, including the common MAD header.\r
90 *\r
91 * SOURCE\r
92 */\r
93 #define MAD_RMPP_HDR_SIZE                                       36\r
94 /**********/\r
95 \r
96 /****d* IBA Base: Constants/MAD_RMPP_DATA_SIZE\r
97 * NAME\r
98 *       MAD_RMPP_DATA_SIZE\r
99 *\r
100 * DESCRIPTION\r
101 *       Size of an RMPP transaction data section.\r
102 *\r
103 * SOURCE\r
104 */\r
105 #define MAD_RMPP_DATA_SIZE              (MAD_BLOCK_SIZE - MAD_RMPP_HDR_SIZE)\r
106 /**********/\r
107 \r
108 /****d* IBA Base: Constants/MAD_BLOCK_GRH_SIZE\r
109 * NAME\r
110 *       MAD_BLOCK_GRH_SIZE\r
111 *\r
112 * DESCRIPTION\r
113 *       Size of a MAD datagram, including the GRH.\r
114 *\r
115 * SOURCE\r
116 */\r
117 #define MAD_BLOCK_GRH_SIZE                                      296\r
118 /**********/\r
119 \r
120 /****d* IBA Base: Constants/IB_LID_PERMISSIVE\r
121 * NAME\r
122 *       IB_LID_PERMISSIVE\r
123 *\r
124 * DESCRIPTION\r
125 *       Permissive LID\r
126 *\r
127 * SOURCE\r
128 */\r
129 #define IB_LID_PERMISSIVE                                       0xFFFF\r
130 /**********/\r
131 \r
132 /****d* IBA Base: Constants/IB_DEFAULT_PKEY\r
133 * NAME\r
134 *       IB_DEFAULT_PKEY\r
135 *\r
136 * DESCRIPTION\r
137 *       P_Key value for the default partition.\r
138 *\r
139 * SOURCE\r
140 */\r
141 #define IB_DEFAULT_PKEY                                         0xFFFF\r
142 /**********/\r
143 \r
144 /****d* IBA Base: Constants/IB_QP1_WELL_KNOWN_Q_KEY\r
145 * NAME\r
146 *       IB_QP1_WELL_KNOWN_Q_KEY\r
147 *\r
148 * DESCRIPTION\r
149 *       Well-known Q_Key for QP1 privileged mode access (15.4.2).\r
150 *\r
151 * SOURCE\r
152 */\r
153 #define IB_QP1_WELL_KNOWN_Q_KEY                         CL_NTOH32(0x80010000)\r
154 /*********/\r
155 \r
156 #define IB_QP0                                                          0\r
157 #define IB_QP1                                                          CL_NTOH32(1)\r
158 \r
159 #define IB_QP_PRIVILEGED_Q_KEY                          CL_NTOH32(0x80000000)\r
160 \r
161 /****d* IBA Base: Constants/IB_LID_UCAST_START\r
162 * NAME\r
163 *       IB_LID_UCAST_START\r
164 *\r
165 * DESCRIPTION\r
166 *       Lowest valid unicast LID value.\r
167 *\r
168 * SOURCE\r
169 */\r
170 #define IB_LID_UCAST_START_HO                           0x0001\r
171 #define IB_LID_UCAST_START                                      (CL_HTON16(IB_LID_UCAST_START_HO))\r
172 /**********/\r
173 \r
174 /****d* IBA Base: Constants/IB_LID_UCAST_END\r
175 * NAME\r
176 *       IB_LID_UCAST_END\r
177 *\r
178 * DESCRIPTION\r
179 *       Highest valid unicast LID value.\r
180 *\r
181 * SOURCE\r
182 */\r
183 #define IB_LID_UCAST_END_HO                                     0xBFFF\r
184 #define IB_LID_UCAST_END                                        (CL_HTON16(IB_LID_UCAST_END_HO))\r
185 /**********/\r
186 \r
187 /****d* IBA Base: Constants/IB_LID_MCAST_START\r
188 * NAME\r
189 *       IB_LID_MCAST_START\r
190 *\r
191 * DESCRIPTION\r
192 *       Lowest valid multicast LID value.\r
193 *\r
194 * SOURCE\r
195 */\r
196 #define IB_LID_MCAST_START_HO                           0xC000\r
197 #define IB_LID_MCAST_START                                      (CL_HTON16(IB_LID_MCAST_START_HO))\r
198 /**********/\r
199 \r
200 /****d* IBA Base: Constants/IB_LID_MCAST_END\r
201 * NAME\r
202 *       IB_LID_MCAST_END\r
203 *\r
204 * DESCRIPTION\r
205 *       Highest valid multicast LID value.\r
206 *\r
207 * SOURCE\r
208 */\r
209 #define IB_LID_MCAST_END_HO                                     0xFFFE\r
210 #define IB_LID_MCAST_END                                        (CL_HTON16(IB_LID_MCAST_END_HO))\r
211 /**********/\r
212 \r
213 /****d* IBA Base: Constants/IB_DEFAULT_SUBNET_PREFIX\r
214 * NAME\r
215 *       IB_DEFAULT_SUBNET_PREFIX\r
216 *\r
217 * DESCRIPTION\r
218 *       Default subnet GID prefix.\r
219 *\r
220 * SOURCE\r
221 */\r
222 #define IB_DEFAULT_SUBNET_PREFIX                        (CL_HTON64(0xFE80000000000000ULL))\r
223 /**********/\r
224 \r
225 /****d* IBA Base: Constants/IB_NODE_NUM_PORTS_MAX\r
226 * NAME\r
227 *       IB_NODE_NUM_PORTS_MAX\r
228 *\r
229 * DESCRIPTION\r
230 *       Maximum number of ports in a single node (14.2.5.7).\r
231 * SOURCE\r
232 */\r
233 #define IB_NODE_NUM_PORTS_MAX                           0xFE\r
234 /**********/\r
235 \r
236 /****d* IBA Base: Constants/IB_INVALID_PORT_NUM\r
237 * NAME\r
238 *       IB_INVALID_PORT_NUM\r
239 *\r
240 * DESCRIPTION\r
241 *       Value used to indicate an invalid port number (14.2.5.10).\r
242 *\r
243 * SOURCE\r
244 */\r
245 #define IB_INVALID_PORT_NUM                                     0xFF\r
246 /*********/\r
247 \r
248 /****d* IBA Base: Constants/IB_SUBNET_PATH_HOPS_MAX\r
249 * NAME\r
250 *       IB_SUBNET_PATH_HOPS_MAX\r
251 *\r
252 * DESCRIPTION\r
253 *       Maximum number of directed route switch hops in a subnet (14.2.1.2).\r
254 *\r
255 * SOURCE\r
256 */\r
257 #define IB_SUBNET_PATH_HOPS_MAX                         64\r
258 /*********/\r
259 \r
260 /****d* IBA Base: Constants/IB_PKEY_MAX_BLOCKS\r
261 * NAME\r
262 *       IB_PKEY_MAX_BLOCKS\r
263 *\r
264 * DESCRIPTION\r
265 *       Maximum number of PKEY blocks (14.2.5.7).\r
266 *\r
267 * SOURCE\r
268 */\r
269 #define IB_PKEY_MAX_BLOCKS                                      2048\r
270 /*********/\r
271 \r
272 /****d* IBA Base: Constants/IB_MCAST_MAX_BLOCK_ID\r
273 * NAME\r
274 *       IB_MCAST_MAX_BLOCK_ID\r
275 *\r
276 * DESCRIPTION\r
277 *       Maximum number of Multicast port mask blocks\r
278 *\r
279 * SOURCE\r
280 */\r
281 #define IB_MCAST_MAX_BLOCK_ID                           511\r
282 /*********/\r
283 \r
284 /****d* IBA Base: Constants/IB_MCAST_BLOCK_ID_MASK_HO\r
285 * NAME\r
286 *       IB_MCAST_BLOCK_ID_MASK_HO\r
287 *\r
288 * DESCRIPTION\r
289 *       Mask (host order) to recover the Multicast block ID.\r
290 *\r
291 * SOURCE\r
292 */\r
293 #define IB_MCAST_BLOCK_ID_MASK_HO                       0x000001FF\r
294 /*********/\r
295 \r
296 /****d* IBA Base: Constants/IB_MCAST_BLOCK_SIZE\r
297 * NAME\r
298 *       IB_MCAST_BLOCK_SIZE\r
299 *\r
300 * DESCRIPTION\r
301 *       Number of port mask entries in a multicast forwarding table block.\r
302 *\r
303 * SOURCE\r
304 */\r
305 #define IB_MCAST_BLOCK_SIZE                                     32\r
306 /*********/\r
307 \r
308 /****d* IBA Base: Constants/IB_MCAST_MASK_SIZE\r
309 * NAME\r
310 *       IB_MCAST_MASK_SIZE\r
311 *\r
312 * DESCRIPTION\r
313 *       Number of port mask bits in each entry in the multicast forwarding table.\r
314 *\r
315 * SOURCE\r
316 */\r
317 #define IB_MCAST_MASK_SIZE                                      16\r
318 /*********/\r
319 \r
320 /****d* IBA Base: Constants/IB_MCAST_POSITION_MASK_HO\r
321 * NAME\r
322 *       IB_MCAST_POSITION_MASK_HO\r
323 *\r
324 * DESCRIPTION\r
325 *       Mask (host order) to recover the multicast block position.\r
326 *\r
327 * SOURCE\r
328 */\r
329 #define IB_MCAST_POSITION_MASK_HO                               0xF0000000\r
330 /*********/\r
331 \r
332 /****d* IBA Base: Constants/IB_MCAST_POSITION_MAX\r
333 * NAME\r
334 *       IB_MCAST_POSITION_MAX\r
335 *\r
336 * DESCRIPTION\r
337 *       Maximum value for the multicast block position.\r
338 *\r
339 * SOURCE\r
340 */\r
341 #define IB_MCAST_POSITION_MAX                           0xF\r
342 /*********/\r
343 \r
344 /****d* IBA Base: Constants/IB_MCAST_POSITION_SHIFT\r
345 * NAME\r
346 *       IB_MCAST_POSITION_SHIFT\r
347 *\r
348 * DESCRIPTION\r
349 *       Shift value to normalize the multicast block position value.\r
350 *\r
351 * SOURCE\r
352 */\r
353 #define IB_MCAST_POSITION_SHIFT                         28\r
354 /*********/\r
355 \r
356 /****d* IBA Base: Constants/IB_PKEY_ENTRIES_MAX\r
357 * NAME\r
358 *       IB_PKEY_ENTRIES_MAX\r
359 *\r
360 * DESCRIPTION\r
361 *       Maximum number of PKEY entries per port (14.2.5.7).\r
362 *\r
363 * SOURCE\r
364 */\r
365 #define IB_PKEY_ENTRIES_MAX (IB_PKEY_MAX_BLOCKS * IB_PKEY_BLOCK_SIZE)\r
366 /*********/\r
367 \r
368 /****d* IBA Base: Constants/IB_PKEY_BASE_MASK\r
369 * NAME\r
370 *       IB_PKEY_BASE_MASK\r
371 *\r
372 * DESCRIPTION\r
373 *       Masks for the base P_Key value given a P_Key Entry.\r
374 *\r
375 * SOURCE\r
376 */\r
377 #define IB_PKEY_BASE_MASK                                       (CL_HTON16(0x7FFF))\r
378 /*********/\r
379 \r
380 /****d* IBA Base: Constants/IB_PKEY_TYPE_MASK\r
381 * NAME\r
382 *       IB_PKEY_TYPE_MASK\r
383 *\r
384 * DESCRIPTION\r
385 *       Masks for the P_Key membership type given a P_Key Entry.\r
386 *\r
387 * SOURCE\r
388 */\r
389 #define IB_PKEY_TYPE_MASK                                       (CL_NTOH16(0x8000))\r
390 /*********/\r
391 \r
392 /****d* IBA Base: Constants/IB_DEFAULT_PARTIAL_PKEY\r
393 * NAME\r
394 *       IB_DEFAULT_PARTIAL_PKEY \r
395 *\r
396 * DESCRIPTION\r
397 *       0x7FFF in network order\r
398 *\r
399 * SOURCE\r
400 */\r
401 #define IB_DEFAULT_PARTIAL_PKEY                                (CL_HTON16(0x7FFF))\r
402 /**********/\r
403 \r
404 /****d* IBA Base: Constants/IB_MCLASS_SUBN_LID\r
405 * NAME\r
406 *       IB_MCLASS_SUBN_LID\r
407 *\r
408 * DESCRIPTION\r
409 *       Subnet Management Class, Subnet Manager LID routed (13.4.4)\r
410 *\r
411 * SOURCE\r
412 */\r
413 #define IB_MCLASS_SUBN_LID                                      0x01\r
414 /**********/\r
415 \r
416 /****d* IBA Base: Constants/IB_MCLASS_SUBN_DIR\r
417 * NAME\r
418 *       IB_MCLASS_SUBN_DIR\r
419 *\r
420 * DESCRIPTION\r
421 *       Subnet Management Class, Subnet Manager directed route (13.4.4)\r
422 *\r
423 * SOURCE\r
424 */\r
425 #define IB_MCLASS_SUBN_DIR                                      0x81\r
426 /**********/\r
427 \r
428 /****d* IBA Base: Constants/IB_MCLASS_SUBN_ADM\r
429 * NAME\r
430 *       IB_MCLASS_SUBN_ADM\r
431 *\r
432 * DESCRIPTION\r
433 *       Subnet Management Class, Subnet Administration (13.4.4)\r
434 *\r
435 * SOURCE\r
436 */\r
437 #define IB_MCLASS_SUBN_ADM                                      0x03\r
438 /**********/\r
439 \r
440 /****d* IBA Base: Constants/IB_MCLASS_PERF\r
441 * NAME\r
442 *       IB_MCLASS_PERF\r
443 *\r
444 * DESCRIPTION\r
445 *       Subnet Management Class, Performance Manager (13.4.4)\r
446 *\r
447 * SOURCE\r
448 */\r
449 #define IB_MCLASS_PERF                                          0x04\r
450 /**********/\r
451 \r
452 /****d* IBA Base: Constants/IB_MCLASS_BM\r
453 * NAME\r
454 *       IB_MCLASS_BM\r
455 *\r
456 * DESCRIPTION\r
457 *       Subnet Management Class, Baseboard Manager (13.4.4)\r
458 *\r
459 * SOURCE\r
460 */\r
461 #define IB_MCLASS_BM                                            0x05\r
462 /**********/\r
463 \r
464 /****d* IBA Base: Constants/IB_MCLASS_DEV_MGMT\r
465 * NAME\r
466 *       IB_MCLASS_DEV_MGMT\r
467 *\r
468 * DESCRIPTION\r
469 *       Subnet Management Class, Device Management (13.4.4)\r
470 *\r
471 * SOURCE\r
472 */\r
473 #define IB_MCLASS_DEV_MGMT                                      0x06\r
474 /**********/\r
475 \r
476 /****d* IBA Base: Constants/IB_MCLASS_COMM_MGMT\r
477 * NAME\r
478 *       IB_MCLASS_COMM_MGMT\r
479 *\r
480 * DESCRIPTION\r
481 *       Subnet Management Class, Communication Management (13.4.4)\r
482 *\r
483 * SOURCE\r
484 */\r
485 #define IB_MCLASS_COMM_MGMT                                     0x07\r
486 /**********/\r
487 \r
488 /****d* IBA Base: Constants/IB_MCLASS_SNMP\r
489 * NAME\r
490 *       IB_MCLASS_SNMP\r
491 *\r
492 * DESCRIPTION\r
493 *       Subnet Management Class, SNMP Tunneling (13.4.4)\r
494 *\r
495 * SOURCE\r
496 */\r
497 #define IB_MCLASS_SNMP                                          0x08\r
498 /**********/\r
499 \r
500 /****d* IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MIN\r
501 * NAME\r
502 *       IB_MCLASS_VENDOR_LOW_RANGE_MIN\r
503 *\r
504 * DESCRIPTION\r
505 *       Subnet Management Class, Vendor Specific Low Range Start\r
506 *\r
507 * SOURCE\r
508 */\r
509 #define IB_MCLASS_VENDOR_LOW_RANGE_MIN 0x09\r
510 /**********/\r
511 \r
512 /****d* IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MAX\r
513 * NAME\r
514 *       IB_MCLASS_VENDOR_LOW_RANGE_MAX\r
515 *\r
516 * DESCRIPTION\r
517 *       Subnet Management Class, Vendor Specific Low Range End\r
518 *\r
519 * SOURCE\r
520 */\r
521 #define IB_MCLASS_VENDOR_LOW_RANGE_MAX 0x0f\r
522 /**********/\r
523 \r
524 /****d* IBA Base: Constants/IB_MCLASS_DEV_ADM\r
525 * NAME\r
526 *       IB_MCLASS_DEV_ADM\r
527 *\r
528 * DESCRIPTION\r
529 *       Subnet Management Class, Device Administration\r
530 *\r
531 * SOURCE\r
532 */\r
533 #define IB_MCLASS_DEV_ADM 0x10\r
534 /**********/\r
535 \r
536 /****d* IBA Base: Constants/IB_MCLASS_BIS\r
537 * NAME\r
538 *       IB_MCLASS_BIS\r
539 *\r
540 * DESCRIPTION\r
541 *       Subnet Management Class, BIS\r
542 *\r
543 * SOURCE\r
544 */\r
545 #define IB_MCLASS_BIS 0x12\r
546 /**********/\r
547 \r
548 /****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MIN\r
549 * NAME\r
550 *       IB_MCLASS_VENDOR_HIGH_RANGE_MIN\r
551 *\r
552 * DESCRIPTION\r
553 *       Subnet Management Class, Vendor Specific High Range Start\r
554 *\r
555 * SOURCE\r
556 */\r
557 #define IB_MCLASS_VENDOR_HIGH_RANGE_MIN 0x30\r
558 /**********/\r
559 \r
560 /****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MAX\r
561 * NAME\r
562 *       IB_MCLASS_VENDOR_HIGH_RANGE_MAX\r
563 *\r
564 * DESCRIPTION\r
565 *       Subnet Management Class, Vendor Specific High Range End\r
566 *\r
567 * SOURCE\r
568 */\r
569 #define IB_MCLASS_VENDOR_HIGH_RANGE_MAX 0x4f\r
570 /**********/\r
571 \r
572 /****f* IBA Base: Types/ib_class_is_vendor_specific_low\r
573 * NAME\r
574 *       ib_class_is_vendor_specific_low\r
575 *\r
576 * DESCRIPTION\r
577 *       Indicates if the Class Code if a vendor specific class from \r
578 *  the low range\r
579 *\r
580 * SYNOPSIS\r
581 */\r
582 static inline boolean_t\r
583 ib_class_is_vendor_specific_low(\r
584         IN              const   uint8_t class_code )\r
585 {\r
586         return( (class_code >= IB_MCLASS_VENDOR_LOW_RANGE_MIN) &&\r
587            (class_code <= IB_MCLASS_VENDOR_LOW_RANGE_MAX)) ;\r
588 }\r
589 /*\r
590 * PARAMETERS\r
591 *       class_code\r
592 *               [in] The Management Datagram Class Code\r
593 *\r
594 * RETURN VALUE\r
595 *       TRUE if the class is in the Low range of Vendor Specific MADs \r
596 *       FALSE otherwise.\r
597 *\r
598 * NOTES\r
599 *\r
600 * SEE ALSO\r
601 * IB_MCLASS_VENDOR_LOW_RANGE_MIN, IB_MCLASS_VENDOR_LOW_RANGE_MAX\r
602 *********/\r
603 \r
604 /****f* IBA Base: Types/ib_class_is_vendor_specific_high\r
605 * NAME\r
606 *       ib_class_is_vendor_specific_high\r
607 *\r
608 * DESCRIPTION\r
609 *       Indicates if the Class Code if a vendor specific class from \r
610 *  the high range\r
611 *\r
612 * SYNOPSIS\r
613 */\r
614 static inline boolean_t\r
615 ib_class_is_vendor_specific_high(\r
616         IN              const   uint8_t class_code )\r
617 {\r
618         return( (class_code >= IB_MCLASS_VENDOR_HIGH_RANGE_MIN) &&\r
619            (class_code <= IB_MCLASS_VENDOR_HIGH_RANGE_MAX)) ;\r
620 }\r
621 /*\r
622 * PARAMETERS\r
623 *       class_code\r
624 *               [in] The Management Datagram Class Code\r
625 *\r
626 * RETURN VALUE\r
627 *       TRUE if the class is in the High range of Vendor Specific MADs \r
628 *       FALSE otherwise.\r
629 *\r
630 * NOTES\r
631 *\r
632 * SEE ALSO\r
633 * IB_MCLASS_VENDOR_HIGH_RANGE_MIN, IB_MCLASS_VENDOR_HIGH_RANGE_MAX\r
634 *********/\r
635 \r
636 \r
637 /****f* IBA Base: Types/ib_class_is_vendor_specific\r
638 * NAME\r
639 *       ib_class_is_vendor_specific\r
640 *\r
641 * DESCRIPTION\r
642 *       Indicates if the Class Code if a vendor specific class\r
643 *\r
644 * SYNOPSIS\r
645 */\r
646 static inline boolean_t\r
647 ib_class_is_vendor_specific(\r
648         IN              const   uint8_t class_code )\r
649 {\r
650   return( ib_class_is_vendor_specific_low(class_code) ||\r
651                          ib_class_is_vendor_specific_high(class_code) );\r
652 }\r
653 /*\r
654 * PARAMETERS\r
655 *       class_code\r
656 *               [in] The Management Datagram Class Code\r
657 *\r
658 * RETURN VALUE\r
659 *       TRUE if the class is a Vendor Specific MAD\r
660 *       FALSE otherwise.\r
661 *\r
662 * NOTES\r
663 *\r
664 * SEE ALSO\r
665 *  ib_class_is_vendor_specific_low, ib_class_is_vendor_specific_high\r
666 *********/\r
667 \r
668 /****f* IBA Base: Types/ib_class_is_rmpp\r
669 * NAME\r
670 *       ib_class_is_rmpp\r
671 *\r
672 * DESCRIPTION\r
673 *       Indicates if the Class Code supports RMPP\r
674 *\r
675 * SYNOPSIS\r
676 */\r
677 AL_INLINE boolean_t     AL_API\r
678 ib_class_is_rmpp(\r
679         IN              const   uint8_t class_code )\r
680 {\r
681         return( (class_code == IB_MCLASS_SUBN_ADM) ||\r
682                 (class_code == IB_MCLASS_DEV_MGMT) ||\r
683                 (class_code == IB_MCLASS_DEV_ADM) ||\r
684                 (class_code == IB_MCLASS_BIS) ||\r
685                 ib_class_is_vendor_specific_high( class_code ) ); \r
686 }\r
687 /*\r
688 * PARAMETERS\r
689 *       class_code\r
690 *               [in] The Management Datagram Class Code\r
691 *\r
692 * RETURN VALUE\r
693 *       TRUE if the class supports RMPP\r
694 *       FALSE otherwise.\r
695 *\r
696 * NOTES\r
697 *\r
698 *********/\r
699 \r
700 /*\r
701  *      MAD methods\r
702  */\r
703 /****d* IBA Base: Constants/IB_MAX_METHOD\r
704 * NAME\r
705 *       IB_MAX_METHOD\r
706 *\r
707 * DESCRIPTION\r
708 *       Total number of methods available to a class, not including the R-bit.\r
709 *\r
710 * SOURCE\r
711 */\r
712 #define IB_MAX_METHODS                                          128\r
713 /**********/\r
714 /****d* IBA Base: Constants/IB_MAD_METHOD_RESP_MASK\r
715 * NAME\r
716 *       IB_MAD_METHOD_RESP_MASK\r
717 *\r
718 * DESCRIPTION\r
719 *       Response mask to extract 'R' bit from the method field. (13.4.5)\r
720 *\r
721 * SOURCE\r
722 */\r
723 #define IB_MAD_METHOD_RESP_MASK                         0x80\r
724 /**********/\r
725 /****d* IBA Base: Constants/IB_MAD_METHOD_GET\r
726 * NAME\r
727 *       IB_MAD_METHOD_GET\r
728 *\r
729 * DESCRIPTION\r
730 *       Get() Method (13.4.5)\r
731 *\r
732 * SOURCE\r
733 */\r
734 #define IB_MAD_METHOD_GET                                       0x01\r
735 /**********/\r
736 /****d* IBA Base: Constants/IB_MAD_METHOD_SET\r
737 * NAME\r
738 *       IB_MAD_METHOD_SET\r
739 *\r
740 * DESCRIPTION\r
741 *       Set() Method (13.4.5)\r
742 *\r
743 * SOURCE\r
744 */\r
745 #define IB_MAD_METHOD_SET                                       0x02\r
746 /**********/\r
747 /****d* IBA Base: Constants/IB_MAD_METHOD_GET_RESP\r
748 * NAME\r
749 *       IB_MAD_METHOD_GET_RESP\r
750 *\r
751 * DESCRIPTION\r
752 *       GetResp() Method (13.4.5)\r
753 *\r
754 * SOURCE\r
755 */\r
756 #define IB_MAD_METHOD_GET_RESP                          0x81\r
757 /**********/\r
758 \r
759 #define IB_MAD_METHOD_DELETE                            0x15\r
760 \r
761 /****d* IBA Base: Constants/IB_MAD_METHOD_GETTABLE\r
762 * NAME\r
763 *       IB_MAD_METHOD_GETTABLE\r
764 *\r
765 * DESCRIPTION\r
766 *       SubnAdmGetTable() Method (15.2.2)\r
767 *\r
768 * SOURCE\r
769 */\r
770 #define IB_MAD_METHOD_GETTABLE                          0x12\r
771 \r
772 /**********/\r
773 /****d* IBA Base: Constants/IB_MAD_METHOD_GETTABLE_RESP\r
774 * NAME\r
775 *       IB_MAD_METHOD_GETTABLE_RESP\r
776 *\r
777 * DESCRIPTION\r
778 *       SubnAdmGetTableResp() Method (15.2.2)\r
779 *\r
780 * SOURCE\r
781 */\r
782 #define IB_MAD_METHOD_GETTABLE_RESP                     0x92\r
783 \r
784 /**********/\r
785 \r
786 #define IB_MAD_METHOD_GETTRACETABLE                     0x13\r
787 #define IB_MAD_METHOD_GETMULTI                          0x14\r
788 #define IB_MAD_METHOD_GETMULTI_RESP                     0x94\r
789 \r
790 \r
791 /****d* IBA Base: Constants/IB_MAD_METHOD_SEND\r
792 * NAME\r
793 *       IB_MAD_METHOD_SEND\r
794 *\r
795 * DESCRIPTION\r
796 *       Send() Method (13.4.5)\r
797 *\r
798 * SOURCE\r
799 */\r
800 #define IB_MAD_METHOD_SEND                                      0x03\r
801 /**********/\r
802 /****d* IBA Base: Constants/IB_MAD_METHOD_TRAP\r
803 * NAME\r
804 *       IB_MAD_METHOD_TRAP\r
805 *\r
806 * DESCRIPTION\r
807 *       Trap() Method (13.4.5)\r
808 *\r
809 * SOURCE\r
810 */\r
811 #define IB_MAD_METHOD_TRAP                                      0x05\r
812 /**********/\r
813 /****d* IBA Base: Constants/IB_MAD_METHOD_REPORT\r
814 * NAME\r
815 *       IB_MAD_METHOD_REPORT\r
816 *\r
817 * DESCRIPTION\r
818 *       Report() Method (13.4.5)\r
819 *\r
820 * SOURCE\r
821 */\r
822 #define IB_MAD_METHOD_REPORT                            0x06\r
823 /**********/\r
824 /****d* IBA Base: Constants/IB_MAD_METHOD_REPORT_RESP\r
825 * NAME\r
826 *       IB_MAD_METHOD_REPORT_RESP\r
827 *\r
828 * DESCRIPTION\r
829 *       ReportResp() Method (13.4.5)\r
830 *\r
831 * SOURCE\r
832 */\r
833 #define IB_MAD_METHOD_REPORT_RESP                       0x86\r
834 /**********/\r
835 /****d* IBA Base: Constants/IB_MAD_METHOD_TRAP_REPRESS\r
836 * NAME\r
837 *       IB_MAD_METHOD_TRAP_REPRESS\r
838 *\r
839 * DESCRIPTION\r
840 *       TrapRepress() Method (13.4.5)\r
841 *\r
842 * SOURCE\r
843 */\r
844 #define IB_MAD_METHOD_TRAP_REPRESS                      0x07\r
845 /**********/\r
846 /****d* IBA Base: Constants/IB_MAD_STATUS_BUSY\r
847 * NAME\r
848 *       IB_MAD_STATUS_BUSY\r
849 *\r
850 * DESCRIPTION\r
851 *       Temporarily busy, MAD discarded (13.4.7)\r
852 *\r
853 * SOURCE\r
854 */\r
855 #define IB_MAD_STATUS_BUSY                                      (CL_HTON16(0x0001))\r
856 /**********/\r
857 /****d* IBA Base: Constants/IB_MAD_STATUS_REDIRECT\r
858 * NAME\r
859 *       IB_MAD_STATUS_REDIRECT\r
860 *\r
861 * DESCRIPTION\r
862 *       QP Redirection required (13.4.7)\r
863 *\r
864 * SOURCE\r
865 */\r
866 #define IB_MAD_STATUS_REDIRECT                          (CL_HTON16(0x0002))\r
867 /**********/\r
868 /****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_CLASS_VER\r
869 * NAME\r
870 *       IB_MAD_STATUS_UNSUP_CLASS_VER\r
871 *\r
872 * DESCRIPTION\r
873 *       Unsupported class version (13.4.7)\r
874 *\r
875 * SOURCE\r
876 */\r
877 #define IB_MAD_STATUS_UNSUP_CLASS_VER           (CL_HTON16(0x0004))\r
878 /**********/\r
879 /****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD\r
880 * NAME\r
881 *       IB_MAD_STATUS_UNSUP_METHOD\r
882 *\r
883 * DESCRIPTION\r
884 *       Unsupported method (13.4.7)\r
885 *\r
886 * SOURCE\r
887 */\r
888 #define IB_MAD_STATUS_UNSUP_METHOD                      (CL_HTON16(0x0008))\r
889 /**********/\r
890 /****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD_ATTR\r
891 * NAME\r
892 *       IB_MAD_STATUS_UNSUP_METHOD_ATTR\r
893 *\r
894 * DESCRIPTION\r
895 *       Unsupported method/attribute combination (13.4.7)\r
896 *\r
897 * SOURCE\r
898 */\r
899 #define IB_MAD_STATUS_UNSUP_METHOD_ATTR         (CL_HTON16(0x000C))\r
900 /**********/\r
901 /****d* IBA Base: Constants/IB_MAD_STATUS_INVALID_FIELD\r
902 * NAME\r
903 *       IB_MAD_STATUS_INVALID_FIELD\r
904 *\r
905 * DESCRIPTION\r
906 *       Attribute contains one or more invalid fields (13.4.7)\r
907 *\r
908 * SOURCE\r
909 */\r
910 #define IB_MAD_STATUS_INVALID_FIELD                     (CL_HTON16(0x001C))\r
911 /**********/\r
912 \r
913 #define IB_MAD_STATUS_CLASS_MASK                        (CL_HTON16(0xFF00))\r
914 \r
915 #define IB_SA_MAD_STATUS_SUCCESS                        (CL_HTON16(0x0000))\r
916 #define IB_SA_MAD_STATUS_NO_RESOURCES           (CL_HTON16(0x0100))\r
917 #define IB_SA_MAD_STATUS_REQ_INVALID            (CL_HTON16(0x0200))\r
918 #define IB_SA_MAD_STATUS_NO_RECORDS                     (CL_HTON16(0x0300))\r
919 #define IB_SA_MAD_STATUS_TOO_MANY_RECORDS       (CL_HTON16(0x0400))\r
920 #define IB_SA_MAD_STATUS_INVALID_GID            (CL_HTON16(0x0500))\r
921 #define IB_SA_MAD_STATUS_INSUF_COMPS            (CL_HTON16(0x0600))\r
922 \r
923 #define IB_DM_MAD_STATUS_NO_IOC_RESP            (CL_HTON16(0x0100))\r
924 #define IB_DM_MAD_STATUS_NO_SVC_ENTRIES         (CL_HTON16(0x0200))\r
925 #define IB_DM_MAD_STATUS_IOC_FAILURE            (CL_HTON16(0x8000))\r
926 \r
927 /****d* IBA Base: Constants/IB_MAD_ATTR_CLASS_PORT_INFO\r
928 * NAME\r
929 *       IB_MAD_ATTR_CLASS_PORT_INFO\r
930 *\r
931 * DESCRIPTION\r
932 *       ClassPortInfo attribute (13.4.8)\r
933 *\r
934 * SOURCE\r
935 */\r
936 #define IB_MAD_ATTR_CLASS_PORT_INFO                     (CL_NTOH16(0x0001))\r
937 /**********/\r
938 /****d* IBA Base: Constants/IB_MAD_ATTR_NOTICE\r
939 * NAME\r
940 *       IB_MAD_ATTR_NOTICE\r
941 *\r
942 * DESCRIPTION\r
943 *       Notice attribute (13.4.8)\r
944 *\r
945 * SOURCE\r
946 */\r
947 #define IB_MAD_ATTR_NOTICE                                      (CL_NTOH16(0x0002))\r
948 /**********/\r
949 /****d* IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO\r
950 * NAME\r
951 *       IB_MAD_ATTR_INFORM_INFO\r
952 *\r
953 * DESCRIPTION\r
954 *       InformInfo attribute (13.4.8)\r
955 *\r
956 * SOURCE\r
957 */\r
958 #define IB_MAD_ATTR_INFORM_INFO                         (CL_NTOH16(0x0003))\r
959 /**********/\r
960 /****d* IBA Base: Constants/IB_MAD_ATTR_NODE_DESC\r
961 * NAME\r
962 *       IB_MAD_ATTR_NODE_DESC\r
963 *\r
964 * DESCRIPTION\r
965 *       NodeDescription attribute (14.2.5)\r
966 *\r
967 * SOURCE\r
968 */\r
969 #define IB_MAD_ATTR_NODE_DESC                           (CL_NTOH16(0x0010))\r
970 /*********/\r
971 /****d* IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_CTRL\r
972 * NAME\r
973 *       IB_MAD_ATTR_PORT_SMPL_CTRL\r
974 *\r
975 * DESCRIPTION\r
976 *       NodeDescription attribute (16.1.2)\r
977 *\r
978 * SOURCE\r
979 */\r
980 #define IB_MAD_ATTR_PORT_SMPL_CTRL                      (CL_NTOH16(0x0010))\r
981 /**********/\r
982 /****d* IBA Base: Constants/IB_MAD_ATTR_NODE_INFO\r
983 * NAME\r
984 *       IB_MAD_ATTR_NODE_INFO\r
985 *\r
986 * DESCRIPTION\r
987 *       NodeInfo attribute (14.2.5)\r
988 *\r
989 * SOURCE\r
990 */\r
991 #define IB_MAD_ATTR_NODE_INFO                           (CL_NTOH16(0x0011))\r
992 /**********/\r
993 /****d* IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_RSLT\r
994 * NAME\r
995 *       IB_MAD_ATTR_PORT_SMPL_RSLT\r
996 *\r
997 * DESCRIPTION\r
998 *       NodeInfo attribute (16.1.2)\r
999 *\r
1000 * SOURCE\r
1001 */\r
1002 #define IB_MAD_ATTR_PORT_SMPL_RSLT                      (CL_NTOH16(0x0011))\r
1003 /**********/\r
1004 /****d* IBA Base: Constants/IB_MAD_ATTR_SWITCH_INFO\r
1005 * NAME\r
1006 *       IB_MAD_ATTR_SWITCH_INFO\r
1007 *\r
1008 * DESCRIPTION\r
1009 *       SwitchInfo attribute (14.2.5)\r
1010 *\r
1011 * SOURCE\r
1012 */\r
1013 #define IB_MAD_ATTR_SWITCH_INFO                         (CL_NTOH16(0x0012))\r
1014 /**********/\r
1015 /****d* IBA Base: Constants/IB_MAD_ATTR_PORT_CNTRS\r
1016 * NAME\r
1017 *       IB_MAD_ATTR_PORT_CNTRS\r
1018 *\r
1019 * DESCRIPTION\r
1020 *       SwitchInfo attribute (16.1.2)\r
1021 *\r
1022 * SOURCE\r
1023 */\r
1024 #define IB_MAD_ATTR_PORT_CNTRS                          (CL_NTOH16(0x0012))\r
1025 /**********/\r
1026 /****d* IBA Base: Constants/IB_MAD_ATTR_GUID_INFO\r
1027 * NAME\r
1028 *       IB_MAD_ATTR_GUID_INFO\r
1029 *\r
1030 * DESCRIPTION\r
1031 *       GUIDInfo attribute (14.2.5)\r
1032 *\r
1033 * SOURCE\r
1034 */\r
1035 #define IB_MAD_ATTR_GUID_INFO                           (CL_NTOH16(0x0014))\r
1036 /**********/\r
1037 /****d* IBA Base: Constants/IB_MAD_ATTR_PORT_INFO\r
1038 * NAME\r
1039 *       IB_MAD_ATTR_PORT_INFO\r
1040 *\r
1041 * DESCRIPTION\r
1042 *       PortInfo attribute (14.2.5)\r
1043 *\r
1044 * SOURCE\r
1045 */\r
1046 #define IB_MAD_ATTR_PORT_INFO                           (CL_NTOH16(0x0015))\r
1047 /**********/\r
1048 /****d* IBA Base: Constants/IB_MAD_ATTR_P_KEY_TABLE\r
1049 * NAME\r
1050 *       IB_MAD_ATTR_P_KEY_TABLE\r
1051 *\r
1052 * DESCRIPTION\r
1053 *       PartitionTable attribute (14.2.5)\r
1054 *\r
1055 * SOURCE\r
1056 */\r
1057 #define IB_MAD_ATTR_P_KEY_TABLE                         (CL_NTOH16(0x0016))\r
1058 /**********/\r
1059 /****d* IBA Base: Constants/IB_MAD_ATTR_SLVL_TABLE\r
1060 * NAME\r
1061 *       IB_MAD_ATTR_SLVL_TABLE\r
1062 *\r
1063 * DESCRIPTION\r
1064 *       SL VL Mapping Table attribute (14.2.5)\r
1065 *\r
1066 * SOURCE\r
1067 */\r
1068 #define IB_MAD_ATTR_SLVL_TABLE                          (CL_NTOH16(0x0017))\r
1069 /**********/\r
1070 /****d* IBA Base: Constants/IB_MAD_ATTR_VL_ARBITRATION\r
1071 * NAME\r
1072 *       IB_MAD_ATTR_VL_ARBITRATION\r
1073 *\r
1074 * DESCRIPTION\r
1075 *       VL Arbitration Table attribute (14.2.5)\r
1076 *\r
1077 * SOURCE\r
1078 */\r
1079 #define IB_MAD_ATTR_VL_ARBITRATION                      (CL_NTOH16(0x0018))\r
1080 /**********/\r
1081 /****d* IBA Base: Constants/IB_MAD_ATTR_LIN_FWD_TBL\r
1082 * NAME\r
1083 *       IB_MAD_ATTR_LIN_FWD_TBL\r
1084 *\r
1085 * DESCRIPTION\r
1086 *       Switch linear forwarding table\r
1087 *\r
1088 * SOURCE\r
1089 */\r
1090 #define IB_MAD_ATTR_LIN_FWD_TBL                         (CL_NTOH16(0x0019))\r
1091 /**********/\r
1092 /****d* IBA Base: Constants/IB_MAD_ATTR_RND_FWD_TBL\r
1093 * NAME\r
1094 *       IB_MAD_ATTR_RND_FWD_TBL\r
1095 *\r
1096 * DESCRIPTION\r
1097 *       Switch random forwarding table\r
1098 *\r
1099 * SOURCE\r
1100 */\r
1101 #define IB_MAD_ATTR_RND_FWD_TBL                         (CL_NTOH16(0x001A))\r
1102 /**********/\r
1103 /****d* IBA Base: Constants/IB_MAD_ATTR_MCAST_FWD_TBL\r
1104 * NAME\r
1105 *       IB_MAD_ATTR_MCAST_FWD_TBL\r
1106 *\r
1107 * DESCRIPTION\r
1108 *       Switch multicast forwarding table\r
1109 *\r
1110 * SOURCE\r
1111 */\r
1112 #define IB_MAD_ATTR_MCAST_FWD_TBL                       (CL_NTOH16(0x001B))\r
1113 /**********/\r
1114 \r
1115 /****d* IBA Base: Constants/IB_MAD_ATTR_NODE_RECORD\r
1116 * NAME\r
1117 *       IB_MAD_ATTR_NODE_RECORD\r
1118 *\r
1119 * DESCRIPTION\r
1120 *       NodeRecord attribute (15.2.5)\r
1121 *\r
1122 * SOURCE\r
1123 */\r
1124 #define IB_MAD_ATTR_NODE_RECORD                         (CL_NTOH16(0x0011))\r
1125 /**********/\r
1126 /****d* IBA Base: Constants/IB_MAD_ATTR_PORTINFO_RECORD\r
1127 * NAME\r
1128 *       IB_MAD_ATTR_PORTINFO_RECORD\r
1129 *\r
1130 * DESCRIPTION\r
1131 *       PortInfoRecord attribute (15.2.5)\r
1132 *\r
1133 * SOURCE\r
1134 */\r
1135 #define IB_MAD_ATTR_PORTINFO_RECORD                     (CL_NTOH16(0x0012))\r
1136 /**********/\r
1137 \r
1138 \r
1139 /****d* IBA Base: Constants/IB_MAD_ATTR_LINK_RECORD\r
1140 * NAME\r
1141 *       IB_MAD_ATTR_LINK_RECORD\r
1142 *\r
1143 * DESCRIPTION\r
1144 *       LinkRecord attribute (15.2.5)\r
1145 *\r
1146 * SOURCE\r
1147 */\r
1148 #define IB_MAD_ATTR_LINK_RECORD                         (CL_NTOH16(0x0020))\r
1149 /**********/\r
1150 \r
1151 /****d* IBA Base: Constants/IB_MAD_ATTR_SM_INFO\r
1152 * NAME\r
1153 *       IB_MAD_ATTR_SM_INFO\r
1154 *\r
1155 * DESCRIPTION\r
1156 *       SMInfo attribute (14.2.5)\r
1157 *\r
1158 * SOURCE\r
1159 */\r
1160 #define IB_MAD_ATTR_SM_INFO                                     (CL_NTOH16(0x0020))\r
1161 /**********/\r
1162 \r
1163 /****d* IBA Base: Constants/IB_MAD_ATTR_SMINFO_RECORD\r
1164 * NAME\r
1165 *       IB_MAD_ATTR_SMINFO_RECORD\r
1166 *\r
1167 * DESCRIPTION\r
1168 *       SmInfoRecord attribute (15.2.5)\r
1169 *\r
1170 * SOURCE\r
1171 */\r
1172 #define IB_MAD_ATTR_SMINFO_RECORD                       (CL_NTOH16(0x0018))\r
1173 /**********/\r
1174 \r
1175 /****d* IBA Base: Constants/IB_MAD_ATTR_GUIDINFO_RECORD\r
1176 * NAME\r
1177 *       IB_MAD_ATTR_GUIDINFO_RECORD\r
1178 *\r
1179 * DESCRIPTION\r
1180 *       GuidInfoRecord attribute (15.2.5)\r
1181 *\r
1182 * SOURCE\r
1183 */\r
1184 #define IB_MAD_ATTR_GUIDINFO_RECORD                     (CL_NTOH16(0x0030))\r
1185 /**********/\r
1186 \r
1187 /****d* IBA Base: Constants/IB_MAD_ATTR_VENDOR_DIAG\r
1188 * NAME\r
1189 *       IB_MAD_ATTR_VENDOR_DIAG\r
1190 *\r
1191 * DESCRIPTION\r
1192 *       VendorDiag attribute (14.2.5)\r
1193 *\r
1194 * SOURCE\r
1195 */\r
1196 #define IB_MAD_ATTR_VENDOR_DIAG                         (CL_NTOH16(0x0030))\r
1197 /**********/\r
1198 /****d* IBA Base: Constants/IB_MAD_ATTR_LED_INFO\r
1199 * NAME\r
1200 *       IB_MAD_ATTR_LED_INFO\r
1201 *\r
1202 * DESCRIPTION\r
1203 *       LedInfo attribute (14.2.5)\r
1204 *\r
1205 * SOURCE\r
1206 */\r
1207 #define IB_MAD_ATTR_LED_INFO                            (CL_NTOH16(0x0031))\r
1208 /**********/\r
1209 /****d* IBA Base: Constants/IB_MAD_ATTR_SERVICE_RECORD\r
1210 * NAME\r
1211 *       IB_MAD_ATTR_SERVICE_RECORD\r
1212 *\r
1213 * DESCRIPTION\r
1214 *       ServiceRecord attribute (15.2.5)\r
1215 *\r
1216 * SOURCE\r
1217 */\r
1218 #define IB_MAD_ATTR_SERVICE_RECORD                      (CL_NTOH16(0x0031))\r
1219 /**********/\r
1220 /****d* IBA Base: Constants/IB_MAD_ATTR_LFT_RECORD\r
1221 * NAME\r
1222 *       IB_MAD_ATTR_LFT_RECORD\r
1223 *\r
1224 * DESCRIPTION\r
1225 *       LinearForwardingTableRecord attribute (15.2.5.6)\r
1226 *\r
1227 * SOURCE\r
1228 */\r
1229 #define IB_MAD_ATTR_LFT_RECORD                  (CL_NTOH16(0x0015))\r
1230 /**********/\r
1231 /****d* IBA Base: Constants/IB_MAD_ATTR_PKEYTBL_RECORD\r
1232 * NAME\r
1233 *       IB_MAD_ATTR_PKEYTBL_RECORD\r
1234 *\r
1235 * DESCRIPTION\r
1236 *       PKEY Table Record attribute (15.2.5)\r
1237 *\r
1238 * SOURCE\r
1239 */\r
1240 #define IB_MAD_ATTR_PKEY_TBL_RECORD                     (CL_NTOH16(0x0033))\r
1241 /**********/\r
1242 /****d* IBA Base: Constants/IB_MAD_ATTR_PATH_RECORD\r
1243 * NAME\r
1244 *       IB_MAD_ATTR_PATH_RECORD\r
1245 *\r
1246 * DESCRIPTION\r
1247 *       PathRecord attribute (15.2.5)\r
1248 *\r
1249 * SOURCE\r
1250 */\r
1251 #define IB_MAD_ATTR_PATH_RECORD                         (CL_NTOH16(0x0035))\r
1252 /**********/\r
1253 /****d* IBA Base: Constants/IB_MAD_ATTR_VLARB_RECORD\r
1254 * NAME\r
1255 *       IB_MAD_ATTR_VLARB_RECORD\r
1256 *\r
1257 * DESCRIPTION\r
1258 *       VL Arbitration Table Record attribute (15.2.5)\r
1259 *\r
1260 * SOURCE\r
1261 */\r
1262 #define IB_MAD_ATTR_VLARB_RECORD                        (CL_NTOH16(0x0036))\r
1263 /**********/\r
1264 /****d* IBA Base: Constants/IB_MAD_ATTR_SLVL_RECORD\r
1265 * NAME\r
1266 *       IB_MAD_ATTR_SLVL_RECORD\r
1267 *\r
1268 * DESCRIPTION\r
1269 *       SLtoVL Mapping Table Record attribute (15.2.5)\r
1270 *\r
1271 * SOURCE\r
1272 */\r
1273 #define IB_MAD_ATTR_SLVL_RECORD                         (CL_NTOH16(0x0013))\r
1274 /**********/\r
1275 /****d* IBA Base: Constants/IB_MAD_ATTR_MCMEMBER_RECORD\r
1276 * NAME\r
1277 *       IB_MAD_ATTR_MCMEMBER_RECORD\r
1278 *\r
1279 * DESCRIPTION\r
1280 *       MCMemberRecord attribute (15.2.5)\r
1281 *\r
1282 * SOURCE\r
1283 */\r
1284 #define IB_MAD_ATTR_MCMEMBER_RECORD                     (CL_NTOH16(0x0038))\r
1285 /**********/\r
1286 /****d* IBA Base: Constants/IB_MAD_ATTR_TRACE_RECORD\r
1287 * NAME\r
1288 *       IB_MAD_ATTR_MTRACE_RECORD\r
1289 *\r
1290 * DESCRIPTION\r
1291 *       TraceRecord attribute (15.2.5)\r
1292 *\r
1293 * SOURCE\r
1294 */\r
1295 #define IB_MAD_ATTR_TRACE_RECORD                        (CL_NTOH16(0x0039))\r
1296 /**********/\r
1297 /****d* IBA Base: Constants/IB_MAD_ATTR_MULTIPATH_RECORD\r
1298 * NAME\r
1299 *       IB_MAD_ATTR_MULTIPATH_RECORD\r
1300 *\r
1301 * DESCRIPTION\r
1302 *       MultiPathRecord attribute (15.2.5)\r
1303 *\r
1304 * SOURCE\r
1305 */\r
1306 #define IB_MAD_ATTR_MULTIPATH_RECORD                    (CL_NTOH16(0x003A))\r
1307 /**********/\r
1308 /****d* IBA Base: Constants/IB_MAD_ATTR_SVC_ASSOCIATION_RECORD\r
1309 * NAME\r
1310 *       IB_MAD_ATTR_SVC_ASSOCIATION_RECORD\r
1311 *\r
1312 * DESCRIPTION\r
1313 *       Service Association Record attribute (15.2.5)\r
1314 *\r
1315 * SOURCE\r
1316 */\r
1317 #define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD              (CL_NTOH16(0x003B))\r
1318 /**********/\r
1319 \r
1320 /****d* IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO_RECORD\r
1321 * NAME\r
1322 *       IB_MAD_ATTR_INFORM_INFO_RECORD\r
1323 *\r
1324 * DESCRIPTION\r
1325 *       InformInfo Record attribute (15.2.5)\r
1326 *\r
1327 * SOURCE\r
1328 */\r
1329 #define IB_MAD_ATTR_INFORM_INFO_RECORD                  (CL_NTOH16(0x00F3))\r
1330 \r
1331 /****d* IBA Base: Constants/IB_MAD_ATTR_IO_UNIT_INFO\r
1332 * NAME\r
1333 *       IB_MAD_ATTR_IO_UNIT_INFO\r
1334 *\r
1335 * DESCRIPTION\r
1336 *       IOUnitInfo attribute (16.3.3)\r
1337 *\r
1338 * SOURCE\r
1339 */\r
1340 #define IB_MAD_ATTR_IO_UNIT_INFO                        (CL_NTOH16(0x0010))\r
1341 /**********/\r
1342 /****d* IBA Base: Constants/IB_MAD_ATTR_IOC_PROFILE\r
1343 * NAME\r
1344 *       IB_MAD_ATTR_IOC_PROFILE\r
1345 *\r
1346 * DESCRIPTION\r
1347 *       IOControllerProfile attribute (16.3.3)\r
1348 *\r
1349 * SOURCE\r
1350 */\r
1351 #define IB_MAD_ATTR_IOC_PROFILE                         (CL_NTOH16(0x0011))\r
1352 /**********/\r
1353 /****d* IBA Base: Constants/IB_MAD_ATTR_SERVICE_ENTRIES\r
1354 * NAME\r
1355 *       IB_MAD_ATTR_SERVICE_ENTRIES\r
1356 *\r
1357 * DESCRIPTION\r
1358 *       ServiceEntries attribute (16.3.3)\r
1359 *\r
1360 * SOURCE\r
1361 */\r
1362 #define IB_MAD_ATTR_SERVICE_ENTRIES                     (CL_NTOH16(0x0012))\r
1363 /**********/\r
1364 /****d* IBA Base: Constants/IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT\r
1365 * NAME\r
1366 *       IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT\r
1367 *\r
1368 * DESCRIPTION\r
1369 *       DiagnosticTimeout attribute (16.3.3)\r
1370 *\r
1371 * SOURCE\r
1372 */\r
1373 #define IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT          (CL_NTOH16(0x0020))\r
1374 /**********/\r
1375 /****d* IBA Base: Constants/IB_MAD_ATTR_PREPARE_TO_TEST\r
1376 * NAME\r
1377 *       IB_MAD_ATTR_PREPARE_TO_TEST\r
1378 *\r
1379 * DESCRIPTION\r
1380 *       PrepareToTest attribute (16.3.3)\r
1381 *\r
1382 * SOURCE\r
1383 */\r
1384 #define IB_MAD_ATTR_PREPARE_TO_TEST                     (CL_NTOH16(0x0021))\r
1385 /**********/\r
1386 /****d* IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_ONCE\r
1387 * NAME\r
1388 *       IB_MAD_ATTR_TEST_DEVICE_ONCE\r
1389 *\r
1390 * DESCRIPTION\r
1391 *       TestDeviceOnce attribute (16.3.3)\r
1392 *\r
1393 * SOURCE\r
1394 */\r
1395 #define IB_MAD_ATTR_TEST_DEVICE_ONCE            (CL_NTOH16(0x0022))\r
1396 /**********/\r
1397 /****d* IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_LOOP\r
1398 * NAME\r
1399 *       IB_MAD_ATTR_TEST_DEVICE_LOOP\r
1400 *\r
1401 * DESCRIPTION\r
1402 *       TestDeviceLoop attribute (16.3.3)\r
1403 *\r
1404 * SOURCE\r
1405 */\r
1406 #define IB_MAD_ATTR_TEST_DEVICE_LOOP            (CL_NTOH16(0x0023))\r
1407 /**********/\r
1408 /****d* IBA Base: Constants/IB_MAD_ATTR_DIAG_CODE\r
1409 * NAME\r
1410 *       IB_MAD_ATTR_DIAG_CODE\r
1411 *\r
1412 * DESCRIPTION\r
1413 *       DiagCode attribute (16.3.3)\r
1414 *\r
1415 * SOURCE\r
1416 */\r
1417 #define IB_MAD_ATTR_DIAG_CODE                           (CL_NTOH16(0x0024))\r
1418 /**********/\r
1419 \r
1420 /****d* IBA Base: Constants/IB_MAD_ATTR_SVC_ASSOCIATION_RECORD\r
1421 * NAME\r
1422 *       IB_MAD_ATTR_SVC_ASSOCIATION_RECORD\r
1423 *\r
1424 * DESCRIPTION\r
1425 *       Service Association Record attribute (15.2.5)\r
1426 *\r
1427 * SOURCE\r
1428 */\r
1429 #define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD      (CL_NTOH16(0x003B))\r
1430 /**********/\r
1431 /****d* IBA Base: Constants/IB_NODE_TYPE_CA\r
1432 * NAME\r
1433 *       IB_NODE_TYPE_CA\r
1434 *\r
1435 * DESCRIPTION\r
1436 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1437 *\r
1438 * SOURCE\r
1439 */\r
1440 #define IB_NODE_TYPE_CA                                         0x01\r
1441 /**********/\r
1442 /****d* IBA Base: Constants/IB_NODE_TYPE_SWITCH\r
1443 * NAME\r
1444 *       IB_NODE_TYPE_SWITCH\r
1445 *\r
1446 * DESCRIPTION\r
1447 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1448 *\r
1449 * SOURCE\r
1450 */\r
1451 #define IB_NODE_TYPE_SWITCH                                     0x02\r
1452 /**********/\r
1453 /****d* IBA Base: Constants/IB_NODE_TYPE_ROUTER\r
1454 * NAME\r
1455 *       IB_NODE_TYPE_ROUTER\r
1456 *\r
1457 * DESCRIPTION\r
1458 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1459 *\r
1460 * SOURCE\r
1461 */\r
1462 #define IB_NODE_TYPE_ROUTER                                     0x03\r
1463 /**********/\r
1464 \r
1465 /****d* IBA Base: Constants/IB_NOTICE_NODE_TYPE_CA\r
1466 * NAME\r
1467 *       IB_NOTICE_NODE_TYPE_CA\r
1468 *\r
1469 * DESCRIPTION\r
1470 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1471 *\r
1472 * SOURCE\r
1473 */\r
1474 #define IB_NOTICE_NODE_TYPE_CA                          (CL_NTOH32(0x000001))\r
1475 /**********/\r
1476 /****d* IBA Base: Constants/IB_NOTICE_NODE_TYPE_SWITCH\r
1477 * NAME\r
1478 *       IB_NOTICE_NODE_TYPE_SWITCH\r
1479 *\r
1480 * DESCRIPTION\r
1481 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1482 *\r
1483 * SOURCE\r
1484 */\r
1485 #define IB_NOTICE_NODE_TYPE_SWITCH                      (CL_NTOH32(0x000002))\r
1486 /**********/\r
1487 /****d* IBA Base: Constants/IB_NOTICE_NODE_TYPE_ROUTER\r
1488 * NAME\r
1489 *       IB_NOTICE_NODE_TYPE_ROUTER\r
1490 *\r
1491 * DESCRIPTION\r
1492 *       Encoded generic node type used in MAD attributes (13.4.8.2)\r
1493 *\r
1494 * SOURCE\r
1495 */\r
1496 #define IB_NOTICE_NODE_TYPE_ROUTER                      (CL_NTOH32(0x000003))\r
1497 /**********/\r
1498 /****d* IBA Base: Constants/IB_NOTICE_NODE_TYPE_SUBN_MGMT\r
1499 * NAME\r
1500 *       IB_NOTICE_NODE_TYPE_SUBN_MGMT\r
1501 *\r
1502 * DESCRIPTION\r
1503 *       Encoded generic node type used in MAD attributes (13.4.8.2).\r
1504 *       Note that this value is not defined for the NodeType field\r
1505 *       of the NodeInfo attribute (14.2.5.3).\r
1506 *\r
1507 * SOURCE\r
1508 */\r
1509 #define IB_NOTICE_NODE_TYPE_SUBN_MGMT           (CL_NTOH32(0x000004))\r
1510 /**********/\r
1511 \r
1512 /****d* IBA Base: Constants/IB_MTU_TYPE\r
1513 * NAME\r
1514 *       IB_MTU_TYPE\r
1515 *\r
1516 * DESCRIPTION\r
1517 *       Encoded path MTU.\r
1518 *               1: 256\r
1519 *               2: 512\r
1520 *               3: 1024\r
1521 *               4: 2048\r
1522 *               5: 4096\r
1523 *               others: reserved\r
1524 *\r
1525 * SOURCE\r
1526 */\r
1527 #define IB_MTU_256                                                      1\r
1528 #define IB_MTU_512                                                      2\r
1529 #define IB_MTU_1024                                                     3\r
1530 #define IB_MTU_2048                                                     4\r
1531 #define IB_MTU_4096                                                     5\r
1532 /**********/\r
1533 \r
1534 /****d* IBA Base: Constants/IB_PATH_SELECTOR_TYPE\r
1535 * NAME\r
1536 *       IB_PATH_SELECTOR_TYPE\r
1537 *\r
1538 * DESCRIPTION\r
1539 *       Path selector.\r
1540 *               0: greater than specified\r
1541 *               1: less than specified\r
1542 *               2: exactly the specified\r
1543 *               3: largest available\r
1544 *\r
1545 * SOURCE\r
1546 */\r
1547 #define IB_PATH_SELECTOR_GREATER_THAN           0\r
1548 #define IB_PATH_SELECTOR_LESS_THAN                      1\r
1549 #define IB_PATH_SELECTOR_EXACTLY                        2\r
1550 #define IB_PATH_SELECTOR_LARGEST                        3\r
1551 /**********/\r
1552 \r
1553 /****d* IBA Base: Constants/IB_SMINFO_STATE_NOTACTIVE\r
1554 * NAME\r
1555 *       IB_SMINFO_STATE_NOTACTIVE\r
1556 *\r
1557 * DESCRIPTION\r
1558 *       Encoded state value used in the SMInfo attribute.\r
1559 *\r
1560 * SOURCE\r
1561 */\r
1562 #define IB_SMINFO_STATE_NOTACTIVE                       0\r
1563 /**********/\r
1564 /****d* IBA Base: Constants/IB_SMINFO_STATE_DISCOVERING\r
1565 * NAME\r
1566 *       IB_SMINFO_STATE_DISCOVERING\r
1567 *\r
1568 * DESCRIPTION\r
1569 *       Encoded state value used in the SMInfo attribute.\r
1570 *\r
1571 * SOURCE\r
1572 */\r
1573 #define IB_SMINFO_STATE_DISCOVERING                     1\r
1574 /**********/\r
1575 /****d* IBA Base: Constants/IB_SMINFO_STATE_STANDBY\r
1576 * NAME\r
1577 *       IB_SMINFO_STATE_STANDBY\r
1578 *\r
1579 * DESCRIPTION\r
1580 *       Encoded state value used in the SMInfo attribute.\r
1581 *\r
1582 * SOURCE\r
1583 */\r
1584 #define IB_SMINFO_STATE_STANDBY                         2\r
1585 /**********/\r
1586 /****d* IBA Base: Constants/IB_SMINFO_STATE_MASTER\r
1587 * NAME\r
1588 *       IB_SMINFO_STATE_MASTER\r
1589 *\r
1590 * DESCRIPTION\r
1591 *       Encoded state value used in the SMInfo attribute.\r
1592 *\r
1593 * SOURCE\r
1594 */\r
1595 #define IB_SMINFO_STATE_MASTER                          3\r
1596 /**********/\r
1597 /****d* IBA Base: Constants/IB_PATH_REC_SELECTOR_MASK\r
1598 * NAME\r
1599 *       IB_PATH_REC_SELECTOR_MASK\r
1600 *\r
1601 * DESCRIPTION\r
1602 *       Mask for the selector field for path record MTU, rate,\r
1603 *       and packet lifetime.\r
1604 *\r
1605 * SOURCE\r
1606 */\r
1607 #define IB_PATH_REC_SELECTOR_MASK                       0xC0\r
1608 /**********/\r
1609 /****d* IBA Base: Constants/IB_PATH_REC_BASE_MASK\r
1610 * NAME\r
1611 *       IB_PATH_REC_BASE_MASK\r
1612 *\r
1613 * DESCRIPTION\r
1614 *       Mask for the base value field for path record MTU, rate,\r
1615 *       and packet lifetime.\r
1616 *\r
1617 * SOURCE\r
1618 */\r
1619 #define IB_PATH_REC_BASE_MASK                           0x3F\r
1620 /**********/\r
1621 \r
1622 /****d* IBA Base: Constants/IB_MULTIPATH_REC_BASE_MASK\r
1623 * NAME\r
1624 *       IB_MULTIPATH_REC_BASE_MASK\r
1625 *\r
1626 * DESCRIPTION\r
1627 *       Mask for the base value field for multipath record MTU, rate,\r
1628 *       and packet lifetime.\r
1629 *\r
1630 * SOURCE\r
1631 */\r
1632 #define IB_MULTIPATH_REC_BASE_MASK                      0x3F\r
1633 /**********/\r
1634 \r
1635 /****h* IBA Base/Type Definitions\r
1636 * NAME\r
1637 *       Type Definitions\r
1638 *\r
1639 * DESCRIPTION\r
1640 *       Definitions are from the InfiniBand Architecture Specification v1.2\r
1641 *\r
1642 *********/\r
1643 /****d* IBA Base: Types/ib_net16_t\r
1644 * NAME\r
1645 *       ib_net16_t\r
1646 *\r
1647 * DESCRIPTION\r
1648 *       Defines the network ordered type for 16-bit values.\r
1649 *\r
1650 * SOURCE\r
1651 */\r
1652 typedef uint16_t        ib_net16_t;\r
1653 /**********/\r
1654 /****d* IBA Base: Types/ib_net32_t\r
1655 * NAME\r
1656 *       ib_net32_t\r
1657 *\r
1658 * DESCRIPTION\r
1659 *       Defines the network ordered type for 32-bit values.\r
1660 *\r
1661 * SOURCE\r
1662 */\r
1663 typedef uint32_t        ib_net32_t;\r
1664 /**********/\r
1665 /****d* IBA Base: Types/ib_net64_t\r
1666 * NAME\r
1667 *       ib_net64_t\r
1668 *\r
1669 * DESCRIPTION\r
1670 *       Defines the network ordered type for 64-bit values.\r
1671 *\r
1672 * SOURCE\r
1673 */\r
1674 typedef uint64_t        ib_net64_t;\r
1675 /**********/\r
1676 /****d* IBA Base: Types/ib_gid_prefix_t\r
1677 * NAME\r
1678 *       ib_gid_prefix_t\r
1679 *\r
1680 * DESCRIPTION\r
1681 *\r
1682 * SOURCE\r
1683 */\r
1684 typedef ib_net64_t              ib_gid_prefix_t;\r
1685 /**********/\r
1686 \r
1687 /****d* IBA Base: Constants/ib_link_states_t\r
1688 * NAME\r
1689 *       ib_link_states_t\r
1690 *\r
1691 * DESCRIPTION\r
1692 *       Defines the link states of a port.\r
1693 *\r
1694 * SOURCE\r
1695 */\r
1696 #define IB_LINK_NO_CHANGE 0\r
1697 #define IB_LINK_DOWN      1\r
1698 #define IB_LINK_INIT      2\r
1699 #define IB_LINK_ARMED     3\r
1700 #define IB_LINK_ACTIVE    4\r
1701 #define IB_LINK_ACT_DEFER 5\r
1702 /**********/\r
1703 \r
1704 static const char* const __ib_node_type_str[] =\r
1705 {\r
1706         "UNKNOWN",\r
1707         "Channel Adapter",\r
1708         "Switch",\r
1709         "Router",\r
1710         "Subnet Management"\r
1711 };\r
1712 \r
1713 /****f* IBA Base: Types/ib_get_node_type_str\r
1714 * NAME\r
1715 *       ib_get_node_type_str\r
1716 *\r
1717 * DESCRIPTION\r
1718 *       Returns a string for the specified node type.\r
1719 *\r
1720 * SYNOPSIS\r
1721 */\r
1722 AL_INLINE const char* AL_API\r
1723 ib_get_node_type_str(\r
1724         IN                              uint8_t                                         node_type )\r
1725 {\r
1726         if( node_type >= IB_NODE_TYPE_ROUTER )\r
1727                 node_type = 0;\r
1728         return( __ib_node_type_str[node_type] );\r
1729 }\r
1730 /*\r
1731 * PARAMETERS\r
1732 *       node_type\r
1733 *               [in] Encoded node type as returned in the NodeInfo attribute.\r
1734 \r
1735 * RETURN VALUES\r
1736 *       Pointer to the node type string.\r
1737 *\r
1738 * NOTES\r
1739 *\r
1740 * SEE ALSO\r
1741 * ib_node_info_t\r
1742 *********/\r
1743 \r
1744 static const char* const __ib_port_state_str[] =\r
1745 {\r
1746         "No State Change (NOP)",\r
1747         "DOWN",\r
1748         "INIT",\r
1749         "ARMED",\r
1750         "ACTIVE",\r
1751         "ACTDEFER",\r
1752         "UNKNOWN"\r
1753 };\r
1754 \r
1755 /****f* IBA Base: Types/ib_get_port_state_str\r
1756 * NAME\r
1757 *       ib_get_port_state_str\r
1758 *\r
1759 * DESCRIPTION\r
1760 *       Returns a string for the specified port state.\r
1761 *\r
1762 * SYNOPSIS\r
1763 */\r
1764 AL_INLINE const char* AL_API\r
1765 ib_get_port_state_str(\r
1766         IN                              uint8_t                                         port_state )\r
1767 {\r
1768         if( port_state > IB_LINK_ACTIVE )\r
1769                 port_state = IB_LINK_ACTIVE + 1;\r
1770         return( __ib_port_state_str[port_state] );\r
1771 }\r
1772 /*\r
1773 * PARAMETERS\r
1774 *       port_state\r
1775 *               [in] Encoded port state as returned in the PortInfo attribute.\r
1776 \r
1777 * RETURN VALUES\r
1778 *       Pointer to the port state string.\r
1779 *\r
1780 * NOTES\r
1781 *\r
1782 * SEE ALSO\r
1783 * ib_port_info_t\r
1784 *********/\r
1785 \r
1786 /****f* IBA Base: Types/ib_get_port_state_from_str\r
1787 * NAME\r
1788 *       ib_get_port_state_from_str\r
1789 *\r
1790 * DESCRIPTION\r
1791 *       Returns a string for the specified port state.\r
1792 *\r
1793 * SYNOPSIS\r
1794 */\r
1795 AL_INLINE const uint8_t AL_API\r
1796 ib_get_port_state_from_str(\r
1797         IN                              char*                                           p_port_state_str )\r
1798 {\r
1799         if( !strncmp(p_port_state_str,"No State Change (NOP)",12) )\r
1800                 return(0);\r
1801         else if( !strncmp(p_port_state_str, "DOWN",4) )\r
1802                 return(1);\r
1803         else if( !strncmp(p_port_state_str, "INIT", 4) )\r
1804                 return(2);\r
1805         else if( !strncmp(p_port_state_str,"ARMED", 5) )\r
1806                 return(3);\r
1807         else if( !strncmp(p_port_state_str, "ACTIVE", 6) )\r
1808                 return(4);\r
1809         else if( !strncmp(p_port_state_str, "ACTDEFER", 8) )\r
1810                 return(5);\r
1811         return(6);\r
1812 }\r
1813 /*\r
1814 * PARAMETERS\r
1815 *       p_port_state_str\r
1816 *               [in] A string matching one returned by ib_get_port_state_str\r
1817 *\r
1818 * RETURN VALUES\r
1819 *       The appropriate code.\r
1820 *\r
1821 * NOTES\r
1822 *\r
1823 * SEE ALSO\r
1824 *       ib_port_info_t\r
1825 *********/\r
1826 \r
1827 /****d* IBA Base: Constants/Join States\r
1828 * NAME\r
1829 *       Join States\r
1830 *\r
1831 * DESCRIPTION\r
1832 *       Defines the join state flags for multicast group management.\r
1833 *\r
1834 * SOURCE\r
1835 */\r
1836 #define IB_JOIN_STATE_FULL                      1\r
1837 #define IB_JOIN_STATE_NON                       2\r
1838 #define IB_JOIN_STATE_SEND_ONLY         4\r
1839 /**********/\r
1840 \r
1841 /****f* IBA Base: Types/ib_pkey_get_base\r
1842 * NAME\r
1843 *       ib_pkey_get_base\r
1844 *\r
1845 * DESCRIPTION\r
1846 *       Returns the base P_Key value with the membership bit stripped.\r
1847 *\r
1848 * SYNOPSIS\r
1849 */\r
1850 AL_INLINE ib_net16_t AL_API\r
1851 ib_pkey_get_base(\r
1852         IN              const   ib_net16_t                                      pkey )\r
1853 {\r
1854         return( (ib_net16_t)(pkey & IB_PKEY_BASE_MASK) );\r
1855 }\r
1856 /*\r
1857 * PARAMETERS\r
1858 *       pkey\r
1859 *               [in] P_Key value\r
1860 *\r
1861 * RETURN VALUE\r
1862 *       Returns the base P_Key value with the membership bit stripped.\r
1863 *\r
1864 * NOTES\r
1865 *\r
1866 * SEE ALSO\r
1867 *********/\r
1868 /****f* IBA Base: Types/ib_pkey_is_full_member\r
1869 * NAME\r
1870 *       ib_pkey_is_full_member\r
1871 *\r
1872 * DESCRIPTION\r
1873 *       Indicates if the port is a full member of the parition.\r
1874 *\r
1875 * SYNOPSIS\r
1876 */\r
1877 AL_INLINE boolean_t AL_API\r
1878 ib_pkey_is_full_member(\r
1879         IN              const   ib_net16_t                                      pkey )\r
1880 {\r
1881         return( (pkey & IB_PKEY_TYPE_MASK) == IB_PKEY_TYPE_MASK );\r
1882 }\r
1883 /*\r
1884 * PARAMETERS\r
1885 *       pkey\r
1886 *               [in] P_Key value\r
1887 *\r
1888 * RETURN VALUE\r
1889 *       TRUE if the port is a full member of the partition.\r
1890 *       FALSE otherwise.\r
1891 *\r
1892 * NOTES\r
1893 *\r
1894 * SEE ALSO\r
1895 * ib_pkey_get_base, ib_net16_t\r
1896 *********/\r
1897 \r
1898 /****f* IBA Base: Types/ib_pkey_is_invalid\r
1899 * NAME\r
1900 *       ib_pkey_is_invalid\r
1901 *\r
1902 * DESCRIPTION\r
1903 *       Returns TRUE if the given P_Key is an invalid P_Key\r
1904 *  C10-116: the CI shall regard a P_Key as invalid if its low-order\r
1905 *           15 bits are all zero...\r
1906 *\r
1907 * SYNOPSIS\r
1908 */\r
1909 static inline boolean_t \r
1910 ib_pkey_is_invalid(\r
1911         IN      const   ib_net16_t              pkey )\r
1912 {\r
1913   if (ib_pkey_get_base(pkey) == 0x0000)\r
1914     return TRUE;\r
1915   return FALSE;\r
1916 }\r
1917 /*\r
1918 * PARAMETERS\r
1919 *       pkey\r
1920 *               [in] P_Key value\r
1921 *\r
1922 * RETURN VALUE\r
1923 *       Returns the base P_Key value with the membership bit stripped.\r
1924 *\r
1925 * NOTES\r
1926 *\r
1927 * SEE ALSO\r
1928 *********/\r
1929 \r
1930 /****d* IBA Base: Types/ib_gid_t\r
1931 * NAME\r
1932 *       ib_gid_t\r
1933 *\r
1934 * DESCRIPTION\r
1935 *\r
1936 * SYNOPSIS\r
1937 */\r
1938 #include <complib/cl_packon.h>\r
1939 typedef union _ib_gid\r
1940 {\r
1941         uint8_t                                 raw[16];\r
1942         struct _ib_gid_unicast\r
1943         {\r
1944                 ib_gid_prefix_t         prefix;\r
1945                 ib_net64_t                      interface_id;\r
1946 \r
1947         } PACK_SUFFIX unicast;\r
1948 \r
1949         struct _ib_gid_multicast\r
1950         {\r
1951                 uint8_t                         header[2];\r
1952                 uint8_t                         raw_group_id[14];\r
1953 \r
1954         } PACK_SUFFIX multicast;\r
1955 \r
1956 }       PACK_SUFFIX ib_gid_t;\r
1957 #include <complib/cl_packoff.h>\r
1958 /*\r
1959 * FIELDS\r
1960 *       raw\r
1961 *               GID represented as an unformated byte array.\r
1962 *\r
1963 *       unicast\r
1964 *               Typical unicast representation with subnet prefix and\r
1965 *               port GUID.\r
1966 *\r
1967 *       multicast\r
1968 *               Representation for multicast use.\r
1969 *\r
1970 * SEE ALSO\r
1971 *********/\r
1972 \r
1973 AL_INLINE boolean_t AL_API\r
1974 ib_gid_is_multicast(\r
1975         IN              const   ib_gid_t*                                       p_gid )\r
1976 {\r
1977         return( p_gid->raw[0] == 0xFF );\r
1978 }\r
1979 \r
1980 /****f* IBA Base: Types/ib_gid_set_default\r
1981 * NAME\r
1982 *       ib_gid_set_default\r
1983 *\r
1984 * DESCRIPTION\r
1985 *       Sets a GID to the default value.\r
1986 *\r
1987 * SYNOPSIS\r
1988 */\r
1989 AL_INLINE void AL_API\r
1990 ib_gid_set_default(\r
1991         IN                              ib_gid_t* const                         p_gid,\r
1992         IN              const   ib_net64_t                                      interface_id )\r
1993 {\r
1994         p_gid->unicast.prefix = IB_DEFAULT_SUBNET_PREFIX;\r
1995         p_gid->unicast.interface_id = interface_id;\r
1996 }\r
1997 /*\r
1998 * PARAMETERS\r
1999 *       p_gid\r
2000 *               [in] Pointer to the GID object.\r
2001 *\r
2002 *       interface_id\r
2003 *               [in] Manufacturer assigned EUI64 value of a port.\r
2004 *\r
2005 * RETURN VALUES\r
2006 *       None.\r
2007 *\r
2008 * NOTES\r
2009 *\r
2010 * SEE ALSO\r
2011 *       ib_gid_t\r
2012 *********/\r
2013 /****f* IBA Base: Types/ib_gid_get_subnet_prefix\r
2014 * NAME\r
2015 *       ib_gid_get_subnet_prefix\r
2016 *\r
2017 * DESCRIPTION\r
2018 *       Gets the subnet prefix from a GID.\r
2019 *\r
2020 * SYNOPSIS\r
2021 */\r
2022 AL_INLINE ib_net64_t AL_API\r
2023 ib_gid_get_subnet_prefix(\r
2024         IN              const   ib_gid_t* const                         p_gid )\r
2025 {\r
2026         return( p_gid->unicast.prefix );\r
2027 }\r
2028 /*\r
2029 * PARAMETERS\r
2030 *       p_gid\r
2031 *               [in] Pointer to the GID object.\r
2032 *\r
2033 * RETURN VALUES\r
2034 *       64-bit subnet prefix value.\r
2035 *\r
2036 * NOTES\r
2037 *\r
2038 * SEE ALSO\r
2039 *       ib_gid_t\r
2040 *********/\r
2041 /****f* IBA Base: Types/ib_gid_is_link_local\r
2042 * NAME\r
2043 *       ib_gid_is_link_local\r
2044 *\r
2045 * DESCRIPTION\r
2046 *       Returns TRUE if the unicast GID scoping indicates link local,\r
2047 *       FALSE otherwise.\r
2048 *\r
2049 * SYNOPSIS\r
2050 */\r
2051 static inline boolean_t\r
2052 ib_gid_is_link_local(\r
2053         IN              const   ib_gid_t* const                         p_gid )\r
2054 {\r
2055         return( ib_gid_get_subnet_prefix( p_gid ) == IB_DEFAULT_SUBNET_PREFIX );\r
2056 }\r
2057 /*\r
2058 * PARAMETERS\r
2059 *       p_gid\r
2060 *               [in] Pointer to the GID object.\r
2061 *\r
2062 * RETURN VALUES\r
2063 *       Returns TRUE if the unicast GID scoping indicates link local,\r
2064 *       FALSE otherwise.\r
2065 *\r
2066 * NOTES\r
2067 *\r
2068 * SEE ALSO\r
2069 *       ib_gid_t\r
2070 *********/\r
2071 /****f* IBA Base: Types/ib_gid_is_site_local\r
2072 * NAME\r
2073 *       ib_gid_is_site_local\r
2074 *\r
2075 * DESCRIPTION\r
2076 *       Returns TRUE if the unicast GID scoping indicates site local,\r
2077 *       FALSE otherwise.\r
2078 *\r
2079 * SYNOPSIS\r
2080 */\r
2081 static inline boolean_t\r
2082 ib_gid_is_site_local(\r
2083         IN              const   ib_gid_t* const                         p_gid )\r
2084 {\r
2085         return( ( ib_gid_get_subnet_prefix( p_gid ) &\r
2086                 CL_HTON64( 0xFFFFFFFFFFFF0000ULL ) ) == CL_HTON64( 0xFEC0000000000000ULL ) );\r
2087 }\r
2088 /*\r
2089 * PARAMETERS\r
2090 *       p_gid\r
2091 *               [in] Pointer to the GID object.\r
2092 *\r
2093 * RETURN VALUES\r
2094 *       Returns TRUE if the unicast GID scoping indicates link local,\r
2095 *       FALSE otherwise.\r
2096 *\r
2097 * NOTES\r
2098 *\r
2099 * SEE ALSO\r
2100 *       ib_gid_t\r
2101 *********/\r
2102 /****f* IBA Base: Types/ib_gid_get_guid\r
2103 * NAME\r
2104 *       ib_gid_get_guid\r
2105 *\r
2106 * DESCRIPTION\r
2107 *       Gets the guid from a GID.\r
2108 *\r
2109 * SYNOPSIS\r
2110 */\r
2111 AL_INLINE ib_net64_t AL_API\r
2112 ib_gid_get_guid(\r
2113         IN              const   ib_gid_t* const                         p_gid )\r
2114 {\r
2115         return( p_gid->unicast.interface_id );\r
2116 }\r
2117 /*\r
2118 * PARAMETERS\r
2119 *       p_gid\r
2120 *               [in] Pointer to the GID object.\r
2121 *\r
2122 * RETURN VALUES\r
2123 *       64-bit GUID value.\r
2124 *\r
2125 * NOTES\r
2126 *\r
2127 * SEE ALSO\r
2128 *       ib_gid_t\r
2129 *********/\r
2130 \r
2131 /****s* IBA Base: Types/ib_field32_t\r
2132 * NAME\r
2133 *       ib_field32_t\r
2134 *\r
2135 * DESCRIPTION\r
2136 *       Represents a 32-bit field, and allows access as a 32-bit network byte\r
2137 *       ordered or a 4-byte array.\r
2138 *\r
2139 * SYNOPSIS\r
2140 */\r
2141 #include <complib/cl_packon.h>\r
2142 typedef union _ib_field32_t\r
2143 {\r
2144         net32_t         val;\r
2145         uint8_t         bytes[4];\r
2146 \r
2147 }       PACK_SUFFIX ib_field32_t;\r
2148 #include <complib/cl_packoff.h>\r
2149 /*\r
2150 * FIELDS\r
2151 *       val\r
2152 *               Full field value.\r
2153 *\r
2154 *       bytes\r
2155 *               Byte array representing the field.  The byte array provides identical\r
2156 *               access independently from CPU byte-ordering.\r
2157 *********/\r
2158 \r
2159 /****s* IBA Base: Types/ib_path_rec_t\r
2160 * NAME\r
2161 *       ib_path_rec_t\r
2162 *\r
2163 * DESCRIPTION\r
2164 *       Path records encapsulate the properties of a given\r
2165 *       route between two end-points on a subnet.\r
2166 *\r
2167 * SYNOPSIS\r
2168 */\r
2169 #include <complib/cl_packon.h>\r
2170 typedef __declspec(align(8)) struct _ib_path_rec\r
2171 {\r
2172         uint64_t                                resv0;\r
2173         ib_gid_t                                dgid;\r
2174         ib_gid_t                                sgid;\r
2175         ib_net16_t                              dlid;\r
2176         ib_net16_t                              slid;\r
2177         ib_field32_t                    hop_flow_raw;\r
2178         uint8_t                                 tclass;\r
2179         uint8_t                                 num_path;\r
2180         ib_net16_t                              pkey;\r
2181         ib_net16_t                              sl;\r
2182         uint8_t                                 mtu;\r
2183         uint8_t                                 rate;\r
2184         uint8_t                                 pkt_life;\r
2185         uint8_t                                 preference;\r
2186         uint16_t                                resv1;\r
2187         uint32_t                                resv2;\r
2188 \r
2189 }       PACK_SUFFIX ib_path_rec_t;\r
2190 #include <complib/cl_packoff.h>\r
2191 /*\r
2192 * FIELDS\r
2193 *       resv0\r
2194 *               Reserved bytes.\r
2195 *\r
2196 *       dgid\r
2197 *               GID of destination port.\r
2198 *\r
2199 *       sgid\r
2200 *               GID of source port.\r
2201 *\r
2202 *       dlid\r
2203 *               LID of destination port.\r
2204 *\r
2205 *       slid\r
2206 *               LID of source port.\r
2207 *\r
2208 *       hop_flow_raw\r
2209 *               Global routing parameters: hop count, flow label and raw bit.\r
2210 *\r
2211 *       tclass\r
2212 *               Another global routing parameter.\r
2213 *\r
2214 *       num_path\r
2215 *               In queries, maximum number of paths to return.\r
2216 *               In responses, undefined.\r
2217 *\r
2218 *       pkey\r
2219 *               Partition key (P_Key) to use on this path.\r
2220 *\r
2221 *       resv1\r
2222 *               Reserved byte.\r
2223 *\r
2224 *       sl\r
2225 *               Service level to use on this path.\r
2226 *\r
2227 *       mtu\r
2228 *               MTU and MTU selector fields to use on this path\r
2229 *\r
2230 *       rate\r
2231 *               Rate and rate selector fields to use on this path.\r
2232 *\r
2233 *       pkt_life\r
2234 *               Packet lifetime\r
2235 *\r
2236 *       preference\r
2237 *               Indicates the relative merit of this path versus other path\r
2238 *               records returned from the SA.  Lower numbers are better.\r
2239 *\r
2240 *       resv1\r
2241 *               Reserved bytes.\r
2242 *\r
2243 *       resv2\r
2244 *               Reserved bytes.\r
2245 * SEE ALSO\r
2246 *********/\r
2247 \r
2248 /* Port Record Component Masks */\r
2249 #define IB_PR_COMPMASK_LID                                      (CL_HTON64(1<<0))\r
2250 #define IB_PR_COMPMASK_DGID                                     (CL_HTON64(1<<2))\r
2251 #define IB_PR_COMPMASK_SGID                                     (CL_HTON64(1<<3))\r
2252 #define IB_PR_COMPMASK_DLID                                     (CL_HTON64(1<<4))\r
2253 #define IB_PR_COMPMASK_SLID                                     (CL_HTON64(1<<5))\r
2254 #define IB_PR_COMPMASK_RAWTRAFIC                        (CL_HTON64(1<<6))\r
2255 #define IB_PR_COMPMASK_RESV0                            (CL_HTON64(1<<7))\r
2256 #define IB_PR_COMPMASK_FLOWLABEL                        (CL_HTON64(1<<8))\r
2257 #define IB_PR_COMPMASK_HOPLIMIT                         (CL_HTON64(1<<9))\r
2258 #define IB_PR_COMPMASK_TCLASS                           (CL_HTON64(1<<10))\r
2259 #define IB_PR_COMPMASK_REVERSIBLE                       (CL_HTON64(1<<11))\r
2260 #define IB_PR_COMPMASK_NUM_PATH                         (CL_HTON64(1<<12))\r
2261 #define IB_PR_COMPMASK_PKEY                                     (CL_HTON64(1<<13))\r
2262 #define IB_PR_COMPMASK_RESV1                            (CL_HTON64(1<<14))\r
2263 #define IB_PR_COMPMASK_SL                                       (CL_HTON64(1<<15))\r
2264 #define IB_PR_COMPMASK_MTU_SEL                          (CL_HTON64(1<<16))\r
2265 #define IB_PR_COMPMASK_MTU                                      (CL_HTON64(1<<17))\r
2266 #define IB_PR_COMPMASK_RATE_SEL                         (CL_HTON64(1<<18))\r
2267 #define IB_PR_COMPMASK_RATE                                     (CL_HTON64(1<<19))\r
2268 #define IB_PR_COMPMASK_PKTLIFETIME_SEL          (CL_HTON64(1<<20))\r
2269 #define IB_PR_COMPMASK_PFTLIFETIME                      (CL_HTON64(1<<21))\r
2270 \r
2271 /* Link Record Component Masks */\r
2272 #define IB_LR_COMPMASK_FROM_LID           (CL_HTON64(((uint64_t)1)<<0))\r
2273 #define IB_LR_COMPMASK_FROM_PORT          (CL_HTON64(((uint64_t)1)<<1))\r
2274 #define IB_LR_COMPMASK_TO_PORT            (CL_HTON64(((uint64_t)1)<<2))\r
2275 #define IB_LR_COMPMASK_TO_LID             (CL_HTON64(((uint64_t)1)<<3))\r
2276 \r
2277 /* VL Arbitration Record MASKs */\r
2278 #define IB_VLA_COMPMASK_LID               (CL_HTON64(((uint64_t)1)<<0))\r
2279 #define IB_VLA_COMPMASK_OUT_PORT          (CL_HTON64(((uint64_t)1)<<1))\r
2280 #define IB_VLA_COMPMASK_BLOCK             (CL_HTON64(((uint64_t)1)<<2))\r
2281 \r
2282 /* SLtoVL Mapping Record Masks */\r
2283 #define IB_SLVL_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))\r
2284 #define IB_SLVL_COMPMASK_IN_PORT          (CL_HTON64(((uint64_t)1)<<1))\r
2285 #define IB_SLVL_COMPMASK_OUT_PORT         (CL_HTON64(((uint64_t)1)<<2))\r
2286 \r
2287 /* P_Key Table Record Masks */\r
2288 #define IB_PKEY_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))\r
2289 #define IB_PKEY_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))\r
2290 #define IB_PKEY_COMPMASK_PORT             (CL_HTON64(((uint64_t)1)<<2))\r
2291 \r
2292 /* LFT Record MASKS */\r
2293 #define IB_LFTR_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))\r
2294 #define IB_LFTR_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))\r
2295 \r
2296 /* NodeInfo Record Masks */\r
2297 #define IB_NR_COMPMASK_LID                (CL_HTON64(((uint64_t)1)<<0))\r
2298 #define IB_NR_COMPMASK_RESERVED1          (CL_HTON64(((uint64_t)1)<<1))\r
2299 #define IB_NR_COMPMASK_BASEVERSION        (CL_HTON64(((uint64_t)1)<<2))\r
2300 #define IB_NR_COMPMASK_CLASSVERSION       (CL_HTON64(((uint64_t)1)<<3))\r
2301 #define IB_NR_COMPMASK_NODETYPE           (CL_HTON64(((uint64_t)1)<<4))\r
2302 #define IB_NR_COMPMASK_NUMPORTS           (CL_HTON64(((uint64_t)1)<<5))\r
2303 #define IB_NR_COMPMASK_SYSIMAGEGUID       (CL_HTON64(((uint64_t)1)<<6))\r
2304 #define IB_NR_COMPMASK_NODEGUID           (CL_HTON64(((uint64_t)1)<<7))\r
2305 #define IB_NR_COMPMASK_PORTGUID           (CL_HTON64(((uint64_t)1)<<8))\r
2306 #define IB_NR_COMPMASK_PARTCAP            (CL_HTON64(((uint64_t)1)<<9))\r
2307 #define IB_NR_COMPMASK_DEVID              (CL_HTON64(((uint64_t)1)<<10))\r
2308 #define IB_NR_COMPMASK_REV                (CL_HTON64(((uint64_t)1)<<11))\r
2309 #define IB_NR_COMPMASK_PORTNUM            (CL_HTON64(((uint64_t)1)<<12))\r
2310 #define IB_NR_COMPMASK_VENDID             (CL_HTON64(((uint64_t)1)<<13))\r
2311 #define IB_NR_COMPMASK_NODEDESC           (CL_HTON64(((uint64_t)1)<<14))\r
2312 \r
2313 /* Service Record Component Masks Sec 15.2.5.14 Ver 1.1*/\r
2314 #define IB_SR_COMPMASK_SID                (CL_HTON64(((uint64_t)1)<<0))\r
2315 #define IB_SR_COMPMASK_SGID               (CL_HTON64(((uint64_t)1)<<1))\r
2316 #define IB_SR_COMPMASK_SPKEY              (CL_HTON64(((uint64_t)1)<<2))\r
2317 #define IB_SR_COMPMASK_RES1               (CL_HTON64(((uint64_t)1)<<3))\r
2318 #define IB_SR_COMPMASK_SLEASE             (CL_HTON64(((uint64_t)1)<<4))\r
2319 #define IB_SR_COMPMASK_SKEY               (CL_HTON64(((uint64_t)1)<<5))\r
2320 #define IB_SR_COMPMASK_SNAME              (CL_HTON64(((uint64_t)1)<<6))\r
2321 #define IB_SR_COMPMASK_SDATA8_0           (CL_HTON64(((uint64_t)1)<<7))\r
2322 #define IB_SR_COMPMASK_SDATA8_1           (CL_HTON64(((uint64_t)1)<<8))\r
2323 #define IB_SR_COMPMASK_SDATA8_2           (CL_HTON64(((uint64_t)1)<<9))\r
2324 #define IB_SR_COMPMASK_SDATA8_3           (CL_HTON64(((uint64_t)1)<<10))\r
2325 #define IB_SR_COMPMASK_SDATA8_4           (CL_HTON64(((uint64_t)1)<<11))\r
2326 #define IB_SR_COMPMASK_SDATA8_5           (CL_HTON64(((uint64_t)1)<<12))\r
2327 #define IB_SR_COMPMASK_SDATA8_6           (CL_HTON64(((uint64_t)1)<<13))\r
2328 #define IB_SR_COMPMASK_SDATA8_7           (CL_HTON64(((uint64_t)1)<<14))\r
2329 #define IB_SR_COMPMASK_SDATA8_8           (CL_HTON64(((uint64_t)1)<<15))\r
2330 #define IB_SR_COMPMASK_SDATA8_9           (CL_HTON64(((uint64_t)1)<<16))\r
2331 #define IB_SR_COMPMASK_SDATA8_10       (CL_HTON64(((uint64_t)1)<<17))\r
2332 #define IB_SR_COMPMASK_SDATA8_11       (CL_HTON64(((uint64_t)1)<<18))\r
2333 #define IB_SR_COMPMASK_SDATA8_12       (CL_HTON64(((uint64_t)1)<<19))\r
2334 #define IB_SR_COMPMASK_SDATA8_13       (CL_HTON64(((uint64_t)1)<<20))\r
2335 #define IB_SR_COMPMASK_SDATA8_14       (CL_HTON64(((uint64_t)1)<<21))\r
2336 #define IB_SR_COMPMASK_SDATA8_15       (CL_HTON64(((uint64_t)1)<<22))\r
2337 #define IB_SR_COMPMASK_SDATA16_0       (CL_HTON64(((uint64_t)1)<<23))\r
2338 #define IB_SR_COMPMASK_SDATA16_1       (CL_HTON64(((uint64_t)1)<<24))\r
2339 #define IB_SR_COMPMASK_SDATA16_2       (CL_HTON64(((uint64_t)1)<<25))\r
2340 #define IB_SR_COMPMASK_SDATA16_3       (CL_HTON64(((uint64_t)1)<<26))\r
2341 #define IB_SR_COMPMASK_SDATA16_4       (CL_HTON64(((uint64_t)1)<<27))\r
2342 #define IB_SR_COMPMASK_SDATA16_5       (CL_HTON64(((uint64_t)1)<<28))\r
2343 #define IB_SR_COMPMASK_SDATA16_6       (CL_HTON64(((uint64_t)1)<<29))\r
2344 #define IB_SR_COMPMASK_SDATA16_7       (CL_HTON64(((uint64_t)1)<<30))\r
2345 #define IB_SR_COMPMASK_SDATA32_0       (CL_HTON64(((uint64_t)1)<<31))\r
2346 #define IB_SR_COMPMASK_SDATA32_1                        (CL_HTON64(((uint64_t)1)<<32))\r
2347 #define IB_SR_COMPMASK_SDATA32_2                        (CL_HTON64(((uint64_t)1)<<33))\r
2348 #define IB_SR_COMPMASK_SDATA32_3                        (CL_HTON64(((uint64_t)1)<<34))\r
2349 #define IB_SR_COMPMASK_SDATA64_0                        (CL_HTON64(((uint64_t)1)<<35))\r
2350 #define IB_SR_COMPMASK_SDATA64_1                        (CL_HTON64(((uint64_t)1)<<36))\r
2351 /* Port Info Record Component Masks */\r
2352 #define IB_PIR_COMPMASK_LID                                     (CL_HTON64(1<<0))\r
2353 #define IB_PIR_COMPMASK_PORTNUM                         (CL_HTON64(1<<1))\r
2354 #define IB_PIR_COMPMASK_RESV1                           (CL_HTON64(1<<2))\r
2355 #define IB_PIR_COMPMASK_MKEY                            (CL_HTON64(1<<3))\r
2356 #define IB_PIR_COMPMASK_GIDPRE                          (CL_HTON64(1<<4))\r
2357 #define IB_PIR_COMPMASK_BASELID                         (CL_HTON64(1<<5))\r
2358 #define IB_PIR_COMPMASK_SMLID                           (CL_HTON64(1<<6))\r
2359 #define IB_PIR_COMPMASK_CAPMASK                         (CL_HTON64(1<<7))\r
2360 #define IB_PIR_COMPMASK_DIAGCODE                        (CL_HTON64(1<<8))\r
2361 #define IB_PIR_COMPMASK_MKEYLEASEPRD            (CL_HTON64(1<<9))\r
2362 #define IB_PIR_COMPMASK_LOCALPORTNUM            (CL_HTON64(1<<10))\r
2363 #define IB_PIR_COMPMASK_LNKWIDTHSUPPORT         (CL_HTON64(1<<11))\r
2364 #define IB_PIR_COMPMASK_LNKWIDTHACTIVE          (CL_HTON64(1<<12))\r
2365 #define IB_PIR_COMPMASK_LINKWIDTHENABLED        (CL_HTON64(1<<13))\r
2366 #define IB_PIR_COMPMASK_LNKSPEEDSUPPORT         (CL_HTON64(1<<14))\r
2367 #define IB_PIR_COMPMASK_PORTSTATE                       (CL_HTON64(1<<15))\r
2368 #define IB_PIR_COMPMASK_PORTPHYSTATE            (CL_HTON64(1<<16))\r
2369 #define IB_PIR_COMPMASK_LINKDWNDFLTSTATE        (CL_HTON64(1<<17))\r
2370 #define IB_PIR_COMPMASK_MKEYPROTBITS            (CL_HTON64(1<<18))\r
2371 #define IB_PIR_COMPMASK_LMC                                     (CL_HTON64(1<<19))\r
2372 #define IB_PIR_COMPMASK_LINKSPEEDACTIVE         (CL_HTON64(1<<20))\r
2373 #define IB_PIR_COMPMASK_LINKSPEEDENABLE         (CL_HTON64(1<<21))\r
2374 #define IB_PIR_COMPMASK_NEIGHBORMTU                     (CL_HTON64(1<<22))\r
2375 #define IB_PIR_COMPMASK_MASTERSMSL                      (CL_HTON64(1<<23))\r
2376 #define IB_PIR_COMPMASK_VLCAP                           (CL_HTON64(1<<24))\r
2377 #define IB_PIR_COMPMASK_INITTYPE                        (CL_HTON64(1<<25))\r
2378 #define IB_PIR_COMPMASK_VLHIGHLIMIT                     (CL_HTON64(1<<26))\r
2379 #define IB_PIR_COMPMASK_VLARBHIGHCAP            (CL_HTON64(1<<27))\r
2380 #define IB_PIR_COMPMASK_VLARBLOWCAP                     (CL_HTON64(1<<28))\r
2381 #define IB_PIR_COMPMASK_INITTYPEREPLY           (CL_HTON64(1<<29))\r
2382 #define IB_PIR_COMPMASK_MTUCAP                          (CL_HTON64(1<<30))\r
2383 #define IB_PIR_COMPMASK_VLSTALLCNT                      (CL_HTON64(1<<31))\r
2384 #define IB_PIR_COMPMASK_HOQLIFE                         (CL_HTON64(((uint64_t)1)<<32))\r
2385 #define IB_PIR_COMPMASK_OPVLS                           (CL_HTON64(((uint64_t)1)<<33))\r
2386 #define IB_PIR_COMPMASK_PARENFIN                        (CL_HTON64(((uint64_t)1)<<34))\r
2387 #define IB_PIR_COMPMASK_PARENFOUT                       (CL_HTON64(((uint64_t)1)<<35))\r
2388 #define IB_PIR_COMPMASK_FILTERRAWIN                     (CL_HTON64(((uint64_t)1)<<36))\r
2389 #define IB_PIR_COMPMASK_FILTERRAWOUT            (CL_HTON64(((uint64_t)1)<<37))\r
2390 #define IB_PIR_COMPMASK_MKEYVIO                         (CL_HTON64(((uint64_t)1)<<38))\r
2391 #define IB_PIR_COMPMASK_PKEYVIO                         (CL_HTON64(((uint64_t)1)<<39))\r
2392 #define IB_PIR_COMPMASK_QKEYVIO                         (CL_HTON64(((uint64_t)1)<<40))\r
2393 #define IB_PIR_COMPMASK_GUIDCAP                         (CL_HTON64(((uint64_t)1)<<41))\r
2394 #define IB_PIR_COMPMASK_RESV2                           (CL_HTON64(((uint64_t)1)<<42))\r
2395 #define IB_PIR_COMPMASK_SUBNTO                          (CL_HTON64(((uint64_t)1)<<43))\r
2396 #define IB_PIR_COMPMASK_RESV3                           (CL_HTON64(((uint64_t)1)<<44))\r
2397 #define IB_PIR_COMPMASK_RESPTIME                        (CL_HTON64(((uint64_t)1)<<45))\r
2398 #define IB_PIR_COMPMASK_LOCALPHYERR                     (CL_HTON64(((uint64_t)1)<<46))\r
2399 #define IB_PIR_COMPMASK_OVERRUNERR                      (CL_HTON64(((uint64_t)1)<<47))\r
2400 /* Multicast Member Record Component Masks */\r
2401 #define IB_MCR_COMPMASK_GID         (CL_HTON64(((uint64_t)1)<<0))\r
2402 #define IB_MCR_COMPMASK_MGID        (CL_HTON64(((uint64_t)1)<<0))\r
2403 #define IB_MCR_COMPMASK_PORT_GID    (CL_HTON64(((uint64_t)1)<<1))\r
2404 #define IB_MCR_COMPMASK_QKEY        (CL_HTON64(((uint64_t)1)<<2))\r
2405 #define IB_MCR_COMPMASK_MLID        (CL_HTON64(((uint64_t)1)<<3))\r
2406 #define IB_MCR_COMPMASK_MTU_SEL     (CL_HTON64(((uint64_t)1)<<4))\r
2407 #define IB_MCR_COMPMASK_MTU         (CL_HTON64(((uint64_t)1)<<5))\r
2408 #define IB_MCR_COMPMASK_TCLASS      (CL_HTON64(((uint64_t)1)<<6))\r
2409 #define IB_MCR_COMPMASK_PKEY        (CL_HTON64(((uint64_t)1)<<7))\r
2410 #define IB_MCR_COMPMASK_RATE_SEL    (CL_HTON64(((uint64_t)1)<<8))\r
2411 #define IB_MCR_COMPMASK_RATE        (CL_HTON64(((uint64_t)1)<<9))\r
2412 #define IB_MCR_COMPMASK_LIFE_SEL    (CL_HTON64(((uint64_t)1)<<10))\r
2413 #define IB_MCR_COMPMASK_LIFE        (CL_HTON64(((uint64_t)1)<<11))\r
2414 #define IB_MCR_COMPMASK_SL          (CL_HTON64(((uint64_t)1)<<12))\r
2415 #define IB_MCR_COMPMASK_FLOW        (CL_HTON64(((uint64_t)1)<<13))\r
2416 #define IB_MCR_COMPMASK_HOP         (CL_HTON64(((uint64_t)1)<<14))\r
2417 #define IB_MCR_COMPMASK_SCOPE       (CL_HTON64(((uint64_t)1)<<15))\r
2418 #define IB_MCR_COMPMASK_JOIN_STATE  (CL_HTON64(((uint64_t)1)<<16))\r
2419 #define IB_MCR_COMPMASK_PROXY       (CL_HTON64(((uint64_t)1)<<17))\r
2420 \r
2421 /* GUID Info Record Component Masks */\r
2422 #define IB_GIR_COMPMASK_LID             (CL_HTON64(((uint64_t)1)<<0))\r
2423 #define IB_GIR_COMPMASK_BLOCKNUM        (CL_HTON64(((uint64_t)1)<<1))\r
2424 #define IB_GIR_COMPMASK_RESV1           (CL_HTON64(((uint64_t)1)<<2))\r
2425 #define IB_GIR_COMPMASK_RESV2           (CL_HTON64(((uint64_t)1)<<3))\r
2426 #define IB_GIR_COMPMASK_GID0            (CL_HTON64(((uint64_t)1)<<4))\r
2427 #define IB_GIR_COMPMASK_GID1            (CL_HTON64(((uint64_t)1)<<5))\r
2428 #define IB_GIR_COMPMASK_GID2            (CL_HTON64(((uint64_t)1)<<6))\r
2429 #define IB_GIR_COMPMASK_GID3            (CL_HTON64(((uint64_t)1)<<7))\r
2430 #define IB_GIR_COMPMASK_GID4            (CL_HTON64(((uint64_t)1)<<8))\r
2431 #define IB_GIR_COMPMASK_GID5            (CL_HTON64(((uint64_t)1)<<9))\r
2432 #define IB_GIR_COMPMASK_GID6            (CL_HTON64(((uint64_t)1)<<10))\r
2433 #define IB_GIR_COMPMASK_GID7            (CL_HTON64(((uint64_t)1)<<11))\r
2434 \r
2435 /* MultiPath Record Component Masks */\r
2436 #define IB_MPR_COMPMASK_RAWTRAFFIC      (CL_HTON64(((uint64_t)1)<<0))\r
2437 #define IB_MPR_COMPMASK_RESV0           (CL_HTON64(((uint64_t)1)<<1))\r
2438 #define IB_MPR_COMPMASK_FLOWLABEL       (CL_HTON64(((uint64_t)1)<<2))\r
2439 #define IB_MPR_COMPMASK_HOPLIMIT        (CL_HTON64(((uint64_t)1)<<3))\r
2440 #define IB_MPR_COMPMASK_TCLASS          (CL_HTON64(((uint64_t)1)<<4))\r
2441 #define IB_MPR_COMPMASK_REVERSIBLE      (CL_HTON64(((uint64_t)1)<<5))\r
2442 #define IB_MPR_COMPMASK_NUMBPATH        (CL_HTON64(((uint64_t)1)<<6))\r
2443 #define IB_MPR_COMPMASK_PKEY            (CL_HTON64(((uint64_t)1)<<7))\r
2444 #define IB_MPR_COMPMASK_RESV1           (CL_HTON64(((uint64_t)1)<<8))\r
2445 #define IB_MPR_COMPMASK_SL              (CL_HTON64(((uint64_t)1)<<9))\r
2446 #define IB_MPR_COMPMASK_MTUSELEC        (CL_HTON64(((uint64_t)1)<<10))\r
2447 #define IB_MPR_COMPMASK_MTU             (CL_HTON64(((uint64_t)1)<<11))\r
2448 #define IB_MPR_COMPMASK_RATESELEC       (CL_HTON64(((uint64_t)1)<<12))\r
2449 #define IB_MPR_COMPMASK_RATE            (CL_HTON64(((uint64_t)1)<<13))\r
2450 #define IB_MPR_COMPMASK_PKTLIFETIMESELEC (CL_HTON64(((uint64_t)1)<<14))\r
2451 #define IB_MPR_COMPMASK_PKTLIFETIME     (CL_HTON64(((uint64_t)1)<<15))\r
2452 #define IB_MPR_COMPMASK_RESV2           (CL_HTON64(((uint64_t)1)<<16))\r
2453 #define IB_MPR_COMPMASK_INDEPSELEC      (CL_HTON64(((uint64_t)1)<<17))\r
2454 #define IB_MPR_COMPMASK_RESV3           (CL_HTON64(((uint64_t)1)<<18))\r
2455 #define IB_MPR_COMPMASK_SGIDCOUNT       (CL_HTON64(((uint64_t)1)<<19))\r
2456 #define IB_MPR_COMPMASK_DGIDCOUNT       (CL_HTON64(((uint64_t)1)<<20))\r
2457 #define IB_MPR_COMPMASK_RESV4           (CL_HTON64(((uint64_t)1)<<21))\r
2458 \r
2459 /* SMInfo Record Component Masks */\r
2460 #define IB_SMIR_COMPMASK_LID            (CL_HTON64(((uint64_t)1)<<0))\r
2461 #define IB_SMIR_COMPMASK_RESV0          (CL_HTON64(((uint64_t)1)<<1))\r
2462 #define IB_SMIR_COMPMASK_GUID           (CL_HTON64(((uint64_t)1)<<2))\r
2463 #define IB_SMIR_COMPMASK_SMKEY          (CL_HTON64(((uint64_t)1)<<3))\r
2464 #define IB_SMIR_COMPMASK_ACTCOUNT       (CL_HTON64(((uint64_t)1)<<4))\r
2465 #define IB_SMIR_COMPMASK_PRIORITY       (CL_HTON64(((uint64_t)1)<<5))\r
2466 #define IB_SMIR_COMPMASK_SMSTATE        (CL_HTON64(((uint64_t)1)<<6))\r
2467 \r
2468 /* InformInfo Record Component Masks */\r
2469 #define IB_IIR_COMPMASK_SUBSCRIBERGID   (CL_HTON64(((uint64_t)1)<<0))\r
2470 #define IB_IIR_COMPMASK_ENUM            (CL_HTON64(((uint64_t)1)<<1))\r
2471 #define IB_IIR_COMPMASK_RESV0           (CL_HTON64(((uint64_t)1)<<2))\r
2472 #define IB_IIR_COMPMASK_GID             (CL_HTON64(((uint64_t)1)<<3))\r
2473 #define IB_IIR_COMPMASK_LIDRANGEBEGIN   (CL_HTON64(((uint64_t)1)<<4))\r
2474 #define IB_IIR_COMPMASK_LIDRANGEEND     (CL_HTON64(((uint64_t)1)<<5))\r
2475 #define IB_IIR_COMPMASK_RESV1           (CL_HTON64(((uint64_t)1)<<6))\r
2476 #define IB_IIR_COMPMASK_ISGENERIC       (CL_HTON64(((uint64_t)1)<<7))\r
2477 #define IB_IIR_COMPMASK_SUBSCRIBE       (CL_HTON64(((uint64_t)1)<<8))\r
2478 #define IB_IIR_COMPMASK_TYPE            (CL_HTON64(((uint64_t)1)<<9))\r
2479 #define IB_IIR_COMPMASK_TRAPNUMB        (CL_HTON64(((uint64_t)1)<<10))\r
2480 #define IB_IIR_COMPMASK_DEVICEID        (CL_HTON64(((uint64_t)1)<<10))\r
2481 #define IB_IIR_COMPMASK_QPN             (CL_HTON64(((uint64_t)1)<<11))\r
2482 #define IB_IIR_COMPMASK_RESV2           (CL_HTON64(((uint64_t)1)<<12))\r
2483 #define IB_IIR_COMPMASK_RESPTIME        (CL_HTON64(((uint64_t)1)<<13))\r
2484 #define IB_IIR_COMPMASK_RESV3           (CL_HTON64(((uint64_t)1)<<14))\r
2485 #define IB_IIR_COMPMASK_PRODTYPE        (CL_HTON64(((uint64_t)1)<<15))\r
2486 #define IB_IIR_COMPMASK_VENDID          (CL_HTON64(((uint64_t)1)<<15))\r
2487 \r
2488 /****f* IBA Base: Types/ib_path_rec_init_local\r
2489 * NAME\r
2490 *       ib_path_rec_init_local\r
2491 *\r
2492 * DESCRIPTION\r
2493 *       Initializes a subnet local path record.\r
2494 *\r
2495 * SYNOPSIS\r
2496 */\r
2497 AL_INLINE void AL_API\r
2498 ib_path_rec_init_local(\r
2499         IN                              ib_path_rec_t*  const           p_rec,\r
2500         IN              const   ib_gid_t*               const           p_dgid,\r
2501         IN              const   ib_gid_t*               const           p_sgid,\r
2502         IN              const   ib_net16_t                                      dlid,\r
2503         IN              const   ib_net16_t                                      slid,\r
2504         IN              const   uint8_t                                         num_path,\r
2505         IN              const   ib_net16_t                                      pkey,\r
2506         IN              const   uint8_t                                         sl,\r
2507         IN              const   uint8_t                                         mtu_selector,\r
2508         IN              const   uint8_t                                         mtu,\r
2509         IN              const   uint8_t                                         rate_selector,\r
2510         IN              const   uint8_t                                         rate,\r
2511         IN              const   uint8_t                                         pkt_life_selector,\r
2512         IN              const   uint8_t                                         pkt_life,\r
2513         IN              const   uint8_t                                         preference )\r
2514 {\r
2515         p_rec->dgid = *p_dgid;\r
2516         p_rec->sgid = *p_sgid;\r
2517         p_rec->dlid = dlid;\r
2518         p_rec->slid = slid;\r
2519         p_rec->num_path = num_path;\r
2520         p_rec->pkey = pkey;\r
2521         /* Lower 4 bits of path rec's SL are reserved. */\r
2522         p_rec->sl = cl_ntoh16( sl );\r
2523         p_rec->mtu = (uint8_t)((mtu & IB_PATH_REC_BASE_MASK) |\r
2524                         (uint8_t)(mtu_selector << 6));\r
2525         p_rec->rate = (uint8_t)((rate & IB_PATH_REC_BASE_MASK) |\r
2526                         (uint8_t)(rate_selector << 6));\r
2527         p_rec->pkt_life = (uint8_t)((pkt_life & IB_PATH_REC_BASE_MASK) |\r
2528                         (uint8_t)(pkt_life_selector << 6));\r
2529         p_rec->preference = preference;\r
2530 \r
2531         /* Clear global routing fields for local path records */\r
2532         p_rec->hop_flow_raw.val = 0;\r
2533         p_rec->tclass = 0;\r
2534 \r
2535         p_rec->resv0 = 0;\r
2536         p_rec->resv1 = 0;\r
2537         p_rec->resv2 = 0;\r
2538 }\r
2539 /*\r
2540 * PARAMETERS\r
2541 *       p_rec\r
2542 *               [in] Pointer to the path record object.\r
2543 *\r
2544 *       dgid\r
2545 *               [in] GID of destination port.\r
2546 *\r
2547 *       sgid\r
2548 *               [in] GID of source port.\r
2549 *\r
2550 *       dlid\r
2551 *               [in] LID of destination port.\r
2552 *\r
2553 *       slid\r
2554 *               [in] LID of source port.\r
2555 *\r
2556 *       num_path\r
2557 *               [in] In queries, maximum number of paths to return.\r
2558 *               In responses, undefined.\r
2559 *\r
2560 *       pkey\r
2561 *               [in] Partition key (P_Key) to use on this path.\r
2562 *\r
2563 *       sl\r
2564 *               [in] Service level to use on this path.  Lower 4-bits are valid.\r
2565 *\r
2566 *       mtu_selector\r
2567 *               [in] Encoded MTU selector value to use on this path\r
2568 *\r
2569 *       mtu\r
2570 *               [in] Encoded MTU to use on this path\r
2571 *\r
2572 *       rate_selector\r
2573 *               [in] Encoded rate selector value to use on this path.\r
2574 *\r
2575 *       rate\r
2576 *               [in] Encoded rate to use on this path.\r
2577 *\r
2578 *       pkt_life_selector\r
2579 *               [in] Encoded Packet selector value lifetime for this path.\r
2580 *\r
2581 *       pkt_life\r
2582 *               [in] Encoded Packet lifetime for this path.\r
2583 *\r
2584 *       preference\r
2585 *               [in] Indicates the relative merit of this path versus other path\r
2586 *               records returned from the SA.  Lower numbers are better.\r
2587 *\r
2588 * RETURN VALUES\r
2589 *       None.\r
2590 *\r
2591 * NOTES\r
2592 *\r
2593 * SEE ALSO\r
2594 *       ib_gid_t\r
2595 *********/\r
2596 \r
2597 /****f* IBA Base: Types/ib_path_rec_num_path\r
2598 * NAME\r
2599 *       ib_path_rec_num_path\r
2600 *\r
2601 * DESCRIPTION\r
2602 *       Get max number of paths to return.\r
2603 *\r
2604 * SYNOPSIS\r
2605 */\r
2606 static inline uint8_t   \r
2607 ib_path_rec_num_path(\r
2608         IN      const   ib_path_rec_t* const    p_rec )\r
2609 {\r
2610         return( p_rec->num_path &0x7F );\r
2611 }\r
2612 /*\r
2613 * PARAMETERS\r
2614 *       p_rec\r
2615 *               [in] Pointer to the path record object.\r
2616 *\r
2617 * RETURN VALUES\r
2618 *       Maximum number of paths to return for each unique SGID_DGID combination.\r
2619 *\r
2620 * NOTES\r
2621 *\r
2622 * SEE ALSO\r
2623 *       ib_path_rec_t\r
2624 *********/\r
2625 \r
2626 /****f* IBA Base: Types/ib_path_rec_sl\r
2627 * NAME\r
2628 *       ib_path_rec_sl\r
2629 *\r
2630 * DESCRIPTION\r
2631 *       Get path service level.\r
2632 *\r
2633 * SYNOPSIS\r
2634 */\r
2635 AL_INLINE uint8_t AL_API\r
2636 ib_path_rec_sl(\r
2637         IN              const   ib_path_rec_t* const            p_rec )\r
2638 {\r
2639         return( (uint8_t)((cl_ntoh16( p_rec->sl )) & 0xF) );\r
2640 }\r
2641 /*\r
2642 * PARAMETERS\r
2643 *       p_rec\r
2644 *               [in] Pointer to the path record object.\r
2645 *\r
2646 * RETURN VALUES\r
2647 *       SL.\r
2648 *\r
2649 * NOTES\r
2650 *\r
2651 * SEE ALSO\r
2652 *       ib_path_rec_t\r
2653 *********/\r
2654 \r
2655 /****f* IBA Base: Types/ib_path_rec_mtu\r
2656 * NAME\r
2657 *       ib_path_rec_mtu\r
2658 *\r
2659 * DESCRIPTION\r
2660 *       Get encoded path MTU.\r
2661 *\r
2662 * SYNOPSIS\r
2663 */\r
2664 AL_INLINE uint8_t AL_API\r
2665 ib_path_rec_mtu(\r
2666         IN              const   ib_path_rec_t* const            p_rec )\r
2667 {\r
2668         return( (uint8_t)(p_rec->mtu & IB_PATH_REC_BASE_MASK) );\r
2669 }\r
2670 /*\r
2671 * PARAMETERS\r
2672 *       p_rec\r
2673 *               [in] Pointer to the path record object.\r
2674 *\r
2675 * RETURN VALUES\r
2676 *       Encoded path MTU.\r
2677 *               1: 256\r
2678 *               2: 512\r
2679 *               3: 1024\r
2680 *               4: 2048\r
2681 *               5: 4096\r
2682 *               others: reserved\r
2683 *\r
2684 * NOTES\r
2685 *\r
2686 * SEE ALSO\r
2687 *       ib_path_rec_t\r
2688 *********/\r
2689 \r
2690 /****f* IBA Base: Types/ib_path_rec_mtu_sel\r
2691 * NAME\r
2692 *       ib_path_rec_mtu_sel\r
2693 *\r
2694 * DESCRIPTION\r
2695 *       Get encoded path MTU selector.\r
2696 *\r
2697 * SYNOPSIS\r
2698 */\r
2699 AL_INLINE uint8_t AL_API\r
2700 ib_path_rec_mtu_sel(\r
2701         IN              const   ib_path_rec_t* const            p_rec )\r
2702 {\r
2703         return( (uint8_t)((p_rec->mtu & IB_PATH_REC_SELECTOR_MASK) >> 6) );\r
2704 }\r
2705 /*\r
2706 * PARAMETERS\r
2707 *       p_rec\r
2708 *               [in] Pointer to the path record object.\r
2709 *\r
2710 * RETURN VALUES\r
2711 *       Encoded path MTU selector value (for queries).\r
2712 *               0: greater than MTU specified\r
2713 *               1: less than MTU specified\r
2714 *               2: exactly the MTU specified\r
2715 *               3: largest MTU available\r
2716 *\r
2717 * NOTES\r
2718 *\r
2719 * SEE ALSO\r
2720 *       ib_path_rec_t\r
2721 *********/\r
2722 \r
2723 /****f* IBA Base: Types/ib_path_rec_rate\r
2724 * NAME\r
2725 *       ib_path_rec_rate\r
2726 *\r
2727 * DESCRIPTION\r
2728 *       Get encoded path rate.\r
2729 *\r
2730 * SYNOPSIS\r
2731 */\r
2732 AL_INLINE uint8_t AL_API\r
2733 ib_path_rec_rate(\r
2734         IN              const   ib_path_rec_t* const            p_rec )\r
2735 {\r
2736         return( (uint8_t)(p_rec->rate & IB_PATH_REC_BASE_MASK) );\r
2737 }\r
2738 /*\r
2739 * PARAMETERS\r
2740 *       p_rec\r
2741 *               [in] Pointer to the path record object.\r
2742 *\r
2743 * RETURN VALUES\r
2744 *       Encoded path rate.\r
2745 *               2: 2.5 Gb/sec.\r
2746 *               3: 10 Gb/sec.\r
2747 *               4: 30 Gb/sec.\r
2748 *               5: 5 Gb/sec.\r
2749 *               6: 20 Gb/sec.\r
2750 *               7: 40 Gb/sec.\r
2751 *               8: 60 Gb/sec.\r
2752 *               9: 80 Gb/sec.\r
2753 *               10: 120 Gb/sec.\r
2754 *               others: reserved\r
2755 *\r
2756 * NOTES\r
2757 *\r
2758 * SEE ALSO\r
2759 *       ib_path_rec_t\r
2760 *********/\r
2761 \r
2762 /****f* IBA Base: Types/ib_path_rec_rate_sel\r
2763 * NAME\r
2764 *       ib_path_rec_rate_sel\r
2765 *\r
2766 * DESCRIPTION\r
2767 *       Get encoded path rate selector.\r
2768 *\r
2769 * SYNOPSIS\r
2770 */\r
2771 AL_INLINE uint8_t AL_API\r
2772 ib_path_rec_rate_sel(\r
2773         IN              const   ib_path_rec_t* const            p_rec )\r
2774 {\r
2775         return( (uint8_t)((p_rec->rate & IB_PATH_REC_SELECTOR_MASK) >> 6) );\r
2776 }\r
2777 /*\r
2778 * PARAMETERS\r
2779 *       p_rec\r
2780 *               [in] Pointer to the path record object.\r
2781 *\r
2782 * RETURN VALUES\r
2783 *       Encoded path rate selector value (for queries).\r
2784 *               0: greater than rate specified\r
2785 *               1: less than rate specified\r
2786 *               2: exactly the rate specified\r
2787 *               3: largest rate available\r
2788 *\r
2789 * NOTES\r
2790 *\r
2791 * SEE ALSO\r
2792 *       ib_path_rec_t\r
2793 *********/\r
2794 \r
2795 /****f* IBA Base: Types/ib_path_rec_pkt_life\r
2796 * NAME\r
2797 *       ib_path_rec_pkt_life\r
2798 *\r
2799 * DESCRIPTION\r
2800 *       Get encoded path pkt_life.\r
2801 *\r
2802 * SYNOPSIS\r
2803 */\r
2804 AL_INLINE uint8_t AL_API\r
2805 ib_path_rec_pkt_life(\r
2806         IN              const   ib_path_rec_t* const            p_rec )\r
2807 {\r
2808         return( (uint8_t)(p_rec->pkt_life & IB_PATH_REC_BASE_MASK) );\r
2809 }\r
2810 /*\r
2811 * PARAMETERS\r
2812 *       p_rec\r
2813 *               [in] Pointer to the path record object.\r
2814 *\r
2815 * RETURN VALUES\r
2816 *       Encoded path pkt_life = 4.096 ┬Ásec * 2 ** PacketLifeTime.\r
2817 *\r
2818 * NOTES\r
2819 *\r
2820 * SEE ALSO\r
2821 *       ib_path_rec_t\r
2822 *********/\r
2823 \r
2824 /****f* IBA Base: Types/ib_path_rec_pkt_life_sel\r
2825 * NAME\r
2826 *       ib_path_rec_pkt_life_sel\r
2827 *\r
2828 * DESCRIPTION\r
2829 *       Get encoded path pkt_lifetime selector.\r
2830 *\r
2831 * SYNOPSIS\r
2832 */\r
2833 AL_INLINE uint8_t AL_API\r
2834 ib_path_rec_pkt_life_sel(\r
2835         IN              const   ib_path_rec_t* const            p_rec )\r
2836 {\r
2837         return( (uint8_t)((p_rec->pkt_life & IB_PATH_REC_SELECTOR_MASK) >> 6 ));\r
2838 }\r
2839 /*\r
2840 * PARAMETERS\r
2841 *       p_rec\r
2842 *               [in] Pointer to the path record object.\r
2843 *\r
2844 * RETURN VALUES\r
2845 *       Encoded path pkt_lifetime selector value (for queries).\r
2846 *               0: greater than rate specified\r
2847 *               1: less than rate specified\r
2848 *               2: exactly the rate specified\r
2849 *               3: smallest packet lifetime available\r
2850 *\r
2851 * NOTES\r
2852 *\r
2853 * SEE ALSO\r
2854 *       ib_path_rec_t\r
2855 *********/\r
2856 \r
2857 /****f* IBA Base: Types/ib_path_rec_flow_lbl\r
2858 * NAME\r
2859 *       ib_path_rec_flow_lbl\r
2860 *\r
2861 * DESCRIPTION\r
2862 *       Get flow label.\r
2863 *\r
2864 * SYNOPSIS\r
2865 */\r
2866 AL_INLINE net32_t AL_API\r
2867 ib_path_rec_flow_lbl(\r
2868         IN              const   ib_path_rec_t* const            p_rec )\r
2869 {\r
2870         return( cl_hton32( (cl_ntoh32(p_rec->hop_flow_raw.val) >> 8) & 0x000FFFFF ) );\r
2871 }\r
2872 /*\r
2873 * PARAMETERS\r
2874 *       p_rec\r
2875 *               [in] Pointer to the path record object.\r
2876 *\r
2877 * RETURN VALUES\r
2878 *       Flow label of the path record.\r
2879 *\r
2880 * NOTES\r
2881 *\r
2882 * SEE ALSO\r
2883 *       ib_path_rec_t\r
2884 *********/\r
2885 \r
2886 /****f* IBA Base: Types/ib_path_rec_hop_limit\r
2887 * NAME\r
2888 *       ib_path_rec_hop_limit\r
2889 *\r
2890 * DESCRIPTION\r
2891 *       Get hop limit.\r
2892 *\r
2893 * SYNOPSIS\r
2894 */\r
2895 AL_INLINE uint8_t AL_API\r
2896 ib_path_rec_hop_limit(\r
2897         IN              const   ib_path_rec_t* const            p_rec )\r
2898 {\r
2899         return( p_rec->hop_flow_raw.bytes[3] );\r
2900 }\r
2901 /*\r
2902 * PARAMETERS\r
2903 *       p_rec\r
2904 *               [in] Pointer to the path record object.\r
2905 *\r
2906 * RETURN VALUES\r
2907 *       Hop limit of the path record.\r
2908 *\r
2909 * NOTES\r
2910 *\r
2911 * SEE ALSO\r
2912 *       ib_path_rec_t\r
2913 *********/\r
2914 \r
2915 /****f* IBA Base: Types/ib_path_rec_set_hop_flow_raw\r
2916 * NAME\r
2917 *       ib_path_rec_set_hop_flow_raw\r
2918 *\r
2919 * DESCRIPTION\r
2920 *       Sets the hop limit, flow label, and raw traffic bits of a path record.\r
2921 *\r
2922 * SYNOPSIS\r
2923 */\r
2924 AL_INLINE void AL_API\r
2925 ib_path_rec_set_hop_flow_raw(\r
2926                 OUT                     ib_path_rec_t* const            p_rec,\r
2927         IN              const   uint8_t                                         hop_limit,\r
2928         IN              const   net32_t                                         flow_lbl,\r
2929         IN              const   boolean_t                                       raw )\r
2930 {\r
2931         p_rec->hop_flow_raw.val = (cl_ntoh32( flow_lbl ) & 0x000FFFFF) << 8;\r
2932         if( raw )\r
2933                 p_rec->hop_flow_raw.val |= 0x80000000;\r
2934         p_rec->hop_flow_raw.val = cl_hton32( p_rec->hop_flow_raw.val );\r
2935         p_rec->hop_flow_raw.bytes[3] = hop_limit;\r
2936 }\r
2937 /*\r
2938 * PARAMETERS\r
2939 *       p_rec\r
2940 *               Pointer to the path record whose hop limit, flow label, and rab\r
2941 *               traffic fields to set.\r
2942 *\r
2943 *       hop_limit\r
2944 *               Hop limit to set in the path record.\r
2945 *\r
2946 *       flow_lbl\r
2947 *               Flow label, in network byte order, to set in the path record.\r
2948 *\r
2949 *       raw\r
2950 *               Boolean flag to indicate whether the path record is for raw traffic.\r
2951 *\r
2952 * SEE ALSO\r
2953 *       ib_path_rec_t\r
2954 *********/\r
2955 \r
2956 \r
2957 /****s* IBA Base: Constants/IB_CLASS_CAP_TRAP\r
2958 * NAME\r
2959 *       IB_CLASS_CAP_TRAP\r
2960 *\r
2961 * DESCRIPTION\r
2962 *       ClassPortInfo CapabilityMask bits.  This bit will be set\r
2963 *       if the class supports Trap() MADs (13.4.8.1).\r
2964 *\r
2965 * SEE ALSO\r
2966 *       ib_class_port_info_t, IB_CLASS_CAP_GETSET\r
2967 *\r
2968 * SOURCE\r
2969 */\r
2970 #define IB_CLASS_CAP_TRAP                                       0x0001\r
2971 /*********/\r
2972 /****s* IBA Base: Constants/IB_CLASS_CAP_GETSET\r
2973 * NAME\r
2974 *       IB_CLASS_CAP_GETSET\r
2975 *\r
2976 * DESCRIPTION\r
2977 *       ClassPortInfo CapabilityMask bits.  This bit will be set\r
2978 *       if the class supports Get(Notice) and Set(Notice) MADs (13.4.8.1).\r
2979 *\r
2980 * SEE ALSO\r
2981 *       ib_class_port_info_t, IB_CLASS_CAP_TRAP\r
2982 *\r
2983 * SOURCE\r
2984 */\r
2985 #define IB_CLASS_CAP_GETSET                                     0x0002\r
2986 /*********/\r
2987 /****s* IBA Base: Constants/IB_CLASS_RESP_TIME_MASK\r
2988 * NAME\r
2989 *       IB_CLASS_RESP_TIME_MASK\r
2990 *\r
2991 * DESCRIPTION\r
2992 *       Mask bits to extract the reponse time value from the\r
2993 *       resp_time_val field of ib_class_port_info_t.\r
2994 *\r
2995 * SEE ALSO\r
2996 *       ib_class_port_info_t\r
2997 *\r
2998 * SOURCE\r
2999 */\r
3000 #define IB_CLASS_RESP_TIME_MASK                         0x1F\r
3001 /*********/\r
3002 /****s* IBA Base: Types/ib_class_port_info_t\r
3003 * NAME\r
3004 *       ib_class_port_info_t\r
3005 *\r
3006 * DESCRIPTION\r
3007 *       IBA defined ClassPortInfo attribute (13.4.8.1)\r
3008 *       route between two end-points on a subnet.\r
3009 *\r
3010 * SYNOPSIS\r
3011 */\r
3012 #include <complib/cl_packon.h>\r
3013 typedef struct _ib_class_port_info\r
3014 {\r
3015         uint8_t                                 base_ver;\r
3016         uint8_t                                 class_ver;\r
3017         ib_net16_t                              cap_mask;\r
3018         ib_net32_t                              resp_time_val;\r
3019         ib_gid_t                                redir_gid;\r
3020         ib_net32_t                              redir_tc_sl_fl;\r
3021         ib_net16_t                              redir_lid;\r
3022         ib_net16_t                              redir_pkey;\r
3023         ib_net32_t                              redir_qp;\r
3024         ib_net32_t                              redir_qkey;\r
3025         ib_gid_t                                trap_gid;\r
3026         ib_net32_t                              trap_tc_sl_fl;\r
3027         ib_net16_t                              trap_lid;\r
3028         ib_net16_t                              trap_pkey;\r
3029         ib_net32_t                              trap_hop_qp;\r
3030         ib_net32_t                              trap_qkey;\r
3031 \r
3032 }       PACK_SUFFIX ib_class_port_info_t;\r
3033 #include <complib/cl_packoff.h>\r
3034 /*\r
3035 * FIELDS\r
3036 *       base_ver\r
3037 *               Maximum supported MAD Base Version.\r
3038 *\r
3039 *       class_ver\r
3040 *               Maximum supported management class version.\r
3041 *\r
3042 *       cap_mask\r
3043 *               Supported capabilities of this management class.\r
3044 *\r
3045 *       resp_time_value\r
3046 *               Maximum expected response time.\r
3047 *\r
3048 *       redr_gid\r
3049 *               GID to use for redirection, or zero\r
3050 *\r
3051 *       recdir_tc_sl_fl\r
3052 *               Traffic class, service level and flow label the requester\r
3053 *               should use if the service is redirected.\r
3054 *\r
3055 *       redir_lid\r
3056 *               LID used for redirection, or zero\r
3057 *\r
3058 *       redir_pkey\r
3059 *               P_Key used for redirection\r
3060 *\r
3061 *       redir_qp\r
3062 *               QP number used for redirection\r
3063 *\r
3064 *       redir_qkey\r
3065 *               Q_Key associated with the redirected QP.  This shall be the\r
3066 *               well known Q_Key value.\r
3067 *\r
3068 *       trap_gid\r
3069 *               GID value used for trap messages from this service.\r
3070 *\r
3071 *       trap_tc_sl_fl\r
3072 *               Traffic class, service level and flow label used for\r
3073 *               trap messages originated by this service.\r
3074 *\r
3075 *       trap_lid\r
3076 *               LID used for trap messages, or zero\r
3077 *\r
3078 *       trap_pkey\r
3079 *               P_Key used for trap messages\r
3080 *\r
3081 *       trap_hop_qp\r
3082 *               Hop limit (upper 8 bits) and QP number used for trap messages\r
3083 *\r
3084 *       trap_qkey\r
3085 *               Q_Key associated with the trap messages QP.\r
3086 *\r
3087 * SEE ALSO\r
3088 *       IB_CLASS_CAP_GETSET, IB_CLASS_CAP_TRAP\r
3089 *\r
3090 *********/\r
3091 /****s* IBA Base: Types/ib_sm_info_t\r
3092 * NAME\r
3093 *       ib_sm_info_t\r
3094 *\r
3095 * DESCRIPTION\r
3096 *       SMInfo structure (14.2.5.13).\r
3097 *\r
3098 * SYNOPSIS\r
3099 */\r
3100 #include <complib/cl_packon.h>\r
3101 typedef struct _ib_sm_info\r
3102 {\r
3103         ib_net64_t                      guid;\r
3104         ib_net64_t                      sm_key;\r
3105         ib_net32_t                      act_count;\r
3106         uint8_t                         pri_state;\r
3107 \r
3108 }       PACK_SUFFIX ib_sm_info_t;\r
3109 #include <complib/cl_packoff.h>\r
3110 /*\r
3111 * FIELDS\r
3112 *       guid\r
3113 *               Port GUID for this SM.\r
3114 *\r
3115 *       sm_key\r
3116 *               SM_Key of this SM.\r
3117 *\r
3118 *       act_count\r
3119 *               Activity counter used as a heartbeat.\r
3120 *\r
3121 *       pri_state\r
3122 *               Priority and State information\r
3123 *\r
3124 * SEE ALSO\r
3125 *********/\r
3126 \r
3127 /****f* IBA Base: Types/ib_sminfo_get_priority\r
3128 * NAME\r
3129 *       ib_sminfo_get_priority\r
3130 *\r
3131 * DESCRIPTION\r
3132 *       Returns the priority value.\r
3133 *\r
3134 * SYNOPSIS\r
3135 */\r
3136 AL_INLINE uint8_t AL_API\r
3137 ib_sminfo_get_priority(\r
3138         IN              const   ib_sm_info_t* const                     p_smi )\r
3139 {\r
3140         return( (uint8_t)((p_smi->pri_state & 0xF0)>>4) );\r
3141 }\r
3142 /*\r
3143 * PARAMETERS\r
3144 *       p_smi\r
3145 *               [in] Pointer to the SMInfo Attribute.\r
3146 *\r
3147 * RETURN VALUES\r
3148 *       Returns the priority value.\r
3149 *\r
3150 * NOTES\r
3151 *\r
3152 * SEE ALSO\r
3153 *********/\r
3154 \r
3155 /****f* IBA Base: Types/ib_sminfo_get_state\r
3156 * NAME\r
3157 *       ib_sminfo_get_state\r
3158 *\r
3159 * DESCRIPTION\r
3160 *       Returns the state value.\r
3161 *\r
3162 * SYNOPSIS\r
3163 */\r
3164 AL_INLINE uint8_t AL_API\r
3165 ib_sminfo_get_state(\r
3166         IN              const   ib_sm_info_t* const                     p_smi )\r
3167 {\r
3168         return( (uint8_t)(p_smi->pri_state & 0x0F) );\r
3169 }\r
3170 /*\r
3171 * PARAMETERS\r
3172 *       p_smi\r
3173 *               [in] Pointer to the SMInfo Attribute.\r
3174 *\r
3175 * RETURN VALUES\r
3176 *       Returns the state value.\r
3177 *\r
3178 * NOTES\r
3179 *\r
3180 * SEE ALSO\r
3181 *********/\r
3182 \r
3183 /****s* IBA Base: Types/ib_mad_t\r
3184 * NAME\r
3185 *       ib_mad_t\r
3186 *\r
3187 * DESCRIPTION\r
3188 *       IBA defined MAD header (13.4.3)\r
3189 *\r
3190 * SYNOPSIS\r
3191 */\r
3192 #include <complib/cl_packon.h>\r
3193 typedef struct _ib_mad\r
3194 {\r
3195         uint8_t                                 base_ver;\r
3196         uint8_t                                 mgmt_class;\r
3197         uint8_t                                 class_ver;\r
3198         uint8_t                                 method;\r
3199         ib_net16_t                              status;\r
3200         ib_net16_t                              class_spec;\r
3201         ib_net64_t                              trans_id;\r
3202         ib_net16_t                              attr_id;\r
3203         ib_net16_t                              resv;\r
3204         ib_net32_t                              attr_mod;\r
3205 \r
3206 }       PACK_SUFFIX ib_mad_t;\r
3207 #include <complib/cl_packoff.h>\r
3208 /*\r
3209 * FIELDS\r
3210 *       base_ver\r
3211 *               MAD base format.\r
3212 *\r
3213 *       mgmt_class\r
3214 *               Class of operation.\r
3215 *\r
3216 *       class_ver\r
3217 *               Version of MAD class-specific format.\r
3218 *\r
3219 *       method\r
3220 *               Method to perform, including 'R' bit.\r
3221 *\r
3222 *       status\r
3223 *               Status of operation.\r
3224 *\r
3225 *       class_spec\r
3226 *               Reserved for subnet management.\r
3227 *\r
3228 *       trans_id\r
3229 *               Transaction ID.\r
3230 *\r
3231 *       attr_id\r
3232 *               Attribute ID.\r
3233 *\r
3234 *       resv\r
3235 *               Reserved field.\r
3236 *\r
3237 *       attr_mod\r
3238 *               Attribute modifier.\r
3239 *\r
3240 * SEE ALSO\r
3241 *********/\r
3242 \r
3243 \r
3244 /****s* IBA Base: Types/ib_rmpp_mad_t\r
3245 * NAME\r
3246 *       ib_rmpp_mad_t\r
3247 *\r
3248 * DESCRIPTION\r
3249 *       IBA defined MAD RMPP header (13.6.2.1)\r
3250 *\r
3251 * SYNOPSIS\r
3252 */\r
3253 #include <complib/cl_packon.h>\r
3254 typedef struct _ib_rmpp_mad\r
3255 {\r
3256         ib_mad_t                                common_hdr;\r
3257 \r
3258         uint8_t                                 rmpp_version;\r
3259         uint8_t                                 rmpp_type;\r
3260         uint8_t                                 rmpp_flags;\r
3261         uint8_t                                 rmpp_status;\r
3262 \r
3263         ib_net32_t                              seg_num;\r
3264         ib_net32_t                              paylen_newwin;\r
3265 \r
3266 }       PACK_SUFFIX ib_rmpp_mad_t;\r
3267 #include <complib/cl_packoff.h>\r
3268 /*\r
3269 * SEE ALSO\r
3270 *       ib_mad_t\r
3271 *********/\r
3272 \r
3273 \r
3274 /****f* IBA Base: Types/ib_mad_init_new\r
3275 * NAME\r
3276 *       ib_mad_init_new\r
3277 *\r
3278 * DESCRIPTION\r
3279 *       Initializes a MAD common header.\r
3280 *\r
3281 * SYNOPSIS\r
3282 */\r
3283 AL_INLINE void AL_API\r
3284 ib_mad_init_new(\r
3285         IN                              ib_mad_t* const                         p_mad,\r
3286         IN              const   uint8_t                                         mgmt_class,\r
3287         IN              const   uint8_t                                         class_ver,\r
3288         IN              const   uint8_t                                         method,\r
3289         IN              const   ib_net64_t                                      trans_id,\r
3290         IN              const   ib_net16_t                                      attr_id,\r
3291         IN              const   ib_net32_t                                      attr_mod )\r
3292 {\r
3293         CL_ASSERT( p_mad );\r
3294         p_mad->base_ver = 1;\r
3295         p_mad->mgmt_class = mgmt_class;\r
3296         p_mad->class_ver = class_ver;\r
3297         p_mad->method = method;\r
3298         p_mad->status = 0;\r
3299         p_mad->class_spec = 0;\r
3300         p_mad->trans_id = trans_id;\r
3301         p_mad->attr_id = attr_id;\r
3302         p_mad->resv = 0;\r
3303         p_mad->attr_mod = attr_mod;\r
3304 }\r
3305 /*\r
3306 * PARAMETERS\r
3307 *       p_mad\r
3308 *               [in] Pointer to the MAD common header.\r
3309 *\r
3310 *       mgmt_class\r
3311 *               [in] Class of operation.\r
3312 *\r
3313 *       class_ver\r
3314 *               [in] Version of MAD class-specific format.\r
3315 *\r
3316 *       method\r
3317 *               [in] Method to perform, including 'R' bit.\r
3318 *\r
3319 *       trans_Id\r
3320 *               [in] Transaction ID.\r
3321 *\r
3322 *       attr_id\r
3323 *               [in] Attribute ID.\r
3324 *\r
3325 *       attr_mod\r
3326 *               [in] Attribute modifier.\r
3327 *\r
3328 * RETURN VALUES\r
3329 *       None.\r
3330 *\r
3331 * NOTES\r
3332 *\r
3333 * SEE ALSO\r
3334 *       ib_mad_t\r
3335 *********/\r
3336 \r
3337 /****f* IBA Base: Types/ib_mad_init_response\r
3338 * NAME\r
3339 *       ib_mad_init_response\r
3340 *\r
3341 * DESCRIPTION\r
3342 *       Initializes a MAD common header as a response.\r
3343 *\r
3344 * SYNOPSIS\r
3345 */\r
3346 AL_INLINE void AL_API\r
3347 ib_mad_init_response(\r
3348         IN              const   ib_mad_t* const                         p_req_mad,\r
3349         IN                              ib_mad_t* const                         p_mad,\r
3350         IN              const   ib_net16_t                                      status )\r
3351 {\r
3352         CL_ASSERT( p_req_mad );\r
3353         CL_ASSERT( p_mad );\r
3354         *p_mad = *p_req_mad;\r
3355         p_mad->status = status;\r
3356         if( p_mad->method == IB_MAD_METHOD_SET )\r
3357                 p_mad->method = IB_MAD_METHOD_GET;\r
3358         p_mad->method |= IB_MAD_METHOD_RESP_MASK;\r
3359 }\r
3360 /*\r
3361 * PARAMETERS\r
3362 *       p_req_mad\r
3363 *               [in] Pointer to the MAD common header in the original request MAD.\r
3364 *\r
3365 *       p_mad\r
3366 *               [in] Pointer to the MAD common header to initialize.\r
3367 *\r
3368 *       status\r
3369 *               [in] MAD Status value to return;\r
3370 *\r
3371 * RETURN VALUES\r
3372 *       None.\r
3373 *\r
3374 * NOTES\r
3375 *       p_req_mad and p_mad may point to the same MAD.\r
3376 *\r
3377 * SEE ALSO\r
3378 *       ib_mad_t\r
3379 *********/\r
3380 \r
3381 /****f* IBA Base: Types/ib_mad_is_response\r
3382 * NAME\r
3383 *       ib_mad_is_response\r
3384 *\r
3385 * DESCRIPTION\r
3386 *       Returns TRUE if the MAD is a response ('R' bit set),\r
3387 *       FALSE otherwise.\r
3388 *\r
3389 * SYNOPSIS\r
3390 */\r
3391 AL_INLINE boolean_t AL_API\r
3392 ib_mad_is_response(\r
3393         IN              const   ib_mad_t* const                         p_mad )\r
3394 {\r
3395         CL_ASSERT( p_mad );\r
3396         return( (p_mad->method & IB_MAD_METHOD_RESP_MASK) ==\r
3397                         IB_MAD_METHOD_RESP_MASK );\r
3398 }\r
3399 /*\r
3400 * PARAMETERS\r
3401 *       p_mad\r
3402 *               [in] Pointer to the MAD.\r
3403 *\r
3404 * RETURN VALUES\r
3405 *       Returns TRUE if the MAD is a response ('R' bit set),\r
3406 *       FALSE otherwise.\r
3407 *\r
3408 * NOTES\r
3409 *\r
3410 * SEE ALSO\r
3411 *       ib_mad_t\r
3412 *********/\r
3413 \r
3414 \r
3415 #define IB_RMPP_TYPE_DATA                       1\r
3416 #define IB_RMPP_TYPE_ACK                        2\r
3417 #define IB_RMPP_TYPE_STOP                       3\r
3418 #define IB_RMPP_TYPE_ABORT                      4\r
3419 \r
3420 #define IB_RMPP_NO_RESP_TIME            0x1F\r
3421 #define IB_RMPP_FLAG_ACTIVE                     0x01\r
3422 #define IB_RMPP_FLAG_FIRST                      0x02\r
3423 #define IB_RMPP_FLAG_LAST                       0x04\r
3424 \r
3425 #define IB_RMPP_STATUS_SUCCESS          0\r
3426 #define IB_RMPP_STATUS_RESX                     1               /* resources exhausted */\r
3427 #define IB_RMPP_STATUS_T2L                      118             /* time too long */\r
3428 #define IB_RMPP_STATUS_BAD_LEN          119             /* incon. last and payload len */\r
3429 #define IB_RMPP_STATUS_BAD_SEG          120             /* incon. first and segment no */\r
3430 #define IB_RMPP_STATUS_BADT                     121             /* bad rmpp type */\r
3431 #define IB_RMPP_STATUS_W2S                      122             /* newwindowlast too small */\r
3432 #define IB_RMPP_STATUS_S2B                      123             /* segment no too big */\r
3433 #define IB_RMPP_STATUS_BAD_STATUS       124             /* illegal status */\r
3434 #define IB_RMPP_STATUS_UNV                      125             /* unsupported version */\r
3435 #define IB_RMPP_STATUS_TMR                      126             /* too many retries */\r
3436 #define IB_RMPP_STATUS_UNSPEC           127             /* unspecified */\r
3437 \r
3438 \r
3439 /****f* IBA Base: Types/ib_rmpp_is_flag_set\r
3440 * NAME\r
3441 *       ib_rmpp_is_flag_set\r
3442 *\r
3443 * DESCRIPTION\r
3444 *       Returns TRUE if the MAD has the given RMPP flag set.\r
3445 *\r
3446 * SYNOPSIS\r
3447 */\r
3448 AL_INLINE boolean_t AL_API\r
3449 ib_rmpp_is_flag_set(\r
3450         IN              const   ib_rmpp_mad_t* const            p_rmpp_mad,\r
3451         IN              const   uint8_t                                         flag )\r
3452 {\r
3453         CL_ASSERT( p_rmpp_mad );\r
3454         return( (p_rmpp_mad->rmpp_flags & flag) == flag );\r
3455 }\r
3456 /*\r
3457 * PARAMETERS\r
3458 *       ib_rmpp_mad_t\r
3459 *               [in] Pointer to a MAD with an RMPP header.\r
3460 *\r
3461 *       flag\r
3462 *               [in] The RMPP flag being examined.\r
3463 *\r
3464 * RETURN VALUES\r
3465 *       Returns TRUE if the MAD has the given RMPP flag set.\r
3466 *\r
3467 * NOTES\r
3468 *\r
3469 * SEE ALSO\r
3470 *       ib_mad_t, ib_rmpp_mad_t\r
3471 *********/\r
3472 \r
3473 AL_INLINE void AL_API\r
3474 ib_rmpp_set_resp_time(\r
3475         IN                              ib_rmpp_mad_t* const            p_rmpp_mad,\r
3476         IN              const   uint8_t                                         resp_time )\r
3477 {\r
3478         CL_ASSERT( p_rmpp_mad );\r
3479         p_rmpp_mad->rmpp_flags |= (resp_time << 3);\r
3480 }\r
3481 \r
3482 \r
3483 AL_INLINE uint8_t AL_API\r
3484 ib_rmpp_get_resp_time(\r
3485         IN              const   ib_rmpp_mad_t* const            p_rmpp_mad )\r
3486 {\r
3487         CL_ASSERT( p_rmpp_mad );\r
3488         return( (uint8_t)(p_rmpp_mad->rmpp_flags >> 3) );\r
3489 }\r
3490 \r
3491 \r
3492 /****d* IBA Base: Constants/IB_SMP_DIRECTION\r
3493 * NAME\r
3494 *       IB_SMP_DIRECTION\r
3495 *\r
3496 * DESCRIPTION\r
3497 *       The Direction bit for directed route SMPs.\r
3498 *\r
3499 * SOURCE\r
3500 */\r
3501 #define IB_SMP_DIRECTION_HO             0x8000\r
3502 #define IB_SMP_DIRECTION                (CL_HTON16(IB_SMP_DIRECTION_HO))\r
3503 /**********/\r
3504 \r
3505 /****d* IBA Base: Constants/IB_SMP_STATUS_MASK\r
3506 * NAME\r
3507 *       IB_SMP_STATUS_MASK\r
3508 *\r
3509 * DESCRIPTION\r
3510 *       Mask value for extracting status from a directed route SMP.\r
3511 *\r
3512 * SOURCE\r
3513 */\r
3514 #define IB_SMP_STATUS_MASK_HO           0x7FFF\r
3515 #define IB_SMP_STATUS_MASK              (CL_HTON16(IB_SMP_STATUS_MASK_HO))\r
3516 /**********/\r
3517 \r
3518 /****s* IBA Base: Types/ib_smp_t\r
3519 * NAME\r
3520 *       ib_smp_t\r
3521 *\r
3522 * DESCRIPTION\r
3523 *       IBA defined SMP. (14.2.1.2)\r
3524 *\r
3525 * SYNOPSIS\r
3526 */\r
3527 #define IB_SMP_DATA_SIZE 64\r
3528 #include <complib/cl_packon.h>\r
3529 typedef struct _ib_smp\r
3530 {\r
3531         uint8_t                                 base_ver;\r
3532         uint8_t                                 mgmt_class;\r
3533         uint8_t                                 class_ver;\r
3534         uint8_t                                 method;\r
3535         ib_net16_t                              status;\r
3536         uint8_t                                 hop_ptr;\r
3537         uint8_t                                 hop_count;\r
3538         ib_net64_t                              trans_id;\r
3539         ib_net16_t                              attr_id;\r
3540         ib_net16_t                              resv;\r
3541         ib_net32_t                              attr_mod;\r
3542         ib_net64_t                              m_key;\r
3543         ib_net16_t                              dr_slid;\r
3544         ib_net16_t                              dr_dlid;\r
3545         uint32_t                                resv1[7];\r
3546         uint8_t                                 data[IB_SMP_DATA_SIZE];\r
3547         uint8_t                                 initial_path[IB_SUBNET_PATH_HOPS_MAX];\r
3548         uint8_t                                 return_path[IB_SUBNET_PATH_HOPS_MAX];\r
3549 \r
3550 }       PACK_SUFFIX ib_smp_t;\r
3551 #include <complib/cl_packoff.h>\r
3552 /*\r
3553 * FIELDS\r
3554 *       base_ver\r
3555 *               MAD base format.\r
3556 *\r
3557 *       mgmt_class\r
3558 *               Class of operation.\r
3559 *\r
3560 *       class_ver\r
3561 *               Version of MAD class-specific format.\r
3562 *\r
3563 *       method\r
3564 *               Method to perform, including 'R' bit.\r
3565 *\r
3566 *       status\r
3567 *               Status of operation.\r
3568 *\r
3569 *       hop_ptr\r
3570 *               Hop pointer for directed route MADs.\r
3571 *\r
3572 *       hop_count\r
3573 *               Hop count for directed route MADs.\r
3574 *\r
3575 *       trans_Id\r
3576 *               Transaction ID.\r
3577 *\r
3578 *       attr_id\r
3579 *               Attribute ID.\r
3580 *\r
3581 *       resv\r
3582 *               Reserved field.\r
3583 *\r
3584 *       attr_mod\r
3585 *               Attribute modifier.\r
3586 *\r
3587 *       m_key\r
3588 *               Management key value.\r
3589 *\r
3590 *       dr_slid\r
3591 *               Directed route source LID.\r
3592 *\r
3593 *       dr_dlid\r
3594 *               Directed route destination LID.\r
3595 *\r
3596 *       resv0\r
3597 *               Reserved for 64 byte alignment.\r
3598 *\r
3599 *       data\r
3600 *               MAD data payload.\r
3601 *\r
3602 *       initial_path\r
3603 *               Outbound port list.\r
3604 *\r
3605 *       return_path\r
3606 *               Inbound port list.\r
3607 *\r
3608 * SEE ALSO\r
3609 *********/\r
3610 \r
3611 /****f* IBA Base: Types/ib_smp_get_status\r
3612 * NAME\r
3613 *       ib_smp_get_status\r
3614 *\r
3615 * DESCRIPTION\r
3616 *       Returns the SMP status value in network order.\r
3617 *\r
3618 * SYNOPSIS\r
3619 */\r
3620 AL_INLINE ib_net16_t AL_API\r
3621 ib_smp_get_status(\r
3622         IN              const   ib_smp_t* const                         p_smp )\r
3623 {\r
3624         return( (ib_net16_t)(p_smp->status & IB_SMP_STATUS_MASK) );\r
3625 }\r
3626 /*\r
3627 * PARAMETERS\r
3628 *       p_smp\r
3629 *               [in] Pointer to the SMP packet.\r
3630 *\r
3631 * RETURN VALUES\r
3632 *       Returns the SMP status value in network order.\r
3633 *\r
3634 * NOTES\r
3635 *\r
3636 * SEE ALSO\r
3637 *       ib_smp_t\r
3638 *********/\r
3639 \r
3640 /****f* IBA Base: Types/ib_smp_is_response\r
3641 * NAME\r
3642 *       ib_smp_is_response\r
3643 *\r
3644 * DESCRIPTION\r
3645 *       Returns TRUE if the SMP is a response MAD, FALSE otherwise.\r
3646 *\r
3647 * SYNOPSIS\r
3648 */\r
3649 AL_INLINE boolean_t AL_API\r
3650 ib_smp_is_response(\r
3651         IN              const   ib_smp_t* const                         p_smp )\r
3652 {\r
3653         return( ib_mad_is_response( (const ib_mad_t*)p_smp ) );\r
3654 }\r
3655 /*\r
3656 * PARAMETERS\r
3657 *       p_smp\r
3658 *               [in] Pointer to the SMP packet.\r
3659 *\r
3660 * RETURN VALUES\r
3661 *       Returns TRUE if the SMP is a response MAD, FALSE otherwise.\r
3662 *\r
3663 * NOTES\r
3664 *\r
3665 * SEE ALSO\r
3666 *       ib_smp_t\r
3667 *********/\r
3668 /****f* IBA Base: Types/ib_smp_is_d\r
3669 * NAME\r
3670 *       ib_smp_is_d\r
3671 *\r
3672 * DESCRIPTION\r
3673 *       Returns TRUE if the SMP 'D' (direction) bit is set.\r
3674 *\r
3675 * SYNOPSIS\r
3676 */\r
3677 AL_INLINE boolean_t AL_API\r
3678 ib_smp_is_d(\r
3679         IN              const   ib_smp_t* const                         p_smp )\r
3680 {\r
3681         return( (p_smp->status & IB_SMP_DIRECTION) == IB_SMP_DIRECTION );\r
3682 }\r
3683 /*\r
3684 * PARAMETERS\r
3685 *       p_smp\r
3686 *               [in] Pointer to the SMP packet.\r
3687 *\r
3688 * RETURN VALUES\r
3689 *       Returns TRUE if the SMP 'D' (direction) bit is set.\r
3690 *\r
3691 * NOTES\r
3692 *\r
3693 * SEE ALSO\r
3694 *       ib_smp_t\r
3695 *********/\r
3696 \r
3697 /****f* IBA Base: Types/ib_smp_init_new\r
3698 * NAME\r
3699 *       ib_smp_init_new\r
3700 *\r
3701 * DESCRIPTION\r
3702 *       Initializes a MAD common header.\r
3703 *\r
3704 * TODO\r
3705 *       This is too big for inlining, but leave it here for now\r
3706 *       since there is not yet another convient spot.\r
3707 *\r
3708 * SYNOPSIS\r
3709 */\r
3710 AL_INLINE void AL_API\r
3711 ib_smp_init_new(\r
3712         IN                              ib_smp_t* const                         p_smp,\r
3713         IN              const   uint8_t                                         method,\r
3714         IN              const   ib_net64_t                                      trans_id,\r
3715         IN              const   ib_net16_t                                      attr_id,\r
3716         IN              const   ib_net32_t                                      attr_mod,\r
3717         IN              const   uint8_t                                         hop_count,\r
3718         IN              const   ib_net64_t                                      m_key,\r
3719         IN              const   uint8_t*                                        path_out,\r
3720         IN              const   ib_net16_t                                      dr_slid,\r
3721         IN              const   ib_net16_t                                      dr_dlid )\r
3722 {\r
3723         CL_ASSERT( p_smp );\r
3724         CL_ASSERT( hop_count < IB_SUBNET_PATH_HOPS_MAX );\r
3725         p_smp->base_ver = 1;\r
3726         p_smp->mgmt_class = IB_MCLASS_SUBN_DIR;\r
3727         p_smp->class_ver = 1;\r
3728         p_smp->method = method;\r
3729         p_smp->status = 0;\r
3730         p_smp->hop_ptr = 0;\r
3731         p_smp->hop_count = hop_count;\r
3732         p_smp->trans_id = trans_id;\r
3733         p_smp->attr_id = attr_id;\r
3734         p_smp->resv = 0;\r
3735         p_smp->attr_mod = attr_mod;\r
3736         p_smp->m_key = m_key;\r
3737         p_smp->dr_slid = dr_slid;\r
3738         p_smp->dr_dlid = dr_dlid;\r
3739 \r
3740         cl_memclr( p_smp->resv1,\r
3741                         sizeof(p_smp->resv1) +\r
3742                         sizeof(p_smp->data) +\r
3743                         sizeof(p_smp->initial_path) +\r
3744                         sizeof(p_smp->return_path) );\r
3745 \r
3746         /* copy the path */\r
3747         cl_memcpy( &p_smp->initial_path, path_out,\r
3748                         sizeof( p_smp->initial_path ) );\r
3749 }\r
3750 /*\r
3751 * PARAMETERS\r
3752 *       p_smp\r
3753 *               [in] Pointer to the SMP packet.\r
3754 *\r
3755 *       method\r
3756 *               [in] Method to perform, including 'R' bit.\r
3757 *\r
3758 *       trans_Id\r
3759 *               [in] Transaction ID.\r
3760 *\r
3761 *       attr_id\r
3762 *               [in] Attribute ID.\r
3763 *\r
3764 *       attr_mod\r
3765 *               [in] Attribute modifier.\r
3766 *\r
3767 *       hop_count\r
3768 *               [in] Number of hops in the path.\r
3769 *\r
3770 *       m_key\r
3771 *               [in] Management key for this SMP.\r
3772 *\r
3773 *       path_out\r
3774 *               [in] Port array for outbound path.\r
3775 *\r
3776 *\r