summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/lib/libdtrace/common/fc.d182
-rw-r--r--usr/src/lib/libdtrace/common/scsi.d43
-rw-r--r--usr/src/uts/common/dtrace/sdt_subr.c91
-rw-r--r--usr/src/uts/common/io/comstar/port/fct/discovery.c67
-rw-r--r--usr/src/uts/common/io/comstar/port/fct/fct.c143
-rw-r--r--usr/src/uts/common/io/comstar/port/qlt/qlt.c129
-rw-r--r--usr/src/uts/common/sys/fct.h5
-rw-r--r--usr/src/uts/common/sys/fct_defines.h7
-rw-r--r--usr/src/uts/common/sys/sdt.h24
9 files changed, 568 insertions, 123 deletions
diff --git a/usr/src/lib/libdtrace/common/fc.d b/usr/src/lib/libdtrace/common/fc.d
new file mode 100644
index 0000000000..afe1f2baa7
--- /dev/null
+++ b/usr/src/lib/libdtrace/common/fc.d
@@ -0,0 +1,182 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma D depends_on library net.d
+#pragma D depends_on library scsi.d
+#pragma D depends_on module genunix
+
+/*
+ * FC port information.
+ */
+typedef struct fc_port_info {
+ string fcp_node_wwn; /* node WWN */
+ string fcp_sym_node_name; /* node symbolic name */
+ string fcp_sym_port_name; /* port symbolic name */
+ uint32_t fcp_port_hard_address; /* port hard address */
+} fc_port_info_t;
+
+/*
+ * FC transfer info (somewhat analogous to iscsiinfo_t)
+ * Represents data transfer details.
+ */
+typedef struct fc_xferinfo {
+ uint32_t fcx_len;
+ uint32_t fcx_offset;
+ uint16_t fcx_flags; /* db_flags as defined in sys/stmf.h */
+} fc_xferinfo_t;
+
+/*
+ * conninfo translators
+ */
+
+/*
+ * Translator for conninfo, translating from the local port.
+ */
+#pragma D binding "1.5" translator
+translator conninfo_t < fct_local_port_t *P > {
+ ci_local = P->port_pwwn_str[0] ?
+ P->port_pwwn_str : "<unknown>";
+ ci_remote = "<unknown>";
+ ci_protocol = "fc";
+};
+
+/*
+ * Translator for conninfo, translating from the local port implementation.
+ */
+#pragma D binding "1.5" translator
+translator conninfo_t < fct_i_local_port_t *P > {
+ ci_local = P->iport_port->port_pwwn_str[0] ?
+ P->iport_port->port_pwwn_str : "<unknown>";
+ ci_remote = "<unknown>";
+ ci_protocol = "fc";
+};
+
+/*
+ * Translator for conninfo, translating from fct cmd struct.
+ */
+#pragma D binding "1.5" translator
+translator conninfo_t < fct_cmd_t *C > {
+ ci_local = (C->cmd_port ?
+ (C->cmd_port->port_pwwn_str[0] ?
+ C->cmd_port->port_pwwn_str : "<unknown>") :
+ "<unknown>");
+
+ ci_remote = (C->cmd_rp ?
+ (C->cmd_rp->rp_pwwn_str[0] ?
+ C->cmd_rp->rp_pwwn_str : "<unknown>") :
+ "<unknown>");
+
+ ci_protocol = "fc";
+};
+
+
+/*
+ * fc_port_info_t translators.
+ */
+
+/*
+ * Translator for fc_port_info_t, translating from the local port.
+ */
+#pragma D binding "1.5" translator
+translator fc_port_info_t < fct_local_port_t *P > {
+ /* node WWN */
+ fcp_node_wwn = P->port_nwwn_str[0] ?
+ P->port_nwwn_str : "<unknown>";
+
+ /* node symbolic name */
+ fcp_sym_node_name = P->port_sym_node_name ?
+ P->port_sym_node_name : `utsname.nodename;
+
+ /* port symbolic name */
+ fcp_sym_port_name = P->port_sym_port_name ?
+ P->port_sym_port_name : "<unknown>";
+
+ /* port hard address */
+ fcp_port_hard_address = P->port_hard_address;
+};
+
+
+/*
+ * Translator for fc_port_info_t, translating from the local port impl.
+ */
+#pragma D binding "1.5" translator
+translator fc_port_info_t < fct_i_local_port_t *P > {
+ /* node WWN */
+
+ fcp_node_wwn = (P->iport_port ?
+ (P->iport_port->port_nwwn_str[0] ?
+ P->iport_port->port_nwwn_str :
+ "<unknown>") :
+ "<bad iport_port ptr>");
+
+ fcp_sym_node_name =
+ (P->iport_port ?
+ (P->iport_port->port_sym_node_name ?
+ P->iport_port->port_sym_node_name : "<unknown>") :
+ "<bad iport_port ptr>");
+
+ fcp_sym_port_name =
+ (P->iport_port ?
+ (P->iport_port->port_sym_port_name ?
+ P->iport_port->port_sym_port_name : "<unknown>") :
+ "<bad iport_port ptr>");
+
+ fcp_port_hard_address =
+ (P->iport_port ?
+ P->iport_port->port_hard_address : 0);
+};
+
+/*
+ * Translator for fc_port_info, translating from the remote port impl
+ */
+#pragma D binding "1.5" translator
+translator fc_port_info_t < fct_i_remote_port_t *P > {
+
+ /* node WWN */
+ fcp_node_wwn = P->irp_rp ?
+ (P->irp_rp->rp_nwwn_str[0] ?
+ P->irp_rp->rp_nwwn_str : "<unknown>") :
+ "<unknown>";
+
+ /* node symbolic name */
+ fcp_sym_node_name = P->irp_snn ? P->irp_snn : "<unknown>";
+
+ /* port symbolic name */
+ fcp_sym_port_name = P->irp_spn ? P->irp_spn : "<unknown>";
+
+ /* port hard address */
+ fcp_port_hard_address = P->irp_rp ? P->irp_rp->rp_id : 0;
+};
+
+/*
+ * Translator for fc_xferinfo, translating from stmf_data_buf_t.
+ */
+#pragma D binding "1.5" translator
+translator fc_xferinfo_t < stmf_data_buf_t *B > {
+ fcx_len = B->db_data_size;
+ fcx_offset = B->db_relative_offset;
+ fcx_flags = B->db_flags;
+};
diff --git a/usr/src/lib/libdtrace/common/scsi.d b/usr/src/lib/libdtrace/common/scsi.d
new file mode 100644
index 0000000000..29ccdeb237
--- /dev/null
+++ b/usr/src/lib/libdtrace/common/scsi.d
@@ -0,0 +1,43 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * The scsicmd_t structure should be used by providers
+ * to represent a SCSI command block (cdb).
+ */
+typedef struct scsicmd {
+ uint64_t ic_len; /* CDB length */
+ uint8_t *ic_cdb; /* CDB data */
+} scsicmd_t;
+
+/*
+ * Translator for scsicmd_t, translating from a scsi_task_t
+ */
+#pragma D binding "1.5" translator
+translator scsicmd_t < scsi_task_t *T > {
+ ic_len = T->task_cdb_length;
+ ic_cdb = T->task_cdb;
+};
diff --git a/usr/src/uts/common/dtrace/sdt_subr.c b/usr/src/uts/common/dtrace/sdt_subr.c
index 20aabcc208..c80e7cc6d4 100644
--- a/usr/src/uts/common/dtrace/sdt_subr.c
+++ b/usr/src/uts/common/dtrace/sdt_subr.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/sdt_impl.h>
static dtrace_pattr_t vtrace_attr = {
@@ -43,6 +41,14 @@ static dtrace_pattr_t info_attr = {
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
};
+static dtrace_pattr_t fc_attr = {
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+};
+
static dtrace_pattr_t fpu_attr = {
{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
@@ -97,6 +103,7 @@ sdt_provider_t sdt_providers[] = {
{ "nfsv3", "__nfsv3_", &stab_attr, 0 },
{ "nfsv4", "__nfsv4_", &stab_attr, 0 },
{ "xpv", "__xpv_", &xpv_attr, 0 },
+ { "fc", "__fc_", &fc_attr, 0 },
{ "sysevent", "__sysevent_", &stab_attr, 0 },
{ "sdt", NULL, &sdt_attr, 0 },
{ NULL }
@@ -864,6 +871,84 @@ sdt_argdesc_t sdt_args[] = {
{ "xpv", "setvcpucontext-end", 0, 0, "int" },
{ "xpv", "setvcpucontext-start", 0, 0, "domid_t" },
{ "xpv", "setvcpucontext-start", 1, 1, "vcpu_guest_context_t *" },
+
+ { "fc", "link-up", 0, 0, "fct_i_local_port_t *", "conninfo_t *" },
+ { "fc", "link-down", 0, 0, "fct_i_local_port_t *", "conninfo_t *" },
+ { "fc", "fabric-login-start", 0, 0, "fct_i_local_port_t *",
+ "conninfo_t *" },
+ { "fc", "fabric-login-start", 1, 0, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "fabric-login-end", 0, 0, "fct_i_local_port_t *",
+ "conninfo_t *" },
+ { "fc", "fabric-login-end", 1, 0, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-login-start", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "rport-login-start", 1, 1, "fct_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-login-start", 2, 2, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-login-start", 3, 3, "int", "int" },
+ { "fc", "rport-login-end", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "rport-login-end", 1, 1, "fct_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-login-end", 2, 2, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-login-end", 3, 3, "int", "int" },
+ { "fc", "rport-login-end", 4, 4, "int", "int" },
+ { "fc", "rport-logout-start", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "rport-logout-start", 1, 1, "fct_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-logout-start", 2, 2, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-logout-start", 3, 3, "int", "int" },
+ { "fc", "rport-logout-end", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "rport-logout-end", 1, 1, "fct_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-logout-end", 2, 2, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "rport-logout-end", 3, 3, "int", "int" },
+ { "fc", "scsi-command", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "scsi-command", 1, 1, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "scsi-command", 2, 2, "scsi_task_t *",
+ "scsicmd_t *" },
+ { "fc", "scsi-command", 3, 3, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "scsi-response", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "scsi-response", 1, 1, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "scsi-response", 2, 2, "scsi_task_t *",
+ "scsicmd_t *" },
+ { "fc", "scsi-response", 3, 3, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "xfer-start", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "xfer-start", 1, 1, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "xfer-start", 2, 2, "scsi_task_t *",
+ "scsicmd_t *" },
+ { "fc", "xfer-start", 3, 3, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "xfer-start", 4, 4, "stmf_data_buf_t *",
+ "fc_xferinfo_t *" },
+ { "fc", "xfer-done", 0, 0, "fct_cmd_t *",
+ "conninfo_t *" },
+ { "fc", "xfer-done", 1, 1, "fct_i_local_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "xfer-done", 2, 2, "scsi_task_t *",
+ "scsicmd_t *" },
+ { "fc", "xfer-done", 3, 3, "fct_i_remote_port_t *",
+ "fc_port_info_t *" },
+ { "fc", "xfer-done", 4, 4, "stmf_data_buf_t *",
+ "fc_xferinfo_t *" },
+
+
{ NULL }
};
diff --git a/usr/src/uts/common/io/comstar/port/fct/discovery.c b/usr/src/uts/common/io/comstar/port/fct/discovery.c
index 9db1776f39..13ad485bfc 100644
--- a/usr/src/uts/common/io/comstar/port/fct/discovery.c
+++ b/usr/src/uts/common/io/comstar/port/fct/discovery.c
@@ -34,6 +34,7 @@
#include <sys/byteorder.h>
#include <sys/varargs.h>
#include <sys/atomic.h>
+#include <sys/sdt.h>
#include <stmf.h>
#include <stmf_ioctl.h>
@@ -267,8 +268,16 @@ fct_handle_local_port_event(fct_i_local_port_t *iport)
mutex_exit(&iport->iport_worker_lock);
rw_enter(&iport->iport_lock, RW_WRITER);
+
+ if (in->event_type == FCT_EVENT_LINK_UP) {
+ DTRACE_FC_1(link__up, fct_i_local_port_t, iport);
+ } else if (in->event_type == FCT_EVENT_LINK_DOWN) {
+ DTRACE_FC_1(link__down, fct_i_local_port_t, iport);
+ }
+
/* Calculate new state */
new_state = iport->iport_link_state;
+
if (in->event_type == FCT_EVENT_LINK_DOWN) {
new_state = PORT_STATE_LINK_DOWN_CLEANING;
} else if (in->event_type == FCT_EVENT_LINK_UP) {
@@ -404,6 +413,8 @@ fct_do_flogi(fct_i_local_port_t *iport)
int force_link_down = 0;
int do_retry = 0;
+ DTRACE_FC_1(fabric__login__start, fct_i_local_port_t, iport);
+
bzero(&fx, sizeof (fx));
fx.fx_op = ELS_OP_FLOGI;
if (iport->iport_login_retry == 0) {
@@ -422,14 +433,14 @@ fct_do_flogi(fct_i_local_port_t *iport)
mutex_enter(&iport->iport_worker_lock);
if (IPORT_FLOGI_DONE(iport)) {
/* The unsolicited path finished it. */
- return;
+ goto done;
}
if (ret == FCT_NOT_FOUND) {
if (iport->iport_link_info.port_topology &
PORT_TOPOLOGY_PRIVATE_LOOP) {
/* This is a private loop. There is no switch. */
iport->iport_link_info.port_no_fct_flogi = 1;
- return;
+ goto done;
}
/*
* This is really an error. This means we cannot init the
@@ -453,7 +464,7 @@ fct_do_flogi(fct_i_local_port_t *iport)
iport->iport_login_retry++;
if (iport->iport_login_retry >= 5)
force_link_down = 1;
- return;
+ goto done;
}
if (force_link_down) {
@@ -464,7 +475,7 @@ fct_do_flogi(fct_i_local_port_t *iport)
mutex_exit(&iport->iport_worker_lock);
fct_handle_event(iport->iport_port, FCT_EVENT_LINK_DOWN, 0, 0);
mutex_enter(&iport->iport_worker_lock);
- return;
+ goto done;
}
/* FLOGI succeeded. Update local port state */
@@ -477,6 +488,10 @@ fct_do_flogi(fct_i_local_port_t *iport)
iport->iport_link_info.portid = fx.fx_did;
}
iport->iport_link_info.port_fct_flogi_done = 1;
+
+done:
+ DTRACE_FC_1(fabric__login__end,
+ fct_i_local_port_t, iport);
}
/*
@@ -1380,6 +1395,12 @@ fct_process_plogi(fct_i_cmd_t *icmd)
clock_t end_time;
char info[160];
+ DTRACE_FC_4(rport__login__start,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd_type != FCT_CMD_RCVD_ELS));
+
/* Drain I/Os */
if ((irp->irp_nonfcp_xchg_count + irp->irp_fcp_xchg_count) > 1) {
/* Trigger cleanup if necessary */
@@ -1439,6 +1460,11 @@ fct_process_plogi(fct_i_cmd_t *icmd)
bcopy(p+28, rp->rp_nwwn, 8);
bcopy(port->port_pwwn, p+20, 8);
bcopy(port->port_nwwn, p+28, 8);
+ fct_wwn_to_str(rp->rp_pwwn_str, rp->rp_pwwn);
+ fct_wwn_to_str(rp->rp_nwwn_str, rp->rp_nwwn);
+ fct_wwn_to_str(port->port_pwwn_str, port->port_pwwn);
+ fct_wwn_to_str(port->port_nwwn_str, port->port_nwwn);
+
stmf_wwn_to_devid_desc((scsi_devid_desc_t *)irp->irp_id,
rp->rp_pwwn, PROTOCOL_FIBRE_CHANNEL);
}
@@ -1498,12 +1524,26 @@ fct_process_plogi(fct_i_cmd_t *icmd)
irp->irp_deregister_timer = 0;
}
if (icmd_flags & ICMD_IMPLICIT) {
+ DTRACE_FC_5(rport__login__end,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd_type != FCT_CMD_RCVD_ELS),
+ int, FCT_SUCCESS);
+
p = els->els_resp_payload;
p[0] = ELS_OP_ACC;
cmd->cmd_comp_status = FCT_SUCCESS;
fct_send_cmd_done(cmd, FCT_SUCCESS, FCT_IOF_FCA_DONE);
}
} else {
+ DTRACE_FC_5(rport__login__end,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd_type != FCT_CMD_RCVD_ELS),
+ int, ret);
+
fct_queue_cmd_for_termination(cmd, ret);
}
@@ -1685,6 +1725,12 @@ fct_process_logo(fct_i_cmd_t *icmd)
char info[160];
clock_t end_time;
+ DTRACE_FC_4(rport__logout__start,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd->cmd_type != FCT_CMD_RCVD_ELS));
+
/* Drain I/Os */
if ((irp->irp_nonfcp_xchg_count + irp->irp_fcp_xchg_count) > 1) {
/* Trigger cleanup if necessary */
@@ -1752,7 +1798,20 @@ fct_process_logo(fct_i_cmd_t *icmd)
if (ret != FCT_SUCCESS) {
fct_queue_cmd_for_termination(cmd, ret);
}
+
+ DTRACE_FC_4(rport__logout__end,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd->cmd_type != FCT_CMD_RCVD_ELS));
+
} else {
+ DTRACE_FC_4(rport__logout__end,
+ fct_cmd_t, cmd,
+ fct_local_port_t, port,
+ fct_i_remote_port_t, irp,
+ int, (cmd->cmd_type != FCT_CMD_RCVD_ELS));
+
fct_cmd_free(cmd);
}
diff --git a/usr/src/uts/common/io/comstar/port/fct/fct.c b/usr/src/uts/common/io/comstar/port/fct/fct.c
index 0bc0285a0d..67a10b31cd 100644
--- a/usr/src/uts/common/io/comstar/port/fct/fct.c
+++ b/usr/src/uts/common/io/comstar/port/fct/fct.c
@@ -34,6 +34,7 @@
#include <sys/byteorder.h>
#include <sys/varargs.h>
#include <sys/atomic.h>
+#include <sys/sdt.h>
#include <stmf.h>
#include <stmf_ioctl.h>
@@ -871,14 +872,14 @@ fct_alloc(fct_struct_id_t struct_id, int additional_size, int flags)
additional_size = (additional_size + 7) & (~7);
fct_size = fct_sizes[struct_id].shared +
- fct_sizes[struct_id].fw_private +
- fct_sizes[struct_id].struct_specific + additional_size;
+ fct_sizes[struct_id].fw_private +
+ fct_sizes[struct_id].struct_specific + additional_size;
if (struct_id == FCT_STRUCT_LOCAL_PORT) {
stmf_local_port_t *lport;
lport = (stmf_local_port_t *)stmf_alloc(
- STMF_STRUCT_STMF_LOCAL_PORT, fct_size, flags);
+ STMF_STRUCT_STMF_LOCAL_PORT, fct_size, flags);
if (lport) {
sh = (__fct_t *)lport->lport_port_private;
sh->ss = lport;
@@ -889,7 +890,7 @@ fct_alloc(fct_struct_id_t struct_id, int additional_size, int flags)
stmf_dbuf_store_t *ds;
ds = (stmf_dbuf_store_t *)stmf_alloc(STMF_STRUCT_DBUF_STORE,
- fct_size, flags);
+ fct_size, flags);
if (ds) {
sh = (__fct_t *)ds->ds_port_private;
sh->ss = ds;
@@ -969,7 +970,7 @@ fct_alloc_dbuf(scsi_task_t *task, uint32_t size, uint32_t *pminsize,
uint32_t flags)
{
fct_local_port_t *port = (fct_local_port_t *)
- task->task_lport->lport_port_private;
+ task->task_lport->lport_port_private;
return (port->port_fds->fds_alloc_data_buf(port, size,
pminsize, flags));
@@ -1004,7 +1005,7 @@ fct_register_local_port(fct_local_port_t *port)
iport->iport_alias = iport->iport_alias_mem;
} else {
iport->iport_alias =
- (char *)kmem_zalloc(l+1, KM_SLEEP);
+ (char *)kmem_zalloc(l+1, KM_SLEEP);
}
(void) strcpy(iport->iport_alias, port->port_default_alias);
} else {
@@ -1013,7 +1014,7 @@ fct_register_local_port(fct_local_port_t *port)
stmf_wwn_to_devid_desc((scsi_devid_desc_t *)iport->iport_id,
port->port_pwwn, PROTOCOL_FIBRE_CHANNEL);
(void) snprintf(taskq_name, 24, "stmf_fct_taskq_%d",
- atomic_add_32_nv(&taskq_cntr, 1));
+ atomic_add_32_nv(&taskq_cntr, 1));
taskq_name[23] = 0;
if ((iport->iport_worker_taskq = ddi_taskq_create(NULL,
taskq_name, 1, TASKQ_DEFAULTPRI, 0)) == NULL) {
@@ -1027,19 +1028,19 @@ fct_register_local_port(fct_local_port_t *port)
iport->iport_rp_slots = (fct_i_remote_port_t **)kmem_zalloc(
port->port_max_logins * sizeof (fct_i_remote_port_t *), KM_SLEEP);
iport->iport_rp_tb = kmem_zalloc(rportid_table_size *
- sizeof (fct_i_remote_port_t *), KM_SLEEP);
+ sizeof (fct_i_remote_port_t *), KM_SLEEP);
/* fct_cmds for SCSI traffic */
iport->iport_total_alloced_ncmds = 0;
iport->iport_cached_ncmds = 0;
port->port_fca_fcp_cmd_size =
- (port->port_fca_fcp_cmd_size + 7) & ~7;
+ (port->port_fca_fcp_cmd_size + 7) & ~7;
iport->iport_cached_cmdlist = NULL;
mutex_init(&iport->iport_cached_cmd_lock, NULL, MUTEX_DRIVER, NULL);
/* Initialize cmd slots */
iport->iport_cmd_slots = (fct_cmd_slot_t *)kmem_zalloc(
- port->port_max_xchges * sizeof (fct_cmd_slot_t), KM_SLEEP);
+ port->port_max_xchges * sizeof (fct_cmd_slot_t), KM_SLEEP);
iport->iport_next_free_slot = 0;
for (i = 0; i < port->port_max_xchges; ) {
slot = &iport->iport_cmd_slots[i];
@@ -1050,16 +1051,16 @@ fct_register_local_port(fct_local_port_t *port)
iport->iport_nslots_free = port->port_max_xchges;
iport->iport_task_green_limit =
- (port->port_max_xchges * FCT_TASK_GREEN_LIMIT) / 100;
+ (port->port_max_xchges * FCT_TASK_GREEN_LIMIT) / 100;
iport->iport_task_yellow_limit =
- (port->port_max_xchges * FCT_TASK_YELLOW_LIMIT) / 100;
+ (port->port_max_xchges * FCT_TASK_YELLOW_LIMIT) / 100;
iport->iport_task_red_limit =
- (port->port_max_xchges * FCT_TASK_RED_LIMIT) / 100;
+ (port->port_max_xchges * FCT_TASK_RED_LIMIT) / 100;
/* Start worker thread */
atomic_and_32(&iport->iport_flags, ~IPORT_TERMINATE_WORKER);
(void) ddi_taskq_dispatch(iport->iport_worker_taskq,
- fct_port_worker, port, DDI_SLEEP);
+ fct_port_worker, port, DDI_SLEEP);
/* Wait for taskq to start */
while ((iport->iport_flags & IPORT_WORKER_RUNNING) == 0) {
delay(1);
@@ -1108,7 +1109,7 @@ fct_regport_fail1:;
ddi_taskq_destroy(iport->iport_worker_taskq);
if (iport->iport_rp_tb) {
kmem_free(iport->iport_rp_tb, rportid_table_size *
- sizeof (fct_i_remote_port_t *));
+ sizeof (fct_i_remote_port_t *));
}
return (FCT_FAILURE);
}
@@ -1123,7 +1124,7 @@ fct_deregister_local_port(fct_local_port_t *port)
iport = (fct_i_local_port_t *)port->port_fct_private;
if ((iport->iport_state != FCT_STATE_OFFLINE) ||
- iport->iport_state_not_acked) {
+ iport->iport_state_not_acked) {
return (FCT_FAILURE);
}
@@ -1133,14 +1134,14 @@ fct_deregister_local_port(fct_local_port_t *port)
cv_broadcast(&iport->iport_worker_cv);
for (ndx = 0; ndx < 100; ndx++) {
if ((iport->iport_flags & IPORT_WORKER_RUNNING)
- == 0) {
+ == 0) {
break;
}
delay(drv_usectohz(10000));
}
if (ndx == 100) {
atomic_and_32(&iport->iport_flags,
- ~IPORT_TERMINATE_WORKER);
+ ~IPORT_TERMINATE_WORKER);
return (FCT_WORKER_STUCK);
}
}
@@ -1168,16 +1169,16 @@ fct_deregister_local_port(fct_local_port_t *port)
}
mutex_destroy(&iport->iport_cached_cmd_lock);
kmem_free(iport->iport_cmd_slots, port->port_max_xchges *
- sizeof (fct_cmd_slot_t));
+ sizeof (fct_cmd_slot_t));
kmem_free(iport->iport_rp_slots, port->port_max_logins *
- sizeof (fct_i_remote_port_t *));
+ sizeof (fct_i_remote_port_t *));
rw_destroy(&iport->iport_lock);
cv_destroy(&iport->iport_worker_cv);
mutex_destroy(&iport->iport_worker_lock);
ddi_taskq_destroy(iport->iport_worker_taskq);
if (iport->iport_rp_tb) {
kmem_free(iport->iport_rp_tb, rportid_table_size *
- sizeof (fct_i_remote_port_t *));
+ sizeof (fct_i_remote_port_t *));
}
fct_log_local_port_event(port, ESC_SUNFC_PORT_DETACH);
@@ -1187,7 +1188,7 @@ fct_deregport_fail1:;
/* Restart the worker */
atomic_and_32(&iport->iport_flags, ~IPORT_TERMINATE_WORKER);
(void) ddi_taskq_dispatch(iport->iport_worker_taskq,
- fct_port_worker, port, DDI_SLEEP);
+ fct_port_worker, port, DDI_SLEEP);
/* Wait for taskq to start */
while ((iport->iport_flags & IPORT_WORKER_RUNNING) == 0) {
delay(1);
@@ -1289,7 +1290,7 @@ fct_deque_rp(fct_i_local_port_t *iport, fct_i_remote_port_t *irp)
if (irp_next) {
if (irp_last == NULL) {
iport->iport_rp_tb[hash_key] =
- irp->irp_next;
+ irp->irp_next;
} else {
irp_last->irp_next = irp->irp_next;
}
@@ -1400,7 +1401,7 @@ fct_rehash(fct_i_local_port_t *iport)
int i;
iport_rp_tb_new = kmem_zalloc(rportid_table_size *
- sizeof (fct_i_remote_port_t *), KM_SLEEP);
+ sizeof (fct_i_remote_port_t *), KM_SLEEP);
rw_enter(&iport->iport_lock, RW_WRITER);
/* reconstruct the hash table */
iport_rp_tb_tmp = iport->iport_rp_tb;
@@ -1416,7 +1417,7 @@ fct_rehash(fct_i_local_port_t *iport)
}
rw_exit(&iport->iport_lock);
kmem_free(iport_rp_tb_tmp, rportid_table_size *
- sizeof (fct_i_remote_port_t *));
+ sizeof (fct_i_remote_port_t *));
}
@@ -1449,7 +1450,7 @@ fct_scsi_task_alloc(fct_local_port_t *port, uint16_t rp_handle,
fct_cmd_t *cmd;
fct_i_cmd_t *icmd;
fct_i_local_port_t *iport =
- (fct_i_local_port_t *)port->port_fct_private;
+ (fct_i_local_port_t *)port->port_fct_private;
fct_i_remote_port_t *irp;
scsi_task_t *task;
fct_remote_port_t *rp;
@@ -1459,7 +1460,7 @@ fct_scsi_task_alloc(fct_local_port_t *port, uint16_t rp_handle,
if ((iport->iport_link_state & S_LINK_ONLINE) == 0) {
rw_exit(&iport->iport_lock);
stmf_trace(iport->iport_alias, "cmd alloc called while the port"
- " was offline");
+ " was offline");
return (NULL);
}
@@ -1502,12 +1503,12 @@ fct_scsi_task_alloc(fct_local_port_t *port, uint16_t rp_handle,
mutex_exit(&iport->iport_cached_cmd_lock);
if (icmd == NULL) {
cmd = (fct_cmd_t *)fct_alloc(FCT_STRUCT_CMD_FCP_XCHG,
- port->port_fca_fcp_cmd_size, 0);
+ port->port_fca_fcp_cmd_size, 0);
if (cmd == NULL) {
rw_exit(&irp->irp_lock);
rw_exit(&iport->iport_lock);
stmf_trace(iport->iport_alias, "Ran out of "
- "memory, port=%p", port);
+ "memory, port=%p", port);
return (NULL);
}
@@ -1546,7 +1547,7 @@ fct_scsi_task_alloc(fct_local_port_t *port, uint16_t rp_handle,
icmd->icmd_start_time = ddi_get_lbolt();
cmd->cmd_specific = stmf_task_alloc(port->port_lport, irp->irp_session,
- lun, cdb_length, task_ext);
+ lun, cdb_length, task_ext);
if ((task = (scsi_task_t *)cmd->cmd_specific) != NULL) {
task->task_port_private = cmd;
return (cmd);
@@ -1572,14 +1573,20 @@ fct_post_rcvd_cmd(fct_cmd_t *cmd, stmf_data_buf_t *dbuf)
if (cmd->cmd_type == FCT_CMD_FCP_XCHG) {
fct_i_cmd_t *icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
fct_i_local_port_t *iport =
- (fct_i_local_port_t *)cmd->cmd_port->port_fct_private;
+ (fct_i_local_port_t *)cmd->cmd_port->port_fct_private;
fct_i_remote_port_t *irp =
- (fct_i_remote_port_t *)cmd->cmd_rp->rp_fct_private;
+ (fct_i_remote_port_t *)cmd->cmd_rp->rp_fct_private;
scsi_task_t *task = (scsi_task_t *)cmd->cmd_specific;
uint16_t irp_task = irp->irp_fcp_xchg_count;
uint32_t load = iport->iport_total_alloced_ncmds -
- iport->iport_cached_ncmds;
+ iport->iport_cached_ncmds;
+
+ DTRACE_FC_4(scsi__command,
+ fct_cmd_t, cmd,
+ fct_i_local_port_t, iport,
+ scsi_task_t, task,
+ fct_i_remote_port_t, irp);
if (load >= iport->iport_task_green_limit) {
if ((load < iport->iport_task_yellow_limit &&
@@ -1589,7 +1596,7 @@ fct_post_rcvd_cmd(fct_cmd_t *cmd, stmf_data_buf_t *dbuf)
irp_task >= 1) ||
(load >= iport->iport_task_red_limit))
task->task_additional_flags |=
- TASK_AF_PORT_LOAD_HIGH;
+ TASK_AF_PORT_LOAD_HIGH;
}
stmf_post_task((scsi_task_t *)cmd->cmd_specific, dbuf);
atomic_and_32(&icmd->icmd_flags, ~ICMD_IN_TRANSITION);
@@ -1621,7 +1628,7 @@ fct_post_implicit_logo(fct_cmd_t *cmd)
{
fct_local_port_t *port = cmd->cmd_port;
fct_i_local_port_t *iport =
- (fct_i_local_port_t *)port->port_fct_private;
+ (fct_i_local_port_t *)port->port_fct_private;
fct_i_cmd_t *icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
fct_remote_port_t *rp = cmd->cmd_rp;
fct_i_remote_port_t *irp = (fct_i_remote_port_t *)rp->rp_fct_private;
@@ -1673,7 +1680,7 @@ fct_alloc_cmd_slot(fct_i_local_port_t *iport, fct_cmd_t *cmd)
iport->iport_cmd_slots[cmd_slot].slot_cmd = icmd;
cmd->cmd_handle = (uint32_t)cmd_slot | 0x80000000 |
(((uint32_t)(iport->iport_cmd_slots[cmd_slot].slot_uniq_cntr))
- << 24);
+ << 24);
return (cmd_slot);
}
@@ -1690,7 +1697,8 @@ fct_post_to_discovery_queue(fct_i_local_port_t *iport,
if (icmd) {
icmd->icmd_next = NULL;
for (p = &irp->irp_els_list; *p != NULL;
- p = &((*p)->icmd_next));
+ p = &((*p)->icmd_next))
+ ;
*p = icmd;
atomic_or_32(&icmd->icmd_flags, ICMD_IN_IRP_QUEUE);
}
@@ -1728,6 +1736,13 @@ fct_xfer_scsi_data(scsi_task_t *task, stmf_data_buf_t *dbuf, uint32_t ioflags)
{
fct_cmd_t *cmd = (fct_cmd_t *)task->task_port_private;
+ DTRACE_FC_5(xfer__start,
+ fct_cmd_t, cmd,
+ fct_i_local_port_t, cmd->cmd_port->port_fct_private,
+ scsi_task_t, task,
+ fct_i_remote_port_t, cmd->cmd_rp->rp_fct_private,
+ stmf_data_buf_t, dbuf);
+
return (cmd->cmd_port->port_xfer_scsi_data(cmd, dbuf, ioflags));
}
@@ -1738,6 +1753,13 @@ fct_scsi_data_xfer_done(fct_cmd_t *cmd, stmf_data_buf_t *dbuf, uint32_t ioflags)
uint32_t old, new;
uint32_t iof = 0;
+ DTRACE_FC_5(xfer__done,
+ fct_cmd_t, cmd,
+ fct_i_local_port_t, cmd->cmd_port->port_fct_private,
+ scsi_task_t, ((scsi_task_t *)cmd->cmd_specific),
+ fct_i_remote_port_t, cmd->cmd_rp->rp_fct_private,
+ stmf_data_buf_t, dbuf);
+
if (ioflags & FCT_IOF_FCA_DONE) {
do {
old = new = icmd->icmd_flags;
@@ -1760,6 +1782,14 @@ fct_send_scsi_status(scsi_task_t *task, uint32_t ioflags)
{
fct_cmd_t *cmd = (fct_cmd_t *)task->task_port_private;
+ DTRACE_FC_4(scsi__response,
+ fct_cmd_t, cmd,
+ fct_i_local_port_t,
+ (fct_i_local_port_t *)cmd->cmd_port->port_fct_private,
+ scsi_task_t, task,
+ fct_i_remote_port_t,
+ (fct_i_remote_port_t *)cmd->cmd_rp->rp_fct_private);
+
return (cmd->cmd_port->port_send_cmd_response(cmd, ioflags));
}
@@ -1769,7 +1799,7 @@ fct_send_response_done(fct_cmd_t *cmd, fct_status_t s, uint32_t ioflags)
fct_i_cmd_t *icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
fct_local_port_t *port = cmd->cmd_port;
fct_i_local_port_t *iport = (fct_i_local_port_t *)
- port->port_fct_private;
+ port->port_fct_private;
uint32_t old, new;
if ((ioflags & FCT_IOF_FCA_DONE) == 0) {
@@ -1788,7 +1818,7 @@ fct_send_response_done(fct_cmd_t *cmd, fct_status_t s, uint32_t ioflags)
cmd->cmd_comp_status = s;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG) {
stmf_send_status_done((scsi_task_t *)cmd->cmd_specific, s,
- STMF_IOF_LPORT_DONE);
+ STMF_IOF_LPORT_DONE);
return;
}
@@ -1855,7 +1885,7 @@ fct_cmd_free(fct_cmd_t *cmd)
atomic_add_16(&iport->iport_nslots_free, 1);
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
- cmd->cmd_rp->rp_fct_private;
+ cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
atomic_add_16(&irp->irp_fcp_xchg_count, -1);
else
@@ -1867,7 +1897,7 @@ fct_cmd_free(fct_cmd_t *cmd)
/* for implicit cmd, no cmd slot is used */
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
- cmd->cmd_rp->rp_fct_private;
+ cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
atomic_add_16(&irp->irp_fcp_xchg_count, -1);
else
@@ -2396,7 +2426,7 @@ fct_create_solct(fct_local_port_t *port, fct_remote_port_t *query_rp,
ct->ct_resp_payload = (uint8_t *)kmem_zalloc(ct->ct_resp_size,
KM_SLEEP);
ct->ct_req_size = ct->ct_req_alloc_size =
- (21 + namelen + 3) & ~3;
+ (21 + namelen + 3) & ~3;
p = ct->ct_req_payload = (uint8_t *)kmem_zalloc(ct->ct_req_size,
KM_SLEEP);
@@ -2631,7 +2661,7 @@ fct_handle_to_cmd(fct_local_port_t *port, uint32_t fct_handle)
return (NULL);
slot = &((fct_i_local_port_t *)port->port_fct_private)->iport_cmd_slots[
- ndx];
+ ndx];
if ((slot->slot_uniq_cntr | 0x80) != (fct_handle >> 24))
return (NULL);
@@ -2653,7 +2683,7 @@ fct_queue_scsi_task_for_termination(fct_cmd_t *cmd, fct_status_t s)
new = old | ICMD_BEING_ABORTED;
} while (atomic_cas_32(&icmd->icmd_flags, old, new) != old);
stmf_abort(STMF_QUEUE_TASK_ABORT, (scsi_task_t *)cmd->cmd_specific,
- s, NULL);
+ s, NULL);
}
void
@@ -2785,7 +2815,7 @@ fct_queue_cmd_for_termination(fct_cmd_t *cmd, fct_status_t s)
{
fct_local_port_t *port = cmd->cmd_port;
fct_i_local_port_t *iport = (fct_i_local_port_t *)
- port->port_fct_private;
+ port->port_fct_private;
fct_i_cmd_t *icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG) {
@@ -2821,7 +2851,8 @@ fct_q_for_termination_lock_held(fct_i_local_port_t *iport, fct_i_cmd_t *icmd,
icmd->icmd_next = NULL;
for (ppicmd = &(iport->iport_abort_queue); *ppicmd != NULL;
- ppicmd = &((*ppicmd)->icmd_next));
+ ppicmd = &((*ppicmd)->icmd_next))
+ ;
*ppicmd = icmd;
}
@@ -2950,7 +2981,7 @@ fct_handle_port_offline(fct_i_local_port_t *iport)
iport->iport_state = FCT_STATE_OFFLINE;
mutex_exit(&iport->iport_worker_lock);
(void) stmf_ctl(STMF_CMD_LPORT_OFFLINE_COMPLETE,
- iport->iport_port->port_lport, &st);
+ iport->iport_port->port_lport, &st);
mutex_enter(&iport->iport_worker_lock);
return (DISC_ACTION_DELAY_RESCAN);
}
@@ -3066,12 +3097,12 @@ fct_cmd_terminator(fct_i_local_port_t *iport)
return (DISC_ACTION_DELAY_RESCAN);
}
atomic_and_32(&icmd->icmd_flags,
- ~ICMD_FCA_ABORT_CALLED);
+ ~ICMD_FCA_ABORT_CALLED);
} else if ((flags & FCT_IOF_FORCE_FCA_DONE) ||
(abort_ret == FCT_ABORT_SUCCESS) ||
(abort_ret == FCT_NOT_FOUND)) {
atomic_and_32(&icmd->icmd_flags,
- ~ICMD_KNOWN_TO_FCA);
+ ~ICMD_KNOWN_TO_FCA);
}
ret |= DISC_ACTION_DELAY_RESCAN;
} else if (icmd->icmd_flags & ICMD_IMPLICIT) {
@@ -3297,3 +3328,17 @@ fct_value_to_netbuf(uint64_t value, uint8_t *buf, uint8_t nbytes)
buf[idx] = 0xFF & (value >> (8 * (nbytes - idx - 1)));
}
}
+
+/*
+ * from_ptr: ptr to uchar_t array of size WWN_SIZE
+ * to_ptr: char ptr to string of size WWN_SIZE*2+1
+ */
+void
+fct_wwn_to_str(char *to_ptr, const uint8_t *from_ptr)
+{
+ ASSERT(to_ptr != NULL && from_ptr != NULL);
+
+ (void) sprintf(to_ptr, "%02x%02x%02x%02x%02x%02x%02x%02x",
+ from_ptr[0], from_ptr[1], from_ptr[2], from_ptr[3],
+ from_ptr[4], from_ptr[5], from_ptr[6], from_ptr[7]);
+}
diff --git a/usr/src/uts/common/io/comstar/port/qlt/qlt.c b/usr/src/uts/common/io/comstar/port/qlt/qlt.c
index 37a6fa31c1..17b8dcb1df 100644
--- a/usr/src/uts/common/io/comstar/port/qlt/qlt.c
+++ b/usr/src/uts/common/io/comstar/port/qlt/qlt.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -220,7 +220,7 @@ _init(void)
if (ret == 0) {
mutex_init(&qlt_global_lock, 0, MUTEX_DRIVER, 0);
qlt_pp = (stmf_port_provider_t *)stmf_alloc(
- STMF_STRUCT_PORT_PROVIDER, 0, 0);
+ STMF_STRUCT_PORT_PROVIDER, 0, 0);
qlt_pp->pp_portif_rev = PORTIF_REV_1;
qlt_pp->pp_name = qlt_provider_name;
if (stmf_register_port_provider(qlt_pp) != STMF_SUCCESS) {
@@ -295,7 +295,7 @@ qlt_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
}
if ((qlt = (qlt_state_t *)ddi_get_soft_state(qlt_state, instance))
- == NULL) {
+ == NULL) {
goto attach_fail_1;
}
qlt->instance = instance;
@@ -373,12 +373,12 @@ qlt_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
goto attach_fail_8;
(void) snprintf(qlt->qlt_minor_name, sizeof (qlt->qlt_minor_name),
- "qlt%d", instance);
+ "qlt%d", instance);
(void) snprintf(qlt->qlt_port_alias, sizeof (qlt->qlt_port_alias),
"%s,0", qlt->qlt_minor_name);
if (ddi_create_minor_node(dip, qlt->qlt_minor_name, S_IFCHR,
- instance, DDI_NT_STMF_PP, 0) != DDI_SUCCESS) {
+ instance, DDI_NT_STMF_PP, 0) != DDI_SUCCESS) {
goto attach_fail_9;
}
@@ -426,7 +426,7 @@ qlt_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
cmn_err(CE_WARN, "qlt(%d) malformed "
"pci-max-read-request in qlt.conf. Valid values "
"for this HBA are 128/256/512/1024/2048/4096",
- instance);
+ instance);
goto over_max_read_xfer_setting;
}
mr = PCICFG_RD16(qlt, 0x54);
@@ -456,7 +456,7 @@ over_max_read_xfer_setting:;
cmn_err(CE_WARN, "qlt(%d) malformed "
"pcie-max-payload-size in qlt.conf. Valid values "
"for this HBA are 128/256/512/1024",
- instance);
+ instance);
goto over_max_payload_setting;
}
mr = PCICFG_RD16(qlt, 0x54);
@@ -514,7 +514,7 @@ qlt_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
instance = ddi_get_instance(dip);
if ((qlt = (qlt_state_t *)ddi_get_soft_state(qlt_state, instance))
- == NULL) {
+ == NULL) {
return (DDI_FAILURE);
}
@@ -523,7 +523,7 @@ qlt_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
}
if ((qlt->qlt_state != FCT_STATE_OFFLINE) ||
- qlt->qlt_state_not_acked) {
+ qlt->qlt_state_not_acked) {
return (DDI_FAILURE);
}
if (qlt_port_stop((caddr_t)qlt) != FCT_SUCCESS)
@@ -861,13 +861,14 @@ qlt_populate_hba_fru_details(struct fct_local_port *port,
kmem_free(bufp, len);
bufp = NULL;
} else {
- (void) snprintf(port_attrs->option_rom_version,
- FCHBA_OPTION_ROM_VERSION_LEN, "%s",
#ifdef __sparc
- "No Fcode found");
+#define FCHBA_OPTION_ROM_ERR_TEXT "No Fcode found"
#else
- "N/A");
+#define FCHBA_OPTION_ROM_ERR_TEXT "N/A"
#endif
+ (void) snprintf(port_attrs->option_rom_version,
+ FCHBA_OPTION_ROM_VERSION_LEN, "%s",
+ FCHBA_OPTION_ROM_ERR_TEXT);
}
port_attrs->vendor_specific_id = qlt->nvram->subsystem_vendor_id[0] |
qlt->nvram->subsystem_vendor_id[1] << 8;
@@ -918,6 +919,8 @@ qlt_port_start(caddr_t arg)
port->port_fca_abort_timeout = 5 * 1000; /* 5 seconds */
bcopy(qlt->nvram->node_name, port->port_nwwn, 8);
bcopy(qlt->nvram->port_name, port->port_pwwn, 8);
+ fct_wwn_to_str(port->port_nwwn_str, port->port_nwwn);
+ fct_wwn_to_str(port->port_pwwn_str, port->port_pwwn);
port->port_default_alias = qlt->qlt_port_alias;
port->port_pp = qlt_pp;
port->port_fds = fds;
@@ -1044,7 +1047,7 @@ qlt_port_online(qlt_state_t *qlt)
SETELSBIT(elsbmp, ELS_OP_RSCN);
SETELSBIT(elsbmp, ELS_OP_RNID);
(void) ddi_dma_sync(qlt->queue_mem_dma_handle, MBOX_DMA_MEM_OFFSET, 32,
- DDI_DMA_SYNC_FORDEV);
+ DDI_DMA_SYNC_FORDEV);
ret = qlt_raw_mailbox_command(qlt);
REG_WR32(qlt, REG_HCCR, HCCR_CMD_CLEAR_RISC_TO_PCI_INTR);
if (ret != QLT_SUCCESS) {
@@ -1099,7 +1102,7 @@ qlt_port_online(qlt_state_t *qlt)
DMEM_WR16(qlt, icb+0x58, 2); /* Interrupt delay Timer */
DMEM_WR16(qlt, icb+0x5a, 4); /* Login timeout (secs) */
DMEM_WR32(qlt, icb+0x5c, BIT_11 | BIT_5 | BIT_4 |
- BIT_2 | BIT_1 | BIT_0);
+ BIT_2 | BIT_1 | BIT_0);
DMEM_WR32(qlt, icb+0x60, BIT_5);
DMEM_WR32(qlt, icb+0x64, BIT_14 | BIT_8 | BIT_7 | BIT_4);
qlt_dmem_dma_sync(mcp->dbuf, DDI_DMA_SYNC_FORDEV);
@@ -1149,7 +1152,7 @@ qlt_port_offline(qlt_state_t *qlt)
/* Wait to grab the mailboxes */
for (retries = 0; qlt->mbox_io_state != MBOX_STATE_READY;
- retries++) {
+ retries++) {
cv_wait(&qlt->mbox_cv, &qlt->mbox_lock);
if ((retries > 5) ||
(qlt->mbox_io_state == MBOX_STATE_UNKNOWN)) {
@@ -1203,7 +1206,7 @@ link_info_retry:
fc_ret = FCT_FAILURE;
} else {
li->portid = ((uint32_t)(mcp->from_fw[2])) |
- (((uint32_t)(mcp->from_fw[3])) << 16);
+ (((uint32_t)(mcp->from_fw[3])) << 16);
li->port_speed = qlt->link_speed;
switch (mcp->from_fw[6]) {
@@ -1459,7 +1462,7 @@ qlt_ioctl(dev_t dev, int cmd, intptr_t data, int mode,
}
qlt->fw_length01 = intp[3];
qlt->fw_code01 = (uint32_t *)kmem_alloc(iocd->stmf_ibuf_size,
- KM_SLEEP);
+ KM_SLEEP);
bcopy(intp, qlt->fw_code01, iocd->stmf_ibuf_size);
qlt->fw_addr01 = intp[2];
qlt->fw_code02 = &qlt->fw_code01[intp[3]];
@@ -1698,8 +1701,8 @@ qlt_get_req_entries(qlt_state_t *qlt, uint32_t n)
qlt->req_ndx_from_fw = val1;
qlt->req_available = REQUEST_QUEUE_ENTRIES - 1 -
- ((qlt->req_ndx_to_fw - qlt->req_ndx_from_fw) &
- (REQUEST_QUEUE_ENTRIES - 1));
+ ((qlt->req_ndx_to_fw - qlt->req_ndx_from_fw) &
+ (REQUEST_QUEUE_ENTRIES - 1));
if (qlt->req_available < n) {
if (try < 2) {
drv_usecwait(100);
@@ -1743,8 +1746,8 @@ qlt_get_preq_entries(qlt_state_t *qlt, uint32_t n)
{
int try = 0;
uint32_t req_available = PRIORITY_QUEUE_ENTRIES - 1 -
- ((qlt->preq_ndx_to_fw - qlt->preq_ndx_from_fw) &
- (PRIORITY_QUEUE_ENTRIES - 1));
+ ((qlt->preq_ndx_to_fw - qlt->preq_ndx_from_fw) &
+ (PRIORITY_QUEUE_ENTRIES - 1));
while (req_available < n) {
uint32_t val1, val2, val3;
@@ -1756,8 +1759,8 @@ qlt_get_preq_entries(qlt_state_t *qlt, uint32_t n)
qlt->preq_ndx_from_fw = val1;
req_available = PRIORITY_QUEUE_ENTRIES - 1 -
- ((qlt->preq_ndx_to_fw - qlt->preq_ndx_from_fw) &
- (PRIORITY_QUEUE_ENTRIES - 1));
+ ((qlt->preq_ndx_to_fw - qlt->preq_ndx_from_fw) &
+ (PRIORITY_QUEUE_ENTRIES - 1));
if (req_available < n) {
if (try < 2) {
drv_usecwait(100);
@@ -1825,7 +1828,7 @@ qlt_reset_chip_and_download_fw(qlt_state_t *qlt, int reset_only)
/* Reset the Chip */
REG_WR32(qlt, REG_CTRL_STATUS,
- DMA_SHUTDOWN_CTRL | PCI_X_XFER_CTRL | CHIP_SOFT_RESET);
+ DMA_SHUTDOWN_CTRL | PCI_X_XFER_CTRL | CHIP_SOFT_RESET);
qlt->qlt_link_up = 0;
@@ -1848,7 +1851,7 @@ qlt_reset_chip_and_download_fw(qlt_state_t *qlt, int reset_only)
/* Load the two segments */
if (qlt->fw_code01 != NULL) {
ret = qlt_load_risc_ram(qlt, qlt->fw_code01, qlt->fw_length01,
- qlt->fw_addr01);
+ qlt->fw_addr01);
if (ret == QLT_SUCCESS) {
ret = qlt_load_risc_ram(qlt, qlt->fw_code02,
qlt->fw_length02, qlt->fw_addr02);
@@ -1856,18 +1859,18 @@ qlt_reset_chip_and_download_fw(qlt_state_t *qlt, int reset_only)
start_addr = qlt->fw_addr01;
} else if (qlt->qlt_25xx_chip) {
ret = qlt_load_risc_ram(qlt, fw2500_code01, fw2500_length01,
- fw2500_addr01);
+ fw2500_addr01);
if (ret == QLT_SUCCESS) {
ret = qlt_load_risc_ram(qlt, fw2500_code02,
- fw2500_length02, fw2500_addr02);
+ fw2500_length02, fw2500_addr02);
}
start_addr = fw2500_addr01;
} else {
ret = qlt_load_risc_ram(qlt, fw2400_code01, fw2400_length01,
- fw2400_addr01);
+ fw2400_addr01);
if (ret == QLT_SUCCESS) {
ret = qlt_load_risc_ram(qlt, fw2400_code02,
- fw2400_length02, fw2400_addr02);
+ fw2400_length02, fw2400_addr02);
}
start_addr = fw2400_addr01;
}
@@ -1928,12 +1931,12 @@ qlt_load_risc_ram(qlt_state_t *qlt, uint32_t *host_addr,
cur_host_addr = &(host_addr[words_sent]);
cur_risc_addr = risc_addr + (words_sent << 2);
words_being_sent = min(word_count - words_sent,
- TOTAL_DMA_MEM_SIZE >> 2);
+ TOTAL_DMA_MEM_SIZE >> 2);
ddi_rep_put32(qlt->queue_mem_acc_handle, cur_host_addr,
(uint32_t *)qlt->queue_mem_ptr, words_being_sent,
DDI_DEV_AUTOINCR);
(void) ddi_dma_sync(qlt->queue_mem_dma_handle, 0,
- words_being_sent << 2, DDI_DMA_SYNC_FORDEV);
+ words_being_sent << 2, DDI_DMA_SYNC_FORDEV);
da = qlt->queue_mem_cookie.dmac_laddress;
REG_WR16(qlt, REG_MBOX(0), 0x0B);
REG_WR16(qlt, REG_MBOX(1), risc_addr & 0xffff);
@@ -2061,7 +2064,7 @@ qlt_mailbox_command(qlt_state_t *qlt, mbox_cmd_t *mcp)
/* Wait to grab the mailboxes */
for (retries = 0; qlt->mbox_io_state != MBOX_STATE_READY;
- retries++) {
+ retries++) {
cv_wait(&qlt->mbox_cv, &qlt->mbox_lock);
if ((retries > 5) ||
(qlt->mbox_io_state == MBOX_STATE_UNKNOWN)) {
@@ -2222,7 +2225,7 @@ intr_again:;
} else if (code == 0x8012) {
qlt->qlt_link_up = 0;
fct_handle_event(qlt->qlt_port, FCT_EVENT_LINK_DOWN,
- 0, 0);
+ 0, 0);
} else if (code == 0x8011) {
switch (mbox1) {
case 0: qlt->link_speed = PORT_SPEED_1G;
@@ -2238,7 +2241,7 @@ intr_again:;
}
qlt->qlt_link_up = 1;
fct_handle_event(qlt->qlt_port, FCT_EVENT_LINK_UP,
- 0, 0);
+ 0, 0);
} else if (code == 0x8002) {
(void) snprintf(info, 80,
"Got 8002, mb1=%x mb2=%x mb5=%x mb6=%x",
@@ -2254,13 +2257,13 @@ intr_again:;
if (qlt->mbox_io_state != MBOX_STATE_CMD_RUNNING) {
cmn_err(CE_WARN, "qlt(%d): mailbox completion received"
" when driver wasn't waiting for it %d",
- instance, qlt->mbox_io_state);
+ instance, qlt->mbox_io_state);
} else {
for (i = 0; i < MAX_MBOXES; i++) {
if (qlt->mcp->from_fw_mask &
(((uint32_t)1) << i)) {
qlt->mcp->from_fw[i] =
- REG_RD16(qlt, REG_MBOX(i));
+ REG_RD16(qlt, REG_MBOX(i));
}
}
qlt->mbox_io_state = MBOX_STATE_CMD_DONE;
@@ -2329,10 +2332,10 @@ qlt_read_nvram(qlt_state_t *qlt)
if (qlt->qlt_25xx_chip) {
addr = REG_RD32(qlt, REG_CTRL_STATUS) & FUNCTION_NUMBER ?
- QLT25_NVRAM_FUNC1_ADDR : QLT25_NVRAM_FUNC0_ADDR;
+ QLT25_NVRAM_FUNC1_ADDR : QLT25_NVRAM_FUNC0_ADDR;
} else {
addr = REG_RD32(qlt, REG_CTRL_STATUS) & FUNCTION_NUMBER ?
- NVRAM_FUNC1_ADDR : NVRAM_FUNC0_ADDR;
+ NVRAM_FUNC1_ADDR : NVRAM_FUNC0_ADDR;
}
mutex_enter(&qlt_global_lock);
@@ -2390,7 +2393,7 @@ qlt_sync_atio_queue(qlt_state_t *qlt)
DDI_DMA_SYNC_FORCPU);
} else {
total_ent = ATIO_QUEUE_ENTRIES - qlt->atio_ndx_to_fw +
- qlt->atio_ndx_from_fw;
+ qlt->atio_ndx_from_fw;
(void) ddi_dma_sync(qlt->queue_mem_dma_handle, ATIO_QUEUE_OFFSET
+ (qlt->atio_ndx_to_fw << 6), (ATIO_QUEUE_ENTRIES -
qlt->atio_ndx_to_fw) << 6, DDI_DMA_SYNC_FORCPU);
@@ -2413,7 +2416,7 @@ qlt_handle_atio_queue_update(qlt_state_t *qlt)
do {
uint8_t *atio = (uint8_t *)&qlt->atio_ptr[
- qlt->atio_ndx_to_fw << 6];
+ qlt->atio_ndx_to_fw << 6];
uint32_t ent_cnt;
ent_cnt = (uint32_t)(atio[1]);
@@ -2433,7 +2436,7 @@ qlt_handle_atio_queue_update(qlt_state_t *qlt)
break;
}
qlt->atio_ndx_to_fw = (qlt->atio_ndx_to_fw + ent_cnt) &
- (ATIO_QUEUE_ENTRIES - 1);
+ (ATIO_QUEUE_ENTRIES - 1);
total_ent -= ent_cnt;
} while (total_ent > 0);
REG_WR32(qlt, REG_ATIO_OUT_PTR, qlt->atio_ndx_to_fw);
@@ -2452,7 +2455,7 @@ qlt_sync_resp_queue(qlt_state_t *qlt)
DDI_DMA_SYNC_FORCPU);
} else {
total_ent = RESPONSE_QUEUE_ENTRIES - qlt->resp_ndx_to_fw +
- qlt->resp_ndx_from_fw;
+ qlt->resp_ndx_from_fw;
(void) ddi_dma_sync(qlt->queue_mem_dma_handle,
RESPONSE_QUEUE_OFFSET
+ (qlt->resp_ndx_to_fw << 6), (RESPONSE_QUEUE_ENTRIES -
@@ -2523,7 +2526,7 @@ qlt_handle_resp_queue_update(qlt_state_t *qlt)
break;
}
qlt->resp_ndx_to_fw = (qlt->resp_ndx_to_fw + ent_cnt) &
- (RESPONSE_QUEUE_ENTRIES - 1);
+ (RESPONSE_QUEUE_ENTRIES - 1);
total_ent -= ent_cnt;
} while (total_ent > 0);
REG_WR32(qlt, REG_RESP_OUT_PTR, qlt->resp_ndx_to_fw);
@@ -2571,7 +2574,7 @@ qlt_portid_to_handle(qlt_state_t *qlt, uint32_t id, uint16_t cmd_handle,
cmn_err(CE_WARN, "login for portid %x came in "
"with handle %x, while the portid was "
"already using a different handle %x",
- id, cmd_handle, h);
+ id, cmd_handle, h);
qlt_free_mailbox_command(qlt, mcp);
return (QLT_FAILURE);
}
@@ -2642,8 +2645,8 @@ qlt_register_remote_port(fct_local_port_t *port, fct_remote_port_t *rp,
case 0xFFFFFF: h = 0x7FF; break;
default:
ret = qlt_portid_to_handle(
- (qlt_state_t *)port->port_fca_private, rp->rp_id,
- login->cmd_rp_handle, &h);
+ (qlt_state_t *)port->port_fca_private, rp->rp_id,
+ login->cmd_rp_handle, &h);
if (ret != FCT_SUCCESS)
return (ret);
}
@@ -3058,7 +3061,7 @@ qlt_send_status(qlt_state_t *qlt, fct_cmd_t *cmd)
mutex_exit(&qlt->req_lock);
if (use_mode2) {
qlt_dmem_free(cmd->cmd_port->port_fds,
- qcmd->dbuf_rsp_iu);
+ qcmd->dbuf_rsp_iu);
qcmd->dbuf_rsp_iu = NULL;
}
return (FCT_BUSY);
@@ -3399,7 +3402,7 @@ qlt_handle_atio(qlt_state_t *qlt, uint8_t *atio)
if (q == ((uint8_t *)qlt->queue_mem_ptr +
ATIO_QUEUE_OFFSET + (ATIO_QUEUE_ENTRIES * 64))) {
q = (uint8_t *)qlt->queue_mem_ptr +
- ATIO_QUEUE_OFFSET;
+ ATIO_QUEUE_OFFSET;
}
}
for (i = 0; i < 4; i++) {
@@ -3407,16 +3410,16 @@ qlt_handle_atio(qlt_state_t *qlt, uint8_t *atio)
if (q == ((uint8_t *)qlt->queue_mem_ptr +
ATIO_QUEUE_OFFSET + (ATIO_QUEUE_ENTRIES * 64))) {
q = (uint8_t *)qlt->queue_mem_ptr +
- ATIO_QUEUE_OFFSET;
+ ATIO_QUEUE_OFFSET;
}
}
task->task_expected_xfer_length = (((uint32_t)cb[0]) << 24) |
- (((uint32_t)cb[1]) << 16) |
- (((uint32_t)cb[2]) << 8) | cb[3];
+ (((uint32_t)cb[1]) << 16) |
+ (((uint32_t)cb[2]) << 8) | cb[3];
} else {
task->task_expected_xfer_length = (((uint32_t)q[0]) << 24) |
- (((uint32_t)q[1]) << 16) |
- (((uint32_t)q[2]) << 8) | q[3];
+ (((uint32_t)q[1]) << 16) |
+ (((uint32_t)q[2]) << 8) | q[3];
}
fct_post_rcvd_cmd(cmd, 0);
}
@@ -3683,7 +3686,7 @@ qlt_handle_sol_els_completion(qlt_state_t *qlt, uint8_t *rsp)
qlt_dmem_dma_sync(qcmd->dbuf, DDI_DMA_SYNC_FORKERNEL);
bcopy(qcmd->dbuf->db_sglist[0].seg_addr +
qcmd->param.resp_offset,
- els->els_resp_payload, els->els_resp_size);
+ els->els_resp_payload, els->els_resp_size);
}
qlt_dmem_free(NULL, qcmd->dbuf);
qcmd->dbuf = NULL;
@@ -4207,7 +4210,7 @@ qlt_send_els(qlt_state_t *qlt, fct_cmd_t *cmd)
qcmd->dbuf = buf;
bcopy(els->els_req_payload, buf->db_sglist[0].seg_addr,
- els->els_req_size);
+ els->els_req_size);
qlt_dmem_dma_sync(buf, DDI_DMA_SYNC_FORDEV);
mutex_enter(&qlt->req_lock);
@@ -4236,7 +4239,7 @@ qlt_send_els(qlt_state_t *qlt, fct_cmd_t *cmd)
QMEM_WR64(qlt, (&req[0x28]), bctl->bctl_dev_addr);
QMEM_WR32(qlt, (&req[0x30]), els->els_req_size);
QMEM_WR64(qlt, (&req[0x34]), bctl->bctl_dev_addr +
- qcmd->param.resp_offset);
+ qcmd->param.resp_offset);
QMEM_WR32(qlt, (&req[0x3C]), els->els_resp_size);
qlt_submit_req_entries(qlt, 1);
mutex_exit(&qlt->req_lock);
@@ -4267,7 +4270,7 @@ qlt_send_ct(qlt_state_t *qlt, fct_cmd_t *cmd)
qcmd->dbuf = buf;
bcopy(ct->ct_req_payload, buf->db_sglist[0].seg_addr,
- ct->ct_req_size);
+ ct->ct_req_size);
qlt_dmem_dma_sync(buf, DDI_DMA_SYNC_FORDEV);
mutex_enter(&qlt->req_lock);
@@ -4657,7 +4660,7 @@ over_aseq_regs:;
* Queues
*/
n = snprintf(buf, size_left,
- "\nRequest0 Queue DMA Channel registers\n");
+ "\nRequest0 Queue DMA Channel registers\n");
buf += n; size_left -= n;
REG_WR32(qlt, 0x54, 0x7200);
n = qlt_fwdump_dump_regs(qlt, buf, 0xc0, 8, size_left);
@@ -4666,7 +4669,7 @@ over_aseq_regs:;
buf += n; size_left -= n;
n = snprintf(buf, size_left,
- "\n\nResponse0 Queue DMA Channel registers\n");
+ "\n\nResponse0 Queue DMA Channel registers\n");
buf += n; size_left -= n;
REG_WR32(qlt, 0x54, 0x7300);
n = qlt_fwdump_dump_regs(qlt, buf, 0xc0, 8, size_left);
@@ -4675,7 +4678,7 @@ over_aseq_regs:;
buf += n; size_left -= n;
n = snprintf(buf, size_left,
- "\n\nRequest1 Queue DMA Channel registers\n");
+ "\n\nRequest1 Queue DMA Channel registers\n");
buf += n; size_left -= n;
REG_WR32(qlt, 0x54, 0x7400);
n = qlt_fwdump_dump_regs(qlt, buf, 0xc0, 8, size_left);
@@ -5020,7 +5023,7 @@ dump_ok:
mutex_enter(&qlt->qlt_ioctl_lock);
qlt->qlt_ioctl_flags &=
- ~(QLT_FWDUMP_INPROGRESS | QLT_FWDUMP_FETCHED_BY_USER);
+ ~(QLT_FWDUMP_INPROGRESS | QLT_FWDUMP_FETCHED_BY_USER);
qlt->qlt_ioctl_flags |= QLT_FWDUMP_ISVALID;
mutex_exit(&qlt->qlt_ioctl_lock);
return (FCT_SUCCESS);
@@ -5065,7 +5068,7 @@ qlt_dump_risc_ram(qlt_state_t *qlt, uint32_t addr, uint32_t words,
for (i = 0, n = 0; i < words; i++) {
if ((i & 7) == 0) {
n += snprintf(&buf[n], (size_left - n), "%08x: ",
- addr + i);
+ addr + i);
}
if ((i + 1) & 7) {
c = ' ';
diff --git a/usr/src/uts/common/sys/fct.h b/usr/src/uts/common/sys/fct.h
index 514535afba..43940a90d2 100644
--- a/usr/src/uts/common/sys/fct.h
+++ b/usr/src/uts/common/sys/fct.h
@@ -55,6 +55,8 @@ typedef struct fct_remote_port {
void *rp_fca_private;
struct fct_local_port *rp_port;
+ char rp_nwwn_str[FC_WWN_BUFLEN];
+ char rp_pwwn_str[FC_WWN_BUFLEN];
uint8_t rp_nwwn[FC_WWN_LEN];
uint8_t rp_pwwn[FC_WWN_LEN];
uint32_t rp_id; /* 8 or 24 bit */
@@ -188,6 +190,8 @@ typedef struct fct_local_port {
void *port_fca_private;
stmf_local_port_t *port_lport;
+ char port_nwwn_str[FC_WWN_BUFLEN];
+ char port_pwwn_str[FC_WWN_BUFLEN];
uint8_t port_nwwn[FC_WWN_LEN];
uint8_t port_pwwn[FC_WWN_LEN];
char *port_default_alias;
@@ -372,6 +376,7 @@ fct_status_t fct_handle_rcvd_flogi(fct_local_port_t *port,
void fct_log_local_port_event(fct_local_port_t *port, char *subclass);
void fct_log_remote_port_event(fct_local_port_t *port, char *subclass,
uint8_t *rp_pwwn, uint32_t rp_id);
+void fct_wwn_to_str(char *to_ptr, const uint8_t *from_ptr);
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/sys/fct_defines.h b/usr/src/uts/common/sys/fct_defines.h
index 9eec28a6f1..cd4f8324c5 100644
--- a/usr/src/uts/common/sys/fct_defines.h
+++ b/usr/src/uts/common/sys/fct_defines.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _FCT_DEFINES_H
@@ -206,6 +206,11 @@ typedef stmf_status_t fct_status_t;
(((x) >= NPORT_ID_DOM_CTLR_START) && ((x) <= NPORT_ID_DOM_CTLR_END)))
#define FC_WWN_LEN 8
+/*
+ * NB: FC_WWN_BUFLEN should be 64-bit aligned (divisible by 8).
+ */
+#define FC_WWN_BUFLEN (FC_WWN_LEN * 3)
+#define FC_WWN_STRLEN (FC_WWN_BUFLEN - 1) /* add trailing null */
struct fct_cmd;
struct fct_local_port;
diff --git a/usr/src/uts/common/sys/sdt.h b/usr/src/uts/common/sys/sdt.h
index ff04802196..d13ceee3d7 100644
--- a/usr/src/uts/common/sys/sdt.h
+++ b/usr/src/uts/common/sys/sdt.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_SDT_H
#define _SYS_SDT_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -259,6 +257,26 @@ extern "C" {
DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \
type3, arg3, type4, arg4);
+#define DTRACE_FC_1(name, type1, arg1) \
+ DTRACE_PROBE1(__fc_##name, type1, arg1);
+
+#define DTRACE_FC_2(name, type1, arg1, type2, arg2) \
+ DTRACE_PROBE2(__fc_##name, type1, arg1, type2, arg2);
+
+#define DTRACE_FC_3(name, type1, arg1, type2, arg2, type3, arg3) \
+ DTRACE_PROBE3(__fc_##name, type1, arg1, type2, arg2, type3, arg3);
+
+#define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \
+ DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
+ type4, arg4);
+
+#define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \
+ type4, arg4, type5, arg5) \
+ DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
+ type4, arg4, type5, arg5);
+
+
+
#endif /* _KERNEL */
extern const char *sdt_prefix;