{\r
#endif\r
\r
+/* Global counter for generating LAA MACs */\r
+extern atomic32_t g_laa_idx;\r
+\r
+\r
/*\r
* Address accessors\r
*/\r
}\r
\r
\r
-/****f* IPOIB/ipoib_mac_from_guid\r
+/****f* IPOIB/ipoib_mac_from_sst_guid\r
* NAME\r
-* ipoib_mac_from_guid\r
+* ipoib_mac_from_sst_guid\r
*\r
* DESCRIPTION\r
-* Generates an ethernet MAC address given a port GUID.\r
+* Generates an ethernet MAC address given a SilverStorm port GUID.\r
*\r
* SYNOPSIS\r
*/\r
static inline ib_api_status_t\r
-ipoib_mac_from_guid(\r
+ipoib_mac_from_sst_guid(\r
IN const net64_t port_guid,\r
OUT mac_addr_t* const p_mac_addr )\r
{\r
uint32_t low24;\r
\r
/* Port guid is in network byte order. OUI is in lower 3 bytes. */\r
- if( p_guid[0] != 0x00 || p_guid[1] != 0x06 || p_guid[2] != 0x6a )\r
- return IB_INVALID_GUID;\r
+ ASSERT( p_guid[0] == 0x00 && p_guid[1] == 0x06 && p_guid[2] == 0x6a );\r
\r
/*\r
* We end up using only the lower 23-bits of the GUID. Trap that\r
*********/\r
\r
\r
+/****f* IPOIB/ipoib_mac_from_guid\r
+* NAME\r
+* ipoib_mac_from_guid\r
+*\r
+* DESCRIPTION\r
+* Generates an ethernet MAC address given a port GUID.\r
+*\r
+* SYNOPSIS\r
+*/\r
+static inline ib_api_status_t\r
+ipoib_mac_from_guid(\r
+ IN const net64_t port_guid,\r
+ OUT mac_addr_t* const p_mac_addr )\r
+{\r
+ ib_api_status_t status;\r
+ const uint8_t *p_guid = (const uint8_t*)&port_guid;\r
+ uint32_t laa;\r
+\r
+ /* Port guid is in network byte order. OUI is in lower 3 bytes. */\r
+ if( p_guid[0] == 0x00 && p_guid[1] == 0x06 && p_guid[2] == 0x6a )\r
+ {\r
+ status = ipoib_mac_from_sst_guid( port_guid, p_mac_addr );\r
+ if( status == IB_SUCCESS )\r
+ return IB_SUCCESS;\r
+ }\r
+\r
+ /* Value of zero is reserved. */\r
+ laa = cl_atomic_inc( &g_laa_idx );\r
+\r
+ if( !laa )\r
+ return IB_INVALID_GUID;\r
+\r
+ p_mac_addr->addr[0] = 2; /* LAA bit */\r
+ p_mac_addr->addr[1] = 0;\r
+ p_mac_addr->addr[2] = (uint8_t)(laa >> 24);\r
+ p_mac_addr->addr[3] = (uint8_t)(laa >> 16);\r
+ p_mac_addr->addr[4] = (uint8_t)(laa >> 8);\r
+ p_mac_addr->addr[5] = (uint8_t)laa;\r
+ \r
+ return IB_SUCCESS;\r
+}\r
+/*\r
+* PARAMETERS\r
+* port_guid\r
+* The port GUID, in network byte order, for which to generate a\r
+* MAC address.\r
+*\r
+* p_mac_addr\r
+* Pointer to a mac address in which to store the results.\r
+*\r
+* RETURN VALUES\r
+* IB_SUCCESS\r
+* The MAC address was successfully converted.\r
+*\r
+* IB_INVALID_GUID\r
+* The port GUID provided was not a known GUID format.\r
+*\r
+* NOTES\r
+* Creates a locally administered address using a global incrementing counter.\r
+*\r
+* SEE ALSO\r
+* IPOIB\r
+*********/\r
+\r
+\r
/****f* IPOIB/ipoib_guid_from_mac\r
* NAME\r
* ipoib_guid_from_mac\r