xref: /onnv-gate/usr/src/uts/common/sys/autoconf.h (revision 12701:8c9362e17ee4)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
51993Sramat  * Common Development and Distribution License (the "License").
61993Sramat  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
2212288SChris.Horne@Sun.COM  * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
230Sstevel@tonic-gate  */
240Sstevel@tonic-gate 
250Sstevel@tonic-gate #ifndef _SYS_AUTOCONF_H
260Sstevel@tonic-gate #define	_SYS_AUTOCONF_H
270Sstevel@tonic-gate 
280Sstevel@tonic-gate /* Derived from autoconf.h, SunOS 4.1.1 1.15 */
290Sstevel@tonic-gate 
300Sstevel@tonic-gate #ifdef	__cplusplus
310Sstevel@tonic-gate extern "C" {
320Sstevel@tonic-gate #endif
330Sstevel@tonic-gate 
340Sstevel@tonic-gate /*
350Sstevel@tonic-gate  * This defines a parallel structure to the devops list.
360Sstevel@tonic-gate  */
370Sstevel@tonic-gate 
380Sstevel@tonic-gate #include <sys/dditypes.h>
390Sstevel@tonic-gate #include <sys/devops.h>
400Sstevel@tonic-gate #include <sys/mutex.h>
410Sstevel@tonic-gate #include <sys/thread.h>
420Sstevel@tonic-gate #include <sys/obpdefs.h>
430Sstevel@tonic-gate #include <sys/systm.h>
448831SJerry.Gilliam@Sun.COM #include <sys/hwconf.h>
450Sstevel@tonic-gate 
460Sstevel@tonic-gate struct devnames {
470Sstevel@tonic-gate 	char		*dn_name;	/* Name of this driver */
480Sstevel@tonic-gate 	int		dn_flags;	/* per-driver flags, see below */
490Sstevel@tonic-gate 	struct par_list	*dn_pl;		/* parent list, for making devinfos */
500Sstevel@tonic-gate 	kmutex_t	dn_lock;	/* Per driver lock (see below) */
510Sstevel@tonic-gate 	dev_info_t	*dn_head;	/* Head of instance list */
520Sstevel@tonic-gate 	int		dn_instance;	/* Next instance no. to assign */
530Sstevel@tonic-gate 	void		*dn_inlist;	/* instance # nodes for this driver */
540Sstevel@tonic-gate 	ddi_prop_list_t	*dn_global_prop_ptr; /* per-driver global properties */
550Sstevel@tonic-gate 	kcondvar_t	dn_wait;	/* for ddi_hold_installed_driver */
560Sstevel@tonic-gate 	kthread_id_t	dn_busy_thread;	/* for debugging only */
570Sstevel@tonic-gate 	struct mperm	*dn_mperm;	/* minor permissions */
580Sstevel@tonic-gate 	struct mperm	*dn_mperm_wild;	/* default minor permission */
590Sstevel@tonic-gate 	struct mperm	*dn_mperm_clone; /* minor permission, clone use */
6012288SChris.Horne@Sun.COM 	int		dn_pinstance;	/* Preassign instance boundary */
610Sstevel@tonic-gate };
620Sstevel@tonic-gate 
630Sstevel@tonic-gate /*
640Sstevel@tonic-gate  * dn_lock is used to protect the driver initialization/loading
650Sstevel@tonic-gate  * from fini/unloading. It also protects each drivers devops
660Sstevel@tonic-gate  * reference count, the dn_flags, and the dn_head linked list of
670Sstevel@tonic-gate  * driver instances. The busy_changing bit is used to avoid
680Sstevel@tonic-gate  * recursive calls to ddi_hold_installed_driver to hold the
690Sstevel@tonic-gate  * same driver.
700Sstevel@tonic-gate  */
710Sstevel@tonic-gate 
720Sstevel@tonic-gate /*
730Sstevel@tonic-gate  * Defines for dn_flags.
740Sstevel@tonic-gate  */
750Sstevel@tonic-gate #define	DN_CONF_PARSED		0x0001
760Sstevel@tonic-gate #define	DN_DRIVER_BUSY		0x0002	/* for ddi_hold_installed_driver */
7710842SJerry.Gilliam@Sun.COM #define	DN_DRIVER_INACTIVE	0x0004	/* driver not active */
780Sstevel@tonic-gate #define	DN_DRIVER_HELD		0x0020	/* held via ddi_hold_installed_driver */
790Sstevel@tonic-gate #define	DN_TAKEN_GETUDEV	0x0040	/* getudev() used this entry */
800Sstevel@tonic-gate #define	DN_DRIVER_REMOVED	0x0080	/* driver entry removed */
810Sstevel@tonic-gate 
824452Scth #define	DN_FORCE_ATTACH		0x0100	/* DDI_FORCEATTACH prop */
830Sstevel@tonic-gate #define	DN_LEAF_DRIVER		0x0200	/* this is a leaf driver */
840Sstevel@tonic-gate #define	DN_NETWORK_DRIVER	0x0400	/* network interface driver */
850Sstevel@tonic-gate #define	DN_NO_AUTODETACH	0x0800	/* no autodetach */
860Sstevel@tonic-gate #define	DN_GLDV3_DRIVER		0x1000	/* gldv3 (Nemo) driver */
871993Sramat #define	DN_PHCI_DRIVER		0x2000	/* pHCI driver */
884452Scth #define	DN_OPEN_RETURNS_EINTR	0x4000	/* DDI_OPEN_RETURNS_EINTR prop */
896640Scth #define	DN_SCSI_SIZE_CLEAN	0x8000	/* driver is scsi_size_clean() */
9010788SCathy.Zhou@Sun.COM #define	DN_NETWORK_PHYSDRIVER	0x10000	/* physical network driver */
9112660SJerry.Gilliam@Sun.COM #define	DN_DEVID_REGISTRANT	0x20000	/* ddi-devid-registrant prop */
920Sstevel@tonic-gate 
930Sstevel@tonic-gate #ifdef _KERNEL
940Sstevel@tonic-gate 
950Sstevel@tonic-gate /*
960Sstevel@tonic-gate  * Debugging flags and macros
970Sstevel@tonic-gate  */
980Sstevel@tonic-gate #define	DDI_AUDIT		0x0001
990Sstevel@tonic-gate #define	DDI_DEBUG		0x0002
1000Sstevel@tonic-gate #define	DDI_MTCONFIG		0x0004
1010Sstevel@tonic-gate #define	DDI_DEBUG_BOOTMOD	0x0008	/* module loading to mount root */
1020Sstevel@tonic-gate #define	DDI_DEBUG_COMPAT	0x0010	/* ddi_hold_install_driver */
1030Sstevel@tonic-gate #define	LDI_DBG_OPENCLOSE	0x0020	/* ldi open/close info */
1040Sstevel@tonic-gate #define	LDI_DBG_ALLOCFREE	0x0040	/* ldi ident alloc/free info */
1050Sstevel@tonic-gate #define	LDI_DBG_STREAMS		0x0080	/* ldi streams link/unlink */
1060Sstevel@tonic-gate #define	LDI_DBG_EVENTCB		0x0100	/* ldi event callback info */
1070Sstevel@tonic-gate #define	DDI_INTR_API		0x0200	/* interrupt interface messages  */
1080Sstevel@tonic-gate #define	DDI_INTR_IMPL		0x0400	/* interrupt implementation msgs */
1090Sstevel@tonic-gate #define	DDI_INTR_NEXUS		0x0800	/* interrupt messages from nexuses */
1104845Svikram #define	DDI_DBG_RETIRE		0x1000	/* Retire related messages */
1114845Svikram #define	DDI_DBG_RTR_VRBOSE	0x2000	/* Verbose Retire messages */
1124845Svikram #define	DDI_DBG_RTR_TRACE	0x4000	/* Trace Retire messages */
1134845Svikram #define	LDI_EV_DEBUG		0x8000  /* LDI events debug messages */
1144845Svikram #define	LDI_EV_TRACE		0x10000 /* LDI events trace messages */
1158561SScott.Carter@Sun.COM #define	DDI_INTR_IRM		0x20000 /* interrupt resource management */
11610923SEvan.Yan@Sun.COM #define	DDI_HP_API		0x40000	/* Hotplug interface messages  */
11710923SEvan.Yan@Sun.COM #define	DDI_HP_IMPL		0x80000	/* Hotplug implementation msgs */
11810923SEvan.Yan@Sun.COM #define	DDI_HP_NEXUS		0x100000 /* Hotplug messages from nexuses */
119*12701SJan.Setje-Eilers@Sun.COM #define	DDI_MP_DEBUG		0x200000 /* ddi-mp translations */
1200Sstevel@tonic-gate 
1210Sstevel@tonic-gate extern int ddidebug;
1220Sstevel@tonic-gate 
1230Sstevel@tonic-gate #ifdef	DEBUG
1240Sstevel@tonic-gate #define	NDI_CONFIG_DEBUG(args)	if (ddidebug & DDI_DEBUG) cmn_err args
1250Sstevel@tonic-gate #define	BMDPRINTF(args)		if (ddidebug & DDI_DEBUG_BOOTMOD) printf args
1260Sstevel@tonic-gate #define	DCOMPATPRINTF(args)	if (ddidebug & DDI_DEBUG_COMPAT) cmn_err args
1270Sstevel@tonic-gate #define	LDI_OPENCLOSE(args)	if (ddidebug & LDI_DBG_OPENCLOSE) cmn_err args
1280Sstevel@tonic-gate #define	LDI_ALLOCFREE(args)	if (ddidebug & LDI_DBG_ALLOCFREE) cmn_err args
1290Sstevel@tonic-gate #define	LDI_STREAMS_LNK(args)	if (ddidebug & LDI_DBG_STREAMS) cmn_err args
1300Sstevel@tonic-gate #define	LDI_EVENTCB(args)	if (ddidebug & LDI_DBG_EVENTCB) cmn_err args
1310Sstevel@tonic-gate #define	DDI_INTR_APIDBG(args)	if (ddidebug & DDI_INTR_API) cmn_err args
1320Sstevel@tonic-gate #define	DDI_INTR_IMPLDBG(args)	if (ddidebug & DDI_INTR_IMPL) cmn_err args
1330Sstevel@tonic-gate #define	DDI_INTR_NEXDBG(args)	if (ddidebug & DDI_INTR_NEXUS) cmn_err args
1344845Svikram #define	RIO_DEBUG(args)		if (ddidebug & DDI_DBG_RETIRE) cmn_err args
1354845Svikram #define	RIO_VERBOSE(args)	if (ddidebug & DDI_DBG_RTR_VRBOSE) cmn_err args
1364845Svikram #define	RIO_TRACE(args)		if (ddidebug & DDI_DBG_RTR_TRACE) cmn_err args
1374845Svikram #define	LDI_EVDBG(args)		if (ddidebug & LDI_EV_DEBUG) cmn_err args
1384845Svikram #define	LDI_EVTRC(args)		if (ddidebug & LDI_EV_TRACE) cmn_err args
1398561SScott.Carter@Sun.COM #define	DDI_INTR_IRMDBG(args)	if (ddidebug & DDI_INTR_IRM) cmn_err args
14010923SEvan.Yan@Sun.COM #define	DDI_HP_APIDBG(args)	if (ddidebug & DDI_HP_API) cmn_err args
14110923SEvan.Yan@Sun.COM #define	DDI_HP_IMPLDBG(args)	if (ddidebug & DDI_HP_IMPL) cmn_err args
14210923SEvan.Yan@Sun.COM #define	DDI_HP_NEXDBG(args)	if (ddidebug & DDI_HP_NEXUS) cmn_err args
1430Sstevel@tonic-gate #else
1440Sstevel@tonic-gate #define	NDI_CONFIG_DEBUG(args)
1450Sstevel@tonic-gate #define	BMDPRINTF(args)
1460Sstevel@tonic-gate #define	DCOMPATPRINTF(args)
1470Sstevel@tonic-gate #define	LDI_OPENCLOSE(args)
1480Sstevel@tonic-gate #define	LDI_ALLOCFREE(args)
1490Sstevel@tonic-gate #define	LDI_STREAMS_LNK(args)
1500Sstevel@tonic-gate #define	LDI_EVENTCB(args)
1510Sstevel@tonic-gate #define	DDI_INTR_APIDBG(args)
1520Sstevel@tonic-gate #define	DDI_INTR_IMPLDBG(args)
1530Sstevel@tonic-gate #define	DDI_INTR_NEXDBG(args)
1544845Svikram #define	RIO_DEBUG(args)		if (ddidebug & DDI_DBG_RETIRE) cmn_err args
1554845Svikram #define	RIO_VERBOSE(args)	if (ddidebug & DDI_DBG_RTR_VRBOSE) cmn_err args
1564845Svikram #define	RIO_TRACE(args)		if (ddidebug & DDI_DBG_RTR_TRACE) cmn_err args
1574845Svikram #define	LDI_EVDBG(args)		if (ddidebug & LDI_EV_DEBUG) cmn_err args
1584845Svikram #define	LDI_EVTRC(args)		if (ddidebug & LDI_EV_TRACE) cmn_err args
1598561SScott.Carter@Sun.COM #define	DDI_INTR_IRMDBG(args)
16010923SEvan.Yan@Sun.COM #define	DDI_HP_APIDBG(args)
16110923SEvan.Yan@Sun.COM #define	DDI_HP_IMPLDBG(args)
16210923SEvan.Yan@Sun.COM #define	DDI_HP_NEXDBG(args)
1630Sstevel@tonic-gate #endif
164*12701SJan.Setje-Eilers@Sun.COM #define	DDI_MP_DBG(args)	if (ddidebug & DDI_MP_DEBUG) cmn_err args
1650Sstevel@tonic-gate 
1660Sstevel@tonic-gate 
1670Sstevel@tonic-gate /*
1680Sstevel@tonic-gate  * DDI configuration logs
1690Sstevel@tonic-gate  */
1700Sstevel@tonic-gate #define	DDI_STACK_DEPTH		14
1710Sstevel@tonic-gate 
1720Sstevel@tonic-gate typedef struct devinfo_audit {
1730Sstevel@tonic-gate 	dev_info_t		*da_devinfo;	/* address of devinfo node */
1740Sstevel@tonic-gate 	hrtime_t		da_timestamp;	/* audit time */
1750Sstevel@tonic-gate 	kthread_id_t		da_thread;	/* thread of transaction */
1760Sstevel@tonic-gate 	struct devinfo_audit	*da_lastlog;	/* last log of state change */
1770Sstevel@tonic-gate 	ddi_node_state_t	da_node_state;	/* devinfo state at log time */
1780Sstevel@tonic-gate 	int			da_device_state;	/* device state */
1790Sstevel@tonic-gate 	int			da_depth;
1800Sstevel@tonic-gate 	pc_t			da_stack[DDI_STACK_DEPTH];
1810Sstevel@tonic-gate } devinfo_audit_t;
1820Sstevel@tonic-gate 
1830Sstevel@tonic-gate typedef struct {
1840Sstevel@tonic-gate 	kmutex_t	dh_lock;
1850Sstevel@tonic-gate 	int		dh_max;
1860Sstevel@tonic-gate 	int		dh_curr;
1870Sstevel@tonic-gate 	int		dh_hits;
1880Sstevel@tonic-gate 	devinfo_audit_t	dh_entry[1];
1890Sstevel@tonic-gate } devinfo_log_header_t;
1900Sstevel@tonic-gate 
1910Sstevel@tonic-gate struct di_cache {
1920Sstevel@tonic-gate 	uint32_t	cache_valid;	/* no lock needed - field atomic updt */
1930Sstevel@tonic-gate 	kmutex_t	cache_lock;	/* protects fields below */
1940Sstevel@tonic-gate 	void		*cache_data;
1950Sstevel@tonic-gate 	size_t		cache_size;
1960Sstevel@tonic-gate };
1970Sstevel@tonic-gate 
1980Sstevel@tonic-gate extern struct di_cache di_cache;
1990Sstevel@tonic-gate extern int di_cache_debug;
2002621Sllai1 extern volatile ulong_t devtree_gen;
2010Sstevel@tonic-gate 
2020Sstevel@tonic-gate /*
2030Sstevel@tonic-gate  * Special dev_info nodes
2040Sstevel@tonic-gate  */
2050Sstevel@tonic-gate #define	PSEUDO_PATH	"/"DEVI_PSEUDO_NEXNAME
2060Sstevel@tonic-gate #define	CLONE_PATH	PSEUDO_PATH"/clone@0"
2070Sstevel@tonic-gate 
2080Sstevel@tonic-gate #define	DI_CACHE_FILE	"/etc/devices/snapshot_cache"
2090Sstevel@tonic-gate #define	DI_CACHE_TEMP	DI_CACHE_FILE".tmp"
2100Sstevel@tonic-gate 
2110Sstevel@tonic-gate extern dev_info_t *options_dip;
2120Sstevel@tonic-gate extern dev_info_t *pseudo_dip;
2130Sstevel@tonic-gate extern dev_info_t *clone_dip;
2140Sstevel@tonic-gate extern major_t clone_major;
2150Sstevel@tonic-gate extern major_t mm_major;
2168011SChris.Horne@Sun.COM extern major_t nulldriver_major;
2170Sstevel@tonic-gate 
2180Sstevel@tonic-gate extern struct devnames *devnamesp;
2190Sstevel@tonic-gate extern struct devnames orphanlist;
2200Sstevel@tonic-gate 
2210Sstevel@tonic-gate extern struct dev_ops nodev_ops, mod_nodev_ops;
2220Sstevel@tonic-gate 
2230Sstevel@tonic-gate /*
2240Sstevel@tonic-gate  * Obsolete interface, no longer used, to be removed.
2250Sstevel@tonic-gate  * Retained only for driver compatibility.
2260Sstevel@tonic-gate  */
2270Sstevel@tonic-gate extern krwlock_t devinfo_tree_lock;		/* obsolete */
2280Sstevel@tonic-gate 
2290Sstevel@tonic-gate /*
2300Sstevel@tonic-gate  * Acquires dn_lock, as above.
2310Sstevel@tonic-gate  */
2320Sstevel@tonic-gate #define	LOCK_DEV_OPS(lp)	mutex_enter((lp))
2330Sstevel@tonic-gate #define	UNLOCK_DEV_OPS(lp)	mutex_exit((lp))
2340Sstevel@tonic-gate 
2350Sstevel@tonic-gate /*
2360Sstevel@tonic-gate  * Not to be used without obtaining the per-driver lock.
2370Sstevel@tonic-gate  */
2380Sstevel@tonic-gate #define	INCR_DEV_OPS_REF(opsp)	(opsp)->devo_refcnt++
2390Sstevel@tonic-gate #define	DECR_DEV_OPS_REF(opsp)	(opsp)->devo_refcnt--
2400Sstevel@tonic-gate #define	CB_DRV_INSTALLED(opsp)	((opsp) != &nodev_ops && \
2410Sstevel@tonic-gate 				(opsp) != &mod_nodev_ops)
2420Sstevel@tonic-gate #define	DRV_UNLOADABLE(opsp)	((opsp)->devo_refcnt == 0)
2430Sstevel@tonic-gate #define	DEV_OPS_HELD(opsp)	((opsp)->devo_refcnt > 0)
2440Sstevel@tonic-gate #define	NEXUS_DRV(opsp)		((opsp)->devo_bus_ops != NULL)
24510788SCathy.Zhou@Sun.COM #define	NETWORK_DRV(maj)	(devnamesp[(maj)].dn_flags & DN_NETWORK_DRIVER)
24610788SCathy.Zhou@Sun.COM #define	GLDV3_DRV(maj)		(devnamesp[(maj)].dn_flags & DN_GLDV3_DRIVER)
24710788SCathy.Zhou@Sun.COM #define	NETWORK_PHYSDRV(maj)	\
24810788SCathy.Zhou@Sun.COM 			(devnamesp[(maj)].dn_flags & DN_NETWORK_PHYSDRIVER)
2490Sstevel@tonic-gate 
2500Sstevel@tonic-gate extern void impl_rem_dev_props(dev_info_t *);
2510Sstevel@tonic-gate extern void add_class(char *, char *);
2520Sstevel@tonic-gate 
2530Sstevel@tonic-gate extern int make_mbind(char *, int, char *, struct bind **);
2540Sstevel@tonic-gate extern void delete_mbind(char *, struct bind **);
2558831SJerry.Gilliam@Sun.COM extern void purge_mbind(int, struct bind **);
2560Sstevel@tonic-gate 
2570Sstevel@tonic-gate extern void configure(void);
2580Sstevel@tonic-gate #if defined(__sparc)
2590Sstevel@tonic-gate extern void setcputype(void);
2600Sstevel@tonic-gate #endif
2610Sstevel@tonic-gate extern void devtree_freeze(void);
2620Sstevel@tonic-gate extern void reset_leaves(void);
2637656SSherry.Moore@Sun.COM extern void quiesce_devices(dev_info_t *, void *);
2640Sstevel@tonic-gate 
2650Sstevel@tonic-gate extern void setup_ddi(void);
2660Sstevel@tonic-gate extern void setup_ddi_poststartup(void);
2670Sstevel@tonic-gate extern void impl_ddi_callback_init(void);
2680Sstevel@tonic-gate extern void impl_fix_props(dev_info_t *, dev_info_t *, char *, int, caddr_t);
2690Sstevel@tonic-gate extern int impl_check_cpu(dev_info_t *);
2700Sstevel@tonic-gate extern int check_status(int, char *, dev_info_t *);
2710Sstevel@tonic-gate 
2720Sstevel@tonic-gate extern int exclude_settrap(int);
2730Sstevel@tonic-gate extern int exclude_level(int);
2740Sstevel@tonic-gate 
2750Sstevel@tonic-gate extern major_t path_to_major(char *);
2760Sstevel@tonic-gate extern void i_ddi_node_cache_init(void);
277789Sahrens extern dev_info_t *i_ddi_alloc_node(dev_info_t *, char *, pnode_t, int,
2780Sstevel@tonic-gate     ddi_prop_t *, int);
2790Sstevel@tonic-gate extern void i_ddi_forceattach_drivers(void);
2800Sstevel@tonic-gate extern int i_ddi_io_initialized(void);
2810Sstevel@tonic-gate extern dev_info_t *i_ddi_create_branch(dev_info_t *, int);
2820Sstevel@tonic-gate extern void i_ddi_add_devimap(dev_info_t *dip);
28310696SDavid.Hollister@Sun.COM extern void i_ddi_di_cache_invalidate(void);
2840Sstevel@tonic-gate extern void i_ddi_di_cache_free(struct di_cache *cache);
2850Sstevel@tonic-gate 
2862621Sllai1 /* devname_state - for /dev to denote reconfig and system available */
2872621Sllai1 #define	DS_RECONFIG	0x01		/* reconfig boot */
2882621Sllai1 #define	DS_SYSAVAIL	0x02		/* implicit reconfig enabled */
2892621Sllai1 
2902621Sllai1 extern int i_ddi_sysavail(void);
2912621Sllai1 extern int i_ddi_reconfig(void);
2922621Sllai1 extern void i_ddi_set_sysavail(void);
2932621Sllai1 extern void i_ddi_set_reconfig(void);
2942621Sllai1 
2954845Svikram /* I/O retire related */
2964845Svikram extern int e_ddi_retire_device(char *path, char **cons_array);
2974845Svikram extern int e_ddi_unretire_device(char *path);
2984845Svikram extern int e_ddi_mark_retiring(dev_info_t *dip, void *arg);
2994845Svikram extern int e_ddi_retire_notify(dev_info_t *dip, void *arg);
3004845Svikram extern int e_ddi_retire_finalize(dev_info_t *dip, void *arg);
3014845Svikram extern void e_ddi_degrade_finalize(dev_info_t *dip);
3024845Svikram extern void e_ddi_undegrade_finalize(dev_info_t *dip);
3034845Svikram 
3047656SSherry.Moore@Sun.COM extern int check_driver_quiesce(dev_info_t *dip, void *arg);
3057656SSherry.Moore@Sun.COM 
3060Sstevel@tonic-gate #endif /* _KERNEL */
3070Sstevel@tonic-gate 
3080Sstevel@tonic-gate #ifdef	__cplusplus
3090Sstevel@tonic-gate }
3100Sstevel@tonic-gate #endif
3110Sstevel@tonic-gate 
3120Sstevel@tonic-gate #endif /* _SYS_AUTOCONF_H */
313