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 2004 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _SYS_SSM_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _SYS_SSM_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/types.h> /* needed by <sys/dditypes.h> */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/dditypes.h> /* needed for definition of dev_info_t */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/mutex.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ssm soft state macros: IIIIMMMM
03831d35f7499c87d51205817c93e9a8d42c4baestevel * instance-minor no
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_INSTANCE_SHIFT 4
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_BOARD_MASK 0xff
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct ssm_soft_state {
03831d35f7499c87d51205817c93e9a8d42c4baestevel dev_info_t *dip; /* own dev info */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ssm_nodeid; /* node id */
03831d35f7499c87d51205817c93e9a8d42c4baestevel dev_info_t *top_node;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int initialized; /* instance has been initialized */
03831d35f7499c87d51205817c93e9a8d42c4baestevel kmutex_t ssm_sft_lock; /* protects this struct */
03831d35f7499c87d51205817c93e9a8d42c4baestevel ddi_iblock_cookie_t ssm_fm_ibc; /* returned ibc from our parent */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ssm_fm_cap; /* our fm capability */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel int instance; /* instance for this wildcat node */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int wnode; /* node num */
03831d35f7499c87d51205817c93e9a8d42c4baestevel} ssm_sbdp_info_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * useful debugging stuff
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_ATTACH_DEBUG 0x0002
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_CTLOPS_DEBUG 0x0004
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_EVENT_DEBUG 0x0008
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _SSM_IOCTL (('m' << 16) | ('p' << 8))
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SSM_TEARDOWN_SBD (_SSM_IOCTL | 0x1)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef DEBUG
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define CMD2EVNT(m) ((m) == SGDR_BD_ABSENT ? SG_EVT_BOARD_ABSENT : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_BD_PRESENT ? SG_EVT_BOARD_PRESENT :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_UNASSIGN ? SG_EVT_UNASSIGN : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_ASSIGN ? SG_EVT_ASSIGN : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_UNAVAILABLE ? SG_EVT_UNAVAILABLE :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_AVAILABLE ? SG_EVT_AVAILABLE : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_POWER_OFF ? SG_EVT_POWER_OFF : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_POWER_ON ? SG_EVT_POWER_ON : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_PASSED_TEST ? SG_EVT_PASSED_TEST :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel (m) == SGDR_FAILED_TEST ? SG_EVT_FAILED_TEST :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel 0)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define EVNT2STR(c) ((c) == SG_EVT_BOARD_ABSENT ? "board_absent" :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_BOARD_PRESENT ? "board_present" :\
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_UNASSIGN ? "unassign" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_ASSIGN ? "assign" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_UNAVAILABLE ? "unavailable" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_AVAILABLE ? "available" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_POWER_OFF ? "power_off" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_POWER_ON ? "power_on" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_PASSED_TEST ? "passed_test" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (c) == SG_EVT_FAILED_TEST ? "failed_test" : \
03831d35f7499c87d51205817c93e9a8d42c4baestevel NULL)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _SYS_SSM_H */