5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * CDDL HEADER START
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * and limitations under the License.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * CDDL HEADER END
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Use is subject to license terms.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski/*
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski * Copyright 2014 Joyent, Inc. All rights reserved.
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles * Copyright (c) 2014, Tegile Systems Inc. All rights reserved.
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski */
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <limits.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/mdb_modapi.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/sysinfo.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/sunmdi.h>
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski#include <sys/list.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/scsi.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#pragma pack(1)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_type.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_cnfg.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_init.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_ioc.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_sas.h>
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_raid.h>
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_tool.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#pragma pack()
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mptsas_var.h>
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski#include <sys/scsi/adapters/mpt_sas/mptsas_hash.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastruct {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int value;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char *text;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China} devinfo_array[] = {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SEP, "SEP" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE, "ATAPI device" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_LSI_DEVICE, "LSI device" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH, "direct attach" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SSP_TARGET, "SSP tgt" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_STP_TARGET, "STP tgt" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SMP_TARGET, "SMP tgt" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SATA_DEVICE, "SATA dev" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SSP_INITIATOR, "SSP init" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_STP_INITIATOR, "STP init" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SMP_INITIATOR, "SMP init" },
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China { MPI2_SAS_DEVICE_INFO_SATA_HOST, "SATA host" }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China};
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaconstruct_path(uintptr_t addr, char *result)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct dev_info d;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char devi_node[PATH_MAX];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char devi_addr[PATH_MAX];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&d, sizeof (d), addr) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read dev_info");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (d.devi_parent) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China construct_path((uintptr_t)d.devi_parent, result);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_readstr(devi_node, sizeof (devi_node),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uintptr_t)d.devi_node_name);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_readstr(devi_addr, sizeof (devi_addr),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uintptr_t)d.devi_addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_snprintf(result+strlen(result),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China PATH_MAX-strlen(result),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "/%s%s%s", devi_node, (*devi_addr ? "@" : ""),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China devi_addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_OK);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/* ARGSUSED */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamdi_info_cb(uintptr_t addr, const void *data, void *cbdata)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct mdi_pathinfo pi;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct mdi_client c;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char dev_path[PATH_MAX];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char string[PATH_MAX];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int mdi_target = 0, mdi_lun = 0;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int target = *(int *)cbdata;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&pi, sizeof (pi), addr) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read mdi_pathinfo");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_readstr(string, sizeof (string), (uintptr_t)pi.pi_addr);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdi_target = (int)mdb_strtoull(string);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdi_lun = (int)mdb_strtoull(strchr(string, ',') + 1);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (target != mdi_target)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (0);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (c), (uintptr_t)pi.pi_client) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read mdi_client");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (-1);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *dev_path = NULL;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (construct_path((uintptr_t)c.ct_dip, dev_path) != DCMD_OK)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China strcpy(dev_path, "unknown");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("LUN %d: %s\n", mdi_lun, dev_path);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" dip: %p %s path", c.ct_dip,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (pi.pi_preferred ? "preferred" : ""));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China switch (pi.pi_state & MDI_PATHINFO_STATE_MASK) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MDI_PATHINFO_STATE_INIT:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" initializing");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MDI_PATHINFO_STATE_ONLINE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" online");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MDI_PATHINFO_STATE_STANDBY:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" standby");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MDI_PATHINFO_STATE_FAULT:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" fault");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MDI_PATHINFO_STATE_OFFLINE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" offline");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" invalid state");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (0);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gilesmdi_info(struct mptsas *mp, int target)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct dev_info d;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct mdi_phci p;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_vread(&d, sizeof (d), (uintptr_t)mp->m_dip) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read m_dip");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (MDI_PHCI(&d)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&p, sizeof (p), (uintptr_t)d.devi_mdi_xhci)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read m_dip.devi_mdi_xhci");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (p.ph_path_head)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_pwalk("mdipi_phci_list", (mdb_walk_cb_t)mdi_info_cb,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &target, (uintptr_t)p.ph_path_head);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaprint_cdb(mptsas_cmd_t *m)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct scsi_pkt pkt;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uchar_t cdb[512]; /* an arbitrarily large number */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int j;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&pkt, sizeof (pkt), (uintptr_t)m->cmd_pkt) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read cmd_pkt");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * We use cmd_cdblen here because 5.10 doesn't
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * have the cdb length in the pkt
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&cdb, m->cmd_cdblen, (uintptr_t)pkt.pkt_cdbp) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read pkt_cdbp");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%3d,%-3d [ ",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pkt.pkt_address.a_target, pkt.pkt_address.a_lun);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (j = 0; j < m->cmd_cdblen; j++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%02x ", cdb[j]);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("]\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskidisplay_ports(struct mptsas *mp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int i;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("phy number and port mapping table\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (i = 0; i < MPTSAS_MAX_PHYS; i++) {
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if (mp->m_phy_info[i].attached_devhdl) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("phy %x --> port %x, phymask %x,"
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski "attached_devhdl %x\n", i, mp->m_phy_info[i].port_num,
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mp->m_phy_info[i].phy_mask,
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mp->m_phy_info[i].attached_devhdl);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskistatic uintptr_t
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskiklist_head(list_t *lp, uintptr_t klp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if ((uintptr_t)lp->list_head.list_next ==
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski klp + offsetof(struct list, list_head))
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return (NULL);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return ((uintptr_t)(((char *)lp->list_head.list_next) -
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski lp->list_offset));
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskistatic uintptr_t
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskiklist_next(list_t *lp, uintptr_t klp, void *op)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski{
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski /* LINTED E_BAD_PTR_CAST_ALIG */
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski struct list_node *np = (struct list_node *)(((char *)op) +
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski lp->list_offset);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if ((uintptr_t)np->list_next == klp + offsetof(struct list, list_head))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (NULL);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return (((uintptr_t)(np->list_next)) - lp->list_offset);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskistatic void *
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gileskrefhash_first(uintptr_t khp, uintptr_t *addr)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski{
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski refhash_t mh;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski uintptr_t klp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski uintptr_t kop;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski void *rp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_vread(&mh, sizeof (mh), khp);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski klp = klist_head(&mh.rh_objs, khp + offsetof(refhash_t, rh_objs));
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if (klp == 0)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return (NULL);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski kop = klp - mh.rh_link_off;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (addr)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles *addr = kop;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski rp = mdb_alloc(mh.rh_obj_size, UM_SLEEP);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_vread(rp, mh.rh_obj_size, kop);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return (rp);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskistatic void *
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gileskrefhash_next(uintptr_t khp, void *op, uintptr_t *addr)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski{
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski refhash_t mh;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski void *prev = op;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski refhash_link_t *lp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski uintptr_t klp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski uintptr_t kop;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski refhash_link_t ml;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski void *rp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_vread(&mh, sizeof (mh), khp);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski /* LINTED E_BAD_PTR_CAST_ALIG */
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski lp = (refhash_link_t *)(((char *)(op)) + mh.rh_link_off);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski ml = *lp;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski while ((klp = klist_next(&mh.rh_objs,
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski khp + offsetof(refhash_t, rh_objs), &ml)) != NULL) {
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_vread(&ml, sizeof (ml), klp);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if (!(ml.rhl_flags & RHL_F_DEAD))
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if (klp == 0) {
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_free(prev, mh.rh_obj_size);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (NULL);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski kop = klp - mh.rh_link_off;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (addr)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles *addr = kop;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski rp = mdb_alloc(mh.rh_obj_size, UM_SLEEP);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_vread(rp, mh.rh_obj_size, kop);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski mdb_free(prev, mh.rh_obj_size);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski return (rp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gilesdisplay_targets(struct mptsas *mp, uint_t verbose)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_target_t *ptgt;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_smp_t *psmp;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int loop, comma;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles uintptr_t p_addr;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf(" mptsas_target_t slot devhdl wwn ncmds throttle "
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles "dr_flag dups\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("---------------------------------------"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles "-------------------------------\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (ptgt = krefhash_first((uintptr_t)mp->m_targets, &p_addr);
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski ptgt != NULL;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt = krefhash_next((uintptr_t)mp->m_targets, ptgt, &p_addr)) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (ptgt->m_addr.mta_wwn ||
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt->m_deviceinfo) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%16p ", p_addr);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%4d ", ptgt->m_slot_num);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%4d ", ptgt->m_devhdl);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (ptgt->m_addr.mta_wwn)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%"PRIx64" ",
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt->m_addr.mta_wwn);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%3d", ptgt->m_t_ncmds);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles switch (ptgt->m_t_throttle) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case QFULL_THROTTLE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" QFULL ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case DRAIN_THROTTLE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" DRAIN ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case HOLD_THROTTLE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" HOLD ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MAX_THROTTLE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" MAX ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%8d ",
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt->m_t_throttle);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles switch (ptgt->m_dr_flag) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case MPTSAS_DR_INACTIVE:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" INACTIVE ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPTSAS_DR_INTRANSITION:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("TRANSITION ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" UNKNOWN ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%d\n",
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt->m_dups);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (verbose) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_inc_indent(5);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((ptgt->m_deviceinfo &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE) ==
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("Fanout expander: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((ptgt->m_deviceinfo &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE) ==
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("Edge expander: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((ptgt->m_deviceinfo &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE) ==
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_END_DEVICE)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("End device: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((ptgt->m_deviceinfo &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE) ==
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_SAS_DEVICE_INFO_NO_DEVICE)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("No device ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (loop = 0, comma = 0;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China loop < (sizeof (devinfo_array) /
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China sizeof (devinfo_array[0])); loop++) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (ptgt->m_deviceinfo &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China devinfo_array[loop].value) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%s%s",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (comma ? ", " : ""),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China devinfo_array[loop].text);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China comma++;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdi_info(mp, ptgt->m_slot_num);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_dec_indent(5);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf(" mptsas_smp_t devhdl wwn phymask\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("---------------------------------------"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles "------------------\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (psmp = (mptsas_smp_t *)krefhash_first(
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles (uintptr_t)mp->m_smp_targets, &p_addr);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles psmp != NULL;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles psmp = krefhash_next((uintptr_t)mp->m_smp_targets, psmp,
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles &p_addr)) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%16p ", p_addr);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%4d %"PRIx64" %04x\n",
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles psmp->m_devhdl, psmp->m_addr.mta_wwn,
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles psmp->m_addr.mta_phymask);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (!verbose)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles continue;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_inc_indent(5);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((psmp->m_deviceinfo & MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("Fanout expander: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((psmp->m_deviceinfo & MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("Edge expander: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((psmp->m_deviceinfo & MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == MPI2_SAS_DEVICE_INFO_END_DEVICE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("End device: ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((psmp->m_deviceinfo & MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == MPI2_SAS_DEVICE_INFO_NO_DEVICE)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("No device ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (loop = 0, comma = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles loop < (sizeof (devinfo_array)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles / sizeof (devinfo_array[0]));
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles loop++) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (psmp->m_deviceinfo &
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles devinfo_array[loop].value) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%s%s",
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles (comma ? ", " : ""),
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles devinfo_array[loop].text);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles comma++;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_dec_indent(5);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gilesdisplay_slotinfo(struct mptsas *mp, struct mptsas_slots *s)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int i, nslots;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles struct mptsas_cmd c, *q, *slots;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mptsas_target_t *ptgt;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int header_output = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int rv = DCMD_OK;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int slots_in_use = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int tcmds = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int mismatch = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int wq, dq;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int ncmds = 0;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ulong_t saved_indent;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles uintptr_t panicstr;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int state;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if ((state = mdb_get_state()) == MDB_STATE_RUNNING) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("mptsas: slot info can only be displayed on a system "
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles "dump or under kmdb\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return (DCMD_ERR);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_readvar(&panicstr, "panicstr") == -1) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("can't read variable 'panicstr'");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return (DCMD_ERR);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (state != MDB_STATE_STOPPED && panicstr == NULL) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("mptsas: slot info not available for live dump\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return (DCMD_ERR);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles nslots = s->m_n_normal;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots = mdb_alloc(sizeof (mptsas_cmd_t) * nslots, UM_SLEEP);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (i = 0; i < nslots; i++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (s->m_slot[i]) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots_in_use++;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&slots[i], sizeof (mptsas_cmd_t),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uintptr_t)s->m_slot[i]) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read slot");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China s->m_slot[i] = NULL;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if ((slots[i].cmd_flags & CFLAG_CMDIOC) == 0)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China tcmds++;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (i != slots[i].cmd_slot)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mismatch++;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_waitq, wq = 0; q; q = c.cmd_linkp, wq++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_waitq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_doneq, dq = 0; q; q = c.cmd_linkp, dq++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_doneq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (ptgt = krefhash_first((uintptr_t)mp->m_targets, NULL);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt != NULL;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt = krefhash_next((uintptr_t)mp->m_targets, ptgt, NULL)) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (ptgt->m_addr.mta_wwn ||
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ptgt->m_deviceinfo) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles ncmds += ptgt->m_t_ncmds;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" mpt. slot mptsas_slots slot");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("m_ncmds total"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China " targ throttle m_t_ncmds targ_tot wq dq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("----------------------------------------------------");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%7d ", mp->m_ncmds);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%s", (mp->m_ncmds == slots_in_use ? " " : "!="));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%3d total %3d ", slots_in_use, ncmds);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%s", (tcmds == ncmds ? " " : " !="));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%3d %2d %2d\n", tcmds, wq, dq);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China saved_indent = mdb_dec_indent(0);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_dec_indent(saved_indent);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski for (i = 0; i < s->m_n_normal; i++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (s->m_slot[i]) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (!header_output) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("mptsas_cmd slot cmd_slot "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "cmd_flags cmd_pkt_flags scsi_pkt "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China " targ,lun [ pkt_cdbp ...\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("-------------------------------"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "--------------------------------------"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "--------------------------------------"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "------\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China header_output = 1;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%16p %4d %s %4d %8x %8x %16p ",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China s->m_slot[i], i,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (i == slots[i].cmd_slot?" ":"BAD"),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots[i].cmd_slot,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots[i].cmd_flags,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots[i].cmd_pkt_flags,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slots[i].cmd_pkt);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (void) print_cdb(&slots[i]);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /* print the wait queue */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_waitq; q; q = c.cmd_linkp) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (q == mp->m_waitq)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_waitq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%16p wait n/a %4d %8x %8x %16p ",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China q, c.cmd_slot, c.cmd_flags, c.cmd_pkt_flags,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China c.cmd_pkt);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China print_cdb(&c);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /* print the done queue */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_doneq; q; q = c.cmd_linkp) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (q == mp->m_doneq)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_doneq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%16p done n/a %4d %8x %8x %16p ",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China q, c.cmd_slot, c.cmd_flags, c.cmd_pkt_flags,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China c.cmd_pkt);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China print_cdb(&c);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_inc_indent(saved_indent);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mp->m_ncmds != slots_in_use)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: mpt.m_ncmds does not match the number of "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "slots in use\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (tcmds != ncmds)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: the total of m_target[].m_t_ncmds does "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "not match the slots in use\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mismatch)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: corruption in slot table, "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "m_slot[].cmd_slot incorrect\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /* now check for corruptions */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_waitq; q; q = c.cmd_linkp) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (i = 0; i < nslots; i++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (s->m_slot[i] == q)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_waitq entry"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "(mptsas_cmd_t) %p is in m_slot[%i]\n",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China q, i);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_waitq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (q = mp->m_doneq; q; q = c.cmd_linkp) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China for (i = 0; i < nslots; i++)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (s->m_slot[i] == q)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_doneq entry "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "(mptsas_cmd_t) %p is in m_slot[%i]\n", q, i);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&c, sizeof (mptsas_cmd_t), (uintptr_t)q) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't follow m_doneq");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China rv = DCMD_ERR;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China goto exit;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if ((c.cmd_flags & CFLAG_FINISHED) == 0)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_doneq entry (mptsas_cmd_t) %p "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "should have CFLAG_FINISHED set\n", q);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (c.cmd_flags & CFLAG_IN_TRANSPORT)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_doneq entry (mptsas_cmd_t) %p "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "should not have CFLAG_IN_TRANSPORT set\n", q);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (c.cmd_flags & CFLAG_CMDARQ)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_doneq entry (mptsas_cmd_t) %p "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "should not have CFLAG_CMDARQ set\n", q);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (c.cmd_flags & CFLAG_COMPLETED)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("WARNING: m_doneq entry (mptsas_cmd_t) %p "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "should not have CFLAG_COMPLETED set\n", q);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaexit:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_free(slots, sizeof (mptsas_cmd_t) * nslots);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (rv);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowskidisplay_deviceinfo(struct mptsas *mp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char device_path[PATH_MAX];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *device_path = 0;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski if (construct_path((uintptr_t)mp->m_dip, device_path) != DCMD_OK) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China strcpy(device_path, "couldn't determine device path");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("base_wwid phys "
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " prodid devid revid ssid\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("-----------------------------"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "----------------------------------\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%"PRIx64" %2d "
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles "0x%04x 0x%04x ", mp->un.m_base_wwid, mp->m_num_phys,
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mp->m_productid, mp->m_devid);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles switch (mp->m_devid) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2004:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2004) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2008:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2008) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2108_1:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2108_2:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2108_3:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2108) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2116_1:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2116_2:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2116) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SSS6200:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SSS6200) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_1:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_2:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_3:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_4:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_5:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2208_6:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2208) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2308_1:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2308_2:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI2_MFGPAGE_DEVID_SAS2308_3:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS2308) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3004:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS3004) ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3008:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS3008) ");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles break;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3108_1:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3108_2:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3108_5:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles case MPI25_MFGPAGE_DEVID_SAS3108_6:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS3108) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("(SAS????) ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("0x%02x 0x%04x\n", mp->m_revid, mp->m_ssid);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%s\n", device_path);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gilesvoid
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Gilesdump_debug_log(void)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles{
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles uint32_t idx;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles size_t linecnt, linelen;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles char *logbuf;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles int i;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_readsym(&idx, sizeof (uint32_t), "mptsas_dbglog_idx") == -1) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("No debug log buffer present");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_readsym(&linecnt, sizeof (size_t), "mptsas_dbglog_linecnt")
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == -1) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("No debug linecnt present");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_readsym(&linelen, sizeof (size_t), "mptsas_dbglog_linelen")
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == -1) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("No debug linelen present");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles logbuf = mdb_alloc(linelen * linecnt, UM_SLEEP);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (mdb_readsym(logbuf, linelen * linecnt, "mptsas_dbglog_bufs")
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles == -1) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_warn("No debug log buffer present");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles return;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles idx &= linecnt - 1;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles for (i = 0; i < linecnt; i++) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_printf("%s\n", &logbuf[idx * linelen]);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles idx++;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles idx &= linecnt - 1;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles }
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mdb_free(logbuf, linelen * linecnt);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China struct mptsas m;
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski struct mptsas_slots *s;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int nslots;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int slot_size = 0;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t verbose = FALSE;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t target_info = FALSE;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t slot_info = FALSE;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t device_info = FALSE;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t port_info = FALSE;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles uint_t debug_log = FALSE;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int rv = DCMD_OK;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (!(flags & DCMD_ADDRSPEC)) {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles void *mptsas_state = NULL;
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_readvar(&mptsas_state, "mptsas_state") == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("can't read mptsas_state");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_pwalk_dcmd("genunix`softstate", "mpt_sas`mptsas", argc,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China argv, (uintptr_t)mptsas_state) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("mdb_pwalk_dcmd failed");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_OK);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_getopts(argc, argv,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China 's', MDB_OPT_SETBITS, TRUE, &slot_info,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China 'd', MDB_OPT_SETBITS, TRUE, &device_info,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China 't', MDB_OPT_SETBITS, TRUE, &target_info,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China 'p', MDB_OPT_SETBITS, TRUE, &port_info,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China 'v', MDB_OPT_SETBITS, TRUE, &verbose,
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles 'D', MDB_OPT_SETBITS, TRUE, &debug_log,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China NULL) != argc)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_USAGE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(&m, sizeof (m), addr) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read mpt struct at 0x%p", addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China s = mdb_alloc(sizeof (mptsas_slots_t), UM_SLEEP);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(s, sizeof (mptsas_slots_t),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uintptr_t)m.m_active) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read small mptsas_slots_t at 0x%p",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China m.m_active);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_free(s, sizeof (mptsas_slots_t));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski nslots = s->m_n_normal;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_free(s, sizeof (mptsas_slots_t));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China slot_size = sizeof (mptsas_slots_t) +
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (sizeof (mptsas_cmd_t *) * (nslots-1));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China s = mdb_alloc(slot_size, UM_SLEEP);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mdb_vread(s, slot_size, (uintptr_t)m.m_active) == -1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_warn("couldn't read large mptsas_slots_t at 0x%p",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China m.m_active);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_free(s, slot_size);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DCMD_ERR);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /* processing completed */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (((flags & DCMD_ADDRSPEC) && !(flags & DCMD_LOOP)) ||
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (flags & DCMD_LOOPFIRST) || slot_info || device_info ||
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China target_info) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if ((flags & DCMD_LOOP) && !(flags & DCMD_LOOPFIRST))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" mptsas_t inst ncmds suspend power");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("========================================="
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "=======================================");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%16p %4d %5d ", addr, m.m_instance, m.m_ncmds);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("%7d", m.m_suspended);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China switch (m.m_power_level) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case PM_LEVEL_D0:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" ON=D0 ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case PM_LEVEL_D1:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" D1 ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case PM_LEVEL_D2:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf(" D2 ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China case PM_LEVEL_D3:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("OFF=D3 ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China break;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("INVALD ");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_inc_indent(17);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (target_info)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles display_targets(&m, verbose);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (port_info)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski display_ports(&m);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (device_info)
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski display_deviceinfo(&m);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (slot_info)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles display_slotinfo(&m, s);
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles if (debug_log)
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles dump_debug_log();
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_dec_indent(17);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_free(s, slot_size);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (rv);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
da5ab83fc888325fc812733d8a54bc5eab65c65cKeith M Wesolowski
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinavoid
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_help()
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mdb_printf("Prints summary information about each mpt_sas instance, "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "including warning\nmessages when slot usage doesn't match "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "summary information.\n"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "Without the address of a \"struct mptsas\", prints every "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "instance.\n\n"
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "Switches:\n"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " -t[v] includes information about targets, v = be more verbose\n"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " -p includes information about port\n"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " -s includes information about mpt slots\n"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " -d includes information about the hardware\n"
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles " -D print the mptsas specific debug log\n");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic const mdb_dcmd_t dcmds[] = {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles { "mptsas", "?[-tpsdD]", "print mpt_sas information", mptsas_dcmd,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_help}, { NULL }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China};
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic const mdb_modinfo_t modinfo = {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MDB_API_VERSION, dcmds, NULL
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China};
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaconst mdb_modinfo_t *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China_mdb_init(void)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (&modinfo);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}