Commit 43ffdf4d authored by Krishna Gudipati's avatar Krishna Gudipati Committed by James Bottomley

[SCSI] bfa: Add pbc port disable check and fix LPS message name

- Add PBC port Disabled condition check.
- Rename incorrectly named LPS I2H messages.
Signed-off-by: default avatarKrishna Gudipati <kgudipat@brocade.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent d37779f8
...@@ -236,6 +236,12 @@ bfa_port_enable(struct bfa_port_s *port, bfa_port_endis_cbfn_t cbfn, ...@@ -236,6 +236,12 @@ bfa_port_enable(struct bfa_port_s *port, bfa_port_endis_cbfn_t cbfn,
{ {
struct bfi_port_generic_req_s *m; struct bfi_port_generic_req_s *m;
/* If port is PBC disabled, return error */
if (port->pbc_disabled) {
bfa_trc(port, BFA_STATUS_PBC);
return BFA_STATUS_PBC;
}
if (bfa_ioc_is_disabled(port->ioc)) { if (bfa_ioc_is_disabled(port->ioc)) {
bfa_trc(port, BFA_STATUS_IOC_DISABLED); bfa_trc(port, BFA_STATUS_IOC_DISABLED);
return BFA_STATUS_IOC_DISABLED; return BFA_STATUS_IOC_DISABLED;
...@@ -280,6 +286,12 @@ bfa_port_disable(struct bfa_port_s *port, bfa_port_endis_cbfn_t cbfn, ...@@ -280,6 +286,12 @@ bfa_port_disable(struct bfa_port_s *port, bfa_port_endis_cbfn_t cbfn,
{ {
struct bfi_port_generic_req_s *m; struct bfi_port_generic_req_s *m;
/* If port is PBC disabled, return error */
if (port->pbc_disabled) {
bfa_trc(port, BFA_STATUS_PBC);
return BFA_STATUS_PBC;
}
if (bfa_ioc_is_disabled(port->ioc)) { if (bfa_ioc_is_disabled(port->ioc)) {
bfa_trc(port, BFA_STATUS_IOC_DISABLED); bfa_trc(port, BFA_STATUS_IOC_DISABLED);
return BFA_STATUS_IOC_DISABLED; return BFA_STATUS_IOC_DISABLED;
...@@ -456,6 +468,7 @@ bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc, ...@@ -456,6 +468,7 @@ bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc,
port->endis_pending = BFA_FALSE; port->endis_pending = BFA_FALSE;
port->stats_cbfn = NULL; port->stats_cbfn = NULL;
port->endis_cbfn = NULL; port->endis_cbfn = NULL;
port->pbc_disabled = BFA_FALSE;
bfa_ioc_mbox_regisr(port->ioc, BFI_MC_PORT, bfa_port_isr, port); bfa_ioc_mbox_regisr(port->ioc, BFI_MC_PORT, bfa_port_isr, port);
bfa_ioc_notify_init(&port->ioc_notify, bfa_port_notify, port); bfa_ioc_notify_init(&port->ioc_notify, bfa_port_notify, port);
......
...@@ -44,6 +44,7 @@ struct bfa_port_s { ...@@ -44,6 +44,7 @@ struct bfa_port_s {
void *endis_cbarg; void *endis_cbarg;
bfa_status_t endis_status; bfa_status_t endis_status;
struct bfa_ioc_notify_s ioc_notify; struct bfa_ioc_notify_s ioc_notify;
bfa_boolean_t pbc_disabled;
}; };
void bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc, void bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc,
......
...@@ -1934,15 +1934,15 @@ bfa_lps_isr(struct bfa_s *bfa, struct bfi_msg_s *m) ...@@ -1934,15 +1934,15 @@ bfa_lps_isr(struct bfa_s *bfa, struct bfi_msg_s *m)
msg.msg = m; msg.msg = m;
switch (m->mhdr.msg_id) { switch (m->mhdr.msg_id) {
case BFI_LPS_H2I_LOGIN_RSP: case BFI_LPS_I2H_LOGIN_RSP:
bfa_lps_login_rsp(bfa, msg.login_rsp); bfa_lps_login_rsp(bfa, msg.login_rsp);
break; break;
case BFI_LPS_H2I_LOGOUT_RSP: case BFI_LPS_I2H_LOGOUT_RSP:
bfa_lps_logout_rsp(bfa, msg.logout_rsp); bfa_lps_logout_rsp(bfa, msg.logout_rsp);
break; break;
case BFI_LPS_H2I_CVL_EVENT: case BFI_LPS_I2H_CVL_EVENT:
bfa_lps_rx_cvl_event(bfa, msg.cvl_event); bfa_lps_rx_cvl_event(bfa, msg.cvl_event);
break; break;
...@@ -3308,6 +3308,9 @@ bfa_fcport_init(struct bfa_s *bfa) ...@@ -3308,6 +3308,9 @@ bfa_fcport_init(struct bfa_s *bfa)
fcport->cfg.rx_bbcredit = bfa_ioc_rx_bbcredit(&bfa->ioc); fcport->cfg.rx_bbcredit = bfa_ioc_rx_bbcredit(&bfa->ioc);
fcport->speed_sup = bfa_ioc_speed_sup(&bfa->ioc); fcport->speed_sup = bfa_ioc_speed_sup(&bfa->ioc);
if (bfa_fcport_is_pbcdisabled(bfa))
bfa->modules.port.pbc_disabled = BFA_TRUE;
WARN_ON(!fcport->cfg.maxfrsize); WARN_ON(!fcport->cfg.maxfrsize);
WARN_ON(!fcport->cfg.rx_bbcredit); WARN_ON(!fcport->cfg.rx_bbcredit);
WARN_ON(!fcport->speed_sup); WARN_ON(!fcport->speed_sup);
...@@ -3432,6 +3435,9 @@ bfa_fcport_enable(struct bfa_s *bfa) ...@@ -3432,6 +3435,9 @@ bfa_fcport_enable(struct bfa_s *bfa)
{ {
struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa); struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa);
if (bfa_fcport_is_pbcdisabled(bfa))
return BFA_STATUS_PBC;
if (bfa_ioc_is_disabled(&bfa->ioc)) if (bfa_ioc_is_disabled(&bfa->ioc))
return BFA_STATUS_IOC_DISABLED; return BFA_STATUS_IOC_DISABLED;
...@@ -3445,6 +3451,8 @@ bfa_fcport_enable(struct bfa_s *bfa) ...@@ -3445,6 +3451,8 @@ bfa_fcport_enable(struct bfa_s *bfa)
bfa_status_t bfa_status_t
bfa_fcport_disable(struct bfa_s *bfa) bfa_fcport_disable(struct bfa_s *bfa)
{ {
if (bfa_fcport_is_pbcdisabled(bfa))
return BFA_STATUS_PBC;
if (bfa_ioc_is_disabled(&bfa->ioc)) if (bfa_ioc_is_disabled(&bfa->ioc))
return BFA_STATUS_IOC_DISABLED; return BFA_STATUS_IOC_DISABLED;
...@@ -3453,6 +3461,21 @@ bfa_fcport_disable(struct bfa_s *bfa) ...@@ -3453,6 +3461,21 @@ bfa_fcport_disable(struct bfa_s *bfa)
return BFA_STATUS_OK; return BFA_STATUS_OK;
} }
/* If PBC is disabled on port, return error */
bfa_status_t
bfa_fcport_is_pbcdisabled(struct bfa_s *bfa)
{
struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa);
struct bfa_iocfc_s *iocfc = &bfa->iocfc;
struct bfi_iocfc_cfgrsp_s *cfgrsp = iocfc->cfgrsp;
if (cfgrsp->pbc_cfg.port_enabled == BFI_PBC_PORT_DISABLED) {
bfa_trc(bfa, fcport->pwwn);
return BFA_STATUS_PBC;
}
return BFA_STATUS_OK;
}
/* /*
* Configure port speed. * Configure port speed.
*/ */
...@@ -3660,10 +3683,16 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr) ...@@ -3660,10 +3683,16 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr)
attr->pport_cfg.path_tov = bfa_fcpim_path_tov_get(bfa); attr->pport_cfg.path_tov = bfa_fcpim_path_tov_get(bfa);
attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa); attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa);
attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm); attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm);
if (bfa_ioc_is_disabled(&fcport->bfa->ioc))
attr->port_state = BFA_PORT_ST_IOCDIS; /* PBC Disabled State */
else if (bfa_ioc_fw_mismatch(&fcport->bfa->ioc)) if (bfa_fcport_is_pbcdisabled(bfa))
attr->port_state = BFA_PORT_ST_FWMISMATCH; attr->port_state = BFA_PORT_ST_PREBOOT_DISABLED;
else {
if (bfa_ioc_is_disabled(&fcport->bfa->ioc))
attr->port_state = BFA_PORT_ST_IOCDIS;
else if (bfa_ioc_fw_mismatch(&fcport->bfa->ioc))
attr->port_state = BFA_PORT_ST_FWMISMATCH;
}
/* FCoE vlan */ /* FCoE vlan */
attr->fcoe_vlan = fcport->fcoe_vlan; attr->fcoe_vlan = fcport->fcoe_vlan;
......
...@@ -524,6 +524,7 @@ bfa_status_t bfa_fcport_get_stats(struct bfa_s *bfa, ...@@ -524,6 +524,7 @@ bfa_status_t bfa_fcport_get_stats(struct bfa_s *bfa,
bfa_status_t bfa_fcport_clear_stats(struct bfa_s *bfa, bfa_cb_port_t cbfn, bfa_status_t bfa_fcport_clear_stats(struct bfa_s *bfa, bfa_cb_port_t cbfn,
void *cbarg); void *cbarg);
bfa_boolean_t bfa_fcport_is_qos_enabled(struct bfa_s *bfa); bfa_boolean_t bfa_fcport_is_qos_enabled(struct bfa_s *bfa);
bfa_status_t bfa_fcport_is_pbcdisabled(struct bfa_s *bfa);
/* /*
* bfa rport API functions * bfa rport API functions
......
...@@ -50,7 +50,7 @@ struct bfi_mhdr_s { ...@@ -50,7 +50,7 @@ struct bfi_mhdr_s {
} mtag; } mtag;
}; };
#define bfi_mhdr_2_qid(_mh) (_mh)->mtag.h2i.qid #define bfi_mhdr_2_qid(_mh) ((_mh)->mtag.h2i.qid)
#define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \ #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \
(_mh).msg_class = (_mc); \ (_mh).msg_class = (_mc); \
...@@ -411,6 +411,7 @@ union bfi_ioc_i2h_msg_u { ...@@ -411,6 +411,7 @@ union bfi_ioc_i2h_msg_u {
#define BFI_PBC_MAX_BLUNS 8 #define BFI_PBC_MAX_BLUNS 8
#define BFI_PBC_MAX_VPORTS 16 #define BFI_PBC_MAX_VPORTS 16
#define BFI_PBC_PORT_DISABLED 2
/* /*
* PBC boot lun configuration * PBC boot lun configuration
......
...@@ -346,9 +346,9 @@ enum bfi_lps_h2i_msgs { ...@@ -346,9 +346,9 @@ enum bfi_lps_h2i_msgs {
}; };
enum bfi_lps_i2h_msgs { enum bfi_lps_i2h_msgs {
BFI_LPS_H2I_LOGIN_RSP = BFA_I2HM(1), BFI_LPS_I2H_LOGIN_RSP = BFA_I2HM(1),
BFI_LPS_H2I_LOGOUT_RSP = BFA_I2HM(2), BFI_LPS_I2H_LOGOUT_RSP = BFA_I2HM(2),
BFI_LPS_H2I_CVL_EVENT = BFA_I2HM(3), BFI_LPS_I2H_CVL_EVENT = BFA_I2HM(3),
}; };
struct bfi_lps_login_req_s { struct bfi_lps_login_req_s {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment