*\r
* SEE ALSO\r
*********/\r
-\r
+
+/****f* IBA Base: Types/ib_gid_is_multicast
+* NAME
+* ib_gid_is_multicast
+*
+* DESCRIPTION
+* Returns a boolean indicating whether a GID is a multicast GID.
+*
+* SYNOPSIS
+*/\r
AL_INLINE boolean_t AL_API\r
ib_gid_is_multicast(\r
IN const ib_gid_t* p_gid )\r
return( p_gid->raw[0] == 0xFF );\r
}\r
\r
+/****f* IBA Base: Types/ib_gid_get_scope
+* NAME
+* ib_gid_get_scope
+*
+* DESCRIPTION
+* Returns scope of (assumed) multicast GID.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_mgid_get_scope(
+ IN const ib_gid_t* p_gid )
+{
+ return( p_gid->raw[1] & 0x0F );
+}
+
+/****f* IBA Base: Types/ib_gid_set_scope
+* NAME
+* ib_gid_set_scope
+*
+* DESCRIPTION
+* Sets scope of (assumed) multicast GID.
+*
+* SYNOPSIS
+*/
+AL_INLINE void AL_API\r
+ib_mgid_set_scope(
+ IN ib_gid_t* const p_gid,
+ IN const uint8_t scope )
+{
+ p_gid->raw[1] &= 0xF0;
+ p_gid->raw[1] |= scope & 0x0F;
+}
+
/****f* IBA Base: Types/ib_gid_set_default\r
* NAME\r
* ib_gid_set_default\r
* SEE ALSO\r
*********/\r
\r
-/* Port Record Component Masks */\r
-#define IB_PR_COMPMASK_LID (CL_HTON64(1<<0))\r
-#define IB_PR_COMPMASK_DGID (CL_HTON64(1<<2))\r
-#define IB_PR_COMPMASK_SGID (CL_HTON64(1<<3))\r
-#define IB_PR_COMPMASK_DLID (CL_HTON64(1<<4))\r
-#define IB_PR_COMPMASK_SLID (CL_HTON64(1<<5))\r
-#define IB_PR_COMPMASK_RAWTRAFIC (CL_HTON64(1<<6))\r
-#define IB_PR_COMPMASK_RESV0 (CL_HTON64(1<<7))\r
-#define IB_PR_COMPMASK_FLOWLABEL (CL_HTON64(1<<8))\r
-#define IB_PR_COMPMASK_HOPLIMIT (CL_HTON64(1<<9))\r
-#define IB_PR_COMPMASK_TCLASS (CL_HTON64(1<<10))\r
-#define IB_PR_COMPMASK_REVERSIBLE (CL_HTON64(1<<11))\r
-#define IB_PR_COMPMASK_NUM_PATH (CL_HTON64(1<<12))\r
-#define IB_PR_COMPMASK_PKEY (CL_HTON64(1<<13))\r
-#define IB_PR_COMPMASK_RESV1 (CL_HTON64(1<<14))\r
-#define IB_PR_COMPMASK_SL (CL_HTON64(1<<15))\r
-#define IB_PR_COMPMASK_MTU_SEL (CL_HTON64(1<<16))\r
-#define IB_PR_COMPMASK_MTU (CL_HTON64(1<<17))\r
-#define IB_PR_COMPMASK_RATE_SEL (CL_HTON64(1<<18))\r
-#define IB_PR_COMPMASK_RATE (CL_HTON64(1<<19))\r
-#define IB_PR_COMPMASK_PKTLIFETIME_SEL (CL_HTON64(1<<20))\r
-#define IB_PR_COMPMASK_PFTLIFETIME (CL_HTON64(1<<21))\r
+/* Path Record Component Masks */
+#define IB_PR_COMPMASK_DGID (CL_HTON64(((uint64_t)1)<<2))
+#define IB_PR_COMPMASK_SGID (CL_HTON64(((uint64_t)1)<<3))
+#define IB_PR_COMPMASK_DLID (CL_HTON64(((uint64_t)1)<<4))
+#define IB_PR_COMPMASK_SLID (CL_HTON64(((uint64_t)1)<<5))
+#define IB_PR_COMPMASK_RAWTRAFFIC (CL_HTON64(((uint64_t)1)<<6))
+#define IB_PR_COMPMASK_RESV0 (CL_HTON64(((uint64_t)1)<<7))
+#define IB_PR_COMPMASK_FLOWLABEL (CL_HTON64(((uint64_t)1)<<8))
+#define IB_PR_COMPMASK_HOPLIMIT (CL_HTON64(((uint64_t)1)<<9))
+#define IB_PR_COMPMASK_TCLASS (CL_HTON64(((uint64_t)1)<<10))
+#define IB_PR_COMPMASK_REVERSIBLE (CL_HTON64(((uint64_t)1)<<11))
+#define IB_PR_COMPMASK_NUM_PATH (CL_HTON64(((uint64_t)1)<<12))\r
+#define IB_PR_COMPMASK_PKEY (CL_HTON64(((uint64_t)1)<<13))
+#define IB_PR_COMPMASK_RESV1 (CL_HTON64(((uint64_t)1)<<14))
+#define IB_PR_COMPMASK_SL (CL_HTON64(((uint64_t)1)<<15))
+#define IB_PR_COMPMASK_MTUSELEC (CL_HTON64(((uint64_t)1)<<16))
+#define IB_PR_COMPMASK_MTU (CL_HTON64(((uint64_t)1)<<17))
+#define IB_PR_COMPMASK_RATESELEC (CL_HTON64(((uint64_t)1)<<18))
+#define IB_PR_COMPMASK_RATE (CL_HTON64(((uint64_t)1)<<19))
+#define IB_PR_COMPMASK_PKTLIFETIMESELEC (CL_HTON64(((uint64_t)1)<<20))
+#define IB_PR_COMPMASK_PKTLIFETIME (CL_HTON64(((uint64_t)1)<<21))
\r
/* Link Record Component Masks */\r
#define IB_LR_COMPMASK_FROM_LID (CL_HTON64(((uint64_t)1)<<0))\r
#define IB_SR_COMPMASK_SDATA64_1 (CL_HTON64(((uint64_t)1)<<36))\r
/* Port Info Record Component Masks */\r
-#define IB_PIR_COMPMASK_LID (CL_HTON64(1<<0))\r
-#define IB_PIR_COMPMASK_PORTNUM (CL_HTON64(1<<1))\r
-#define IB_PIR_COMPMASK_RESV1 (CL_HTON64(1<<2))\r
-#define IB_PIR_COMPMASK_MKEY (CL_HTON64(1<<3))\r
-#define IB_PIR_COMPMASK_GIDPRE (CL_HTON64(1<<4))\r
-#define IB_PIR_COMPMASK_BASELID (CL_HTON64(1<<5))\r
-#define IB_PIR_COMPMASK_SMLID (CL_HTON64(1<<6))\r
-#define IB_PIR_COMPMASK_CAPMASK (CL_HTON64(1<<7))\r
-#define IB_PIR_COMPMASK_DIAGCODE (CL_HTON64(1<<8))\r
-#define IB_PIR_COMPMASK_MKEYLEASEPRD (CL_HTON64(1<<9))\r
-#define IB_PIR_COMPMASK_LOCALPORTNUM (CL_HTON64(1<<10))\r
-#define IB_PIR_COMPMASK_LNKWIDTHSUPPORT (CL_HTON64(1<<11))\r
-#define IB_PIR_COMPMASK_LNKWIDTHACTIVE (CL_HTON64(1<<12))\r
-#define IB_PIR_COMPMASK_LINKWIDTHENABLED (CL_HTON64(1<<13))\r
-#define IB_PIR_COMPMASK_LNKSPEEDSUPPORT (CL_HTON64(1<<14))\r
-#define IB_PIR_COMPMASK_PORTSTATE (CL_HTON64(1<<15))\r
-#define IB_PIR_COMPMASK_PORTPHYSTATE (CL_HTON64(1<<16))\r
-#define IB_PIR_COMPMASK_LINKDWNDFLTSTATE (CL_HTON64(1<<17))\r
-#define IB_PIR_COMPMASK_MKEYPROTBITS (CL_HTON64(1<<18))\r
-#define IB_PIR_COMPMASK_LMC (CL_HTON64(1<<19))\r
-#define IB_PIR_COMPMASK_LINKSPEEDACTIVE (CL_HTON64(1<<20))\r
-#define IB_PIR_COMPMASK_LINKSPEEDENABLE (CL_HTON64(1<<21))\r
-#define IB_PIR_COMPMASK_NEIGHBORMTU (CL_HTON64(1<<22))\r
-#define IB_PIR_COMPMASK_MASTERSMSL (CL_HTON64(1<<23))\r
-#define IB_PIR_COMPMASK_VLCAP (CL_HTON64(1<<24))\r
-#define IB_PIR_COMPMASK_INITTYPE (CL_HTON64(1<<25))\r
-#define IB_PIR_COMPMASK_VLHIGHLIMIT (CL_HTON64(1<<26))\r
-#define IB_PIR_COMPMASK_VLARBHIGHCAP (CL_HTON64(1<<27))\r
-#define IB_PIR_COMPMASK_VLARBLOWCAP (CL_HTON64(1<<28))\r
-#define IB_PIR_COMPMASK_INITTYPEREPLY (CL_HTON64(1<<29))\r
-#define IB_PIR_COMPMASK_MTUCAP (CL_HTON64(1<<30))\r
-#define IB_PIR_COMPMASK_VLSTALLCNT (CL_HTON64(1<<31))\r
-#define IB_PIR_COMPMASK_HOQLIFE (CL_HTON64(((uint64_t)1)<<32))\r
-#define IB_PIR_COMPMASK_OPVLS (CL_HTON64(((uint64_t)1)<<33))\r
-#define IB_PIR_COMPMASK_PARENFIN (CL_HTON64(((uint64_t)1)<<34))\r
-#define IB_PIR_COMPMASK_PARENFOUT (CL_HTON64(((uint64_t)1)<<35))\r
-#define IB_PIR_COMPMASK_FILTERRAWIN (CL_HTON64(((uint64_t)1)<<36))\r
-#define IB_PIR_COMPMASK_FILTERRAWOUT (CL_HTON64(((uint64_t)1)<<37))\r
-#define IB_PIR_COMPMASK_MKEYVIO (CL_HTON64(((uint64_t)1)<<38))\r
-#define IB_PIR_COMPMASK_PKEYVIO (CL_HTON64(((uint64_t)1)<<39))\r
-#define IB_PIR_COMPMASK_QKEYVIO (CL_HTON64(((uint64_t)1)<<40))\r
-#define IB_PIR_COMPMASK_GUIDCAP (CL_HTON64(((uint64_t)1)<<41))\r
-#define IB_PIR_COMPMASK_RESV2 (CL_HTON64(((uint64_t)1)<<42))\r
-#define IB_PIR_COMPMASK_SUBNTO (CL_HTON64(((uint64_t)1)<<43))\r
-#define IB_PIR_COMPMASK_RESV3 (CL_HTON64(((uint64_t)1)<<44))\r
-#define IB_PIR_COMPMASK_RESPTIME (CL_HTON64(((uint64_t)1)<<45))\r
-#define IB_PIR_COMPMASK_LOCALPHYERR (CL_HTON64(((uint64_t)1)<<46))\r
-#define IB_PIR_COMPMASK_OVERRUNERR (CL_HTON64(((uint64_t)1)<<47))\r
+#define IB_PIR_COMPMASK_LID (CL_HTON64(((uint64_t)1)<<0))
+#define IB_PIR_COMPMASK_PORTNUM (CL_HTON64(((uint64_t)1)<<1))
+#define IB_PIR_COMPMASK_RESV1 (CL_HTON64(((uint64_t)1)<<2))
+#define IB_PIR_COMPMASK_MKEY (CL_HTON64(((uint64_t)1)<<3))
+#define IB_PIR_COMPMASK_GIDPRE (CL_HTON64(((uint64_t)1)<<4))
+#define IB_PIR_COMPMASK_BASELID (CL_HTON64(((uint64_t)1)<<5))
+#define IB_PIR_COMPMASK_SMLID (CL_HTON64(((uint64_t)1)<<6))
+#define IB_PIR_COMPMASK_CAPMASK (CL_HTON64(((uint64_t)1)<<7))
+#define IB_PIR_COMPMASK_DIAGCODE (CL_HTON64(((uint64_t)1)<<8))
+#define IB_PIR_COMPMASK_MKEYLEASEPRD (CL_HTON64(((uint64_t)1)<<9))
+#define IB_PIR_COMPMASK_LOCALPORTNUM (CL_HTON64(((uint64_t)1)<<10))
+#define IB_PIR_COMPMASK_LINKWIDTHENABLED (CL_HTON64(((uint64_t)1)<<11))
+#define IB_PIR_COMPMASK_LNKWIDTHSUPPORT (CL_HTON64(((uint64_t)1)<<12))
+#define IB_PIR_COMPMASK_LNKWIDTHACTIVE (CL_HTON64(((uint64_t)1)<<13))
+#define IB_PIR_COMPMASK_LNKSPEEDSUPPORT (CL_HTON64(((uint64_t)1)<<14))
+#define IB_PIR_COMPMASK_PORTSTATE (CL_HTON64(((uint64_t)1)<<15))
+#define IB_PIR_COMPMASK_PORTPHYSTATE (CL_HTON64(((uint64_t)1)<<16))
+#define IB_PIR_COMPMASK_LINKDWNDFLTSTATE (CL_HTON64(((uint64_t)1)<<17))
+#define IB_PIR_COMPMASK_MKEYPROTBITS (CL_HTON64(((uint64_t)1)<<18))
+#define IB_PIR_COMPMASK_RESV2 (CL_HTON64(((uint64_t)1)<<19))
+#define IB_PIR_COMPMASK_LMC (CL_HTON64(((uint64_t)1)<<20))
+#define IB_PIR_COMPMASK_LINKSPEEDACTIVE (CL_HTON64(((uint64_t)1)<<21))
+#define IB_PIR_COMPMASK_LINKSPEEDENABLE (CL_HTON64(((uint64_t)1)<<22))
+#define IB_PIR_COMPMASK_NEIGHBORMTU (CL_HTON64(((uint64_t)1)<<23))
+#define IB_PIR_COMPMASK_MASTERSMSL (CL_HTON64(((uint64_t)1)<<24))
+#define IB_PIR_COMPMASK_VLCAP (CL_HTON64(((uint64_t)1)<<25))
+#define IB_PIR_COMPMASK_INITTYPE (CL_HTON64(((uint64_t)1)<<26))
+#define IB_PIR_COMPMASK_VLHIGHLIMIT (CL_HTON64(((uint64_t)1)<<27))
+#define IB_PIR_COMPMASK_VLARBHIGHCAP (CL_HTON64(((uint64_t)1)<<28))
+#define IB_PIR_COMPMASK_VLARBLOWCAP (CL_HTON64(((uint64_t)1)<<29))
+#define IB_PIR_COMPMASK_INITTYPEREPLY (CL_HTON64(((uint64_t)1)<<30))
+#define IB_PIR_COMPMASK_MTUCAP (CL_HTON64(((uint64_t)1)<<31))
+#define IB_PIR_COMPMASK_VLSTALLCNT (CL_HTON64(((uint64_t)1)<<32))
+#define IB_PIR_COMPMASK_HOQLIFE (CL_HTON64(((uint64_t)1)<<33))
+#define IB_PIR_COMPMASK_OPVLS (CL_HTON64(((uint64_t)1)<<34))
+#define IB_PIR_COMPMASK_PARENFIN (CL_HTON64(((uint64_t)1)<<35))
+#define IB_PIR_COMPMASK_PARENFOUT (CL_HTON64(((uint64_t)1)<<36))
+#define IB_PIR_COMPMASK_FILTERRAWIN (CL_HTON64(((uint64_t)1)<<37))
+#define IB_PIR_COMPMASK_FILTERRAWOUT (CL_HTON64(((uint64_t)1)<<38))
+#define IB_PIR_COMPMASK_MKEYVIO (CL_HTON64(((uint64_t)1)<<39))
+#define IB_PIR_COMPMASK_PKEYVIO (CL_HTON64(((uint64_t)1)<<40))
+#define IB_PIR_COMPMASK_QKEYVIO (CL_HTON64(((uint64_t)1)<<41))
+#define IB_PIR_COMPMASK_GUIDCAP (CL_HTON64(((uint64_t)1)<<42))
+#define IB_PIR_COMPMASK_RESV3 (CL_HTON64(((uint64_t)1)<<43))
+#define IB_PIR_COMPMASK_SUBNTO (CL_HTON64(((uint64_t)1)<<44))
+#define IB_PIR_COMPMASK_RESV4 (CL_HTON64(((uint64_t)1)<<45))
+#define IB_PIR_COMPMASK_RESPTIME (CL_HTON64(((uint64_t)1)<<46))
+#define IB_PIR_COMPMASK_LOCALPHYERR (CL_HTON64(((uint64_t)1)<<47))
+#define IB_PIR_COMPMASK_OVERRUNERR (CL_HTON64(((uint64_t)1)<<48))
+
/* Multicast Member Record Component Masks */\r
#define IB_MCR_COMPMASK_GID (CL_HTON64(((uint64_t)1)<<0))\r
#define IB_MCR_COMPMASK_MGID (CL_HTON64(((uint64_t)1)<<0))\r
#define IB_PORT_CAP_HAS_NV_PKEY (CL_NTOH32(0x00000100))\r
#define IB_PORT_CAP_HAS_LED_INFO (CL_NTOH32(0x00000200))\r
#define IB_PORT_CAP_SM_DISAB (CL_NTOH32(0x00000400))\r
-#define IB_PORT_CAP_HAS_SYS_GUID (CL_NTOH32(0x00000800))\r
+#define IB_PORT_CAP_HAS_SYS_IMG_GUID (CL_NTOH32(0x00000800))
#define IB_PORT_CAP_HAS_PKEY_SW_EXT_PORT_TRAP (CL_NTOH32(0x00001000))\r
#define IB_PORT_CAP_RESV13 (CL_NTOH32(0x00002000))\r
#define IB_PORT_CAP_RESV14 (CL_NTOH32(0x00004000))\r
#define IB_PORT_CAP_RESV15 (CL_NTOH32(0x00008000))\r
#define IB_PORT_CAP_HAS_COM_MGT (CL_NTOH32(0x00010000))\r
#define IB_PORT_CAP_HAS_SNMP (CL_NTOH32(0x00020000))\r
-#define IB_PORT_CAP_HAS_REINIT (CL_NTOH32(0x00040000))\r
+#define IB_PORT_CAP_REINIT (CL_NTOH32(0x00040000))
#define IB_PORT_CAP_HAS_DEV_MGT (CL_NTOH32(0x00080000))\r
#define IB_PORT_CAP_HAS_VEND_CLS (CL_NTOH32(0x00100000))\r
#define IB_PORT_CAP_HAS_DR_NTC (CL_NTOH32(0x00200000))\r
#define IB_PORT_CAP_HAS_CAP_NTC (CL_NTOH32(0x00400000))\r
#define IB_PORT_CAP_HAS_BM (CL_NTOH32(0x00800000))\r
-#define IB_PORT_CAP_HAS_LINK_TRIP (CL_NTOH32(0x01000000))\r
-#define IB_PORT_CAP_HAS_CLI_REREG (CL_NTOH32(0x02000000))\r
+#define IB_PORT_CAP_HAS_LINK_RT_LATENCY (CL_NTOH32(0x01000000))
+#define IB_PORT_CAP_HAS_CLIENT_REREG (CL_NTOH32(0x02000000))
#define IB_PORT_CAP_RESV26 (CL_NTOH32(0x04000000))\r
#define IB_PORT_CAP_RESV27 (CL_NTOH32(0x08000000))\r
#define IB_PORT_CAP_RESV28 (CL_NTOH32(0x10000000))\r
ib_port_info_get_link_speed_active(\r
IN const ib_port_info_t* const p_pi )\r
{\r
- return( (uint8_t)((p_pi->link_speed & IB_PORT_LINK_SPEED_ACTIVE_MASK) >>\r
- IB_PORT_LINK_SPEED_SHIFT) );\r
+ return( (uint8_t)((p_pi->link_speed &
+ IB_PORT_LINK_SPEED_ACTIVE_MASK) >>
+ IB_PORT_LINK_SPEED_SHIFT) );\r
}\r
/*\r
* PARAMETERS\r
ib_port_info_compute_rate(\r
IN const ib_port_info_t* const p_pi )\r
{\r
- switch( p_pi->link_width_active * p_pi->link_width_active *\r
- ib_port_info_get_link_speed_active( p_pi ) )\r
+ uint8_t rate = 0;
+
+ switch (ib_port_info_get_link_speed_active(p_pi))
{\r
- case 1:\r
- return IB_PATH_RECORD_RATE_2_5_GBS;\r
-\r
- case 2:\r
- return IB_PATH_RECORD_RATE_5_GBS;\r
-\r
- case 4:\r
- return IB_PATH_RECORD_RATE_10_GBS;\r
-\r
- case 8:\r
- return IB_PATH_RECORD_RATE_20_GBS;\r
-\r
- case 16:\r
- return IB_PATH_RECORD_RATE_40_GBS;\r
-\r
- case 64:\r
- return IB_PATH_RECORD_RATE_30_GBS;\r
-\r
- case 128:\r
- return IB_PATH_RECORD_RATE_60_GBS;\r
-\r
- case 256:\r
- return IB_PATH_RECORD_RATE_120_GBS;\r
+ case IB_LINK_SPEED_ACTIVE_2_5:
+ switch (p_pi->link_width_active)
+ {
+ case IB_LINK_WIDTH_ACTIVE_1X:
+ rate = IB_PATH_RECORD_RATE_2_5_GBS;
+ break;
+
+ case IB_LINK_WIDTH_ACTIVE_4X:
+ rate = IB_PATH_RECORD_RATE_10_GBS;
+ break;
+\r
+ case IB_LINK_WIDTH_ACTIVE_12X:
+ rate = IB_PATH_RECORD_RATE_30_GBS;
+ break;
+\r
+ default:
+ rate = IB_PATH_RECORD_RATE_2_5_GBS;
+ break;
+ }
+ break;
+ case IB_LINK_SPEED_ACTIVE_5:
+ switch (p_pi->link_width_active)
+ {
+ case IB_LINK_WIDTH_ACTIVE_1X:
+ rate = IB_PATH_RECORD_RATE_5_GBS;
+ break;
+\r
+ case IB_LINK_WIDTH_ACTIVE_4X:
+ rate = IB_PATH_RECORD_RATE_20_GBS;
+ break;
+\r
+ case IB_LINK_WIDTH_ACTIVE_12X:
+ rate = IB_PATH_RECORD_RATE_60_GBS;
+ break;
+\r
+ default:
+ rate = IB_PATH_RECORD_RATE_5_GBS;
+ break;
+ }
+ break;
+ case IB_LINK_SPEED_ACTIVE_10:
+ switch (p_pi->link_width_active)
+ {
+ case IB_LINK_WIDTH_ACTIVE_1X:
+ rate = IB_PATH_RECORD_RATE_10_GBS;
+ break;
+\r
+ case IB_LINK_WIDTH_ACTIVE_4X:
+ rate = IB_PATH_RECORD_RATE_40_GBS;
+ break;
+\r
+ case IB_LINK_WIDTH_ACTIVE_12X:
+ rate =IB_PATH_RECORD_RATE_120_GBS;
+ break;
\r
default:\r
- return IB_PATH_RECORD_RATE_2_5_GBS;\r
+ rate = IB_PATH_RECORD_RATE_10_GBS;
+ break;
+ }
+ break;
+ default:
+ rate = IB_PATH_RECORD_RATE_2_5_GBS;
+ break;
}\r
+
+ return rate;
}\r
/*\r
* PARAMETERS\r
IN const uint8_t timeout )\r
{\r
CL_ASSERT( timeout <= 0x1F );\r
- p_pi->subnet_timeout = (uint8_t)(timeout & 0x1F);\r
+ p_pi->subnet_timeout =
+ (uint8_t)(
+ (p_pi->subnet_timeout & 0x80) | (timeout & 0x1F));
}\r
/*\r
* PARAMETERS\r
#include <complib/cl_packoff.h>\r
/************/\r
\r
+#include <complib/cl_packon.h>
+typedef struct _ib_guidinfo_record
+{
+ ib_net16_t lid;
+ uint8_t block_num;
+ uint8_t resv;
+ uint32_t reserved;
+ ib_guid_info_t guid_info;
+} PACK_SUFFIX ib_guidinfo_record_t;
+#include <complib/cl_packoff.h>
+
+#define IB_MULTIPATH_MAX_GIDS 11 /* Support max that can fit into first MAD (for now) */
+
+#include <complib/cl_packon.h>
+typedef struct _ib_multipath_rec_t
+{
+ ib_net32_t hop_flow_raw;
+ uint8_t tclass;
+ uint8_t num_path;
+ ib_net16_t pkey;
+ uint8_t resv0;
+ uint8_t sl;
+ uint8_t mtu;
+ uint8_t rate;
+ uint8_t pkt_life;
+ uint8_t resv1;
+ uint8_t independence; /* formerly resv2 */
+ uint8_t sgid_count;
+ uint8_t dgid_count;
+ uint8_t resv3[7];
+ ib_gid_t gids[IB_MULTIPATH_MAX_GIDS];
+} PACK_SUFFIX ib_multipath_rec_t;
+#include <complib/cl_packoff.h>
+/*
+* FIELDS
+* hop_flow_raw
+* Global routing parameters: hop count, flow label and raw bit.
+*
+* tclass
+* Another global routing parameter.
+*
+* num_path
+* Reversible path - 1 bit to say if path is reversible.
+* num_path [6:0] In queries, maximum number of paths to return.
+* In responses, undefined.
+*
+* pkey
+* Partition key (P_Key) to use on this path.
+*
+* sl
+* Service level to use on this path.
+*
+* mtu
+* MTU and MTU selector fields to use on this path
+* rate
+* Rate and rate selector fields to use on this path.
+*
+* pkt_life
+* Packet lifetime
+*
+* preference
+* Indicates the relative merit of this path versus other path
+* records returned from the SA. Lower numbers are better.
+*
+* SEE ALSO
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_num_path
+* NAME
+* ib_multipath_rec_num_path
+*
+* DESCRIPTION
+* Get max number of paths to return.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_num_path(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( p_rec->num_path &0x7F );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Maximum number of paths to return for each unique SGID_DGID combination.
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_sl
+* NAME
+* ib_multipath_rec_sl
+*
+* DESCRIPTION
+* Get multipath service level.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_sl(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)((cl_ntoh16( p_rec->sl )) & 0xF) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* SL.
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_mtu
+* NAME
+* ib_multipath_rec_mtu
+*
+* DESCRIPTION
+* Get encoded path MTU.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_mtu(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)(p_rec->mtu & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded path MTU.
+* 1: 256
+* 2: 512
+* 3: 1024
+* 4: 2048
+* 5: 4096
+* others: reserved
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_mtu_sel
+* NAME
+* ib_multipath_rec_mtu_sel
+*
+* DESCRIPTION
+* Get encoded multipath MTU selector.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_mtu_sel(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)((p_rec->mtu & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded path MTU selector value (for queries).
+* 0: greater than MTU specified
+* 1: less than MTU specified
+* 2: exactly the MTU specified
+* 3: largest MTU available
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_rate
+* NAME
+* ib_multipath_rec_rate
+*
+* DESCRIPTION
+* Get encoded multipath rate.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_rate(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)(p_rec->rate & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded multipath rate.
+* 2: 2.5 Gb/sec.
+* 3: 10 Gb/sec.
+* 4: 30 Gb/sec.
+* others: reserved
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_rate_sel
+* NAME
+* ib_multipath_rec_rate_sel
+*
+* DESCRIPTION
+* Get encoded multipath rate selector.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_rate_sel(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)((p_rec->rate & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded path rate selector value (for queries).
+* 0: greater than rate specified
+* 1: less than rate specified
+* 2: exactly the rate specified
+* 3: largest rate available
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_pkt_life
+* NAME
+* ib_multipath_rec_pkt_life
+*
+* DESCRIPTION
+* Get encoded multipath pkt_life.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_pkt_life(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)(p_rec->pkt_life & IB_MULTIPATH_REC_BASE_MASK) );
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded multipath pkt_life = 4.096 µsec * 2 ** PacketLifeTime.
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/
+
+/****f* IBA Base: Types/ib_multipath_rec_pkt_life_sel
+* NAME
+* ib_multipath_rec_pkt_life_sel
+*
+* DESCRIPTION
+* Get encoded multipath pkt_lifetime selector.
+*
+* SYNOPSIS
+*/
+AL_INLINE uint8_t AL_API\r
+ib_multipath_rec_pkt_life_sel(
+ IN const ib_multipath_rec_t* const p_rec )
+{
+ return( (uint8_t)((p_rec->pkt_life & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6 ));
+}
+/*
+* PARAMETERS
+* p_rec
+* [in] Pointer to the multipath record object.
+*
+* RETURN VALUES
+* Encoded path pkt_lifetime selector value (for queries).
+* 0: greater than rate specified
+* 1: less than rate specified
+* 2: exactly the rate specified
+* 3: smallest packet lifetime available
+*
+* NOTES
+*
+* SEE ALSO
+* ib_multipath_rec_t
+*********/\r
/****s* IBA Base: Types/ib_pkey_table_info_t\r
* NAME\r
* ib_pkey_table_info_t\r
* ib_member_get_sl_flow_hop\r
*\r
* DESCRIPTION\r
-* Get encoded sl flow label and hop limit\r
+* Get encoded sl, flow label, and hop limit
*\r
* SYNOPSIS\r
*/\r
/*\r
* PARAMETERS\r
* sl_flow_hop\r
-* [in] the sl flow label and hop limit of MC Group\r
+* [in] the sl, flow label, and hop limit of MC Group
*\r
* RETURN VALUES\r
* p_sl\r
* ib_member_set_sl_flow_hop\r
*\r
* DESCRIPTION\r
-* Set encoded version, sl flow and hop\r
+* Set encoded sl, flow label, and hop limit
*\r
* SYNOPSIS\r
*/\r
*\r
* RETURN VALUES\r
* sl_flow_hop\r
-* [out] the sl flow label and hop limit\r
+* [out] the encoded sl, flow label, and hop limit
*\r
* NOTES\r
*\r
* ib_mad_inform_info_t, ib_inform_get_vend_id\r
*********/\r
\r
-\r
/****s* IBA Base: Types/ib_inform_info_record_t\r
* NAME\r
* ib_inform_info_record_t\r
* ib_svc_entries_t\r
*********/\r
\r
-\r
/****s* IBA Base: Types/ib_svc_entries_t\r
* NAME\r
* ib_svc_entries_t\r
* Defines known Communication management class versions\r
*/\r
#define IB_MCLASS_CM_VER_2 2\r
+#define IB_MCLASS_CM_VER_1 1
\r
/*\r
* Defines the size of user available data in communication management MADs\r
#define IB_ARI_SIZE 72 // redefine\r
#define IB_APR_INFO_SIZE 72\r
\r
-\r
/****d* Access Layer/ib_rej_status_t\r
* NAME\r
* ib_rej_status_t\r
#define IB_REJ_INVALID_CLASS_VER CL_HTON16(31)\r
#define IB_REJ_INVALID_FLOW_LBL CL_HTON16(32)\r
#define IB_REJ_INVALID_ALT_FLOW_LBL CL_HTON16(33)\r
-/******/\r
\r
+#define IB_REJ_SERVICE_HANDOFF CL_HTON16(65535)
+/******/
\r
/****d* Access Layer/ib_apr_status_t\r
* NAME\r
*\r
*******/\r
\r
-\r
/*\r
* Service ID resolution status\r
*/\r
* SEE ALSO\r
*********/\r
\r
-\r
/****d* Verbs/ib_async_event_t\r
* NAME\r
* ib_async_event_t -- Async event types\r
/*\r
* VALUES\r
* IB_AE_SQ_ERROR\r
-* An error occurred when accessing the send queue of the QP.\r
+* An error occurred when accessing the send queue of the QP or EEC.
* This event is optional.\r
*\r
* IB_AE_SQ_DRAINED\r
* applicable, has received all acknowledgements for those messages.\r
*\r
* IB_AE_RQ_ERROR\r
-* An error occurred when accessing the receive queue of the QP.\r
+* An error occurred when accessing the receive queue of the QP or EEC.
* This event is optional.\r
*\r
* IB_AE_CQ_ERROR\r
* SEE ALSO\r
*********/\r
\r
-\r
/****s* Verbs/ib_event_rec_t\r
* NAME\r
* ib_event_rec_t -- Async event notification record\r
} ib_event_rec_t;\r
/*******/\r
\r
-\r
/****d* Access Layer/ib_atomic_t\r
* NAME\r
* ib_atomic_t\r
* in the system.\r
*****/\r
\r
-\r
/****s* Access Layer/ib_port_cap_t\r
* NAME\r
* ib_port_cap_t\r
} ib_port_cap_t;\r
/*****/\r
\r
-\r
/****d* Access Layer/ib_init_type_t\r
* NAME\r
* ib_init_type_t\r
#define IB_INIT_TYPE_DO_NOT_RESUSCITATE 0x08\r
/*****/\r
\r
-\r
/****s* Access Layer/ib_port_attr_mod_t\r
* NAME\r
* ib_port_attr_mod_t\r
* ib_port_cap_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_port_attr_t\r
* NAME\r
* ib_port_attr_t\r
* uint8_t, ib_port_cap_t, ib_link_states_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_ca_attr_t\r
* NAME\r
* ib_ca_attr_t\r
* Indicates ability to check port number in address handles.\r
*\r
* change_primary_port\r
-* Indicates ability to change primary port for a QP during a\r
+* Indicates ability to change primary port for a QP or EEC during a
* SQD->RTS transition.\r
*\r
* modify_wr_depth\r
* ib_gid_t\r
*****/\r
\r
-\r
/****d* Access Layer/ib_qp_type_t\r
* NAME\r
* ib_qp_type_t\r
{\r
IB_QPT_RELIABLE_CONN = 0, /* Matches CM REQ transport type */\r
IB_QPT_UNRELIABLE_CONN = 1, /* Matches CM REQ transport type */\r
- IB_QPT_UNRELIABLE_DGRM = 3, /* Purposefully skip RDD type. */\r
+ IB_QPT_RELIABLE_DGRM = 2, /* Matches CM REQ transport type */
+ IB_QPT_UNRELIABLE_DGRM,
IB_QPT_QP0,\r
IB_QPT_QP1,\r
IB_QPT_RAW_IPV6,\r
* IB_QPT_UNRELIABLE_CONN\r
* Unreliable, connected queue pair.\r
*\r
+* IB_QPT_RELIABLE_DGRM
+* Reliable, datagram queue pair.
+*
* IB_QPT_UNRELIABLE_DGRM\r
* Unreliable, datagram queue pair.\r
*\r
* RDMA read and write access.\r
*****/\r
\r
-\r
/****d* Access Layer/ib_qp_state_t\r
* NAME\r
* ib_qp_state_t\r
#define IB_QPS_TIME_WAIT 0xDEAD0000 /* InfiniBand Access Layer */\r
/*****/\r
\r
-\r
/****d* Access Layer/ib_apm_state_t\r
* NAME\r
* ib_apm_state_t\r
* ib_qp_type_t, ib_qp_attr_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_qp_attr_t\r
* NAME\r
* ib_qp_attr_t\r
* ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t\r
*****/\r
\r
-\r
/****d* Access Layer/ib_qp_opts_t\r
* NAME\r
* ib_qp_opts_t\r
#define IB_MOD_QP_RETRY_CNT 0x00002000\r
#define IB_MOD_QP_LOCAL_ACK_TIMEOUT 0x00004000\r
#define IB_MOD_QP_RNR_RETRY_CNT 0x00008000\r
-\r
/*\r
* SEE ALSO\r
* ib_qp_mod_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_qp_mod_t\r
* NAME\r
* ib_qp_mod_t\r
} ib_local_ds_t;\r
/*****/\r
\r
-\r
/****d* Access Layer/ib_send_opt_t\r
* NAME\r
* ib_send_opt_t\r
* Send immediate data with the given request.\r
*\r
* IB_SEND_OPT_FENCE\r
-* The operation is fenced. Complete all pending send operations before\r
-* processing this request.\r
+* The operation is fenced. Complete all pending send operations
+* before processing this request.
*\r
* IB_SEND_OPT_SIGNALED\r
* If the queue pair is configured for signaled completion, then\r
* vendor specific restrictions on the size of send operation that may\r
* be performed as inline.\r
*\r
+*
* IB_SEND_OPT_LOCAL\r
* Indicates that a sent MAD request should be given to the local VPD for\r
* processing. MADs sent using this option are not placed on the wire.\r
* This send option is only valid for MAD send operations.\r
*\r
+*
* IB_SEND_OPT_VEND_MASK\r
* This mask indicates bits reserved in the send options that may be used\r
* by the verbs provider to indicate vendor specific options. Bits set\r
*\r
*****/\r
\r
-\r
/****s* Access Layer/ib_send_wr_t\r
* NAME\r
* ib_send_wr_t\r
\r
} ud;\r
\r
+ struct _send_rd
+ {
+ ib_net32_t remote_qp;
+ ib_net32_t remote_qkey;
+ ib_net32_t eecn;
+
+ } rd;
+
struct _send_raw_ether\r
{\r
ib_net16_t dest_lid;\r
* ib_wr_type_t, ib_local_ds_t, ib_send_opt_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_recv_wr_t\r
* NAME\r
* ib_recv_wr_t\r
* ib_local_ds_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_bind_wr_t\r
* NAME\r
* ib_bind_wr_t\r
* ib_send_opt_t, ib_access_t, ib_local_ds_t\r
*****/\r
\r
-\r
/****d* Access Layer/ib_wc_status_t\r
* NAME\r
* ib_wc_status_t\r
* SEE ALSO\r
*********/\r
\r
-\r
/****d* Access Layer/ib_wc_type_t\r
* NAME\r
* ib_wc_type_t\r
* but may have specific meaning to the underlying VPD.\r
*****/\r
\r
-\r
/****s* Access Layer/ib_wc_t\r
* NAME\r
* ib_wc_t\r
\r
} ud;\r
\r
+ struct _wc_rd
+ {
+ ib_net32_t remote_eecn;
+ ib_net32_t remote_qp;
+ ib_net16_t remote_lid;
+ uint8_t remote_sl;
+ uint32_t free_cnt;
+
+ } rd;
+
struct _wc_raw_ipv6\r
{\r
ib_net16_t remote_lid;\r
* wc_type\r
* Indicates the type of work completion.\r
*\r
+*
* length\r
* The total length of the data sent or received with the work request.\r
*\r
* Identifies the source queue pair of a received datagram.\r
*\r
* recv.ud.pkey_index\r
-* The pkey index of the source queue pair. This is valid only for\r
-* IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.\r
+* The pkey index for the source queue pair. This is valid only for
+* GSI type QP's.
*\r
* recv.ud.remote_lid\r
* The source LID of the received datagram.\r
* recv.ud.path_bits\r
* path bits...\r
*\r
+* recv.rd.remote_eecn
+* The remote end-to-end context number that sent the received message.
+*
+* recv.rd.remote_qp
+* Identifies the source queue pair of a received message.
+*
+* recv.rd.remote_lid
+* The source LID of the received message.
+*
+* recv.rd.remote_sl
+* The service level used by the source of the received message.
+*
+* recv.rd.free_cnt
+* The number of available entries in the completion queue. Reliable
+* datagrams may complete out of order, so this field may be used to
+* determine the number of additional completions that may occur.
+*
* recv.raw_ipv6.remote_lid\r
* The source LID of the received message.\r
*\r
* ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_mr_create_t\r
* NAME\r
* ib_mr_create_t\r
void* __ptr64 vaddr;\r
uint64_t length;\r
ib_access_t access_ctrl;\r
-\r
} ib_mr_create_t;\r
/*\r
* FIELDS\r
uint32_t buf_offset;\r
uint32_t hca_page_size;\r
ib_access_t access_ctrl;\r
-\r
} ib_phys_create_t;\r
/*\r
* FIELDS\r
* ib_access_t\r
*****/\r
\r
-\r
/****s* Access Layer/ib_mr_attr_t\r
* NAME\r
* ib_mr_attr_t\r
* ib_access_t\r
*****/\r
\r
-\r
/****d* Access Layer/ib_ca_mod_t\r
* NAME\r
* ib_ca_mod_t -- Modify port attributes and error counters\r
* Indicates if there is an SNMP agent accessible through the port.\r
*\r
* IB_CA_MOD_IS_DEV_MGMT_SUPPORTED\r
-* Indicates if there is a device management agent accessible through\r
-* the port.\r
+* Indicates if there is a device management agent accessible
+* through the port.
*\r
* IB_CA_MOD_IS_VEND_SUPPORTED\r
-* Indicates if there is a vendor supported agent accessible through\r
-* the port.\r
+* Indicates if there is a vendor supported agent accessible
+* through the port.
*\r
* IB_CA_MOD_IS_SM\r
* Indicates if there is a subnet manager accessible through\r
* the port.\r
*\r
* IB_CA_MOD_IS_SM_DISABLED\r
-* Indicates if the port has been disabled for configuration by the subnet\r
-* manager.\r
+* Indicates if the port has been disabled for configuration by the
+* subnet manager.
*\r
* IB_CA_MOD_QKEY_CTR\r
-* Used to reset the qkey violation counter associated with the port.\r
+* Used to reset the qkey violation counter associated with the
+* port.
*\r
* IB_CA_MOD_PKEY_CTR\r
-* Used to reset the pkey violation counter associated with the port.\r
+* Used to reset the pkey violation counter associated with the
+* port.
*\r
* IB_CA_MOD_IS_NOTICE_SUPPORTED\r
* Indicates that this CA supports ability to generate Notices for\r
* trap messages. (only applicable to switches)\r
*\r
* IB_CA_MOD_IS_APM_SUPPORTED\r
-* Indicates that this port is capable of performing Automatic Migration.\r
+* Indicates that this port is capable of performing Automatic
+* Path Migration.
*\r
* IB_CA_MOD_IS_SLMAP_SUPPORTED\r
* Indicates this port supports SLMAP capability.\r
* ib_modify_ca will return IB_INVALID_PARAMETER.\r
*****/\r
\r
-\r
/****d* Access Layer/ib_mr_mod_t\r
* NAME\r
* ib_mr_mod_t\r
\r
\r
#endif /* __IB_TYPES_H__ */\r
+