Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[pandora-kernel.git] / drivers / scsi / bfa / bfa_fcs_lport.c
index de989fc..43fa986 100644 (file)
  * General Public License for more details.
  */
 
+#include "bfad_drv.h"
 #include "bfa_fcs.h"
 #include "bfa_fcbuild.h"
 #include "bfa_fc.h"
-#include "bfad_drv.h"
 
 BFA_TRC_FILE(FCS, PORT);
 
@@ -159,7 +159,7 @@ bfa_fcs_lport_sm_online(
                        bfa_sm_set_state(port, bfa_fcs_lport_sm_deleting);
                        list_for_each_safe(qe, qen, &port->rport_q) {
                                rport = (struct bfa_fcs_rport_s *) qe;
-                               bfa_fcs_rport_delete(rport);
+                               bfa_sm_send_event(rport, RPSM_EVENT_DELETE);
                        }
                }
                break;
@@ -197,7 +197,7 @@ bfa_fcs_lport_sm_offline(
                        bfa_sm_set_state(port, bfa_fcs_lport_sm_deleting);
                        list_for_each_safe(qe, qen, &port->rport_q) {
                                rport = (struct bfa_fcs_rport_s *) qe;
-                               bfa_fcs_rport_delete(rport);
+                               bfa_sm_send_event(rport, RPSM_EVENT_DELETE);
                        }
                }
                break;
@@ -309,6 +309,7 @@ bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
                        return;
                }
                port->pid  = rx_fchs->d_id;
+               bfa_lps_set_n2n_pid(port->fabric->lps, rx_fchs->d_id);
        }
 
        /*
@@ -323,6 +324,7 @@ bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
                        (memcmp((void *)&bfa_fcs_lport_get_pwwn(port),
                        (void *)&plogi->port_name, sizeof(wwn_t)) < 0)) {
                        port->pid  = rx_fchs->d_id;
+                       bfa_lps_set_n2n_pid(port->fabric->lps, rx_fchs->d_id);
                        rport->pid = rx_fchs->s_id;
                }
                bfa_fcs_rport_plogi(rport, rx_fchs, plogi);
@@ -349,8 +351,8 @@ bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
                 * This is a different device with the same pid. Old device
                 * disappeared. Send implicit LOGO to old device.
                 */
-               bfa_assert(rport->pwwn != plogi->port_name);
-               bfa_fcs_rport_logo_imp(rport);
+               WARN_ON(rport->pwwn == plogi->port_name);
+               bfa_sm_send_event(rport, RPSM_EVENT_LOGO_IMP);
 
                /*
                 * Inbound PLOGI from a new device (with old PID).
@@ -362,7 +364,7 @@ bfa_fcs_lport_plogi(struct bfa_fcs_lport_s *port,
        /*
         * PLOGI crossing each other.
         */
-       bfa_assert(rport->pwwn == WWN_NULL);
+       WARN_ON(rport->pwwn != WWN_NULL);
        bfa_fcs_rport_plogi(rport, rx_fchs, plogi);
 }
 
@@ -491,7 +493,7 @@ bfa_fcs_lport_online_actions(struct bfa_fcs_lport_s *port)
        __port_action[port->fabric->fab_type].online(port);
 
        wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
