autoconf.h revision 269473047d747f7815af570197e4ef7322d3632c
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * CDDL HEADER START
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * The contents of this file are subject to the terms of the
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Common Development and Distribution License (the "License").
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * You may not use this file except in compliance with the License.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * or http://www.opensolaris.org/os/licensing.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * See the License for the specific language governing permissions
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * and limitations under the License.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * When distributing Covered Code, include this CDDL HEADER in each
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * If applicable, add the following below this CDDL HEADER, with the
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * fields enclosed by brackets "[]" replaced with your own identifying
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * information: Portions Copyright [yyyy] [name of copyright owner]
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * CDDL HEADER END
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Use is subject to license terms.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW/* Derived from autoconf.h, SunOS 4.1.1 1.15 */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * This defines a parallel structure to the devops list.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW char *dn_name; /* Name of this driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW int dn_flags; /* per-driver flags, see below */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW struct par_list *dn_pl; /* parent list, for making devinfos */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW kmutex_t dn_lock; /* Per driver lock (see below) */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW dev_info_t *dn_head; /* Head of instance list */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW int dn_instance; /* Next instance no. to assign */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW void *dn_inlist; /* instance # nodes for this driver */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter ddi_prop_list_t *dn_global_prop_ptr; /* per-driver global properties */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter kcondvar_t dn_wait; /* for ddi_hold_installed_driver */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter kthread_id_t dn_busy_thread; /* for debugging only */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter struct mperm *dn_mperm; /* minor permissions */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter struct mperm *dn_mperm_wild; /* default minor permission */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter struct mperm *dn_mperm_clone; /* minor permission, clone use */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * dn_lock is used to protect the driver initialization/loading
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * from fini/unloading. It also protects each drivers devops
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * reference count, the dn_flags, and the dn_head linked list of
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * driver instances. The busy_changing bit is used to avoid
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * recursive calls to ddi_hold_installed_driver to hold the
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * same driver.
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter * Defines for dn_flags.
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define DN_DRIVER_BUSY 0x0002 /* for ddi_hold_installed_driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_DRIVER_INACTIVE 0x0004 /* driver not active */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_DRIVER_HELD 0x0020 /* held via ddi_hold_installed_driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_TAKEN_GETUDEV 0x0040 /* getudev() used this entry */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_DRIVER_REMOVED 0x0080 /* driver entry removed */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_FORCE_ATTACH 0x0100 /* DDI_FORCEATTACH prop */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_LEAF_DRIVER 0x0200 /* this is a leaf driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_NETWORK_DRIVER 0x0400 /* network interface driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_NO_AUTODETACH 0x0800 /* no autodetach */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_GLDV3_DRIVER 0x1000 /* gldv3 (Nemo) driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_PHCI_DRIVER 0x2000 /* pHCI driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_OPEN_RETURNS_EINTR 0x4000 /* DDI_OPEN_RETURNS_EINTR prop */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_SCSI_SIZE_CLEAN 0x8000 /* driver is scsi_size_clean() */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DN_NETWORK_PHYSDRIVER 0x10000 /* physical network driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Debugging flags and macros
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_DEBUG_BOOTMOD 0x0008 /* module loading to mount root */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_DEBUG_COMPAT 0x0010 /* ddi_hold_install_driver */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_DBG_OPENCLOSE 0x0020 /* ldi open/close info */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_DBG_ALLOCFREE 0x0040 /* ldi ident alloc/free info */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_DBG_STREAMS 0x0080 /* ldi streams link/unlink */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_DBG_EVENTCB 0x0100 /* ldi event callback info */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_API 0x0200 /* interrupt interface messages */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_IMPL 0x0400 /* interrupt implementation msgs */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_NEXUS 0x0800 /* interrupt messages from nexuses */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_DBG_RETIRE 0x1000 /* Retire related messages */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_DBG_RTR_VRBOSE 0x2000 /* Verbose Retire messages */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_DBG_RTR_TRACE 0x4000 /* Trace Retire messages */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define LDI_EV_DEBUG 0x8000 /* LDI events debug messages */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define LDI_EV_TRACE 0x10000 /* LDI events trace messages */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define DDI_INTR_IRM 0x20000 /* interrupt resource management */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define DDI_HP_API 0x40000 /* Hotplug interface messages */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter#define DDI_HP_IMPL 0x80000 /* Hotplug implementation msgs */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_HP_NEXUS 0x100000 /* Hotplug messages from nexuses */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define NDI_CONFIG_DEBUG(args) if (ddidebug & DDI_DEBUG) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define BMDPRINTF(args) if (ddidebug & DDI_DEBUG_BOOTMOD) printf args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DCOMPATPRINTF(args) if (ddidebug & DDI_DEBUG_COMPAT) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_OPENCLOSE(args) if (ddidebug & LDI_DBG_OPENCLOSE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_ALLOCFREE(args) if (ddidebug & LDI_DBG_ALLOCFREE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_STREAMS_LNK(args) if (ddidebug & LDI_DBG_STREAMS) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_EVENTCB(args) if (ddidebug & LDI_DBG_EVENTCB) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_APIDBG(args) if (ddidebug & DDI_INTR_API) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_IMPLDBG(args) if (ddidebug & DDI_INTR_IMPL) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_NEXDBG(args) if (ddidebug & DDI_INTR_NEXUS) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define RIO_DEBUG(args) if (ddidebug & DDI_DBG_RETIRE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define RIO_VERBOSE(args) if (ddidebug & DDI_DBG_RTR_VRBOSE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define RIO_TRACE(args) if (ddidebug & DDI_DBG_RTR_TRACE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_EVDBG(args) if (ddidebug & LDI_EV_DEBUG) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_EVTRC(args) if (ddidebug & LDI_EV_TRACE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_INTR_IRMDBG(args) if (ddidebug & DDI_INTR_IRM) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_HP_APIDBG(args) if (ddidebug & DDI_HP_API) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_HP_IMPLDBG(args) if (ddidebug & DDI_HP_IMPL) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DDI_HP_NEXDBG(args) if (ddidebug & DDI_HP_NEXUS) cmn_err args
7ff178cd8db129d385d3177eb20744d3b6efc59bJimmy Vetayases#define RIO_DEBUG(args) if (ddidebug & DDI_DBG_RETIRE) cmn_err args
7ff178cd8db129d385d3177eb20744d3b6efc59bJimmy Vetayases#define RIO_VERBOSE(args) if (ddidebug & DDI_DBG_RTR_VRBOSE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define RIO_TRACE(args) if (ddidebug & DDI_DBG_RTR_TRACE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_EVDBG(args) if (ddidebug & LDI_EV_DEBUG) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LDI_EVTRC(args) if (ddidebug & LDI_EV_TRACE) cmn_err args
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * DDI configuration logs
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Cartertypedef struct devinfo_audit {
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter dev_info_t *da_devinfo; /* address of devinfo node */
b285fe3084109ad5540fb5940547fb30561fdfd9Scott M. Carter kthread_id_t da_thread; /* thread of transaction */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW struct devinfo_audit *da_lastlog; /* last log of state change */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW ddi_node_state_t da_node_state; /* devinfo state at log time */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW int da_device_state; /* device state */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSWtypedef struct {
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW uint32_t cache_valid; /* no lock needed - field atomic updt */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW kmutex_t cache_lock; /* protects fields below */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Special dev_info nodes
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define PSEUDO_PATH "/"DEVI_PSEUDO_NEXNAME
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define CLONE_PATH PSEUDO_PATH"/clone@0"
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DI_CACHE_FILE "/etc/devices/snapshot_cache"
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DI_CACHE_TEMP DI_CACHE_FILE".tmp"
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSWextern struct dev_ops nodev_ops, mod_nodev_ops;
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Obsolete interface, no longer used, to be removed.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Retained only for driver compatibility.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSWextern krwlock_t devinfo_tree_lock; /* obsolete */
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Acquires dn_lock, as above.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define LOCK_DEV_OPS(lp) mutex_enter((lp))
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define UNLOCK_DEV_OPS(lp) mutex_exit((lp))
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW * Not to be used without obtaining the per-driver lock.
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define INCR_DEV_OPS_REF(opsp) (opsp)->devo_refcnt++
5febcb4a56e199202aba97f9cf96d32cc0480a1fScott Carter, SD IOSW#define DECR_DEV_OPS_REF(opsp) (opsp)->devo_refcnt--
extern void add_class(char *, char *);
extern void configure(void);
#if defined(__sparc)
extern void setcputype(void);
extern void devtree_freeze(void);
extern void reset_leaves(void);
extern void setup_ddi(void);
extern void setup_ddi_poststartup(void);
extern void impl_ddi_callback_init(void);
extern int exclude_settrap(int);
extern int exclude_level(int);
extern void i_ddi_node_cache_init(void);
ddi_prop_t *, int);
extern void i_ddi_forceattach_drivers(void);
extern int i_ddi_io_initialized(void);
extern void i_ddi_di_cache_invalidate(void);
extern int i_ddi_sysavail(void);
extern int i_ddi_reconfig(void);
extern void i_ddi_set_sysavail(void);
extern void i_ddi_set_reconfig(void);
#ifdef __cplusplus