03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License (the "License").
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You may not use this file except in compliance with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/mutex.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/mdb_modapi.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sgsbbc_priv.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Given the address of a soft state pointer for the SGSBBC driver,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * this function displays the values of selected fields.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You have to specify the address of the soft state structure you
03831d35f7499c87d51205817c93e9a8d42c4baestevel * want to decode. This dcmd does not automatically work that out
03831d35f7499c87d51205817c93e9a8d42c4baestevel * for you. The contents of <sbbcp> points to the variable pointing
03831d35f7499c87d51205817c93e9a8d42c4baestevel * to the soft state pointers.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * (ie. typing "**sbbcp/10J" at the mdb prompt will list the addresses
03831d35f7499c87d51205817c93e9a8d42c4baestevel * of the first 10 soft state structures (if they exist).
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * It can also be obtained using mdb's softstate dcmd.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * "*sbbcp::softstate 0 | ::sgsbbc_softstate"
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* ARGSUSED */
03831d35f7499c87d51205817c93e9a8d42c4baestevelint
03831d35f7499c87d51205817c93e9a8d42c4baesteveldisplay_sbbc_softstate_t(uintptr_t addr, uint_t flags, int argc,
03831d35f7499c87d51205817c93e9a8d42c4baestevel const mdb_arg_t *argv)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel sbbc_softstate_t softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t offset = 0; /* offset into soft state structure */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int rv; /* return value from mdb function */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You have to specify the address of the soft state structure you
03831d35f7499c87d51205817c93e9a8d42c4baestevel * want to decode. This dcmd does not automatically work that out.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel if ((flags & DCMD_ADDRSPEC) == 0)
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (DCMD_ERR);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel rv = mdb_vread(&softp, sizeof (sbbc_softstate_t), addr);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (rv != sizeof (sbbc_softstate_t)) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_warn("sgsbbc soft_state: Failed read on %ll#r", addr);
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (DCMD_ERR);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("---------- sbbc_softstate_t @ %#lr ----------\n", addr);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.dip - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: dip: %31ll#r\n", addr + offset, softp.dip);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.sram - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: sram: %30ll#r\n", addr + offset, softp.sram);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.sbbc_regs - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: sbbc_regs: %25ll#r\n", addr + offset, softp.sbbc_regs);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.port_int_regs - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: port_int_regs: %21ll#r\n", addr + offset,
03831d35f7499c87d51205817c93e9a8d42c4baestevel softp.port_int_regs);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.epld_regs - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: epld_regs: %25p\n", addr + offset, softp.epld_regs);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.sram_toc - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: sram_toc: %26d\n", addr + offset, softp.sram_toc);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.sbbc_reg_handle1 -
03831d35f7499c87d51205817c93e9a8d42c4baestevel (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: sbbc_reg_handle1: %18ll#r\n", addr + offset,
03831d35f7499c87d51205817c93e9a8d42c4baestevel softp.sbbc_reg_handle1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.sbbc_reg_handle2 -
03831d35f7499c87d51205817c93e9a8d42c4baestevel (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: sbbc_reg_handle2: %18ll#r\n", addr + offset,
03831d35f7499c87d51205817c93e9a8d42c4baestevel softp.sbbc_reg_handle2);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.inumber - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: inumber: %27ll#r\n", addr + offset, softp.inumber);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.intr_hdlrs - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: intr_hdlrs: %24ll#r\n", addr + offset,
03831d35f7499c87d51205817c93e9a8d42c4baestevel softp.intr_hdlrs);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.suspended - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: suspended: %25ll#r\n", addr + offset, softp.suspended);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel offset = (int)(uintptr_t)&softp.chosen - (int)(uintptr_t)&softp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel mdb_printf("%p: chosen: %28ll#r\n", addr + offset, softp.chosen);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (DCMD_OK);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MDB module linkage information:
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstatic const mdb_dcmd_t dcmds[] = {{
03831d35f7499c87d51205817c93e9a8d42c4baestevel "sgsbbc_softstate",
03831d35f7499c87d51205817c93e9a8d42c4baestevel NULL,
03831d35f7499c87d51205817c93e9a8d42c4baestevel "print SGSBBC mailbox driver softstate fields",
03831d35f7499c87d51205817c93e9a8d42c4baestevel display_sbbc_softstate_t
03831d35f7499c87d51205817c93e9a8d42c4baestevel }, { NULL }
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstatic const mdb_modinfo_t modinfo = {
03831d35f7499c87d51205817c93e9a8d42c4baestevel MDB_API_VERSION, dcmds, NULL
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelconst mdb_modinfo_t *
03831d35f7499c87d51205817c93e9a8d42c4baestevel_mdb_init(void)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (&modinfo);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}