ssm.h revision 03831d35f7499c87d51205817c93e9a8d42c4bae
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_SSM_H
#define _SYS_SSM_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h> /* needed by <sys/dditypes.h> */
#include <sys/dditypes.h> /* needed for definition of dev_info_t */
#include <sys/mutex.h>
/*
* ssm soft state macros: IIIIMMMM
* instance-minor no
*/
#define SSM_INSTANCE_SHIFT 4
#define SSM_BOARD_MASK 0xff
struct ssm_soft_state {
dev_info_t *dip; /* own dev info */
int ssm_nodeid; /* node id */
dev_info_t *top_node;
int initialized; /* instance has been initialized */
kmutex_t ssm_sft_lock; /* protects this struct */
ddi_iblock_cookie_t ssm_fm_ibc; /* returned ibc from our parent */
int ssm_fm_cap; /* our fm capability */
};
typedef struct {
int instance; /* instance for this wildcat node */
int wnode; /* node num */
} ssm_sbdp_info_t;
/*
* useful debugging stuff
*/
#define SSM_ATTACH_DEBUG 0x0002
#define SSM_CTLOPS_DEBUG 0x0004
#define SSM_EVENT_DEBUG 0x0008
#define _SSM_IOCTL (('m' << 16) | ('p' << 8))
#define SSM_TEARDOWN_SBD (_SSM_IOCTL | 0x1)
#ifdef DEBUG
#define CMD2EVNT(m) ((m) == SGDR_BD_ABSENT ? SG_EVT_BOARD_ABSENT : \
(m) == SGDR_BD_PRESENT ? SG_EVT_BOARD_PRESENT :\
(m) == SGDR_UNASSIGN ? SG_EVT_UNASSIGN : \
(m) == SGDR_ASSIGN ? SG_EVT_ASSIGN : \
(m) == SGDR_UNAVAILABLE ? SG_EVT_UNAVAILABLE :\
(m) == SGDR_AVAILABLE ? SG_EVT_AVAILABLE : \
(m) == SGDR_POWER_OFF ? SG_EVT_POWER_OFF : \
(m) == SGDR_POWER_ON ? SG_EVT_POWER_ON : \
(m) == SGDR_PASSED_TEST ? SG_EVT_PASSED_TEST :\
(m) == SGDR_FAILED_TEST ? SG_EVT_FAILED_TEST :\
0)
#define EVNT2STR(c) ((c) == SG_EVT_BOARD_ABSENT ? "board_absent" :\
(c) == SG_EVT_BOARD_PRESENT ? "board_present" :\
(c) == SG_EVT_UNASSIGN ? "unassign" : \
(c) == SG_EVT_ASSIGN ? "assign" : \
(c) == SG_EVT_UNAVAILABLE ? "unavailable" : \
(c) == SG_EVT_AVAILABLE ? "available" : \
(c) == SG_EVT_POWER_OFF ? "power_off" : \
(c) == SG_EVT_POWER_ON ? "power_on" : \
(c) == SG_EVT_PASSED_TEST ? "passed_test" : \
(c) == SG_EVT_FAILED_TEST ? "failed_test" : \
NULL)
#endif
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SSM_H */