@@ -1504,6 +1504,351 @@
ha->pep_version[0], ha->pep_version[1], ha->pep_version[2]);
}
+
+static ssize_t
+qla2x00_tgt_ex_pct_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
+ int len = 0;
+
+ if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) {
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ "This option is not supported. Driver need to be loaded with "
+ "non-initiator mode (qlop_mode)");
+ return len;
+ }
+
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ "target exchange percentage: new %d : current: %d\n\n",
+ vha->u_tgt_ex_pct, vha->tgt_ex_pct);
+
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ "Please (re)set operating mode via \"f_qlop_mode\" to load new setting\n");
+ return len;
+}
+
+static ssize_t
+qla2x00_tgt_ex_pct_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
+ int val = 0;
+
+ if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR)
+ goto out;
+
+ if (sscanf(buf, "%d", &val) != 1)
+ return -EINVAL;
+
+ if (val > 100)
+ val = 100;
+ else if (val < 0)
+ val = 0;
+
+ vha->u_tgt_ex_pct = val;
+out:
+ return strlen(buf);
+}
+
+static ssize_t
+qla2x00_opmode_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
+ int len = 0;
+
+ if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR) {
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ "This option is not supported. Driver need to be loaded with "
+ "non-initiator mode (qlop_mode)");
+ return len;
+ }
+
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ "Supported options: exclusive | tgt_mode | ini_mode | dual_mode\n");
+
+ /* --- */
+ len += scnprintf(buf + len, PAGE_SIZE-len, "Current selection: ");
+
+ switch (vha->qlop_mode) {
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ QLA2XXX_OP_MODE_STR_EXCLUSIVE);
+ break;
+ case QLA2XXX_OP_MODE_TARGET:
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ QLA2XXX_OP_MODE_STR_TARGET);
+ break;
+ case QLA2XXX_OP_MODE_INITIATOR:
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ QLA2XXX_OP_MODE_STR_INITIATOR);
+ break;
+ case QLA2XXX_OP_MODE_DUAL:
+ len += scnprintf(buf + len, PAGE_SIZE-len,
+ QLA2XXX_OP_MODE_STR_DUAL);
+ break;
+ }
+ len += scnprintf(buf + len, PAGE_SIZE-len, "\n");
+
+ return len;
+}
+
+
+void qla_adj_tgt_exch_pct(scsi_qla_host_t *vha, int op)
+{
+ /* reserve a few exchange for FW for mgt. */
+ switch (op) {
+ case QLA2XXX_OP_MODE_TARGET:
+ vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT;
+ break;
+
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ if (qla_tgt_mode_enabled(vha) ||
+ qla_dual_mode_enabled(vha)) {
+ vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT;
+ } else
+ vha->u_tgt_ex_pct = 0;
+ break;
+
+ case QLA2XXX_OP_MODE_INITIATOR:
+ /* target mode does not need any exchange reserve. */
+ vha->u_tgt_ex_pct = 0;
+ break;
+
+ case QLA2XXX_OP_MODE_DUAL:
+ if (vha->u_tgt_ex_pct >= 100)
+ vha->u_tgt_ex_pct = MAX_TGT_EXCH_PCT;
+
+ if (vha->u_tgt_ex_pct <= 0)
+ vha->u_tgt_ex_pct = MIN_TGT_EXCH_PCT;
+ break;
+ }
+}
+
+static
+int qla_set_opmode(scsi_qla_host_t *vha, int op)
+{
+ int rc = 0;
+ enum {
+ NO_ACTION,
+ MODE_CHANGE_ACCEPT,
+ MODE_CHANGE_NO_ACTION,
+ TARGET_STILL_ACTIVE,
+ };
+ int action = NO_ACTION;
+ int set_mode = 0;
+
+ qla_adj_tgt_exch_pct(vha, op);
+
+ switch (vha->qlop_mode) {
+ case QLA2XXX_OP_MODE_TARGET:
+ switch (op) {
+ case QLA2XXX_OP_MODE_TARGET:
+ if (qla_tgt_mode_enabled(vha)) {
+ if (vha->tgt_ex_pct != vha->u_tgt_ex_pct)
+ action = MODE_CHANGE_ACCEPT;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ if (qla_tgt_mode_enabled(vha)) {
+ if (vha->tgt_ex_pct != vha->u_tgt_ex_pct)
+ action = MODE_CHANGE_ACCEPT;
+ else
+ action = MODE_CHANGE_NO_ACTION;
+ } else {
+ action = MODE_CHANGE_ACCEPT;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_DUAL:
+ action = MODE_CHANGE_ACCEPT;
+ /* active_mode is target only, reset it to dual */
+ if (qla_tgt_mode_enabled(vha))
+ set_mode = 1;
+ break;
+
+ case QLA2XXX_OP_MODE_INITIATOR:
+ if (qla_tgt_mode_enabled(vha))
+ action = TARGET_STILL_ACTIVE;
+ else
+ action = MODE_CHANGE_ACCEPT;
+ break;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ switch (op) {
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ if (qla_tgt_mode_enabled(vha)) {
+ if (vha->tgt_ex_pct != vha->u_tgt_ex_pct)
+ action = MODE_CHANGE_ACCEPT;
+ else
+ action = NO_ACTION;
+ } else {
+ action = NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_TARGET:
+ if (qla_tgt_mode_enabled(vha)) {
+ if (vha->tgt_ex_pct != vha->u_tgt_ex_pct)
+ action = MODE_CHANGE_ACCEPT;
+ else
+ action = MODE_CHANGE_NO_ACTION;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_DUAL: /* exclusive -> dual */
+ if (qla_tgt_mode_enabled(vha)) {
+ action = MODE_CHANGE_ACCEPT;
+ set_mode = 1;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_INITIATOR:
+ if (qla_tgt_mode_enabled(vha))
+ action = TARGET_STILL_ACTIVE;
+ else
+ action = MODE_CHANGE_NO_ACTION;
+ break;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_INITIATOR:
+ switch (op) {
+ case QLA2XXX_OP_MODE_INITIATOR:
+ action = NO_ACTION;
+ break;
+ default:
+ action = MODE_CHANGE_NO_ACTION;
+ break;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_DUAL:
+ switch (op) {
+ case QLA2XXX_OP_MODE_DUAL:
+ if (qla_tgt_mode_enabled(vha) ||
+ qla_dual_mode_enabled(vha)) {
+ if (vha->tgt_ex_pct != vha->u_tgt_ex_pct)
+ action = MODE_CHANGE_ACCEPT;
+ else
+ action = NO_ACTION;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_TARGET:
+ if (qla_tgt_mode_enabled(vha) ||
+ qla_dual_mode_enabled(vha)) {
+ /* turning off initiator mode */
+ set_mode = 1;
+ action = MODE_CHANGE_ACCEPT;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
+ if (qla_tgt_mode_enabled(vha) ||
+ qla_dual_mode_enabled(vha)) {
+ set_mode = 1;
+ action = MODE_CHANGE_ACCEPT;
+ } else {
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+
+ case QLA2XXX_OP_MODE_INITIATOR:
+ if (qla_tgt_mode_enabled(vha) ||
+ qla_dual_mode_enabled(vha))
+ action = TARGET_STILL_ACTIVE;
+ else
+ action = MODE_CHANGE_NO_ACTION;
+ }
+ break;
+ }
+
+ switch (action) {
+ case MODE_CHANGE_ACCEPT:
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Mode change accepted %d|%d exch pct %d|%d.\n",
+ vha->qlop_mode, op,
+ vha->tgt_ex_pct, vha->u_tgt_ex_pct);
+ vha->qlop_mode = op;
+ vha->tgt_ex_pct = vha->u_tgt_ex_pct;
+ if (set_mode)
+ qlt_set_mode(vha);
+
+ set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
+ break;
+
+ case MODE_CHANGE_NO_ACTION:
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Mode is set. No action taken. %d|%d pct %d|%d.\n",
+ vha->qlop_mode, op,
+ vha->tgt_ex_pct, vha->u_tgt_ex_pct);
+ vha->tgt_ex_pct = vha->u_tgt_ex_pct;
+ vha->qlop_mode = op;
+ break;
+
+ case TARGET_STILL_ACTIVE:
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Target Mode is active. Unable to change Mode.\n");
+ break;
+
+ case NO_ACTION:
+ default:
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Mode unchange. No action taken. %d|%d pct %d|%d.\n",
+ vha->qlop_mode, op,
+ vha->tgt_ex_pct, vha->u_tgt_ex_pct);
+ break;
+ }
+
+ return rc;
+}
+
+static ssize_t
+qla2x00_opmode_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
+ char op_mode[16];
+ int op;
+
+
+ if (ql2x_op_mode == QLA2XXX_OP_MODE_INITIATOR)
+ return -EINVAL;
+
+ memset(op_mode,0,16);
+ if (sscanf(buf, "%15s", op_mode) != 1)
+ return -EINVAL;
+
+ if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_EXCLUSIVE) == 0)
+ op = QLA2XXX_OP_MODE_EXCLUSIVE;
+ else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_TARGET) == 0)
+ op = QLA2XXX_OP_MODE_TARGET;
+ else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_INITIATOR) == 0)
+ op = QLA2XXX_OP_MODE_INITIATOR;
+ else if (strcasecmp(op_mode, QLA2XXX_OP_MODE_STR_DUAL) == 0)
+ op = QLA2XXX_OP_MODE_DUAL;
+ else
+ return -EINVAL;
+
+ qla_set_opmode(vha, op);
+ return strlen(buf);
+}
+
static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL);
static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
@@ -1549,6 +1894,10 @@ static DEVICE_ATTR(allow_cna_fw_dump, S_IRUGO | S_IWUSR,
qla2x00_allow_cna_fw_dump_show,
qla2x00_allow_cna_fw_dump_store);
static DEVICE_ATTR(pep_version, S_IRUGO, qla2x00_pep_version_show, NULL);
+static DEVICE_ATTR(f_qlop_mode, S_IRUGO | S_IWUSR,
+ qla2x00_opmode_show, qla2x00_opmode_store);
+static DEVICE_ATTR(ql_dm_tgt_ex_pct, S_IRUGO | S_IWUSR,
+ qla2x00_tgt_ex_pct_show, qla2x00_tgt_ex_pct_store);
struct device_attribute *qla2x00_host_attrs[] = {
&dev_attr_driver_version,
@@ -1583,6 +1932,8 @@ struct device_attribute *qla2x00_host_attrs[] = {
&dev_attr_fw_dump_size,
&dev_attr_allow_cna_fw_dump,
&dev_attr_pep_version,
+ &dev_attr_f_qlop_mode,
+ &dev_attr_ql_dm_tgt_ex_pct,
NULL,
};
@@ -4017,6 +4017,10 @@ struct qla_tgt_counters {
/* Count of active session/fcport */
int fcport_count;
wait_queue_head_t fcport_waitQ;
+ int qlop_mode;
+ int tgt_ex_pct, u_tgt_ex_pct;
+#define MAX_TGT_EXCH_PCT 99
+#define MIN_TGT_EXCH_PCT 1
} scsi_qla_host_t;
struct qla27xx_image_status {
@@ -140,8 +140,10 @@ int qla24xx_post_newsess_work(struct scsi_qla_host *, port_id_t *,
extern int ql2xexlogins;
extern int ql2xexchoffld;
extern int ql2xfwholdabts;
+extern int ql_dm_tgt_ex_pct;
extern struct workqueue_struct *qla_wq;
+
extern int qla2x00_loop_reset(scsi_qla_host_t *);
extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum
@@ -645,6 +647,7 @@ extern int qla2x00_echo_test(scsi_qla_host_t *,
extern int qla24xx_update_all_fcp_prio(scsi_qla_host_t *);
extern int qla24xx_fcp_prio_cfg_valid(scsi_qla_host_t *,
struct qla_fcp_prio_cfg *, uint8_t);
+extern void qla_adj_tgt_exch_pct(scsi_qla_host_t *vha, int op);
/*
* Global Function Prototypes in qla_dfs.c source file.
@@ -849,5 +852,6 @@ void qlt_plogi_ack_link(struct scsi_qla_host *, qlt_plogi_ack_t *,
extern struct fc_port *qlt_find_sess_invalidate_other(scsi_qla_host_t *,
uint64_t wwn, port_id_t port_id, uint16_t loop_id, struct fc_port **);
void qla24xx_delete_sess_fn(struct work_struct *);
+void qlt_set_mode(struct scsi_qla_host *);
#endif /* _QLA_GBL_H */
@@ -4301,6 +4301,10 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht,
vha->host = host;
vha->host_no = host->host_no;
vha->hw = ha;
+ vha->qlop_mode = ql2x_op_mode;
+ vha->u_tgt_ex_pct = ql_dm_tgt_ex_pct;
+ qla_adj_tgt_exch_pct(vha, ql2x_op_mode);
+ vha->tgt_ex_pct = vha->u_tgt_ex_pct;
INIT_LIST_HEAD(&vha->vp_fcports);
INIT_LIST_HEAD(&vha->work_list);
@@ -45,26 +45,26 @@
MODULE_PARM_DESC(ql2xtgt_tape_enable,
"Enables Sequence level error recovery (aka FC Tape). Default is 0 - no SLER. 1 - Enable SLER.");
-static char *qlini_mode = QLA2XXX_INI_MODE_STR_ENABLED;
-module_param(qlini_mode, charp, S_IRUGO);
-MODULE_PARM_DESC(qlini_mode,
- "Determines when initiator mode will be enabled. Possible values: "
+static char *qlop_mode = QLA2XXX_OP_MODE_STR_INITIATOR;
+module_param(qlop_mode, charp, S_IRUGO);
+MODULE_PARM_DESC(qlop_mode,
+ "Determines operating mode. Possible values: "
"\"exclusive\" - initiator mode will be enabled on load, "
"disabled on enabling target mode and then on disabling target mode "
"enabled back; "
- "\"disabled\" - initiator mode will never be enabled; "
- "\"dual\" - Initiator Modes will be enabled. Target Mode can be activated "
- "when ready "
- "\"enabled\" (default) - initiator mode will always stay enabled.");
+ "\"tgt_mode\" - Target mode only. Initiator mode will never be enabled; "
+ "\"dual_mode\" - Initiator Modes will be enabled. Target Mode can be "
+ "activated when ready; "
+ "\"ini_mode\" (default) - initiator mode will always stay enabled.");
-static int ql_dm_tgt_ex_pct = 50;
+int ql_dm_tgt_ex_pct = 50;
module_param(ql_dm_tgt_ex_pct, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(ql_dm_tgt_ex_pct,
- "For Dual Mode (qlini_mode=dual), this parameter determines "
+ "For Dual Mode (qlop_mode=dual_mode), this parameter determines "
"the percentage of exchanges/cmds FW will allocate resources "
"for Target mode.");
-int ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE;
+int ql2x_op_mode = QLA2XXX_OP_MODE_EXCLUSIVE;
static int temp_sam_status = SAM_STAT_BUSY;
@@ -6579,17 +6579,17 @@ void qlt_lport_deregister(struct scsi_qla_host *vha)
EXPORT_SYMBOL(qlt_lport_deregister);
/* Must be called under HW lock */
-static void qlt_set_mode(struct scsi_qla_host *vha)
+void qlt_set_mode(struct scsi_qla_host *vha)
{
- switch (ql2x_ini_mode) {
- case QLA2XXX_INI_MODE_DISABLED:
- case QLA2XXX_INI_MODE_EXCLUSIVE:
+ switch (vha->qlop_mode) {
+ case QLA2XXX_OP_MODE_TARGET:
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
vha->host->active_mode = MODE_TARGET;
break;
- case QLA2XXX_INI_MODE_ENABLED:
+ case QLA2XXX_OP_MODE_INITIATOR:
vha->host->active_mode = MODE_UNKNOWN;
break;
- case QLA2XXX_INI_MODE_DUAL:
+ case QLA2XXX_OP_MODE_DUAL:
vha->host->active_mode = MODE_DUAL;
break;
@@ -6601,15 +6601,15 @@ static void qlt_set_mode(struct scsi_qla_host *vha)
/* Must be called under HW lock */
static void qlt_clear_mode(struct scsi_qla_host *vha)
{
- switch (ql2x_ini_mode) {
- case QLA2XXX_INI_MODE_DISABLED:
+ switch (vha->qlop_mode) {
+ case QLA2XXX_OP_MODE_TARGET:
vha->host->active_mode = MODE_UNKNOWN;
break;
- case QLA2XXX_INI_MODE_EXCLUSIVE:
+ case QLA2XXX_OP_MODE_EXCLUSIVE:
vha->host->active_mode = MODE_INITIATOR;
break;
- case QLA2XXX_INI_MODE_ENABLED:
- case QLA2XXX_INI_MODE_DUAL:
+ case QLA2XXX_OP_MODE_INITIATOR:
+ case QLA2XXX_OP_MODE_DUAL:
vha->host->active_mode = MODE_INITIATOR;
break;
default:
@@ -6844,23 +6844,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha)
ha->tgt.saved_set = 1;
}
- if (qla_tgt_mode_enabled(vha)) {
- nv->exchange_count = cpu_to_le16(0xFFFF);
- } else { /* dual */
- if (ql_dm_tgt_ex_pct > 100) {
- ql_dm_tgt_ex_pct = 50;
- } else if (ql_dm_tgt_ex_pct == 100) {
- /* leave some for FW */
- ql_dm_tgt_ex_pct = 95;
- }
+ if (vha->tgt_ex_pct <= 0)
+ vha->tgt_ex_pct = MIN_TGT_EXCH_PCT;
- tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct;
- tmp = tmp/100;
- if (tmp > 0xffff)
- tmp = 0xffff;
- t = tmp & 0xffff;
- nv->exchange_count = cpu_to_le16(t);
- }
+ tmp = ha->orig_fw_xcb_count * vha->tgt_ex_pct;
+ tmp = tmp/100;
+ if (tmp > 0xffff)
+ tmp = 0xffff;
+ t = tmp & 0xffff;
+
+ nv->exchange_count = cpu_to_le16(t);
/* Enable target mode */
nv->firmware_options_1 |= cpu_to_le32(BIT_4);
@@ -6966,24 +6959,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha)
ha->tgt.saved_set = 1;
}
- if (qla_tgt_mode_enabled(vha)) {
- nv->exchange_count = cpu_to_le16(0xFFFF);
- } else { /* dual */
- if (ql_dm_tgt_ex_pct > 100) {
- ql_dm_tgt_ex_pct = 50;
- } else if (ql_dm_tgt_ex_pct == 100) {
- /* leave some for FW */
- ql_dm_tgt_ex_pct = 95;
- }
+ if (vha->tgt_ex_pct <= 0)
+ vha->tgt_ex_pct = MIN_TGT_EXCH_PCT;
- tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct;
- tmp = tmp/100;
- if (tmp > 0xffff)
- tmp = 0xffff;
+ tmp = ha->orig_fw_xcb_count * vha->tgt_ex_pct;
+ tmp = tmp/100;
+ if (tmp > 0xffff)
+ tmp = 0xffff;
+ t = tmp & 0xffff;
- t = tmp & 0xffff;
- nv->exchange_count = cpu_to_le16(t);
- }
+ nv->exchange_count = cpu_to_le16(t);
/* Enable target mode */
nv->firmware_options_1 |= cpu_to_le32(BIT_4);
@@ -7258,16 +7243,16 @@ static void qlt_disable_vha(struct scsi_qla_host *vha)
}
}
-static int __init qlt_parse_ini_mode(void)
+static int __init qlt_parse_operating_mode(void)
{
- if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_EXCLUSIVE) == 0)
- ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE;
- else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_DISABLED) == 0)
- ql2x_ini_mode = QLA2XXX_INI_MODE_DISABLED;
- else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_ENABLED) == 0)
- ql2x_ini_mode = QLA2XXX_INI_MODE_ENABLED;
- else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_DUAL) == 0)
- ql2x_ini_mode = QLA2XXX_INI_MODE_DUAL;
+ if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_EXCLUSIVE) == 0)
+ ql2x_op_mode = QLA2XXX_OP_MODE_EXCLUSIVE;
+ else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_TARGET) == 0)
+ ql2x_op_mode = QLA2XXX_OP_MODE_TARGET;
+ else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_INITIATOR) == 0)
+ ql2x_op_mode = QLA2XXX_OP_MODE_INITIATOR;
+ else if (strcasecmp(qlop_mode, QLA2XXX_OP_MODE_STR_DUAL) == 0)
+ ql2x_op_mode = QLA2XXX_OP_MODE_DUAL;
else
return false;
@@ -7278,9 +7263,9 @@ int __init qlt_init(void)
{
int ret;
- if (!qlt_parse_ini_mode()) {
+ if (!qlt_parse_operating_mode()) {
ql_log(ql_log_fatal, NULL, 0xe06b,
- "qlt_parse_ini_mode() failed\n");
+ "qlt_parse_operating_mode() failed\n");
return -EINVAL;
}
@@ -7309,7 +7294,7 @@ int __init qlt_init(void)
/*
* Return 1 to signal that initiator-mode is being disabled
*/
- return (ql2x_ini_mode == QLA2XXX_INI_MODE_DISABLED) ? 1 : 0;
+ return (ql2x_op_mode == QLA2XXX_OP_MODE_TARGET) ? 1 : 0;
out_plogi_cachep:
kmem_cache_destroy(qla_tgt_plogi_cachep);
@@ -42,15 +42,15 @@
*/
#define QLA2XXX_INITIATOR_MAGIC 57222
-#define QLA2XXX_INI_MODE_STR_EXCLUSIVE "exclusive"
-#define QLA2XXX_INI_MODE_STR_DISABLED "disabled"
-#define QLA2XXX_INI_MODE_STR_ENABLED "enabled"
-#define QLA2XXX_INI_MODE_STR_DUAL "dual"
+#define QLA2XXX_OP_MODE_STR_EXCLUSIVE "exclusive"
+#define QLA2XXX_OP_MODE_STR_TARGET "tgt_mode"
+#define QLA2XXX_OP_MODE_STR_INITIATOR "ini_mode"
+#define QLA2XXX_OP_MODE_STR_DUAL "dual_mode"
-#define QLA2XXX_INI_MODE_EXCLUSIVE 0
-#define QLA2XXX_INI_MODE_DISABLED 1
-#define QLA2XXX_INI_MODE_ENABLED 2
-#define QLA2XXX_INI_MODE_DUAL 3
+#define QLA2XXX_OP_MODE_EXCLUSIVE 0
+#define QLA2XXX_OP_MODE_TARGET 1
+#define QLA2XXX_OP_MODE_INITIATOR 2
+#define QLA2XXX_OP_MODE_DUAL 3
#define QLA2XXX_COMMAND_COUNT_INIT 250
#define QLA2XXX_IMMED_NOTIFY_COUNT_INIT 250
@@ -1111,9 +1111,9 @@ extern int qlt_lport_register(void *, u64, u64, u64,
* is not set. Right now, ha value is ignored.
*/
#define QLA_TGT_MODE_ENABLED() \
- ((ql2x_ini_mode != QLA2XXX_INI_MODE_ENABLED) || \
- (ql2x_ini_mode == QLA2XXX_INI_MODE_DUAL))
-extern int ql2x_ini_mode;
+ (ql2x_op_mode != QLA2XXX_OP_MODE_INITIATOR)
+
+extern int ql2x_op_mode;
static inline bool qla_tgt_mode_enabled(struct scsi_qla_host *ha)
{