usr/src/uts/sun4u/sys/sbbcvar.h
author arutz
Fri, 11 Aug 2006 13:07:51 -0700
changeset 2536 e191a5109949
parent 0 68f95e015346
permissions -rw-r--r--
6265742 sbbc driver maps register space like it's going out of style
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2536
e191a5109949 6265742 sbbc driver maps register space like it's going out of style
arutz
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
e191a5109949 6265742 sbbc driver maps register space like it's going out of style
arutz
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
2536
e191a5109949 6265742 sbbc driver maps register space like it's going out of style
arutz
parents: 0
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef	_SYS_SBBCVAR_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_SYS_SBBCVAR_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
typedef struct sbbc_intr_map {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
	uint32_t sbbc_phys_hi;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
	uint32_t sbbc_phys_mid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
	uint32_t sbbc_phys_low;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
	uint32_t sbbc_intr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
	uint32_t intr_ctlr_nodeid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
	uint32_t ino;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
}sbbc_intr_map_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
struct sbbc_intr_map_mask {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
	uint32_t sbbc_phys_hi;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
	uint32_t sbbc_phys_mid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
	uint32_t sbbc_phys_low;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
	uint32_t sbbc_intr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
/* sbbc intrspec for initializing its children. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
struct sbbc_intrspec {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
	struct intrspec intr_spec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
	dev_info_t *dip;		/* Interrupt parent dip */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
	uint32_t intr;			/* for lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
 * definition of sbbc child reg spec entry:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
	uint32_t addr_hi;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	uint32_t addr_low;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	uint32_t size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
} sbbc_child_regspec_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
/* SBBC range entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
typedef struct sbbc_pci_rangespec {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	uint32_t sbbc_phys_hi;		/* Child hi range address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	uint32_t sbbc_phys_low;		/* Child low range address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	uint32_t pci_phys_hi;		/* Parent hi rng addr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	uint32_t pci_phys_mid;		/* Parent mid rng addr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	uint32_t pci_phys_low;		/* Parent low rng addr */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	uint32_t rng_size;		/* Range size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
} sbbc_pci_rangespec_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
typedef int procid_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
/* Max. SBBC devices/children */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
#define	MAX_SBBC_DEVICES	3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
/* Only used for fixed or legacy interrupts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
#define	SBBC_INTR_STATE_DISABLE	0	/* disabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
#define	SBBC_INTR_STATE_ENABLE	1	/* enabled */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
typedef struct sbbc_child_intr {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	char *name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	uint_t inum;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	uint_t status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	uint_t (*intr_handler)();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	caddr_t arg1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	caddr_t	arg2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
} sbbc_child_intr_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
typedef struct sbbcsoft {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	int instance;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	int oflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	uint_t myinumber;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	dev_info_t *dip;			/* device information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	pci_regspec_t *reg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	int nreg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	sbbc_pci_rangespec_t *rangep;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	int range_cnt;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	int range_len;
2536
e191a5109949 6265742 sbbc driver maps register space like it's going out of style
arutz
parents: 0
diff changeset
   105
	struct sbbc_regs_map *pci_sbbc_map;	/* SBBC Internal Registers */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
	ddi_acc_handle_t pci_sbbc_map_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	ddi_iblock_cookie_t sbbc_iblock_cookie; /* interrupt block cookie */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	kmutex_t sbbc_intr_mutex;		/* lock for interrupts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	sbbc_child_intr_t *child_intr[MAX_SBBC_DEVICES]; /* intr per device */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	boolean_t suspended;			/* TRUE if driver suspended */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	kmutex_t umutex;			/* lock for this structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
} sbbcsoft_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
#define	TRUE		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
#define	FALSE		0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
#if defined(DEBUG)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
#define	SBBC_DBG_ATTACH		0x1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
#define	SBBC_DBG_DETACH		0x2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
#define	SBBC_DBG_CTLOPS		0x4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
#define	SBBC_DBG_INITCHILD	0x8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
#define	SBBC_DBG_UNINITCHILD	0x10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
#define	SBBC_DBG_BUSMAP		0x20
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
#define	SBBC_DBG_INTR		0x40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
#define	SBBC_DBG_PCICONF	0x80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
#define	SBBC_DBG_MAPRANGES	0x100
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
#define	SBBC_DBG_PROPERTIES	0x200
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
#define	SBBC_DBG_OPEN		0x400
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
#define	SBBC_DBG_CLOSE		0x800
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
#define	SBBC_DBG_IOCTL		0x1000
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
#define	SBBC_DBG_INTROPS	0x2000
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
#define	SBBC_DBG0(flag, dip, fmt) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
	sbbc_dbg(flag, dip, fmt, 0, 0, 0, 0, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
#define	SBBC_DBG1(flag, dip, fmt, a1) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	sbbc_dbg(flag, dip, fmt, (uintptr_t)(a1), 0, 0, 0, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
#define	SBBC_DBG2(flag, dip, fmt, a1, a2) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	sbbc_dbg(flag, dip, fmt, (uintptr_t)(a1), (uintptr_t)(a2), 0, 0, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
#define	SBBC_DBG3(flag, dip, fmt, a1, a2, a3) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	sbbc_dbg(flag, dip, fmt, (uintptr_t)(a1), (uintptr_t)(a2), \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
		(uintptr_t)(a3), 0, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
#define	SBBC_DBG4(flag, dip, fmt, a1, a2, a3, a4) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	sbbc_dbg(flag, dip, fmt, (uintptr_t)(a1), (uintptr_t)(a2), \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
		(uintptr_t)(a3), (uintptr_t)(a4), 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
#define	SBBC_DBG5(flag, dip, fmt, a1, a2, a3, a4, a5) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	sbbc_dbg(flag, dip, fmt, (uintptr_t)(a1), (uintptr_t)(a2), \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
		(uintptr_t)(a3), (uintptr_t)(a4), (uintptr_t)(a5));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
#else /* DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
#define	SBBC_DBG0(flag, dip, fmt)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
#define	SBBC_DBG1(flag, dip, fmt, a1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
#define	SBBC_DBG2(flag, dip, fmt, a1, a2)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
#define	SBBC_DBG3(flag, dip, fmt, a1, a2, a3)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
#define	SBBC_DBG4(flag, dip, fmt, a1, a2, a3, a4)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	SBBC_DBG5(flag, dip, fmt, a1, a2, a3, a4, a5)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
#endif /* DEBUG */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
/* debugging flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
 * To enable tracing, uncomment this line:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
 * #define	SBBC_TRACE	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
#if defined(SBBC_TRACE)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
#ifndef NSBBCTRACE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
#define	NSBBCTRACE	1024
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
struct sbbctrace {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	int count;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	int function;		/* address of function */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	int trace_action;	/* descriptive 4 characters */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	int object;		/* object operated on */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
 * For debugging, allocate space for the trace buffer
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
extern struct sbbctrace sbbctrace_buffer[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
extern struct sbbctrace *sbbctrace_ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
extern int sbbctrace_count;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
#define	SBBCTRACEINIT() {				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	if (sbbctrace_ptr == NULL)		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
		sbbctrace_ptr = sbbctrace_buffer; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
#define	LOCK_TRACE()	(uint_t)ddi_enter_critical()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
#define	UNLOCK_TRACE(x)	ddi_exit_critical((uint_t)x)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
#define	SBBCTRACE(func, act, obj) {		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
	int __s = LOCK_TRACE();			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	int *_p = &sbbctrace_ptr->count;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
	*_p++ = ++sbbctrace_count;		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	*_p++ = (int)(func);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	*_p++ = (int)(act);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	*_p++ = (int)(obj);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	if ((struct sbbctrace *)(void *)_p >= &sbbctrace_buffer[NSBBCTRACE])\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
		sbbctrace_ptr = sbbctrace_buffer; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	else					\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
		sbbctrace_ptr = (struct sbbctrace *)(void *)_p; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	UNLOCK_TRACE(__s);			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
#else	/* !SBBC_TRACE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
/* If no tracing, define no-ops */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
#define	SBBCTRACEINIT()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
#define	SBBCTRACE(a, b, c)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
#endif	/* !SBBC_TRACE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
#endif	/* _SYS_SBBCVAR_H */