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