-       BFA_LOG(KERN_INFO, bfad, log_level,
+       BFA_LOG(KERN_INFO, bfad, bfa_log_level,
                "Logical port online: WWN = %s Role = %s\n",
                lpwwn_buf, "Initiator");
 
@@ -511,37 +513,38 @@ bfa_fcs_lport_offline_actions(struct bfa_fcs_lport_s *port)
        __port_action[port->fabric->fab_type].offline(port);
 
        wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
-       if (bfa_fcs_fabric_is_online(port->fabric) == BFA_TRUE)
-               BFA_LOG(KERN_ERR, bfad, log_level,
+       if (bfa_sm_cmp_state(port->fabric,
+                       bfa_fcs_fabric_sm_online) == BFA_TRUE)
+               BFA_LOG(KERN_ERR, bfad, bfa_log_level,
                "Logical port lost fabric connectivity: WWN = %s Role = %s\n",
                lpwwn_buf, "Initiator");
        else
-               BFA_LOG(KERN_INFO, bfad, log_level,
+               BFA_LOG(KERN_INFO, bfad, bfa_log_level,
                "Logical port taken offline: WWN = %s Role = %s\n",
                lpwwn_buf, "Initiator");
 
        list_for_each_safe(qe, qen, &port->rport_q) {
                rport = (struct bfa_fcs_rport_s *) qe;
-               bfa_fcs_rport_offline(rport);
+               bfa_sm_send_event(rport, RPSM_EVENT_LOGO_IMP);
        }
 }
 
 static void
 bfa_fcs_lport_unknown_init(struct bfa_fcs_lport_s *port)
 {
-       bfa_assert(0);
+       WARN_ON(1);
 }
 
 static void
 bfa_fcs_lport_unknown_online(struct bfa_fcs_lport_s *port)
 {
-       bfa_assert(0);
+       WARN_ON(1);
 }
 
 static void
 bfa_fcs_lport_unknown_offline(struct bfa_fcs_lport_s *port)
 {
-       bfa_assert(0);
+       WARN_ON(1);
 }
 
 static void
@@ -573,7 +576,7 @@ bfa_fcs_lport_deleted(struct bfa_fcs_lport_s *port)
        char    lpwwn_buf[BFA_STRING_32];
 
        wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(port));
-       BFA_LOG(KERN_INFO, bfad, log_level,
+       BFA_LOG(KERN_INFO, bfad, bfa_log_level,
                "Logical port deleted: WWN = %s Role = %s\n",
                lpwwn_buf, "Initiator");
 
@@ -584,33 +587,11 @@ bfa_fcs_lport_deleted(struct bfa_fcs_lport_s *port)
                                port->vport ? port->vport->vport_drv : NULL);
                bfa_fcs_vport_delete_comp(port->vport);
        } else {
-                bfa_fcs_fabric_port_delete_comp(port->fabric);
+               bfa_wc_down(&port->fabric->wc);
        }
 }
 
 
-
-/*
- *  fcs_lport_api BFA FCS port API
- */
-/*
- *   Module initialization
- */
-void
-bfa_fcs_lport_modinit(struct bfa_fcs_s *fcs)
-{
-
-}
-
-/*
- *   Module cleanup
- */
-void
-bfa_fcs_lport_modexit(struct bfa_fcs_s *fcs)
-{
-       bfa_fcs_modexit_comp(fcs);
-}
-
 /*
  * Unsolicited frame receive handling.
  */
