|
@@ -718,3 +718,49 @@ u8 ixgbe_fcoe_setapp(struct ixgbe_adapter *adapter, u8 up)
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
#endif /* CONFIG_IXGBE_DCB */
|
|
#endif /* CONFIG_IXGBE_DCB */
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ixgbe_fcoe_get_wwn - get world wide name for the node or the port
|
|
|
|
+ * @netdev : ixgbe adapter
|
|
|
|
+ * @wwn : the world wide name
|
|
|
|
+ * @type: the type of world wide name
|
|
|
|
+ *
|
|
|
|
+ * Returns the node or port world wide name if both the prefix and the san
|
|
|
|
+ * mac address are valid, then the wwn is formed based on the NAA-2 for
|
|
|
|
+ * IEEE Extended name identifier (ref. to T10 FC-LS Spec., Sec. 15.3).
|
|
|
|
+ *
|
|
|
|
+ * Returns : 0 on success
|
|
|
|
+ */
|
|
|
|
+int ixgbe_fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type)
|
|
|
|
+{
|
|
|
|
+ int rc = -EINVAL;
|
|
|
|
+ u16 prefix = 0xffff;
|
|
|
|
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
|
+ struct ixgbe_mac_info *mac = &adapter->hw.mac;
|
|
|
|
+
|
|
|
|
+ switch (type) {
|
|
|
|
+ case NETDEV_FCOE_WWNN:
|
|
|
|
+ prefix = mac->wwnn_prefix;
|
|
|
|
+ break;
|
|
|
|
+ case NETDEV_FCOE_WWPN:
|
|
|
|
+ prefix = mac->wwpn_prefix;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ((prefix != 0xffff) &&
|
|
|
|
+ is_valid_ether_addr(mac->san_addr)) {
|
|
|
|
+ *wwn = ((u64) prefix << 48) |
|
|
|
|
+ ((u64) mac->san_addr[0] << 40) |
|
|
|
|
+ ((u64) mac->san_addr[1] << 32) |
|
|
|
|
+ ((u64) mac->san_addr[2] << 24) |
|
|
|
|
+ ((u64) mac->san_addr[3] << 16) |
|
|
|
|
+ ((u64) mac->san_addr[4] << 8) |
|
|
|
|
+ ((u64) mac->san_addr[5]);
|
|
|
|
+ rc = 0;
|
|
|
|
+ }
|
|
|
|
+ return rc;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|