/** * FC transport template entry, get SCSI host port state. */ static void bfad_im_get_host_port_state(struct Scsi_Host *shost) { struct bfad_im_port_s *im_port = (struct bfad_im_port_s *) shost->hostdata[0]; struct bfad_s *bfad = im_port->bfad; struct bfa_pport_attr_s attr; bfa_fcport_get_attr(&bfad->bfa, &attr); switch (attr.port_state) { case BFA_PPORT_ST_LINKDOWN: fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; break; case BFA_PPORT_ST_LINKUP: fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; break; case BFA_PPORT_ST_UNINIT: case BFA_PPORT_ST_ENABLING_QWAIT: case BFA_PPORT_ST_ENABLING: case BFA_PPORT_ST_DISABLING_QWAIT: case BFA_PPORT_ST_DISABLING: case BFA_PPORT_ST_DISABLED: case BFA_PPORT_ST_STOPPED: case BFA_PPORT_ST_IOCDOWN: default: fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN; break; } }
void fc_get_host_port_state(struct Scsi_Host *shost) { struct fc_lport *lp = shost_priv(shost); if (lp->link_up) fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; else fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE; }
static void zfcp_scsi_get_host_port_state(struct Scsi_Host *shost) { struct zfcp_adapter *adapter = (struct zfcp_adapter *)shost->hostdata[0]; int status = atomic_read(&adapter->status); if ((status & ZFCP_STATUS_COMMON_RUNNING) && !(status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)) fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; else if (status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED) fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; else if (status & ZFCP_STATUS_COMMON_ERP_FAILED) fc_host_port_state(shost) = FC_PORTSTATE_ERROR; else fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN; }
/** * fc_get_host_port_state() - Return the port state of the given Scsi_Host * @shost: The SCSI host whose port state is to be determined */ void fc_get_host_port_state(struct Scsi_Host *shost) { struct fc_lport *lport = shost_priv(shost); mutex_lock(&lport->lp_mutex); if (!lport->link_up) fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; else switch (lport->state) { case LPORT_ST_READY: fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; break; default: fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE; } mutex_unlock(&lport->lp_mutex); }
/* * csio_get_port_state - Return FC local port state. * @shost: scsi host. * */ static void csio_get_host_port_state(struct Scsi_Host *shost) { struct csio_lnode *ln = shost_priv(shost); struct csio_hw *hw = csio_lnode_to_hw(ln); char state[16]; spin_lock_irq(&hw->lock); csio_lnode_state_to_str(ln, state); if (!strcmp(state, "READY")) fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; else if (!strcmp(state, "OFFLINE")) fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; else fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN; spin_unlock_irq(&hw->lock); }