/* * Copyright(c) 2009 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. * * Maintained at www.Open-FCoE.org */ #include #include #include MODULE_AUTHOR("Open-FCoE.org"); MODULE_DESCRIPTION("FCoE"); MODULE_LICENSE("GPL v2"); /** * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN. * @mac: mac address * @scheme: check port * @port: port indicator for converting * * Returns: u64 fc world wide name */ u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN], unsigned int scheme, unsigned int port) { u64 wwn; u64 host_mac; /* The MAC is in NO, so flip only the low 48 bits */ host_mac = ((u64) mac[0] << 40) | ((u64) mac[1] << 32) | ((u64) mac[2] << 24) | ((u64) mac[3] << 16) | ((u64) mac[4] << 8) | (u64) mac[5]; WARN_ON(host_mac >= (1ULL << 48)); wwn = host_mac | ((u64) scheme << 60); switch (scheme) { case 1: WARN_ON(port != 0); break; case 2: WARN_ON(port >= 0xfff); wwn |= (u64) port << 48; break; default: WARN_ON(1); break; } return wwn; } EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac); /** * fcoe_libfc_config() - sets up libfc related properties for lport * @lp: ptr to the fc_lport * @tt: libfc function template * * Returns : 0 for success */ int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt) { /* Set the function pointers set by the LLDD */ memcpy(&lp->tt, tt, sizeof(*tt)); if (fc_fcp_init(lp)) return -ENOMEM; fc_exch_init(lp); fc_elsct_init(lp); fc_lport_init(lp); fc_rport_init(lp); fc_disc_init(lp); return 0; } EXPORT_SYMBOL_GPL(fcoe_libfc_config);