fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER START
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * The contents of this file are subject to the terms of the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Common Development and Distribution License (the "License").
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * You may not use this file except in compliance with the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * You can obtain a copy of the license at
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * http://www.opensource.org/licenses/cddl1.txt.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * See the License for the specific language governing permissions
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * and limitations under the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * When distributing Covered Code, include this CDDL HEADER in each
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * If applicable, add the following below this CDDL HEADER, with the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * fields enclosed by brackets "[]" replaced with your own identifying
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * information: Portions Copyright [yyyy] [name of copyright owner]
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER END
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * Copyright (c) 2004-2011 Emulex. All rights reserved.
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Use is subject to license terms.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#define DUMP_SUPPORT
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#include <emlxs_mdb.h>
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#include <emlxs_msg.h>
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#include <emlxs_dump.h>
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#include <emlxs_device.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * MDB module linkage information:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortestatic const mdb_dcmd_t dcmds[] =
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld { DRIVER_NAME"_msgbuf", "<instance>", "dumps the "DRIVER_NAME
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld " driver internal message buffer", emlxs_msgbuf, emlxs_msgbuf_help},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld { DRIVER_NAME"_dump", "<type> <instance>", "dumps the "DRIVER_NAME
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld " driver firmware core", emlxs_dump, emlxs_dump_help},
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte { NULL }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte};
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortestatic const mdb_modinfo_t modinfo =
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte MDB_API_VERSION,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte dcmds,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte NULL
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte};
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteconst mdb_modinfo_t *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte_mdb_init(void)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (&modinfo);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte}
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * emlxs_msgbuf library
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortevoid
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_msgbuf_help()
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("Usage: ::%s_msgbuf <instance(hex)>\n\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" <instance> This is the %s driver instance " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "number in hex.\n", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_printf(" (e.g. 0, 1,..., e, f, etc.)\n");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_msgbuf_help() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteint emlxs_msgbuf(uintptr_t base_addr, uint_t flags, int argc,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte const mdb_arg_t *argv)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uintptr_t addr;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_device_t device;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t brd_no;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_msg_log_t log;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t count;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t first;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t last;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t idx;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte char *level;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_msg_t msg;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan char merge[1024];
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_msg_entry_t entry;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte char buffer[256];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte char buffer2[256];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int32_t instance[MAX_FC_BRDS];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte char driver[32];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int32_t instance_count;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t ddiinst;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (argc != 1) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("Usage: ::%s_msgbuf <instance(hex)>\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_printf("mdb: try \"::help %s_msgbuf\" for more information",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Get the device address */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer, sizeof (buffer), "%s_device", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_readvar(&device, buffer) == -1) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte "%s not found.\n", buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte "Is the %s driver loaded ?\n", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Get the device instance table */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer, sizeof (buffer), "%s_instance", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_readvar(&instance, buffer) == -1) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2), "%s not found.\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte "Is the %s driver loaded ?\n", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Get the device instance count */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer, sizeof (buffer), "%s_instance_count", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_readvar(&instance_count, buffer) == -1) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2), "%s not found.\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(buffer2, sizeof (buffer2),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte "Is the %s driver loaded ?\n", DRIVER_NAME);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn(buffer2);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte ddiinst = (uint32_t)mdb_strtoull(argv[0].a_un.a_str);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (brd_no = 0; brd_no < instance_count; brd_no++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (instance[brd_no] == ddiinst) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (brd_no == instance_count) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("Device instance not found. ddinst=%d\n", ddiinst);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check if buffer is null */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte addr = (uintptr_t)device.log[brd_no];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (addr == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("Device instance not found. ddinst=%d\n", ddiinst);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_vread(&log, sizeof (emlxs_msg_log_t), addr) !=
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte sizeof (emlxs_msg_log_t)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("\nUnable to read %d bytes @ %llx.\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte sizeof (emlxs_msg_log_t), addr);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check if buffer is empty */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (log.count == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("Log buffer empty.\n");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Get last entry id saved */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte last = log.count - 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check if buffer has already been filled once */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (log.count >= log.size) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte first = log.count - log.size;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte idx = log.next;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Buffer not yet filled */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte first = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte idx = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Get the total number of messages available for return */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte count = last - first + 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_printf("\n");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Print the messages */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 0; i < count; i++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_vread(&entry, sizeof (emlxs_msg_entry_t),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte (uintptr_t)&log.entry[idx]) != sizeof (emlxs_msg_entry_t)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("Cannot read log entry. index=%d count=%d\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte idx, count);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mdb_vread(&msg, sizeof (emlxs_msg_t),
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte (uintptr_t)entry.msg) != sizeof (emlxs_msg_t)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_warn("Cannot read msg. index=%d count=%d\n",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte idx, count);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (DCMD_ERR);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte switch (msg.level) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case EMLXS_DEBUG:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = " DEBUG";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case EMLXS_NOTICE:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = " NOTICE";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case EMLXS_WARNING:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = "WARNING";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case EMLXS_ERROR:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = " ERROR";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case EMLXS_PANIC:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = " PANIC";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte default:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte level = "UNKNOWN";
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (entry.vpi == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(driver, sizeof (driver), "%s%d",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte DRIVER_NAME, entry.instance);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_snprintf(driver, sizeof (driver), "%s%d.%d",
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte DRIVER_NAME, entry.instance, entry.vpi);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Generate the message string */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (msg.buffer[0] != 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (entry.buffer[0] != 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mdb_snprintf(merge, sizeof (merge),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "[%Y:%03d:%03d:%03d] "
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld "%6d:[%1X.%04X]%s:%7s:%4d:\n%s\n(%s)\n",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id_time.tv_sec,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec/1000000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)(entry.id_time.tv_nsec/1000)%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id, entry.fileno,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte entry.line, driver, level, msg.id,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte msg.buffer, entry.buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mdb_snprintf(merge, sizeof (merge),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "[%Y:%03d:%03d:%03d] "
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld "%6d:[%1X.%04X]%s:%7s:%4d:\n%s\n",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id_time.tv_sec,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec/1000000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)(entry.id_time.tv_nsec/1000)%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id, entry.fileno,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte entry.line, driver, level, msg.id,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte msg.buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (entry.buffer[0] != 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mdb_snprintf(merge, sizeof (merge),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "[%Y:%03d:%03d:%03d] "
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte "%6d:[%1X.%04X]%s:%7s:%4d:\n(%s)\n",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id_time.tv_sec,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec/1000000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)(entry.id_time.tv_nsec/1000)%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id, entry.fileno,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte entry.line, driver, level, msg.id,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte entry.buffer);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mdb_snprintf(merge, sizeof (merge),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "[%Y:%03d:%03d:%03d] "
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld "%6d:[%1X.%04X]%s:%7s:%4d:\n%s\n",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id_time.tv_sec,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec/1000000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)(entry.id_time.tv_nsec/1000)%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (int)entry.id_time.tv_nsec%1000,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.id, entry.fileno,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan entry.line, driver, level, msg.id,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan msg.buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mdb_printf("%s", merge);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Increment index */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (++idx >= log.size) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte idx = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mdb_printf("\n");
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_msgbuf() */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanvoid
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanemlxs_dump_help()
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("Usage: ::%s_dump all <instance(hex)>\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ::%s_dump txt <instance(hex)>\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ::%s_dump dmp <instance(hex)>\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ::%s_dump cee <instance(hex)>\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" txt Display firmware text summary " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "file.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" dmp Display firmware dmp binary file.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" cee Display firmware cee binary file. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "(FCOE adapters only)\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" all Display all firmware core files.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" <instance> This is the %s driver instance " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "number in hex.\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" (e.g. 0, 1,..., e, f, etc.)\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan} /* emlxs_dump_help() */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanint
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanemlxs_dump(uintptr_t base_addr, uint_t flags, int argc,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan const mdb_arg_t *argv)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uintptr_t addr;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_device_t device;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t brd_no;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t i;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan char buffer[256];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan char buffer2[256];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan int32_t instance[MAX_FC_BRDS];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan int32_t instance_count;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t ddiinst;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint8_t *bptr;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan char *cptr;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_file_t dump_txtfile;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_file_t dump_dmpfile;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_file_t dump_ceefile;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t size;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (argc != 2) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto usage;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if ((strcmp(argv[0].a_un.a_str, "all") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "ALL") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "All") == 0)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan file = 0;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else if ((strcmp(argv[0].a_un.a_str, "txt") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "TXT") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "Txt") == 0)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan file = 1;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else if ((strcmp(argv[0].a_un.a_str, "dmp") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "DMP") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "Dmp") == 0)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan file = 2;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else if ((strcmp(argv[0].a_un.a_str, "cee") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "CEE") == 0) ||
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (strcmp(argv[0].a_un.a_str, "Cee") == 0)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan file = 3;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto usage;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan /* Get the device address */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer, sizeof (buffer), "%s_device", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_readvar(&device, buffer) == -1) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2),
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "%s not found.\n", buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2),
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "Is the %s driver loaded ?\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (DCMD_ERR);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan /* Get the device instance table */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer, sizeof (buffer), "%s_instance", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_readvar(&instance, buffer) == -1) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2), "%s not found.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2),
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "Is the %s driver loaded ?\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (DCMD_ERR);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan /* Get the device instance count */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer, sizeof (buffer), "%s_instance_count", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_readvar(&instance_count, buffer) == -1) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2), "%s not found.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_snprintf(buffer2, sizeof (buffer2),
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "Is the %s driver loaded ?\n", DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn(buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (DCMD_ERR);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan ddiinst = (uint32_t)mdb_strtoull(argv[1].a_un.a_str);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan for (brd_no = 0; brd_no < instance_count; brd_no++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (instance[brd_no] == ddiinst) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan break;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (brd_no == instance_count) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("Device instance not found. ddinst=%d\n", ddiinst);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (DCMD_ERR);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (file == 0 || file == 1) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan addr = (uintptr_t)device.dump_txtfile[brd_no];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (addr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("TXT file: Device instance not found. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d\n", ddiinst);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto dmp_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(&dump_txtfile, sizeof (dump_txtfile), addr)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != sizeof (dump_txtfile)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("TXT file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan sizeof (dump_txtfile), addr);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto dmp_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size = (uintptr_t)dump_txtfile.ptr -
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uintptr_t)dump_txtfile.buffer;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (size == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("TXT file: Not available.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto dmp_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bptr = (uint8_t *)mdb_zalloc(size, UM_SLEEP|UM_GC);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (bptr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("TXT file: Unable to allocate file buffer. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d size=%d\n", ddiinst, size);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto dmp_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(bptr, size, (uintptr_t)dump_txtfile.buffer)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != size) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("TXT file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size, dump_txtfile.buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto dmp_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<TXT File Start>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("%s", bptr);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<TXT File End>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathandmp_file:
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (file == 0 || file == 2) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan addr = (uintptr_t)device.dump_dmpfile[brd_no];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (addr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("DMP file: Device instance not found. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d\n", ddiinst);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto cee_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(&dump_dmpfile, sizeof (dump_dmpfile), addr)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != sizeof (dump_dmpfile)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("DMP file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan sizeof (dump_dmpfile), addr);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto cee_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size = (uintptr_t)dump_dmpfile.ptr -
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uintptr_t)dump_dmpfile.buffer;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (size == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("DMP file: Not available.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto cee_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bptr = (uint8_t *)mdb_zalloc(size, UM_SLEEP|UM_GC);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (bptr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("DMP file: Unable to allocate file buffer. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d size=%d\n", ddiinst, size);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto cee_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(bptr, size, (uintptr_t)dump_dmpfile.buffer)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != size) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("DMP file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size, dump_dmpfile.buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto cee_file;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<DMP File Start>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero(buffer2, sizeof (buffer2));
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan cptr = buffer2;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan for (i = 0; i < size; i++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (i && !(i % 16)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" %s\n", buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero(buffer2, sizeof (buffer2));
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan cptr = buffer2;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 16)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("%08X: ", i);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 4)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if ((*bptr >= 32) && (*bptr <= 126)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan *cptr++ = *bptr;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan *cptr++ = '.';
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("%02X ", *bptr++);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size = 16 - (i % 16);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan for (i = 0; size < 16 && i < size; i++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 4)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" %s\n", buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<DMP File End>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathancee_file:
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (file == 0 || file == 3) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan addr = (uintptr_t)device.dump_ceefile[brd_no];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (addr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("CEE file: Device instance not found. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d\n", ddiinst);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto done;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(&dump_ceefile, sizeof (dump_ceefile), addr)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != sizeof (dump_ceefile)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("CEE file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan sizeof (dump_ceefile), addr);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto done;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size = (uintptr_t)dump_ceefile.ptr -
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uintptr_t)dump_ceefile.buffer;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (size == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("CEE file: Not available.\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto done;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bptr = (uint8_t *)mdb_zalloc(size, UM_SLEEP|UM_GC);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (bptr == 0) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("CEE file: Unable to allocate file buffer. " \
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan "ddinst=%d size=%d\n", ddiinst, size);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto done;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (mdb_vread(bptr, size, (uintptr_t)dump_ceefile.buffer)
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan != size) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_warn("CEE file: Unable to read %d bytes @ %llx.\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size, dump_ceefile.buffer);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan goto done;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<CEE File Start>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero(buffer2, sizeof (buffer2));
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan cptr = buffer2;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan for (i = 0; i < size; i++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (i && !(i % 16)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" %s\n", buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero(buffer2, sizeof (buffer2));
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan cptr = buffer2;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 16)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("%08X: ", i);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 4)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if ((*bptr >= 32) && (*bptr <= 126)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan *cptr++ = *bptr;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan } else {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan *cptr++ = '.';
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("%02X ", *bptr++);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan size = 16 - (i % 16);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan for (i = 0; size < 16 && i < size; i++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan if (!(i % 4)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" ");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf(" %s\n", buffer2);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("<CEE File End>\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathandone:
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("\n");
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (0);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanusage:
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("Usage: ::%s_dump <file> <instance (hex)>\n",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mdb_printf("mdb: try \"::help %s_dump\" for more information",
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan DRIVER_NAME);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan return (DCMD_ERR);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan} /* emlxs_dump() */