@@ -623,6 +604,7 @@ bfa_fcs_lport_uf_recv(struct bfa_fcs_lport_s *lport,
        struct fc_els_cmd_s *els_cmd = (struct fc_els_cmd_s *) (fchs + 1);
 
        bfa_stats(lport, uf_recvs);
+       bfa_trc(lport->fcs, fchs->type);
 
        if (!bfa_fcs_lport_is_online(lport)) {
                bfa_stats(lport, uf_recv_drops);
@@ -682,8 +664,11 @@ bfa_fcs_lport_uf_recv(struct bfa_fcs_lport_s *lport,
         * Only handles ELS frames for now.
         */
        if (fchs->type != FC_TYPE_ELS) {
-               bfa_trc(lport->fcs, fchs->type);
-               bfa_assert(0);
+               bfa_trc(lport->fcs, fchs->s_id);
+               bfa_trc(lport->fcs, fchs->d_id);
+               /* ignore type FC_TYPE_FC_FSS */
+               if (fchs->type != FC_TYPE_FC_FSS)
+                       bfa_sm_fault(lport->fcs, fchs->type);
                return;
        }
 
@@ -792,7 +777,7 @@ bfa_fcs_lport_del_rport(
        struct bfa_fcs_lport_s *port,
        struct bfa_fcs_rport_s *rport)
 {
-       bfa_assert(bfa_q_is_on_q(&port->rport_q, rport));
+       WARN_ON(!bfa_q_is_on_q(&port->rport_q, rport));
        list_del(&rport->qe);
        port->num_rports--;
 
@@ -850,8 +835,8 @@ bfa_fcs_lport_attach(struct bfa_fcs_lport_s *lport, struct bfa_fcs_s *fcs,
        lport->fcs = fcs;
        lport->fabric = bfa_fcs_vf_lookup(fcs, vf_id);
        lport->vport = vport;
-       lport->lp_tag = (vport) ? bfa_lps_get_tag(vport->lps) :
-                                 bfa_lps_get_tag(lport->fabric->lps);
+       lport->lp_tag = (vport) ? vport->lps->lp_tag :
+                                 lport->fabric->lps->lp_tag;
 
        INIT_LIST_HEAD(&lport->rport_q);
        lport->num_rports = 0;
@@ -878,7 +863,7 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,
                                        vport ? vport->vport_drv : NULL);
 
        wwn2str(lpwwn_buf, bfa_fcs_lport_get_pwwn(lport));
-       BFA_LOG(KERN_INFO, bfad, log_level,
+       BFA_LOG(KERN_INFO, bfad, bfa_log_level,
                "New logical port created: WWN = %s Role = %s\n",
                lpwwn_buf, "Initiator");
 
@@ -903,10 +888,12 @@ bfa_fcs_lport_get_attr(
        port_attr->port_cfg = port->port_cfg;
 
        if (port->fabric) {
-               port_attr->port_type = bfa_fcs_fabric_port_type(port->fabric);
-               port_attr->loopback = bfa_fcs_fabric_is_loopback(port->fabric);
+               port_attr->port_type = port->fabric->oper_type;
+               port_attr->loopback = bfa_sm_cmp_state(port->fabric,
+                               bfa_fcs_fabric_sm_loopback);
                port_attr->authfail =
-                       bfa_fcs_fabric_is_auth_failed(port->fabric);
+                       bfa_sm_cmp_state(port->fabric,
+                               bfa_fcs_fabric_sm_auth_failed);
                port_attr->fabric_name  = bfa_fcs_lport_get_fabric_name(port);
                memcpy(port_attr->fabric_ip_addr,
                        bfa_fcs_lport_get_fabric_ipaddr(port),
@@ -915,10 +902,10 @@ bfa_fcs_lport_get_attr(
                if (port->vport != NULL) {
                        port_attr->port_type = BFA_PORT_TYPE_VPORT;
                        port_attr->fpma_mac =
-                               bfa_lps_get_lp_mac(port->vport->lps);
+                               port->vport->lps->lp_mac;
                } else {
                        port_attr->fpma_mac =
-                               bfa_lps_get_lp_mac(port->fabric->lps);
+                               port->fabric->lps->lp_mac;
                }
        } else {
                port_attr->port_type = BFA_PORT_TYPE_UNKNOWN;
@@ -998,6 +985,7 @@ bfa_fcs_lport_n2n_online(struct bfa_fcs_lport_s *port)
            ((void *)&pcfg->pwwn, (void *)&n2n_port->rem_port_wwn,
             sizeof(wwn_t)) > 0) {
                port->pid = N2N_LOCAL_PID;
+               bfa_lps_set_n2n_pid(port->fabric->lps, N2N_LOCAL_PID);
                /*
                 * First, check if we know the device by pwwn.
                 */
@@ -1007,7 +995,7 @@ bfa_fcs_lport_n2n_online(struct bfa_fcs_lport_s *port)
                        bfa_trc(port->fcs, rport->pid);
                        bfa_trc(port->fcs, rport->pwwn);
                        rport->pid = N2N_REMOTE_PID;
-                       bfa_fcs_rport_online(rport);
+                       bfa_sm_send_event(rport, RPSM_EVENT_PLOGI_SEND);
                        return;
                }
 
@@ -1017,10 +1005,10 @@ bfa_fcs_lport_n2n_online(struct bfa_fcs_lport_s *port)
                 */
                if (port->num_rports > 0) {
                        rport = bfa_fcs_lport_get_rport_by_pid(port, 0);
-                       bfa_assert(rport != NULL);
+                       WARN_ON(rport == NULL);
                        if (rport) {
                                bfa_trc(port->fcs, rport->pwwn);
-                               bfa_fcs_rport_delete(rport);
+                               bfa_sm_send_event(rport, RPSM_EVENT_DELETE);
                        }
                }
                bfa_fcs_rport_create(port, N2N_REMOTE_PID);
@@ -1569,6 +1557,7 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
        struct fdmi_attr_s *attr;
        u8        *curr_ptr;
        u16        len, count;
+       u16     templen;
 
        /*
         * get hba attributes
@@ -1594,69 +1583,69 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_NODENAME);
-       attr->len = sizeof(wwn_t);
-       memcpy(attr->value, &bfa_fcs_lport_get_nwwn(port), attr->len);
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = sizeof(wwn_t);
+       memcpy(attr->value, &bfa_fcs_lport_get_nwwn(port), templen);
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Manufacturer
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_MANUFACTURER);
-       attr->len = (u16) strlen(fcs_hba_attr->manufacturer);
-       memcpy(attr->value, fcs_hba_attr->manufacturer, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = (u16) strlen(fcs_hba_attr->manufacturer);
+       memcpy(attr->value, fcs_hba_attr->manufacturer, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Serial Number
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_SERIALNUM);
-       attr->len = (u16) strlen(fcs_hba_attr->serial_num);
-       memcpy(attr->value, fcs_hba_attr->serial_num, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = (u16) strlen(fcs_hba_attr->serial_num);
+       memcpy(attr->value, fcs_hba_attr->serial_num, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Model
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_MODEL);
-       attr->len = (u16) strlen(fcs_hba_attr->model);
-       memcpy(attr->value, fcs_hba_attr->model, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = (u16) strlen(fcs_hba_attr->model);
+       memcpy(attr->value, fcs_hba_attr->model, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Model Desc
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_MODEL_DESC);
-       attr->len = (u16) strlen(fcs_hba_attr->model_desc);
-       memcpy(attr->value, fcs_hba_attr->model_desc, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = (u16) strlen(fcs_hba_attr->model_desc);
+       memcpy(attr->value, fcs_hba_attr->model_desc, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * H/W Version
@@ -1664,14 +1653,14 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
        if (fcs_hba_attr->hw_version[0] != '\0') {
                attr = (struct fdmi_attr_s *) curr_ptr;
                attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_HW_VERSION);
-               attr->len = (u16) strlen(fcs_hba_attr->hw_version);
-               memcpy(attr->value, fcs_hba_attr->hw_version, attr->len);
-               attr->len = fc_roundup(attr->len, sizeof(u32));
-               curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-               len += attr->len;
+               templen = (u16) strlen(fcs_hba_attr->hw_version);
+               memcpy(attr->value, fcs_hba_attr->hw_version, templen);
+               templen = fc_roundup(templen, sizeof(u32));
+               curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+               len += templen;
                count++;
-               attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                                        sizeof(attr->len));
+               attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                                        sizeof(templen));
        }
 
        /*
@@ -1679,14 +1668,14 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_DRIVER_VERSION);
-       attr->len = (u16) strlen(fcs_hba_attr->driver_version);
-       memcpy(attr->value, fcs_hba_attr->driver_version, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;;
+       templen = (u16) strlen(fcs_hba_attr->driver_version);
+       memcpy(attr->value, fcs_hba_attr->driver_version, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Option Rom Version
@@ -1694,14 +1683,14 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
        if (fcs_hba_attr->option_rom_ver[0] != '\0') {
                attr = (struct fdmi_attr_s *) curr_ptr;
                attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_ROM_VERSION);
-               attr->len = (u16) strlen(fcs_hba_attr->option_rom_ver);
-               memcpy(attr->value, fcs_hba_attr->option_rom_ver, attr->len);
-               attr->len = fc_roundup(attr->len, sizeof(u32));
-               curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-               len += attr->len;
+               templen = (u16) strlen(fcs_hba_attr->option_rom_ver);
+               memcpy(attr->value, fcs_hba_attr->option_rom_ver, templen);
+               templen = fc_roundup(templen, sizeof(u32));
+               curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+               len += templen;
                count++;
-               attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                                        sizeof(attr->len));
+               attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                                        sizeof(templen));
        }
 
        /*
@@ -1709,14 +1698,14 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_FW_VERSION);
-       attr->len = (u16) strlen(fcs_hba_attr->driver_version);
-       memcpy(attr->value, fcs_hba_attr->driver_version, attr->len);
-       attr->len = fc_roundup(attr->len, sizeof(u32));
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = (u16) strlen(fcs_hba_attr->driver_version);
+       memcpy(attr->value, fcs_hba_attr->driver_version, templen);
+       templen = fc_roundup(templen, sizeof(u32));
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * OS Name
@@ -1724,14 +1713,14 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
        if (fcs_hba_attr->os_name[0] != '\0') {
                attr = (struct fdmi_attr_s *) curr_ptr;
                attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_OS_NAME);
-               attr->len = (u16) strlen(fcs_hba_attr->os_name);
-               memcpy(attr->value, fcs_hba_attr->os_name, attr->len);
-               attr->len = fc_roundup(attr->len, sizeof(u32));
-               curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-               len += attr->len;
+               templen = (u16) strlen(fcs_hba_attr->os_name);
+               memcpy(attr->value, fcs_hba_attr->os_name, templen);
+               templen = fc_roundup(templen, sizeof(u32));
+               curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+               len += templen;
                count++;
-               attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                                       sizeof(attr->len));
+               attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                                       sizeof(templen));
        }
 
        /*
@@ -1739,12 +1728,12 @@ bfa_fcs_lport_fdmi_build_rhba_pyld(struct bfa_fcs_lport_fdmi_s *fdmi, u8 *pyld)
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_HBA_ATTRIB_MAX_CT);
-       attr->len = sizeof(fcs_hba_attr->max_ct_pyld);
-       memcpy(attr->value, &fcs_hba_attr->max_ct_pyld, attr->len);
-       len += attr->len;
+       templen = sizeof(fcs_hba_attr->max_ct_pyld);
+       memcpy(attr->value, &fcs_hba_attr->max_ct_pyld, templen);
+       len += templen;
        count++;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Update size of payload
@@ -1845,6 +1834,7 @@ bfa_fcs_lport_fdmi_build_portattr_block(struct bfa_fcs_lport_fdmi_s *fdmi,
        u8        *curr_ptr;
        u16        len;
        u8      count = 0;
+       u16     templen;
 
        /*
         * get port attributes
@@ -1863,54 +1853,54 @@ bfa_fcs_lport_fdmi_build_portattr_block(struct bfa_fcs_lport_fdmi_s *fdmi,
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_FC4_TYPES);
-       attr->len = sizeof(fcs_port_attr.supp_fc4_types);
-       memcpy(attr->value, fcs_port_attr.supp_fc4_types, attr->len);
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = sizeof(fcs_port_attr.supp_fc4_types);
+       memcpy(attr->value, fcs_port_attr.supp_fc4_types, templen);
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        ++count;
        attr->len =
-               cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+               cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * Supported Speed
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_SUPP_SPEED);
-       attr->len = sizeof(fcs_port_attr.supp_speed);
-       memcpy(attr->value, &fcs_port_attr.supp_speed, attr->len);
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = sizeof(fcs_port_attr.supp_speed);
+       memcpy(attr->value, &fcs_port_attr.supp_speed, templen);
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        ++count;
        attr->len =
-               cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+               cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * current Port Speed
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_PORT_SPEED);
-       attr->len = sizeof(fcs_port_attr.curr_speed);
-       memcpy(attr->value, &fcs_port_attr.curr_speed, attr->len);
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = sizeof(fcs_port_attr.curr_speed);
+       memcpy(attr->value, &fcs_port_attr.curr_speed, templen);
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        ++count;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * max frame size
         */
        attr = (struct fdmi_attr_s *) curr_ptr;
        attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_FRAME_SIZE);
-       attr->len = sizeof(fcs_port_attr.max_frm_size);
-       memcpy(attr->value, &fcs_port_attr.max_frm_size, attr->len);
-       curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-       len += attr->len;
+       templen = sizeof(fcs_port_attr.max_frm_size);
+       memcpy(attr->value, &fcs_port_attr.max_frm_size, templen);
+       curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+       len += templen;
        ++count;
-       attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                            sizeof(attr->len));
+       attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                            sizeof(templen));
 
        /*
         * OS Device Name
@@ -1918,14 +1908,14 @@ bfa_fcs_lport_fdmi_build_portattr_block(struct bfa_fcs_lport_fdmi_s *fdmi,
        if (fcs_port_attr.os_device_name[0] != '\0') {
                attr = (struct fdmi_attr_s *) curr_ptr;
                attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_DEV_NAME);
-               attr->len = (u16) strlen(fcs_port_attr.os_device_name);
-               memcpy(attr->value, fcs_port_attr.os_device_name, attr->len);
-               attr->len = fc_roundup(attr->len, sizeof(u32));
-               curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-               len += attr->len;
+               templen = (u16) strlen(fcs_port_attr.os_device_name);
+               memcpy(attr->value, fcs_port_attr.os_device_name, templen);
+               templen = fc_roundup(templen, sizeof(u32));
+               curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+               len += templen;
                ++count;
-               attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                                       sizeof(attr->len));
+               attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                                       sizeof(templen));
        }
        /*
         * Host Name
@@ -1933,14 +1923,14 @@ bfa_fcs_lport_fdmi_build_portattr_block(struct bfa_fcs_lport_fdmi_s *fdmi,
        if (fcs_port_attr.host_name[0] != '\0') {
                attr = (struct fdmi_attr_s *) curr_ptr;
                attr->type = cpu_to_be16(FDMI_PORT_ATTRIB_HOST_NAME);
-               attr->len = (u16) strlen(fcs_port_attr.host_name);
-               memcpy(attr->value, fcs_port_attr.host_name, attr->len);
-               attr->len = fc_roundup(attr->len, sizeof(u32));
-               curr_ptr += sizeof(attr->type) + sizeof(attr->len) + attr->len;
-               len += attr->len;
+               templen = (u16) strlen(fcs_port_attr.host_name);
+               memcpy(attr->value, fcs_port_attr.host_name, templen);
+               templen = fc_roundup(templen, sizeof(u32));
+               curr_ptr += sizeof(attr->type) + sizeof(templen) + templen;
+               len += templen;
                ++count;
-               attr->len = cpu_to_be16(attr->len + sizeof(attr->type) +
-                               sizeof(attr->len));
+               attr->len = cpu_to_be16(templen + sizeof(attr->type) +
+                               sizeof(templen));
        }
 
        /*
@@ -2103,7 +2093,7 @@ bfa_fcs_lport_fdmi_timeout(void *arg)
        bfa_sm_send_event(fdmi, FDMISM_EVENT_TIMEOUT);
 }
 
-void
+static void
 bfa_fcs_fdmi_get_hbaattr(struct bfa_fcs_lport_fdmi_s *fdmi,
                         struct bfa_fcs_fdmi_hba_attr_s *hba_attr)
 {
@@ -2147,7 +2137,7 @@ bfa_fcs_fdmi_get_hbaattr(struct bfa_fcs_lport_fdmi_s *fdmi,
        hba_attr->max_ct_pyld = cpu_to_be32(FC_MAX_PDUSZ);
 }
 
-void
+static void
 bfa_fcs_fdmi_get_portattr(struct bfa_fcs_lport_fdmi_s *fdmi,
                          struct bfa_fcs_fdmi_port_attr_s *port_attr)
 {
@@ -2560,7 +2550,7 @@ bfa_fcs_lport_ms_send_gmal(void *ms_cbarg, struct bfa_fcxp_s *fcxp_alloced)
 
        len = fc_gmal_req_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
                             bfa_fcs_lport_get_fcid(port),
-                                bfa_lps_get_peer_nwwn(port->fabric->lps));
+                                port->fabric->lps->pr_nwwn);
 
        bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
                          FC_CLASS_3, len, &fchs,
@@ -2760,7 +2750,7 @@ bfa_fcs_lport_ms_send_gfn(void *ms_cbarg, struct bfa_fcxp_s *fcxp_alloced)
 
        len = fc_gfn_req_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
                             bfa_fcs_lport_get_fcid(port),
-                                bfa_lps_get_peer_nwwn(port->fabric->lps));
+                                port->fabric->lps->pr_nwwn);
 
        bfa_fcxp_send(fcxp, NULL, port->fabric->vf_id, port->lp_tag, BFA_FALSE,
                          FC_CLASS_3, len, &fchs,
@@ -2836,7 +2826,7 @@ bfa_fcs_lport_ms_send_plogi(void *ms_cbarg, struct bfa_fcxp_s *fcxp_alloced)
        ms->fcxp = fcxp;
 
        len = fc_plogi_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
-                            bfa_os_hton3b(FC_MGMT_SERVER),
+                            bfa_hton3b(FC_MGMT_SERVER),
                             bfa_fcs_lport_get_fcid(port), 0,
                             port->port_cfg.pwwn, port->port_cfg.nwwn,
                                 bfa_fcport_get_maxfrsize(port->fcs->bfa));
@@ -3593,7 +3583,7 @@ fcxp = fcxp_alloced ? fcxp_alloced : bfa_fcs_fcxp_alloc(port->fcs);
        ns->fcxp = fcxp;
 
        len = fc_plogi_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
-                            bfa_os_hton3b(FC_NAME_SERVER),
+                            bfa_hton3b(FC_NAME_SERVER),
                             bfa_fcs_lport_get_fcid(port), 0,
                             port->port_cfg.pwwn, port->port_cfg.nwwn,
                                 bfa_fcport_get_maxfrsize(port->fcs->bfa));
@@ -4150,7 +4140,7 @@ bfa_fcs_lport_ns_query(struct bfa_fcs_lport_s *port)
        bfa_sm_send_event(ns, NSSM_EVENT_NS_QUERY);
 }
 
-void
+static void
 bfa_fcs_lport_ns_boot_target_disc(bfa_fcs_lport_t *port)
 {
 
@@ -4163,7 +4153,7 @@ bfa_fcs_lport_ns_boot_target_disc(bfa_fcs_lport_t *port)
 
        for (ii = 0 ; ii < nwwns; ++ii) {
                rport = bfa_fcs_rport_create_by_wwn(port, wwns[ii]);
-               bfa_assert(rport);
+               WARN_ON(!rport);
        }
 }
 
@@ -4352,8 +4342,8 @@ bfa_fcs_lport_scn_send_scr(void *scn_cbarg, struct bfa_fcxp_s *fcxp_alloced)
        /* Handle VU registrations for Base port only */
        if ((!port->vport) && bfa_ioc_get_fcmode(&port->fcs->bfa->ioc)) {
                len = fc_scr_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
-                               bfa_lps_is_brcd_fabric(port->fabric->lps),
-                                                       port->pid, 0);
+                               port->fabric->lps->brcd_switch,
+                               port->pid, 0);
        } else {
            len = fc_scr_build(&fchs, bfa_fcxp_get_reqbuf(fcxp),
                                    BFA_FALSE,
@@ -4626,7 +4616,7 @@ bfa_fcs_lport_scn_process_rscn(struct bfa_fcs_lport_s *port,
 
 
                default:
-                       bfa_assert(0);
+                       WARN_ON(1);
                        nsquery = BFA_TRUE;
                }
        }
@@ -4672,7 +4662,7 @@ bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn, int index,
 
        while ((qe != qh) && (i < nrports)) {
                rport = (struct bfa_fcs_rport_s *) qe;
-               if (bfa_os_ntoh3b(rport->pid) > 0xFFF000) {
+               if (bfa_ntoh3b(rport->pid) > 0xFFF000) {
                        qe = bfa_q_next(qe);
                        bfa_trc(fcs, (u32) rport->pwwn);
                        bfa_trc(fcs, rport->pid);
@@ -4720,7 +4710,7 @@ bfa_fcs_lport_get_rports(struct bfa_fcs_lport_s *port,
 
        while ((qe != qh) && (i < *nrports)) {
                rport = (struct bfa_fcs_rport_s *) qe;
-               if (bfa_os_ntoh3b(rport->pid) > 0xFFF000) {
+               if (bfa_ntoh3b(rport->pid) > 0xFFF000) {
                        qe = bfa_q_next(qe);
                        bfa_trc(fcs, (u32) rport->pwwn);
                        bfa_trc(fcs, rport->pid);
@@ -4771,7 +4761,7 @@ bfa_fcs_lport_get_rport_max_speed(bfa_fcs_lport_t *port)
 
        while (qe != qh) {
                rport = (struct bfa_fcs_rport_s *) qe;
-               if ((bfa_os_ntoh3b(rport->pid) > 0xFFF000) ||
+               if ((bfa_ntoh3b(rport->pid) > 0xFFF000) ||
                        (bfa_fcs_rport_get_state(rport) ==
                          BFA_RPORT_OFFLINE)) {
                        qe = bfa_q_next(qe);
@@ -4807,7 +4797,7 @@ bfa_fcs_lookup_port(struct bfa_fcs_s *fcs, u16 vf_id, wwn_t lpwwn)
        struct bfa_fcs_vport_s *vport;
        bfa_fcs_vf_t   *vf;
 
-       bfa_assert(fcs != NULL);
+       WARN_ON(fcs == NULL);
 
        vf = bfa_fcs_vf_lookup(fcs, vf_id);
        if (vf == NULL) {
@@ -4853,7 +4843,7 @@ bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
                port_info->max_vports_supp =
                        bfa_lps_get_max_vport(port->fcs->bfa);
                port_info->num_vports_inuse =
-                       bfa_fcs_fabric_vport_count(port->fabric);
+                       port->fabric->num_vports;
                port_info->max_rports_supp = BFA_FCS_MAX_RPORTS_SUPP;
                port_info->num_rports_inuse = port->num_rports;
        } else {
@@ -4997,7 +4987,8 @@ bfa_fcs_vport_sm_created(struct bfa_fcs_vport_s *vport,
 
        switch (event) {
        case BFA_FCS_VPORT_SM_START:
-               if (bfa_fcs_fabric_is_online(__vport_fabric(vport))
+               if (bfa_sm_cmp_state(__vport_fabric(vport),
+                                       bfa_fcs_fabric_sm_online)
                    && bfa_fcs_fabric_npiv_capable(__vport_fabric(vport))) {
                        bfa_sm_set_state(vport, bfa_fcs_vport_sm_fdisc);
                        bfa_fcs_vport_do_fdisc(vport);
@@ -5080,13 +5071,13 @@ bfa_fcs_vport_sm_fdisc(struct bfa_fcs_vport_s *vport,
        switch (event) {
        case BFA_FCS_VPORT_SM_DELETE:
                bfa_sm_set_state(vport, bfa_fcs_vport_sm_cleanup);
-               bfa_lps_discard(vport->lps);
+               bfa_sm_send_event(vport->lps, BFA_LPS_SM_OFFLINE);
                bfa_fcs_lport_delete(&vport->lport);
                break;
 
        case BFA_FCS_VPORT_SM_OFFLINE:
                bfa_sm_set_state(vport, bfa_fcs_vport_sm_offline);
-               bfa_lps_discard(vport->lps);
+               bfa_sm_send_event(vport->lps, BFA_LPS_SM_OFFLINE);
                break;
 
        case BFA_FCS_VPORT_SM_RSP_OK:
@@ -5166,7 +5157,7 @@ bfa_fcs_vport_sm_online(struct bfa_fcs_vport_s *vport,
 
        case BFA_FCS_VPORT_SM_OFFLINE:
                bfa_sm_set_state(vport, bfa_fcs_vport_sm_offline);
-               bfa_lps_discard(vport->lps);
+               bfa_sm_send_event(vport->lps, BFA_LPS_SM_OFFLINE);
                bfa_fcs_lport_offline(&vport->lport);
                break;
 
@@ -5266,7 +5257,7 @@ bfa_fcs_vport_sm_logo(struct bfa_fcs_vport_s *vport,
 
        switch (event) {
        case BFA_FCS_VPORT_SM_OFFLINE:
-               bfa_lps_discard(vport->lps);
+               bfa_sm_send_event(vport->lps, BFA_LPS_SM_OFFLINE);
                /*
                 * !!! fall through !!!
                 */
@@ -5305,14 +5296,14 @@ bfa_fcs_vport_do_fdisc(struct bfa_fcs_vport_s *vport)
 static void
 bfa_fcs_vport_fdisc_rejected(struct bfa_fcs_vport_s *vport)
 {
-       u8              lsrjt_rsn = bfa_lps_get_lsrjt_rsn(vport->lps);
-       u8              lsrjt_expl = bfa_lps_get_lsrjt_expl(vport->lps);
+       u8              lsrjt_rsn = vport->lps->lsrjt_rsn;
+       u8              lsrjt_expl = vport->lps->lsrjt_expl;
 
        bfa_trc(__vport_fcs(vport), lsrjt_rsn);
        bfa_trc(__vport_fcs(vport), lsrjt_expl);
 
        /* For certain reason codes, we don't want to retry. */
-       switch (bfa_lps_get_lsrjt_expl(vport->lps)) {
+       switch (vport->lps->lsrjt_expl) {
        case FC_LS_RJT_EXP_INV_PORT_NAME: /* by brocade */
        case FC_LS_RJT_EXP_INVALID_NPORT_ID: /* by Cisco */
                if (vport->fdisc_retries < BFA_FCS_VPORT_MAX_RETRIES)
@@ -5476,7 +5467,7 @@ bfa_fcs_vport_create(struct bfa_fcs_vport_s *vport, struct bfa_fcs_s *fcs,
        if (bfa_fcs_vport_lookup(fcs, vf_id, vport_cfg->pwwn) != NULL)
                return BFA_STATUS_VPORT_EXISTS;
 
-       if (bfa_fcs_fabric_vport_count(&fcs->fabric) ==
+       if (fcs->fabric.num_vports ==
                        bfa_lps_get_max_vport(fcs->bfa))
                return BFA_STATUS_VPORT_MAX;
 
@@ -5618,33 +5609,6 @@ bfa_fcs_vport_get_attr(struct bfa_fcs_vport_s *vport,
        attr->vport_state = bfa_sm_to_state(vport_sm_table, vport->sm);
 }
 
-/*
- *     Use this function to get vport's statistics.
- *
- *     param[in]       vport   pointer to bfa_fcs_vport_t.
- *     param[out]      stats   pointer to return vport statistics in
- *
- *     return None
- */
-void
-bfa_fcs_vport_get_stats(struct bfa_fcs_vport_s *vport,
-                       struct bfa_vport_stats_s *stats)
-{
-       *stats = vport->vport_stats;
-}
-
-/*
- *     Use this function to clear vport's statistics.
- *
- *     param[in]       vport   pointer to bfa_fcs_vport_t.
- *
- *     return None
- */
-void
-bfa_fcs_vport_clr_stats(struct bfa_fcs_vport_s *vport)
-{
-       memset(&vport->vport_stats, 0, sizeof(struct bfa_vport_stats_s));
-}
 
 /*
  *     Lookup a virtual port. Excludes base port from lookup.
@@ -5684,7 +5648,7 @@ bfa_cb_lps_fdisc_comp(void *bfad, void *uarg, bfa_status_t status)
                /*
                 * Initialize the V-Port fields
                 */
-               __vport_fcid(vport) = bfa_lps_get_pid(vport->lps);
+               __vport_fcid(vport) = vport->lps->lp_pid;
                vport->vport_stats.fdisc_accepts++;
                bfa_sm_send_event(vport, BFA_FCS_VPORT_SM_RSP_OK);
                break;
@@ -5697,7 +5661,7 @@ bfa_cb_lps_fdisc_comp(void *bfad, void *uarg, bfa_status_t status)
                break;
 
        case BFA_STATUS_EPROTOCOL:
-               switch (bfa_lps_get_extstatus(vport->lps)) {
+               switch (vport->lps->ext_status) {
                case BFA_EPROTO_BAD_ACCEPT:
                        vport->vport_stats.fdisc_acc_bad++;
                        break;