changeset 3174:95c3e05e2071

6470022 OPL scfd driver should be moved into the closed source tree
author jimand
date Mon, 27 Nov 2006 11:55:12 -0800
parents bf81e386aeef
children 5903f61aa150
files usr/src/cmd/oplhpd/scf_notify.c usr/src/lib/cfgadm_plugins/scsi/SUNW,SPARC-Enterprise/common/opl_dev_led.c usr/src/uts/sun4u/opl/Makefile usr/src/uts/sun4u/opl/Makefile.files usr/src/uts/sun4u/opl/Makefile.opl usr/src/uts/sun4u/opl/Makefile.opl.shared usr/src/uts/sun4u/opl/Makefile.rules usr/src/uts/sun4u/opl/Makefile.targ usr/src/uts/sun4u/opl/Makefile.targ.shared usr/src/uts/sun4u/opl/io/scfd/scf_os_interface.c usr/src/uts/sun4u/opl/io/scfd/scfconf.c usr/src/uts/sun4u/opl/io/scfd/scfd.conf usr/src/uts/sun4u/opl/io/scfd/scfdebug.c usr/src/uts/sun4u/opl/io/scfd/scfdscp.c usr/src/uts/sun4u/opl/io/scfd/scfhandler.c usr/src/uts/sun4u/opl/io/scfd/scfinit.c usr/src/uts/sun4u/opl/io/scfd/scfiomp.c usr/src/uts/sun4u/opl/io/scfd/scfkstat.c usr/src/uts/sun4u/opl/io/scfd/scfops.c usr/src/uts/sun4u/opl/io/scfd/scfostoescf.c usr/src/uts/sun4u/opl/io/scfd/scfparam.c usr/src/uts/sun4u/opl/io/scfd/scfreg.c usr/src/uts/sun4u/opl/io/scfd/scfsnap.c usr/src/uts/sun4u/opl/io/scfd/scftimer.c usr/src/uts/sun4u/opl/io/scfd/scftrace.c usr/src/uts/sun4u/opl/scfd/Makefile usr/src/uts/sun4u/opl/sys/Makefile usr/src/uts/sun4u/opl/sys/scfd/iomp_drv.h usr/src/uts/sun4u/opl/sys/scfd/opcio.h usr/src/uts/sun4u/opl/sys/scfd/opcioif.h usr/src/uts/sun4u/opl/sys/scfd/scfdebug.h usr/src/uts/sun4u/opl/sys/scfd/scfdscp.h usr/src/uts/sun4u/opl/sys/scfd/scfio32.h usr/src/uts/sun4u/opl/sys/scfd/scfkstat.h usr/src/uts/sun4u/opl/sys/scfd/scfparam.h usr/src/uts/sun4u/opl/sys/scfd/scfreg.h usr/src/uts/sun4u/opl/sys/scfd/scfsnap.h usr/src/uts/sun4u/opl/sys/scfd/scfstate.h usr/src/uts/sun4u/opl/sys/scfd/scfsys.h usr/src/uts/sun4u/opl/sys/scfd/scftimer.h usr/src/uts/sun4u/opl/sys/scfd/scftrace.h
diffstat 41 files changed, 386 insertions(+), 25725 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/oplhpd/scf_notify.c	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/cmd/oplhpd/scf_notify.c	Mon Nov 27 11:55:12 2006 -0800
@@ -41,7 +41,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/sysevent/dr.h>
-#include <sys/scfd/opcio.h>
+#include <sys/scfd/opcioif.h>
 
 
 /* Macros */
--- a/usr/src/lib/cfgadm_plugins/scsi/SUNW,SPARC-Enterprise/common/opl_dev_led.c	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/lib/cfgadm_plugins/scsi/SUNW,SPARC-Enterprise/common/opl_dev_led.c	Mon Nov 27 11:55:12 2006 -0800
@@ -31,7 +31,7 @@
 #include <strings.h>
 #include <libgen.h>
 #include <cfga_scsi.h>
-#include <sys/scfd/opcio.h>
+#include <sys/scfd/opcioif.h>
 
 
 #define	SCF_DRV		"/devices/pseudo/scfd@200:rasctl"
--- a/usr/src/uts/sun4u/opl/Makefile	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/Makefile	Mon Nov 27 11:55:12 2006 -0800
@@ -61,13 +61,13 @@
 .KEEP_STATE:
 
 def all clean clobber clean.lint: genassym unix .WAIT \
-		$(OPL_CPU_KMODS) $(OPL_KMODS)
+		$(OPL_CPU_KMODS) $(OPL_KMODS) $(CLOSED_OPL_KMODS)
 
-modlist:	unix $(OPL_CPU_KMODS) $(OPL_KMODS)
+modlist:	unix $(OPL_CPU_KMODS) $(OPL_KMODS) $(CLOSED_OPL_KMODS)
 
 lintlib:	unix
 
-modlintlib:	$(OPL_KMODS)
+modlintlib:	$(OPL_KMODS) $(CLOSED_OPL_KMODS)
 
 IMPLEMENTED_PLATFORM	= SUNW,SPARC-Enterprise
 
@@ -89,11 +89,14 @@
 	$(USR_OPL_LIB_DIR) \
 	$(OPL_CRYPTO_LINKS) \
 	genassym unix .WAIT $(OPL_CPU_KMODS) $(OPL_KMODS) \
-	$(OPLMSU_OPTION)
+	$(CLOSED_OPL_KMODS) $(OPLMSU_OPTION)
 
 genassym unix $(OPL_KMODS) $(OPL_CPU_KMODS): FRC
 	@cd $@; pwd; $(MAKE) $(TARGET)
 
+$(CLOSED_OPL_KMODS): FRC
+	cd $(CLOSED)/uts/sun4u/opl/$@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
+
 $(OPL_CRYPTO_LINKS): $(ROOT_OPL_CRYPTO_DIR_64)
 	-$(RM) $(ROOT_OPL_CRYPTO_DIR_64)/$@
 	$(SYMLINK) $(ROOT_US3_CRYPTO_LINK)/$@ $(ROOT_OPL_CRYPTO_DIR_64)/$@
@@ -118,6 +121,7 @@
 LINT_LIBS	= $(LINT_LIB) \
 		  -L$(OPL_LINT_LIB_DIR) \
 		  -L$(LINT_LIB_DIR) $(LINT_KMODS:%=-l%) \
+		      $(CLOSED_LINT_KMODS:%=-l%) \
 		  -L$(SPARC_LIB_DIR) $(SPARC_LINTS:%=-l%)
 
 lint.platmod:   modlintlib
--- a/usr/src/uts/sun4u/opl/Makefile.files	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/Makefile.files	Mon Nov 27 11:55:12 2006 -0800
@@ -37,10 +37,6 @@
 PCICMU_OBJS	= pcicmu.o pcmu_cb.o pcmu_counters.o pcmu_ecc.o	\
 		  pcmu_ib.o pcmu_intr.o pcmu_pbm.o pcmu_util.o
 OPL_PANEL_OBJS	= oplpanel.o
-SCFD_OBJS = scfconf.o scfdscp.o scfiomp.o scfostoescf.o \
-		  scfsnap.o scfhandler.o scfkstat.o scfparam.o \
-		  scftimer.o scfdebug.o scfinit.o scfops.o \
-		  scfreg.o scftrace.o scf_os_interface.o
 DRMACH_OBJS 	= drmach.o drmach_asm.o dr_util.o drmach_err.o
 DRMACH_DEPS	+= drmach_asm.o
 OPLMSU_OBJS	= oplmsu.o oplmsu_cmn_func.o oplmsu_ioctl_lrp.o oplmsu_ioctl_uwp.o
--- a/usr/src/uts/sun4u/opl/Makefile.opl	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/Makefile.opl	Mon Nov 27 11:55:12 2006 -0800
@@ -1,4 +1,3 @@
-#
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
@@ -18,169 +17,12 @@
 #
 # CDDL HEADER END
 #
-#
 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
 #
-#	Global definitions for sun4u opl implementation specific modules.
-#
-# uts/sun4u/opl/Makefile.opl
-#
-
-#
-#	Define directories.
-#
-#
-#
-ROOT_OPL_DIR	= $(ROOT_PLAT_DIR)/SUNW,SPARC-Enterprise
-ROOT_OPL_MOD_DIR	= $(ROOT_OPL_DIR)/kernel
-ROOT_OPL_KERN_DIR_32 = $(ROOT_OPL_MOD_DIR)
-ROOT_OPL_KERN_DIR_64 = $(ROOT_OPL_MOD_DIR)/$(SUBDIR64)
-ROOT_OPL_MISC_DIR_32 = $(ROOT_OPL_MOD_DIR)/misc
-ROOT_OPL_MISC_DIR_64 = $(ROOT_OPL_MOD_DIR)/misc/$(SUBDIR64)
-ROOT_OPL_DRV_DIR_32 = $(ROOT_OPL_MOD_DIR)/drv
-ROOT_OPL_DRV_DIR_64 = $(ROOT_OPL_MOD_DIR)/drv/$(SUBDIR64)
-ROOT_OPL_CPU_DIR_32 = $(ROOT_OPL_MOD_DIR)/cpu
-ROOT_OPL_CPU_DIR_64 = $(ROOT_OPL_MOD_DIR)/cpu/$(SUBDIR64)
-ROOT_OPL_CRYPTO_DIR_32 = $(ROOT_OPL_MOD_DIR)/crypto
-ROOT_OPL_CRYPTO_DIR_64 = $(ROOT_OPL_MOD_DIR)/crypto/$(SUBDIR64)
-
-ROOT_OPL_KERN_DIR	= $(ROOT_OPL_KERN_DIR_$(CLASS))
-ROOT_OPL_MISC_DIR	= $(ROOT_OPL_MISC_DIR_$(CLASS))
-ROOT_OPL_DRV_DIR	= $(ROOT_OPL_DRV_DIR_$(CLASS))
-ROOT_OPL_CPU_DIR	= $(ROOT_OPL_CPU_DIR_$(CLASS))
-ROOT_OPL_CRYPTO_DIR	= $(ROOT_OPL_CRYPTO_DIR_$(CLASS))
-
-ROOT_PLAT_MOD_DIRS	+= $(ROOT_OPL_MOD_DIR)
-ROOT_PLAT_MISC_DIRS_32	+= $(ROOT_OPL_MISC_DIR_32)
-
-USR_OPL_DIR		= $(USR_PLAT_DIR)/SUNW,SPARC-Enterprise
-USR_OPL_LIB_DIR		= $(USR_OPL_DIR)/lib
-USR_OPL_SBIN_DIR	= $(USR_OPL_DIR)/sbin
-USR_OPL_SBIN_EEPROM	= $(USR_OPL_SBIN_DIR)/eeprom
-USR_OPL_SBIN_PRTDIAG	= $(USR_OPL_SBIN_DIR)/prtdiag
-USR_OPL_SBIN_TRAPSTAT	= $(USR_OPL_SBIN_DIR)/trapstat
-USR_OPL_SBIN_FRUADM	= $(USR_OPL_SBIN_DIR)/fruadm
-USR_OPL_INC_DIR		= $(USR_OPL_DIR)/include
-USR_OPL_ISYS_DIR	= $(USR_OPL_INC_DIR)/sys
-
-OPL_LINT_LIB_DIR	= $(UTSBASE)/$(PLATFORM)/opl/lint-libs/$(OBJS_DIR)
-OPLMSU_OPTION		= options
-
-#
-#	Define modules.
-#
-OPL_KMODS	= platmod
-OPL_KMODS	+= dm2s
-OPL_KMODS	+= oplkmdrv
-OPL_KMODS	+= pcicmu
-OPL_KMODS	+= oplpanel
-OPL_KMODS	+= scfd
-OPL_KMODS	+= dr .WAIT drmach
-OPL_KMODS	+= oplmsu
-OPL_KMODS	+= mc-opl
-
-#
-#	CPU modules.
-#
-OPL_CPU_KMODS += olympus_c
-
-#	Links to OPL crypto modules
-#
-OPL_CRYPTO_LINKS	= aes
 
-#
-#	Include the makefiles which define build rule templates, the
-#	collection of files per module, and a few specific flags. Note
-#	that order is significant, just as with an include path. The
-#	first build rule template which matches the files name will be
-#	used. By including these in order from most machine dependent
-#	to most machine independent, we allow a machine dependent file
-#	to be used in preference over a machine independent version
-#	(Such as a machine specific optimization, which preserves the
-#	interfaces.)
-#
-include $(UTSBASE)/sun4u/ngdr/Makefile.files
-include $(UTSBASE)/sun4u/opl/Makefile.files
-
-#
-#	Include common rules.
-#
-include $(UTSBASE)/sun4u/Makefile.sun4u
-
-#
-#	Everybody needs to know how to build modstubs.o and to locate unix.o
-#
-UNIX_DIR	= $(UTSBASE)/$(PLATFORM)/opl/unix
-MODSTUBS_DIR	= $(UNIX_DIR)
-DSF_DIR		= $(UTSBASE)/$(PLATFORM)/opl/genassym
-LINTS_DIR	= $(OBJS_DIR)
-LINT_LIB_DIR	= $(UTSBASE)/$(PLATFORM)/opl/lint-libs/$(OBJS_DIR)
-
-UNIX_O		= $(UNIX_DIR)/$(OBJS_DIR)/unix.o
-
-LINT_LIB	= $(LINT_LIB_DIR)/llib-lunix.ln
-
-#
-#	Define the actual specific platforms
-#
-MACHINE_DEFS	= -D$(PLATFORM) -D_MACHDEP -DSFMMU -DMP
-MACHINE_DEFS	+= -D_CPU_SIGNATURE
+UTSTREE=$(UTSBASE)
 
-#
-# Maximum CPUID  =   01111 11 01 1 = 0x1FB (507)
-# Maximum CHIPID = 1 01111 11 00 0 = 0x5F8 (1528)
-#
-MACHINE_DEFS	+= -DNCPU=508
-MACHINE_DEFS	+= -DMAX_CPU_CHIPID=1529
-MACHINE_DEFS	+= -DMAX_UPA=256
-MACHINE_DEFS	+= -DIGN_SIZE=8
-MACHINE_DEFS	+= -DMAX_MEM_NODES=16
-#
-# UTSB_PHYS will enable user TSB physical access for TL>0
-#
-MACHINE_DEFS	+= -DUTSB_PHYS
-MACHINE_DEFS	+= -D_OPL
-MACHINE_DEFS    += -DOLYMPUS_SHARED_FTLB
-MACHINE_DEFS	+= -D_CMP_NO_ERROR_STEERING -D_HW_MEMSCRUB_SUPPORT
-MACHINE_DEFS	+= -DDO_CORELEVEL_LOADBAL
-MACHINE_DEFS	+= -DITLB_32M_256M_SUPPORT
-#
-# OLYMPUS C cross-call erratas.
-#  - revision A can only deliver one xcall at a time.
-#  - revision B can dispatch xcalls to 31 (IDSR_BN_SETS) CPUs at a time,
-#    but it can not send more xcalls until all the pending xcalls are
-#    dispatched. In other words, all previous 31 xcall slots must be
-#    in non-busy state before further xcalls can be issued.
-MACHINE_DEFS += -DOLYMPUS_C_REV_A_ERRATA_XCALL
-MACHINE_DEFS += -DOLYMPUS_C_REV_B_ERRATA_XCALL
-#
-# OLYMPUS C Spurious interrupts
-# - When an UE is detected in a interrupt packet, 
-#   Olympus-C takes an interrupt_vector_trap (TT=0x60) while
-#   ASI_INTR_RECIEVE.BUSY is set to zero to indicate the existence
-#   of the error. Software will see this as a spurious interrupt since
-#   the interrupt busy bit is set to zero. SW will still need to
-#   explicitly clear the interrupt busy bit to reset the HW state.
-#   Failure to do so will result in the processor continuously taking
-#   an interrupt vector trap when PSTATE.IE is reset to one.
-#   Note that UE in interrupt packet is reported to the SP and handled
-#   accordingly. For the domain, the system should panic as it is not
-#   recoverable.
-MACHINE_DEFS += -DCLEAR_INTR_BUSYBIT_ON_SPURIOUS
-
-#
-# For now, disable these lint checks; maintainers should endeavor
-# to investigate and remove these for maximum lint coverage.
-# Please do not carry these forward to new Makefiles.
-#
-LINTTAGS	+= -erroff=E_SUSPICIOUS_COMPARISON
-LINTTAGS	+= -erroff=E_BAD_PTR_CAST_ALIGN
-LINTTAGS	+= -erroff=E_SUPPRESSION_DIRECTIVE_UNUSED
-LINTTAGS	+= -erroff=E_STATIC_UNUSED
-LINTTAGS	+= -erroff=E_PTRDIFF_OVERFLOW
-LINTTAGS	+= -erroff=E_ASSIGN_NARROW_CONV
-
-.KEEP_STATE:
+include $(UTSBASE)/sun4u/opl/Makefile.opl.shared
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/sun4u/opl/Makefile.opl.shared	Mon Nov 27 11:55:12 2006 -0800
@@ -0,0 +1,190 @@
+#
+# 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 2006 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+# ident	"%Z%%M%	%I%	%E% SMI"
+#
+#	Global definitions for sun4u opl implementation specific modules.
+#
+# uts/sun4u/opl/Makefile.opl
+#
+
+#
+#	Define directories.
+#
+#
+#
+ROOT_OPL_DIR	= $(ROOT_PLAT_DIR)/SUNW,SPARC-Enterprise
+ROOT_OPL_MOD_DIR	= $(ROOT_OPL_DIR)/kernel
+ROOT_OPL_KERN_DIR_32 = $(ROOT_OPL_MOD_DIR)
+ROOT_OPL_KERN_DIR_64 = $(ROOT_OPL_MOD_DIR)/$(SUBDIR64)
+ROOT_OPL_MISC_DIR_32 = $(ROOT_OPL_MOD_DIR)/misc
+ROOT_OPL_MISC_DIR_64 = $(ROOT_OPL_MOD_DIR)/misc/$(SUBDIR64)
+ROOT_OPL_DRV_DIR_32 = $(ROOT_OPL_MOD_DIR)/drv
+ROOT_OPL_DRV_DIR_64 = $(ROOT_OPL_MOD_DIR)/drv/$(SUBDIR64)
+ROOT_OPL_CPU_DIR_32 = $(ROOT_OPL_MOD_DIR)/cpu
+ROOT_OPL_CPU_DIR_64 = $(ROOT_OPL_MOD_DIR)/cpu/$(SUBDIR64)
+ROOT_OPL_CRYPTO_DIR_32 = $(ROOT_OPL_MOD_DIR)/crypto
+ROOT_OPL_CRYPTO_DIR_64 = $(ROOT_OPL_MOD_DIR)/crypto/$(SUBDIR64)
+
+ROOT_OPL_KERN_DIR	= $(ROOT_OPL_KERN_DIR_$(CLASS))
+ROOT_OPL_MISC_DIR	= $(ROOT_OPL_MISC_DIR_$(CLASS))
+ROOT_OPL_DRV_DIR	= $(ROOT_OPL_DRV_DIR_$(CLASS))
+ROOT_OPL_CPU_DIR	= $(ROOT_OPL_CPU_DIR_$(CLASS))
+ROOT_OPL_CRYPTO_DIR	= $(ROOT_OPL_CRYPTO_DIR_$(CLASS))
+
+ROOT_PLAT_MOD_DIRS	+= $(ROOT_OPL_MOD_DIR)
+ROOT_PLAT_MISC_DIRS_32	+= $(ROOT_OPL_MISC_DIR_32)
+
+USR_OPL_DIR		= $(USR_PLAT_DIR)/SUNW,SPARC-Enterprise
+USR_OPL_LIB_DIR		= $(USR_OPL_DIR)/lib
+USR_OPL_SBIN_DIR	= $(USR_OPL_DIR)/sbin
+USR_OPL_SBIN_EEPROM	= $(USR_OPL_SBIN_DIR)/eeprom
+USR_OPL_SBIN_PRTDIAG	= $(USR_OPL_SBIN_DIR)/prtdiag
+USR_OPL_SBIN_TRAPSTAT	= $(USR_OPL_SBIN_DIR)/trapstat
+USR_OPL_SBIN_FRUADM	= $(USR_OPL_SBIN_DIR)/fruadm
+USR_OPL_INC_DIR		= $(USR_OPL_DIR)/include
+USR_OPL_ISYS_DIR	= $(USR_OPL_INC_DIR)/sys
+
+OPL_LINT_LIB_DIR	= $(UTSBASE)/$(PLATFORM)/opl/lint-libs/$(OBJS_DIR)
+OPLMSU_OPTION		= options
+
+#
+#	Define modules.
+#
+OPL_KMODS	= platmod
+OPL_KMODS	+= dm2s
+OPL_KMODS	+= oplkmdrv
+OPL_KMODS	+= pcicmu
+OPL_KMODS	+= oplpanel
+OPL_KMODS	+= dr .WAIT drmach
+OPL_KMODS	+= oplmsu
+OPL_KMODS	+= mc-opl
+
+#
+#	CPU modules.
+#
+OPL_CPU_KMODS += olympus_c
+
+#	Links to OPL crypto modules
+#
+OPL_CRYPTO_LINKS	= aes
+
+#
+#	Include the makefiles which define build rule templates, the
+#	collection of files per module, and a few specific flags. Note
+#	that order is significant, just as with an include path. The
+#	first build rule template which matches the files name will be
+#	used. By including these in order from most machine dependent
+#	to most machine independent, we allow a machine dependent file
+#	to be used in preference over a machine independent version
+#	(Such as a machine specific optimization, which preserves the
+#	interfaces.)
+#
+include $(UTSBASE)/sun4u/ngdr/Makefile.files
+include $(UTSTREE)/sun4u/opl/Makefile.files
+
+#
+#	Include common rules.
+#
+include $(UTSTREE)/sun4u/Makefile.sun4u
+
+#
+#	Define closed modules (must come after Makefile.sun4u for CLOSED_BUILD).
+#
+$(CLOSED_BUILD)CLOSED_OPL_KMODS = scfd
+
+#
+#	Everybody needs to know how to build modstubs.o and to locate unix.o
+#
+UNIX_DIR	= $(UTSBASE)/$(PLATFORM)/opl/unix
+MODSTUBS_DIR	= $(UNIX_DIR)
+DSF_DIR		= $(UTSBASE)/$(PLATFORM)/opl/genassym
+LINTS_DIR	= $(OBJS_DIR)
+LINT_LIB_DIR	= $(UTSBASE)/$(PLATFORM)/opl/lint-libs/$(OBJS_DIR)
+
+UNIX_O		= $(UNIX_DIR)/$(OBJS_DIR)/unix.o
+
+LINT_LIB	= $(LINT_LIB_DIR)/llib-lunix.ln
+
+#
+#	Define the actual specific platforms
+#
+MACHINE_DEFS	= -D$(PLATFORM) -D_MACHDEP -DSFMMU -DMP
+MACHINE_DEFS	+= -D_CPU_SIGNATURE
+
+#
+# Maximum CPUID  =   01111 11 01 1 = 0x1FB (507)
+# Maximum CHIPID = 1 01111 11 00 0 = 0x5F8 (1528)
+#
+MACHINE_DEFS	+= -DNCPU=508
+MACHINE_DEFS	+= -DMAX_CPU_CHIPID=1529
+MACHINE_DEFS	+= -DMAX_UPA=256
+MACHINE_DEFS	+= -DIGN_SIZE=8
+MACHINE_DEFS	+= -DMAX_MEM_NODES=16
+#
+# UTSB_PHYS will enable user TSB physical access for TL>0
+#
+MACHINE_DEFS	+= -DUTSB_PHYS
+MACHINE_DEFS	+= -D_OPL
+MACHINE_DEFS    += -DOLYMPUS_SHARED_FTLB
+MACHINE_DEFS	+= -D_CMP_NO_ERROR_STEERING -D_HW_MEMSCRUB_SUPPORT
+MACHINE_DEFS	+= -DDO_CORELEVEL_LOADBAL
+MACHINE_DEFS	+= -DITLB_32M_256M_SUPPORT
+#
+# OLYMPUS C cross-call erratas.
+#  - revision A can only deliver one xcall at a time.
+#  - revision B can dispatch xcalls to 31 (IDSR_BN_SETS) CPUs at a time,
+#    but it can not send more xcalls until all the pending xcalls are
+#    dispatched. In other words, all previous 31 xcall slots must be
+#    in non-busy state before further xcalls can be issued.
+MACHINE_DEFS += -DOLYMPUS_C_REV_A_ERRATA_XCALL
+MACHINE_DEFS += -DOLYMPUS_C_REV_B_ERRATA_XCALL
+#
+# OLYMPUS C Spurious interrupts
+# - When an UE is detected in a interrupt packet, 
+#   Olympus-C takes an interrupt_vector_trap (TT=0x60) while
+#   ASI_INTR_RECIEVE.BUSY is set to zero to indicate the existence
+#   of the error. Software will see this as a spurious interrupt since
+#   the interrupt busy bit is set to zero. SW will still need to
+#   explicitly clear the interrupt busy bit to reset the HW state.
+#   Failure to do so will result in the processor continuously taking
+#   an interrupt vector trap when PSTATE.IE is reset to one.
+#   Note that UE in interrupt packet is reported to the SP and handled
+#   accordingly. For the domain, the system should panic as it is not
+#   recoverable.
+MACHINE_DEFS += -DCLEAR_INTR_BUSYBIT_ON_SPURIOUS
+
+#
+# For now, disable these lint checks; maintainers should endeavor
+# to investigate and remove these for maximum lint coverage.
+# Please do not carry these forward to new Makefiles.
+#
+LINTTAGS	+= -erroff=E_SUSPICIOUS_COMPARISON
+LINTTAGS	+= -erroff=E_BAD_PTR_CAST_ALIGN
+LINTTAGS	+= -erroff=E_SUPPRESSION_DIRECTIVE_UNUSED
+LINTTAGS	+= -erroff=E_STATIC_UNUSED
+LINTTAGS	+= -erroff=E_PTRDIFF_OVERFLOW
+LINTTAGS	+= -erroff=E_ASSIGN_NARROW_CONV
+
+.KEEP_STATE:
--- a/usr/src/uts/sun4u/opl/Makefile.rules	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/Makefile.rules	Mon Nov 27 11:55:12 2006 -0800
@@ -27,8 +27,6 @@
 #	This Makefile defines the build rules for the directory
 #	uts/sun4u/opl and its children.
 #
-# uts/sun4u/opl/Makefile.rules
-#
 
 #
 #	Section 1a: C object build rules
@@ -91,10 +89,6 @@
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
 
-$(OBJS_DIR)/%.o:		$(UTSBASE)/sun4u/opl/io/scfd/%.c
-	$(COMPILE.c) -o $@ $<
-	$(CTFCONVERT_O)
-
 $(OBJS_DIR)/%.o:		$(UTSBASE)/sun4u/opl/io/oplmsu/%.c
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
@@ -138,9 +132,6 @@
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/sun4u/opl/io/oplpanel/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
-$(LINTS_DIR)/%.ln:		$(UTSBASE)/sun4u/opl/io/scfd/%.c
-	@($(LHEAD) $(LINT.c) $< $(LTAIL))
-
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/sun4u/opl/io/oplmsu/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
--- a/usr/src/uts/sun4u/opl/Makefile.targ	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/Makefile.targ	Mon Nov 27 11:55:12 2006 -0800
@@ -1,4 +1,3 @@
-#
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
@@ -18,93 +17,12 @@
 #
 # CDDL HEADER END
 #
-#
 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
 #
-#	Common targets for sun4u opl implementation specific modules.
-#
-# uts/sun4u/opl/Makefile.targ
-#
-
-.KEEP_STATE:
-
-#
-# Rules for implementation subdirectories.
-#
-$(ROOT_OPL_DIR): $(ROOT_PLAT_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_MOD_DIR): $(ROOT_OPL_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_DRV_DIR_32): $(ROOT_OPL_MOD_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_DRV_DIR_64): $(ROOT_OPL_DRV_DIR_32)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_CPU_DIR_32): $(ROOT_OPL_MOD_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_CPU_DIR_64): $(ROOT_OPL_CPU_DIR_32)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_MISC_DIR_32): $(ROOT_OPL_MOD_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_MISC_DIR_64): $(ROOT_OPL_MISC_DIR_32)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_CRYPTO_DIR_32): $(ROOT_OPL_MOD_DIR)
-	-$(INS.dir.root.sys)
-
-$(ROOT_OPL_CRYPTO_DIR_64): $(ROOT_OPL_CRYPTO_DIR_32)
-	-$(INS.dir.root.sys)
 
-$(USR_OPL_DIR): $(USR_PLAT_DIR)
-	-$(INS.dir.root.sys)
-
-$(USR_OPL_INC_DIR): $(USR_OPL_DIR) $(USR_PSM_INCL_DIR)
-	$(INS.slink4)
-
-$(USR_OPL_SBIN_DIR):	$(USR_OPL_DIR) $(USR_PSM_SBIN_DIR)
-	$(INS.dir.root.bin)
-
-$(USR_OPL_SBIN_EEPROM): $(USR_OPL_SBIN_DIR)
-	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/eeprom $@ $(CHOWNLINK) $(CHGRPLINK)
-
-$(USR_OPL_SBIN_PRTDIAG): $(USR_OPL_SBIN_DIR)
-	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/prtdiag $@ $(CHOWNLINK) $(CHGRPLINK)
-
-$(USR_OPL_SBIN_TRAPSTAT): $(USR_OPL_SBIN_DIR)
-	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/trapstat $@ $(CHOWNLINK) $(CHGRPLINK)
-
-$(USR_OPL_SBIN_FRUADM): $(USR_OPL_SBIN_DIR)
-	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/fruadm $@ $(CHOWNLINK) $(CHGRPLINK)
+UTSTREE=$(UTSBASE)
 
-$(USR_OPL_LIB_DIR):	$(USR_OPL_DIR) $(USR_PSM_LIB_DIR)
-	-$(INS.dir.root.bin)
-
-$(USR_OPL_ISYS_DIR): $(USR_OPL_INC_DIR)
-	$(INS.dir.root.bin)
-
-$(ROOT_OPL_KERN_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_KERN_DIR) FRC
-	$(INS.file)
-
-$(ROOT_OPL_DRV_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_DRV_DIR) FRC
-	$(INS.file)
-
-$(ROOT_OPL_CPU_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_CPU_DIR) FRC
-	$(INS.file)
-
-$(ROOT_OPL_MISC_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_MISC_DIR) FRC
-	$(INS.file)
-
-#
-#	Include common targets.
-#
-include $(UTSBASE)/sun4u/opl/Makefile.rules
-include $(UTSBASE)/sun4u/Makefile.targ
+include $(UTSBASE)/sun4u/opl/Makefile.targ.shared
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/sun4u/opl/Makefile.targ.shared	Mon Nov 27 11:55:12 2006 -0800
@@ -0,0 +1,110 @@
+#
+# 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 2006 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+# ident	"%Z%%M%	%I%	%E% SMI"
+#
+#	Common targets for sun4u opl implementation specific modules.
+#
+# uts/sun4u/opl/Makefile.targ
+#
+
+.KEEP_STATE:
+
+#
+# Rules for implementation subdirectories.
+#
+$(ROOT_OPL_DIR): $(ROOT_PLAT_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_MOD_DIR): $(ROOT_OPL_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_DRV_DIR_32): $(ROOT_OPL_MOD_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_DRV_DIR_64): $(ROOT_OPL_DRV_DIR_32)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_CPU_DIR_32): $(ROOT_OPL_MOD_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_CPU_DIR_64): $(ROOT_OPL_CPU_DIR_32)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_MISC_DIR_32): $(ROOT_OPL_MOD_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_MISC_DIR_64): $(ROOT_OPL_MISC_DIR_32)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_CRYPTO_DIR_32): $(ROOT_OPL_MOD_DIR)
+	-$(INS.dir.root.sys)
+
+$(ROOT_OPL_CRYPTO_DIR_64): $(ROOT_OPL_CRYPTO_DIR_32)
+	-$(INS.dir.root.sys)
+
+$(USR_OPL_DIR): $(USR_PLAT_DIR)
+	-$(INS.dir.root.sys)
+
+$(USR_OPL_INC_DIR): $(USR_OPL_DIR) $(USR_PSM_INCL_DIR)
+	$(INS.slink4)
+
+$(USR_OPL_SBIN_DIR):	$(USR_OPL_DIR) $(USR_PSM_SBIN_DIR)
+	$(INS.dir.root.bin)
+
+$(USR_OPL_SBIN_EEPROM): $(USR_OPL_SBIN_DIR)
+	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/eeprom $@ $(CHOWNLINK) $(CHGRPLINK)
+
+$(USR_OPL_SBIN_PRTDIAG): $(USR_OPL_SBIN_DIR)
+	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/prtdiag $@ $(CHOWNLINK) $(CHGRPLINK)
+
+$(USR_OPL_SBIN_TRAPSTAT): $(USR_OPL_SBIN_DIR)
+	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/trapstat $@ $(CHOWNLINK) $(CHGRPLINK)
+
+$(USR_OPL_SBIN_FRUADM): $(USR_OPL_SBIN_DIR)
+	$(RM) -r $@; $(SYMLINK) ../../$(PLATFORM)/sbin/fruadm $@ $(CHOWNLINK) $(CHGRPLINK)
+
+$(USR_OPL_LIB_DIR):	$(USR_OPL_DIR) $(USR_PSM_LIB_DIR)
+	-$(INS.dir.root.bin)
+
+$(USR_OPL_ISYS_DIR): $(USR_OPL_INC_DIR)
+	$(INS.dir.root.bin)
+
+$(ROOT_OPL_KERN_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_KERN_DIR) FRC
+	$(INS.file)
+
+$(ROOT_OPL_DRV_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_DRV_DIR) FRC
+	$(INS.file)
+
+$(ROOT_OPL_CPU_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_CPU_DIR) FRC
+	$(INS.file)
+
+$(ROOT_OPL_MISC_DIR)/%: $(OBJS_DIR)/% $(ROOT_OPL_MISC_DIR) FRC
+	$(INS.file)
+
+#
+#	Include common targets.
+#
+include $(UTSTREE)/sun4u/opl/Makefile.rules
+include $(UTSTREE)/sun4u/Makefile.targ
--- a/usr/src/uts/sun4u/opl/io/scfd/scf_os_interface.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-#include <sys/sunddi.h>
-#include <sys/ddi.h>
-#include <sys/kobj.h>
-
-#include <sys/scfd/scfsys.h>
-#include <sys/scfd/scfostoescf.h>
-
-#define	XSCF_DATA_LEN	16
-#define	SCF_RETRY_COUNT	10
-
-
-static int
-scf_os_putinfo(uint8_t type, char *datap, uint32_t length)
-{
-	int	rv, count;
-
-	rv = 0;
-
-	count = SCF_RETRY_COUNT;
-	while (count-- > 0) {
-		rv = scf_service_putinfo(KEY_ESCF, type, 0, length,
-			(void *)datap);
-		if (rv == EBUSY) {
-			/* 5 sec delay */
-			delay(5 * drv_usectohz(1000000));
-			continue;
-		}
-		break;
-	};
-
-	return (rv);
-}
-
-static int
-scf_os_getinfo(uint8_t type, uint32_t transid, char *datap, uint32_t *lengthp)
-{
-	int	rv, count;
-
-	rv = 0;
-	count = SCF_RETRY_COUNT;
-	while (count-- > 0) {
-		rv = scf_service_getinfo(KEY_ESCF, type, transid, lengthp,
-			(void *)datap);
-		if (rv == EBUSY) {
-			/* 5 sec delay */
-			delay(5 * drv_usectohz(1000000));
-			continue;
-		}
-		break;
-	};
-
-	return (rv);
-}
-
-/*
- * scf_fmem_start()
- *
- * Description: Before starting rename memory,
- * sending the message
- * from OS to XSCF.
- *
- */
-int
-scf_fmem_start(int s_bd, int t_bd)
-{
-	char	data[XSCF_DATA_LEN];
-
-	bzero(data, XSCF_DATA_LEN);
-	data[0] = (char)s_bd;
-	data[1] = (char)t_bd;
-
-	return (scf_os_putinfo(SUB_OS_SEND_PRE_FMEMA,
-		data, XSCF_DATA_LEN));
-}
-
-/*
- * scf_fmem_end()
- *
- * Description: After doing rename memory, sending the message
- * from OS to XSCF.
- *
- */
-int
-scf_fmem_end()
-{
-	char data[XSCF_DATA_LEN];
-	int rv;
-	uint32_t len;
-
-	bzero(data, XSCF_DATA_LEN);
-	len = XSCF_DATA_LEN;
-	rv = scf_os_getinfo(SUB_OS_SEND_COMPLETE_FMEMA, 0, data, &len);
-
-	if (rv == 0) {
-		/* 0 is OK and everything less than 0 is BAD but TBD */
-		if (len > 0)
-			rv = (int)data[0];
-		else
-			rv = -1;
-	}
-	return (rv);
-}
-
-/*
- * scf_fmem_cancel()
- *
- * Description: If the status failed after doing rename memory
- * and check the result, sending the message from OS to XSCF.
- *
- */
-int
-scf_fmem_cancel()
-{
-	return (scf_os_putinfo(SUB_OS_SEND_CANCEL_FMEMA, 0, 0));
-}
-
-/*
- * scf_get_dimminfo()
- *
- * Description: Get the dimm infomation for a board. This information
- * includes the serial-IDs.
- */
-int
-scf_get_dimminfo(uint32_t boardnum, void *buf, uint32_t *bufsz)
-{
-	return (scf_os_getinfo(SUB_OS_RECEIVE_DIMM_INFO, boardnum, buf, bufsz));
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfconf.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1131 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <sys/types.h>
-#include <sys/conf.h>
-#include <sys/kmem.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfdscpif.h>
-
-static struct driver_minor_data {
-	char	*name;
-	int	type;
-	int	minor_num;
-} scf_minor[] = {
-	{ "pwrctl", S_IFCHR, SCF_USER_INSTANCE },
-	{ "rasctl", S_IFCHR, SCF_USER_INSTANCE },
-	{ "rcictl", S_IFCHR, SCF_USER_INSTANCE },
-	SCF_DBG_IOMP_INSTANCE
-	{ NULL, 0}
-};
-
-
-/*
- * Function list
- */
-void	scf_resource_free_dev(scf_state_t *statep);
-void	scf_reload_conf(scf_state_t *statep);
-
-/*
- * External function
- */
-extern	void	scf_dscp_init(void);
-extern	void	scf_dscp_fini(void);
-
-/*
- * External value
- */
-extern	int	scf_devbusy_wait_time;
-extern	int	scf_cmdend_wait_time;
-extern	int	scf_online_wait_time;
-extern	int	scf_rxbuff_wait_time;
-extern	int	scf_dscp_ack_wait_time;
-extern	int	scf_dscp_end_wait_time;
-extern	int	scf_dscp_txbusy_time;
-extern	int	scf_dscp_callback_time;
-
-
-/*
- * scf_attach()
- *
- * Description: Driver attach() entry processing.
- *
- */
-int
-scf_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
-{
-#define	SCF_FUNC_NAME		"scf_attach() "
-	scf_state_t		*statep;
-	int			instance;
-	struct driver_minor_data *dmdp;
-	int			ret = DDI_FAILURE;
-	char			wk_pathname[MAXPATHLEN];
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG2(SCF_DBGFLAG_DDI,
-		SCF_FUNC_NAME ": start instance = %d name = %s",
-		ddi_get_instance(dip), ddi_get_name(dip));
-	SC_DBG_DRV_TRACE(TC_ATTACH|TC_IN, __LINE__, &cmd,
-		sizeof (ddi_attach_cmd_t));
-
-	if (strcmp(ddi_get_name(dip), SCF_DRIVER_NAME) == 0) {
-		/* pseudo device */
-		if (cmd == DDI_ATTACH) {
-			SCFDBGMSG(SCF_DBGFLAG_DDI, "pseudo attach proc");
-			mutex_enter(&scf_comtbl.attach_mutex);
-
-			/* get instance number */
-			instance = ddi_get_instance(dip);
-
-			/* allocate softstate */
-			if (ddi_soft_state_zalloc(scfstate, instance) !=
-				DDI_SUCCESS) {
-				SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-					"attach  ", 8);
-				cmn_err(CE_WARN,
-					"%s: scf_attach: "
-					"ddi_soft_state_zalloc failed.\n",
-						scf_driver_name);
-
-				mutex_exit(&scf_comtbl.attach_mutex);
-				goto END_attach;
-			}
-
-			/* get softstate */
-			if ((statep = ddi_get_soft_state(scfstate, instance)) ==
-				NULL) {
-				SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-					"attach  ", 8);
-				cmn_err(CE_WARN,
-					"%s: scf_attach: "
-					"ddi_get_soft_state failed.\n",
-						scf_driver_name);
-				ddi_soft_state_free(scfstate, instance);
-
-				mutex_exit(&scf_comtbl.attach_mutex);
-				goto END_attach;
-			}
-
-			/* retain dip in soft state */
-			statep->dip = dip;
-
-			/* create minor node */
-			for (dmdp = scf_minor; dmdp->name != NULL; dmdp++) {
-				if (ddi_create_minor_node(dip, dmdp->name,
-					dmdp->type, dmdp->minor_num,
-					DDI_PSEUDO, 0) == DDI_FAILURE) {
-					SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR,
-						__LINE__, "attach  ", 8);
-					cmn_err(CE_WARN,
-						"%s: scf_attach: "
-						"ddi_create_minor_node "
-						"failed.\n",
-							scf_driver_name);
-
-					/* remove minor node */
-					if (scf_comtbl.resource_flag &
-						DID_MNODE) {
-						ddi_remove_minor_node(dip,
-							NULL);
-						scf_comtbl.resource_flag &=
-							(~DID_MNODE);
-					}
-
-					/* soft state free */
-					ddi_soft_state_free(scfstate, instance);
-
-					mutex_exit(&scf_comtbl.attach_mutex);
-					goto END_attach;
-				}
-				scf_comtbl.resource_flag |= DID_MNODE;
-				SCFDBGMSG(SCF_DBGFLAG_DDI,
-					"ddi_create_minor_node() is success");
-			}
-
-			scf_comtbl.scf_pseudo_p = statep;
-
-			mutex_exit(&scf_comtbl.attach_mutex);
-		}
-		ret = DDI_SUCCESS;
-		goto END_attach;
-	}
-
-	/* get SCF Driver mutex */
-	mutex_enter(&scf_comtbl.attach_mutex);
-
-	if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-
-		if (ddi_get_iblock_cookie(dip, 0, &scf_comtbl.iblock_cookie) !=
-			DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: "
-				"ddi_get_iblock_cookie failed.\n",
-					scf_driver_name);
-
-			mutex_exit(&scf_comtbl.attach_mutex);
-			goto END_attach;
-		}
-
-		mutex_init(&scf_comtbl.all_mutex, NULL, MUTEX_DRIVER,
-			scf_comtbl.iblock_cookie);
-		scf_comtbl.resource_flag |= DID_MUTEX_ALL;
-	}
-	if (!(scf_comtbl.resource_flag & DID_MUTEX_SI)) {
-
-		if (ddi_get_soft_iblock_cookie(dip, SCF_EVENT_PRI,
-			&scf_comtbl.soft_iblock_cookie) !=
-			DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: "
-				"ddi_get_soft_iblock_cookie failed.\n",
-					scf_driver_name);
-
-			mutex_exit(&scf_comtbl.attach_mutex);
-			goto END_attach;
-		}
-
-		mutex_init(&scf_comtbl.si_mutex, NULL, MUTEX_DRIVER,
-			scf_comtbl.soft_iblock_cookie);
-		scf_comtbl.resource_flag |= DID_MUTEX_SI;
-	}
-	/* add software interrupt handler */
-	if (!(scf_comtbl.resource_flag & DID_SOFTINTR)) {
-		if (ddi_add_softintr(dip, SCF_EVENT_PRI,
-			&scf_comtbl.scf_softintr_id, NULL, NULL,
-			&scf_softintr, NULL) != DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ATTACH | TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: ddi_add_softintr failed.",
-				scf_driver_name);
-			goto ATTACH_failed;
-		}
-		scf_comtbl.resource_flag |= DID_SOFTINTR;
-	}
-	/* kstat resource initialize */
-	if (!(scf_comtbl.resource_flag & DID_KSTAT)) {
-		scf_kstat_init();
-		scf_comtbl.resource_flag |= DID_KSTAT;
-	}
-
-	mutex_exit(&scf_comtbl.attach_mutex);
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* get instance number */
-	instance = ddi_get_instance(dip);
-
-	switch (cmd) {
-	case DDI_ATTACH:
-	/* DDI_ATTACH */
-		SCFDBGMSG(SCF_DBGFLAG_DDI, "attach proc");
-		/* allocate softstate */
-		if (ddi_soft_state_zalloc(scfstate, instance) != DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: "
-				"ddi_soft_state_zalloc failed.\n",
-					scf_driver_name);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_attach;
-		}
-
-		/* get softstate */
-		if ((statep = ddi_get_soft_state(scfstate, instance)) == NULL) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: ddi_get_soft_state failed.\n",
-				scf_driver_name);
-			ddi_soft_state_free(scfstate, instance);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_attach;
-		}
-
-		/* pathname get (use cmn_err) */
-		if (ddi_pathname(dip, &wk_pathname[0]) != 0) {
-			sprintf(&statep->pathname[0], "%s(%s%d)",
-				&wk_pathname[0], ddi_get_name(dip), instance);
-		} else {
-			sprintf(&statep->pathname[0], "(%s%d)",
-				ddi_get_name(dip), instance);
-		}
-
-		/* retain dip in soft state */
-		statep->dip = dip;
-
-		/* create minor node */
-		sprintf(wk_pathname, "%s%d", ddi_get_name(dip), instance);
-		if (ddi_create_minor_node(dip, wk_pathname, S_IFCHR, instance,
-			DDI_PSEUDO, 0) == DDI_FAILURE) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: "
-				"ddi_create_minor_node failed.\n",
-					scf_driver_name);
-			goto ATTACH_failed;
-		}
-		statep->resource_flag |= S_DID_MNODE;
-
-		statep->instance = instance;
-
-		/* get configuration file */
-		scf_reload_conf(statep);
-
-		/* map SCF registers */
-		if (scf_map_regs(dip, statep) != 0) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			goto ATTACH_failed;
-		}
-
-		/* add interrupt handler */
-		if (ddi_add_intr(dip, 0, NULL, 0, &scf_intr, (caddr_t)statep) !=
-			DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: ddi_add_intr failed.\n",
-				scf_driver_name);
-			goto ATTACH_failed;
-		}
-		statep->resource_flag |= S_DID_INTR;
-
-		SCF_DBG_IOMP_ADD(statep);
-
-		/* DSCP inteface initialize */
-		if (!(scf_comtbl.resource_flag & DID_DSCPINIT)) {
-			scf_dscp_init();
-			scf_comtbl.resource_flag |= DID_DSCPINIT;
-		}
-
-		/* permit SCF intr */
-		scf_permit_intr(statep, 1);
-
-		/* first attach */
-		if ((scf_comtbl.scf_path_p == NULL) &&
-			(scf_comtbl.scf_exec_p == NULL)) {
-			/* no execute scf device */
-			if (scf_comtbl.watchdog_after_resume) {
-				scf_comtbl.alive_running = SCF_ALIVE_START;
-				scf_comtbl.watchdog_after_resume = 0;
-			}
-			scf_chg_scf(statep, PATH_STAT_ACTIVE);
-			scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-			scf_comtbl.scf_domain_event_sub = EVENT_SUB_DOMAIN_WAIT;
-			scf_next_cmd_check(statep);
-		} else {
-			/* exists execute scf device */
-			scf_chg_scf(statep, PATH_STAT_STANDBY);
-		}
-		scf_comtbl.attach_count++;
-
-		ddi_report_dev(dip);
-
-		/* Collect the timers which need to be stopped */
-		tm_stop_cnt = scf_timer_stop_collect(save_tmids,
-			SCF_TIMERCD_MAX);
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		/* Timer stop */
-		if (tm_stop_cnt != 0) {
-			scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-		}
-
-		ret = DDI_SUCCESS;
-		goto END_attach;
-
-	case DDI_RESUME:
-		SCFDBGMSG(SCF_DBGFLAG_DDI, "resume proc");
-		/* get softstate */
-		if ((statep = ddi_get_soft_state(scfstate, instance)) == NULL) {
-			SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__,
-				"attach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_attach: ddi_get_soft_state failed.\n",
-				scf_driver_name);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_attach;
-		}
-
-		/* Transmitting stop release by SUSPEND */
-		scf_comtbl.scf_suspend_sendstop = 0;
-		/* queue update */
-		scf_del_queue(statep);
-		if ((statep->old_path_status == PATH_STAT_ACTIVE) ||
-			(statep->old_path_status == PATH_STAT_STANDBY)) {
-			if ((scf_comtbl.scf_path_p == NULL) &&
-				(scf_comtbl.scf_exec_p == NULL)) {
-				scf_comtbl.suspend_flag = 0;
-				if (scf_comtbl.watchdog_after_resume) {
-					scf_comtbl.alive_running =
-						SCF_ALIVE_START;
-					scf_comtbl.watchdog_after_resume = 0;
-				}
-				/* permit SCF intr */
-				scf_permit_intr(statep, 1);
-				scf_chg_scf(statep, PATH_STAT_ACTIVE);
-				scf_comtbl.scf_pchg_event_sub =
-					EVENT_SUB_PCHG_WAIT;
-				scf_next_cmd_check(statep);
-				scf_comtbl.scf_report_event_sub =
-					EVENT_SUB_REPORT_RUN_WAIT;
-			} else {
-				/* exists execute SCF device */
-				scf_chg_scf(statep, PATH_STAT_STANDBY);
-				/* permit SCF intr */
-				scf_permit_intr(statep, 1);
-			}
-		} else {
-			scf_chg_scf(statep, statep->old_path_status);
-		}
-
-		/* Collect the timers which need to be stopped */
-		tm_stop_cnt = scf_timer_stop_collect(save_tmids,
-			SCF_TIMERCD_MAX);
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		/* Timer stop */
-		if (tm_stop_cnt != 0) {
-			scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-		}
-
-		ret = DDI_SUCCESS;
-		goto END_attach;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_ATTACH|TC_ERR, __LINE__, "attach  ", 8);
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-		goto END_attach;
-	}
-
-/*
- * ATTACH_failed
- */
-	ATTACH_failed:
-
-	scf_resource_free_dev(statep);
-
-	if ((scf_comtbl.scf_exec_p == NULL) &&
-		(scf_comtbl.scf_path_p == NULL) &&
-		(scf_comtbl.scf_wait_p == NULL) &&
-		(scf_comtbl.scf_suspend_p == NULL) &&
-		(scf_comtbl.scf_stop_p == NULL) &&
-		(scf_comtbl.scf_disc_p == NULL) &&
-		(scf_comtbl.scf_err_p == NULL)) {
-		/* last SCF device */
-
-		/* DSCP interface area release */
-		if (scf_comtbl.resource_flag & DID_DSCPINIT) {
-			scf_dscp_fini();
-			scf_comtbl.resource_flag &= (~DID_DSCPINIT);
-		}
-
-		/* All timer stop */
-		scf_timer_all_stop();
-
-		/* Collect the timers which need to be stopped */
-		tm_stop_cnt =
-			scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		/* Timer stop */
-		if (tm_stop_cnt != 0) {
-			scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-		}
-
-		mutex_enter(&scf_comtbl.attach_mutex);
-
-		/* destroy kstat resources */
-		if (scf_comtbl.resource_flag & DID_KSTAT) {
-			scf_kstat_fini();
-			scf_comtbl.resource_flag &= (~DID_KSTAT);
-		}
-
-		mutex_exit(&scf_comtbl.attach_mutex);
-	} else {
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-	}
-
-	ddi_soft_state_free(scfstate, instance);
-
-/*
- * END_attach
- */
-	END_attach:
-
-	SC_DBG_DRV_TRACE(TC_ATTACH|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG1(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_detach()
- *
- * Description: Driver detach() entry processing.
- *
- */
-int
-scf_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_detach() "
-	scf_state_t		*statep;
-	int			instance;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	int			ret = DDI_FAILURE;
-	scf_state_t		*next_path = 0;
-	int			cv_ret;
-	clock_t			wk_time;
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG2(SCF_DBGFLAG_DDI,
-		SCF_FUNC_NAME ": start instance = %d name = %s",
-		ddi_get_instance(dip), ddi_get_name(dip));
-	SC_DBG_DRV_TRACE(TC_DETACH|TC_IN, __LINE__, &cmd,
-		sizeof (ddi_detach_cmd_t));
-
-	if (strcmp(ddi_get_name(dip), SCF_DRIVER_NAME) == 0) {
-		if (cmd == DDI_DETACH) {
-			SCFDBGMSG(SCF_DBGFLAG_DDI, "pseudo detach proc");
-			mutex_enter(&scf_comtbl.attach_mutex);
-
-			/* get instance number */
-			instance = ddi_get_instance(dip);
-
-			/* remove minor node */
-			if (scf_comtbl.resource_flag & DID_MNODE) {
-				ddi_remove_minor_node(dip, NULL);
-				scf_comtbl.resource_flag &= (~DID_MNODE);
-				SCFDBGMSG(SCF_DBGFLAG_DDI,
-					"ddi_remove_minor_node() is success");
-			}
-
-			/* soft state free */
-			ddi_soft_state_free(scfstate, instance);
-
-			scf_comtbl.scf_pseudo_p = NULL;
-
-			mutex_exit(&scf_comtbl.attach_mutex);
-		}
-		ret = DDI_SUCCESS;
-		goto END_detach;
-	}
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	switch (cmd) {
-	case DDI_DETACH:
-		SCFDBGMSG(SCF_DBGFLAG_DDI, "detach proc");
-		/* get instance number */
-		instance = ddi_get_instance(dip);
-
-		/* get softstate */
-		if ((statep = ddi_get_soft_state(scfstate, instance)) == NULL) {
-			SC_DBG_DRV_TRACE(TC_DETACH|TC_ERR, __LINE__,
-				"detach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_detach: ddi_get_soft_state failed.\n",
-				scf_driver_name);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_detach;
-		}
-
-		if ((scf_comtbl.scf_exec_p == statep) ||
-			(scf_comtbl.scf_path_p == statep)) {
-			if ((next_path = scf_comtbl.scf_wait_p) == 0) {
-				if (scf_last_detach_mode == 0) {
-					/* Last deveice detach is error */
-					SC_DBG_DRV_TRACE(TC_DETACH|TC_MSG,
-						__LINE__, "detach  ", 8);
-					/* Unlock driver mutex */
-					mutex_exit(&scf_comtbl.all_mutex);
-					goto END_detach;
-				}
-			}
-		}
-
-		/* SCF command transmit sync stop */
-		(void) scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-
-		scf_del_queue(statep);
-		scf_comtbl.attach_count--;
-
-		/* forbid interrupt */
-		scf_forbid_intr(statep);
-
-		if (next_path) {
-			/* SCF path change */
-			scf_comtbl.scf_wait_p = next_path->next;
-			scf_chg_scf(next_path, PATH_STAT_ACTIVE);
-			scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-			scf_next_cmd_check(next_path);
-		}
-		/* SCF command sync start */
-		(void) scf_make_send_cmd(&scf_cmd, SCF_USE_START);
-		SCF_DBG_IOMP_DEL(statep);
-
-		scf_resource_free_dev(statep);
-
-		/* free resources allocated in driver */
-		if ((scf_comtbl.scf_exec_p == NULL) &&
-			(scf_comtbl.scf_path_p == NULL) &&
-			(scf_comtbl.scf_wait_p == NULL) &&
-			(scf_comtbl.scf_suspend_p == NULL) &&
-			(scf_comtbl.scf_stop_p == NULL) &&
-			(scf_comtbl.scf_disc_p == NULL) &&
-			(scf_comtbl.scf_err_p == NULL)) {
-			/* last device */
-
-			/* DSCP interface area release */
-			if (scf_comtbl.resource_flag & DID_DSCPINIT) {
-				scf_dscp_fini();
-				scf_comtbl.resource_flag &= (~DID_DSCPINIT);
-			}
-
-			/* All timer stop */
-			scf_timer_all_stop();
-
-			/* Collect the timers which need to be stopped */
-			tm_stop_cnt = scf_timer_stop_collect(save_tmids,
-				SCF_TIMERCD_MAX);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-
-			/* Timer stop */
-			if (tm_stop_cnt != 0) {
-				scf_timer_untimeout(save_tmids,
-					SCF_TIMERCD_MAX);
-			}
-
-			SCF_DBG_TEST_TIMER_STOP;
-
-			mutex_enter(&scf_comtbl.attach_mutex);
-
-			/* destroy kstat resources */
-			if (scf_comtbl.resource_flag & DID_KSTAT) {
-				scf_kstat_fini();
-				scf_comtbl.resource_flag &= (~DID_KSTAT);
-			}
-
-			mutex_exit(&scf_comtbl.attach_mutex);
-		} else {
-			/* Collect the timers which need to be stopped */
-			tm_stop_cnt = scf_timer_stop_collect(save_tmids,
-				SCF_TIMERCD_MAX);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-
-			/* Timer stop */
-			if (tm_stop_cnt != 0) {
-				scf_timer_untimeout(save_tmids,
-					SCF_TIMERCD_MAX);
-			}
-		}
-
-		/* soft state free */
-		ddi_soft_state_free(scfstate, instance);
-
-		ret = DDI_SUCCESS;
-		goto END_detach;
-
-	case DDI_SUSPEND:
-		SCFDBGMSG(SCF_DBGFLAG_DDI, "suspend proc");
-
-		/* get instance number */
-		instance = ddi_get_instance(dip);
-
-		/* get softstate */
-		if ((statep = ddi_get_soft_state(scfstate, instance)) == NULL) {
-			SC_DBG_DRV_TRACE(TC_DETACH|TC_ERR, __LINE__,
-				"detach  ", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_detach: ddi_get_soft_state failed.\n",
-				scf_driver_name);
-
-			/* Unlock driver mutex */
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_detach;
-		}
-
-		if ((scf_comtbl.scf_exec_p == statep) ||
-			(scf_comtbl.scf_path_p == statep)) {
-			/* report "Shutdown start" to SCF */
-			scf_comtbl.suspend_flag = 1;
-
-			/*
-			 * if watching cpu stop it, but set flag for
-			 * restart after resume
-			 */
-			if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-				scf_comtbl.watchdog_after_resume = 1;
-				scf_comtbl.alive_running = SCF_ALIVE_STOP;
-			}
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALSP_WAIT;
-			scf_next_cmd_check(statep);
-			/* SUSPEND wait state */
-			wk_time = drv_usectohz(SCF_MIL2MICRO(scf_timer_value_get
-				(SCF_TIMERCD_CMDEND))) + ddi_get_lbolt();
-			scf_comtbl.suspend_wait = 1;
-			while (scf_comtbl.suspend_wait != 0) {
-				cv_ret = cv_timedwait_sig
-					(&scf_comtbl.suspend_wait_cv,
-						&scf_comtbl.all_mutex, wk_time);
-				if (cv_ret == 0) {
-					scf_comtbl.suspend_wait = 0;
-					SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-						&scf_comtbl.suspend_wait_cv,
-						sizeof (kcondvar_t));
-					break;
-				} else if (cv_ret == (-1)) {
-					scf_comtbl.suspend_wait = 0;
-					SC_DBG_DRV_TRACE(TC_DETACH|TC_ERR,
-						__LINE__, "detach  ", 8);
-					break;
-				}
-			}
-			/* Check SCF command exec */
-			if (scf_comtbl.scf_cmd_exec_flag) {
-				/* Set command wait status */
-				scf_cmdwait_status_set();
-				scf_comtbl.scf_cmd_exec_flag = 0;
-			}
-
-			/* All timer stop */
-			scf_timer_all_stop();
-		}
-
-		scf_del_queue(statep);
-		scf_chg_scf(statep, PATH_STAT_EMPTY);
-
-		/* forbid interrupt */
-		scf_forbid_intr(statep);
-
-		/* Collect the timers which need to be stopped */
-		tm_stop_cnt =
-			scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		/* Timer stop */
-		if (tm_stop_cnt != 0) {
-			scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-		}
-
-		ret = DDI_SUCCESS;
-		goto END_detach;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_DETACH|TC_ERR, __LINE__, "detach  ", 8);
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	}
-
-/*
- * END_detach
- */
-	END_detach:
-
-	SC_DBG_DRV_TRACE(TC_DETACH|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG1(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_resource_free_dev()
- *
- * Description: Release processing of device resources.
- *
- */
-void
-scf_resource_free_dev(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_resource_free_dev() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	/* remove intr */
-	if (statep->resource_flag & S_DID_INTR) {
-		ddi_remove_intr(statep->dip, 0, scf_comtbl.iblock_cookie);
-		statep->resource_flag &= (~S_DID_INTR);
-		SCFDBGMSG(SCF_DBGFLAG_DDI, "ddi_remove_intr() is success");
-	}
-
-	/* remove minor node */
-	if (statep->resource_flag & S_DID_MNODE) {
-		ddi_remove_minor_node(statep->dip, NULL);
-		statep->resource_flag &= (~S_DID_MNODE);
-		SCFDBGMSG(SCF_DBGFLAG_DDI,
-			"ddi_remove_minor_node() is success");
-	}
-
-	/* unmap SCF registers */
-	scf_unmap_regs(statep);
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_getinfo()
- *
- * Description: Driver getinfo() entry processing.
- *
- */
-/* ARGSUSED */
-int
-scf_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg, void **resultp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_getinfo() "
-	scf_state_t		*statep;
-	int			ret;
-	int			instance;
-
-	SCFDBGMSG1(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": start instance = %d",
-		getminor((dev_t)arg));
-
-	instance = getminor((dev_t)arg);
-	if (SCF_CHECK_INSTANCE(instance)) {
-		instance = SCF_USER_INSTANCE;
-	}
-
-	switch (cmd) {
-	case DDI_INFO_DEVT2INSTANCE:
-		*resultp = (void *)(uintptr_t)instance;
-		ret = DDI_SUCCESS;
-		goto END_getinfo;
-	case DDI_INFO_DEVT2DEVINFO:
-		statep = (scf_state_t *)ddi_get_soft_state(scfstate, instance);
-		if (statep != NULL) {
-			*resultp = statep->dip;
-			ret = DDI_SUCCESS;
-			goto END_getinfo;
-		}
-	default:
-		SC_DBG_DRV_TRACE(TC_GETINFO|TC_ERR, __LINE__, "getinfo ", 8);
-		*resultp = NULL;
-		ret = DDI_FAILURE;
-	}
-
-/*
- * END_getinfo
- */
-	END_getinfo:
-
-	SC_DBG_DRV_TRACE(TC_GETINFO|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG1(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_reload_conf()
- *
- * Description: Read in processing of driver configuration file.
- *
- */
-void
-scf_reload_conf(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_reload_conf() "
-	dev_info_t		*dip;
-	int			get_prm;
-	char			*wkcharp = NULL;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	if (scf_comtbl.reload_conf_flag == FLAG_OFF) {
-		dip = statep->dip;
-
-		/*
-		 * get driver control mode value
-		 */
-
-		/* SCFHALT after processing  mode */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_halt_proc_mode", (-1));
-		if (get_prm != (-1)) {
-			scf_halt_proc_mode = (uint_t)get_prm;
-		}
-
-		/*
-		 * get alive check function parameter value
-		 */
-		/* Operation of alive check function */
-		if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf-alive-check-function", &wkcharp) ==
-			DDI_PROP_SUCCESS) {
-			if (strcmp(wkcharp, SCF_ALIVE_FUNC_ON) == 0) {
-				scf_comtbl.alive_running = SCF_ALIVE_START;
-			} else if (strcmp(wkcharp, SCF_ALIVE_FUNC_OFF) == 0) {
-				scf_comtbl.alive_running = SCF_ALIVE_STOP;
-			}
-			ddi_prop_free(wkcharp);
-		}
-
-		/* Interrupt interval time */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf-alive-interval-time", (-1));
-		if (get_prm != (-1)) {
-			SCF_MIN_TO_10SEC(get_prm);
-			scf_alive_interval_time = (uchar_t)get_prm;
-		}
-		/* Monitoring timeout */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf-alive-monitor-time", (-1));
-		if (get_prm != (-1)) {
-			SCF_MIN_TO_10SEC(get_prm);
-			scf_alive_monitor_time = (uchar_t)get_prm;
-		}
-		/* Panic timeout */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf-alive-panic-time", (-1));
-		if (get_prm != (-1)) {
-			SCF_MIN_TO_10SEC(get_prm);
-			scf_alive_panic_time = (ushort_t)get_prm;
-		}
-
-		if ((scf_alive_interval_time < INTERVAL_TIME_MIN) ||
-			(scf_alive_interval_time > INTERVAL_TIME_MAX) ||
-			(scf_alive_monitor_time < MONITOR_TIME_MIN) ||
-			(scf_alive_monitor_time > MONITOR_TIME_MAX) ||
-			((scf_alive_panic_time != PANIC_TIME_NONE) &&
-			(scf_alive_panic_time < PANIC_TIME_MIN)) ||
-			(scf_alive_panic_time > PANIC_TIME_MAX)) {
-			scf_alive_interval_time = INTERVAL_TIME_DEF;
-			scf_alive_monitor_time = MONITOR_TIME_DEF;
-			scf_alive_panic_time = PANIC_TIME_DEF;
-		}
-		if (scf_alive_interval_time >= scf_alive_monitor_time) {
-			scf_alive_monitor_time =
-				scf_alive_interval_time + MONITOR_TIME_CORRECT;
-		}
-
-		/*
-		 * get system interface control value
-		 */
-
-		/* SCFIOCRDCTRL wait timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_rdctrl_sense_wait", (-1));
-		if ((get_prm >= SCF_SEC2MICRO(1)) &&
-			(get_prm <= SCF_SEC2MICRO(120))) {
-			scf_rdctrl_sense_wait = (uint_t)get_prm;
-		}
-
-		/* Buff full wait retry timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_buf_ful_rtime", (-1));
-		if (get_prm >= 0) {
-			scf_buf_ful_rtime = (uint_t)get_prm;
-		}
-
-		/* RCI busy wait retry timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_rci_busy_rtime", (-1));
-		if (get_prm >= 0) {
-			scf_rci_busy_rtime = (uint_t)get_prm;
-		}
-
-		/* Tx sum retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_tesum_rcnt", (-1));
-		if (get_prm >= 0) {
-			scf_tesum_rcnt = (uint_t)get_prm;
-		}
-
-		/* Rx sum retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_resum_rcnt", (-1));
-		if (get_prm >= 0) {
-			scf_resum_rcnt = (uint_t)get_prm;
-		}
-
-		/* Command to retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_cmd_to_rcnt", (-1));
-		if (get_prm >= 0) {
-			scf_cmd_to_rcnt = (uint_t)get_prm;
-		}
-
-		/* Command device busy retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_devbusy_wait_rcnt", (-1));
-		if (get_prm >= 0) {
-			scf_devbusy_wait_rcnt = (uint_t)get_prm;
-		}
-
-		/* SCF online retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_online_wait_rcnt", (-1));
-		if (get_prm >= 0) {
-			scf_online_wait_rcnt = (uint_t)get_prm;
-		}
-
-		/* SCF path change retry counter */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_path_change_max", (-1));
-		if (get_prm >= 0) {
-			scf_path_change_max = (uint_t)get_prm;
-		}
-
-		/*
-		 * get timer control value
-		 */
-
-		/* SCF command busy watch timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_devbusy_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_devbusy_wait_time = (uint_t)get_prm;
-		}
-
-		/* SCF command completion watch value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_cmdend_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_cmdend_wait_time = (uint_t)get_prm;
-		}
-
-		/* SCF online watch timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_online_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_online_wait_time = (uint_t)get_prm;
-		}
-
-		/* Next receive wait timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_rxbuff_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_rxbuff_wait_time = (uint_t)get_prm;
-		}
-
-		/* DSCP interface TxACK watch timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_dscp_ack_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_dscp_ack_wait_time = (uint_t)get_prm;
-		}
-
-		/* DSCP interface TxEND watch timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_dscp_end_wait_time", (-1));
-		if (get_prm >= 0) {
-			scf_dscp_end_wait_time = (uint_t)get_prm;
-		}
-
-		/* DSCP interface busy watch timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_dscp_txbusy_time", (-1));
-		if (get_prm >= 0) {
-			scf_dscp_txbusy_time = (uint_t)get_prm;
-		}
-
-		/* DSCP interface callback timer value */
-		get_prm = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
-			(DDI_PROP_DONTPASS | DDI_PROP_NOTPROM),
-			"scf_dscp_callback_time", (-1));
-		if (get_prm >= 0) {
-			scf_dscp_callback_time = (uint_t)get_prm;
-		}
-
-		/* Timer value set */
-		scf_timer_init();
-
-		scf_comtbl.reload_conf_flag = FLAG_ON;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfd.conf	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#
-# 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
-#
-#
-# All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
-#
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-# Begin (do not edit)
-name="scfd" parent="pseudo" instance=200;
-ddi-forceattach=1;
-interrupt-priorities=0x9;
-# End (do not edit)
-
-# When scf-alive-check-function is set to "on", starts the Alive check
-# function by XSCF. If XSCF detected abnormality of the domain, OS panic of
-# the domain is executed. The default is "off".
-#   "on"  : Starts the Alive check function
-#   "off" : Stops the Alive check function
-scf-alive-check-function="off";
-
-# You can set the Alive check interval time for the Alive check function.
-# Specify this parameter in minutes. The range is 1 - 10 minutes.
-# The default is 2 minutes.
-scf-alive-interval-time=2;
-
-# You can set the Alive check monitoring time for the Alive check function.
-# Specify this parameter in minutes. The range is 3 - 30 minutes.
-# The default is 6 minutes.
-scf-alive-monitor-time=6;
-
-# You can set the monitoring time for the OS panic monitoring of Alive
-# check function. Specify this parameter in minutes. The range is
-# 30 - 360 minutes. The default is 30 minutes.
-scf-alive-panic-time=30;
--- a/usr/src/uts/sun4u/opl/io/scfd/scfdebug.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2079 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/ksynch.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfdscp.h>
-
-#ifdef DEBUG
-/*
- * Debug control value and flag
- */
-uint_t	scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_OFF;
-uint_t	scf_debug_test_rxbuff_nosum_check_flag = SCF_DBF_RXBUFF_NOSUM_CHECK_OFF;
-uint_t	scf_debug_test_sys_event_flag = SCF_DBF_SYS_EVENT_OFF;
-uint_t	scf_debug_test_sys_poff_flag = SCF_DBF_SYS_POFF_OFF;
-uint_t	scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-uint_t	scf_debug_test_cmdr_busy = SCF_DBC_CMDR_BUSY_CLEAR;
-uint_t	scf_debug_test_cmdexr_busy = SCF_DBC_CMDEXR_BUSY_CLEAR;
-uint_t	scf_debug_test_path_check = SCF_DBC_PATH_CHECK_CLEAR;
-uint_t	scf_debug_test_path_check_rtn = SCF_DBC_PATH_CHECK_RTN_CLEAR;
-uint_t	scf_debug_test_offline_check = SCF_DBC_OFFLINE_CHECK_CLEAR;
-uint_t	scf_debug_test_offline_check_rtn = SCF_DBC_OFFLINE_CHECK_RTN_CLEAR;
-uint_t	scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-uint_t	scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_OFF;
-
-uint_t	scf_no_make_sum_s = SCF_DBF_NO_MAKE_SUM_S_OFF;
-uint_t	scf_no_make_sum_l = SCF_DBF_NO_MAKE_SUM_L_OFF;
-
-uint_t	scf_debug_nofirm_sys = SCF_DBF_NOFIRM_SYS_OFF;
-uint_t	scf_debug_scfint_time = SCF_DBT_SCFINT_TIME_100MS;
-uint_t	scf_debug_nofirm_dscp = SCF_DBF_NOFIRM_DSCP_OFF;
-uint_t	scf_debug_idbcint_time = SCF_DBT_IDBCINT_TIME_100MS;
-uint_t	scf_debug_test_dscp_loopback = SCF_DBF_DSCP_LOOPBACK_OFF;
-uint_t	scf_debug_nooffline_check = SCF_DBF_NOOFFLINE_CHECK_OFF;
-uint_t	scf_debug_no_dscp_path = SCF_DBF_NO_DSCP_PATH_OFF;
-uint_t	scf_debug_no_alive = SCF_DBF_NO_ALIVE_OFF;
-uint_t	scf_debug_norxsum_check = SCF_DBF_NORXSUM_CHECK_OFF;
-uint_t	scf_debug_no_int_reason = SCF_DBF_NO_INT_REASON_OFF;
-
-uint_t	scf_debug_no_device = SCF_DBF_NO_DEVICE_OFF;
-
-scf_regs_t	*scf_debug_scf_regs;
-scf_regs_c_t	*scf_debug_scf_regs_c;
-scf_dscp_sram_t	*scf_debug_scf_dscp_sram;
-scf_sys_sram_t	*scf_debug_scf_sys_sram;
-scf_interface_t	*scf_debug_scf_interface;
-scf_if_drvtrc_t	*scf_debug_scf_reg_drvtrc;
-
-scf_regs_t	scf_debug_scf_regs_tbl;
-scf_regs_c_t	scf_debug_scf_regs_c_tbl;
-scf_dscp_sram_t	scf_debug_scf_dscp_sram_tbl;
-scf_sys_sram_t	scf_debug_scf_sys_sram_tbl;
-scf_interface_t	scf_debug_scf_interface_tbl;
-struct {
-	uint8_t		data[0x00001000];
-
-} scf_debug_scf_reg_drvtrc_tbl;
-
-struct {
-	uint16_t	STATUS;
-	uint16_t	INT_ST;
-	uint32_t	STATUS_ExR;
-	uint32_t	rxsize;
-	uint32_t	RDATA0;
-	uint32_t	RDATA1;
-	uint32_t	RDATA2;
-	uint32_t	RDATA3;
-	uint32_t	POFF_FACTOR;
-	uint32_t	EVENT[8 * 4];
-} scf_debug_test_sys_int_tbl;
-
-struct {
-	uint8_t		DSR;
-	uint8_t		rev01;
-	uint16_t	TxDSR_C_FLAG;
-	uint16_t	TxDSR_OFFSET;
-	uint32_t	rxsize;
-	uint16_t	RxDCR_C_FLAG;
-	uint16_t	RxDCR_OFFSET;
-	uint32_t	RxDCR_LENGTH;
-	uint32_t	rsv14;
-	uint32_t	rsv18;
-} scf_debug_test_dscp_int_tbl;
-
-uint32_t	scf_debug_rdata[4] = {0, 0, 0, 0};
-
-timeout_id_t	scf_debug_test_intr_id = 0;
-timeout_id_t	scf_debug_test_alive_id = 0;
-uint_t		scf_debug_test_alive_flag = FLAG_OFF;
-
-/*
- * Function list
- */
-int	scf_debug_cmdthrough(intptr_t arg, int mode);
-int	scf_debug_test(intptr_t arg, int mode);
-void	scf_debug_test_intr_tout(void *arg);
-void	scf_debug_test_intr(scf_state_t *statep);
-void	scf_debug_test_intr_scfint(scf_state_t *statep);
-void	scf_debug_test_intr_cmdend(scf_state_t *statep);
-void	scf_debug_test_intr_poff(void);
-void	scf_debug_test_dsens(struct scf_cmd *scfcmdp, scf_int_reason_t *int_rp,
-	int len);
-void	scf_debug_test_intr_dscp_dsr(scf_state_t *statep);
-void	scf_debug_test_intr_dscp_rxtx(scf_state_t *statep, uint8_t dsr);
-void	scf_debug_test_alive_start(scf_state_t *statep);
-void	scf_debug_test_alive_stop(scf_state_t *statep);
-void	scf_debug_test_alive_intr_tout(void *arg);
-void	scf_debug_test_send_cmd(struct scf_state *statep,
-	struct scf_cmd *scfcmdp);
-void	scf_debug_test_txreq_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p);
-void	scf_debug_test_event_handler(scf_event_t mevent, void *arg);
-void	scf_debug_test_timer_stop(void);
-void	scf_debug_test_map_regs(scf_state_t *statep);
-void	scf_debug_test_unmap_regs(scf_state_t *statep);
-
-/*
- * External function
- */
-extern int	scf_dscp_init(void);
-extern void	scf_dscp_fini(void);
-extern void	scf_dscp_start(uint32_t factor);
-extern void	scf_dscp_stop(uint32_t factor);
-extern int	scf_attach(dev_info_t *dip, ddi_attach_cmd_t cmd);
-extern int	scf_detach(dev_info_t *dip, ddi_detach_cmd_t cmd);
-
-extern int	scf_fmem_start(int s_bd, int t_bd);
-extern int	scf_fmem_end(void);
-extern int	scf_fmem_cancel(void);
-extern int	scf_get_dimminfo(uint32_t boardnum, void *buf, uint32_t *bufsz);
-
-int
-scf_debug_cmdthrough(intptr_t arg, int mode)
-{
-#define	SCF_FUNC_NAME		"scf_debug_cmdthrough() "
-	int			ret = 0;
-	scfcmdthrough_t		*scfcmdthrough_p = NULL;
-	struct scf_cmd		scf_cmd;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	scfcmdthrough_p =
-		kmem_zalloc((size_t)(sizeof (scfcmdthrough_t)),
-		KM_SLEEP);
-	if (ddi_copyin((void *)arg, (void *)scfcmdthrough_p,
-		sizeof (scfcmdthrough_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-		ret = EFAULT;
-		goto END_cmdthrough;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	switch (scfcmdthrough_p->mode) {
-	case SCF_CMDTHROUGH_START:
-		scf_comtbl.debugxscf_flag = 1;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case SCF_CMDTHROUGH_STOP:
-		scf_comtbl.debugxscf_flag = 0;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case SCF_CMDTHROUGH_CMD:
-		if (!scf_comtbl.debugxscf_flag) {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = EINVAL;
-			goto END_cmdthrough;
-		}
-		scf_cmd.cmd = (unsigned char)scfcmdthrough_p->code;
-		scf_cmd.subcmd = (unsigned char)(scfcmdthrough_p->code >> 8);
-
-		switch (scfcmdthrough_p->cmdtype) {
-		case SCF_CMDTHROUGH_TYPE_NN:
-		case SCF_CMDTHROUGH_TYPE_NS:
-		case SCF_CMDTHROUGH_TYPE_NL:
-			scf_cmd.scount = 0;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_SN:
-		case SCF_CMDTHROUGH_TYPE_SS:
-		case SCF_CMDTHROUGH_TYPE_SL:
-			if (scfcmdthrough_p->sbufleng > SCF_S_CNT_16) {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_cmdt", 8);
-				mutex_exit(&scf_comtbl.all_mutex);
-				ret = EINVAL;
-				goto END_cmdthrough;
-			}
-			scf_cmd.scount = scfcmdthrough_p->sbufleng;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_LN:
-		case SCF_CMDTHROUGH_TYPE_LS:
-			if (scfcmdthrough_p->sbufleng > SCF_L_CNT_MAX) {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_cmdt", 8);
-				mutex_exit(&scf_comtbl.all_mutex);
-				ret = EINVAL;
-				goto END_cmdthrough;
-			}
-			scf_cmd.scount = scfcmdthrough_p->sbufleng;
-			break;
-
-		default:
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = EINVAL;
-			goto END_cmdthrough;
-		}
-
-		switch (scfcmdthrough_p->cmdtype) {
-		case SCF_CMDTHROUGH_TYPE_NN:
-		case SCF_CMDTHROUGH_TYPE_SN:
-			scf_cmd.flag = SCF_USE_S_BUF;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_NS:
-		case SCF_CMDTHROUGH_TYPE_SS:
-			scf_cmd.flag = SCF_USE_SSBUF;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_NL:
-		case SCF_CMDTHROUGH_TYPE_SL:
-			scf_cmd.flag = SCF_USE_SLBUF;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_LN:
-			scf_cmd.flag = SCF_USE_L_BUF;
-			break;
-
-		case SCF_CMDTHROUGH_TYPE_LS:
-			scf_cmd.flag = SCF_USE_LSBUF;
-			break;
-		}
-		scf_cmd.sbuf = &scfcmdthrough_p->sbuf[0];
-		scf_cmd.scount = scfcmdthrough_p->sbufleng;
-		scf_cmd.rbuf = &scfcmdthrough_p->rbuf[0];
-		scf_cmd.rcount = SCF_L_CNT_MAX;
-		scf_cmd.rbufleng = 0;
-		scf_cmd.status = 0;
-
-		ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-		scfcmdthrough_p->rbufleng = scf_cmd.rbufleng;
-		scfcmdthrough_p->status = scf_cmd.status;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		if (ret != 0) {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-			goto END_cmdthrough;
-		}
-		if (ddi_copyout((void *)scfcmdthrough_p, (void *)arg,
-			sizeof (scfcmdthrough_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-			ret = EFAULT;
-		}
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_cmdt", 8);
-		mutex_exit(&scf_comtbl.all_mutex);
-		ret = EINVAL;
-	}
-
-/*
- * END_cmdthrough
- */
-	END_cmdthrough:
-
-	if (scfcmdthrough_p) {
-		kmem_free((void *)scfcmdthrough_p,
-			(size_t)(sizeof (scfcmdthrough_t)));
-	}
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-int
-scf_debug_test(intptr_t arg, int mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test() "
-	scf_state_t		*statep;
-	int			func_ret = 0;
-	int			ret = 0;
-
-	scf_scfioctest_t	*test_p = NULL;
-	caddr_t			data_addr = NULL;
-	caddr_t			msc_dptr = NULL;
-	uint32_t		msc_len;
-	uint8_t			*wk_out_p;
-	int			ii;
-	int			jj;
-
-	target_id_t		target_id;
-	mkey_t			mkey;
-	uint_t			func_arg;
-	uint32_t		data_len;
-	uint32_t		num_sg;
-	mscat_gath_t		*sgp = NULL;
-	mflush_type_t		flush_type;
-	uint32_t		op;
-
-	uint32_t		key;
-	uint8_t			type;
-	uint32_t		transid;
-	uint32_t		length;
-	uint16_t		offset_low;
-	uint16_t		offset_hight;
-	int			kmem_size = 0;
-	int			kmem_size2 = 0;
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	test_p = kmem_zalloc((size_t)(sizeof (scf_scfioctest_t)), KM_SLEEP);
-	if (ddi_copyin((void *)arg, (void *)test_p,
-		sizeof (scf_scfioctest_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_test;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	if (scf_comtbl.scf_exec_p != NULL) {
-		statep = scf_comtbl.scf_exec_p;
-	} else if (scf_comtbl.scf_path_p != NULL) {
-		statep = scf_comtbl.scf_path_p;
-	} else if (scf_comtbl.scf_wait_p != NULL) {
-		statep = scf_comtbl.scf_wait_p;
-	} else if (scf_comtbl.scf_err_p != NULL) {
-		statep = scf_comtbl.scf_err_p;
-	}
-
-	test_p->scf_debugxscf = scf_comtbl.debugxscf_flag;
-
-	switch (test_p->mode & TEST_MODE_MASK_LOW) {
-	case TEST_NONE:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_NONE");
-		break;
-
-	case TEST_CONF_RESET:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_CONF_RESET");
-
-		/* Not use info */
-		scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_OFF;
-		scf_debug_test_rxbuff_nosum_check_flag =
-			SCF_DBF_RXBUFF_NOSUM_CHECK_OFF;
-		scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-		scf_debug_test_cmdr_busy = SCF_DBC_CMDR_BUSY_CLEAR;
-		scf_debug_test_cmdexr_busy = SCF_DBC_CMDEXR_BUSY_CLEAR;
-		scf_debug_test_path_check = SCF_DBC_PATH_CHECK_CLEAR;
-		scf_debug_test_path_check_rtn = SCF_DBC_PATH_CHECK_RTN_CLEAR;
-		scf_debug_test_offline_check = SCF_DBC_OFFLINE_CHECK_CLEAR;
-		scf_debug_test_offline_check_rtn =
-			SCF_DBC_OFFLINE_CHECK_RTN_CLEAR;
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_OFF;
-		break;
-
-	case TEST_CONF_DEBUG_MSG:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_CONF_DEBUG_MSG");
-
-		/*
-		 * IN:
-		 *	info[0] : trace massege flag
-		 */
-		scf_trace_msg_flag = test_p->info[0];
-		break;
-
-	case TEST_CONF_CMD_BUSY:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_CONF_CMD_BUSY");
-
-		/*
-		 * IN:
-		 *	info[0] : command busy count
-		 *	info[1] : command ex busy count
-		 */
-		scf_debug_test_cmdr_busy = test_p->info[0];
-		scf_debug_test_cmdexr_busy = test_p->info[1];
-		break;
-
-	case TEST_CONF_SCF_PATH:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_CONF_SCF_PATH");
-
-		/*
-		 * IN:
-		 *	info[0] : scf_path_check count
-		 *	info[1] : scf_path_check return
-		 *	info[2] : scf_offline_check count
-		 *	info[3] : scf_offline_check return
-		 */
-		scf_debug_test_path_check = test_p->info[0];
-		scf_debug_test_path_check_rtn = test_p->info[1];
-		scf_debug_test_offline_check = test_p->info[2];
-		scf_debug_test_offline_check_rtn = test_p->info[3];
-		break;
-
-	case TEST_CONF_DSCP_LOOPBACK:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_CONF_DSCP_LOOPBACK");
-
-		/*
-		 * IN:
-		 *	info[0] : loopback mode
-		 */
-		scf_debug_test_dscp_loopback =
-			(test_p->info[0]) ?
-			SCF_DBF_DSCP_LOOPBACK_ON : SCF_DBF_DSCP_LOOPBACK_OFF;
-		break;
-
-	case TEST_INT_SYS:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_INT_SYS");
-
-		/*
-		 * IN:
-		 *	info[0] : STR/ISR register
-		 *	info[1] : STExR register
-		 *	info[2] : receive data size
-		 *	info[3] : RxDR register 0
-		 *	info[4] : RxDR register 1
-		 *	info[5] : RxDR register 2
-		 *	info[6] : RxDR register 3
-		 */
-		if (scf_debug_scfint_time != 0) {
-			if (scf_debug_test_sys_int_flag ==
-				SCF_DBF_SYS_INTR_OFF) {
-				if (statep != NULL) {
-					scf_debug_test_sys_int_flag =
-						SCF_DBF_SYS_INTR_ON;
-
-					scf_debug_test_sys_int_tbl.STATUS =
-						(uint16_t)
-						(test_p->info[0] >> 16);
-					scf_debug_test_sys_int_tbl.INT_ST |=
-						(uint16_t)test_p->info[0];
-					scf_debug_test_sys_int_tbl.STATUS_ExR =
-						test_p->info[1];
-					scf_debug_test_sys_int_tbl.rxsize =
-						test_p->info[2];
-					scf_debug_test_sys_int_tbl.RDATA0 =
-						test_p->info[3];
-					scf_debug_test_sys_int_tbl.RDATA1 =
-						test_p->info[4];
-					scf_debug_test_sys_int_tbl.RDATA2 =
-						test_p->info[5];
-					scf_debug_test_sys_int_tbl.RDATA3 =
-						test_p->info[6];
-
-					if (scf_debug_test_intr_id == 0) {
-		scf_debug_test_intr_id =
-			timeout((void (*)())scf_debug_test_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(scf_debug_scfint_time)));
-					}
-				} else {
-					SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-						"dbg_test", 8);
-					ret = EIO;
-				}
-			} else {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_test", 8);
-				ret = EBUSY;
-			}
-		}
-		break;
-
-	case TEST_INT_SYS_POFF:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_INT_SYS_POFF");
-
-		/*
-		 * IN:
-		 *	info[0] : POFF factor
-		 */
-		if (scf_debug_test_sys_poff_flag == SCF_DBF_SYS_POFF_OFF) {
-			if (statep != NULL) {
-				scf_debug_test_sys_poff_flag =
-					SCF_DBF_SYS_POFF_ON;
-
-				scf_debug_test_sys_int_tbl.POFF_FACTOR =
-					test_p->info[0];
-			} else {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_test", 8);
-				ret = EIO;
-			}
-		} else {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_test", 8);
-			ret = EBUSY;
-		}
-		break;
-
-	case TEST_INT_SYS_EVENT:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_INT_SYS_EVENT");
-
-		/*
-		 * IN:
-		 *	info[0]  - info[7]  : Event 0
-		 *	info[8]  - info[15] : Event 1
-		 *	info[16] - info[23] : Event 2
-		 *	info[24] - info[31] : Event 3
-		 */
-		if (scf_debug_test_sys_event_flag == FLAG_OFF) {
-			if (statep != NULL) {
-				scf_debug_test_sys_event_flag =
-					SCF_DBF_SYS_EVENT_ON;
-
-				for (ii = 0; ii < TEST_INFO_MAX; ii++) {
-					scf_debug_test_sys_int_tbl.EVENT[ii] =
-						test_p->info[ii];
-				}
-			} else {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_test", 8);
-				ret = EIO;
-			}
-		} else {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_test", 8);
-			ret = EBUSY;
-		}
-		break;
-
-	case TEST_INT_DSCP:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_INT_DSCP");
-
-		/*
-		 * IN:
-		 *	info[0] : DSR/ISR register
-		 *	info[1] : TxDSR_C_FLAG/TxDSR_OFFSET register
-		 *	info[2] : RxDCR_C_FLAG/RxDCR_OFFSET register
-		 *	info[3] : RxDCR_LENGTH register
-		 */
-		if (scf_debug_idbcint_time != 0) {
-			if (scf_debug_test_dscp_int_flag ==
-				SCF_DBF_DSCP_INT_OFF) {
-				if (statep != NULL) {
-	scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_ON;
-	scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_ON;
-
-	scf_debug_test_dscp_int_tbl.DSR = (uint8_t)(test_p->info[0] >> 16);
-	scf_debug_test_sys_int_tbl.INT_ST |= (uint16_t)test_p->info[0];
-	scf_debug_test_dscp_int_tbl.TxDSR_C_FLAG =
-		(uint16_t)(test_p->info[1] >> 16);
-	scf_debug_test_dscp_int_tbl.TxDSR_OFFSET =
-		(uint16_t)test_p->info[1];
-	scf_debug_test_dscp_int_tbl.RxDCR_C_FLAG =
-		(uint16_t)(test_p->info[2] >> 16);
-
-	offset_low = SCF_TXBUFFSIZE * SCF_TX_SRAM_MAXCOUNT / DSC_OFFSET_CONVERT;
-	offset_hight = offset_low +
-		SCF_RXBUFFSIZE * SCF_RX_SRAM_MAXCOUNT / DSC_OFFSET_CONVERT;
-	if ((test_p->info[2] >= offset_low) &&
-		(test_p->info[2] < offset_hight)) {
-		scf_debug_test_dscp_int_tbl.RxDCR_OFFSET =
-			(uint16_t)test_p->info[2];
-	} else {
-		scf_debug_test_dscp_int_tbl.RxDCR_OFFSET = offset_low;
-	}
-	scf_debug_test_dscp_int_tbl.RxDCR_LENGTH = test_p->info[3];
-
-	if ((scf_debug_test_dscp_int_tbl.RxDCR_OFFSET >= offset_low) &&
-		(scf_debug_test_dscp_int_tbl.RxDCR_LENGTH != 0)) {
-		/* Data copy to SRAM */
-		ii = scf_debug_test_dscp_int_tbl.RxDCR_OFFSET *
-			DSC_OFFSET_CONVERT;
-		wk_out_p =
-			(uint8_t *)&statep->scf_dscp_sram->DATA[ii];
-		for (ii = 0; ii < scf_debug_test_dscp_int_tbl.RxDCR_LENGTH;
-			ii++, wk_out_p++) {
-			SCF_DDI_PUT8(statep, statep->scf_dscp_sram_handle,
-				wk_out_p, (uint8_t)ii);
-		}
-	}
-
-	if (scf_debug_test_intr_id == 0) {
-		scf_debug_test_intr_id =
-			timeout((void (*)())scf_debug_test_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(scf_debug_idbcint_time)));
-	}
-				} else {
-					SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-						"dbg_test", 8);
-					ret = EIO;
-				}
-			} else {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_test", 8);
-				ret = EBUSY;
-			}
-		}
-		break;
-
-	case TEST_SYS_CALL_INT:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_SYS_CALL_INT");
-
-		/* Not use info */
-		if (scf_debug_scfint_time != 0) {
-			if (statep != NULL) {
-				if (scf_debug_test_intr_id == 0) {
-		scf_debug_test_intr_id =
-			timeout((void (*)())scf_debug_test_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(scf_debug_scfint_time)));
-				}
-			} else {
-				SC_DBG_DRV_TRACE(TC_ERR, __LINE__,
-					"dbg_test", 8);
-				ret = EIO;
-			}
-		}
-		break;
-
-	case TEST_DSCP_CALL_RESET:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_RESET");
-
-		/* Not use info */
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-
-	case TEST_DSCP_CALL_INIT:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_INIT");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-
-		/*
-		 * scf_mb_init(target_id_t target_id, mkey_t mkey,
-		 * void (*event_handler) (scf_event_t mevent, void *arg),
-		 * void *arg);
-		 */
-
-		func_arg = 0x01020304;
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_mb_init(target_id, mkey, NULL,
-				(void *)&func_arg);
-		} else {
-			func_ret = scf_mb_init(target_id, mkey,
-				scf_debug_test_event_handler,
-				(void *)&func_arg);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-	case TEST_DSCP_CALL_FINI:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_FINI");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-
-		/* scf_mb_fini(target_id_t target_id, mkey_t mkey); */
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_mb_fini(target_id, mkey);
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-	case TEST_DSCP_CALL_PUTMSG:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_PUTMSG");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 *	info[2] : data_len
-		 *	info[3] : num_sg
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-		data_len = (uint32_t)test_p->info[2];
-		num_sg = (uint32_t)test_p->info[3];
-
-		/*
-		 * scf_mb_putmsg(target_id_t target_id, mkey_t mkey,
-		 * uint32_t data_len, uint32_t num_sg, mscat_gath_t *sgp,
-		 * clock_t timeout);
-		 */
-
-
-		if (data_len != 0) {
-			kmem_size = data_len;
-			data_addr = (caddr_t)kmem_zalloc(kmem_size, KM_SLEEP);
-		}
-		if (num_sg != 0) {
-			kmem_size2 = sizeof (mscat_gath_t) * num_sg;
-			sgp = (mscat_gath_t *)kmem_zalloc(kmem_size2, KM_SLEEP);
-		}
-
-		msc_dptr = data_addr;
-		msc_len = data_len;
-		for (ii = 0; ii < num_sg; ii++) {
-			if (msc_len != 0) {
-				sgp[ii].msc_dptr = msc_dptr;
-				if ((msc_len < 0x00000010) ||
-					(ii == (num_sg - 1))) {
-					sgp[ii].msc_len = msc_len;
-				} else {
-					sgp[ii].msc_len = 0x00000010;
-				}
-				msc_len -= sgp[ii].msc_len;
-				for (jj = 0; jj < sgp[ii].msc_len; jj++,
-					msc_dptr++) {
-					*msc_dptr = jj;
-				}
-			} else {
-				sgp[ii].msc_dptr = NULL;
-				sgp[ii].msc_len = 0;
-			}
-		}
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_mb_putmsg(target_id, mkey, data_len,
-				num_sg, NULL, 0);
-		} else if (test_p->data[0] == 2) {
-			sgp->msc_len = 0x00000010;
-			sgp->msc_dptr = NULL;
-			func_ret = scf_mb_putmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		} else if (test_p->data[0] == 3) {
-			sgp->msc_len += 1;
-			func_ret = scf_mb_putmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		} else {
-			func_ret = scf_mb_putmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (data_len != 0)
-			bcopy((void *)data_addr, (void *)&test_p->rdata[0],
-				data_len);
-
-		if (data_addr != NULL) kmem_free(data_addr, kmem_size);
-		if (sgp != NULL) kmem_free(sgp, kmem_size2);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-	case TEST_DSCP_CALL_CANGET:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_CANGET");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 * OUT:
-		 *	info[2] : data_len
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-		data_len = 0xffffffff;
-
-		/*
-		 * scf_mb_canget(target_id_t target_id, mkey_t mkey,
-		 * uint32_t *data_lenp);
-		 */
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_mb_canget(target_id, mkey, NULL);
-		} else {
-			func_ret = scf_mb_canget(target_id, mkey,
-				(uint32_t *)&data_len);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-
-		test_p->info[2] = (uint_t)data_len;
-
-		break;
-
-	case TEST_DSCP_CALL_GETMSG:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_GETMSG");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 *	info[2] : data_len
-		 *	info[3] : num_sg
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-		data_len = (uint32_t)test_p->info[2];
-		num_sg = (uint32_t)test_p->info[3];
-
-		/*
-		 * scf_mb_getmsg(target_id_t target_id, mkey_t mkey,
-		 * uint32_t data_len, uint32_t num_sg, mscat_gath_t *sgp,
-		 * clock_t timeout);
-		 */
-
-		if (data_len != 0) {
-			kmem_size = data_len;
-			data_addr = (caddr_t)kmem_zalloc(kmem_size, KM_SLEEP);
-		}
-		if (num_sg != 0) {
-			kmem_size2 = sizeof (mscat_gath_t) * num_sg;
-			sgp = (mscat_gath_t *)kmem_zalloc(kmem_size2, KM_SLEEP);
-		}
-
-		msc_dptr = data_addr;
-		msc_len = data_len;
-		for (ii = 0; ii < num_sg; ii++) {
-			if (msc_len != 0) {
-				sgp[ii].msc_dptr = msc_dptr;
-				if ((msc_len < 0x00000010) ||
-					(ii == (num_sg - 1))) {
-					sgp[ii].msc_len = msc_len;
-				} else {
-					sgp[ii].msc_len = 0x00000010;
-				}
-				msc_len -= sgp[ii].msc_len;
-				for (jj = 0; jj < sgp[ii].msc_len; jj++,
-					msc_dptr++) {
-					*msc_dptr = jj;
-				}
-			} else {
-				sgp[ii].msc_dptr = NULL;
-				sgp[ii].msc_len = 0;
-			}
-		}
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_mb_getmsg(target_id, mkey, data_len,
-				num_sg, NULL, 0);
-		} else if (test_p->data[0] == 2) {
-			sgp->msc_len = 0x00000010;
-			sgp->msc_dptr = NULL;
-			func_ret = scf_mb_getmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		} else if (test_p->data[0] == 3) {
-			sgp->msc_len += 1;
-			func_ret = scf_mb_getmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		} else {
-			func_ret = scf_mb_getmsg(target_id, mkey, data_len,
-				num_sg, sgp, 0);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (data_len != 0)
-			bcopy((void *)data_addr, (void *)&test_p->rdata[0],
-				data_len);
-
-		if (data_addr != NULL) kmem_free(data_addr, kmem_size);
-		if (sgp != NULL) kmem_free(sgp, kmem_size2);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-	case TEST_DSCP_CALL_FLUSH:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_FLUSH");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 *	info[2] : flush_type
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-		flush_type = (mflush_type_t)test_p->info[2];
-
-		/*
-		 * scf_mb_flush(target_id_t target_id, mkey_t mkey,
-		 * mflush_type_t flush_type);
-		 */
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_mb_flush(target_id, mkey, flush_type);
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-		break;
-
-	case TEST_DSCP_CALL_CTRL:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_CTRL");
-
-		/*
-		 * IN:
-		 *	info[0] : target_id
-		 *	info[1] : mkey
-		 *	info[2] : op
-		 * OUT:
-		 *	info[3] : arg
-		 */
-		target_id = (target_id_t)test_p->info[0];
-		mkey = (mkey_t)test_p->info[1];
-		op = test_p->info[2];
-
-		/*
-		 * scf_mb_ctrl(target_id_t target_id, mkey_t mkey,
-		 *	uint32_t op, void *arg);
-		 */
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_mb_ctrl(target_id, mkey, op, NULL);
-		} else {
-			func_ret = scf_mb_ctrl(target_id, mkey, op,
-				(void *)&func_arg);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_debug_test_dscp_call_flag = SCF_DBF_DSCP_CALL_OFF;
-
-		test_p->info[3] = (uint_t)func_arg;
-
-		break;
-
-	case TEST_DSCP_CALL_OTHER:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_DSCP_CALL_OTHER");
-
-		/*
-		 * IN:
-		 *	info[0] : function code
-		 *	info[1] : factor
-		 * OUT:
-		 *	info[3] : return code
-		 */
-		switch (test_p->info[0]) {
-		case 0x00000001:
-			test_p->info[3] = scf_dscp_init();
-			break;
-
-		case 0x00000002:
-			scf_dscp_fini();
-			break;
-
-		case 0x00000003:
-			scf_dscp_start(test_p->info[1]);
-			break;
-
-		case 0x00000004:
-			scf_dscp_stop(test_p->info[1]);
-			break;
-
-		case 0x00000101:
-			if (test_p->info[1] == 0xffffffff) {
-				for (ii = 0; ii < SCF_TIMERCD_MAX; ii++) {
-					scf_timer_start(ii);
-				}
-			} else {
-				scf_timer_start(test_p->info[1]);
-			}
-			break;
-
-		case 0x00000102:
-			if (test_p->info[1] == 0xffffffff) {
-				scf_timer_all_stop();
-			} else {
-				scf_timer_stop(test_p->info[1]);
-			}
-			break;
-
-		case 0x00000103:
-			func_ret = scf_timer_check(test_p->info[1]);
-			break;
-
-		case 0x00000104:
-			func_ret = scf_timer_value_get(test_p->info[1]);
-			break;
-
-		case 0x00000200:
-			if (statep != NULL) {
-				SCF_SRAM_TRACE(statep, DTC_ONLINETO);
-				SCF_SRAM_TRACE(statep, DTC_ONLINE);
-				SCF_SRAM_TRACE(statep, DTC_OFFLINE);
-
-				SCF_SRAM_TRACE(statep, DTC_SENDDATA);
-
-				SCF_SRAM_TRACE(statep, DTC_RECVDATA);
-
-				SCF_SRAM_TRACE(statep, DTC_ERRRTN);
-				SCF_SRAM_TRACE(statep, DTC_RCI_BUF_FUL);
-				SCF_SRAM_TRACE(statep, DTC_RCI_BUSY);
-				SCF_SRAM_TRACE(statep, DTC_INTERFACE);
-				SCF_SRAM_TRACE(statep, DTC_E_NOT_SUPPORT);
-				SCF_SRAM_TRACE(statep, DTC_E_PARAM);
-				SCF_SRAM_TRACE(statep, DTC_E_SCFC_PATH);
-				SCF_SRAM_TRACE(statep, DTC_E_RCI_ACCESS);
-				SCF_SRAM_TRACE(statep, DTC_E_SEQUENCE);
-
-				SCF_SRAM_TRACE(statep, DTC_RSUMERR);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_TXREQ);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_RXACK);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_RXEND);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_RXREQ);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_TXACK);
-				SCF_SRAM_TRACE(statep, DTC_DSCP_ACKTO);
-				SCF_SRAM_TRACE(statep, DTC_DSCP_ENDTO);
-
-				SCF_SRAM_TRACE(statep, DTC_DSCP_TXEND);
-
-				SCF_SRAM_TRACE(statep, DTC_SENDDATA_SRAM);
-				SCF_SRAM_TRACE(statep, DTC_RECVDATA_SRAM);
-				SCF_SRAM_TRACE(statep, DTC_DSCP_SENDDATA);
-				SCF_SRAM_TRACE(statep, DTC_DSCP_RECVDATA);
-
-				SCF_SRAM_TRACE(statep, DTC_CMD);
-				SCF_SRAM_TRACE(statep, DTC_INT);
-				SCF_SRAM_TRACE(statep, DTC_CMDTO);
-				SCF_SRAM_TRACE(statep, DTC_CMDBUSYTO);
-				SCF_SRAM_TRACE(statep, 0x99);
-			}
-			break;
-
-		case 0x00010000:
-		case 0x00010098:
-			if (statep != NULL) {
-				mutex_exit(&scf_comtbl.all_mutex);
-				func_ret = scf_detach(statep->dip, DDI_SUSPEND);
-				func_ret =
-					scf_detach(scf_comtbl.scf_pseudo_p->dip,
-					DDI_SUSPEND);
-				if (test_p->info[0] == 0x00010098) {
-					scf_panic_callb(1);
-					mutex_enter(&scf_comtbl.all_mutex);
-					break;
-				}
-
-				drv_usecwait(5000000);
-
-				func_ret =
-					scf_attach(scf_comtbl.scf_pseudo_p->dip,
-					DDI_RESUME);
-				func_ret = scf_attach(statep->dip, DDI_RESUME);
-				mutex_enter(&scf_comtbl.all_mutex);
-			}
-			break;
-
-		case 0x00019990:
-		case 0x00019991:
-			mutex_exit(&scf_comtbl.all_mutex);
-			mutex_enter(&scf_comtbl.si_mutex);
-			if (test_p->info[0] & 0x00000001) {
-				scf_comtbl.scf_softintr_dscp_kicked = FLAG_ON;
-			} else {
-				scf_comtbl.scf_softintr_dscp_kicked = FLAG_OFF;
-			}
-			mutex_exit(&scf_comtbl.si_mutex);
-			scf_softintr(NULL);
-			mutex_enter(&scf_comtbl.all_mutex);
-			break;
-
-		case 0x00019998:
-			mutex_exit(&scf_comtbl.all_mutex);
-			scf_panic_callb(1);
-			mutex_enter(&scf_comtbl.all_mutex);
-			break;
-
-		case 0x00019999:
-			mutex_exit(&scf_comtbl.all_mutex);
-			scf_shutdown_callb(1);
-			mutex_enter(&scf_comtbl.all_mutex);
-			break;
-
-		case 0x00020000:
-			func_ret = scf_offline_check(statep, FLAG_OFF);
-			func_ret = scf_offline_check(statep, FLAG_ON);
-			func_ret = scf_cmdbusy_check(statep);
-			break;
-
-		default:
-			break;
-		}
-		break;
-
-	case TEST_OSESCF_CALL_RESET:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_OSESCF_CALL_RESET");
-
-		/* Not use info */
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_OFF;
-		break;
-
-	case TEST_OSESCF_CALL_PUTINFO:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_OSESCF_CALL_PUTINFO");
-
-		/*
-		 * IN:
-		 *	info[0] : key
-		 *	info[1] : type
-		 *	info[2] : transid
-		 *	info[3] : length
-		 */
-		key = (uint32_t)test_p->info[0];
-		type = (uint8_t)test_p->info[1];
-		transid = (uint32_t)test_p->info[2];
-		length = (uint32_t)test_p->info[3];
-
-		/*
-		 * scf_service_putinfo(uint32_t key, uint8_t type,
-		 * uint32_t transid, uint32_t length, void *datap);
-		 */
-
-		if (length != 0) {
-			kmem_size = length;
-			data_addr = (caddr_t)kmem_zalloc(kmem_size, KM_SLEEP);
-		}
-
-		msc_dptr = data_addr;
-		for (ii = 0; ii < length; ii++, msc_dptr++) {
-			*msc_dptr = ii;
-		}
-
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_service_putinfo(key, type, transid,
-				length, NULL);
-		} else {
-			func_ret = scf_service_putinfo(key, type, transid,
-				length, (void *)data_addr);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (length != 0)
-			bcopy((void *)data_addr, (void *)&test_p->rdata[0],
-				length);
-
-		if (data_addr != NULL) kmem_free(data_addr, kmem_size);
-
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_OFF;
-
-		break;
-
-	case TEST_OSESCF_CALL_GETINFO:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_OSESCF_CALL_GETINFO");
-
-		/*
-		 * IN:
-		 *	info[0] : key
-		 *	info[1] : type
-		 *	info[2] : transid
-		 *	info[3] : length
-		 * OUT:
-		 *	info[3] : length
-		 */
-		key = (uint32_t)test_p->info[0];
-		type = (uint8_t)test_p->info[1];
-		transid = (uint32_t)test_p->info[2];
-		length = (uint32_t)test_p->info[3];
-
-		/*
-		 * scf_service_getinfo(uint32_t key, uint8_t type,
-		 * uint32_t transid, uint32_t *lengthp, void *datap);
-		 */
-		if (length != 0) {
-			kmem_size = length;
-			data_addr = (caddr_t)kmem_zalloc(kmem_size, KM_SLEEP);
-		}
-
-		msc_dptr = data_addr;
-		for (ii = 0; ii < length; ii++, msc_dptr++) {
-			*msc_dptr = 0x7f;
-		}
-
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_ON;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (test_p->data[0] == 1) {
-			func_ret = scf_service_getinfo(key, type, transid,
-				(uint32_t *)&length, NULL);
-		} else if (test_p->data[0] == 2) {
-			func_ret = scf_service_getinfo(key, type, transid,
-				NULL, (void *)data_addr);
-		} else {
-			func_ret = scf_service_getinfo(key, type, transid,
-				(uint32_t *)&length, (void *)data_addr);
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (scf_debug_nofirm_sys == SCF_DBF_NOFIRM_SYS_ON) {
-			length = kmem_size;
-			msc_dptr = data_addr;
-			for (ii = 0; ii < length; ii++, msc_dptr++) {
-				*msc_dptr = ii;
-			}
-		}
-		if (length != 0)
-			bcopy((void *)data_addr, (void *)&test_p->rdata[0],
-				length);
-
-		if (data_addr != NULL) kmem_free(data_addr, kmem_size);
-
-		scf_debug_test_osescf_call_flag = SCF_DBF_OSESCF_CALL_OFF;
-
-		test_p->info[3] = (uint_t)length;
-		break;
-
-	case TEST_FMEM_START:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_FMEM_START");
-
-		/*
-		 * IN:
-		 *	info[0] : lsb_1
-		 *	info[1] : lsb_2
-		 */
-
-		/*
-		 * scf_fmem_start(int s_bd, int t_bd);
-		 */
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_fmem_start(test_p->info[0], test_p->info[1]);
-		mutex_enter(&scf_comtbl.all_mutex);
-		break;
-
-	case TEST_FMEM_END:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_FMEM_END");
-
-		/*
-		 * scf_fmem_end(void);
-		 */
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_fmem_end();
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		break;
-
-	case TEST_FMEM_CANCEL:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_FMEM_CANCEL");
-
-		/*
-		 * scf_fmem_cancel(void);
-		 */
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_fmem_cancel();
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		break;
-
-	case TEST_GET_DIMMINFO:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "TEST_GET_DIMMINFO");
-
-		/*
-		 * IN:
-		 *	info[0] : boardnum
-		 *	info[1] : bufsz
-		 * OUT:
-		 *	info[1] : bufsz
-		 */
-		length = (uint32_t)test_p->info[1];
-
-		/*
-		 * scf_get_dimminfo(uint32_t boardnum, void *buf,
-		 * uint32_t *bufsz);
-		 */
-
-		if (length != 0) {
-			kmem_size = length;
-			data_addr = (caddr_t)kmem_zalloc(kmem_size, KM_SLEEP);
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		func_ret = scf_get_dimminfo(test_p->info[0], data_addr,
-			&length);
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (scf_debug_nofirm_sys == SCF_DBF_NOFIRM_SYS_ON) {
-			length = kmem_size;
-			msc_dptr = data_addr;
-			for (ii = 0; ii < length; ii++, msc_dptr++) {
-				*msc_dptr = ii;
-			}
-		}
-		if (length != 0)
-			bcopy((void *)data_addr, (void *)&test_p->rdata[0],
-				length);
-
-		if (data_addr != NULL) kmem_free(data_addr, kmem_size);
-
-		test_p->info[1] = (uint_t)length;
-
-		break;
-
-	default:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "Undefine mod");
-
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "dbg_test", 8);
-		ret = EINVAL;
-		break;
-	}
-
-	test_p->rtncode = func_ret;
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	if (ret == 0) {
-		if (ddi_copyout((void *)test_p, (void *)arg,
-			sizeof (scf_scfioctest_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_test
- */
-	END_test:
-
-	if (test_p) {
-		kmem_free((void *)test_p,
-			(size_t)(sizeof (scf_scfioctest_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-void
-scf_debug_test_intr_tout(void *arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_tout() "
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	if (scf_debug_test_intr_id != 0) {
-		scf_debug_test_intr_id = 0;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		scf_intr(arg);
-	} else {
-		mutex_exit(&scf_comtbl.all_mutex);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	statep->reg_int_st = scf_debug_test_sys_int_tbl.INT_ST;
-
-	if (SCF_DBG_CHECK_NODEVICE) {
-		SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST, statep->reg_int_st);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, "set ISR = 0x%04x", statep->reg_int_st);
-
-	scf_debug_test_sys_int_tbl.INT_ST = 0;
-
-	if ((statep->reg_int_st & INT_ST_IDBCINT) == 0) {
-		scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-	}
-	if ((statep->reg_int_st & INT_ST_SCFINT) == 0) {
-		scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_OFF;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr_scfint(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_scfint() "
-	uint16_t		wk_STATUS;
-	uint32_t		wk_STATUS_ExR;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if ((scf_debug_test_sys_int_tbl.STATUS & STATUS_MODE_CHANGED) == 0) {
-		wk_STATUS =
-			statep->reg_status &
-			(STATUS_SECURE_MODE | STATUS_BOOT_MODE);
-		scf_debug_test_sys_int_tbl.STATUS &=
-			~(STATUS_SECURE_MODE | STATUS_BOOT_MODE);
-		scf_debug_test_sys_int_tbl.STATUS |= wk_STATUS;
-	}
-	statep->reg_status = scf_debug_test_sys_int_tbl.STATUS;
-
-	if (SCF_DBG_CHECK_NODEVICE) {
-		SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, statep->reg_status);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, "set STR = 0x%04x", statep->reg_status);
-
-	scf_debug_test_sys_int_tbl.STATUS = 0;
-
-	if ((scf_debug_test_sys_int_tbl.STATUS_ExR &
-		STATUS_SCF_STATUS_CHANGE) == 0) {
-		wk_STATUS_ExR = statep->reg_status_exr &
-			(STATUS_SCF_STATUS | STATUS_SCF_NO);
-		scf_debug_test_sys_int_tbl.STATUS_ExR &=
-			~(STATUS_SCF_STATUS | STATUS_SCF_NO);
-		scf_debug_test_sys_int_tbl.STATUS_ExR |= wk_STATUS_ExR;
-	}
-	statep->reg_status_exr = scf_debug_test_sys_int_tbl.STATUS_ExR;
-
-	if (SCF_DBG_CHECK_NODEVICE) {
-		SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, statep->reg_status_exr);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, "set STExR = 0x%08x",
-		statep->reg_status_exr);
-
-	scf_debug_test_sys_int_tbl.STATUS_ExR = 0;
-
-	if ((statep->reg_status & STATUS_CMD_COMPLETE) == 0) {
-		scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_OFF;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr_cmdend(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_cmdend() "
-	uint_t			ii;
-	uint8_t			*wk_charp;
-	uint8_t			sum = SCF_MAGICNUMBER_S;
-	uint32_t		sum4 = SCF_MAGICNUMBER_L;
-	uint32_t		wk_data;
-	uint8_t			*wk_out_p;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if (scf_debug_test_sys_int_tbl.rxsize < SCF_S_CNT_16) {
-		if ((scf_debug_rdata[0] == 0) &&
-			(scf_debug_rdata[1] == 0) &&
-			(scf_debug_rdata[2] == 0) &&
-			(scf_debug_rdata[3] == 0)) {
-			statep->reg_rdata[0] =
-				scf_debug_test_sys_int_tbl.RDATA0;
-			statep->reg_rdata[1] =
-				scf_debug_test_sys_int_tbl.RDATA1;
-			statep->reg_rdata[2] =
-				scf_debug_test_sys_int_tbl.RDATA2;
-			statep->reg_rdata[3] =
-				scf_debug_test_sys_int_tbl.RDATA3;
-		} else {
-			statep->reg_rdata[0] = scf_debug_rdata[0];
-			statep->reg_rdata[1] = scf_debug_rdata[1];
-			statep->reg_rdata[2] = scf_debug_rdata[2];
-			statep->reg_rdata[3] = scf_debug_rdata[3];
-		}
-	} else {
-		statep->reg_rdata[0] = scf_debug_test_sys_int_tbl.rxsize;
-		statep->reg_rdata[1] = 0;
-		if (scf_debug_test_sys_int_tbl.RDATA2 != 0) {
-			statep->reg_rdata[2] =
-				scf_debug_test_sys_int_tbl.RDATA2;
-			scf_debug_test_rxbuff_nosum_check_flag =
-				SCF_DBF_RXBUFF_NOSUM_CHECK_OFF;
-		} else {
-			statep->reg_rdata[2] = 0;
-			scf_debug_test_rxbuff_nosum_check_flag =
-				SCF_DBF_RXBUFF_NOSUM_CHECK_ON;
-		}
-		statep->reg_rdata[3] = scf_debug_test_sys_int_tbl.RDATA3;
-
-		if ((scf_comtbl.scf_exec_cmd_id == 0) &&
-			(scf_comtbl.scf_cmd_intr.cmd == CMD_INT_REASON)) {
-			wk_out_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-			for (ii = 0; ii < scf_debug_test_sys_int_tbl.rxsize;
-				ii++, wk_out_p++) {
-				SCF_DDI_PUT8(statep,
-					statep->scf_sys_sram_handle, wk_out_p,
-					0x00);
-			}
-		} else {
-			wk_data = 0x00010203;
-			wk_out_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-			for (ii = 0; ii < scf_debug_test_sys_int_tbl.rxsize;
-				ii++, wk_out_p++) {
-				SCF_DDI_PUT8(statep,
-					statep->scf_sys_sram_handle, wk_out_p,
-					ii);
-				if ((ii % 4) == 0) {
-					wk_data = (ii & 0x000000ff) << 24;
-				} else if ((ii % 4) == 1) {
-					wk_data |= (ii & 0x000000ff) << 16;
-				} else if ((ii % 4) == 2) {
-					wk_data |= (ii & 0x000000ff) << 8;
-				} else {
-					wk_data |= (ii & 0x000000ff);
-					sum4 += wk_data;
-				}
-			}
-		}
-
-		if (scf_no_make_sum_l == SCF_DBF_NO_MAKE_SUM_L_OFF) {
-			statep->reg_rdata[2] = sum4;
-		}
-	}
-
-	wk_charp = (uint8_t *)&statep->reg_rdata[0];
-	for (ii = 0; ii < SCF_S_CNT_15; ii++, wk_charp++) {
-		sum += (*wk_charp);
-	}
-
-	if (scf_no_make_sum_s == SCF_DBF_NO_MAKE_SUM_S_OFF) {
-		*wk_charp = sum;
-	}
-
-	SCFDBGMSG4(SCF_DBGFLAG_DBG, "set RxDR = 0x%08x 0x%08x 0x%08x 0x%08x",
-		statep->reg_rdata[0], statep->reg_rdata[1],
-		statep->reg_rdata[2], statep->reg_rdata[3]);
-
-	scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_OFF;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr_poff(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_poff() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	scf_comtbl.scf_poff_id = scf_debug_test_sys_int_tbl.POFF_FACTOR;
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, "set POFF factor = 0x%02x",
-		scf_comtbl.scf_poff_id);
-
-	scf_debug_test_sys_poff_flag = SCF_DBF_SYS_POFF_OFF;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-void
-scf_debug_test_dsens(struct scf_cmd *scfcmdp, scf_int_reason_t *int_rp, int len)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_dsens() "
-	int			wk_len = len;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if (wk_len == 0) {
-		wk_len = SCF_INT_CNT_MAX;
-		scfcmdp->rbufleng = wk_len;
-	}
-
-	wk_in_p = (uint8_t *)&scf_debug_test_sys_int_tbl.EVENT[0];
-	wk_out_p = (uint8_t *)int_rp;
-	bcopy((void *)wk_in_p, (void *)wk_out_p, wk_len);
-
-	scf_debug_test_sys_event_flag = SCF_DBF_SYS_EVENT_OFF;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr_dscp_dsr(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_dscp_dsr() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	statep->reg_dsr = scf_debug_test_dscp_int_tbl.DSR;
-
-	if (SCF_DBG_CHECK_NODEVICE) {
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->DSR, statep->reg_dsr);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, "set DSR = 0x%02x", statep->reg_dsr);
-
-	scf_debug_test_dscp_int_tbl.DSR = 0;
-
-	if ((statep->reg_dsr & (DSR_RxREQ | DSR_TxACK | DSR_TxEND)) == 0) {
-		scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_intr_dscp_rxtx(scf_state_t *statep, uint8_t dsr)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_intr_dscp_rxtx() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if (dsr & DSR_RxREQ) {
-		statep->reg_rxdcr_c_flag =
-			(scf_debug_test_dscp_int_tbl.RxDCR_C_FLAG |
-			DSC_FLAG_DEFAULT);
-		statep->reg_rxdcr_c_length =
-			scf_debug_test_dscp_int_tbl.RxDCR_LENGTH;
-		if (scf_debug_test_dscp_int_tbl.RxDCR_LENGTH != 0) {
-			if (scf_debug_test_dscp_int_tbl.RxDCR_OFFSET !=
-				DSC_OFFSET_NOTHING) {
-			statep->reg_rxdcr_c_offset =
-				scf_debug_test_dscp_int_tbl.RxDCR_OFFSET;
-			} else {
-				statep->reg_rxdcr_c_offset =
-					(SCF_TX_SRAM_MAXCOUNT * SCF_RXBUFFSIZE /
-					DSC_OFFSET_CONVERT);
-			}
-		} else {
-			statep->reg_rxdcr_c_offset = DSC_OFFSET_NOTHING;
-		}
-
-		SCFDBGMSG3(SCF_DBGFLAG_DBG,
-			"set RxDCR = 0x%04x 0x%04x 0x%08x",
-			statep->reg_rxdcr_c_flag,
-			statep->reg_rxdcr_c_offset,
-			statep->reg_rxdcr_c_length);
-
-		if ((dsr & DSR_TxEND) == 0) {
-			scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-		}
-
-	} else  if (dsr == DSR_TxEND) {
-		statep->reg_txdsr_c_flag =
-			(statep->reg_txdcr_c_flag & 0xff00) |
-			scf_debug_test_dscp_int_tbl.TxDSR_C_FLAG;
-		if (scf_debug_test_dscp_int_tbl.TxDSR_OFFSET == 0) {
-			statep->reg_txdsr_c_offset = statep->reg_txdcr_c_offset;
-		} else {
-			statep->reg_txdsr_c_offset =
-				scf_debug_test_dscp_int_tbl.TxDSR_OFFSET;
-		}
-
-		SCFDBGMSG2(SCF_DBGFLAG_DBG, "set TxDSR = 0x%04x 0x%04x",
-			statep->reg_rxdcr_c_flag,
-			statep->reg_rxdcr_c_offset);
-
-		scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_OFF;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_alive_start(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_alive_start() "
-	uint8_t			wk_int8;
-	uint_t			alive_timer;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	wk_int8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->ATR);
-
-	switch (wk_int8 & ATR_INTERVAL) {
-	case ATR_INTERVAL_30S:
-		alive_timer = 30000;
-		break;
-
-	case ATR_INTERVAL_60S:
-		alive_timer = 60000;
-		break;
-
-	case ATR_INTERVAL_120S:
-		alive_timer = 120000;
-		break;
-
-	default:
-		alive_timer = 0;
-		break;
-	}
-	if ((alive_timer != 0) && (scf_debug_test_alive_id == 0)) {
-		scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_ON;
-		scf_debug_test_sys_int_tbl.INT_ST |= INT_ST_ALIVEINT;
-		scf_debug_test_alive_id =
-			timeout((void (*)())scf_debug_test_alive_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(alive_timer)));
-		scf_debug_test_alive_flag = FLAG_ON;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-/* ARGSUSED */
-void
-scf_debug_test_alive_stop(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_alive_stop() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	scf_debug_test_alive_flag = FLAG_OFF;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_alive_intr_tout(void *arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_alive_intr_tout() "
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	scf_debug_test_alive_id = 0;
-
-	if (scf_debug_test_alive_flag == FLAG_ON) {
-		scf_debug_test_alive_start(arg);
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		scf_intr(arg);
-	} else {
-		mutex_exit(&scf_comtbl.all_mutex);
-	}
-
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_send_cmd(scf_state_t *statep, struct scf_cmd *scfcmdp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_send_cmd() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if (scf_debug_scfint_time != 0) {
-		scf_debug_test_sys_int_flag = SCF_DBF_SYS_INTR_ON;
-		scf_debug_test_sys_int_tbl.INT_ST |= INT_ST_SCFINT;
-
-		scf_debug_test_sys_int_tbl.STATUS = STATUS_CMD_COMPLETE;
-		scf_debug_test_sys_int_tbl.STATUS_ExR = 0;
-
-		switch (scfcmdp->flag) {
-		case SCF_USE_SSBUF:
-		case SCF_USE_LSBUF:
-			scf_debug_test_sys_int_tbl.rxsize = scfcmdp->rcount;
-			scf_debug_test_sys_int_tbl.RDATA0 = 0x00010203;
-			scf_debug_test_sys_int_tbl.RDATA1 = 0x04050607;
-			scf_debug_test_sys_int_tbl.RDATA2 = 0x08090a0b;
-			scf_debug_test_sys_int_tbl.RDATA3 = 0x0c0d0e0f;
-			break;
-
-		case SCF_USE_SLBUF:
-			scf_debug_test_sys_int_tbl.rxsize = scfcmdp->rcount;
-			scf_debug_test_sys_int_tbl.RDATA0 = scfcmdp->rcount;
-			scf_debug_test_sys_int_tbl.RDATA1 = 0;
-			scf_debug_test_sys_int_tbl.RDATA2 = 0;
-			scf_debug_test_sys_int_tbl.RDATA3 = 0;
-			break;
-
-		default:
-			scf_debug_test_sys_int_tbl.rxsize = 0;
-			scf_debug_test_sys_int_tbl.RDATA0 = 0;
-			scf_debug_test_sys_int_tbl.RDATA1 = 0;
-			scf_debug_test_sys_int_tbl.RDATA2 = 0;
-			scf_debug_test_sys_int_tbl.RDATA3 = 0;
-			break;
-		}
-
-		if (scf_debug_test_intr_id == 0) {
-		scf_debug_test_intr_id =
-			timeout((void (*)())scf_debug_test_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(scf_debug_scfint_time)));
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_txreq_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_txreq_send() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	if (scf_debug_idbcint_time != 0) {
-		scf_debug_test_dscp_int_flag = SCF_DBF_DSCP_INT_ON;
-		scf_debug_test_sys_int_tbl.INT_ST |= INT_ST_IDBCINT;
-
-		if (dsc_p->dinfo.base.length != 0) {
-			if (scf_debug_test_dscp_loopback ==
-				SCF_DBF_DSCP_LOOPBACK_ON) {
-				scf_debug_test_dscp_int_tbl.DSR =
-					(DSR_RxREQ | DSR_TxACK | DSR_TxEND);
-
-				scf_debug_test_dscp_int_tbl.RxDCR_C_FLAG =
-					dsc_p->dinfo.base.c_flag;
-				scf_debug_test_dscp_int_tbl.RxDCR_OFFSET =
-					dsc_p->dinfo.base.offset;
-				scf_debug_test_dscp_int_tbl.RxDCR_LENGTH =
-					dsc_p->dinfo.base.length;
-			} else {
-				scf_debug_test_dscp_int_tbl.DSR =
-					(DSR_TxACK | DSR_TxEND);
-			}
-		} else {
-			scf_debug_test_dscp_int_tbl.DSR = DSR_TxEND;
-		}
-
-		scf_debug_test_dscp_int_tbl.TxDSR_C_FLAG =
-			(dsc_p->dinfo.base.c_flag & 0xff00) | DSC_STATUS_NORMAL;
-		scf_debug_test_dscp_int_tbl.TxDSR_OFFSET =
-			dsc_p->dinfo.base.offset;
-
-		if (scf_debug_test_intr_id == 0) {
-		scf_debug_test_intr_id =
-			timeout((void (*)())scf_debug_test_intr_tout,
-			(void *)statep,
-			drv_usectohz(SCF_MIL2MICRO(scf_debug_idbcint_time)));
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-/* ARGSUSED */
-void
-scf_debug_test_event_handler(scf_event_t mevent, void *arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_event_handler() "
-
-	SCFDBGMSG1(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start mevent = %d",
-		mevent);
-	SCFDBGMSG(SCF_DBGFLAG_DBG, "=======================================");
-
-	switch (mevent) {
-	case SCF_MB_CONN_OK:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "SCF_MB_CONN_OK");
-		break;
-	case SCF_MB_MSG_DATA:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "SCF_MB_MSG_DATA");
-		break;
-	case SCF_MB_SPACE:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "SCF_MB_SPACE");
-		break;
-	case SCF_MB_DISC_ERROR:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "SCF_MB_DISC_ERROR");
-		break;
-	default:
-		SCFDBGMSG(SCF_DBGFLAG_DBG, "Undefine event code");
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, "=======================================");
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_timer_stop()
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_timer_stop() "
-	timeout_id_t		save_tmid[4];
-	int			timer_cnt = 0;
-	int			ii;
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	if (scf_debug_test_intr_id != 0) {
-		save_tmid[timer_cnt] = scf_debug_test_intr_id;
-		scf_debug_test_intr_id = 0;
-		timer_cnt++;
-	}
-	if (scf_debug_test_alive_id != 0) {
-		save_tmid[timer_cnt] = scf_debug_test_alive_id;
-		scf_debug_test_alive_id = 0;
-		timer_cnt++;
-	}
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	for (ii = 0; ii < timer_cnt; ii++) {
-		(void) untimeout(save_tmid[ii]);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_map_regs(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_map_regs() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	statep->scf_regs = &scf_debug_scf_regs_tbl;
-	statep->scf_regs_c = &scf_debug_scf_regs_c_tbl;
-	statep->scf_dscp_sram = &scf_debug_scf_dscp_sram_tbl;
-	statep->scf_sys_sram = &scf_debug_scf_sys_sram_tbl;
-	statep->scf_interface = &scf_debug_scf_interface_tbl;
-	statep->scf_reg_drvtrc = (void *)&scf_debug_scf_reg_drvtrc_tbl;
-	statep->scf_reg_drvtrc_len =
-		(off_t)sizeof (scf_debug_scf_reg_drvtrc_tbl);
-
-	statep->resource_flag |=
-		(S_DID_REG1 | S_DID_REG2 | S_DID_REG3 |
-		S_DID_REG4 | S_DID_REG5 | S_DID_REG6);
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_debug_test_unmap_regs(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_debug_test_unmap_regs() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": start");
-
-	statep->scf_regs = NULL;
-	statep->scf_regs_c = NULL;
-	statep->scf_dscp_sram = NULL;
-	statep->scf_sys_sram = NULL;
-	statep->scf_interface = NULL;
-	statep->scf_reg_drvtrc = NULL;
-
-	statep->resource_flag &=
-		~(S_DID_REG1 | S_DID_REG2 | S_DID_REG3 |
-		S_DID_REG4 | S_DID_REG5 | S_DID_REG6);
-
-	SCFDBGMSG(SCF_DBGFLAG_DBG, SCF_FUNC_NAME ": end");
-}
-#endif /* DEBUG */
--- a/usr/src/uts/sun4u/opl/io/scfd/scfdscp.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4541 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/ksynch.h>
-#include <sys/types.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfdscp.h>
-
-/*
- * DSCP control table
- */
-scf_dscp_comtbl_t scf_dscp_comtbl;	/* DSCP control table */
-
-mkey_t 	scf_dscp_mkey_search[] = {
-	DSCP_KEY,			/* DSCP mailbox interface key */
-	DKMD_KEY			/* DKMD mailbox interface key */
-					/* Add mailbox key */
-};
-
-/*
- * SCF driver system control intafece function
- */
-void	scf_dscp_init(void);
-void	scf_dscp_fini(void);
-void	scf_dscp_start(uint32_t factor);
-void	scf_dscp_stop(uint32_t factor);
-void	scf_dscp_intr(scf_state_t *statep);
-
-/*
- * Timeout function : from SCF driver timer contorol function
- */
-void	scf_dscp_ack_tout(void);
-void	scf_dscp_end_tout(void);
-void	scf_dscp_busy_tout(void);
-void	scf_dscp_callback_tout(void);
-void	scf_dscp_callback(void);
-void	scf_dscp_init_tout(uint8_t id);
-
-/*
- * Interrupt function : from scf_dscp_intr()
- */
-void	scf_dscp_txack_recv(scf_state_t *statep);
-void	scf_dscp_txend_recv(scf_state_t *statep);
-void	scf_dscp_rxreq_recv(scf_state_t *statep);
-
-/*
- * Main and Tx/Rx interface function
- */
-void	scf_dscp_txend_notice(scf_dscp_main_t *mainp);
-void	scf_dscp_txrelbusy_notice(scf_dscp_main_t *mainp);
-void	scf_dscp_rxreq_notice(scf_dscp_main_t *mainp);
-void	scf_dscp_rxdata_notice(scf_dscp_main_t *mainp);
-
-/*
- * Tx subroutine function
- */
-void	scf_dscp_send_matrix(void);
-void	scf_dscp_txreq_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p);
-
-/*
- * Rx subroutine function
- */
-void	scf_dscp_recv_matrix(void);
-void	scf_dscp_rxack_send(scf_state_t *statep);
-void	scf_dscp_rxend_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p);
-
-/*
- * subroutine function
- */
-void	scf_dscp_dscbuff_free_all(void);
-void	scf_dscp_txdscbuff_free(scf_dscp_main_t *mainp);
-void	scf_dscp_rxdscbuff_free(scf_dscp_main_t *mainp);
-void	scf_dscp_rdata_free(scf_dscp_main_t *mainp);
-void	scf_dscp_event_queue(scf_dscp_main_t *mainp, scf_event_t mevent);
-void	scf_dscp_event_queue_free(scf_dscp_main_t *mainp);
-scf_dscp_main_t	*scf_dscp_mkey2mainp(mkey_t mkey);
-scf_dscp_main_t	*scf_dscp_id2mainp(uint8_t id);
-uint16_t	scf_dscp_sram_get(void);
-void	scf_dscp_sram_free(uint16_t offset);
-
-
-/*
- * DSCP Driver interface function
- */
-
-/*
- * scf_mb_init()
- *
- * Description: Initialize the mailbox and register a callback for receiving
- *		events related to the specified mailbox.
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- mailbox key
- * event_handler- handler to be called for all events related
- *		  to a mailbox. It should be called back with
- *		  the event type and the registered argument.
- *
- * arg		- A callback argument to be passed back to the
- *		  event_handler.
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned, some of the notable error values
- *		  are given below.
- * EINVAL	- Invalid values.
- * EEXIST	- Already OPEN.
- * EIO		- DSCP I/F path not available.
- */
-int
-scf_mb_init(target_id_t target_id, mkey_t mkey,
-	void (*event_handler) (scf_event_t mevent, void *arg), void *arg)
-{
-#define	SCF_FUNC_NAME		"scf_mb_init() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	int			path_ret; /* SCF path status return value */
-	int			ret = 0;	/* Return value */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_INIT | TC_IN, __LINE__, &mkey, sizeof (mkey));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_INIT | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_init;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_INIT | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_init;
-	}
-
-	/* Check "event_handler" address */
-	if (event_handler == NULL) {
-		/* Invalid "event_handler" */
-		SC_DBG_DRV_TRACE(TC_MB_INIT | TC_ERRCD, __LINE__,
-			&event_handler, sizeof (event_handler));
-		ret = EINVAL;
-		goto END_mb_init;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(NULL);
-
-	/* Check SCF path status */
-	if (path_ret == SCF_PATH_HALT) {
-		/* SCF path status is halt */
-		SC_DBG_DRV_TRACE(TC_MB_INIT | TC_ERRCD, __LINE__, &path_ret,
-			sizeof (path_ret));
-		ret = EIO;
-		goto END_mb_init;
-	}
-
-	/* Check main status */
-	if (mainp->status != SCF_ST_IDLE) {
-		/* Main status != A0 */
-		SC_DBG_DRV_TRACE(TC_MB_INIT | TC_ERRCD, __LINE__,
-			&mainp->status, sizeof (mainp->status));
-		ret = EEXIST;
-		goto END_mb_init;
-	}
-
-	/* Initialize flag */
-	mainp->conn_chk_flag = FLAG_OFF;
-	mainp->putmsg_busy_flag = FLAG_OFF;
-
-	/* Get TxDSC address */
-	dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_put];
-
-	/* Make Tx descriptor : INIT_REQ */
-	dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-	dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-	dsc_p->dinfo.base.length = 0;
-	dsc_p->dinfo.base.dscp_datap = NULL;
-	dsc_p->dinfo.bdcr.id = mainp->id & DSC_CNTL_MASK_ID;
-	dsc_p->dinfo.bdcr.code = DSC_CNTL_INIT_REQ;
-
-	/* Update Tx descriptor offset */
-	if (scf_dscp_comtbl.tx_put == scf_dscp_comtbl.tx_last) {
-		scf_dscp_comtbl.tx_put = scf_dscp_comtbl.tx_first;
-	} else {
-		scf_dscp_comtbl.tx_put++;
-	}
-
-	/* Update Tx descriptor count */
-	scf_dscp_comtbl.tx_dsc_count++;
-
-	/* Change TxDSC status (SB2) */
-	SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-	/* Call send matrix */
-	scf_dscp_send_matrix();
-
-	/* Change main status (B0) */
-	SCF_SET_STATUS(mainp, SCF_ST_EST_TXEND_RECV_WAIT);
-
-	/* Save parameter */
-	mainp->event_handler = event_handler;
-	mainp->arg = arg;
-	mainp->target_id = target_id;
-	mainp->mkey = mkey;
-
-/*
- * END_mb_init
- */
-	END_mb_init:
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_MB_INIT | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_fini()
- *
- * Description: Cleanup the mailbox and unregister an event_handler,
- *		if it is registered.
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- mailbox key
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned, some of the notable error values
- *		  are given below.
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- */
-int
-scf_mb_fini(target_id_t target_id, mkey_t mkey)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_fini() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	int			path_ret; /* SCF path status return value */
-	int			ret = 0;	/* Return value */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_FINI | TC_IN, __LINE__, &mkey, sizeof (mkey));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_FINI | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_fini;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_FINI | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_fini;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(NULL);
-
-	/* Check SCF path status */
-	if (path_ret == SCF_PATH_HALT) {
-		/* SCF path status is halt */
-		if (mainp->status != SCF_ST_IDLE) {
-			/* TxDSC buffer release */
-			scf_dscp_txdscbuff_free(mainp);
-
-			/* RxDSC buffer release */
-			scf_dscp_rxdscbuff_free(mainp);
-
-			/* All queing event release */
-			scf_dscp_event_queue_free(mainp);
-
-			/* All receive buffer release */
-			scf_dscp_rdata_free(mainp);
-
-			/* event_handler and arg NULL */
-			mainp->event_handler = NULL;
-			mainp->arg = NULL;
-
-			/* Change main status (A0) */
-			SCF_SET_STATUS(mainp, SCF_ST_IDLE);
-		}
-		goto END_mb_fini;
-	}
-
-	/* Check main status */
-	switch (mainp->status) {
-	case SCF_ST_EST_TXEND_RECV_WAIT:	/* Main status (B0) */
-	case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_put];
-
-		/* Make Tx descriptor : FINI_REQ */
-		dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-		dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-		dsc_p->dinfo.base.length = 0;
-		dsc_p->dinfo.base.dscp_datap = NULL;
-		dsc_p->dinfo.bdcr.id = mainp->id & DSC_CNTL_MASK_ID;
-		dsc_p->dinfo.bdcr.code = DSC_CNTL_FINI_REQ;
-
-		/* Update Tx descriptor offset */
-		if (scf_dscp_comtbl.tx_put == scf_dscp_comtbl.tx_last) {
-			scf_dscp_comtbl.tx_put = scf_dscp_comtbl.tx_first;
-		} else {
-			scf_dscp_comtbl.tx_put++;
-		}
-
-		/* Update Tx descriptor count */
-		scf_dscp_comtbl.tx_dsc_count++;
-
-		/* Change TxDSC status (SB2) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-		/* Call send matrix */
-		scf_dscp_send_matrix();
-
-		/* Change main status (D0) */
-		SCF_SET_STATUS(mainp, SCF_ST_CLOSE_TXEND_RECV_WAIT);
-
-		/* INIT_REQ retry timer stop */
-		scf_timer_stop(mainp->timer_code);
-
-		/* TxEND(FINI) receive wait */
-		SC_DBG_DRV_TRACE(TC_W_SIG, __LINE__, &mainp->fini_cv,
-			sizeof (kcondvar_t));
-		mainp->fini_wait_flag = FLAG_ON;
-		while (mainp->fini_wait_flag == FLAG_ON) {
-			cv_wait(&mainp->fini_cv, &scf_comtbl.all_mutex);
-		}
-
-		/* TxDSC buffer release */
-		scf_dscp_txdscbuff_free(mainp);
-
-		/* RxDSC buffer release */
-		scf_dscp_rxdscbuff_free(mainp);
-
-		/* All queing event release */
-		scf_dscp_event_queue_free(mainp);
-
-		/* All receive buffer release */
-		scf_dscp_rdata_free(mainp);
-
-		/* event_handler and arg NULL */
-		mainp->event_handler = NULL;
-		mainp->arg = NULL;
-
-		/* Change main status (A0) */
-		SCF_SET_STATUS(mainp, SCF_ST_IDLE);
-		break;
-
-	case SCF_ST_EST_FINI_WAIT:		/* Main status (C1) */
-		/* TxDSC buffer release */
-		scf_dscp_txdscbuff_free(mainp);
-
-		/* RxDSC buffer release */
-		scf_dscp_rxdscbuff_free(mainp);
-
-		/* All queing event release */
-		scf_dscp_event_queue_free(mainp);
-
-		/* All receive buffer release */
-		scf_dscp_rdata_free(mainp);
-
-		/* event_handler and arg NULL */
-		mainp->event_handler = NULL;
-		mainp->arg = NULL;
-
-		/* Change main status (A0) */
-		SCF_SET_STATUS(mainp, SCF_ST_IDLE);
-		break;
-
-	case SCF_ST_IDLE:			/* Main status (A0) */
-		/* Main status == A0 is NOP */
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_FINI | TC_ERRCD, __LINE__,
-			&mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_fini
- */
-	END_mb_fini:
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_MB_FINI | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_putmsg()
- *
- * Description: Send a message via the mailbox identified by mkey. The message
- *		need to	be sent either completely or none. That is, no partial
- *		messages should be sent.
- *
- *		If a 0 timeout value is specified, then it should act as
- *		a non-blocking interface, that is, it should either send
- *		the message immediately or return appropriate error.
- *		If a timeout value is specified, then it can blocked
- *		until either the message is sent successfully or timedout.
- *
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- Unique key corresponding to a mailbox.
- * data_len	- Total length of the data to be sent.
- * num_sg	- Number of scatter/gather elements in the argument sgp.
- * sgp		- Scatter/gather list pointer.
- * timeout	- timeout value in milliseconds. If 0 specified, no waiting
- *		  is required.
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned, some of the notable error values
- *		  are given below.
- *
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- * EBUSY	- Driver is BUSY.
- * ENOSPC	- Not enough space to send the message.
- * EIO		- DSCP I/F path not available.
- */
-/* ARGSUSED */
-int
-scf_mb_putmsg(target_id_t target_id, mkey_t mkey, uint32_t data_len,
-	uint32_t num_sg, mscat_gath_t *sgp, clock_t timeout)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_putmsg() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* Current TxDSC address */
-	caddr_t			wkaddr;	/* Working value : buffer address */
-	uint32_t		wkleng = 0;	/* Working value : length */
-	uint32_t		wkoffset; /* Working value : Tx SRAM offset */
-	int			ii;		/* Working value : counter */
-	int			path_ret; /* SCF path status return value */
-	int			ret = 0;	/* Return value */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_IN, __LINE__, &mkey, sizeof (mkey));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_putmsg;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_putmsg;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(NULL);
-
-	/* Check SCF path status */
-	if (path_ret == SCF_PATH_HALT) {
-		/* SCF path status halt */
-		SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__, &path_ret,
-			sizeof (path_ret));
-		ret = EIO;
-		goto END_mb_putmsg;
-	}
-
-	/* Check main status */
-	switch (mainp->status) {
-	case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-		/* Check "data_len" is "maxdatalen" */
-		if (data_len > scf_dscp_comtbl.maxdatalen) {
-			/* Invalid "data_len" */
-			SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-				&data_len, sizeof (data_len));
-			ret = EINVAL;
-			goto END_mb_putmsg;
-		}
-
-		/* Check "data_len" is 0 */
-		if (data_len == 0) {
-			goto END_mb_putmsg;
-		}
-
-		/*
-		 * Check "num_sg" is not 0, and "sgp" is not NULL
-		 */
-		if ((num_sg == 0) || (sgp == NULL)) {
-			/* Invalid "num_sg" or "sgp" */
-			SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-				&num_sg, sizeof (num_sg));
-			ret = EINVAL;
-			goto END_mb_putmsg;
-		}
-
-		/* Get total data length : "num_sg" */
-		for (ii = 0; ii < num_sg; ii++) {
-			if ((sgp[ii].msc_len == 0) ||
-				(sgp[ii].msc_dptr != NULL)) {
-				/*
-				 * Add total data length
-				 */
-				wkleng += sgp[ii].msc_len;
-			} else {
-				/* Invalid "sgp" */
-				SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD,
-					__LINE__, &ii, sizeof (ii));
-				ret = EINVAL;
-				goto END_mb_putmsg;
-			}
-		}
-
-		/*
-		 * Check "data_len" and "wkleng"
-		 */
-		if (data_len != wkleng) {
-			/* Invalid "data_len" */
-			SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-				&data_len, sizeof (data_len));
-			ret = EINVAL;
-			goto END_mb_putmsg;
-		}
-
-		/*
-		 * Check Tx SRAM space
-		 */
-		if (scf_dscp_comtbl.tx_dsc_count >=
-			scf_dscp_comtbl.txdsc_busycount) {
-			/* No space of Tx SRAM */
-			SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-				&scf_dscp_comtbl.tx_dsc_count,
-				sizeof (scf_dscp_comtbl.tx_dsc_count));
-
-			/* putmsg ENOSPC counter up */
-			mainp->memo_putmsg_enospc_cnt++;
-
-			mainp->putmsg_busy_flag = FLAG_ON;
-			ret = ENOSPC;
-			goto END_mb_putmsg;
-		}
-
-		/* Tx buffer allocation */
-		wkaddr = (caddr_t)kmem_zalloc(wkleng, KM_SLEEP);
-
-		/* Get Tx SRAM offset */
-		wkoffset = scf_dscp_sram_get();
-		/* Check Tx SRAM offset */
-		if (wkoffset == TX_SRAM_GET_ERROR) {
-			/* Tx SRAM offset failure */
-			SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-				&wkoffset, sizeof (wkoffset));
-
-			/* Send data release */
-			kmem_free(wkaddr, wkleng);
-
-			/* putmsg busy counter up */
-			mainp->memo_putmsg_busy_cnt++;
-
-			ret = EBUSY;
-			goto END_mb_putmsg;
-		}
-
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_put];
-
-		/* Make Tx descriptor : DATA_REQ */
-		dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-		dsc_p->dinfo.base.offset = (uint16_t)wkoffset;
-		dsc_p->dinfo.base.length = wkleng;
-		dsc_p->dinfo.base.dscp_datap = wkaddr;
-		dsc_p->dinfo.bdcr.id = mainp->id & DSC_CNTL_MASK_ID;
-		dsc_p->dinfo.bdcr.code = DSC_CNTL_DATA_REQ;
-
-		/* Data copy to Tx buffer */
-		for (ii = 0; ii < num_sg; ii++) {
-			if (sgp[ii].msc_len != 0) {
-				bcopy(sgp[ii].msc_dptr, wkaddr,
-					sgp[ii].msc_len);
-				wkaddr += sgp[ii].msc_len;
-			}
-		}
-
-		/* Update Tx descriptor offset */
-		if (scf_dscp_comtbl.tx_put == scf_dscp_comtbl.tx_last) {
-			scf_dscp_comtbl.tx_put = scf_dscp_comtbl.tx_first;
-		} else {
-			scf_dscp_comtbl.tx_put++;
-		}
-
-		/* Update Tx descriptor count */
-		scf_dscp_comtbl.tx_dsc_count++;
-
-		/* Change TxDSC status (SB0) */
-		SCF_SET_DSC_STATUS(dsc_p,
-			SCF_TX_ST_SRAM_TRANS_WAIT);
-
-		/* Call send matrix */
-		scf_dscp_send_matrix();
-
-		/* Tx DATA_REQ counter */
-		mainp->memo_tx_data_req_cnt++;
-		break;
-
-	case SCF_ST_EST_FINI_WAIT:		/* Main status (C1) */
-		/* Main status == C1 is NOP */
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_ERRCD, __LINE__,
-			&mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_putmsg
- */
-	END_mb_putmsg:
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_MB_PUTMSG | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_canget()
- *
- * Description:	Checks if a message received in the specified mailbox.
- *		If there is a message received, then the length of the
- *		message is passed via the argument data_lenp. Otherwise,
- *		return an appropriate error value.
- *
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- Unique key corresponding to a mailbox.
- * data_lenp	- A pointer to uint32_t, in which the size of the message
- *			is returned.
- *
- * Return Values: returns 0 if a message is present, otherwise an appropriate
- *		  errno value is returned.
- *
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- * ENOMSG	- No message available.
- * EIO		- DSCP I/F path not available.
- */
-int
-scf_mb_canget(target_id_t target_id, mkey_t mkey, uint32_t *data_lenp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_canget() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_rdata_que_t		*rdt_p;	/* Current receive data queue address */
-	int			path_ret; /* SCF path status return value */
-	int			ret = 0;	/* Return value */
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_IN, __LINE__, &mkey, sizeof (mkey));
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_canget;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_canget;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(NULL);
-
-	/* Check SCF path status */
-	if (path_ret == SCF_PATH_HALT) {
-		/* SCF path status halt */
-		SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_ERRCD, __LINE__, &path_ret,
-			sizeof (path_ret));
-		ret = EIO;
-		goto END_mb_canget;
-	}
-
-	/* Check main status */
-	switch (mainp->status) {
-	case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-	case SCF_ST_EST_FINI_WAIT:		/* Main status (C1) */
-		/* Check "data_lenp" address */
-		if (data_lenp == NULL) {
-			/* Invalid "data_lenp" */
-			SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_ERRCD, __LINE__,
-				&data_lenp, sizeof (data_lenp));
-
-			ret = EINVAL;
-			goto END_mb_canget;
-		}
-
-		/* Check receive data count */
-		if (mainp->rd_count != 0) {
-			/* Set receive data length */
-			rdt_p = &mainp->rd_datap[mainp->rd_get];
-			*data_lenp = rdt_p->length;
-		} else {
-			/* Set receive data length is 0 : No messages */
-			SC_DBG_DRV_TRACE(TC_MB_CANGET, __LINE__,
-				&mainp->rd_count,
-				sizeof (mainp->rd_count));
-			*data_lenp = 0;
-			ret = ENOMSG;
-		}
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_ERRCD, __LINE__,
-			&mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_canget
- */
-	END_mb_canget:
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SC_DBG_DRV_TRACE(TC_MB_CANGET | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_getmsg()
- *
- * Description: Get a message from the specified mailbox. A message need to
- *		be received either completely or none, that is, no partial
- *		messages should be received.
- *
- *		If a 0 timeout value is specified, then it should act as a
- *		non-blocking interface, that is, it should either return
- *		a  message from the mailbox or return appropriate error.
- *		If a timeout value is specified, then it can blocked
- *		until either the message is received successfully or timedout.
- *
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- Unique key corresponding to a mailbox.
- * data_len	- Total length of data buffers passed via scatter/gather list.
- * num_sg	- Number of scatter/gather elements in the argument sgp.
- * sgp		- Scatter/gather list pointer.
- * timeout	- timeout value in milliseconds. If 0 specified, no waiting
- *		  is required.
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned, some of the notable error values
- *		  are given below.
- *
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- * EMSGSIZE	- Specified receive data size unmatched.
- * ENOMSG	- No message available.
- * EIO		- DSCP I/F path not available.
- */
-/* ARGSUSED */
-int
-scf_mb_getmsg(target_id_t target_id, mkey_t mkey, uint32_t data_len,
-	uint32_t num_sg, mscat_gath_t *sgp, clock_t timeout)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_getmsg() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_rdata_que_t		*rdt_p;	/* Current receive data queue address */
-	caddr_t			wkaddr;	/* Working value : buffer address */
-	uint32_t		wkleng = 0;	/* Working value : length */
-	int			ii;		/* Working value : counter */
-	int			path_ret; /* SCF path status return value */
-	int			ret = 0;	/* Return value */
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_IN, __LINE__, &mkey, sizeof (mkey));
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_getmsg;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_getmsg;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(NULL);
-
-	/* Check SCF path status */
-	if (path_ret == SCF_PATH_HALT) {
-		/* SCF path status halt */
-		SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__, &path_ret,
-			sizeof (path_ret));
-		ret = EIO;
-		goto END_mb_getmsg;
-	}
-
-	switch (mainp->status) {
-	case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-	case SCF_ST_EST_FINI_WAIT:		/* Main status (C1) */
-		/* Check "data_len" */
-		if ((data_len == 0) ||
-			(data_len > scf_dscp_comtbl.maxdatalen)) {
-			/* Unmatched "data_len" */
-			SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__,
-				&data_len, sizeof (data_len));
-			ret = EMSGSIZE;
-			goto END_mb_getmsg;
-		}
-
-		/* Is num_sg and sgp valid? */
-		if ((num_sg == 0) || (sgp == NULL)) {
-			/* Invalid "num_sg" or "sgp" */
-			SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD,
-				__LINE__, &num_sg, sizeof (num_sg));
-			ret = EINVAL;
-			goto END_mb_getmsg;
-		}
-		/* Is there receive data? */
-		if (mainp->rd_count == 0) {
-			/* No message */
-			SC_DBG_DRV_TRACE(TC_MB_GETMSG, __LINE__,
-				&mainp->rd_count,
-				sizeof (mainp->rd_count));
-			ret = ENOMSG;
-			goto END_mb_getmsg;
-		}
-
-		/* Get total data length : "num_sg" */
-		for (ii = 0; ii < num_sg; ii++) {
-			if ((sgp[ii].msc_len == 0) ||
-				(sgp[ii].msc_dptr != NULL)) {
-				/*
-				 * Add total data length
-				 */
-				wkleng += sgp[ii].msc_len;
-			} else {
-				/* Invalid "sgp" */
-				SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD,
-					__LINE__, &sgp, sizeof (sgp));
-				ret = EINVAL;
-				goto END_mb_getmsg;
-			}
-		}
-		/* Check "data_len" and "wkleng" */
-		if (data_len != wkleng) {
-			/* Unmatched "data_len" */
-			SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__,
-				&data_len, sizeof (data_len));
-			ret = EMSGSIZE;
-			goto END_mb_getmsg;
-		}
-
-		/* Get receive data queue address */
-		rdt_p = &mainp->rd_datap[mainp->rd_get];
-
-		/* Check "data_len" and receive data length */
-		if (data_len != rdt_p->length) {
-			/* Unmatched data_len */
-			SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD,
-				__LINE__, &data_len, sizeof (data_len));
-			ret = EMSGSIZE;
-			goto END_mb_getmsg;
-		}
-
-		/* Data copy to "sgp" */
-		wkaddr = rdt_p->rdatap;
-		for (ii = 0; ii < num_sg; ii++) {
-			if (sgp[ii].msc_len != 0) {
-				bcopy(wkaddr, sgp[ii].msc_dptr,
-					sgp[ii].msc_len);
-				wkaddr += sgp[ii].msc_len;
-			}
-		}
-		/* Receve data release */
-		kmem_free(rdt_p->rdatap, rdt_p->length);
-		rdt_p->rdatap = NULL;
-
-		/* Update receive data queue */
-		if (mainp->rd_get == mainp->rd_last) {
-			mainp->rd_get = mainp->rd_first;
-		} else {
-			mainp->rd_get++;
-		}
-
-		/* Update receive data queue count */
-		mainp->rd_count--;
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_ERRCD, __LINE__,
-			&mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_getmsg
- */
-	END_mb_getmsg:
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SC_DBG_DRV_TRACE(TC_MB_GETMSG | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_flush()
- *
- * Description: Flush messages from a specified mailbox.
- *
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- Unique key corresponding to a mailbox.
- * flush_type	- Specifies what type of flush is desired.
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned.
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- */
-int
-scf_mb_flush(target_id_t target_id, mkey_t mkey, mflush_type_t flush_type)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_flush() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	int			ret = 0;	/* Return value */
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_IN, __LINE__, &mkey, sizeof (mkey));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_flush;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_flush;
-	}
-
-	switch (mainp->status) {
-	case SCF_ST_EST_TXEND_RECV_WAIT: /* Main status (B0) */
-	case SCF_ST_ESTABLISHED:	/* Main status (C0) */
-	case SCF_ST_EST_FINI_WAIT:	/* Main status (C1) */
-		switch (flush_type) {
-		case MB_FLUSH_SEND:
-		case MB_FLUSH_RECEIVE:
-		case MB_FLUSH_ALL:
-			if (flush_type != MB_FLUSH_RECEIVE) {
-				/* TxDSC buffer release */
-				scf_dscp_txdscbuff_free(mainp);
-			}
-			if (flush_type != MB_FLUSH_SEND) {
-				/* RxDSC buffer release */
-				scf_dscp_rxdscbuff_free(mainp);
-
-				/* All queing event release */
-				scf_dscp_event_queue_free(mainp);
-
-				/* All receive buffer release */
-				scf_dscp_rdata_free(mainp);
-			}
-			break;
-
-		default:
-
-			/* Invalid "flush_type" */
-			SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_ERRCD, __LINE__,
-				&flush_type, sizeof (flush_type));
-			ret = EINVAL;
-			break;
-		}
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_ERRCD, __LINE__,
-			&mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_flush
- */
-	END_mb_flush:
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SC_DBG_DRV_TRACE(TC_MB_FLUSH | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_mb_ctrl()
- *
- * Description: This interface provides a way to obtain any specific
- *		properties of a mailbox, such as maximum size of the
- *		message which could be transmitted/received etc.
- *
- * Arguments:
- *
- * target_id	- The target_id of the peer. It must be 0 on a Domain.
- * mkey		- Unique key corresponding to a mailbox.
- * op		- an operation.
- * arg		- argument specific to the operation.
- *
- * Return Values: returns 0 on success, otherwise any meaningful errno
- *		  values are returned.
- *
- * EINVAL	- Invalid values.
- * EBADF	- Specified target_id is not OPEN.
- * ENOTSUP	- Not supported.
- */
-int
-scf_mb_ctrl(target_id_t target_id, mkey_t mkey, uint32_t op, void *arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_mb_ctrl() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	uint32_t		*wkarg;		/* Working value : arg */
-	int			ret = 0;	/* Return value */
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start mkey = 0x%08x",
-		mkey);
-	SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_IN, __LINE__, &mkey, sizeof (mkey));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check target_id */
-	if (target_id != 0) {
-		/* Invalid "target_id" */
-		SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_ERRCD, __LINE__, &target_id,
-			sizeof (target_id));
-		ret = EINVAL;
-		goto END_mb_ctrl;
-	}
-
-	/* Get main table address from "mkey" */
-	mainp = scf_dscp_mkey2mainp(mkey);
-
-	/* Check mainp address */
-	if (mainp == NULL) {
-		/* Invalid "mkey" */
-		SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_ERRCD, __LINE__, &mkey,
-			sizeof (mkey));
-		ret = EINVAL;
-		goto END_mb_ctrl;
-	}
-
-	switch (mainp->status) {
-	case SCF_ST_EST_TXEND_RECV_WAIT: /* Main status (B0) */
-	case SCF_ST_ESTABLISHED:	/* Main status (C0) */
-	case SCF_ST_EST_FINI_WAIT:	/* Main status (C1) */
-		/* Check "arg" address */
-		if (arg == NULL) {
-			/* Invalid "arg" */
-			SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_ERRCD, __LINE__,
-				&arg, sizeof (arg));
-			ret = EINVAL;
-			goto END_mb_ctrl;
-		}
-
-		/* Check "op" */
-		switch (op) {
-		case SCF_MBOP_MAXMSGSIZE:
-			/*
-			 * Notifies max send/receive
-			 * data size
-			 */
-			SC_DBG_DRV_TRACE(TC_MB_CTRL, __LINE__,
-				&scf_dscp_comtbl.maxdatalen,
-				sizeof (scf_dscp_comtbl.maxdatalen));
-
-			/* Setsend/receive data size */
-			wkarg = (uint32_t *)arg;
-			*wkarg = scf_dscp_comtbl.maxdatalen;
-			break;
-
-		default:
-			/* Not support  */
-			SC_DBG_DRV_TRACE(TC_MB_CTRL, __LINE__, &op,
-				sizeof (op));
-			ret = ENOTSUP;
-			break;
-		}
-		break;
-
-	default:
-		/* Not open */
-		SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_ERRCD,
-			__LINE__, &mainp->status, TC_INFO_SIZE);
-		ret = EBADF;
-		break;
-	}
-
-/*
- * END_mb_ctrl
- */
-	END_mb_ctrl:
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SC_DBG_DRV_TRACE(TC_MB_CTRL | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * SCF driver system control intafece function
- */
-
-/*
- * scf_dscp_init()
- *
- * Description: DSCP control area initialization processing.
- *
- */
-void
-scf_dscp_init(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_init() "
-	scf_dscp_main_t		*mainp = NULL;	/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_tx_sram_t		*sram_p;	/* Tx SRAM address */
-	int			ii;		/* Working value : counter */
-	int			jj;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/*
-	 * DSCP common table initialization
-	 */
-	/* Set size value */
-	scf_dscp_comtbl.maxdatalen = SCF_MB_MAXDATALEN;
-	scf_dscp_comtbl.total_buffsize = SCF_TOTAL_BUFFSIZE;
-	scf_dscp_comtbl.txbuffsize = SCF_TXBUFFSIZE;
-	scf_dscp_comtbl.rxbuffsize = SCF_RXBUFFSIZE;
-
-	/* Set max count */
-	scf_dscp_comtbl.txsram_maxcount = SCF_TX_SRAM_MAXCOUNT;
-	scf_dscp_comtbl.rxsram_maxcount = SCF_RX_SRAM_MAXCOUNT;
-	scf_dscp_comtbl.txdsc_maxcount = SCF_TXDSC_MAXCOUNT;
-	scf_dscp_comtbl.rxdsc_maxcount = SCF_RXDSC_MAXCOUNT;
-	scf_dscp_comtbl.txdsc_busycount = SCF_TXDSC_BUSYCOUNT;
-	scf_dscp_comtbl.rxdsc_busycount = SCF_RXDSC_BUSYCOUNT;
-
-	/* Set re-try max count */
-	scf_dscp_comtbl.tx_ackto_maxretry_cnt = SCF_TX_ACKTO_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_endto_maxretry_cnt = SCF_TX_ENDTO_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_busy_maxretry_cnt = SCF_TX_BUSY_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_interface_maxretry_cnt = SCF_TX_IF_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_nak_maxretry_cnt = SCF_TX_NAK_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_notsup_maxretry_cnt = SCF_TX_NOTSUP_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_prmerr_maxretry_cnt = SCF_TX_PRMERR_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_seqerr_maxretry_cnt = SCF_TX_SEQERR_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_other_maxretry_cnt = SCF_TX_OTHER_MAXRETRAYCOUNT;
-	scf_dscp_comtbl.tx_send_maxretry_cnt = SCF_TX_SEND_MAXRETRAYCOUNT;
-
-	/* TxDSC/RxDSC table allocation */
-	scf_dscp_comtbl.tx_dscsize =
-		sizeof (scf_dscp_dsc_t) * (scf_dscp_comtbl.txdsc_maxcount +
-		SCF_TXDSC_LOCALCOUNT);
-	scf_dscp_comtbl.tx_dscp =
-		(scf_dscp_dsc_t *)kmem_zalloc(scf_dscp_comtbl.tx_dscsize,
-		KM_SLEEP);
-
-	scf_dscp_comtbl.rx_dscsize =
-		sizeof (scf_dscp_dsc_t) * (scf_dscp_comtbl.rxdsc_maxcount);
-	scf_dscp_comtbl.rx_dscp =
-		(scf_dscp_dsc_t *)kmem_zalloc(scf_dscp_comtbl.rx_dscsize,
-		KM_SLEEP);
-
-	/* Tx SRAM table allocation */
-	scf_dscp_comtbl.tx_sramsize =
-		sizeof (scf_tx_sram_t) * scf_dscp_comtbl.txsram_maxcount;
-	scf_dscp_comtbl.tx_sramp =
-		(scf_tx_sram_t *)kmem_zalloc(scf_dscp_comtbl.tx_sramsize,
-		KM_SLEEP);
-
-	/*
-	 * TxDSC table initialization
-	 */
-	/* Get TxDSC table address */
-	dsc_p = scf_dscp_comtbl.tx_dscp;
-	for (ii = 0; ii < scf_dscp_comtbl.txdsc_maxcount; ii++, dsc_p++) {
-		/* Init SRAM offset */
-		dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-	}
-
-	/* Set Tx offset */
-	scf_dscp_comtbl.tx_first = 0;
-	scf_dscp_comtbl.tx_last =
-		(uint16_t)(scf_dscp_comtbl.txdsc_maxcount - 1);
-	scf_dscp_comtbl.tx_put = 0;
-	scf_dscp_comtbl.tx_get = 0;
-	scf_dscp_comtbl.tx_local = (uint16_t)scf_dscp_comtbl.txdsc_maxcount;
-	scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local].dinfo.base.offset =
-		DSC_OFFSET_NOTHING;
-
-	/*
-	 * Tx STAM offset initialization
-	 */
-	/* Get Tx SRAM table address */
-	sram_p = scf_dscp_comtbl.tx_sramp;
-	for (ii = 0; ii < scf_dscp_comtbl.txsram_maxcount; ii++, sram_p++) {
-		/* Init SRAM offset */
-		sram_p->offset =
-			(uint16_t)(scf_dscp_comtbl.txbuffsize * ii /
-			DSC_OFFSET_CONVERT);
-	}
-
-	/* Set Tx SRAM offset */
-	scf_dscp_comtbl.tx_sram_first = 0;
-	scf_dscp_comtbl.tx_sram_last = (scf_dscp_comtbl.txsram_maxcount - 1);
-	scf_dscp_comtbl.tx_sram_put = 0;
-
-	/*
-	 * RxDSC table initialization
-	 */
-	/* Set Rx offset */
-	scf_dscp_comtbl.rx_first = 0;
-	scf_dscp_comtbl.rx_last =
-		(uint16_t)(scf_dscp_comtbl.rxdsc_maxcount - 1);
-	scf_dscp_comtbl.rx_put = 0;
-	scf_dscp_comtbl.rx_get = 0;
-
-	/*
-	 * Main table initialization
-	 */
-	/* Get Top main table address */
-	mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-
-	/* Check main table */
-	for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-		/* Set table id */
-		mainp->id = ii & DSC_CNTL_MASK_ID;
-
-		/* Set event/recive queue max count */
-		mainp->ev_maxcount = SCF_MB_EVQUE_MAXCOUNT;
-		mainp->rd_maxcount = SCF_RDQUE_MAXCOUNT;
-		mainp->rd_busycount = SCF_RDQUE_BUSYCOUNT;
-
-		/* Set fint() condition variable */
-		cv_init(&mainp->fini_cv, NULL, CV_DRIVER, NULL);
-		mainp->cv_init_flag = FLAG_ON;
-
-		/* event/receive data queue table allocation */
-		mainp->ev_quesize =
-			sizeof (scf_event_que_t) * mainp->ev_maxcount;
-		mainp->ev_quep =
-			(scf_event_que_t *)kmem_zalloc(mainp->ev_quesize,
-			KM_SLEEP);
-		mainp->rd_datasize =
-			sizeof (scf_rdata_que_t) * mainp->ev_maxcount;
-		mainp->rd_datap =
-			(scf_rdata_que_t *)kmem_zalloc(mainp->rd_datasize,
-			KM_SLEEP);
-
-		/* Event queue initialization */
-		for (jj = 0; jj < mainp->ev_maxcount; jj++) {
-			mainp->ev_quep[jj].mevent = (scf_event_t)(-1);
-		}
-		mainp->ev_first = 0;
-		mainp->ev_last = (uint16_t)(mainp->ev_maxcount - 1);
-		mainp->ev_put = 0;
-		mainp->ev_get = 0;
-
-		/* Receive data queue initialization */
-		mainp->rd_first = 0;
-		mainp->rd_last = (uint16_t)(mainp->rd_maxcount - 1);
-		mainp->rd_put = 0;
-		mainp->rd_get = 0;
-
-		/* Set DSCP INIT_REQ retry timer code */
-		if (mainp->id == MBIF_DSCP) {
-			mainp->timer_code = SCF_TIMERCD_DSCP_INIT;
-		} else {
-			mainp->timer_code = SCF_TIMERCD_DKMD_INIT;
-		}
-	}
-
-	/* Initialize success flag ON */
-	scf_dscp_comtbl.dscp_init_flag = FLAG_ON;
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_fini()
- *
- * Description: DSCP control area release processing.
- *
- */
-void
-scf_dscp_fini(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_fini() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/*
-	 * Main table resources release
-	 */
-	/* Get Top main table address */
-	mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-
-	/* Check main table */
-	for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-		/* All receive buffer release */
-		scf_dscp_rdata_free(mainp);
-
-		/* Check fint() condition variable */
-		if (mainp->cv_init_flag == FLAG_ON) {
-			/* Destroy fint() condition variable */
-			cv_destroy(&mainp->fini_cv);
-			mainp->cv_init_flag = FLAG_OFF;
-		}
-
-		/* Check event queue table allocation */
-		if (mainp->ev_quep != NULL) {
-			/* Event queue table release */
-			kmem_free(mainp->ev_quep, mainp->ev_quesize);
-			mainp->ev_quep = NULL;
-		}
-
-		/* Check receive data table queue allocation */
-		if (mainp->rd_datap != NULL) {
-			/* Receive data queue table release */
-			kmem_free(mainp->rd_datap, mainp->rd_datasize);
-			mainp->rd_datap = NULL;
-		}
-	}
-
-	/*
-	 * DSCP common table resources release
-	 */
-	/* All timer stop */
-	scf_timer_stop(SCF_TIMERCD_DSCP_ACK);
-	scf_timer_stop(SCF_TIMERCD_DSCP_END);
-	scf_timer_stop(SCF_TIMERCD_DSCP_CALLBACK);
-	scf_timer_stop(SCF_TIMERCD_DSCP_BUSY);
-	scf_timer_stop(SCF_TIMERCD_DSCP_INIT);
-	scf_timer_stop(SCF_TIMERCD_DKMD_INIT);
-
-	/* All DSC buffer release */
-	scf_dscp_dscbuff_free_all();
-
-	/* Check TxDSC table allocation */
-	if (scf_dscp_comtbl.tx_dscp != NULL) {
-		/* TxDSC table release */
-		kmem_free(scf_dscp_comtbl.tx_dscp,
-			scf_dscp_comtbl.tx_dscsize);
-		scf_dscp_comtbl.tx_dscp = NULL;
-	}
-
-	/* Check RxDSC table allocation */
-	if (scf_dscp_comtbl.rx_dscp != NULL) {
-		/* RxDSC table release */
-		kmem_free(scf_dscp_comtbl.rx_dscp,
-			scf_dscp_comtbl.rx_dscsize);
-		scf_dscp_comtbl.rx_dscp = NULL;
-	}
-
-	/* Check Tx SRAM table allocation */
-	if (scf_dscp_comtbl.tx_sramp != NULL) {
-		/* Tx SRAM table release */
-		kmem_free(scf_dscp_comtbl.tx_sramp,
-			scf_dscp_comtbl.tx_sramsize);
-		scf_dscp_comtbl.tx_sramp = NULL;
-	}
-
-	/* Initialize success flag ON */
-	scf_dscp_comtbl.dscp_init_flag = FLAG_OFF;
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_start()
- *
- * Description: DSCP interface start processing.
- *
- */
-void
-scf_dscp_start(uint32_t factor)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_start() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start factor = 0x%08x",
-		factor);
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_ON) {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-
-		/* Change TxDSC status (SA0) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_IDLE);
-
-		/* TxREQ send exec flag OFF */
-		scf_dscp_comtbl.tx_exec_flag = FLAG_OFF;
-	}
-
-	/* Check pending send TxDSC */
-	if (scf_dscp_comtbl.tx_dsc_count != 0) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-
-		/* Check TxDSC status */
-		switch (dsc_p->status) {
-		case SCF_TX_ST_TXREQ_SEND_WAIT:		/* TxDSC status (SB2) */
-			/* Check send data length */
-			if (dsc_p->dinfo.base.length != 0) {
-				/* Try again SRAM transfer */
-
-				/* Change TxDSC status (SB0) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_SRAM_TRANS_WAIT);
-			}
-			break;
-
-		case SCF_TX_ST_TXACK_RECV_WAIT:		/* TxDSC status (SC0) */
-		case SCF_TX_ST_TXEND_RECV_WAIT:		/* TxDSC status (SC1) */
-			/* Try again TxREQ send */
-
-			/* Change TxDSC status (SB2) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-			break;
-
-		default:
-			/* TxDSC status != SB2 or SC0 or SC1 is NOP */
-			break;
-		}
-	}
-
-	/* Check pending RxDSC */
-	while (scf_dscp_comtbl.rx_dsc_count != 0) {
-		/* Get RxDSC address */
-		dsc_p = &scf_dscp_comtbl.rx_dscp[scf_dscp_comtbl.rx_get];
-
-		/* Check receive data */
-		if (dsc_p->dinfo.base.dscp_datap != NULL) {
-			/* Receive data release */
-			kmem_free(dsc_p->dinfo.base.dscp_datap,
-				dsc_p->dinfo.base.length);
-			dsc_p->dinfo.base.dscp_datap = NULL;
-		}
-
-		/* Change RxDSC status (RA0) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_IDLE);
-
-		/* Update Rx descriptor offset */
-		if (scf_dscp_comtbl.rx_get == scf_dscp_comtbl.rx_last) {
-			scf_dscp_comtbl.rx_get = scf_dscp_comtbl.rx_first;
-		} else {
-			scf_dscp_comtbl.rx_get++;
-		}
-
-		/* Update Rx descriptor count */
-		scf_dscp_comtbl.rx_dsc_count--;
-
-		/* RxREQ receive exec flag OFF */
-		scf_dscp_comtbl.rx_exec_flag = FLAG_OFF;
-	}
-
-	/* Check SCF path change */
-	if (factor == FACTOR_PATH_CHG) {
-		/* Tx re-try counter initialization */
-		scf_dscp_comtbl.tx_ackto_retry_cnt = 0;
-		scf_dscp_comtbl.tx_endto_retry_cnt = 0;
-
-		scf_dscp_comtbl.tx_busy_retry_cnt = 0;
-		scf_dscp_comtbl.tx_interface_retry_cnt = 0;
-		scf_dscp_comtbl.tx_nak_retry_cnt = 0;
-		scf_dscp_comtbl.tx_notsuop_retry_cnt = 0;
-		scf_dscp_comtbl.tx_prmerr_retry_cnt = 0;
-		scf_dscp_comtbl.tx_seqerr_retry_cnt = 0;
-		scf_dscp_comtbl.tx_other_retry_cnt = 0;
-		scf_dscp_comtbl.tx_send_retry_cnt = 0;
-
-		/*
-		 * SCF path change flag ON :
-		 * local control data send(DSCP_PATH)
-		 */
-		scf_dscp_comtbl.dscp_path_flag = FLAG_ON;
-	} else {
-		/* SCF online processing */
-
-		/* Get Top main table address */
-		mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-
-		/* Check main table */
-		for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-			/* Check main status */
-			switch (mainp->status) {
-			case SCF_ST_EST_TXEND_RECV_WAIT: /* Main status (B0) */
-			case SCF_ST_ESTABLISHED:	/* Main status (C0) */
-				/*
-				 * Connect check flag ON :
-				 * local control data send(CONN_CHK)
-				 */
-				mainp->conn_chk_flag = FLAG_ON;
-				break;
-
-			default:
-				/* Connect check flag OFF */
-				mainp->conn_chk_flag = FLAG_OFF;
-				break;
-			}
-		}
-	}
-
-	/* Call send matrix */
-	scf_dscp_send_matrix();
-
-	/* Call receive matrix */
-	scf_dscp_recv_matrix();
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_stop()
- *
- * Description: DSCP interface stop processing.
- *
- */
-void
-scf_dscp_stop(uint32_t factor)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_stop() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start factor = 0x%08x",
-		factor);
-
-	/* Check stop factor */
-	if ((factor == FACTOR_PATH_HALT) || (factor == FACTOR_PATH_STOP)) {
-		/* memo counter up */
-		scf_dscp_comtbl.scf_stop_memo_cnt++;
-
-		/* Get Top main table address */
-		mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-
-		/* Check main table */
-		for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-			/* Check main status */
-			switch (mainp->status) {
-			case SCF_ST_EST_TXEND_RECV_WAIT: /* Main status (B0) */
-			case SCF_ST_ESTABLISHED:	/* Main status (C0) */
-				/* SCF_MB_DISC_ERROR event queuing */
-				scf_dscp_event_queue(mainp, SCF_MB_DISC_ERROR);
-
-				/* Change main status (C1) */
-				SCF_SET_STATUS(mainp, SCF_ST_EST_FINI_WAIT);
-
-				break;
-
-			case SCF_ST_CLOSE_TXEND_RECV_WAIT:
-				/* Main status (D0) */
-				/* Signal to fini() wait */
-				mainp->fini_wait_flag = FLAG_OFF;
-				cv_signal(&mainp->fini_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&mainp->fini_cv, sizeof (kcondvar_t));
-				break;
-
-			default:
-				/* Main status != B0 or C0 or D0 is NOP */
-				break;
-			}
-		}
-	}
-
-	/* Tx timer stop */
-	scf_timer_stop(SCF_TIMERCD_DSCP_ACK);
-	scf_timer_stop(SCF_TIMERCD_DSCP_END);
-	scf_timer_stop(SCF_TIMERCD_DSCP_BUSY);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_intr()
- *
- * Description: The corresponding function is called according to the
- * interruption factor from SCF.
- *
- */
-void
-scf_dscp_intr(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_intr() "
-	/* Working value : Interrupt check flag */
-	int			interrupt = FLAG_OFF;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get DSR register */
-	statep->reg_dsr = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DSR);
-	SC_DBG_DRV_TRACE(TC_R_DSR, __LINE__, &statep->reg_dsr,
-		sizeof (statep->reg_dsr));
-
-	/* DSR register interrupt clear */
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle, &statep->scf_regs->DSR,
-		statep->reg_dsr);
-	SC_DBG_DRV_TRACE(TC_W_DSR, __LINE__, &statep->reg_dsr,
-		sizeof (statep->reg_dsr));
-
-	/* Regster read sync */
-	scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DSR);
-
-	SCF_DBG_TEST_INTR_DSCP_DSR(statep);
-
-	SCFDBGMSG1(SCF_DBGFLAG_REG, "DSR = 0x%02x", statep->reg_dsr);
-
-	if ((statep->reg_dsr & DSR_TxACK) != 0) {	/* TxACK interrupt */
-		SCFDBGMSG(SCF_DBGFLAG_DSCP, "TxACK interrupt");
-
-		interrupt = FLAG_ON;
-
-		SC_DBG_DRV_TRACE(TC_TxACK, __LINE__, NULL, 0);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_DSCP_TXACK);
-
-		/* Call TxACK interrupt processing */
-		scf_dscp_txack_recv(statep);
-	}
-
-	if ((statep->reg_dsr & DSR_TxEND) != 0) {	/* TxEND interrupt */
-		SCFDBGMSG(SCF_DBGFLAG_DSCP, "TxEND interrupt");
-
-		interrupt = FLAG_ON;
-
-		/* Get TxDSR register */
-		statep->reg_txdsr_c_flag =
-			SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->TxDSR_C_FLAG);
-		SC_DBG_DRV_TRACE(TC_R_TxDSR_C_FLAG, __LINE__,
-			&statep->reg_txdsr_c_flag,
-			sizeof (statep->reg_txdsr_c_flag));
-
-		statep->reg_txdsr_c_offset =
-			SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->TxDSR_OFFSET);
-		SC_DBG_DRV_TRACE(TC_R_TxDSR_OFFSET, __LINE__,
-			&statep->reg_txdsr_c_offset,
-			sizeof (statep->reg_txdsr_c_offset));
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_DSCP_TXEND);
-
-		SCF_DBG_TEST_INTR_DSCP_RXTX(statep, DSR_TxEND);
-
-		SC_DBG_DRV_TRACE(TC_TxEND, __LINE__,
-			&statep->reg_txdsr_c_flag, 4);
-
-		SCFDBGMSG2(SCF_DBGFLAG_REG, "TxDSR = 0x%04x 0x%04x",
-			statep->reg_txdsr_c_flag, statep->reg_txdsr_c_offset);
-
-		/* Call TxEND interrupt processing */
-		scf_dscp_txend_recv(statep);
-	}
-
-	if ((statep->reg_dsr & DSR_RxREQ) != 0) {	/* RxREQ interrupt */
-		SCFDBGMSG(SCF_DBGFLAG_DSCP, "RxREQ interrupt");
-
-		interrupt = FLAG_ON;
-		/* Get RxDCR register */
-		statep->reg_rxdcr_c_flag =
-			SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->RxDCR_C_FLAG);
-		SC_DBG_DRV_TRACE(TC_R_RxDCR_C_FLAG, __LINE__,
-			&statep->reg_rxdcr_c_flag,
-			sizeof (statep->reg_rxdcr_c_flag));
-
-		statep->reg_rxdcr_c_offset =
-			SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->RxDCR_OFFSET);
-		SC_DBG_DRV_TRACE(TC_R_RxDCR_OFFSET, __LINE__,
-			&statep->reg_rxdcr_c_offset,
-			sizeof (statep->reg_rxdcr_c_offset));
-
-		statep->reg_rxdcr_c_length =
-			SCF_DDI_GET32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->RxDCR_LENGTH);
-		SC_DBG_DRV_TRACE(TC_R_RxDCR_LENGTH, __LINE__,
-			&statep->reg_rxdcr_c_length,
-			sizeof (statep->reg_rxdcr_c_length));
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_DSCP_RXREQ);
-
-		SCF_DBG_TEST_INTR_DSCP_RXTX(statep, statep->reg_dsr);
-
-		SC_DBG_DRV_TRACE(TC_RxREQ, __LINE__,
-			&statep->reg_rxdcr_c_flag, 8);
-
-		SCFDBGMSG3(SCF_DBGFLAG_REG, "RxDCR = 0x%04x 0x%04x 0x%08x",
-			statep->reg_rxdcr_c_flag, statep->reg_rxdcr_c_offset,
-			statep->reg_rxdcr_c_length);
-
-		/* Call RxRERQ interrupt processing */
-		scf_dscp_rxreq_recv(statep);
-	}
-
-	if (interrupt == FLAG_OFF) {
-		SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__, &statep->reg_dsr,
-			sizeof (statep->reg_dsr));
-		statep->no_int_dsr_cnt++;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Timeout function : from SCF driver timer contorol function
- */
-
-/*
- * scf_dscp_ack_tout()
- *
- * Description: TxACK reception surveillance timeout processing is performed.
- *		SCF path change factor.
- *
- */
-void
-scf_dscp_ack_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_ack_tout() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_state_t		*statep;	/* Soft state pointer */
-	int			path_ret; /* SCF path status return value */
-	uchar_t			cmd;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check TxREQ send exec */
-	if (scf_dscp_comtbl.tx_exec_flag == FLAG_OFF) {
-		goto END_dscp_ack_tout;
-	}
-
-	/* memo counter up */
-	scf_dscp_comtbl.tx_ackto_memo_cnt++;
-
-	/* TxREQ send exec flag OFF */
-	scf_dscp_comtbl.tx_exec_flag = FLAG_OFF;
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* Check TxDSC status */
-	if (dsc_p->status == SCF_TX_ST_TXACK_RECV_WAIT) {
-		/* TxDSC status (SC0) */
-		/* Check re-try counter */
-		if ((scf_dscp_comtbl.tx_ackto_retry_cnt <
-			scf_dscp_comtbl.tx_ackto_maxretry_cnt) &&
-				(scf_dscp_comtbl.tx_send_retry_cnt <
-				scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-			/* re-try count up */
-			scf_dscp_comtbl.tx_ackto_retry_cnt++;
-			scf_dscp_comtbl.tx_send_retry_cnt++;
-
-			/* Change TxDSC status (SB2) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-			/* Call send matrix */
-			scf_dscp_send_matrix();
-		} else {
-			/* TxACK re-try timeout error */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&scf_dscp_comtbl.tx_ackto_retry_cnt,
-				sizeof (scf_dscp_comtbl.tx_ackto_retry_cnt));
-
-			/* Get SCF path status */
-			path_ret = scf_path_check(&statep);
-
-			/* Check SCF path status */
-			if (path_ret == SCF_PATH_ONLINE) {
-				cmd = (uchar_t)(dsc_p->dinfo.base.c_flag >> 8);
-				cmn_err(CE_WARN,
-					"%s,DSCP ack response timeout "
-					"occurred. "
-					"DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* SRAM trace */
-				SCF_SRAM_TRACE(statep, DTC_DSCP_ACKTO);
-
-				/* SCF path change */
-				statep->scf_herr |= HERR_DSCP_ACKTO;
-				scf_path_change(statep);
-			}
-		}
-	}
-
-/*
- * END_dscp_ack_tout
- */
-	END_dscp_ack_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_end_tout()
- *
- * Description: TxEND reception surveillance timeout processing is performed.
- *		SCF path change factor.
- *
- */
-void
-scf_dscp_end_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_end_tout() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_state_t		*statep;	/* Soft state pointer */
-	int			path_ret; /* SCF path status return value */
-	uchar_t			cmd;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check TxREQ send exec */
-	if (scf_dscp_comtbl.tx_exec_flag == FLAG_OFF) {
-		goto END_dscp_end_tout;
-	}
-
-	/* memo counter up */
-	scf_dscp_comtbl.tx_endto_memo_cnt++;
-
-	/* TxREQ send exec flag OFF */
-	scf_dscp_comtbl.tx_exec_flag = FLAG_OFF;
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* Check TxDSC status */
-	if (dsc_p->status == SCF_TX_ST_TXEND_RECV_WAIT) {
-		/* TxDSC status (SC1) */
-		/* Check re-try counter */
-		if ((scf_dscp_comtbl.tx_endto_retry_cnt <
-			scf_dscp_comtbl.tx_endto_maxretry_cnt) &&
-				(scf_dscp_comtbl.tx_send_retry_cnt <
-				scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-			/* re-try count up */
-			scf_dscp_comtbl.tx_endto_retry_cnt++;
-			scf_dscp_comtbl.tx_send_retry_cnt++;
-
-			/* Change TxDSC status (SB2) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-			/* Call send matrix */
-			scf_dscp_send_matrix();
-		} else {
-			/* TxEND re-try timeout error */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&scf_dscp_comtbl.tx_endto_retry_cnt,
-				sizeof (scf_dscp_comtbl.tx_endto_retry_cnt));
-
-			/* Get SCF path status */
-			path_ret = scf_path_check(&statep);
-
-			/* Check SCF path status */
-			if (path_ret == SCF_PATH_ONLINE) {
-				cmd = (uchar_t)(dsc_p->dinfo.base.c_flag >> 8);
-				cmn_err(CE_WARN,
-					"%s,DSCP end response timeout "
-					"occurred. "
-					"DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* SRAM trace */
-				SCF_SRAM_TRACE(statep, DTC_DSCP_ENDTO);
-
-				/* SCF path change */
-				statep->scf_herr |= HERR_DSCP_ENDTO;
-				scf_path_change(statep);
-			}
-		}
-	}
-
-/*
- * END_dscp_end_tout
- */
-	END_dscp_end_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_busy_tout()
- *
- * Description: Busy timeout performs TxREQ transmission again.
- *
- */
-void
-scf_dscp_busy_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_busy_tout() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check pending send TxDSC or local control TxDSC */
-	if ((scf_dscp_comtbl.tx_dsc_count == 0) &&
-		(scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF)) {
-		goto END_dscp_busy_tout;
-	}
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* Check TxDSC status */
-	if (dsc_p->status == SCF_TX_ST_TXREQ_SEND_WAIT) {
-		/* TxDSC status (SB2) */
-		/* Call send matrix */
-		scf_dscp_send_matrix();
-	}
-
-/*
- * END_dscp_busy_tout
- */
-	END_dscp_busy_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_callback_tout()
- *
- * Description: Callbak timeout performs soft interrupt again.
- *
- */
-void
-scf_dscp_callback_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_callback_tout() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Soft interrupt : call scf_dscp_callback() */
-	if (mutex_tryenter(&scf_comtbl.si_mutex) != 0) {
-		scf_comtbl.scf_softintr_dscp_kicked = FLAG_ON;
-		ddi_trigger_softintr(scf_comtbl.scf_softintr_id);
-		mutex_exit(&scf_comtbl.si_mutex);
-	}
-
-	/* Callback timer start */
-	scf_timer_start(SCF_TIMERCD_DSCP_CALLBACK);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_init_tout()
- *
- * Description: INIT_REQ retry timeout performs TxREQ transmission again.
- *
- */
-void
-scf_dscp_init_tout(uint8_t id)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_init_tout() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get main table address */
-	mainp = scf_dscp_id2mainp(id);
-
-	/* Get TxDSC address */
-	dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_put];
-
-	/* Make Tx descriptor : INIT_REQ */
-	dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-	dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-	dsc_p->dinfo.base.length = 0;
-	dsc_p->dinfo.base.dscp_datap = NULL;
-	dsc_p->dinfo.bdcr.id = mainp->id & DSC_CNTL_MASK_ID;
-	dsc_p->dinfo.bdcr.code = DSC_CNTL_INIT_REQ;
-
-	/* Update Tx descriptor offset */
-	if (scf_dscp_comtbl.tx_put == scf_dscp_comtbl.tx_last) {
-		scf_dscp_comtbl.tx_put = scf_dscp_comtbl.tx_first;
-	} else {
-		scf_dscp_comtbl.tx_put++;
-	}
-
-	/* Update Tx descriptor count */
-	scf_dscp_comtbl.tx_dsc_count++;
-
-	/* Change TxDSC status (SB2) */
-	SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-	/* Call send matrix */
-	scf_dscp_send_matrix();
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_callback()
- *
- * Description: Event queue is taken out and a callback entry is called.
- *
- */
-void
-scf_dscp_callback(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_callback() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	/* Working value : event_handler */
-	void			(*wkevent_handler)(scf_event_t, void *);
-	scf_event_t		wkmevent;	/* Working value : mevent */
-	void			*wkarg;		/* Working value : arg */
-	/* Working value : next event processing check flag */
-	int			event_flag = FLAG_OFF;
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check callback entry exec flag */
-	if (scf_dscp_comtbl.callback_exec_flag == FLAG_ON) {
-		goto END_dscp_callback;
-	}
-
-	/* Set callback entry exec flag */
-	scf_dscp_comtbl.callback_exec_flag = FLAG_ON;
-
-/*
- * CALLBACK_START
- */
-	CALLBACK_START:
-
-	/* Get Top main table address */
-	mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-	/* Check all main table */
-	for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-		/* Check event count */
-		if (mainp->ev_count != 0) {
-			/* Next event processing flag ON */
-			event_flag = FLAG_ON;
-
-			/* Get event info */
-			wkmevent = mainp->ev_quep[mainp->ev_get].mevent;
-
-			/* Update event queue offset */
-			if (mainp->ev_get == mainp->ev_last) {
-				mainp->ev_get = mainp->ev_first;
-			} else {
-				mainp->ev_get++;
-			}
-
-			/* Update event queue count */
-			mainp->ev_count--;
-
-			/* Get callback enntry and arg */
-			wkevent_handler = mainp->event_handler;
-			wkarg = mainp->arg;
-
-			/* Check event_handler address */
-			if (wkevent_handler != NULL) {
-				/* Check main status */
-				switch (mainp->status) {
-				case SCF_ST_ESTABLISHED:
-					/* Main status (C0) */
-				case SCF_ST_EST_FINI_WAIT:
-					/* Main status (C1) */
-
-					/* Unlock driver mutex */
-					mutex_exit(&scf_comtbl.all_mutex);
-
-					/* Call event handler */
-					wkevent_handler(wkmevent, wkarg);
-
-					SC_DBG_DRV_TRACE(TC_MB_CALLBACK,
-						__LINE__, &wkmevent,
-						sizeof (wkmevent));
-					SCFDBGMSG1(SCF_DBGFLAG_DSCP,
-						"DSCP callback mevent = %d",
-						wkmevent);
-
-					/* Lock driver mutex */
-					mutex_enter(&scf_comtbl.all_mutex);
-					break;
-
-				default:
-					/*
-					 * Main status != C0 or C1 is NOP
-					 */
-					break;
-				}
-			}
-		}
-	}
-
-	/* Check next event processing */
-	if (event_flag == FLAG_ON) {
-		event_flag = FLAG_OFF;
-		goto CALLBACK_START;
-	}
-
-	/* Clear callback entry exec flag */
-	scf_dscp_comtbl.callback_exec_flag = FLAG_OFF;
-
-/*
- * END_dscp_callback
- */
-	END_dscp_callback:
-
-	/* CALLBACK timer stop */
-	scf_timer_stop(SCF_TIMERCD_DSCP_CALLBACK);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-
-/*
- * Interrupt function : from scf_dscp_intr()
- */
-
-/*
- * scf_dscp_txack_recv()
- *
- * Description: TxACK reception processing is performed.
- *
- */
-/* ARGSUSED */
-void
-scf_dscp_txack_recv(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txack_recv() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check TxREQ send exec */
-	if (scf_dscp_comtbl.tx_exec_flag == FLAG_OFF) {
-		goto END_dscp_txack_recv;
-	}
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* Check TxDSC status */
-	if (dsc_p->status == SCF_TX_ST_TXACK_RECV_WAIT) {
-		/* TxDSC status (SC0) */
-		/* Error counter initialization */
-		scf_dscp_comtbl.tx_ackto_retry_cnt = 0;
-
-		/* TxACK timer stop */
-		scf_timer_stop(SCF_TIMERCD_DSCP_ACK);
-
-		/* TxEND timer start */
-		scf_timer_start(SCF_TIMERCD_DSCP_END);
-
-		/* Change TxDSC status (SC1) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXEND_RECV_WAIT);
-	}
-
-/*
- * END_dscp_txack_recv
- */
-	END_dscp_txack_recv:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_txend_recv()
- *
- * Description: TxEND reception is received and processing is carried out by
- * completion information.
- *
- */
-void
-scf_dscp_txend_recv(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txend_recv() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_dscreg_t		wk_dsc;		/* Work TxDSC */
-	/* Working value : TxDSC release check flag */
-	int			norel_txdsc = FLAG_OFF;
-	/* Working value : SCF path change flag */
-	int			path_change = FLAG_OFF;
-	int			ii;		/* Working value : counter */
-	uchar_t			cmd;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check TxREQ send exec */
-	if (scf_dscp_comtbl.tx_exec_flag == FLAG_OFF) {
-		goto END_dscp_txend_recv;
-	}
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* Save TxDSR status information in TxDSC */
-	wk_dsc.base.c_flag = statep->reg_txdsr_c_flag;
-	dsc_p->dinfo.bdsr.status = wk_dsc.bdsr.status;
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, "TxEND status = 0x%02x",
-		dsc_p->dinfo.bdsr.status);
-
-	/* Check TxREQ offset and TxEND offset */
-	if (dsc_p->dinfo.base.offset != statep->reg_txdsr_c_offset) {
-		goto END_dscp_txend_recv;
-	}
-
-	/* TxACK and TxEND timer stop */
-	scf_timer_stop(SCF_TIMERCD_DSCP_ACK);
-	scf_timer_stop(SCF_TIMERCD_DSCP_END);
-
-	/* Get main table address from "id" */
-	mainp = scf_dscp_id2mainp(dsc_p->dinfo.bdcr.id);
-
-	/*
-	 * Check mainp address or local control data(DSCP_PATH)
-	 */
-	if ((mainp == NULL) &&
-		(dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL)) {
-		goto END_dscp_txend_recv;
-	}
-
-	cmd = (uchar_t)(dsc_p->dinfo.base.c_flag >> 8);
-
-	/* Check TxDSC status */
-	switch (dsc_p->status) {
-	case SCF_TX_ST_TXACK_RECV_WAIT:
-		/* TxDSC status (SC0) */
-	case SCF_TX_ST_TXEND_RECV_WAIT:
-		/* TxDSC status (SC1) */
-		/* Check TxREQ end status */
-		switch (dsc_p->dinfo.bdsr.status) {
-		case DSC_STATUS_NORMAL:		/* Normal end */
-			/* Error counter initialization */
-			scf_dscp_comtbl.tx_ackto_retry_cnt = 0;
-			scf_dscp_comtbl.tx_endto_retry_cnt = 0;
-			scf_dscp_comtbl.tx_busy_retry_cnt = 0;
-			scf_dscp_comtbl.tx_interface_retry_cnt = 0;
-			scf_dscp_comtbl.tx_nak_retry_cnt = 0;
-			scf_dscp_comtbl.tx_notsuop_retry_cnt = 0;
-			scf_dscp_comtbl.tx_prmerr_retry_cnt = 0;
-			scf_dscp_comtbl.tx_seqerr_retry_cnt = 0;
-			scf_dscp_comtbl.tx_other_retry_cnt = 0;
-			scf_dscp_comtbl.tx_send_retry_cnt = 0;
-
-			/* Check local control data(DSCP_PATH) */
-			if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-				/* TxEND notice to main matrix */
-				scf_dscp_txend_notice(mainp);
-			}
-			break;
-
-		case DSC_STATUS_BUF_BUSY:	/* Buffer busy */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_busy_memo_cnt++;
-
-			/* TxREQ code check */
-			if (dsc_p->dinfo.bdcr.code == DSC_CNTL_INIT_REQ) {
-				/* Check main status */
-				if (mainp->status ==
-					SCF_ST_EST_TXEND_RECV_WAIT) {
-					/* INIT_REQ retry timer start */
-					scf_timer_start(mainp->timer_code);
-				}
-				break;
-			}
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_busy_retry_cnt <
-				scf_dscp_comtbl.tx_busy_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_busy_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* TxREQ busy timer start */
-				scf_timer_start(SCF_TIMERCD_DSCP_BUSY);
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Buffer busy end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Buffer busy occurred in XSCF. "
-					"DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* DSCP path change send flag ON */
-					scf_dscp_comtbl.dscp_path_flag =
-						FLAG_ON;
-				}
-			}
-			break;
-
-		case DSC_STATUS_INTERFACE:	/* Interface error */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_interface_memo_cnt++;
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_interface_retry_cnt <
-				scf_dscp_comtbl.tx_interface_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_interface_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Interface error end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Detected the interface error by "
-					"XSCF. DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* Set hard error flag */
-				statep->scf_herr |= HERR_DSCP_INTERFACE;
-
-				/* SCF path change flag ON */
-				path_change = FLAG_ON;
-			}
-			break;
-
-		case DSC_STATUS_CONN_NAK:	/* Connection refusal */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_nak_memo_cnt++;
-
-			/* TxREQ code check */
-			if (dsc_p->dinfo.bdcr.code == DSC_CNTL_INIT_REQ) {
-				/* Check main status */
-				if (mainp->status ==
-					SCF_ST_EST_TXEND_RECV_WAIT) {
-					/* INIT_REQ retry timer start */
-					scf_timer_start(mainp->timer_code);
-				}
-				break;
-			}
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_nak_retry_cnt <
-				scf_dscp_comtbl.tx_nak_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_nak_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Connection refusal end re-try error */
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* Set hard error flag */
-					statep->scf_herr |= HERR_DSCP_INTERFACE;
-
-					/* SCF path change flag ON */
-					path_change = FLAG_ON;
-				}
-			}
-			break;
-
-		case DSC_STATUS_E_NOT_SUPPORT:	/* Not support */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_notsuop_memo_cnt++;
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_notsuop_retry_cnt <
-				scf_dscp_comtbl.tx_notsup_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_notsuop_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Not support end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Detected the not support command "
-					"by XSCF. DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* DSCP path change send flag ON */
-					scf_dscp_comtbl.dscp_path_flag =
-						FLAG_ON;
-				}
-			}
-			break;
-
-		case DSC_STATUS_E_PARAM:	/* Parameter error */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_prmerr_memo_cnt++;
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_prmerr_retry_cnt <
-				scf_dscp_comtbl.tx_prmerr_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_prmerr_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Parameter error end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Detected the invalid parameter by "
-					"XSCF. DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* DSCP path change send flag ON */
-					scf_dscp_comtbl.dscp_path_flag =
-						FLAG_ON;
-				}
-			}
-			break;
-
-		case DSC_STATUS_E_SEQUENCE:	/* Sequence error */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_seqerr_memo_cnt++;
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_seqerr_retry_cnt <
-				scf_dscp_comtbl.tx_seqerr_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_seqerr_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Sequence error end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Detected the sequence error by "
-					"XSCF. DSCP command = 0x%02x\n",
-						&statep->pathname[0], cmd);
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* DSCP path change send flag ON */
-					scf_dscp_comtbl.dscp_path_flag =
-						FLAG_ON;
-				}
-			}
-			break;
-
-		default:			/* Other status */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-
-			/* memo counter up */
-			scf_dscp_comtbl.tx_other_memo_cnt++;
-
-			/* Check re-try counter */
-			if ((scf_dscp_comtbl.tx_other_retry_cnt <
-				scf_dscp_comtbl.tx_other_maxretry_cnt) &&
-					(scf_dscp_comtbl.tx_send_retry_cnt <
-					scf_dscp_comtbl.tx_send_maxretry_cnt)) {
-				/* re-try count up */
-				scf_dscp_comtbl.tx_other_retry_cnt++;
-				scf_dscp_comtbl.tx_send_retry_cnt++;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-
-				/* TxDSC not release */
-				norel_txdsc = FLAG_ON;
-			} else {
-				/* Other error end re-try error */
-				cmn_err(CE_WARN,
-					"%s,Invalid status value was notified "
-					"from XSCF. DSCP command = 0x%02x, "
-					"Status value = 0x%02x\n",
-						&statep->pathname[0], cmd,
-						(uchar_t)
-						dsc_p->dinfo.base.c_flag);
-
-				/* Check local control data(DSCP_PATH) */
-				if (dsc_p->dinfo.bdcr.id != DSC_CNTL_LOCAL) {
-					/* TxEND notice to main matrix */
-					scf_dscp_txend_notice(mainp);
-				} else {
-					/* DSCP path change send flag ON */
-					scf_dscp_comtbl.dscp_path_flag =
-						FLAG_ON;
-				}
-			}
-			break;
-		}
-		break;
-
-	default:
-		/* TxDSC status != SC0 or SC1 is NOP */
-		break;
-	}
-
-	/* Check TxDSC not release */
-	if (norel_txdsc == FLAG_OFF) {
-		/* Check send data */
-		if (dsc_p->dinfo.base.dscp_datap != NULL) {
-			/* Send data release */
-			kmem_free(dsc_p->dinfo.base.dscp_datap,
-				dsc_p->dinfo.base.length);
-			dsc_p->dinfo.base.dscp_datap = NULL;
-		}
-
-		/* Check SRAM data */
-		if (dsc_p->dinfo.base.offset != DSC_OFFSET_NOTHING) {
-			/* Send SRAM data release */
-			scf_dscp_sram_free(dsc_p->dinfo.base.offset);
-			dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-		}
-
-		/* Change TxDSC status (SA0) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_IDLE);
-
-		/* Check use local control TxDSC flag */
-		if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-			/* Update Tx descriptor offset */
-			if (scf_dscp_comtbl.tx_get == scf_dscp_comtbl.tx_last) {
-				scf_dscp_comtbl.tx_get =
-					scf_dscp_comtbl.tx_first;
-			} else {
-				scf_dscp_comtbl.tx_get++;
-			}
-
-			/* Update Tx descriptor count */
-			scf_dscp_comtbl.tx_dsc_count--;
-
-			/* Get Top main table address */
-			mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-			/* Check main table */
-			for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-				/* Check putmsg busy release */
-				if ((mainp->putmsg_busy_flag == FLAG_ON) &&
-					(scf_dscp_comtbl.tx_dsc_count <
-					scf_dscp_comtbl.txdsc_busycount)) {
-					/* putmsg busy flag OFF */
-					mainp->putmsg_busy_flag = FLAG_OFF;
-
-					/* TxREL_BUSY notice to main matrix */
-					scf_dscp_txrelbusy_notice(mainp);
-				}
-			}
-		} else {
-			/* Initialize use local control TxDSC flag */
-			scf_dscp_comtbl.tx_local_use_flag = FLAG_OFF;
-
-			/* DSCP path change send flag OFF */
-			scf_dscp_comtbl.dscp_path_flag = FLAG_OFF;
-		}
-	}
-	/* TxREQ send exec flag OFF */
-	scf_dscp_comtbl.tx_exec_flag = FLAG_OFF;
-
-	/* Check SCF path change flag */
-	if (path_change == FLAG_OFF) {
-		/* Call send matrix */
-		scf_dscp_send_matrix();
-	} else {
-		/* SCF path change */
-		scf_path_change(statep);
-	}
-
-/*
- * END_dscp_txend_recv
- */
-	END_dscp_txend_recv:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxreq_recv()
- *
- * Description: TxREQ reception notifies to a main control matrix.
- *
- */
-void
-scf_dscp_rxreq_recv(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxreq_recv() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* RxDSC address */
-	uint16_t		offset_low;	/* Working value : offset */
-	uint16_t		offset_hight;	/* Working value : offset */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check pending RxDSC */
-	if (scf_dscp_comtbl.rx_dsc_count == 0) {
-		/* Get RxDSC address */
-		dsc_p = &scf_dscp_comtbl.rx_dscp[scf_dscp_comtbl.rx_put];
-
-		/* Save RxDCR information in RxDSC */
-		dsc_p->dinfo.base.c_flag = statep->reg_rxdcr_c_flag;
-		dsc_p->dinfo.base.offset = statep->reg_rxdcr_c_offset;
-		dsc_p->dinfo.base.length = statep->reg_rxdcr_c_length;
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-		dsc_p->dinfo.base.dscp_datap = NULL;
-
-		/* Update Rx descriptor offset */
-		if (scf_dscp_comtbl.rx_put == scf_dscp_comtbl.rx_last) {
-			scf_dscp_comtbl.rx_put = scf_dscp_comtbl.rx_first;
-		} else {
-			scf_dscp_comtbl.rx_put++;
-		}
-
-		/* Update Rx descriptor count */
-		scf_dscp_comtbl.rx_dsc_count++;
-
-		/* RxREQ receive exec flag ON */
-		scf_dscp_comtbl.rx_exec_flag = FLAG_ON;
-
-		/* Get main table address from "id" */
-		mainp = scf_dscp_id2mainp(dsc_p->dinfo.bdcr.id);
-
-		offset_low = (uint16_t)(scf_dscp_comtbl.txbuffsize *
-			scf_dscp_comtbl.txsram_maxcount / DSC_OFFSET_CONVERT);
-
-		SCF_DBG_MAKE_LOOPBACK(offset_low);
-
-		offset_hight =
-			(uint16_t)(offset_low + scf_dscp_comtbl.rxbuffsize *
-			scf_dscp_comtbl.rxsram_maxcount / DSC_OFFSET_CONVERT);
-
-		/* Check mainp address and offset */
-		if ((mainp != NULL) &&
-			(((dsc_p->dinfo.base.offset >= offset_low) &&
-			(dsc_p->dinfo.base.offset < offset_hight)) ||
-			((dsc_p->dinfo.base.offset == DSC_OFFSET_NOTHING) &&
-			(dsc_p->dinfo.bdcr.code != DSC_CNTL_DATA_REQ)))) {
-			/* RxREQ notice to main matrix */
-			scf_dscp_rxreq_notice(mainp);
-		} else {
-			/* Invalid "id" or "offset" */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-			SCFDBGMSG(SCF_DBGFLAG_DSCP, "Invalid id or offset");
-
-			/* Set end status : Parameter error */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_E_PARAM;
-
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-			/* Call receive matrix */
-			scf_dscp_recv_matrix();
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Main and Tx/Rx interface function
- */
-
-/*
- * scf_dscp_txend_notice()
- *
- * Description: The TxEND reception is notified of by Tx matrix and handle it
- * with data code.
- *
- */
-void
-scf_dscp_txend_notice(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txend_notice() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check local control data flag */
-	if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_local];
-	}
-
-	/* TxREQ code check */
-	switch (dsc_p->dinfo.bdcr.code) {
-	case DSC_CNTL_INIT_REQ:				/* INIT_REQ */
-		/* Check main status */
-		if (mainp->status == SCF_ST_EST_TXEND_RECV_WAIT) {
-			/* Main status (B0) */
-			/* Check end status */
-			if (dsc_p->dinfo.bdsr.status == DSC_STATUS_NORMAL) {
-				/* SCF_MB_CONN_OK event queuing */
-				scf_dscp_event_queue(mainp, SCF_MB_CONN_OK);
-
-				/* Change main status (C0) */
-				SCF_SET_STATUS(mainp, SCF_ST_ESTABLISHED);
-			} else {
-				/* Not normal end status */
-
-				/* SCF_MB_DISC_ERROR event queuing */
-				scf_dscp_event_queue(mainp, SCF_MB_DISC_ERROR);
-
-				/* Change main status (C1) */
-				SCF_SET_STATUS(mainp, SCF_ST_EST_FINI_WAIT);
-			}
-		}
-		break;
-
-	case DSC_CNTL_FINI_REQ:				/* FINI_REQ */
-		/* Check main status */
-		if (mainp->status == SCF_ST_CLOSE_TXEND_RECV_WAIT) {
-			/* Main status (D0) */
-			/* Signal to fini() wait */
-			mainp->fini_wait_flag = FLAG_OFF;
-			cv_signal(&mainp->fini_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &mainp->fini_cv,
-				sizeof (kcondvar_t));
-		}
-		break;
-
-	case DSC_CNTL_CONN_CHK:				/* CONN_CHK */
-		/* Check main status */
-		switch (mainp->status) {
-		case SCF_ST_EST_TXEND_RECV_WAIT:	/* Main status (B0) */
-		case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-			/* CONN_CHK flag OFF */
-			mainp->conn_chk_flag = FLAG_OFF;
-			/* Check end status */
-			if (dsc_p->dinfo.bdsr.status != DSC_STATUS_NORMAL) {
-				/* SCF_MB_DISC_ERROR event queuing */
-				scf_dscp_event_queue(mainp, SCF_MB_DISC_ERROR);
-
-				/* Change main status (C1) */
-				SCF_SET_STATUS(mainp, SCF_ST_EST_FINI_WAIT);
-			}
-			break;
-
-		default:
-			/* Main status != B0 or C0 is NOP */
-			break;
-		}
-		break;
-
-	case DSC_CNTL_DATA_REQ:				/* DATA_REQ */
-		/* Tx DATA_REQ ok counter up */
-		mainp->memo_tx_data_req_ok_cnt++;
-		break;
-
-	default:
-		/* Undefine TxREQ code is NOP */
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_txrelbusy_notice()
- *
- * Description: Tx busy release is notified of by Tx matrix and perform event
- * queue processing.
- *
- */
-void
-scf_dscp_txrelbusy_notice(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txrelbusy_notice() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check main status */
-	if (mainp->status == SCF_ST_ESTABLISHED) {	/* Main status (C0) */
-		/* SCF_MB_SPACE event queuing */
-		scf_dscp_event_queue(mainp, SCF_MB_SPACE);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxreq_notice()
- *
- * Description: The RxREQ reception is notified of by Rx matrix and handle it
- * with data code.
- *
- */
-void
-scf_dscp_rxreq_notice(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxreq_notice() "
-	scf_dscp_dsc_t		*dsc_p;		/* RxDSC address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get RxDSC address */
-	dsc_p = &scf_dscp_comtbl.rx_dscp[scf_dscp_comtbl.rx_get];
-
-	/* RxREQ code check */
-	switch (dsc_p->dinfo.bdcr.code) {
-	case DSC_CNTL_INIT_REQ:				/* INIT_REQ */
-		/* Set end status : Not support */
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_E_NOT_SUPPORT;
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-		/* Call receive matrix */
-		scf_dscp_recv_matrix();
-		break;
-
-	case DSC_CNTL_FINI_REQ:				/* FINI_REQ */
-		/* Check main status */
-		switch (mainp->status) {
-		case SCF_ST_EST_TXEND_RECV_WAIT:	/* Main status (B0) */
-		case SCF_ST_ESTABLISHED:		/* Main status (C0) */
-			/* SCF_MB_DISC_ERROR event queuing */
-			scf_dscp_event_queue(mainp, SCF_MB_DISC_ERROR);
-
-			/* Change main status (C1) */
-			SCF_SET_STATUS(mainp, SCF_ST_EST_FINI_WAIT);
-			break;
-
-		default:
-			/* Main status != B0 or C0 is NOP */
-			break;
-		}
-
-		/* Set end status : Normal end */
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-		/* Call receive matrix */
-		scf_dscp_recv_matrix();
-		break;
-
-	case DSC_CNTL_DATA_REQ:				/* DATA_REQ */
-		/* Rx DATA_REQ counter up */
-		mainp->memo_rx_data_req_cnt++;
-
-		/* Check receive data length */
-		if (dsc_p->dinfo.base.length <= scf_dscp_comtbl.maxdatalen) {
-			/* Check receive data queue space */
-			if (mainp->rd_count < mainp->rd_busycount) {
-				/* Set end status : Normal end */
-				dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-
-				/* Check main status */
-				if (mainp->status == SCF_ST_ESTABLISHED) {
-					/* Main status (C0) */
-					/* Change RxDSC status (RB0) */
-					SCF_SET_DSC_STATUS(dsc_p,
-						SCF_RX_ST_RXACK_SEND_WAIT);
-				} else {
-					/* Change RxDSC status (RB3) */
-					SCF_SET_DSC_STATUS(dsc_p,
-						SCF_RX_ST_RXEND_SEND_WAIT);
-				}
-			} else {
-				/* No space of receive data queue */
-
-				/* Set end status : Buffer busy */
-				dsc_p->dinfo.bdsr.status = DSC_STATUS_BUF_BUSY;
-
-				/* Change RxDSC status (RB3) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_RX_ST_RXEND_SEND_WAIT);
-			}
-		} else {
-			/* Invalid deta length */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.length,
-				sizeof (dsc_p->dinfo.base.length));
-
-			/* Set end status : Parameter error */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_E_PARAM;
-
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-		}
-
-		/* Call receive matrix */
-		scf_dscp_recv_matrix();
-		break;
-
-	case DSC_CNTL_CONN_CHK:				/* CONN_CHK */
-		/* Check main status */
-		if (mainp->status == SCF_ST_ESTABLISHED) {
-			/* Main status (C0) */
-			/* Set end status : Normal end */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-		} else {
-			/* Set end status : Connection refusal */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_CONN_NAK;
-		}
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-		/* Call receive matrix */
-		scf_dscp_recv_matrix();
-		break;
-
-	default:
-		/* Invalid RxREQ code */
-		SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__, &dsc_p->dinfo.base.c_flag,
-			TC_INFO_SIZE);
-
-		/* Set end status : Parameter error */
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_E_PARAM;
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-		/* Call receive matrix */
-		scf_dscp_recv_matrix();
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxdata_notice()
- *
- * Description: It is notified from a Rx control matrix, the received data are
- * read from SRAM,
- *		and the notice of a receive data event is performed.
- *
- */
-void
-scf_dscp_rxdata_notice(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxdata_notice() "
-	scf_dscp_dsc_t		*dsc_p;		/* RxDSC address */
-	scf_rdata_que_t		*rdt_p;		/* Receive data queue address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get RxDSC address */
-	dsc_p = &scf_dscp_comtbl.rx_dscp[scf_dscp_comtbl.rx_get];
-
-	/* Check main status */
-	switch (mainp->status) {
-	case SCF_ST_ESTABLISHED:			/* Main status (C0) */
-	case SCF_ST_EST_FINI_WAIT:			/* Main status (C1) */
-		/* Check receive data queue space */
-		if (mainp->rd_count < mainp->rd_busycount) {
-			/* Receive data queing */
-			rdt_p = &mainp->rd_datap[mainp->rd_put];
-			rdt_p->rdatap = dsc_p->dinfo.base.dscp_datap;
-			dsc_p->dinfo.base.dscp_datap = NULL;
-			rdt_p->length = dsc_p->dinfo.base.length;
-
-			/* Update receive data queue offset */
-			if (mainp->rd_put == mainp->rd_last) {
-				mainp->rd_put = mainp->rd_first;
-			} else {
-				mainp->rd_put++;
-			}
-
-			/* Update receive data queue count */
-			mainp->rd_count++;
-
-			/* SCF_MB_MSG_DATA event queuing */
-			scf_dscp_event_queue(mainp, SCF_MB_MSG_DATA);
-
-			/* Rx DATA_REQ ok counter up */
-			mainp->memo_rx_data_req_ok_cnt++;
-		} else {
-			/* No space of receive data queue */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__, &mainp->rd_count,
-				sizeof (mainp->rd_count));
-			SCFDBGMSG(SCF_DBGFLAG_DSCP,
-				"No space of receive data queue");
-
-			/* Check receive data */
-			if (dsc_p->dinfo.base.dscp_datap != NULL) {
-				/* Receive data release  */
-				kmem_free(dsc_p->dinfo.base.dscp_datap,
-					dsc_p->dinfo.base.length);
-				dsc_p->dinfo.base.dscp_datap = NULL;
-			}
-
-			/* Set end status : Buffer busy */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_BUF_BUSY;
-
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-		}
-		break;
-
-	case SCF_ST_CLOSE_TXEND_RECV_WAIT:		/* Main status (D0) */
-		/* Check receive data */
-		if (dsc_p->dinfo.base.dscp_datap != NULL) {
-			/* Receive data release  */
-			kmem_free(dsc_p->dinfo.base.dscp_datap,
-				dsc_p->dinfo.base.length);
-			dsc_p->dinfo.base.dscp_datap = NULL;
-		}
-
-		/* Set end status : Normal end */
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__, &mainp->status,
-			TC_INFO_SIZE);
-		SCFDBGMSG(SCF_DBGFLAG_DSCP, "Sequence error");
-
-		/* Check receive data */
-		if (dsc_p->dinfo.base.dscp_datap != NULL) {
-			/* Receive data release  */
-			kmem_free(dsc_p->dinfo.base.dscp_datap,
-				dsc_p->dinfo.base.length);
-			dsc_p->dinfo.base.dscp_datap = NULL;
-		}
-
-		/* Set end status : Sequence error */
-		dsc_p->dinfo.bdsr.status = DSC_STATUS_E_SEQUENCE;
-
-		/* Change RxDSC status (RB3) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Tx subroutine function
- */
-
-/*
- * scf_dscp_send_matrix()
- *
- * Description: The Request to Send by a Tx descriptor state is performed.
- *
- */
-void
-scf_dscp_send_matrix(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_send_matrix() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_state_t		*statep;	/* Soft state pointer */
-	uint8_t			*wk_in_p; /* Working value : input address */
-	uint8_t			*wk_out_p; /* Working value : output address */
-	/*  Working value : next processing check flag */
-	int			next_send_req = FLAG_OFF;
-	int			path_ret; /* SCF path status return value */
-	int			timer_ret;	/* Timer check return value */
-	int			ii;		/* Working value : counter */
-	uint16_t		tx_local = scf_dscp_comtbl.tx_local;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	SCF_DBG_MAKE_NO_DSCP_PATH(scf_dscp_comtbl.dscp_path_flag);
-
-/*
- * SEND_MATRIX_START
- */
-	SEND_MATRIX_START:
-
-	/* Check use local control TxDSC send */
-	if ((scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) &&
-		/* Check DSCP path change data send */
-		(scf_dscp_comtbl.dscp_path_flag == FLAG_ON)) {
-		/* Set use local control TxDSC flag */
-		scf_dscp_comtbl.tx_local_use_flag = FLAG_ON;
-
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[tx_local];
-
-		/* Make Tx descriptor : DSCP_PATH */
-		dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-		dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-		dsc_p->dinfo.base.length = 0;
-		dsc_p->dinfo.base.dscp_datap = NULL;
-		dsc_p->dinfo.bdcr.id = DSC_CNTL_LOCAL;
-		dsc_p->dinfo.bdcr.code = DSC_CNTL_DSCP_PATH;
-
-		/* Change TxDSC status (SB2) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-	} else if ((scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) &&
-		(scf_dscp_comtbl.dscp_path_flag == FLAG_OFF)) {
-		/* Initialize use local control TxDSC flag */
-		scf_dscp_comtbl.tx_local_use_flag = FLAG_OFF;
-
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[scf_dscp_comtbl.tx_get];
-
-		/* Get top main table address */
-		mainp = &scf_dscp_comtbl.scf_dscp_main[0];
-		for (ii = 0; ii < MBIF_MAX; ii++, mainp++) {
-			/*
-			 * Check DSCP connect data send and not local
-			 * control TxDSC send
-			 */
-			if ((mainp->conn_chk_flag == FLAG_OFF) ||
-				(scf_dscp_comtbl.tx_local_use_flag ==
-				FLAG_ON)) {
-				break;
-			}
-			/* Check main status */
-			switch (mainp->status) {
-			case SCF_ST_EST_TXEND_RECV_WAIT:
-				/* Main status (B0) */
-			case SCF_ST_ESTABLISHED:
-				/* Main status (C0) */
-				/*
-				 * Set use local control TxDSC flag
-				 */
-				scf_dscp_comtbl.tx_local_use_flag = FLAG_ON;
-
-				/*
-				 * Get local data TxDSC address
-				 */
-				dsc_p = &scf_dscp_comtbl.tx_dscp[tx_local];
-
-				/*
-				 * Make Tx descriptor : CONN_CHK
-				 */
-				dsc_p->dinfo.base.c_flag = DSC_FLAG_DEFAULT;
-				dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-				dsc_p->dinfo.base.length = 0;
-				dsc_p->dinfo.base.dscp_datap = NULL;
-				dsc_p->dinfo.bdcr.id = mainp->id & 0x0f;
-				dsc_p->dinfo.bdcr.code = DSC_CNTL_CONN_CHK;
-
-				/* Change TxDSC status (SB2) */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXREQ_SEND_WAIT);
-				break;
-
-			default:
-				/*
-				 * Clear DSCP connect check flag
-				 */
-				mainp->conn_chk_flag = FLAG_OFF;
-				break;
-			}
-		}
-	} else {
-		/* Get local data TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[tx_local];
-	}
-
-	/* Check pending send TxDSC or local control TxDSC */
-	if ((scf_dscp_comtbl.tx_dsc_count == 0) &&
-		(scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF)) {
-		goto END_dscp_send_matrix;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(&statep);
-	/* Check TxDSC status */
-	switch (dsc_p->status) {
-	case SCF_TX_ST_IDLE:		/* TxDSC status (SA0) */
-		/* TxDSC status == SA0 is next processing */
-		if (scf_dscp_comtbl.tx_local_use_flag == FLAG_OFF) {
-			/* Update Tx descriptor offset */
-			if (scf_dscp_comtbl.tx_get == scf_dscp_comtbl.tx_last) {
-				scf_dscp_comtbl.tx_get =
-					scf_dscp_comtbl.tx_first;
-			} else {
-				scf_dscp_comtbl.tx_get++;
-			}
-
-			/* Update Tx descriptor count */
-			scf_dscp_comtbl.tx_dsc_count--;
-		} else {
-			/* Initialize use local control TxDSC flag */
-			scf_dscp_comtbl.tx_local_use_flag = FLAG_OFF;
-		}
-
-		/* Next processing flag ON */
-		next_send_req = FLAG_ON;
-		break;
-
-	case SCF_TX_ST_SRAM_TRANS_WAIT:		/* TxDSC status (SB0) */
-		/* Check SCF path status */
-		if (path_ret != SCF_PATH_ONLINE) {
-			break;
-		}
-		/* Data copy to SRAM */
-		ii = dsc_p->dinfo.base.offset * DSC_OFFSET_CONVERT;
-		wk_in_p = (uint8_t *)dsc_p->dinfo.base.dscp_datap;
-		wk_out_p = (uint8_t *)&statep->scf_dscp_sram->DATA[ii];
-		for (ii = 0; ii < dsc_p->dinfo.base.length;
-			ii++, wk_in_p++, wk_out_p++) {
-			SCF_DDI_PUT8(statep, statep->scf_dscp_sram_handle,
-				wk_out_p, *wk_in_p);
-		}
-
-		/* Change TxDSC status (SB2) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_TXREQ_SEND_WAIT);
-
-		/* Next processing flag ON */
-		next_send_req = FLAG_ON;
-		break;
-
-	case SCF_TX_ST_TXREQ_SEND_WAIT:		/* TxDSC status (SB2) */
-		/* Get timer status */
-		timer_ret = scf_timer_check(SCF_TIMERCD_DSCP_BUSY);
-		/* Check TxREQ busy timer exec */
-		if (timer_ret == SCF_TIMER_EXEC) {
-			break;
-		}
-		/* Check SCF path status */
-		if (path_ret != SCF_PATH_ONLINE) {
-			break;
-		}
-		/* Check TxREQ send exec */
-		if (scf_dscp_comtbl.tx_exec_flag == FLAG_OFF) {
-			/* TxREQ send */
-			scf_dscp_txreq_send(statep, dsc_p);
-
-			/* Check send data length */
-			if (dsc_p->dinfo.base.length != 0) {
-				/* TxACK timer start */
-				scf_timer_start(SCF_TIMERCD_DSCP_ACK);
-
-				/*
-				 * Change TxDSC status (SC0)
-				 */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXACK_RECV_WAIT);
-			} else {
-				/* TxEND timer start */
-				scf_timer_start(SCF_TIMERCD_DSCP_END);
-
-				/*
-				 * Change TxDSC status (SC1)
-				 */
-				SCF_SET_DSC_STATUS(dsc_p,
-					SCF_TX_ST_TXEND_RECV_WAIT);
-			}
-		}
-		break;
-
-	default:
-		/* TxDSC status != SA0 or SB0 or SB2 is NOP */
-		break;
-	}
-
-	/* Check next send processing */
-	if (next_send_req == FLAG_ON) {
-		next_send_req = FLAG_OFF;
-		goto SEND_MATRIX_START;
-	}
-
-/*
- * END_dscp_send_matrix
- */
-	END_dscp_send_matrix:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_txreq_send()
- *
- * Description: TxREQ is transmitted by hard access.
- *
- */
-void
-scf_dscp_txreq_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txreq_send() "
-	uint8_t			*wk_in_p; /* Working value : input address */
-	uint8_t			*wk_out_p; /* Working value : output address */
-	uint32_t		wkleng;		/* Working value : length */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Set control flag */
-	dsc_p->dinfo.bdsr.status = 0;
-	dsc_p->dinfo.base.c_flag |= DSC_FLAG_DEFAULT;
-
-	/* Write TxDCR register */
-	statep->reg_txdcr_c_flag = dsc_p->dinfo.base.c_flag;
-	SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TxDCR_C_FLAG, statep->reg_txdcr_c_flag);
-	SC_DBG_DRV_TRACE(TC_W_TxDCR_C_FLAG, __LINE__,
-		&statep->reg_txdcr_c_flag, sizeof (statep->reg_txdcr_c_flag));
-
-	statep->reg_txdcr_c_offset = dsc_p->dinfo.base.offset;
-	SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TxDCR_OFFSET, statep->reg_txdcr_c_offset);
-	SC_DBG_DRV_TRACE(TC_W_TxDCR_OFFSET, __LINE__,
-		&statep->reg_txdcr_c_offset,
-		sizeof (statep->reg_txdcr_c_offset));
-
-	statep->reg_txdcr_c_length = dsc_p->dinfo.base.length;
-	SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TxDCR_LENGTH, statep->reg_txdcr_c_length);
-	SC_DBG_DRV_TRACE(TC_W_TxDCR_LENGTH, __LINE__,
-		&statep->reg_txdcr_c_length,
-		sizeof (statep->reg_txdcr_c_length));
-
-	/* Write DCR register : TxREQ interrupt */
-	statep->reg_dcr = DCR_TxREQ;
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR, statep->reg_dcr);
-	SC_DBG_DRV_TRACE(TC_W_DCR, __LINE__, &statep->reg_dcr,
-		sizeof (statep->reg_dcr));
-
-	/* Register read sync */
-	scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR);
-
-	SC_DBG_DRV_TRACE(TC_TxREQ, __LINE__, &statep->reg_txdcr_c_flag, 8);
-
-	SCFDBGMSG1(SCF_DBGFLAG_REG, "DCR = 0x%02x", statep->reg_dcr);
-	SCFDBGMSG3(SCF_DBGFLAG_REG, "TxDCR = 0x%04x 0x%04x 0x%08x",
-		statep->reg_txdcr_c_flag, statep->reg_txdcr_c_offset,
-		statep->reg_txdcr_c_length);
-
-	/* TxREQ send exec flag ON */
-	scf_dscp_comtbl.tx_exec_flag = FLAG_ON;
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_DSCP_TXREQ);
-	if (dsc_p->dinfo.base.length != 0) {
-		wk_in_p = (uint8_t *)dsc_p->dinfo.base.dscp_datap;
-		wk_out_p = (uint8_t *)&statep->memo_scf_drvtrc.INFO[0];
-		if (dsc_p->dinfo.base.length >
-			sizeof (statep->memo_scf_drvtrc.INFO)) {
-			wkleng = sizeof (statep->memo_scf_drvtrc.INFO);
-		} else {
-			wkleng = dsc_p->dinfo.base.length;
-		}
-		bcopy(wk_in_p, wk_out_p, wkleng);
-		SCF_SRAM_TRACE(statep, DTC_DSCP_SENDDATA);
-	}
-
-	SCF_DBG_TEST_TXREQ_SEND(statep, dsc_p);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Rx subroutine function
- */
-
-/*
- * scf_dscp_recv_matrix()
- *
- * Description: TxREQ received performs the corresponding response request.
- *
- */
-void
-scf_dscp_recv_matrix(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_recv_matrix() "
-	scf_dscp_main_t		*mainp;		/* Main table address */
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	scf_state_t		*statep;	/* Soft state pointer */
-	caddr_t			wkaddr;	/* Working value : buffer address */
-	uint8_t			*wk_in_p; /* Working value : input address */
-	uint8_t			*wk_out_p; /* Working value : output address */
-	uint32_t		wkleng;		/* Working value : length */
-	uint32_t		info_size;
-	/* Working value : next receive processing check flag */
-	int			next_resp_req = FLAG_OFF;
-	int			path_ret; /* SCF path status return value */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-/*
- * RECV_MATRIX_START
- */
-	RECV_MATRIX_START:
-
-	/* Check pending RxDSC */
-	if (scf_dscp_comtbl.rx_dsc_count == 0) {
-		goto END_dscp_recv_matrix;
-	}
-
-	/* Get RxDSC address */
-	dsc_p = &scf_dscp_comtbl.rx_dscp[scf_dscp_comtbl.rx_get];
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(&statep);
-
-	/* Check RxDSC status */
-	switch (dsc_p->status) {
-	case SCF_RX_ST_RXACK_SEND_WAIT:		/* RxDSC status (RB0) */
-		/* Check SCF path status */
-		if (path_ret != SCF_PATH_ONLINE) {
-			break;
-		}
-		/* Check receive data length */
-		if (dsc_p->dinfo.base.length != 0) {
-			/* Rx buffer allocation */
-			wkaddr = (caddr_t)kmem_zalloc(dsc_p->dinfo.base.length,
-				KM_NOSLEEP);
-
-			/* Set Rx buffer address */
-			dsc_p->dinfo.base.dscp_datap = wkaddr;
-
-			/* RxACK send */
-			scf_dscp_rxack_send(statep);
-
-			/* Change RxDSC status (RB1) */
-			SCF_SET_DSC_STATUS(dsc_p,
-				SCF_RX_ST_SRAM_TRANS_WAIT);
-		} else {
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-			break;
-		}
-		/* Next receive processing flag ON */
-		next_resp_req = FLAG_ON;
-
-		break;
-
-	case SCF_RX_ST_SRAM_TRANS_WAIT:		/* RxDSC status (RB1) */
-		/* Check SCF path status */
-		if (path_ret != SCF_PATH_ONLINE) {
-			break;
-		}
-		/* Get main table address from "id" */
-		mainp = scf_dscp_id2mainp(dsc_p->dinfo.bdcr.id);
-
-		/* Check mainp address */
-		if (mainp != NULL) {
-			/* Data copy from SRAM */
-			ii = dsc_p->dinfo.base.offset * DSC_OFFSET_CONVERT;
-			wk_in_p = &statep->scf_dscp_sram->DATA[ii];
-			wk_out_p = (uint8_t *)dsc_p->dinfo.base.dscp_datap;
-			for (ii = 0; ii < dsc_p->dinfo.base.length; ii++,
-				wk_in_p++, wk_out_p++) {
-				*wk_out_p = SCF_DDI_GET8(statep,
-					statep->scf_dscp_sram_handle, wk_in_p);
-			}
-
-			/* Set end status : Normal end */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_NORMAL;
-
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-
-			/* STAM trace */
-			info_size = sizeof (statep->memo_scf_drvtrc.INFO);
-			if (dsc_p->dinfo.base.length != 0) {
-				wk_in_p =
-					(uint8_t *)dsc_p->dinfo.base.dscp_datap;
-				wk_out_p = &statep->memo_scf_drvtrc.INFO[0];
-				if (dsc_p->dinfo.base.length > info_size) {
-					wkleng = info_size;
-				} else {
-					wkleng = dsc_p->dinfo.base.length;
-				}
-				bcopy(wk_in_p, wk_out_p, wkleng);
-				SCF_SRAM_TRACE(statep, DTC_DSCP_RECVDATA);
-			}
-
-			/* Receive data notice to main matrix */
-			scf_dscp_rxdata_notice(mainp);
-		} else {
-			/* Invalid "id" */
-			SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__,
-				&dsc_p->dinfo.base.c_flag, TC_INFO_SIZE);
-			SCFDBGMSG(SCF_DBGFLAG_DSCP, "Invalid id");
-
-			/* Set end status : Parameter error */
-			dsc_p->dinfo.bdsr.status = DSC_STATUS_E_PARAM;
-
-			/* Change RxDSC status (RB3) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_RXEND_SEND_WAIT);
-		}
-
-		/* Next receive processing flag ON */
-		next_resp_req = FLAG_ON;
-		break;
-
-	case SCF_RX_ST_RXEND_SEND_WAIT:		/* RxDSC status (RB3) */
-		/* Is SCF path online? */
-		if (path_ret != SCF_PATH_ONLINE) {
-			break;
-		}
-		/* RxEND send */
-		scf_dscp_rxend_send(statep, dsc_p);
-
-		/* Change RxDSC status (RA0) */
-		SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_IDLE);
-
-		/* Update Rx descriptor offset */
-		if (scf_dscp_comtbl.rx_get == scf_dscp_comtbl.rx_last) {
-			scf_dscp_comtbl.rx_get = scf_dscp_comtbl.rx_first;
-		} else {
-			scf_dscp_comtbl.rx_get++;
-		}
-
-		/* Update Rx descriptor count */
-		scf_dscp_comtbl.rx_dsc_count--;
-
-		/* RxREQ receive exec flag OFF */
-		scf_dscp_comtbl.rx_exec_flag = FLAG_OFF;
-		break;
-
-	default:
-		/* RxDSC status == RA0 is NOP */
-		break;
-	}
-
-	/* Check next receive processing */
-	if (next_resp_req == FLAG_ON) {
-		next_resp_req = FLAG_OFF;
-		goto RECV_MATRIX_START;
-	}
-
-/*
- * END_dscp_recv_matrix
- */
-	END_dscp_recv_matrix:
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxack_send()
- *
- * Description: RxACK is transmitted by hard access.
- *
- */
-void
-scf_dscp_rxack_send(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxack_send() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Write DCR register : RxACK interrupt */
-	statep->reg_dcr = DCR_RxACK;
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR, statep->reg_dcr);
-	SC_DBG_DRV_TRACE(TC_W_DCR, __LINE__, &statep->reg_dcr,
-		sizeof (statep->reg_dcr));
-
-	/* Register read sync */
-	scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR);
-
-	SC_DBG_DRV_TRACE(TC_RxACK, __LINE__, NULL, 0);
-
-	SCFDBGMSG1(SCF_DBGFLAG_REG, "DCR = 0x%02x", statep->reg_dcr);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_DSCP_RXACK);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxend_send()
- *
- * Description: RxEND is transmitted by hard access.
- *
- */
-void
-scf_dscp_rxend_send(scf_state_t *statep, scf_dscp_dsc_t *dsc_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxend_send() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Write RxDSR register */
-	statep->reg_rxdsr_c_flag = dsc_p->dinfo.base.c_flag;
-	SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RxDSR_C_FLAG, statep->reg_rxdsr_c_flag);
-	SC_DBG_DRV_TRACE(TC_W_RxDSR_C_FLAG, __LINE__, &statep->reg_rxdsr_c_flag,
-		sizeof (statep->reg_rxdsr_c_flag));
-
-	statep->reg_rxdsr_c_offset = dsc_p->dinfo.base.offset;
-	SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RxDSR_OFFSET, statep->reg_rxdsr_c_offset);
-	SC_DBG_DRV_TRACE(TC_W_RxDSR_OFFSET, __LINE__,
-		&statep->reg_rxdsr_c_offset,
-		sizeof (statep->reg_rxdsr_c_offset));
-
-	/* Write DCR register : RxEND interrupt */
-	statep->reg_dcr = DCR_RxEND;
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR, statep->reg_dcr);
-	SC_DBG_DRV_TRACE(TC_W_DCR, __LINE__, &statep->reg_dcr,
-		sizeof (statep->reg_dcr));
-
-	/* Register read sync */
-	scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->DCR);
-
-	SC_DBG_DRV_TRACE(TC_RxEND, __LINE__, &statep->reg_rxdsr_c_flag, 4);
-
-	SCFDBGMSG1(SCF_DBGFLAG_REG, "DCR = 0x%02x", statep->reg_dcr);
-	SCFDBGMSG2(SCF_DBGFLAG_REG, "RxDSR = 0x%04x 0x%04x",
-		statep->reg_rxdsr_c_flag, statep->reg_rxdsr_c_offset);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_DSCP_RXEND);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * subroutine function
- */
-
-/*
- * scf_dscp_dscbuff_free_all()
- *
- * Description: All descripter buffer release processing.
- *
- */
-void
-scf_dscp_dscbuff_free_all(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_dscbuff_free_all() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get TxDSC address */
-	dsc_p = scf_dscp_comtbl.tx_dscp;
-
-	if (dsc_p != NULL) {
-		/* Check TxDSC */
-		for (ii = 0; ii < scf_dscp_comtbl.txdsc_maxcount; ii++,
-			dsc_p++) {
-			/* Check TxDSC status */
-			if (dsc_p->status == SCF_TX_ST_IDLE) {
-				continue;
-			}
-			/* TxDSC status not (SA0) */
-			/* Check send data */
-			if (dsc_p->dinfo.base.dscp_datap != NULL) {
-				/* Send data release */
-				kmem_free(dsc_p->dinfo.base.dscp_datap,
-					dsc_p->dinfo.base.length);
-				dsc_p->dinfo.base.dscp_datap = NULL;
-			}
-
-			/* Check SRAM data */
-			if (dsc_p->dinfo.base.offset != DSC_OFFSET_NOTHING) {
-				/* Send SRAM data release */
-				scf_dscp_sram_free(dsc_p->dinfo.base.offset);
-				dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-			}
-
-			/* Change TxDSC status (SA0) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_IDLE);
-		}
-
-		/* Tx flag initialization */
-		scf_dscp_comtbl.tx_exec_flag = FLAG_OFF;
-		scf_dscp_comtbl.dscp_path_flag = FLAG_OFF;
-		scf_dscp_comtbl.tx_local_use_flag = FLAG_OFF;
-
-		/* TxDSC counter/offset initialization */
-		scf_dscp_comtbl.tx_get = scf_dscp_comtbl.tx_put;
-		scf_dscp_comtbl.tx_dsc_count = 0;
-
-		/* Tx re-try counter initialization */
-		scf_dscp_comtbl.tx_ackto_retry_cnt = 0;
-		scf_dscp_comtbl.tx_endto_retry_cnt = 0;
-
-		scf_dscp_comtbl.tx_busy_retry_cnt = 0;
-		scf_dscp_comtbl.tx_interface_retry_cnt = 0;
-		scf_dscp_comtbl.tx_nak_retry_cnt = 0;
-		scf_dscp_comtbl.tx_notsuop_retry_cnt = 0;
-		scf_dscp_comtbl.tx_prmerr_retry_cnt = 0;
-		scf_dscp_comtbl.tx_seqerr_retry_cnt = 0;
-		scf_dscp_comtbl.tx_other_retry_cnt = 0;
-		scf_dscp_comtbl.tx_send_retry_cnt = 0;
-	}
-
-	/* Get RxDSC address */
-	dsc_p = scf_dscp_comtbl.rx_dscp;
-
-	if (dsc_p != NULL) {
-		/* Check RxDSC */
-		for (ii = 0; ii < scf_dscp_comtbl.rxdsc_maxcount; ii++,
-			dsc_p++) {
-			/* Check RxDSC status */
-			if (dsc_p->status == SCF_RX_ST_IDLE) {
-				continue;
-			}
-			/* RxDSC status not (RA0) */
-			/* Check receive data */
-			if (dsc_p->dinfo.base.dscp_datap != NULL) {
-				/* Receive data release */
-				kmem_free(dsc_p->dinfo.base.dscp_datap,
-					dsc_p->dinfo.base.length);
-				dsc_p->dinfo.base.dscp_datap = NULL;
-			}
-
-			/* Change RxDSC status (RA0) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_IDLE);
-		}
-
-		/* Rx flag initialization */
-		scf_dscp_comtbl.rx_exec_flag = FLAG_OFF;
-
-		/* RxDSC counter/offset initialization */
-		scf_dscp_comtbl.rx_get = scf_dscp_comtbl.rx_put;
-		scf_dscp_comtbl.rx_dsc_count = 0;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_txdscbuff_free()
- *
- * Description: Tx descripter buffer release processing.
- *
- */
-void
-scf_dscp_txdscbuff_free(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_txdscbuff_free() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	uint16_t		wkget;		/* Working value : get offset */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get TxDSC offser */
-	wkget = scf_dscp_comtbl.tx_get;
-
-	/* Check TxDSC */
-	for (ii = 0; ii < scf_dscp_comtbl.tx_dsc_count; ii++) {
-		/* Get TxDSC address */
-		dsc_p = &scf_dscp_comtbl.tx_dscp[wkget];
-
-		/* Update Tx descriptor offset */
-		if (wkget == scf_dscp_comtbl.tx_last) {
-			wkget = scf_dscp_comtbl.tx_first;
-		} else {
-			wkget++;
-		}
-
-		/* Check main use data */
-		if (mainp->id != dsc_p->dinfo.bdcr.id) {
-			continue;
-		}
-		/* Check TxDSC status */
-		switch (dsc_p->status) {
-		case SCF_TX_ST_SRAM_TRANS_WAIT:
-			/* TxDSC status not (SB0) */
-		case SCF_TX_ST_TXREQ_SEND_WAIT:
-			/* TxDSC status not (SB2) */
-			/* Check send data */
-			if (dsc_p->dinfo.base.dscp_datap != NULL) {
-				/* Send data release */
-				kmem_free(dsc_p->dinfo.base.dscp_datap,
-					dsc_p->dinfo.base.length);
-				dsc_p->dinfo.base.dscp_datap = NULL;
-			}
-
-			/* Check SRAM data */
-			if (dsc_p->dinfo.base.offset != DSC_OFFSET_NOTHING) {
-				/* Send SRAM data release */
-				scf_dscp_sram_free(dsc_p->dinfo.base.offset);
-				dsc_p->dinfo.base.offset = DSC_OFFSET_NOTHING;
-			}
-
-			/* Change TxDSC status (SA0) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_TX_ST_IDLE);
-			break;
-
-		default:
-			/* TxDSC status != SB0 or SB2 is NOP */
-			break;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rxdscbuff_free()
- *
- * Description: Rx descripter buffer release processing.
- *
- */
-void
-scf_dscp_rxdscbuff_free(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rxdscbuff_free() "
-	scf_dscp_dsc_t		*dsc_p;		/* TxDSC address */
-	uint16_t		wkget;		/* Working value : get offset */
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Get RxDSC offser */
-	wkget = scf_dscp_comtbl.rx_get;
-
-	/* Check RxDSC */
-	for (ii = 0; ii < scf_dscp_comtbl.rx_dsc_count; ii++) {
-		/* Get RxDSC address */
-		dsc_p = &scf_dscp_comtbl.rx_dscp[wkget];
-
-		/* Update Rx descriptor offset */
-		if (wkget == scf_dscp_comtbl.rx_last) {
-			wkget = scf_dscp_comtbl.rx_first;
-		} else {
-			wkget++;
-		}
-
-		/* Check main use data */
-		if (mainp->id != dsc_p->dinfo.bdcr.id) {
-			continue;
-		}
-		/* Check RxDSC status */
-		if (dsc_p->status != SCF_RX_ST_IDLE) {
-			/* TxDSC status not (RA0) */
-			/* Check receive data */
-			if (dsc_p->dinfo.base.dscp_datap != NULL) {
-				/* Receive data release */
-				kmem_free(dsc_p->dinfo.base.dscp_datap,
-					dsc_p->dinfo.base.length);
-				dsc_p->dinfo.base.dscp_datap = NULL;
-			}
-
-			/* Change RxDSC status (RA0) */
-			SCF_SET_DSC_STATUS(dsc_p, SCF_RX_ST_IDLE);
-
-			/* Rx flag initialization */
-			scf_dscp_comtbl.rx_exec_flag = FLAG_OFF;
-
-			/* RxDSC counter/offset initialization */
-			scf_dscp_comtbl.rx_get = scf_dscp_comtbl.rx_put;
-			scf_dscp_comtbl.rx_dsc_count = 0;
-			break;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_rdata_free()
- *
- * Description: All receive data buffer release processing.
- *
- */
-void
-scf_dscp_rdata_free(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_rdata_free() "
-	/* Current receive data queue address */
-	scf_rdata_que_t		*rdt_p;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	while (mainp->rd_count != 0) {
-		/* Get receive data queue address */
-		rdt_p = &mainp->rd_datap[mainp->rd_get];
-
-		/* Check receive data buffer */
-		if (rdt_p->rdatap != NULL) {
-			/* Receve data release */
-			kmem_free(rdt_p->rdatap, rdt_p->length);
-			rdt_p->rdatap = NULL;
-		}
-
-		/* Update receive data queue */
-		if (mainp->rd_get == mainp->rd_last) {
-			mainp->rd_get = mainp->rd_first;
-		} else {
-			mainp->rd_get++;
-		}
-
-		/* Update receive data queue count */
-		mainp->rd_count--;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_event_queue()
- *
- * Description: Event queueing processing.
- *
- */
-void
-scf_dscp_event_queue(scf_dscp_main_t *mainp, scf_event_t mevent)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_event_queue() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check DISC ERROR event */
-	if (mevent == SCF_MB_DISC_ERROR) {
-		/* INIT_REQ retry timer stop */
-		scf_timer_stop(mainp->timer_code);
-
-		/* TxDSC buffer release */
-		scf_dscp_txdscbuff_free(mainp);
-
-		/* RxDSC buffer release */
-		scf_dscp_rxdscbuff_free(mainp);
-
-		/* All queing event release */
-		scf_dscp_event_queue_free(mainp);
-
-		/* All receive buffer release */
-		scf_dscp_rdata_free(mainp);
-	}
-
-	/* Event queing */
-	mainp->ev_quep[mainp->ev_put].mevent = mevent;
-
-	/* Update event queue offset */
-	if (mainp->ev_put == mainp->ev_last) {
-		mainp->ev_put = mainp->ev_first;
-	} else {
-		mainp->ev_put++;
-	}
-
-	/* Update event queue count */
-	mainp->ev_count++;
-
-	/* Soft interrupt : call scf_dscp_callback() */
-	if (mutex_tryenter(&scf_comtbl.si_mutex) != 0) {
-		scf_comtbl.scf_softintr_dscp_kicked = FLAG_ON;
-		ddi_trigger_softintr(scf_comtbl.scf_softintr_id);
-		mutex_exit(&scf_comtbl.si_mutex);
-	}
-
-	/* Callback timer start */
-	scf_timer_start(SCF_TIMERCD_DSCP_CALLBACK);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_event_queue_free()
- *
- * Description: Event queue release processing.
- *
- */
-void
-scf_dscp_event_queue_free(scf_dscp_main_t *mainp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_event_queue_free() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* All queing event release */
-	mainp->ev_get = mainp->ev_put;
-	mainp->ev_count = 0;
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_dscp_mkey2mainp()
- *
- * Description: Get MAIN control table address processing by mkey.
- *
- */
-scf_dscp_main_t *
-scf_dscp_mkey2mainp(mkey_t mkey)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_mkey2mainp() "
-	/* Return value : Main table address */
-	scf_dscp_main_t		*mainp = NULL;
-	int			ii;		/* Working value : counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	for (ii = 0; ii < MBIF_MAX; ii++) {
-		/* Check "mkey" at search table */
-		if (mkey == scf_dscp_mkey_search[ii]) {
-			/* Set mainp address */
-			mainp = &scf_dscp_comtbl.scf_dscp_main[ii];
-			break;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-	return (mainp);
-}
-
-
-/*
- * scf_dscp_id2mainp()
- *
- * Description: Get MAIN control table address processing by id.
- *
- */
-scf_dscp_main_t *
-scf_dscp_id2mainp(uint8_t id)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_id2mainp() "
-	/* Return value : Main table address */
-	scf_dscp_main_t		*mainp = NULL;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check "id" */
-	if (id < MBIF_MAX) {
-		/* Set mainp address */
-		mainp = &scf_dscp_comtbl.scf_dscp_main[id];
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-	return (mainp);
-}
-
-
-/*
- * scf_dscp_sram_get()
- *
- * Description: Tx SRAM alloc processing.
- *
- */
-uint16_t
-scf_dscp_sram_get(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_sram_get() "
-	scf_tx_sram_t		*sram_p;	/* Tx SRAM table address */
-	int			ii;		/* Working value : counter */
-	/* Return value : Tx SRAM offset */
-	uint16_t		offset = TX_SRAM_GET_ERROR;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	/* Check Tx SRAM space */
-	if (scf_dscp_comtbl.tx_sram_count >=
-		scf_dscp_comtbl.txsram_maxcount) {
-		goto END_dscp_sram_get;
-	}
-
-	/* Check all Tx SRAM table */
-	for (ii = 0; ii < scf_dscp_comtbl.txsram_maxcount; ii++) {
-		/* Get Tx SRAM table address */
-		sram_p = &scf_dscp_comtbl.tx_sramp[scf_dscp_comtbl.tx_sram_put];
-
-		/* Update Tx SRAM offset */
-		if (scf_dscp_comtbl.tx_sram_put ==
-			scf_dscp_comtbl.tx_sram_last) {
-			scf_dscp_comtbl.tx_sram_put =
-				scf_dscp_comtbl.tx_sram_first;
-		} else {
-			scf_dscp_comtbl.tx_sram_put++;
-		}
-
-		/* Check Tx SRAM use */
-		if (sram_p->use_flag == FLAG_OFF) {
-			/* Tx SRAM use flag ON */
-			sram_p->use_flag = FLAG_ON;
-
-			/* Get Tx SRAM offset */
-			offset = sram_p->offset;
-
-			/* Update Tx SRAM count */
-			scf_dscp_comtbl.tx_sram_count++;
-			break;
-		}
-	}
-
-/*
- * END_dscp_sram_get
- */
-	END_dscp_sram_get:
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end offset = 0x%04x",
-		offset);
-	return (offset);
-}
-
-
-/*
- * scf_dscp_sram_free()
- *
- * Description: Tx SRAM release processing
- *
- */
-void
-scf_dscp_sram_free(uint16_t offset)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_dscp_sram_free() "
-	scf_tx_sram_t		*sram_p;	/* Tx SRAM table address */
-	uint16_t		wkget;		/* Working value : get offset */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start offset = 0x%04x",
-		offset);
-
-	/* "offset" to Tx SRAM get offset */
-	wkget = (uint16_t)(offset
-	/ (scf_dscp_comtbl.txbuffsize / DSC_OFFSET_CONVERT));
-
-	/* Check Tx SRAM get offset */
-	if (wkget < scf_dscp_comtbl.txsram_maxcount) {
-		/* Get Tx SRAM table address */
-		sram_p = &scf_dscp_comtbl.tx_sramp[wkget];
-
-		/* Check "offset" */
-		if (offset == sram_p->offset) {
-			/* Tx SRAM use flag OFF */
-			sram_p->use_flag = FLAG_OFF;
-
-			/* Update Tx SRAM count */
-			scf_dscp_comtbl.tx_sram_count--;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfhandler.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3548 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/ksynch.h>
-#include <sys/types.h>
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-/*
- * Function list
- */
-uint_t	scf_intr(caddr_t arg);
-int	scf_intr_cmdcmp(scf_state_t *statep);
-void	scf_intr_cmdcmp_driver(scf_state_t *statep, struct scf_cmd *scfcmdp);
-int	scf_intr_dsens(struct scf_cmd *scfcmdp, scf_int_reason_t *int_rp,
-	int len);
-void	scf_status_change(scf_state_t *statep);
-void	scf_next_cmd_check(scf_state_t *statep);
-void	scf_next_rxdata_get(void);
-void	scf_online_wait_tout(void);
-void	scf_cmdbusy_tout(void);
-void	scf_cmdend_tout(void);
-void	scf_report_send_wait_tout(void);
-void	scf_alivecheck_intr(scf_state_t *statep);
-void	scf_path_change(scf_state_t *statep);
-void	scf_halt(uint_t mode);
-void	scf_panic_callb(int code);
-void	scf_shutdown_callb(int code);
-uint_t	scf_softintr(caddr_t arg);
-void	scf_cmdwait_status_set(void);
-
-/*
- * External function
- */
-extern	void	scf_dscp_start(uint32_t factor);
-extern	void	scf_dscp_stop(uint32_t factor);
-extern	void	scf_dscp_intr(scf_state_t *state);
-extern	void	scf_dscp_callback(void);
-
-extern	void	do_shutdown(void);
-
-
-/*
- * scf_intr()
- *
- * Description: Interrupt handler entry processing.
- *
- */
-uint_t
-scf_intr(caddr_t arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_intr() "
-	scf_state_t		*statep = (void *)arg;
-	int			path_change = 0;
-	uint_t			ret = DDI_INTR_CLAIMED;
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-	SC_DBG_DRV_TRACE(TC_INTR|TC_IN, __LINE__, &arg, sizeof (caddr_t));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Path status check */
-	if (scf_check_state(statep) == PATH_STAT_EMPTY) {
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-		goto END_intr;
-	}
-
-	/* PANIC exec status */
-	if (scf_panic_exec_flag) {
-		/* SCF interrupt disable(CR) */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL, CONTROL_DISABLE);
-		/* Register read sync */
-		scf_rs16 = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-
-		/* SCF Status register interrupt(STR) : clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		/* SCF Status extended register(STExR) : interrupt clear */
-		SCF_P_DDI_PUT32(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-
-		/* DSCP buffer status register(DSR) : interrupt clear */
-		SCF_P_DDI_PUT8(statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-
-		/* SCF interrupt status register(ISR) : interrupt clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		scf_rs16 = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-		goto END_intr;
-	}
-
-	/* Check hard error after or interrupt disable status */
-	if ((statep->scf_herr & HERR_EXEC) ||
-		(!(statep->resource_flag & S_DID_REGENB))) {
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* Interrupt disable */
-		scf_forbid_intr(statep);
-
-		/* SCF Status register interrupt(STR) : clear */
-		SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		/* SCF Status extended register(STExR) : interrupt clear */
-		SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-
-		/* DSCP buffer status register(DSR) : interrupt clear */
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-
-		/* SCF interrupt status register(ISR) : interrupt clear */
-		SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-		goto END_intr;
-	}
-
-	/* Get SCF interrupt register */
-	statep->reg_int_st = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->INT_ST);
-	SC_DBG_DRV_TRACE(TC_R_INT_ST, __LINE__, &statep->reg_int_st,
-		sizeof (statep->reg_int_st));
-
-	/* SCF interrupt register interrupt clear */
-	SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->INT_ST, statep->reg_int_st);
-	SC_DBG_DRV_TRACE(TC_W_INT_ST, __LINE__, &statep->reg_int_st,
-		sizeof (statep->reg_int_st));
-	/* Register read sync */
-	scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->INT_ST);
-
-	SCF_DBG_TEST_INTR(statep);
-
-	SCFDBGMSG1(SCF_DBGFLAG_REG, "ISR = 0x%04x", statep->reg_int_st);
-
-	/* Get SCF status register */
-	statep->reg_status = SCF_DDI_GET16(statep,
-		statep->scf_regs_handle, &statep->scf_regs->STATUS);
-	SC_DBG_DRV_TRACE(TC_R_STATUS, __LINE__, &statep->reg_status,
-		sizeof (statep->reg_status));
-
-	/* Get SCF status extended register */
-	statep->reg_status_exr = SCF_DDI_GET32(statep,
-		statep->scf_regs_handle, &statep->scf_regs->STATUS_ExR);
-	SC_DBG_DRV_TRACE(TC_R_STATUS_ExR, __LINE__, &statep->reg_status_exr,
-		sizeof (statep->reg_status_exr));
-
-	/* Get SCF command register */
-	statep->reg_command = SCF_DDI_GET16(statep,
-		statep->scf_regs_handle, &statep->scf_regs->COMMAND);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND, __LINE__, &statep->reg_command,
-		sizeof (statep->reg_command));
-
-	/* Get SCF command extended register */
-	statep->reg_command_exr = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND_ExR);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND_ExR, __LINE__, &statep->reg_command_exr,
-		sizeof (statep->reg_command_exr));
-
-	SCF_DBG_TEST_INTR_SCFINT(statep);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_INT);
-
-	/* Check SCF path change interrupt */
-	if (statep->reg_int_st & CONTROL_PATHCHGIE) {
-		/* Check interrupt SCF path */
-		if ((statep != scf_comtbl.scf_exec_p) &&
-			(statep != scf_comtbl.scf_path_p)) {
-			path_change = 1;
-			goto END_intr;
-		}
-	}
-
-	/* Check Alive Interrupt */
-	if (statep->reg_int_st & INT_ST_ALIVEINT) {
-		/* Check interrupt SCF path */
-		if ((statep == scf_comtbl.scf_exec_p) ||
-			(statep == scf_comtbl.scf_path_p)) {
-			/* Alive check interrupt */
-			scf_alivecheck_intr(statep);
-		} else {
-			/* not active SCF path */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr    ", 8);
-			/* Alive interrupt disable */
-			scf_alivecheck_stop(statep);
-		}
-	}
-
-	/* Check SCF interrupt */
-	if (statep->reg_int_st & INT_ST_SCFINT) {
-		SC_DBG_DRV_TRACE(TC_RSTS, __LINE__, &statep->reg_command,
-			TC_INFO_SIZE);
-
-		SCFDBGMSG2(SCF_DBGFLAG_REG, "STR = 0x%04x STExR = 0x%08x",
-			statep->reg_status, statep->reg_status_exr);
-
-		/* Check active SCF path */
-		if ((statep == scf_comtbl.scf_exec_p) ||
-			(statep == scf_comtbl.scf_path_p)) {
-
-			/* Mode changed bit valid */
-			if ((statep->reg_status & STATUS_MODE_CHANGED) ||
-				(statep->reg_status & STATUS_CMD_COMPLETE)) {
-				/* Check secure mode status */
-				if ((statep->reg_status & STATUS_SECURE_MODE) ==
-					STATUS_MODE_LOCK) {
-					/* Mode status LOCK */
-					scf_dm_secure_mode = SCF_STAT_MODE_LOCK;
-					if (((scf_comtbl.scf_mode_sw &
-						STATUS_SECURE_MODE) !=
-						STATUS_MODE_LOCK) &&
-						(scf_comtbl.alive_running ==
-						SCF_ALIVE_START)) {
-						/* Alive check start */
-						scf_comtbl.scf_alive_event_sub =
-							EVENT_SUB_ALST_WAIT;
-					}
-				} else {
-					scf_dm_secure_mode =
-						SCF_STAT_MODE_UNLOCK;
-				}
-				scf_comtbl.scf_mode_sw =
-					(statep->reg_status &
-					(STATUS_BOOT_MODE |
-					STATUS_SECURE_MODE));
-			}
-
-			/* Check command complete */
-			if ((scf_comtbl.scf_cmd_exec_flag) &&
-				(statep->reg_status & STATUS_CMD_COMPLETE)) {
-				/* SCF command complete processing */
-				path_change = scf_intr_cmdcmp(statep);
-				if (path_change) {
-					goto END_intr;
-				}
-			}
-		} else {
-			/* SCF Status register interrupt clear */
-			SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-				&statep->scf_regs->STATUS, statep->reg_status);
-			SC_DBG_DRV_TRACE(TC_W_STATUS, __LINE__,
-				&statep->reg_status,
-				sizeof (statep->reg_status));
-			/* Register read sync */
-			scf_rs16 = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->STATUS);
-
-			/* SCF Status extended register interrupt clear */
-			SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-				&statep->scf_regs->STATUS_ExR,
-				statep->reg_status_exr);
-			SC_DBG_DRV_TRACE(TC_W_STATUS_ExR, __LINE__,
-				&statep->reg_status_exr,
-				sizeof (statep->reg_status_exr));
-			/* Register read sync */
-			scf_rs32 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->STATUS_ExR);
-			goto END_intr;
-		}
-
-		/* Check SCF status change */
-		if (statep->reg_status_exr & STATUS_SCF_STATUS_CHANGE) {
-			/* SCF status change processing */
-			scf_status_change(statep);
-		}
-
-		/* SCF Status register interrupt clear */
-		SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, statep->reg_status);
-		SC_DBG_DRV_TRACE(TC_W_STATUS, __LINE__, &statep->reg_status,
-			sizeof (statep->reg_status));
-		/* Register read sync */
-		scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS);
-
-		/* SCF Status extended register interrupt clear */
-		SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, statep->reg_status_exr);
-		SC_DBG_DRV_TRACE(TC_W_STATUS_ExR, __LINE__,
-			&statep->reg_status_exr,
-			sizeof (statep->reg_status_exr));
-		/* Register read sync */
-		scf_rs32 = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR);
-
-		/* SHUTDOWN/POFF/EVENT/ALIVE save */
-		if (statep->reg_status &
-			(STATUS_SHUTDOWN | STATUS_POFF | STATUS_EVENT)) {
-			scf_comtbl.scf_event_flag |= (statep->reg_status &
-				(STATUS_SHUTDOWN | STATUS_POFF | STATUS_EVENT));
-		}
-
-		/* POWER_FAILURE save */
-		if (statep->reg_status_exr & STATUS_POWER_FAILURE) {
-			scf_comtbl.scf_event_flag |= STATUS_SHUTDOWN;
-		}
-
-		/* Check next receive data timer exec */
-		if (scf_timer_check(SCF_TIMERCD_NEXTRECV) ==
-			SCF_TIMER_NOT_EXEC) {
-			/* Next command send check */
-			scf_next_cmd_check(statep);
-		}
-	}
-
-	/* Check next command send */
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-		(scf_comtbl.cmd_busy_wait != 0)) {
-		scf_comtbl.cmd_busy_wait = 0;
-		/* Signal to command wait */
-		cv_signal(&scf_comtbl.cmdwait_cv);
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmdwait_cv,
-			sizeof (kcondvar_t));
-	}
-
-	/* Check DSCP Communication Buffer Interrupt */
-	if (statep->reg_int_st & INT_ST_IDBCINT) {
-		/* Check interrupt SCF path */
-		if ((statep == scf_comtbl.scf_exec_p) ||
-			(statep == scf_comtbl.scf_path_p)) {
-			scf_dscp_intr(statep);
-		} else {
-			/* not active SCF path */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr    ", 8);
-			/* DSCP buffer status register interrupt clear */
-			SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-				&statep->scf_regs->DSR, 0xff);
-			/* Register read sync */
-			scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-				&statep->scf_regs->DSR);
-		}
-	}
-
-	if ((statep->reg_int_st & INT_ST_ALL) == 0) {
-		/* Unclamed counter up */
-		scf_comtbl.scf_unclamed_cnt++;
-
-		/* Get control register */
-		statep->reg_control = SCF_DDI_GET16(statep,
-			statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-		SC_DBG_DRV_TRACE(TC_R_CONTROL, __LINE__, &statep->reg_control,
-			sizeof (statep->reg_control));
-		scf_comtbl.scf_unclamed.CONTROL = statep->reg_control;
-
-		scf_comtbl.scf_unclamed.INT_ST = statep->reg_int_st;
-
-		/* Get SCF command register */
-		statep->reg_command = SCF_DDI_GET16(statep,
-			statep->scf_regs_handle, &statep->scf_regs->COMMAND);
-		SC_DBG_DRV_TRACE(TC_R_COMMAND, __LINE__, &statep->reg_command,
-			sizeof (statep->reg_command));
-		scf_comtbl.scf_unclamed.COMMAND = statep->reg_command;
-
-		/* Get SCF status register */
-		statep->reg_status = SCF_DDI_GET16(statep,
-			statep->scf_regs_handle, &statep->scf_regs->STATUS);
-		SC_DBG_DRV_TRACE(TC_R_STATUS, __LINE__, &statep->reg_status,
-			sizeof (statep->reg_status));
-		scf_comtbl.scf_unclamed.STATUS = statep->reg_status;
-
-		/* Get SCF status extended register */
-		statep->reg_status_exr = SCF_DDI_GET32(statep,
-			statep->scf_regs_handle, &statep->scf_regs->STATUS_ExR);
-		SC_DBG_DRV_TRACE(TC_R_STATUS_ExR, __LINE__,
-			&statep->reg_status_exr,
-			sizeof (statep->reg_status_exr));
-		scf_comtbl.scf_unclamed.STATUS_ExR = statep->reg_status_exr;
-
-		/* Get DSR register */
-		statep->reg_dsr = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->DSR);
-		SC_DBG_DRV_TRACE(TC_R_DSR, __LINE__, &statep->reg_dsr,
-			sizeof (statep->reg_dsr));
-		scf_comtbl.scf_unclamed.DSR = statep->reg_dsr;
-	}
-
-/*
- * END_intr
- */
-	END_intr:
-
-	/* Check SCF path change */
-	if (path_change) {
-		scf_path_change(statep);
-	}
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_INTR|TC_OUT, __LINE__, &ret, sizeof (uint_t));
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_intr_cmdcmp()
- *
- * Description: SCF command complete processing.
- *
- */
-int
-scf_intr_cmdcmp(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_intr_cmdcmp() "
-	struct scf_cmd		*scfcmdp;
-	uint8_t			sum;
-	uint32_t		sum4;
-	uint8_t			*wk_in_p8;
-	uint32_t		*wk_in_p32;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	uint_t			wkleng;
-	uint_t			wkleng2;
-	uint_t			rcount;
-	uint_t			rxbuff_cnt;
-	uint_t			rxbuff_flag = 0;
-	char			sumerr_msg[16];
-	int			info_size;
-	int			ii;
-	int			ret = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	if (scf_comtbl.scf_exec_cmd_id) {
-		/* SCF command start for ioctl */
-		scfcmdp = scf_comtbl.scf_cmdp;
-	} else {
-		/* SCF command start for interrupt */
-		scfcmdp = &scf_comtbl.scf_cmd_intr;
-	}
-	scfcmdp->stat0 = (statep->reg_status & STATUS_CMD_RTN_CODE) >> 4;
-	scfcmdp->status = statep->reg_status;
-
-	scf_timer_stop(SCF_TIMERCD_CMDEND);
-	scf_comtbl.scf_cmd_exec_flag = 0;
-	statep->cmd_to_rcnt = 0;
-
-	statep->reg_rdata[0] = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RDATA0);
-	statep->reg_rdata[1] = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RDATA1);
-	SC_DBG_DRV_TRACE(TC_R_RDATA0, __LINE__, & statep->reg_rdata[0],
-		sizeof (statep->reg_rdata[0]) + sizeof (statep->reg_rdata[1]));
-	statep->reg_rdata[2] = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RDATA2);
-	statep->reg_rdata[3] = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->RDATA3);
-	SC_DBG_DRV_TRACE(TC_R_RDATA2, __LINE__, &statep->reg_rdata[2],
-		sizeof (statep->reg_rdata[2]) + sizeof (statep->reg_rdata[3]));
-
-	SCF_DBG_TEST_INTR_CMDEND(statep);
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, "command complete status = 0x%04x",
-		scfcmdp->stat0);
-	SCFDBGMSG4(SCF_DBGFLAG_REG, "RxDR = 0x%08x 0x%08x 0x%08x 0x%08x",
-		statep->reg_rdata[0], statep->reg_rdata[1],
-		statep->reg_rdata[2], statep->reg_rdata[3]);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_RECVDATA);
-
-	SCF_DBG_XSCF_SET_STATUS
-
-	/* Check command return value */
-	switch (scfcmdp->stat0) {
-	case NORMAL_END:
-		/* Norman end */
-		statep->tesum_rcnt = 0;
-
-		SCF_DBG_XSCF_SET_LENGTH
-
-		/* Make Rx register sum */
-		sum = SCF_MAGICNUMBER_S;
-		wk_in_p8 = (uint8_t *)&statep->reg_rdata[0];
-		for (ii = 0; ii < SCF_S_CNT_15; ii++, wk_in_p8++) {
-			sum += *wk_in_p8;
-		}
-
-		SCF_DBG_MAKE_RXSUM(sum, *wk_in_p8);
-
-		/* Check Rx register sum */
-		if (sum != *wk_in_p8) {
-			SCFDBGMSG2(SCF_DBGFLAG_SYS,
-				"Rx sum failure 0x%02x 0x%02x", sum, *wk_in_p8);
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr    ", 8);
-			scfcmdp->stat0 = SCF_STAT0_RDATA_SUM;
-			strcpy(&sumerr_msg[0], "SCF device");
-			statep->resum_rcnt++;
-			goto CHECK_rxsum_start;
-		}
-
-		if (scfcmdp->flag == SCF_USE_SLBUF) {
-			/*
-			 * SCF_USE_SLBUF
-			 */
-			scfcmdp->rbufleng = statep->reg_rdata[0];
-			if (scfcmdp->rbufleng > SCF_L_CNT_MAX) {
-				/* Invalid receive data length */
-				SCFDBGMSG1(SCF_DBGFLAG_SYS,
-					"Invalid receive data length = 0x%08x",
-					scfcmdp->rbufleng);
-				SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-					"intr    ", 8);
-				scfcmdp->stat0 = SCF_STAT0_RDATA_SUM;
-				strcpy(&sumerr_msg[0], "SRAM");
-				statep->resum_rcnt++;
-				goto CHECK_rxsum_start;
-			}
-
-			if (scfcmdp->rbufleng == 0) {
-				statep->resum_rcnt = 0;
-				goto CHECK_rxsum_start;
-			}
-			/* Check receive data division mode */
-			if ((scf_comtbl.scf_exec_cmd_id) &&
-				(scfcmdp->rbufleng > scf_rxbuff_max_size)) {
-				scf_comtbl.scf_rem_rxbuff_size =
-					scfcmdp->rbufleng - scf_rxbuff_max_size;
-				rxbuff_cnt = scf_rxbuff_max_size;
-				rxbuff_flag = 1;
-			} else {
-				rxbuff_cnt = scfcmdp->rbufleng;
-				rxbuff_flag = 0;
-			}
-
-			/* Receive data copy */
-			wk_in_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-			wk_out_p = (uint8_t *)&scfcmdp->rbuf[0];
-			for (ii = 0; ii < rxbuff_cnt;
-				ii++, wk_in_p++, wk_out_p++) {
-				*wk_out_p = SCF_DDI_GET8(statep,
-					statep->scf_sys_sram_handle, wk_in_p);
-			}
-
-			/* SRAM trace */
-			if (rxbuff_cnt > scf_sram_trace_data_size) {
-				rcount = scf_sram_trace_data_size;
-			} else {
-				rcount = rxbuff_cnt;
-			}
-			wk_in_p = (uint8_t *)scfcmdp->rbuf;
-			info_size = sizeof (statep->memo_scf_drvtrc.INFO);
-			while (rcount != 0) {
-				bzero((void *)&statep->memo_scf_drvtrc.INFO[0],
-					info_size);
-				wk_out_p = &statep->memo_scf_drvtrc.INFO[0];
-				if (rcount > info_size) {
-					wkleng = info_size;
-				} else {
-					wkleng = rcount;
-				}
-				rcount -= wkleng;
-				bcopy(wk_in_p, wk_out_p, wkleng);
-				SCF_SRAM_TRACE(statep, DTC_RECVDATA_SRAM);
-				wk_in_p += wkleng;
-			}
-
-			/* Check receive data division mode */
-			if (rxbuff_flag != 0) {
-				goto CHECK_rxsum_start;
-			}
-
-			/* Make SRAM data sum */
-			sum4 = SCF_MAGICNUMBER_L;
-			wkleng2 = scfcmdp->rbufleng;
-			wkleng = scfcmdp->rbufleng / 4;
-			wk_in_p32 = (void *)scfcmdp->rbuf;
-			for (ii = 0; ii < wkleng; ii++, wk_in_p32++) {
-				sum4 += *wk_in_p32;
-			}
-			if ((wkleng2 % 4) == 3) {
-				sum4 += ((scfcmdp->rbuf[wkleng2 - 3] << 24) |
-					(scfcmdp->rbuf[wkleng2 - 2] << 16) |
-					(scfcmdp->rbuf[wkleng2 - 1] <<  8));
-
-			} else if ((wkleng2 % 4) == 2) {
-				sum4 += ((scfcmdp->rbuf[wkleng2 - 2] << 24) |
-					(scfcmdp->rbuf[wkleng2 - 1] << 16));
-			} else if ((wkleng2 % 4) == 1) {
-				sum4 += (scfcmdp->rbuf[wkleng2 - 1] << 24);
-			}
-
-			SCF_DBG_MAKE_RXSUM_L(sum4, statep->reg_rdata[2]);
-
-			/* Check SRAM data sum */
-			if (sum4 == statep->reg_rdata[2]) {
-				statep->resum_rcnt = 0;
-			} else {
-				SCFDBGMSG2(SCF_DBGFLAG_SYS,
-					"Rx sum failure 0x%08x 0x%08x",
-					sum4, statep->reg_rdata[2]);
-				SC_DBG_DRV_TRACE(TC_INTR|TC_ERR,
-					__LINE__, "intr    ", 8);
-				scfcmdp->stat0 = SCF_STAT0_RDATA_SUM;
-				strcpy(&sumerr_msg[0], "SRAM");
-				statep->resum_rcnt++;
-			}
-		} else {
-			if ((scfcmdp->flag == SCF_USE_SSBUF) ||
-				(scfcmdp->flag == SCF_USE_LSBUF)) {
-				/*
-				 * SCF_USE_SSBUF/SCF_USE_LSBUF
-				 */
-				if (scfcmdp->rcount < SCF_S_CNT_16) {
-					wkleng = scfcmdp->rcount;
-				} else {
-					wkleng = SCF_S_CNT_16;
-				}
-				scfcmdp->rbufleng = wkleng;
-				if (wkleng != 0) {
-					/* Receive data copy */
-					bcopy((void *)&statep->reg_rdata[0],
-						(void *)scfcmdp->rbuf, wkleng);
-				}
-			} else {
-				/*
-				 * SCF_USE_S_BUF/SCF_USE_L_BUF
-				 */
-				scfcmdp->rbufleng = 0;
-			}
-			statep->resum_rcnt = 0;
-		}
-
-/*
- * CHECK_rxsum_start
- */
-	CHECK_rxsum_start:
-
-		/* Check Rx sum re-try out */
-		if ((scfcmdp->stat0 == SCF_STAT0_RDATA_SUM) &&
-			(statep->resum_rcnt > scf_resum_rcnt)) {
-			/* SRAM trace */
-			SCF_SRAM_TRACE(statep, DTC_RSUMERR);
-
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr    ", 8);
-			cmn_err(CE_WARN,
-				"%s,Failed the receive data SUM of %s. "
-				"SCF command = 0x%02x%02x\n",
-					&statep->pathname[0], &sumerr_msg[0],
-					scfcmdp->subcmd, scfcmdp->cmd);
-			statep->scf_herr |= HERR_RESUM;
-			ret = 1;
-			goto END_intr_cmdcmp;
-		}
-		break;
-
-	case INTERFACE:
-		/* Interface error */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_INTERFACE);
-
-		statep->tesum_rcnt++;
-		/* Check interface error re-try out */
-		if (statep->tesum_rcnt > scf_tesum_rcnt) {
-			cmn_err(CE_WARN,
-				"%s,Detected the interface error by XSCF. "
-				"SCF command = 0x%02x%02x\n",
-					&statep->pathname[0], scfcmdp->subcmd,
-					scfcmdp->cmd);
-			statep->scf_herr |= HERR_TESUM;
-			ret = 1;
-			goto END_intr_cmdcmp;
-		}
-		break;
-
-	case BUF_FUL:
-		/* Buff full */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_MSG, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_RCI_BUF_FUL);
-
-		break;
-
-	case RCI_BUSY:
-		/* RCI busy */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_MSG, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_RCI_BUSY);
-
-		break;
-
-	case E_NOT_SUPPORT:
-		/* Not support command/sub command */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_E_NOT_SUPPORT);
-
-		cmn_err(CE_WARN,
-			"%s,Detected the not support command by XSCF. "
-			"SCF command = 0x%02x%02x\n",
-				&statep->pathname[0], scfcmdp->subcmd,
-				scfcmdp->cmd);
-		break;
-
-	case E_PARAM:
-		/* Parameter error */
-
-		/* Check command is SB configuration change */
-		if ((scfcmdp->cmd == CMD_DR) && (scfcmdp->subcmd ==
-			SUB_SB_CONF_CHG)) {
-			scfcmdp->rbufleng = SCF_S_CNT_16;
-			/* Receive data copy */
-			if (scfcmdp->rcount < SCF_S_CNT_16) {
-				wkleng = scfcmdp->rcount;
-			} else {
-				wkleng = SCF_S_CNT_16;
-			}
-			if (wkleng != 0) {
-				bcopy((void *)&statep->reg_rdata[0],
-					(void *)scfcmdp->rbuf, wkleng);
-			}
-		} else {
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr    ", 8);
-
-			/* SRAM trace */
-			SCF_SRAM_TRACE(statep, DTC_E_PARAM);
-
-			cmn_err(CE_WARN,
-				"%s,Detected the invalid parameter by XSCF. "
-				"SCF command = 0x%02x%02x\n",
-					&statep->pathname[0], scfcmdp->subcmd,
-					scfcmdp->cmd);
-		}
-		break;
-
-	case E_RCI_ACCESS:
-		/* RCI access error */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_E_RCI_ACCESS);
-
-		cmn_err(CE_WARN,
-			"%s,RCI access error occurred in XSCF. "
-			"SCF command = 0x%02x%02x\n",
-				&statep->pathname[0], scfcmdp->subcmd,
-				scfcmdp->cmd);
-		break;
-
-	case E_SCFC_NOPATH:
-		/* No SCFC path */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_E_SCFC_PATH);
-
-		if (scf_comtbl.scf_exec_p) {
-			scf_chg_scf(scf_comtbl.scf_exec_p, PATH_STAT_ACTIVE);
-			scf_comtbl.scf_path_p = scf_comtbl.scf_exec_p;
-			scf_comtbl.scf_exec_p = 0;
-		}
-		scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-		break;
-
-	case RCI_NS:
-		/* Not support RCI */
-		SC_DBG_DRV_TRACE(TC_INTR|TC_MSG, __LINE__, "intr    ", 8);
-		cmn_err(CE_WARN,
-			"%s,Cannot use RCI interface. "
-			"SCF command = 0x%02x%02x\n",
-				&statep->pathname[0], scfcmdp->subcmd,
-				scfcmdp->cmd);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__, "intr    ", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_ERRRTN | scfcmdp->stat0);
-
-		cmn_err(CE_WARN,
-			"%s,Invalid status value was notified from XSCF. "
-			"SCF command = 0x%02x%02x, Status value = 0x%04x\n",
-				&statep->pathname[0], scfcmdp->subcmd,
-				scfcmdp->cmd, scfcmdp->status);
-		scfcmdp->stat0 = E_NOT_SUPPORT;
-		break;
-	}
-
-	/* Check SCF command start for interrupt */
-	if (scf_comtbl.scf_exec_cmd_id == 0) {
-		/* SCF command start for interrupt processing */
-		scf_intr_cmdcmp_driver(statep, scfcmdp);
-	} else {
-		/* Check ioctl command end wait */
-		if (scf_comtbl.cmd_end_wait != 0) {
-			/* Check command return value */
-			switch (scfcmdp->stat0) {
-			case NORMAL_END:
-			case BUF_FUL:
-			case RCI_BUSY:
-			case E_NOT_SUPPORT:
-			case E_PARAM:
-			case E_RCI_ACCESS:
-			case RCI_NS:
-				if ((scfcmdp->stat0 == NORMAL_END) &&
-					(scfcmdp->cmd == CMD_ALIVE_CHECK)) {
-					if (scfcmdp->subcmd ==
-						SUB_ALIVE_START) {
-						scf_alivecheck_start(statep);
-					} else {
-						scf_alivecheck_stop(statep);
-					}
-				}
-				if ((scfcmdp->stat0 == NORMAL_END) &&
-					(rxbuff_flag)) {
-					break;
-				}
-
-				scf_comtbl.cmd_end_wait = 0;
-				/* Signal to command end wait */
-				cv_signal(&scf_comtbl.cmdend_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.cmdend_cv,
-					sizeof (kcondvar_t));
-				break;
-
-			default:
-				/* INTERFACE */
-				/* E_SCFC_NOPATH */
-				/* Rx DATA SUM ERROR */
-
-				/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |= RESEND_IOCTL;
-				break;
-			}
-		}
-	}
-
-	/* Check receive data division mode */
-	if (rxbuff_flag == 1) {
-		/* Next receive data timer start */
-		scf_timer_start(SCF_TIMERCD_NEXTRECV);
-		scf_comtbl.scf_cmd_exec_flag = 1;
-	}
-
-/*
- * END_intr_cmdcmp
- */
-	END_intr_cmdcmp:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_intr_cmdcmp_driver()
- *
- * Description: SCF command complete. start for interrupt processing.
- *
- */
-void
-scf_intr_cmdcmp_driver(scf_state_t *statep, struct scf_cmd *scfcmdp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_intr_cmdcmp_driver() "
-	int			shutdown_flag = 0;
-	int			poff_flag;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check command code */
-	switch (scfcmdp->cmd) {
-	case CMD_SCFI_PATH:		/* SCF Path change command */
-		/* Check command return value */
-		if (scfcmdp->stat0 != NORMAL_END) {
-			scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-
-			/* Set command retry send flag */
-			scf_comtbl.scf_cmd_resend_req |= RESEND_PCHG;
-			break;
-		}
-
-		/* Check SCF path change status */
-		if (scf_comtbl.scf_path_p != NULL) {
-			scf_chg_scf(scf_comtbl.scf_path_p, PATH_STAT_ACTIVE);
-			scf_comtbl.scf_exec_p = scf_comtbl.scf_path_p;
-			scf_comtbl.scf_path_p = NULL;
-			/* FMEMA interface */
-			scf_avail_cmd_reg_vaddr =
-				(caddr_t)&statep->scf_regs->COMMAND;
-
-			scf_comtbl.path_change_rcnt = 0;
-		}
-
-		/* Check Alive check exec */
-		if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALST_WAIT;
-		} else {
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_NONE;
-			if (scf_comtbl.suspend_wait == 1) {
-				scf_comtbl.suspend_wait = 0;
-				scf_comtbl.scf_suspend_sendstop = 1;
-				cv_signal(&scf_comtbl.suspend_wait_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.suspend_wait_cv,
-					sizeof (kcondvar_t));
-			}
-		}
-		scf_comtbl.scf_pchg_event_sub = EVENT_SUB_NONE;
-
-		scf_comtbl.scf_event_flag |= STATUS_EVENT;
-
-		SCF_DBG_NO_INT_REASON;
-
-		/* DSCP interface start */
-		scf_dscp_start(FACTOR_PATH_CHG);
-		break;
-
-	case CMD_PART_POW_CTR:	/* power control command */
-		/* Check command return value */
-		if (scfcmdp->stat0 != NORMAL_END) {
-			switch (scfcmdp->stat0) {
-			case BUF_FUL:
-			case RCI_BUSY:
-			case E_NOT_SUPPORT:
-			case E_PARAM:
-			case E_RCI_ACCESS:
-			case RCI_NS:
-				scf_comtbl.scf_poff_event_sub = EVENT_SUB_NONE;
-				break;
-
-			default:
-				/* INTERFACE */
-				/* E_SCFC_NOPATH */
-				/* Rx DATA SUM ERROR */
-				scf_comtbl.scf_poff_event_sub =
-					EVENT_SUB_POFF_WAIT;
-
-				/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |= RESEND_POFF;
-				break;
-			}
-			break;
-		}
-
-		poff_flag = 0;
-		scf_comtbl.scf_poff_id =
-			(uchar_t)((statep->reg_rdata[0] &
-			0xFF000000) >> 24);
-
-		SCF_DBG_TEST_INTR_POFF;
-
-		if (scf_comtbl.scf_poff_id == POFF_ID_PANEL) {
-			/* PANEL */
-			if ((scf_comtbl.scf_mode_sw & STATUS_SECURE_MODE) !=
-				STATUS_MODE_LOCK) {
-				/* Not LOCK */
-				SC_DBG_DRV_TRACE(TC_INTR, __LINE__,
-					"intr    ", 8);
-				if (scf_comtbl.scf_shutdownreason == 0) {
-					poff_flag = 1;
-					scf_comtbl.scf_shutdownreason =
-						REASON_XSCFPOFF;
-				}
-				cmn_err(CE_NOTE,
-					"%s: System shutdown by panel "
-					"request.\n", scf_driver_name);
-			}
-		} else if ((scf_comtbl.scf_poff_id & POFF_ID_MASK) ==
-			POFF_ID_RCI) {
-			/* RCI */
-			SC_DBG_DRV_TRACE(TC_INTR, __LINE__, "intr    ", 8);
-			if (scf_comtbl.scf_shutdownreason == 0) {
-				poff_flag = 1;
-				scf_comtbl.scf_shutdownreason = REASON_RCIPOFF;
-			}
-			cmn_err(CE_NOTE,
-				"%s: System shutdown from RCI.\n",
-				scf_driver_name);
-		} else if (scf_comtbl.scf_poff_id == POFF_ID_XSCF) {
-			/* XSCF */
-			SC_DBG_DRV_TRACE(TC_INTR, __LINE__, "intr    ", 8);
-			if (scf_comtbl.scf_shutdownreason == 0) {
-				poff_flag = 1;
-				scf_comtbl.scf_shutdownreason = REASON_XSCFPOFF;
-			}
-			cmn_err(CE_NOTE,
-				"%s: System shutdown by XSCF "
-				"request.\n", scf_driver_name);
-		}
-
-		if (poff_flag) {
-			cmn_err(CE_CONT,
-				"%s: Shutdown was executed.\n",
-				scf_driver_name);
-			/* System shutdown start */
-			do_shutdown();
-		}
-
-		scf_comtbl.scf_poff_event_sub = EVENT_SUB_NONE;
-		break;
-
-	case CMD_INT_REASON:		/* Event information command */
-		/* Check command return value */
-		if ((scfcmdp->stat0 != NORMAL_END) &&
-			(scfcmdp->stat0 != SCF_STAT0_RDATA_SUM)) {
-			switch (scfcmdp->stat0) {
-			case BUF_FUL:
-			case RCI_BUSY:
-			case E_NOT_SUPPORT:
-			case E_PARAM:
-			case E_RCI_ACCESS:
-			case RCI_NS:
-				scf_comtbl.scf_shut_event_sub = EVENT_SUB_NONE;
-				break;
-
-			default:
-				/* INTERFACE */
-				/* E_SCFC_NORATH */
-				if (scf_comtbl.scf_shut_event_sub ==
-					EVENT_SUB_SHUT_EXEC) {
-					scf_comtbl.scf_shut_event_sub =
-						EVENT_SUB_SHUT_WAIT;
-				} else {
-					scf_comtbl.scf_shut_event_sub =
-						EVENT_SUB_WAIT;
-				}
-
-				/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |= RESEND_SHUT;
-				break;
-			}
-			break;
-		}
-
-		/* Check factor detail disp */
-		if ((scfcmdp->stat0 == SCF_STAT0_RDATA_SUM) &&
-			(scfcmdp->subcmd == SUB_INT_REASON_DISP)) {
-			/* Send detail re-disp */
-			scf_comtbl.int_reason_retry = 1;
-			if (scf_comtbl.scf_shut_event_sub ==
-				EVENT_SUB_SHUT_EXEC) {
-				scf_comtbl.scf_shut_event_sub =
-					EVENT_SUB_SHUT_WAIT;
-			} else {
-				scf_comtbl.scf_shut_event_sub = EVENT_SUB_WAIT;
-			}
-			break;
-		}
-
-		if (scfcmdp->stat0 == NORMAL_END) {
-
-			SCF_DBG_TEST_DSENS(scfcmdp, (void *)scfcmdp->rbuf,
-				(int)scfcmdp->rbufleng);
-
-			scf_comtbl.int_reason_retry = 0;
-			/*
-			 * Event interrupt factor check
-			 * processing
-			 */
-			shutdown_flag = scf_intr_dsens(scfcmdp,
-				(void *)scfcmdp->rbuf, (int)scfcmdp->rbufleng);
-		} else {
-			if (scf_comtbl.scf_shut_event_sub ==
-				EVENT_SUB_SHUT_EXEC) {
-				shutdown_flag = DEV_SENSE_SHUTDOWN;
-			}
-		}
-		if (shutdown_flag == DEV_SENSE_SHUTDOWN) {
-			cmn_err(CE_CONT,
-				"%s: Shutdown was executed.\n",
-				scf_driver_name);
-			/* System shutdown start */
-			do_shutdown();
-		}
-		scf_comtbl.scf_shut_event_sub = EVENT_SUB_NONE;
-		break;
-
-	case CMD_ALIVE_CHECK:		/* Alive check command */
-		/* Check command return value */
-		switch (scfcmdp->stat0) {
-		case NORMAL_END:
-		case BUF_FUL:
-		case RCI_BUSY:
-		case E_NOT_SUPPORT:
-		case E_PARAM:
-		case E_SCFC_NOPATH:
-		case E_RCI_ACCESS:
-		case RCI_NS:
-			if (scfcmdp->stat0 == NORMAL_END) {
-				if (scfcmdp->subcmd == SUB_ALIVE_START) {
-					scf_alivecheck_start(statep);
-				} else {
-					scf_alivecheck_stop(statep);
-				}
-			}
-
-			if ((scf_comtbl.scf_alive_event_sub ==
-				EVENT_SUB_ALSP_EXEC) &&
-				(scf_comtbl.suspend_wait)) {
-				/* Signal to suspend wait */
-				scf_comtbl.suspend_wait = 0;
-				scf_comtbl.scf_suspend_sendstop = 1;
-				cv_signal(&scf_comtbl.suspend_wait_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.suspend_wait_cv,
-					sizeof (kcondvar_t));
-			}
-			if ((scf_comtbl.scf_alive_event_sub ==
-				EVENT_SUB_ALST_EXEC) ||
-				(scf_comtbl.scf_alive_event_sub ==
-				EVENT_SUB_ALSP_EXEC)) {
-				scf_comtbl.scf_alive_event_sub = EVENT_SUB_NONE;
-			}
-			break;
-
-		default:
-			/* INTERFACE */
-			/* Rx DATA SUM ERROR */
-			if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-				scf_comtbl.scf_alive_event_sub =
-					EVENT_SUB_ALST_WAIT;
-			} else {
-				scf_comtbl.scf_alive_event_sub =
-					EVENT_SUB_ALSP_WAIT;
-			}
-
-			/* Set command retry send flag */
-			if ((scfcmdp->subcmd == SUB_ALIVE_START) &&
-				(scf_comtbl.scf_alive_event_sub ==
-				EVENT_SUB_ALST_WAIT)) {
-				scf_comtbl.scf_cmd_resend_req |= RESEND_ALST;
-			} else if ((scfcmdp->subcmd == SUB_ALIVE_STOP) &&
-				(scf_comtbl.scf_alive_event_sub ==
-				EVENT_SUB_ALSP_WAIT)) {
-				scf_comtbl.scf_cmd_resend_req |= RESEND_ALSP;
-			}
-			break;
-		}
-		break;
-
-	case CMD_REPORT:		/* Report command */
-		/* Check command return value */
-		switch (scfcmdp->stat0) {
-		case NORMAL_END:
-		case BUF_FUL:
-		case RCI_BUSY:
-		case E_NOT_SUPPORT:
-		case E_PARAM:
-		case E_SCFC_NOPATH:
-		case E_RCI_ACCESS:
-		case RCI_NS:
-			if ((scfcmdp->stat0 == NORMAL_END) &&
-				(scf_comtbl.alive_running == SCF_ALIVE_START)) {
-				/* Check Alive check exec */
-				scf_comtbl.scf_alive_event_sub =
-					EVENT_SUB_ALST_WAIT;
-			}
-
-			if ((scf_comtbl.scf_report_event_sub ==
-				EVENT_SUB_REPORT_RUN_EXEC) ||
-				(scf_comtbl.scf_report_event_sub ==
-				EVENT_SUB_REPORT_SHOT_EXEC)) {
-				scf_comtbl.scf_report_event_sub =
-					EVENT_SUB_NONE;
-			}
-
-			if (scfcmdp->stat0 == BUF_FUL) {
-				if (scf_comtbl.report_buf_ful_rcnt !=
-					scf_buf_ful_rcnt) {
-					scf_comtbl.report_buf_ful_rcnt++;
-					scf_timer_start(SCF_TIMERCD_BUF_FUL);
-				} else {
-					scf_comtbl.report_buf_ful_rcnt = 0;
-				}
-			} else {
-				scf_comtbl.report_buf_ful_rcnt = 0;
-			}
-
-			if (scfcmdp->stat0 == RCI_BUSY) {
-				if (scf_comtbl.report_rci_busy_rcnt !=
-					scf_rci_busy_rcnt) {
-					scf_comtbl.report_rci_busy_rcnt++;
-					scf_timer_start(SCF_TIMERCD_RCI_BUSY);
-				} else {
-					scf_comtbl.report_rci_busy_rcnt = 0;
-				}
-			} else {
-				scf_comtbl.report_rci_busy_rcnt = 0;
-			}
-			break;
-
-		default:
-			/* INTERFACE */
-			/* Rx DATA SUM ERROR */
-			if (scf_comtbl.scf_report_event_sub ==
-				EVENT_SUB_REPORT_RUN_EXEC) {
-				scf_comtbl.scf_report_event_sub =
-					EVENT_SUB_REPORT_RUN_WAIT;
-
-			/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |=
-					RESEND_REPORT_RUN;
-			} else {
-				scf_comtbl.scf_report_event_sub =
-					EVENT_SUB_REPORT_SHUT_WAIT;
-
-			/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |=
-					RESEND_REPORT_SHUT;
-			}
-			break;
-		}
-		break;
-
-	case CMD_DOMAIN_INFO:		/* Domain info command */
-		/* Check command return value */
-		if (scfcmdp->stat0 != NORMAL_END) {
-			switch (scfcmdp->stat0) {
-			case BUF_FUL:
-			case RCI_BUSY:
-			case E_NOT_SUPPORT:
-			case E_PARAM:
-			case E_RCI_ACCESS:
-			case RCI_NS:
-				scf_comtbl.scf_domain_event_sub =
-					EVENT_SUB_NONE;
-				break;
-
-			default:
-				/* INTERFACE */
-				/* E_SCFC_NOPATH */
-				/* Rx DATA SUM ERROR */
-				scf_comtbl.scf_domain_event_sub =
-					EVENT_SUB_DOMAIN_WAIT;
-
-				/* Set command retry send flag */
-				scf_comtbl.scf_cmd_resend_req |= RESEND_DOMAIN;
-				break;
-			}
-			break;
-		}
-
-		/* Set XSCF version */
-		scf_xscf_comif_version = (ushort_t)(statep->reg_rdata[3] >> 8);
-
-		scf_comtbl.scf_domain_event_sub = EVENT_SUB_NONE;
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_intr_dsens()
- *
- * Description: Event factor check processing.
- *
- */
-/* ARGSUSED */
-int
-scf_intr_dsens(struct scf_cmd *scfcmdp, scf_int_reason_t *int_rp, int len)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_intr_dsens() "
-	scf_int_reason_t	*rbuf;
-	uchar_t			category_code;
-	uchar_t			sub_status;
-	uchar_t			category_type;
-	time_t			timestamp;
-	int			ret = 0;
-	int			ent = 0;
-	int			getevent_flag;
-	int			max_ent;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	rbuf = int_rp;
-	max_ent = len / SCF_INT_REASON_SIZE;
-	if (max_ent > 4) {
-		max_ent = 4;
-	}
-
-	/* entry count loop */
-	while ((rbuf->b[4]) && (ent < max_ent)) {
-		/* Save last event */
-		bcopy((void *)&rbuf->b[0], (void *)&scf_comtbl.last_event[0],
-			SCF_INT_REASON_SIZE);
-
-		/* Check SCFIOCEVENTLIST */
-		getevent_flag = scf_push_getevent(&rbuf->b[0]);
-		if (getevent_flag == 0) {
-			/* wake up waiting thread */
-			cv_signal(&scf_comtbl.getevent_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.getevent_cv, sizeof (kcondvar_t));
-		}
-
-		/* get category code of the sense */
-		category_code = rbuf->b[4] & (~DEV_SENSE_SHUTDOWN);
-		sub_status = rbuf->b[4];
-		category_type = rbuf->b[6];
-		SC_DBG_DRV_TRACE(TC_DSENS, __LINE__, &rbuf->b[0], 8);
-		SC_DBG_DRV_TRACE(TC_DSENS, __LINE__, &rbuf->b[8], 8);
-		SCFDBGMSG4(SCF_DBGFLAG_REG,
-			"SENSE = 0x%08x  0x%08x 0x%08x 0x%08x",
-			rbuf->four_bytes_access[0], rbuf->four_bytes_access[1],
-			rbuf->four_bytes_access[2], rbuf->four_bytes_access[3]);
-
-		switch (category_code) {
-		case DEV_SENSE_FANUNIT:
-			/* fan unit failure */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type == DEV_SENSE_ATTR_OWN) {
-				cmn_err(CE_WARN,
-					"%s: fan unit failure"
-					", sub status = 0x%02x\n",
-						scf_driver_name, sub_status);
-				if ((sub_status & DEV_SENSE_SHUTDOWN) &&
-					(scf_comtbl.scf_shutdownreason == 0)) {
-					scf_comtbl.scf_shutdownreason =
-						REASON_SHUTDOWN_FAN;
-					ret = DEV_SENSE_SHUTDOWN;
-				}
-			} else {
-				cmn_err(CE_WARN,
-					"%s: fan unit failure on "
-					"RCI(addr = 0x%08x)"
-					", FAN#%d, sub status = 0x%02x,\n"
-					"sense info ="
-					" 0x%02x 0x%02x 0x%02x 0x%02x"
-					" 0x%02x 0x%02x 0x%02x 0x%02x\n",
-						scf_driver_name,
-						rbuf->four_bytes_access[0],
-						rbuf->b[9], sub_status,
-						rbuf->b[0], rbuf->b[1],
-						rbuf->b[2], rbuf->b[3],
-						rbuf->b[8], rbuf->b[9],
-						rbuf->b[10], rbuf->b[11]);
-			}
-			break;
-
-		case DEV_SENSE_PWRUNIT:
-			/* power unit failure */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type == DEV_SENSE_ATTR_OWN) {
-				cmn_err(CE_WARN,
-					"%s: power supply unit failure"
-					", sub status = 0x%02x\n",
-						scf_driver_name, sub_status);
-				if ((sub_status & DEV_SENSE_SHUTDOWN) &&
-					(scf_comtbl.scf_shutdownreason == 0)) {
-					scf_comtbl.scf_shutdownreason =
-						REASON_SHUTDOWN_PSU;
-					ret = DEV_SENSE_SHUTDOWN;
-				}
-			} else {
-				cmn_err(CE_WARN,
-					"%s: power supply unit failure on "
-					"RCI(addr = 0x%08x)"
-					", FEP#%d, sub status = 0x%02x,\n"
-					"sense info ="
-					" 0x%02x 0x%02x 0x%02x 0x%02x"
-					" 0x%02x 0x%02x 0x%02x 0x%02x\n",
-						scf_driver_name,
-						rbuf->four_bytes_access[0],
-						rbuf->b[11],
-						sub_status,
-						rbuf->b[0], rbuf->b[1],
-						rbuf->b[2], rbuf->b[3],
-						rbuf->b[8], rbuf->b[9],
-						rbuf->b[10], rbuf->b[11]);
-			}
-			break;
-
-		case DEV_SENSE_UPS:
-			/* UPS failure */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type != DEV_SENSE_ATTR_OWN) {
-				break;
-			}
-
-			switch (rbuf->b[8] & DEV_SENSE_UPS_MASK) {
-			case DEV_SENSE_UPS_LOWBAT:
-				SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-					"intr_dse", 8);
-				cmn_err(CE_WARN,
-					"%s: UPS low battery"
-					" was detected, sub status = 0x%02x\n",
-						scf_driver_name, sub_status);
-				break;
-
-			default:
-				SC_DBG_DRV_TRACE(TC_INTR|TC_ERR,
-					__LINE__, "intr_dse", 8);
-				cmn_err(CE_WARN,
-					"%s: UPS failure"
-					" was detected, sub status = 0x%02x\n",
-						scf_driver_name, sub_status);
-				break;
-			}
-			if ((sub_status & DEV_SENSE_SHUTDOWN) &&
-				(scf_comtbl.scf_shutdownreason == 0)) {
-				scf_comtbl.scf_shutdownreason =
-					REASON_SHUTDOWN_UPS;
-				ret = DEV_SENSE_SHUTDOWN;
-			}
-			break;
-
-		case DEV_SENSE_THERMAL:
-			/* thermal failure */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type == DEV_SENSE_ATTR_OWN) {
-				cmn_err(CE_WARN,
-					"%s: thermal alarm"
-					", sub status = 0x%02x\n",
-						scf_driver_name, sub_status);
-				if ((sub_status & DEV_SENSE_SHUTDOWN) &&
-					(scf_comtbl.scf_shutdownreason == 0)) {
-					scf_comtbl.scf_shutdownreason =
-						REASON_SHUTDOWN_THERMAL;
-					ret = DEV_SENSE_SHUTDOWN;
-				}
-			} else {
-				cmn_err(CE_WARN,
-					"%s: thermal alarm on "
-					"RCI(addr = 0x%08x)"
-					", SENSOR#%d, sub status = 0x%02x,\n"
-					"sense info ="
-					" 0x%02x 0x%02x 0x%02x 0x%02x"
-					" 0x%02x 0x%02x 0x%02x 0x%02x\n",
-						scf_driver_name,
-						rbuf->four_bytes_access[0],
-						rbuf->b[9], sub_status,
-						rbuf->b[0], rbuf->b[1],
-						rbuf->b[2], rbuf->b[3],
-						rbuf->b[8], rbuf->b[9],
-						rbuf->b[10], rbuf->b[11]);
-			}
-			break;
-
-		case DEV_SENSE_PWRSR:
-			/* power stop */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type != DEV_SENSE_ATTR_OWN) {
-				break;
-			}
-
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-			cmn_err(CE_WARN,
-				"%s: Input power down was detected. "
-				"UPS is activated"
-				", sub status = 0x%02x\n",
-					scf_driver_name, sub_status);
-			if (sub_status & DEV_SENSE_SHUTDOWN) {
-				if (scf_comtbl.shutdown_start_reported == 0) {
-					scf_comtbl.poff_factor =
-						SCF_POFF_FACTOR_PFAIL;
-				}
-				if (scf_comtbl.scf_shutdownreason == 0) {
-					scf_comtbl.scf_shutdownreason =
-						REASON_SHUTDOWN_UPS;
-					ret = DEV_SENSE_SHUTDOWN;
-				}
-			}
-			break;
-
-		case DEV_SENSE_NODE:
-			/* node error */
-			SC_DBG_DRV_TRACE(TC_INTR|TC_ERR, __LINE__,
-				"intr_dse", 8);
-
-			if (category_type == DEV_SENSE_ATTR_OWN) {
-				break;
-			}
-
-			cmn_err(CE_WARN,
-				"%s: node error on RCI(addr = 0x%08x)"
-				", sub status = 0x%02x,\n"
-				"sense info ="
-				" 0x%02x 0x%02x 0x%02x 0x%02x"
-				" 0x%02x 0x%02x 0x%02x 0x%02x\n",
-					scf_driver_name,
-					rbuf->four_bytes_access[0],
-					sub_status,
-					rbuf->b[0], rbuf->b[1],
-					rbuf->b[2], rbuf->b[3],
-					rbuf->b[8], rbuf->b[9],
-					rbuf->b[10], rbuf->b[11]);
-			if (rbuf->b[9] == DEV_SENSE_NODE_STCKTO) {
-				scf_comtbl.rcidown_event_flag = 1;
-				scf_comtbl.scfreport_rcidown.rci_addr =
-					rbuf->four_bytes_access[0];
-				scf_comtbl.scfreport_rcidown.report_sense[0] =
-					REPORT_STAT_RCIDWN;
-				scf_comtbl.scfreport_rcidown.report_sense[1] =
-					rbuf->b[9];
-				scf_comtbl.scfreport_rcidown.report_sense[2] =
-					rbuf->b[10];
-				scf_comtbl.scfreport_rcidown.report_sense[3] =
-					rbuf->b[11];
-				scf_comtbl.scfreport_rcidown.timestamp =
-					ddi_get_time();
-				/* wake up waiting thread */
-				cv_signal(&scf_comtbl.rsense_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.rsense_cv,
-					sizeof (kcondvar_t));
-			}
-			break;
-
-		case DEV_SENSE_SYS_REPORT:
-			/* system status report */
-			timestamp = ddi_get_time();
-			(void) scf_push_reportsense(rbuf->four_bytes_access[0],
-				&rbuf->b[8], timestamp);
-			/* wake up waiting thread */
-			cv_signal(&scf_comtbl.rsense_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.rsense_cv, sizeof (kcondvar_t));
-			break;
-
-		case DEV_SENSE_PANIC_REQ:
-			/* panic request */
-			cmn_err(CE_PANIC,
-				"%s: panic request from RCI(addr = 0x%08x)\n",
-				scf_driver_name,
-				rbuf->four_bytes_access[0]);
-			break;
-
-		case DEV_SENSE_IONODESTAT:
-			/* I/O node status */
-			if (category_type == DEV_SENSE_ATTR_OWN) {
-				break;
-			}
-
-			cmn_err(CE_NOTE,
-				"%s: I/O node status sense from "
-				"RCI(addr = 0x%08x), "
-				"sub status = 0x%02x,\n"
-				"sense info = 0x%02x 0x%02x 0x%02x 0x%02x"
-				" 0x%02x 0x%02x 0x%02x 0x%02x\n",
-					scf_driver_name,
-					rbuf->four_bytes_access[0],
-					sub_status,
-					rbuf->b[0], rbuf->b[1],
-					rbuf->b[2], rbuf->b[3],
-					rbuf->b[8], rbuf->b[9],
-					rbuf->b[10], rbuf->b[11]);
-			break;
-
-		case DEV_SENSE_STATUS_RPT:
-			/* Deveice status print */
-			if (scf_comtbl.rdctrl_end_wait) {
-				/* rdctrl devsense? (for SCFIOCRDCTRL) */
-				/* keep devsense info */
-				scf_comtbl.rdctrl_sense_category_code =
-					category_code;
-				bcopy((void *)&rbuf->b[0],
-					(void *)&scf_comtbl.rdctrl_sense[0],
-					SCF_INT_REASON_SIZE);
-				cv_signal(&scf_comtbl.rdcsense_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.rdcsense_cv,
-					sizeof (kcondvar_t));
-			}
-			break;
-
-		default:
-			/* Devive status print */
-			if (((category_code & 0xf0) == DEV_SENSE_RCI_PATH40) &&
-				(scf_comtbl.rdctrl_end_wait)) {
-				/* rdctrl devsense (for SCFIOCRDCTRL) */
-				/* keep devsense info */
-				scf_comtbl.rdctrl_sense_category_code =
-					category_code;
-				bcopy((void *)&rbuf->b[0],
-					(void *)&scf_comtbl.rdctrl_sense[0],
-					SCF_INT_REASON_SIZE);
-				cv_signal(&scf_comtbl.rdcsense_cv);
-				SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-					&scf_comtbl.rdcsense_cv,
-					sizeof (kcondvar_t));
-			}
-			break;
-
-		}
-
-/*
- * NEXT_intr_dsens
- */
-	NEXT_intr_dsens:
-
-		rbuf = (void *)((char *)rbuf + SCF_INT_REASON_SIZE);
-		ent++;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_status_change()
- *
- * Description: SCF status change processing.
- *
- */
-void
-scf_status_change(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_status_change() "
-	uint8_t			scf_unit;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check SCF status */
-	if ((statep->reg_status_exr & STATUS_SCF_STATUS) == STATUS_SCF_ONLINE) {
-		/*
-		 * SCF online
-		 */
-		if (scf_comtbl.scf_status == SCF_STATUS_OFFLINE) {
-			cmn_err(CE_NOTE, "%s: SCF online.\n", scf_driver_name);
-		}
-		scf_comtbl.scf_status = SCF_STATUS_ONLINE;
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_ONLINE);
-
-		/* Check online wait timer exec */
-		if (scf_timer_check(SCF_TIMERCD_ONLINE) == SCF_TIMER_NOT_EXEC) {
-			/* DCSP interface re-start */
-			scf_dscp_stop(FACTOR_OFFLINE);
-			scf_dscp_start(FACTOR_ONLINE);
-		} else {
-			/* DCSP interface start */
-			scf_dscp_start(FACTOR_ONLINE);
-
-			/* SCF online timer stop */
-			scf_timer_stop(SCF_TIMERCD_ONLINE);
-
-			/* Check SCF command exec */
-			if (scf_comtbl.scf_cmd_exec_flag) {
-				/* Set command wait status */
-				scf_cmdwait_status_set();
-				scf_comtbl.scf_cmd_exec_flag = 0;
-			}
-
-			scf_comtbl.scf_domain_event_sub = EVENT_SUB_DOMAIN_WAIT;
-
-			/* Check Alive check exec */
-			if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-				scf_comtbl.scf_alive_event_sub =
-					EVENT_SUB_ALST_WAIT;
-			}
-		}
-	} else {
-		/*
-		 * SCF offline
-		 */
-		if (scf_comtbl.scf_status != SCF_STATUS_OFFLINE) {
-			if (statep->reg_status_exr & STATUS_SCF_NO) {
-				scf_unit = 1;
-			} else {
-				scf_unit = 0;
-			}
-			cmn_err(CE_WARN,
-				"%s: SCF went to offline mode. unit=%d",
-				scf_driver_name, scf_unit);
-		}
-		scf_comtbl.scf_status = SCF_STATUS_OFFLINE;
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_OFFLINE);
-
-		/* Check online wait timer exec */
-		if (scf_timer_check(SCF_TIMERCD_ONLINE) == SCF_TIMER_NOT_EXEC) {
-			/* DCSP interface stop */
-			scf_dscp_stop(FACTOR_OFFLINE);
-
-			statep->online_to_rcnt = 0;
-			/* SCF online timer start */
-			scf_timer_start(SCF_TIMERCD_ONLINE);
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_next_cmd_check()
- *
- * Description: Next command send and check processing.
- *
- */
-void
-scf_next_cmd_check(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_next_cmd_check() "
-	struct scf_cmd		*scfcmdp = &scf_comtbl.scf_cmd_intr;
-	int			offline_ret;
-	int			cmdbusy_ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check suspend send stop */
-	if (scf_comtbl.scf_suspend_sendstop) {
-		goto END_next_cmd_check;
-	}
-
-	if ((scf_comtbl.scf_path_p == NULL) &&
-		(scf_comtbl.scf_pchg_event_sub == EVENT_SUB_PCHG_WAIT)) {
-		scf_chg_scf(statep, PATH_STAT_ACTIVE);
-		scf_comtbl.scf_path_p = statep;
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		/* send comannd for interrupt */
-		offline_ret = scf_offline_check(statep, FLAG_ON);
-		cmdbusy_ret = scf_cmdbusy_check(statep);
-
-		if ((offline_ret != SCF_PATH_ONLINE) ||
-			(cmdbusy_ret != SCF_COMMAND_READY)) {
-			goto END_next_cmd_check;
-		}
-	}
-
-	/* Check SCF Path change request */
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-		(scf_comtbl.scf_pchg_event_sub == EVENT_SUB_PCHG_WAIT)) {
-		/* Send SCF Path change command */
-		scfcmdp->cmd = CMD_SCFI_PATH;
-		scfcmdp->subcmd = SUB_CMD_PATH;
-		bzero((void *)&scf_comtbl.scf_sbuf[0], SCF_S_CNT_16);
-		scf_comtbl.scf_sbuf[0] = CMD_PATH_TYPE_SCFD;
-		scfcmdp->sbuf = &scf_comtbl.scf_sbuf[0];
-		scfcmdp->scount = SCF_S_CNT_15;
-		scfcmdp->rcount = 0;
-		scfcmdp->flag = SCF_USE_S_BUF;
-		if ((scf_comtbl.scf_cmd_resend_req & RESEND_PCHG) != 0) {
-			scf_comtbl.scf_cmd_resend_flag = 1;
-			scf_comtbl.scf_cmd_resend_req &= ~RESEND_PCHG;
-		}
-		scf_i_send_cmd(scfcmdp, statep);
-		scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_EXEC;
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		/* Check shutdown event information request */
-		if ((scf_comtbl.scf_shut_event_sub == EVENT_SUB_NONE) &&
-			(scf_comtbl.scf_event_flag & STATUS_SHUTDOWN)) {
-			scf_comtbl.scf_event_flag &=
-				(~(STATUS_SHUTDOWN | STATUS_EVENT));
-			scf_comtbl.scf_shut_event_sub = EVENT_SUB_SHUT_WAIT;
-		}
-		if (scf_comtbl.scf_shut_event_sub == EVENT_SUB_SHUT_WAIT) {
-			/* Send event information command */
-			scfcmdp->cmd = CMD_INT_REASON;
-			if (scf_comtbl.int_reason_retry == 0) {
-				scfcmdp->subcmd = SUB_INT_REASON_DISP;
-			} else {
-				scfcmdp->subcmd = SUB_INT_REASON_RETRY;
-			}
-			scfcmdp->scount = 0;
-			scfcmdp->rbuf = &scf_comtbl.scf_rbuf[0];
-			scfcmdp->rcount = SCF_INT_CNT_MAX;
-			scfcmdp->flag = SCF_USE_SLBUF;
-			if ((scf_comtbl.scf_cmd_resend_req & RESEND_SHUT) !=
-				0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &= ~RESEND_SHUT;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_shut_event_sub = EVENT_SUB_SHUT_EXEC;
-		}
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		/* Check power off factor request */
-		if ((scf_comtbl.scf_poff_event_sub == EVENT_SUB_NONE) &&
-			(scf_comtbl.scf_event_flag & STATUS_POFF)) {
-			scf_comtbl.scf_event_flag &= (~STATUS_POFF);
-			scf_comtbl.scf_poff_event_sub = EVENT_SUB_POFF_WAIT;
-		}
-		if (scf_comtbl.scf_poff_event_sub == EVENT_SUB_POFF_WAIT) {
-			/* Send power off factor command */
-			scfcmdp->cmd = CMD_PART_POW_CTR;
-			scfcmdp->subcmd = SUB_POFFID;
-			scfcmdp->scount = 0;
-			scfcmdp->rbuf = &scf_comtbl.scf_rbuf[0];
-			scfcmdp->rcount = SCF_S_CNT_15;
-			scfcmdp->flag = SCF_USE_SSBUF;
-			if ((scf_comtbl.scf_cmd_resend_req & RESEND_POFF) !=
-				0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &= ~RESEND_POFF;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_poff_event_sub = EVENT_SUB_POFF_EXEC;
-		}
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		/* Check event information request */
-		if ((scf_comtbl.scf_shut_event_sub == EVENT_SUB_NONE) &&
-			(scf_comtbl.scf_event_flag & STATUS_EVENT)) {
-			scf_comtbl.scf_event_flag &= (~STATUS_EVENT);
-			scf_comtbl.scf_shut_event_sub = EVENT_SUB_WAIT;
-		}
-		if (scf_comtbl.scf_shut_event_sub == EVENT_SUB_WAIT) {
-			/* Send event information command */
-			scfcmdp->cmd = CMD_INT_REASON;
-			if (scf_comtbl.int_reason_retry == 0) {
-				scfcmdp->subcmd = SUB_INT_REASON_DISP;
-			} else {
-				scfcmdp->subcmd = SUB_INT_REASON_RETRY;
-			}
-			scfcmdp->scount = 0;
-			scfcmdp->rbuf = &scf_comtbl.scf_rbuf[0];
-			scfcmdp->rcount = SCF_INT_CNT_MAX;
-			scfcmdp->flag = SCF_USE_SLBUF;
-			if ((scf_comtbl.scf_cmd_resend_req & RESEND_SHUT) !=
-				0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &= ~RESEND_SHUT;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_shut_event_sub = EVENT_SUB_EXEC;
-		}
-	}
-
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-		((scf_timer_check(SCF_TIMERCD_BUF_FUL) ==
-		SCF_TIMER_NOT_EXEC) &&
-		(scf_timer_check(SCF_TIMERCD_RCI_BUSY) ==
-		SCF_TIMER_NOT_EXEC))) {
-		/* Check report request */
-		if (scf_comtbl.scf_report_event_sub ==
-			EVENT_SUB_REPORT_RUN_WAIT) {
-			/* Send report(System running) command */
-			scfcmdp->cmd = CMD_REPORT;
-			scfcmdp->subcmd = SUB_SYSTEM_STATUS_RPT;
-			bzero((void *)&scf_comtbl.scf_sbuf[0], SCF_S_CNT_16);
-			scf_comtbl.scf_sbuf[0] = REPORT_STAT_SYSTEM_RUNNING;
-			scf_comtbl.scf_sbuf[1] = 0;
-			scf_comtbl.scf_sbuf[2] = 0;
-			scf_comtbl.scf_sbuf[3] = 0;
-			scfcmdp->sbuf = &scf_comtbl.scf_sbuf[0];
-			scfcmdp->scount = SCF_S_CNT_15;
-			scfcmdp->rcount = 0;
-			scfcmdp->flag = SCF_USE_S_BUF;
-			if ((scf_comtbl.scf_cmd_resend_req &
-				RESEND_REPORT_RUN) != 0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &=
-					~RESEND_REPORT_RUN;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_report_event_sub =
-				EVENT_SUB_REPORT_RUN_EXEC;
-			scf_comtbl.scf_last_report = SCF_SYSTEM_RUNNING;
-		} else if (scf_comtbl.scf_report_event_sub ==
-			EVENT_SUB_REPORT_SHUT_WAIT) {
-			/* Send report(Shutdown start) command */
-			scfcmdp->cmd = CMD_REPORT;
-			scfcmdp->subcmd = SUB_SYSTEM_STATUS_RPT;
-			bzero((void *)&scf_comtbl.scf_sbuf[0],
-				SCF_S_CNT_16);
-			scf_comtbl.scf_sbuf[0] =
-				REPORT_STAT_SHUTDOWN_START;
-			scf_comtbl.scf_sbuf[1] =
-				scf_poff_factor[scf_comtbl.poff_factor][0];
-			scf_comtbl.scf_sbuf[2] =
-				scf_poff_factor[scf_comtbl.poff_factor][1];
-			scf_comtbl.scf_sbuf[3] =
-				scf_poff_factor[scf_comtbl.poff_factor][2];
-			scfcmdp->sbuf = &scf_comtbl.scf_sbuf[0];
-			scfcmdp->scount = SCF_S_CNT_15;
-			scfcmdp->rcount = 0;
-			scfcmdp->flag = SCF_USE_S_BUF;
-			if ((scf_comtbl.scf_cmd_resend_req &
-				RESEND_REPORT_SHUT) != 0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &=
-					~RESEND_REPORT_SHUT;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_report_event_sub =
-				EVENT_SUB_REPORT_SHOT_EXEC;
-			scf_comtbl.scf_last_report = SCF_SHUTDOWN_START;
-			scf_comtbl.shutdown_start_reported = 1;
-		}
-	}
-
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-		(scf_comtbl.scf_domain_event_sub == EVENT_SUB_DOMAIN_WAIT)) {
-		/* Send Option disp command */
-		scfcmdp->cmd = CMD_DOMAIN_INFO;
-		scfcmdp->subcmd = SUB_OPTION_DISP;
-		bzero((void *)&scf_comtbl.scf_sbuf[0], SCF_S_CNT_16);
-		scf_comtbl.scf_sbuf[13] =
-			(uchar_t)(scf_scfd_comif_version >> 8);
-		scf_comtbl.scf_sbuf[14] = (uchar_t)scf_scfd_comif_version;
-		scfcmdp->sbuf = &scf_comtbl.scf_sbuf[0];
-		scfcmdp->scount = SCF_S_CNT_15;
-		scfcmdp->rbuf = &scf_comtbl.scf_rbuf[0];
-		scfcmdp->rcount = SCF_S_CNT_15;
-		scfcmdp->flag = SCF_USE_SSBUF;
-		if ((scf_comtbl.scf_cmd_resend_req & RESEND_DOMAIN) != 0) {
-			scf_comtbl.scf_cmd_resend_flag = 1;
-			scf_comtbl.scf_cmd_resend_req &= ~RESEND_DOMAIN;
-		}
-		scf_i_send_cmd(scfcmdp, statep);
-		scf_comtbl.scf_domain_event_sub = EVENT_SUB_DOMAIN_EXEC;
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		/* Check alive check request */
-		if (scf_comtbl.scf_alive_event_sub == EVENT_SUB_ALST_WAIT) {
-			/* Send alive check start command */
-			scfcmdp->cmd = CMD_ALIVE_CHECK;
-			scfcmdp->subcmd = SUB_ALIVE_START;
-			bzero((void *)&scf_comtbl.scf_sbuf[0], SCF_S_CNT_16);
-			scf_comtbl.scf_sbuf[0] = scf_alive_watch_code;
-			scf_comtbl.scf_sbuf[1] = scf_alive_phase_code;
-			scf_alive_phase_code++;
-			scf_comtbl.scf_sbuf[2] = scf_alive_interval_time;
-			scf_comtbl.scf_sbuf[3] = scf_alive_monitor_time;
-			scf_comtbl.scf_sbuf[4] =
-				(uchar_t)(scf_alive_panic_time >> 8);
-			scf_comtbl.scf_sbuf[5] =
-				(uchar_t)(scf_alive_panic_time);
-			scfcmdp->sbuf = &scf_comtbl.scf_sbuf[0];
-			scfcmdp->scount = SCF_S_CNT_15;
-			scfcmdp->rcount = 0;
-			scfcmdp->flag = SCF_USE_S_BUF;
-			if ((scf_comtbl.scf_cmd_resend_req & RESEND_ALST) !=
-				0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &= ~RESEND_ALST;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALST_EXEC;
-		} else if (scf_comtbl.scf_alive_event_sub ==
-			EVENT_SUB_ALSP_WAIT) {
-			/* Send alive check stop command */
-			scfcmdp->cmd = CMD_ALIVE_CHECK;
-			scfcmdp->subcmd = SUB_ALIVE_STOP;
-			scfcmdp->scount = 0;
-			scfcmdp->rcount = 0;
-			scfcmdp->flag = SCF_USE_S_BUF;
-			if ((scf_comtbl.scf_cmd_resend_req & RESEND_ALSP) !=
-				0) {
-				scf_comtbl.scf_cmd_resend_flag = 1;
-				scf_comtbl.scf_cmd_resend_req &= ~RESEND_ALSP;
-			}
-			scf_i_send_cmd(scfcmdp, statep);
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALSP_EXEC;
-		}
-	}
-
-	/* Check send wait */
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) && (scf_comtbl.cmd_end_wait)) {
-		if ((scf_comtbl.scf_cmd_resend_req & RESEND_IOCTL) != 0) {
-			scf_comtbl.scf_cmd_resend_flag = 1;
-			scf_comtbl.scf_cmd_resend_req &= ~RESEND_IOCTL;
-		}
-		scf_i_send_cmd(scf_comtbl.scf_cmdp, statep);
-
-		scf_comtbl.scf_exec_cmd_id = 1;
-	}
-
-	/* Signal to command wait */
-	if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-		(scf_comtbl.cmd_busy_wait != 0)) {
-		scf_comtbl.cmd_busy_wait = 0;
-		cv_signal(&scf_comtbl.cmdwait_cv);
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmdwait_cv,
-			sizeof (kcondvar_t));
-	}
-
-/*
- * END_next_cmd_check
- */
-	END_next_cmd_check:
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_next_rxdata_get()
- *
- * Description: Next receive data Read processing.
- *
- */
-void
-scf_next_rxdata_get(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_next_rxdata_get() "
-	scf_state_t		*statep;
-	struct scf_cmd		*scfcmdp;
-	uint32_t		sum4;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	uint32_t		*wk_in_p32;
-	uint_t			wk_leng;
-	uint_t			rxbuff_cnt;
-	uint_t			rxbuff_offset;
-	int			path_ret;
-	int			ii;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check command send exec */
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		goto END_next_rxdata_get;
-	}
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(&statep);
-	/* Check SCF path status */
-	if (path_ret != SCF_PATH_ONLINE) {
-		goto END_next_rxdata_get;
-	}
-
-	/* Check remainder receive data size */
-	if (scf_comtbl.scf_rem_rxbuff_size == 0) {
-		goto END_next_rxdata_get;
-	}
-
-
-	scfcmdp = scf_comtbl.scf_cmdp;
-	rxbuff_offset = scfcmdp->rbufleng - scf_comtbl.scf_rem_rxbuff_size;
-	if (scf_comtbl.scf_rem_rxbuff_size > scf_rxbuff_max_size) {
-		rxbuff_cnt = scf_rxbuff_max_size;
-	} else {
-		rxbuff_cnt = scf_comtbl.scf_rem_rxbuff_size;
-	}
-	scf_comtbl.scf_rem_rxbuff_size -= rxbuff_cnt;
-
-	/* Receive data copy */
-	wk_in_p = (uint8_t *)&statep->scf_sys_sram->DATA[rxbuff_offset];
-	wk_out_p = (uint8_t *)&scfcmdp->rbuf[rxbuff_offset];
-	for (ii = 0; ii < rxbuff_cnt; ii++, wk_in_p++, wk_out_p++) {
-		*wk_out_p = SCF_DDI_GET8(statep, statep->scf_sys_sram_handle,
-			wk_in_p);
-	}
-
-	/* Check remainder receive data size */
-	if (scf_comtbl.scf_rem_rxbuff_size != 0) {
-		/* Next receive data timer start */
-		scf_timer_start(SCF_TIMERCD_NEXTRECV);
-		goto END_next_rxdata_get;
-	}
-
-	/* Remainder receive data end */
-	scf_comtbl.scf_cmd_exec_flag = 0;
-
-	/* Make SRAM data sum */
-	sum4 = SCF_MAGICNUMBER_L;
-	wk_leng = scfcmdp->rbufleng / 4;
-	wk_in_p32 = (void *)scfcmdp->rbuf;
-	for (ii = 0; ii < wk_leng; ii++, wk_in_p32++) {
-		sum4 += *wk_in_p32;
-	}
-	if ((scfcmdp->rbufleng % 4) == 3) {
-		sum4 += ((scfcmdp->rbuf[scfcmdp->rbufleng - 3] << 24) |
-			(scfcmdp->rbuf[scfcmdp->rbufleng - 2] << 16) |
-			(scfcmdp->rbuf[scfcmdp->rbufleng - 1] <<  8));
-	} else if ((scfcmdp->rbufleng % 4) == 2) {
-		sum4 += ((scfcmdp->rbuf[scfcmdp->rbufleng - 2] << 24) |
-			(scfcmdp->rbuf[scfcmdp->rbufleng - 1] << 16));
-	} else if ((scfcmdp->rbufleng % 4) == 1) {
-		sum4 += (scfcmdp->rbuf[scfcmdp->rbufleng - 1] << 24);
-	}
-
-	SCF_DBG_MAKE_RXSUM_L(sum4, statep->reg_rdata[2]);
-
-	/* Check SRAM data sum */
-	if (sum4 == statep->reg_rdata[2]) {
-		statep->resum_rcnt = 0;
-
-		scf_comtbl.cmd_end_wait = 0;
-		/* Signal to command end wait */
-		cv_signal(&scf_comtbl.cmdend_cv);
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmdend_cv,
-			sizeof (kcondvar_t));
-
-		/* Next command send check */
-		scf_next_cmd_check(statep);
-	} else {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "next_rx ", 8);
-		scfcmdp->stat0 = SCF_STAT0_RDATA_SUM;
-		statep->resum_rcnt++;
-
-		/* Check Rx sum re-try out */
-		if (statep->resum_rcnt > scf_resum_rcnt) {
-			/* SRAM trace */
-			SCF_SRAM_TRACE(statep, DTC_RSUMERR);
-
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "next_rx ", 8);
-			cmn_err(CE_WARN,
-				"%s,Failed the receive data SUM of "
-				"SRAM. SCF command =0x%02x%02x\n",
-					&statep->pathname[0],
-					scfcmdp->subcmd, scfcmdp->cmd);
-			statep->scf_herr |= HERR_RESUM;
-			scf_path_change(statep);
-		} else {
-			/* Set command wait status */
-			scf_cmdwait_status_set();
-
-			scf_comtbl.scf_cmd_exec_flag = 0;
-
-			/* Next command send check */
-			scf_next_cmd_check(statep);
-		}
-	}
-
-/*
- * END_next_rxdata_get
- */
-	END_next_rxdata_get:
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_online_wait_tout()
- *
- * Description: SCF online monitor timeout processing.
- *
- */
-void
-scf_online_wait_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_online_wait_tout() "
-	scf_state_t		*statep = NULL;
-	scf_state_t		*wkstatep = NULL;
-	scf_state_t		*wait_top_statep = NULL;
-	int			online_flag = 0;
-	int			ii;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Get SCF path status */
-	statep = scf_comtbl.scf_exec_p;
-	if (statep == NULL) {
-		statep = scf_comtbl.scf_path_p;
-	}
-	/* Check SCF path status */
-	if (statep == NULL) {
-		goto END_online_wait_tout;
-	}
-
-	SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "onlin_to", 8);
-	/* Get SCF status extended register */
-	statep->reg_status_exr = SCF_DDI_GET32(statep,
-		statep->scf_regs_handle, &statep->scf_regs->STATUS_ExR);
-	SC_DBG_DRV_TRACE(TC_R_STATUS_ExR, __LINE__,
-		&statep->reg_status_exr, sizeof (statep->reg_status_exr));
-
-	/* Check SCF status */
-	if ((statep->reg_status_exr & STATUS_SCF_STATUS) == STATUS_SCF_ONLINE) {
-		/*
-		 * SCF online
-		 */
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF path online");
-		if (scf_comtbl.scf_status == SCF_STATUS_OFFLINE) {
-			cmn_err(CE_NOTE, "%s: SCF online.\n", scf_driver_name);
-		}
-		scf_comtbl.scf_status = SCF_STATUS_ONLINE;
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_ONLINE);
-
-		/* DCSP interface start */
-		scf_dscp_start(FACTOR_ONLINE);
-
-		/* Check Alive check exec */
-		if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALST_WAIT;
-		}
-
-		/* Check command send exec */
-		if (scf_comtbl.scf_cmd_exec_flag) {
-			/* Set command wait status */
-			scf_cmdwait_status_set();
-			scf_comtbl.scf_cmd_exec_flag = 0;
-		}
-
-		scf_comtbl.scf_domain_event_sub = EVENT_SUB_DOMAIN_WAIT;
-
-		/* Next command send check */
-		scf_next_cmd_check(statep);
-
-		/* Check next command send */
-		if (scf_comtbl.cmd_busy_wait != 0) {
-			scf_comtbl.cmd_busy_wait = 0;
-			/* Signal to command wait */
-			cv_signal(&scf_comtbl.cmdwait_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.cmdwait_cv, sizeof (kcondvar_t));
-		}
-	} else {
-		/*
-		 * SCF offline
-		 */
-
-		/* Check standby path */
-		if ((wkstatep = scf_comtbl.scf_wait_p) != NULL) {
-			wait_top_statep = wkstatep;
-			for (ii = 0; ii < scf_path_change_max; ii++) {
-				/* Get SCF status extended register */
-				wkstatep->reg_status_exr =
-					SCF_DDI_GET32(wkstatep,
-					wkstatep->scf_regs_handle,
-					&wkstatep->scf_regs->STATUS_ExR);
-				SC_DBG_DRV_TRACE(TC_R_STATUS_ExR, __LINE__,
-					&wkstatep->reg_status_exr,
-					sizeof (wkstatep->reg_status_exr));
-
-				/* Check SCF status */
-				if ((wkstatep->reg_status_exr &
-					STATUS_SCF_STATUS) ==
-					STATUS_SCF_ONLINE) {
-					/* SCF path change process */
-						online_flag = 1;
-						scf_path_change(wkstatep);
-					break;
-				}
-
-				/* SCF path change */
-				scf_comtbl.scf_wait_p = wkstatep->next;
-				scf_chg_scf(wkstatep, PATH_STAT_STANDBY);
-
-				/* Check standby path */
-				wkstatep = scf_comtbl.scf_wait_p;
-				if (wkstatep == NULL) {
-					/* Not change path */
-					break;
-				}
-				if (wkstatep != wait_top_statep) {
-					/* Next SCF path */
-					continue;
-				} else {
-					/* Not change path */
-					break;
-				}
-			}
-		}
-
-		if (online_flag != 0) {
-			goto END_online_wait_tout;
-		}
-
-		scf_comtbl.scf_status = SCF_STATUS_OFFLINE;
-
-		statep->online_to_rcnt++;
-
-		/* Check re-try out */
-		if (statep->online_to_rcnt < scf_online_wait_rcnt) {
-			/* SCF online timer start */
-			scf_timer_start(SCF_TIMERCD_ONLINE);
-			goto END_online_wait_tout;
-		}
-
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "onlin_to", 8);
-
-		/* SRAM trace */
-		SCF_SRAM_TRACE(statep, DTC_ONLINETO);
-
-		scf_comtbl.scf_cmd_exec_flag = 0;
-
-		/* Timer stop */
-		scf_timer_stop(SCF_TIMERCD_CMDBUSY);
-		scf_timer_stop(SCF_TIMERCD_CMDEND);
-		scf_timer_stop(SCF_TIMERCD_ONLINE);
-		scf_timer_stop(SCF_TIMERCD_NEXTRECV);
-		scf_timer_stop(SCF_TIMERCD_BUF_FUL);
-		scf_timer_stop(SCF_TIMERCD_RCI_BUSY);
-
-		if (scf_comtbl.suspend_wait) {
-			/* Signal to suspend wait */
-			scf_comtbl.suspend_wait = 0;
-			scf_comtbl.scf_suspend_sendstop = 1;
-			cv_signal(&scf_comtbl.suspend_wait_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.suspend_wait_cv,
-				sizeof (kcondvar_t));
-		}
-		if (scf_comtbl.cmd_end_wait != 0) {
-			/* Signal to command end wait */
-			scf_comtbl.cmd_end_wait = 0;
-			scf_comtbl.scf_cmdp->stat0 = SCF_STAT0_NOT_PATH;
-			cv_signal(&scf_comtbl.cmdend_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.cmdend_cv,
-				sizeof (kcondvar_t));
-		}
-		if (scf_comtbl.cmd_busy_wait != 0) {
-			/* Signal to command wait */
-			scf_comtbl.cmd_busy_wait = 0;
-			cv_signal(&scf_comtbl.cmdwait_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.cmdwait_cv,
-				sizeof (kcondvar_t));
-		}
-
-		/* DCSP interface stop */
-		scf_dscp_stop(FACTOR_PATH_STOP);
-	}
-
-/*
- * END_online_wait_tout
- */
-	END_online_wait_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_cmdbusy_tout()
- *
- * Description: SCF command busy monitor timeout processing.
- *
- */
-void
-scf_cmdbusy_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_cmdbusy_tout() "
-	scf_state_t		*statep;
-	int			path_ret;
-	uint8_t			wk_int8;
-	uint16_t		wk_int16;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(&statep);
-	/* Check SCF path status */
-	if ((path_ret != SCF_PATH_ONLINE) && (path_ret != SCF_PATH_CHANGE)) {
-		goto END_cmdbusy_tout;
-	}
-
-	SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "cmdbusy ", 8);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_CMDBUSYTO);
-
-	/* Get SCF command register */
-	wk_int16 = SCF_DDI_GET16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND, __LINE__, &wk_int16, sizeof (wk_int16));
-	wk_int8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND_ExR);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND_ExR, __LINE__, &wk_int8,
-		sizeof (wk_int8));
-
-	/* Check busy flag */
-	if (((wk_int16 & COMMAND_BUSY) == 0x0000) &&
-		((wk_int8 & COMMAND_ExR_BUSY) == 0x00)) {
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF command ready");
-		/* Next command send check */
-		scf_next_cmd_check(statep);
-	} else {
-		statep->devbusy_to_rcnt++;
-
-		/* Check re-try out */
-		if (statep->devbusy_to_rcnt < scf_devbusy_wait_rcnt) {
-			/* SCF online timer start */
-			scf_timer_start(SCF_TIMERCD_CMDBUSY);
-			goto END_cmdbusy_tout;
-		}
-
-		if ((wk_int16 & COMMAND_BUSY) != 0x0000) {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "cmdbusy ", 8);
-			cmn_err(CE_WARN,
-				"%s,Busy state of SCF command is "
-				"not released.\n", &statep->pathname[0]);
-		} else {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "cmdbusy ", 8);
-			cmn_err(CE_WARN,
-				"%s,Busy state of XSCF is not released.\n",
-				&statep->pathname[0]);
-		}
-		statep->scf_herr |= HERR_BUSY_RTO;
-		scf_path_change(statep);
-	}
-
-/*
- * END_cmdbusy_tout
- */
-	END_cmdbusy_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-/*
- * scf_cmdend_tout()
- *
- * Description: SCF command complete monitor timeout processing.
- *
- */
-void
-scf_cmdend_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_cmdend_tout() "
-	scf_state_t		*statep;
-	int			path_ret;
-	struct scf_cmd		*scfcmdp;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Get SCF path status */
-	path_ret = scf_path_check(&statep);
-	/* Check SCF path status */
-	if ((path_ret != SCF_PATH_ONLINE) && (path_ret != SCF_PATH_CHANGE)) {
-		goto END_cmdend_tout;
-	}
-
-	SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "cmd_to  ", 8);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_CMDTO);
-
-	/* error memo */
-	scf_comtbl.memo_cmd_to_cnt++;
-	statep->memo_cmd_to_cnt++;
-
-	if (scf_comtbl.scf_exec_cmd_id) {
-		/* Comand send for ioctl */
-		scfcmdp = scf_comtbl.scf_cmdp;
-	} else {
-		/* Comand send for interrupt */
-		scfcmdp = &scf_comtbl.scf_cmd_intr;
-	}
-
-	statep->cmd_to_rcnt++;
-
-	/* Check re-try out */
-	if (statep->cmd_to_rcnt <= scf_cmd_to_rcnt) {
-		/* Set command wait status */
-		scf_cmdwait_status_set();
-
-		scf_comtbl.scf_cmd_exec_flag = 0;
-
-		/* Next command send check */
-		scf_next_cmd_check(statep);
-	} else {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "cmd_to  ", 8);
-		cmn_err(CE_WARN,
-			"%s,SCF command timeout occurred. "
-			"SCF command = 0x%02x%02x\n",
-				&statep->pathname[0],
-				scfcmdp->subcmd, scfcmdp->cmd);
-		statep->scf_herr |= HERR_CMD_RTO;
-		scf_path_change(statep);
-	}
-
-/*
- * END_cmdend_tout
- */
-	END_cmdend_tout:
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_report_send_wait_tout()
- *
- * Description: Report command send wait timeout processing.
- *
- */
-void
-scf_report_send_wait_tout(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_report_send_wait_tout() "
-	scf_state_t		*statep;
-	int			next_send = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Get SCF path status */
-	(void) scf_path_check(&statep);
-	/* Check SCF path status */
-	if (statep != NULL) {
-		/* Last send report send */
-		if (scf_comtbl.scf_last_report == SCF_SYSTEM_RUNNING) {
-			scf_comtbl.scf_report_event_sub =
-				EVENT_SUB_REPORT_RUN_WAIT;
-			next_send = 1;
-		} else if (scf_comtbl.scf_last_report ==
-			EVENT_SUB_REPORT_SHOT_EXEC) {
-			scf_comtbl.scf_report_event_sub =
-				EVENT_SUB_REPORT_SHUT_WAIT;
-			next_send = 1;
-		}
-		if (next_send) {
-			/* Next command send check */
-			scf_next_cmd_check(statep);
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_alivecheck_intr()
- *
- * Description: Alive check timeout interrupt processing.
- *
- */
-void
-scf_alivecheck_intr(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_alivecheck_intr() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check alive check exec */
-	if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-		scf_comtbl.scf_alive_int_count--;
-
-		if (scf_comtbl.scf_alive_int_count == 0) {
-			/* Alive check register set */
-			statep->reg_acr = scf_acr_phase_code | ACR_ALIVE_INT;
-			SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-				&statep->scf_regs->ACR, statep->reg_acr);
-			SC_DBG_DRV_TRACE(TC_W_ACR, __LINE__, &statep->reg_acr,
-				sizeof (statep->reg_acr));
-			/* Register read sync */
-			scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-				&statep->scf_regs->ACR);
-
-			SCFDBGMSG1(SCF_DBGFLAG_REG, "ACR = 0x%02x",
-				statep->reg_acr);
-
-			scf_acr_phase_code++;
-			scf_comtbl.scf_alive_int_count =
-				scf_alive_interval_time / 3;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_path_change()
- *
- * Description: SCF pass change processing.
- *
- */
-void
-scf_path_change(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_path_change() "
-	scf_state_t		*wkstatep;
-	scf_state_t		*act_statep = NULL;
-	uint_t			path_change = 0;
-	uint_t			halt_flag = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	if (statep->scf_herr != 0) {
-		act_statep = statep;
-
-		statep->scf_herr |= HERR_EXEC;
-
-		/* Interrupt disable */
-		scf_forbid_intr(statep);
-
-		/* Change statep */
-		if (scf_comtbl.scf_path_p == statep) {
-			scf_comtbl.scf_path_p = NULL;
-			path_change = FACTOR_PATH_HALT;
-		} else if (scf_comtbl.scf_exec_p == statep) {
-			scf_comtbl.scf_exec_p = NULL;
-			path_change = FACTOR_PATH_HALT;
-		} else {
-			if ((statep->path_status == PATH_STAT_STANDBY) ||
-				(statep->path_status == PATH_STAT_STOP)) {
-				scf_del_queue(statep);
-			}
-		}
-		if ((statep->path_status == PATH_STAT_ACTIVE) ||
-			(statep->path_status == PATH_STAT_STANDBY) ||
-			(statep->path_status == PATH_STAT_STOP)) {
-			scf_chg_scf(statep, PATH_STAT_FAIL);
-		}
-	} else {
-		/* SCF path change interrupt or SCF online wait timeout */
-		if (scf_comtbl.scf_exec_p != NULL) {
-			act_statep = scf_comtbl.scf_exec_p;
-		} else if (scf_comtbl.scf_path_p != NULL) {
-			act_statep = scf_comtbl.scf_path_p;
-		}
-		if ((act_statep != NULL) && (scf_comtbl.scf_wait_p != NULL)) {
-			/* Interrupt disable */
-			scf_forbid_intr(act_statep);
-			/* Interrupt enable */
-			scf_permit_intr(act_statep, 1);
-
-			scf_comtbl.scf_exec_p = NULL;
-			scf_comtbl.scf_path_p = NULL;
-			path_change = FACTOR_PATH_STOP;
-
-			scf_chg_scf(act_statep, PATH_STAT_STANDBY);
-		}
-	}
-
-	if (path_change) {
-		/* FMEMA interface */
-		scf_avail_cmd_reg_vaddr = NULL;
-
-		/* Check standby path */
-		if ((wkstatep = scf_comtbl.scf_wait_p) != NULL) {
-			if (path_change == FACTOR_PATH_HALT) {
-				/* Check SCF path change retry */
-				if (scf_comtbl.path_change_rcnt <
-					scf_path_change_max) {
-					scf_comtbl.path_change_rcnt++;
-				} else {
-					/* SCF path change retry over */
-					halt_flag = FACTOR_PATH_HALT;
-				}
-			}
-		} else {
-			/* Not change path */
-			halt_flag = FACTOR_PATH_HALT;
-		}
-
-		if (halt_flag == 0) {
-			if (wkstatep != act_statep) {
-				cmn_err(CE_CONT,
-					"%s: SCFC path changed. (%s --> %s)\n",
-					scf_driver_name,
-					&act_statep->pathname[0],
-					&wkstatep->pathname[0]);
-			}
-
-			/* Timer stop */
-			scf_timer_stop(SCF_TIMERCD_CMDBUSY);
-			scf_timer_stop(SCF_TIMERCD_CMDEND);
-			scf_timer_stop(SCF_TIMERCD_ONLINE);
-			scf_timer_stop(SCF_TIMERCD_NEXTRECV);
-
-			/* Set command wait status */
-			scf_cmdwait_status_set();
-
-			scf_comtbl.scf_alive_event_sub = EVENT_SUB_NONE;
-			scf_comtbl.scf_cmd_exec_flag = 0;
-			/* Send path change */
-			scf_comtbl.scf_wait_p = wkstatep->next;
-			scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-			scf_next_cmd_check(wkstatep);
-
-			/* DCSP interface stop */
-			scf_dscp_stop(FACTOR_PATH_CHG);
-		}
-	}
-
-	if (halt_flag) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "path_chg", 8);
-
-		scf_comtbl.path_change_rcnt = 0;
-
-		scf_comtbl.scf_cmd_exec_flag = 0;
-
-		/* Timer stop */
-		scf_timer_stop(SCF_TIMERCD_CMDBUSY);
-		scf_timer_stop(SCF_TIMERCD_CMDEND);
-		scf_timer_stop(SCF_TIMERCD_ONLINE);
-		scf_timer_stop(SCF_TIMERCD_NEXTRECV);
-		scf_timer_stop(SCF_TIMERCD_BUF_FUL);
-		scf_timer_stop(SCF_TIMERCD_RCI_BUSY);
-
-		if (scf_comtbl.suspend_wait) {
-			/* Signal to suspend wait */
-			scf_comtbl.suspend_wait = 0;
-			scf_comtbl.scf_suspend_sendstop = 1;
-			cv_signal(&scf_comtbl.suspend_wait_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.suspend_wait_cv,
-				sizeof (kcondvar_t));
-		}
-		if (scf_comtbl.cmd_end_wait != 0) {
-			/* Signal to command end wait */
-			scf_comtbl.cmd_end_wait = 0;
-			scf_comtbl.scf_cmdp->stat0 = SCF_STAT0_NOT_PATH;
-			cv_signal(&scf_comtbl.cmdend_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.cmdend_cv, sizeof (kcondvar_t));
-		}
-		if (scf_comtbl.cmd_busy_wait != 0) {
-			/* Signal to command wait */
-			scf_comtbl.cmd_busy_wait = 0;
-			cv_signal(&scf_comtbl.cmdwait_cv);
-			SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__,
-				&scf_comtbl.cmdwait_cv, sizeof (kcondvar_t));
-		}
-
-		/* DCSP interface stop */
-		scf_dscp_stop(halt_flag);
-
-		if (halt_flag == FACTOR_PATH_HALT) {
-			/* Not change path(SCF HALT) */
-
-			/* FMEMA interface */
-			scf_avail_cmd_reg_vaddr = NULL;
-
-			cmn_err(CE_WARN,
-				"%s: SCF HALT was detected.\n",
-				scf_driver_name);
-
-			/* SCF HALT after processing */
-			scf_halt(scf_halt_proc_mode);
-		}
-
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_halt()
- *
- * Description: SCFHALT shutdown/panic processing.
- *
- */
-void
-scf_halt(uint_t mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_halt() "
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	SC_DBG_DRV_TRACE(TC_ERRCD, __LINE__, &mode, sizeof (mode));
-
-	switch (mode) {
-	case HALTPROC_SHUTDOWN:
-		cmn_err(CE_CONT,
-			"%s: Shutdown was executed.\n",
-			scf_driver_name);
-		/* System shutdown start */
-		if (scf_comtbl.scf_shutdownreason == 0) {
-			scf_comtbl.scf_shutdownreason = REASON_SHUTDOWN_HALT;
-			do_shutdown();
-		}
-		break;
-
-	case HALTPROC_PANIC:
-		/* System panic */
-		cmn_err(CE_PANIC,
-			"%s: Executed panic by SCF HALT.\n",
-			scf_driver_name);
-		break;
-
-	default:
-		break;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_panic_callb()
- *
- * Description: Panic entry processing.
- *
- */
-/* ARGSUSED */
-void
-scf_panic_callb(int code)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_panic_callb() "
-	scf_state_t		*statep;
-	scf_state_t		*save__exec_p;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	unsigned short		status;
-	int			counter;
-	int			report_succeeded = 0;
-	int			path_flag = 0;
-	int			path_counter = 0;
-	int			report_counter = 0;
-	int			ii = 0;
-	int			new_report = 0;
-	int			ost;
-
-	SCFDBGMSG1(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": start code = %d",
-		code);
-	SCF_PANIC_TRACE(__LINE__);
-
-	/* Check panic after */
-	if (scf_panic_reported) {
-		SCF_PANIC_TRACE(__LINE__);
-		return;
-	}
-
-	/* Check double panic */
-	if (scf_panic_exec_flag) {
-		SCF_PANIC_TRACE(__LINE__);
-		return;
-	}
-
-	/* Check shutdown exec */
-	if (scf_comtbl.scf_shutdown_exec_flag) {
-		SCF_PANIC_TRACE(__LINE__);
-		return;
-	}
-
-	/* Set panic exec flag */
-	scf_panic_exec_flag = 1;
-
-	save__exec_p = scf_comtbl.scf_exec_p;
-	/* wait */
-	drv_usecwait(SCF_MIL2MICRO(scf_panic_exec_wait_time));
-
-	if ((statep = scf_comtbl.scf_exec_p) != NULL) {
-		/* Exec SCF path interrupt disable */
-		/* SCF interrupt disable(CR) */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL, CONTROL_DISABLE);
-		/* Register read sync */
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-
-		/* SCF Status register interrupt(STR) : clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		/* SCF Status extended register(STExR) : interrupt clear */
-		SCF_P_DDI_PUT32(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-
-		/* DSCP buffer status register(DSR) : interrupt clear */
-		SCF_P_DDI_PUT8(statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-
-		/* SCF interrupt status register(ISR) : interrupt clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-	}
-
-	if ((statep = scf_comtbl.scf_path_p) != NULL) {
-		/* Path change SCF path interrupt disable */
-		/* SCF interrupt disable(CR) */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL, CONTROL_DISABLE);
-		/* Register read sync */
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-
-		/* SCF Status register interrupt(STR) : clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		/* SCF Status extended register(STExR) : interrupt clear */
-		SCF_P_DDI_PUT32(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-
-		/* DSCP buffer status register(DSR) : interrupt clear */
-		SCF_P_DDI_PUT8(statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-
-		/* SCF interrupt status register(ISR) : interrupt clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-	}
-
-	statep = scf_comtbl.scf_wait_p;
-	while (statep != NULL) {	/* Standby SCF path interrupt disable */
-		/* SCF interrupt disable(CR) */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL, CONTROL_DISABLE);
-		/* Register read sync */
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-
-		/* SCF Status register interrupt(STR) : clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		/* SCF Status extended register(STExR) : interrupt clear */
-		SCF_P_DDI_PUT32(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-
-		/* DSCP buffer status register(DSR) : interrupt clear */
-		SCF_P_DDI_PUT8(statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-
-		/* SCF interrupt status register(ISR) : interrupt clear */
-		SCF_P_DDI_PUT16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		status = SCF_P_DDI_GET16(statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-
-		statep = statep->next;
-	}
-
-	status = 0;
-
-	/* Check comand exec */
-	if (scf_comtbl.scf_cmd_exec_flag == 0) {
-		statep = scf_comtbl.scf_exec_p;
-		if (statep == NULL) {
-			statep = scf_comtbl.scf_path_p;
-			if (statep == NULL) {
-				statep = scf_comtbl.scf_wait_p;
-				if (statep == NULL) {
-					statep = scf_comtbl.scf_suspend_p;
-					if (statep) {
-						ost = statep->old_path_status;
-						if ((ost != PATH_STAT_ACTIVE) &&
-							(ost !=
-							PATH_STAT_STANDBY)) {
-							statep = NULL;
-						}
-					}
-					if (statep == NULL) {
-						/* Not use SCF path */
-						SCF_PANIC_TRACE(__LINE__);
-						goto END_scf_panic_callb;
-					}
-				}
-				path_flag = 1;
-			}
-		}
-		goto START_scf_panic;
-	}
-
-	statep = scf_comtbl.scf_exec_p;
-	if (statep == NULL) {
-		statep = scf_comtbl.scf_path_p;
-		if (statep == NULL) {
-			statep = scf_comtbl.scf_wait_p;
-			if (statep == NULL) {
-				statep = scf_comtbl.scf_suspend_p;
-				if (statep) {
-					ost = statep->old_path_status;
-					if ((ost != PATH_STAT_ACTIVE) &&
-						(ost != PATH_STAT_STANDBY)) {
-						statep = NULL;
-					}
-				}
-				if (statep == NULL) {
-					SCF_PANIC_TRACE(__LINE__);
-					goto END_scf_panic_callb;
-				}
-			}
-			/* wait */
-			drv_usecwait(SCF_MIL2MICRO((scf_cmdend_wait_time_panic *
-				scf_cmdend_wait_rcnt_panic)));
-			path_flag = 1;
-		}
-	}
-	if (path_flag == 0) {
-		for (ii = 0; ii < scf_cmdend_wait_rcnt_panic; ii++) {
-			/* wait */
-			drv_usecwait
-			(SCF_MIL2MICRO(scf_cmdend_wait_time_panic));
-
-			/* Get SCF status register */
-			status = SCF_P_DDI_GET16(statep->scf_regs_handle,
-				&statep->scf_regs->STATUS);
-			scf_panic_trc_status = status;
-
-			if (status & STATUS_CMD_COMPLETE) {
-				/* Command complete */
-				break;
-			}
-		}
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-	}
-
-/*
- * START_scf_panic
- */
-	START_scf_panic:
-
-	counter = scf_panic_report_maxretry;
-	do {
-/*
- * START_scf_panic_loop
- */
-	START_scf_panic_loop:
-
-		/* Check SCF path change */
-		if (path_flag == 0) {
-			goto START_report_send;
-		}
-
-		scf_cmd.cmd = CMD_SCFI_PATH;
-		scf_cmd.subcmd = SUB_CMD_PATH;
-		bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-		sbuf.b[0] = REPORT_STAT_PANIC;
-		scf_cmd.scount = CMD_PATH_TYPE_SCFD;
-		scf_cmd.sbuf = &sbuf.b[0];
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		scf_p_send_cmd(&scf_cmd, statep);
-
-		/* Check command complete */
-		for (ii = 0; ii < scf_cmdend_wait_rcnt_panic; ii++) {
-			/* wait */
-			drv_usecwait(SCF_MIL2MICRO(scf_cmdend_wait_time_panic));
-
-			/* Get SCF status register */
-			status = SCF_P_DDI_GET16(statep->scf_regs_handle,
-				&statep->scf_regs->STATUS);
-			scf_panic_trc_status = status;
-
-			if (status & STATUS_CMD_COMPLETE) {
-				/* Command complete */
-				break;
-			}
-		}
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		if (ii == scf_cmdend_wait_rcnt_panic) {
-			/* Not command complete */
-			if (path_counter < 1) {
-				path_counter++;
-				goto START_scf_panic_loop;
-			}
-			SCF_PANIC_TRACE(__LINE__);
-			goto END_scf_panic_callb;
-		}
-		switch ((status & STATUS_CMD_RTN_CODE) >> 4) {
-		case NORMAL_END:
-			counter = scf_panic_report_maxretry;
-			path_flag = 0;
-			report_counter = 0;
-			break;
-		default:
-			if (path_counter < 1) {
-				path_flag = 1;
-				path_counter++;
-				goto START_scf_panic_loop;
-			}
-			SCF_PANIC_TRACE(__LINE__);
-			goto END_scf_panic_callb;
-		}
-
-/*
- * START_report_send
- */
-	START_report_send:
-
-		if (new_report) {
-			/* new report panic */
-			scf_cmd.cmd = CMD_REPORT;
-			scf_cmd.subcmd = SUB_SYSTEM_STATUS_RPT_NOPATH;
-		} else {
-			/* report panic */
-			scf_cmd.cmd = CMD_REPORT;
-			scf_cmd.subcmd = SUB_SYSTEM_STATUS_RPT;
-		}
-		bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-		sbuf.b[0] = REPORT_STAT_PANIC;
-		scf_cmd.scount = SCF_S_CNT_15;
-		scf_cmd.sbuf = &sbuf.b[0];
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		scf_p_send_cmd(&scf_cmd, statep);
-		scf_panic_exec_flag2 = 1;
-
-		/* Check command complete */
-		for (ii = 0; ii < scf_cmdend_wait_rcnt_panic; ii++) {
-			/* wait */
-			drv_usecwait(SCF_MIL2MICRO(scf_cmdend_wait_time_panic));
-
-			/* Get SCF status register */
-			status = SCF_P_DDI_GET16(statep->scf_regs_handle,
-				&statep->scf_regs->STATUS);
-			scf_panic_trc_status = status;
-
-			if (status & STATUS_CMD_COMPLETE) {
-				/* Command complete */
-				break;
-			}
-		}
-		SCF_P_DDI_PUT16(statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-
-		if (ii == scf_cmdend_wait_rcnt_panic) {
-			/* Not command complete */
-			if (report_counter < 1) {
-				report_counter++;
-				goto START_scf_panic_loop;
-			}
-			SCF_PANIC_TRACE(__LINE__);
-			goto END_scf_panic_callb;
-		}
-
-		switch ((status & STATUS_CMD_RTN_CODE) >> 4) {
-		case NORMAL_END:
-			/* command success */
-			report_succeeded = 1;
-			SCF_PANIC_TRACE(__LINE__);
-			goto END_scf_panic_callb;
-
-		case BUF_FUL:
-			counter--;
-			if (counter > 0) {
-				drv_usecwait(SCF_MIL2MICRO(scf_buf_ful_rtime));
-			}
-			break;
-
-		case RCI_BUSY:
-			counter--;
-			if (counter > 0) {
-				drv_usecwait(SCF_MIL2MICRO(scf_rci_busy_rtime));
-			}
-			break;
-
-		case INTERFACE:
-			counter--;
-			break;
-
-		case E_SCFC_NOPATH:
-			if (new_report == 0) {
-				path_flag = 1;
-				path_counter = 0;
-				goto START_scf_panic_loop;
-			}
-
-		default:
-			/* E_NOT_SUPPORT */
-			/* E_PARAM */
-			/* E_RCI_ACCESS */
-			/* RCI_NS */
-			goto END_scf_panic_callb;
-		}
-
-	} while (counter > 0);
-
-/*
- * END_scf_panic_callb
- */
-	END_scf_panic_callb:
-
-	scf_comtbl.scf_exec_p = save__exec_p;
-	if (report_succeeded) {
-		SCF_PANIC_TRACE(__LINE__);
-		scf_panic_reported = 1;
-	} else {
-		SCF_PANIC_TRACE(__LINE__);
-		cmn_err(CE_WARN, "%s: cannot report PANIC.\n", scf_driver_name);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_shutdown_callb()
- *
- * Description: Shutdown entry processing.
- *
- */
-/* ARGSUSED */
-void
-scf_shutdown_callb(int code)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_shutdown_callb() "
-	scf_state_t		*statep;
-	int			ret;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-
-	SCFDBGMSG1(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": start code = %d",
-		code);
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check panic exec or shutdown exec */
-	if ((scf_panic_exec_flag) || (scf_comtbl.scf_shutdown_exec_flag)) {
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "After Panic or shutdown");
-		goto END_scf_shutdown_callb99;
-	}
-
-	scf_comtbl.scf_shutdown_exec_flag = 1;
-
-	/* SCF command transmit sync stop */
-	ret = scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-	if (ret != 0) {
-		SC_DBG_DRV_TRACE(TC_SHUTDOWN|TC_ERR, __LINE__, "i_ioctl ", 8);
-		goto END_scf_shutdown_callb;
-	}
-
-	scf_comtbl.shutdown_start_reported = 1;
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-	sbuf.b[0] = REPORT_STAT_SHUTDOWN_START;
-	sbuf.b[1] = scf_poff_factor[scf_comtbl.poff_factor][0];
-	sbuf.b[2] = scf_poff_factor[scf_comtbl.poff_factor][1];
-	sbuf.b[3] = scf_poff_factor[scf_comtbl.poff_factor][2];
-	scf_cmd.cmd = CMD_REPORT;
-	scf_cmd.subcmd = SUB_SYSTEM_STATUS_RPT_NOPATH;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = (SCF_USE_S_BUF | SCF_USE_SP);
-	scf_comtbl.scf_last_report = SCF_SHUTDOWN_START;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-	if (ret != 0) {
-		SC_DBG_DRV_TRACE(TC_SHUTDOWN|TC_ERR, __LINE__, "shutdown", 8);
-		goto END_scf_shutdown_callb;
-	}
-	/* SCF command send sync re-stop */
-	ret = scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-	if (ret != 0) {
-		SC_DBG_DRV_TRACE(TC_SHUTDOWN|TC_ERR, __LINE__, "shutdown", 8);
-		goto END_scf_shutdown_callb;
-	}
-
-	/* Check alive check exec */
-	if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-		scf_cmd.cmd = CMD_ALIVE_CHECK;
-		scf_cmd.subcmd = SUB_ALIVE_STOP;
-		scf_cmd.scount = 0;
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = (SCF_USE_S_BUF | SCF_USE_SP);
-		ret = scf_send_cmd_check_bufful(&scf_cmd);
-		scf_comtbl.alive_running = SCF_ALIVE_STOP;
-		if (ret != 0) {
-			SC_DBG_DRV_TRACE(TC_SHUTDOWN|TC_ERR, __LINE__,
-				"shutdown", 8);
-			goto END_scf_shutdown_callb;
-		}
-		/* SCF command send sync re-stop */
-		ret = scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-	}
-
-/*
- * END_scf_shutdown_callb
- */
-END_scf_shutdown_callb:
-
-	if ((statep = scf_comtbl.scf_exec_p) == NULL) {
-		statep = scf_comtbl.scf_path_p;
-	}
-	scf_comtbl.scf_exec_p = 0;
-	scf_comtbl.scf_path_p = 0;
-	if (statep) {
-		/* Exec device interrupt disable */
-		scf_forbid_intr(statep);
-		scf_chg_scf(statep, PATH_STAT_STOP);
-	}
-
-	while (scf_comtbl.scf_wait_p) {
-		/* Standby device interrupt disable */
-		statep = scf_comtbl.scf_wait_p;
-		scf_comtbl.scf_wait_p = statep->next;
-		scf_forbid_intr(statep);
-		scf_chg_scf(statep, PATH_STAT_STOP);
-	}
-
-	/* SCF command send sync start */
-	(void) scf_make_send_cmd(&scf_cmd, SCF_USE_START);
-
-	/* DCSP interface stop */
-	scf_dscp_stop(FACTOR_PATH_STOP);
-
-/*
- * END_scf_shutdown_callb99
- */
-END_scf_shutdown_callb99:
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SCFDBGMSG(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_softintr()
- *
- * Description: Soft interrupt entry processing. (for DSCP callback)
- *
- */
-/* ARGSUSED */
-uint_t
-scf_softintr(caddr_t arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_softintr() "
-	uint_t			ret = DDI_INTR_CLAIMED;
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": start");
-
-	mutex_enter(&scf_comtbl.si_mutex);
-	if (scf_comtbl.scf_softintr_dscp_kicked == FLAG_ON) {
-		/* Lock driver mutex */
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		/* Check panic exec and shutdown exec */
-		if ((scf_panic_exec_flag == 0) &&
-			(scf_comtbl.scf_shutdown_exec_flag == 0)) {
-			scf_dscp_callback();
-		}
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		scf_comtbl.scf_softintr_dscp_kicked = FLAG_OFF;
-	}
-	mutex_exit(&scf_comtbl.si_mutex);
-
-	SCFDBGMSG(SCF_DBGFLAG_DSCP, SCF_FUNC_NAME ": end");
-	return (ret);
-}
-
-
-/*
- * scf_cmdwait_status_set()
- *
- * Description: Check and setting command status.
- *
- */
-void
-scf_cmdwait_status_set(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_cmdwait_status_set() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Set command wait status */
-	if (scf_comtbl.scf_pchg_event_sub == EVENT_SUB_PCHG_EXEC) {
-		scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_PCHG;
-	}
-
-	if (scf_comtbl.scf_poff_event_sub == EVENT_SUB_POFF_EXEC) {
-		scf_comtbl.scf_poff_event_sub = EVENT_SUB_POFF_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_POFF;
-	}
-
-	switch (scf_comtbl.scf_shut_event_sub) {
-	case EVENT_SUB_SHUT_EXEC:
-		scf_comtbl.scf_shut_event_sub = EVENT_SUB_SHUT_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_SHUT;
-		break;
-
-	case EVENT_SUB_EXEC:
-		scf_comtbl.scf_shut_event_sub = EVENT_SUB_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_SHUT;
-		break;
-
-	default:
-		break;
-	}
-
-	switch (scf_comtbl.scf_alive_event_sub) {
-	case EVENT_SUB_ALST_EXEC:
-		scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALST_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_ALST;
-		break;
-
-	case EVENT_SUB_ALSP_EXEC:
-		scf_comtbl.scf_alive_event_sub = EVENT_SUB_ALSP_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_ALSP;
-		break;
-
-	default:
-		break;
-	}
-
-	switch (scf_comtbl.scf_report_event_sub) {
-	case EVENT_SUB_REPORT_RUN_EXEC:
-		scf_comtbl.scf_report_event_sub = EVENT_SUB_REPORT_RUN_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_REPORT_RUN;
-		break;
-
-	case EVENT_SUB_REPORT_SHOT_EXEC:
-		scf_comtbl.scf_report_event_sub = EVENT_SUB_REPORT_SHUT_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_REPORT_SHUT;
-		break;
-
-	default:
-		break;
-	}
-
-	/* Set command wait status */
-	if (scf_comtbl.scf_domain_event_sub == EVENT_SUB_DOMAIN_EXEC) {
-		scf_comtbl.scf_domain_event_sub = EVENT_SUB_DOMAIN_WAIT;
-
-		/* Set command retry send flag */
-		scf_comtbl.scf_cmd_resend_req |= RESEND_DOMAIN;
-	}
-
-	if (scf_comtbl.scf_cmd_exec_flag) {
-		if (scf_comtbl.cmd_end_wait) {
-			/* Set command retry send flag */
-			scf_comtbl.scf_cmd_resend_req |= RESEND_IOCTL;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfinit.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/conf.h>
-#include <sys/kmem.h>
-#include <sys/devops.h>
-#include <sys/modctl.h>
-#include <sys/cmn_err.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-
-/*
- * character/block entry point structure
- */
-static struct cb_ops scf_cb_ops = {
-	scf_open,			/* open */
-	scf_close,			/* close */
-	nodev,				/* strategy */
-	nodev,				/* print */
-	nodev,				/* dump */
-	nodev,				/* read */
-	nodev,				/* write */
-	scf_ioctl,			/* ioctl */
-	nodev,				/* devmap */
-	nodev,				/* mmap */
-	nodev,				/* segmap */
-	nochpoll,			/* poll */
-	ddi_prop_op,			/* prop_op */
-	(struct streamtab *)NULL,	/* streamtab */
-	D_NEW | D_MP			/* flag */
-};
-
-/*
- * device operations structure
- */
-static struct dev_ops scf_dev_ops = {
-	DEVO_REV,			/* dev_ops revision */
-	0,				/* reference */
-	scf_getinfo,			/* getinfo */
-	nulldev,			/* identify */
-	nulldev,			/* probe */
-	scf_attach,			/* attach */
-	scf_detach,			/* detach */
-	nodev,				/* reset */
-	&scf_cb_ops,			/* cb_ops */
-	(struct bus_ops *)NULL,		/* bus_ops */
-	NULL				/* power entry */
-};
-
-/*
- * linkage structure for loadable driver
- */
-extern struct mod_ops mod_driverops;
-static struct modldrv scf_modldrv = {
-	&mod_driverops,			/* mod_driverops */
-	SCF_DRIVER_VERSION,		/* version number */
-	&scf_dev_ops			/* dev_ops */
-};
-
-/*
- * module linkage structure
- */
-static struct modlinkage scf_modlinkage = {
-	MODREV_1,			/* modlinkage revision */
-	(void *)&scf_modldrv,		/* linkage */
-	(void *)NULL			/* (end of linkage) */
-};
-
-/*
- * Function list
- */
-void	scf_free_resource(void);
-
-/*
- * _init()
- *
- * Description: Install and initialization processing of module.
- *
- */
-int
-_init(void)
-{
-#define	SCF_FUNC_NAME		"_init() "
-	int			error;
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	/* initialize software state */
-	error = ddi_soft_state_init(&scfstate, sizeof (scf_state_t), 0);
-	if (error != 0) {
-		cmn_err(CE_WARN, "%s: _init: ddi_soft_state_init failed.\n",
-			scf_driver_name);
-		goto END_init;
-	}
-
-	SCF_DBG_DRV_TRACE_INIT;
-
-	/* Last report code initialize */
-	scf_comtbl.scf_last_report = NOT_SEND_REPORT;
-
-	/* XSCF status initialize */
-	scf_comtbl.scf_status = SCF_STATUS_UNKNOWN;
-
-	/* allocate memory */
-	scf_comtbl.report_sensep =
-		(scfreport_t *)kmem_zalloc((size_t)(sizeof (scfreport_t) *
-		scf_report_sense_pool_max), KM_SLEEP);
-	scf_comtbl.getevent_sensep =
-		(scfevent_t *)kmem_zalloc((size_t)(sizeof (scfevent_t) *
-		scf_getevent_pool_max), KM_SLEEP);
-	scf_comtbl.resource_flag |= DID_ALLOCBUF;
-
-	/* initialize mutex */
-	mutex_init(&scf_comtbl.attach_mutex, NULL, MUTEX_DRIVER, 0);
-	scf_comtbl.resource_flag |= DID_MUTEX_ATH;
-	mutex_init(&scf_comtbl.si_mutex, NULL, MUTEX_DRIVER, 0);
-	scf_comtbl.resource_flag |= DID_MUTEX_SI;
-	mutex_init(&scf_comtbl.trc_mutex, NULL, MUTEX_DRIVER, 0);
-	scf_comtbl.resource_flag |= DID_MUTEX_TRC;
-
-	/* initialize cv */
-	cv_init(&scf_comtbl.cmd_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.cmdend_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.cmdwait_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.cmdbusy_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.rsense_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.rdcsense_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.rdctrl_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.getevent_cv, NULL, CV_DRIVER, NULL);
-	cv_init(&scf_comtbl.suspend_wait_cv, NULL, CV_DRIVER, NULL);
-	scf_comtbl.resource_flag |= DID_CV;
-
-	/* install module into system */
-	error = mod_install(&scf_modlinkage);
-	if (error != 0) {
-		cmn_err(CE_WARN, "%s: _init: mod_install failed.\n",
-			scf_driver_name);
-		/* release driver resources */
-		scf_free_resource();
-	}
-
-/*
- * END_init
- */
-	END_init:
-
-	SCFDBGMSG1(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end return = %d", error);
-	return (error);
-}
-
-
-/*
- * _fini()
- *
- * Description: Remove processing of module.
- *
- */
-int
-_fini(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"_fini() "
-	int			error;
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	/* remove module from system */
-	error = mod_remove(&scf_modlinkage);
-	if (error == 0) {
-		/* release driver resources */
-		scf_free_resource();
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end return = %d", error);
-	return (error);
-}
-
-
-/*
- * _info()
- *
- * Description: Return module information.
- *
- */
-int
-_info(struct modinfo *modinfop)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"_info() "
-	int			error;
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	/* return module infomarion */
-	error = mod_info(&scf_modlinkage, modinfop);
-
-	SCFDBGMSG1(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end return = %d", error);
-	return (error);
-}
-
-
-/*
- * scf_free_resource()
- *
- * Description: Release processing of driver resources.
- *
- */
-/* ARGSUSED */
-void
-scf_free_resource(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_free_resource() "
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": start");
-
-	SCF_DBG_IOMP_FREE;
-
-	/* System interface area release */
-	if (scf_comtbl.report_sensep != NULL) {
-		kmem_free((void *)scf_comtbl.report_sensep,
-			(size_t)(sizeof (scfreport_t) *
-			scf_report_sense_pool_max));
-		scf_comtbl.report_sensep = NULL;
-	}
-	if (scf_comtbl.getevent_sensep != NULL) {
-		kmem_free((void *)scf_comtbl.getevent_sensep,
-			(size_t)(sizeof (scfevent_t) * scf_getevent_pool_max));
-		scf_comtbl.getevent_sensep = NULL;
-	}
-	scf_comtbl.resource_flag &= (~DID_ALLOCBUF);
-
-	/* destroy cv */
-	if (scf_comtbl.resource_flag & DID_CV) {
-		cv_destroy(&scf_comtbl.cmd_cv);
-		cv_destroy(&scf_comtbl.cmdend_cv);
-		cv_destroy(&scf_comtbl.cmdwait_cv);
-		cv_destroy(&scf_comtbl.cmdbusy_cv);
-		cv_destroy(&scf_comtbl.rsense_cv);
-		cv_destroy(&scf_comtbl.rdcsense_cv);
-		cv_destroy(&scf_comtbl.rdctrl_cv);
-		cv_destroy(&scf_comtbl.getevent_cv);
-		cv_destroy(&scf_comtbl.suspend_wait_cv);
-		scf_comtbl.resource_flag &= (~DID_CV);
-	}
-
-	/* remove softint */
-	if (scf_comtbl.resource_flag & DID_SOFTINTR) {
-		ddi_remove_softintr(scf_comtbl.scf_softintr_id);
-		scf_comtbl.resource_flag &= (~DID_SOFTINTR);
-	}
-
-	/* destroy mutex */
-	if (scf_comtbl.resource_flag & DID_MUTEX_TRC) {
-		mutex_destroy(&scf_comtbl.trc_mutex);
-		scf_comtbl.resource_flag &= (~DID_MUTEX_TRC);
-	}
-	if (scf_comtbl.resource_flag & DID_MUTEX_ALL) {
-		mutex_destroy(&scf_comtbl.all_mutex);
-		scf_comtbl.resource_flag &= (~DID_MUTEX_ALL);
-	}
-	if (scf_comtbl.resource_flag & DID_MUTEX_SI) {
-		mutex_destroy(&scf_comtbl.si_mutex);
-		scf_comtbl.resource_flag &= (~DID_MUTEX_SI);
-	}
-	if (scf_comtbl.resource_flag & DID_MUTEX_ATH) {
-		mutex_destroy(&scf_comtbl.attach_mutex);
-		scf_comtbl.resource_flag &= (~DID_MUTEX_ATH);
-	}
-
-	/* release software state */
-	ddi_soft_state_fini(&scfstate);
-
-	SCFDBGMSG(SCF_DBGFLAG_DDI, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfiomp.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2286 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/errno.h>
-#include <sys/open.h>
-#include <sys/uio.h>
-#include <sys/cred.h>
-#include <sys/kmem.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-#ifdef DEBUG
-/*
- * Function list
- */
-void	scf_add_scf(scf_state_t *statep);
-void	scf_del_scf(scf_state_t *statep);
-int	scf_meta_ioctl(dev_t dev, int cmd, intptr_t arg, int mode,
-	cred_t *cred_p, int *rval_p, int u_mode);
-int	scf_inst_ioctl(dev_t dev, int cmd, intptr_t arg, int mode,
-	cred_t *cred_p, int *rval_p, int u_mode);
-void	scf_inst_getstat32(scf_state_t *statep,
-	struct fiompstatus_32 *status32_p, char *message_p, int flag);
-void	scf_inst_getstat(scf_state_t *statep,
-	struct fiompstatus *status_p, char *message_p, int flag);
-void	scf_path_stmsg(scf_state_t *statep, char *message_p);
-
-/*
- * External function
- */
-extern	void	scf_dscp_stop(uint32_t factor);
-
-
-/*
- *  Multi path control table add
- */
-void
-scf_add_scf(scf_state_t *statep)
-{
-#define	SCF_FUNC_NAME		"scf_add_scf() "
-	scf_state_t		**iomp_scf;
-	int			alloc_size;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start instance = %d",
-		statep->instance);
-
-	alloc_size = (sizeof (scf_state_t *) * (statep->instance + 1));
-	if (alloc_size < (sizeof (scf_state_t *) * SCF_MAX_INSTANCE)) {
-		alloc_size = (sizeof (scf_state_t *) * SCF_MAX_INSTANCE);
-	}
-	if ((scf_comtbl.alloc_size < alloc_size) ||
-		(scf_comtbl.iomp_scf == 0)) {
-		/* IOMP control table re-get */
-		iomp_scf = (scf_state_t **)kmem_zalloc((size_t)(alloc_size),
-			KM_SLEEP);
-		if (scf_comtbl.alloc_size != 0) {
-			bcopy(scf_comtbl.iomp_scf, iomp_scf,
-				scf_comtbl.alloc_size);
-			kmem_free((void *)scf_comtbl.iomp_scf,
-				(size_t)scf_comtbl.alloc_size);
-		}
-		scf_comtbl.iomp_scf = iomp_scf;
-		scf_comtbl.alloc_size = alloc_size;
-	}
-	scf_comtbl.iomp_scf[statep->instance] = statep;
-	/* SCF path count up */
-	if (scf_comtbl.path_num < (statep->instance + 1)) {
-		scf_comtbl.path_num = statep->instance + 1;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-/*
- * Multi path control table delete
- */
-void
-scf_del_scf(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_del_scf() "
-	int			ii;
-	int			path_num = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start instance = %d",
-		statep->instance);
-
-	scf_comtbl.iomp_scf[statep->instance] = 0;
-
-	/* SCF path count up */
-	for (ii = 0; ii < scf_comtbl.alloc_size / sizeof (scf_state_t *);
-		ii++) {
-		if (scf_comtbl.iomp_scf[ii]) {
-			path_num = scf_comtbl.iomp_scf[ii]->instance + 1;
-		}
-	}
-	scf_comtbl.path_num = path_num;
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Meta management ioctl
- */
-/* ARGSUSED */
-int
-scf_meta_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *cred_p,
-	int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_meta_ioctl() "
-	int			ret = 0;
-	int			all_num;
-	int			path_num;
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOMP,
-		SCF_FUNC_NAME ": start cmd = 0x%08x", (uint_t)cmd);
-
-	switch ((unsigned int)cmd) {
-	case FIOMPNEW:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPNEW proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPENCAP:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPENCAP proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPDEVINFO:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDEVINFO proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {
-			/* DDI_MODEL_ILP32 */
-			struct fiomp_devinfo_32 *fiomp_devinfo32_p;
-
-			fiomp_devinfo32_p =
-				(struct fiomp_devinfo_32 *)kmem_zalloc
-				((size_t)(sizeof (struct fiomp_devinfo_32)),
-					KM_SLEEP);
-
-			if (ddi_copyin((void *)arg,
-				(void *)fiomp_devinfo32_p,
-				sizeof (struct fiomp_devinfo_32), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EFAULT;
-				goto END_DEVINFO32;
-			}
-			if (fiomp_devinfo32_p->inst_no != 0) {
-				/* Invalid inst_no */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EINVAL;
-				goto END_DEVINFO32;
-			}
-			mutex_enter(&scf_comtbl.attach_mutex);
-			if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-				/* Not attach device */
-				path_num = 0;
-			} else {
-				/* Is attach device */
-				mutex_enter(&scf_comtbl.all_mutex);
-
-				path_num = scf_comtbl.path_num;
-
-				mutex_exit(&scf_comtbl.all_mutex);
-			}
-			mutex_exit(&scf_comtbl.attach_mutex);
-			/* Set output information */
-			strcpy(fiomp_devinfo32_p->real_name, SCF_REAL_NAME);
-			strcpy(fiomp_devinfo32_p->user_path, SCF_USER_PATH);
-			fiomp_devinfo32_p->path_num = path_num;
-			fiomp_devinfo32_p->mpmode = FIOMP_FALSE;
-			fiomp_devinfo32_p->autopath = FIOMP_TRUE;
-			fiomp_devinfo32_p->block = FIOMP_TRUE;
-			fiomp_devinfo32_p->needsync = FIOMP_FALSE;
-			if (ddi_copyout((void *)fiomp_devinfo32_p,
-				(void *)arg, sizeof (struct fiomp_devinfo_32),
-				mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EFAULT;
-			}
-
-/*
- * END_DEVINFO32
- */
-	END_DEVINFO32:
-
-			if (fiomp_devinfo32_p) {
-			kmem_free((void *)fiomp_devinfo32_p,
-				(size_t)(sizeof (struct fiomp_devinfo_32)));
-			}
-		} else {
-			/* DDI_MODEL_NONE */
-			struct fiomp_devinfo *fiomp_devinfo_p;
-
-			fiomp_devinfo_p =
-				(struct fiomp_devinfo *)kmem_zalloc
-				((size_t)(sizeof (struct fiomp_devinfo)),
-					KM_SLEEP);
-
-			if (ddi_copyin((void *)arg, (void *)fiomp_devinfo_p,
-				sizeof (struct fiomp_devinfo), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EFAULT;
-				goto END_DEVINFO;
-			}
-			if (fiomp_devinfo_p->inst_no != 0) {
-				/* Invalid inst_no */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EINVAL;
-				goto END_DEVINFO;
-			}
-			mutex_enter(&scf_comtbl.attach_mutex);
-			if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-				/* Not attach device */
-				path_num = 0;
-			} else {
-				/* Is attach device */
-				mutex_enter(&scf_comtbl.all_mutex);
-
-				path_num = scf_comtbl.path_num;
-
-				mutex_exit(&scf_comtbl.all_mutex);
-			}
-			mutex_exit(&scf_comtbl.attach_mutex);
-			/* Set output information */
-			strcpy(fiomp_devinfo_p->real_name,
-				SCF_REAL_NAME);
-			strcpy(fiomp_devinfo_p->user_path,
-				SCF_USER_PATH);
-			fiomp_devinfo_p->path_num = path_num;
-			fiomp_devinfo_p->mpmode = FIOMP_FALSE;
-			fiomp_devinfo_p->autopath = FIOMP_TRUE;
-			fiomp_devinfo_p->block = FIOMP_TRUE;
-			fiomp_devinfo_p->needsync = FIOMP_FALSE;
-			if (ddi_copyout((void *)fiomp_devinfo_p,
-				(void *)arg, sizeof (struct fiomp_devinfo),
-				mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"m_ioctl ", 8);
-				ret = EFAULT;
-			}
-
-/*
- * END_DEVINFO
- */
-	END_DEVINFO:
-
-			if (fiomp_devinfo_p) {
-			kmem_free((void *)fiomp_devinfo_p,
-				(size_t)(sizeof (struct fiomp_devinfo)));
-			}
-		}
-		break;
-
-	case FIOMPALLINSTNUM:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPALLINSTNUM proc");
-
-		mutex_enter(&scf_comtbl.attach_mutex);
-		/* Set output information */
-		if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-			/* Not attach device */
-			all_num = 0;
-		} else {
-			/* Is attach device */
-			all_num = 1;
-		}
-		mutex_exit(&scf_comtbl.attach_mutex);
-		if (ddi_copyout((void *)&all_num, (void *)arg,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"m_ioctl ", 8);
-			ret = EFAULT;
-		}
-		break;
-
-	case FIOMPALLDEVINFO:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPALLDEVINFO proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {
-			/* DDI_MODEL_ILP32 */
-			struct fiomp_all_devinfo_32 fiomp_all_devinfo32;
-			struct fiomp_devinfo_32 *fiomp_devinfo32_p;
-
-			fiomp_devinfo32_p =
-				(struct fiomp_devinfo_32 *)kmem_zalloc
-				((size_t)(sizeof (struct fiomp_devinfo_32)),
-					KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)&fiomp_all_devinfo32,
-		sizeof (struct fiomp_all_devinfo_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "m_ioctl ", 8);
-		ret = EFAULT;
-		goto END_ALLDEVINFO32;
-	}
-	if (fiomp_all_devinfo32.num != 1) {
-		/* Set 1 in num */
-		fiomp_all_devinfo32.num = 1;
-	} else {
-		if (ddi_copyin((void *)(uintptr_t)fiomp_all_devinfo32.devinfo,
-			(void *)fiomp_devinfo32_p,
-			sizeof (struct fiomp_devinfo_32),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"m_ioctl ", 8);
-			ret = EFAULT;
-			goto END_ALLDEVINFO32;
-		}
-		mutex_enter(&scf_comtbl.attach_mutex);
-		if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-			/* Not attach device */
-			path_num = 0;
-		} else {
-			/* Is attach device */
-			mutex_enter(&scf_comtbl.all_mutex);
-
-			path_num = scf_comtbl.path_num;
-
-			mutex_exit(&scf_comtbl.all_mutex);
-		}
-		mutex_exit(&scf_comtbl.attach_mutex);
-		/* Set output information */
-		fiomp_devinfo32_p->inst_no = 0;
-		strcpy(fiomp_devinfo32_p->real_name, SCF_REAL_NAME);
-		strcpy(fiomp_devinfo32_p->user_path, SCF_USER_PATH);
-		fiomp_devinfo32_p->path_num = path_num;
-		fiomp_devinfo32_p->mpmode = FIOMP_FALSE;
-		fiomp_devinfo32_p->autopath = FIOMP_TRUE;
-		fiomp_devinfo32_p->block = FIOMP_TRUE;
-		fiomp_devinfo32_p->needsync = FIOMP_FALSE;
-		if (ddi_copyout((void *)fiomp_devinfo32_p,
-			(void *)(uintptr_t)fiomp_all_devinfo32.devinfo,
-			sizeof (struct fiomp_devinfo_32), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"m_ioctl ", 8);
-			ret = EFAULT;
-			goto END_ALLDEVINFO32;
-		}
-	}
-	if (ddi_copyout((void *)&fiomp_all_devinfo32, (void *)arg,
-		sizeof (struct fiomp_all_devinfo_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "m_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_ALLDEVINFO32
- */
-	END_ALLDEVINFO32:
-
-			if (fiomp_devinfo32_p) {
-			kmem_free((void *)fiomp_devinfo32_p,
-				(size_t)(sizeof (struct fiomp_devinfo_32)));
-			}
-		} else {
-			/* DDI_MODEL_NONE */
-			struct fiomp_all_devinfo fiomp_all_devinfo;
-			struct fiomp_devinfo *fiomp_devinfo_p;
-
-			fiomp_devinfo_p =
-				(struct fiomp_devinfo *)kmem_zalloc
-				((size_t)(sizeof (struct fiomp_devinfo)),
-					KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)&fiomp_all_devinfo,
-		sizeof (struct fiomp_all_devinfo), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "m_ioctl ", 8);
-		ret = EFAULT;
-		goto END_ALLDEVINFO;
-	}
-	if (fiomp_all_devinfo.num != 1) {
-		/* Set 1 in num */
-		fiomp_all_devinfo.num = 1;
-	} else {
-		if (ddi_copyin((void *)fiomp_all_devinfo.devinfo,
-			(void *)fiomp_devinfo_p,
-			sizeof (struct fiomp_devinfo), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"m_ioctl ", 8);
-			ret = EFAULT;
-			goto END_ALLDEVINFO;
-		}
-		mutex_enter(&scf_comtbl.attach_mutex);
-		if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-			/* Not attach device */
-			path_num = 0;
-		} else {
-			/* Is attach device */
-			mutex_enter(&scf_comtbl.all_mutex);
-
-			path_num = scf_comtbl.path_num;
-
-			mutex_exit(&scf_comtbl.all_mutex);
-		}
-		mutex_exit(&scf_comtbl.attach_mutex);
-		/* Set output information */
-		fiomp_devinfo_p->inst_no = 0;
-		strcpy(fiomp_devinfo_p->real_name, SCF_REAL_NAME);
-		strcpy(fiomp_devinfo_p->user_path, SCF_USER_PATH);
-		fiomp_devinfo_p->path_num = path_num;
-		fiomp_devinfo_p->mpmode = FIOMP_FALSE;
-		fiomp_devinfo_p->autopath = FIOMP_TRUE;
-		fiomp_devinfo_p->block = FIOMP_TRUE;
-		fiomp_devinfo_p->needsync = FIOMP_FALSE;
-		if (ddi_copyout((void *)fiomp_devinfo_p,
-			(void *)fiomp_all_devinfo.devinfo,
-			sizeof (struct fiomp_devinfo), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"m_ioctl ", 8);
-			ret = EFAULT;
-			goto END_ALLDEVINFO;
-		}
-	}
-	if (ddi_copyout((void *)&fiomp_all_devinfo, (void *)arg,
-		sizeof (struct fiomp_all_devinfo), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "m_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_ALLDEVINFO
- */
-	END_ALLDEVINFO:
-
-			if (fiomp_devinfo_p) {
-			kmem_free((void *)fiomp_devinfo_p,
-				(size_t)(sizeof (struct fiomp_devinfo)));
-			}
-		}
-		break;
-
-	case FIOMPGETEVENT:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPGETEVENT proc");
-
-		ret = ENOTTY;
-		break;
-
-	default:
-		/* undefined */
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "undefined ioctl command");
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "m_ioctl ", 8);
-		ret = ENOTTY;
-	}
-
-/*
- * END_meta_ioctl
- */
-	END_meta_ioctl:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-/*
- * Instans management ioctl
- */
-/* ARGSUSED */
-int
-scf_inst_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *cred_p,
-	int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_inst_ioctl() "
-	scf_state_t		*statep;
-	scf_state_t		*wkstatep;
-	struct scf_cmd		scf_cmd;
-	int			ret = 0;
-	int			all_num;
-	int			pathnum;
-	int			ii;
-	int			jj;
-	int			num_cmp_flag = 0;
-	int			alloc_num;
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOMP,
-		SCF_FUNC_NAME ": start cmd = 0x%08x", (uint_t)cmd);
-
-	mutex_enter(&scf_comtbl.attach_mutex);
-	if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-		/* Not attach device */
-		mutex_exit(&scf_comtbl.attach_mutex);
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = ENXIO;
-		goto END_inst_ioctl;
-	}
-	mutex_exit(&scf_comtbl.attach_mutex);
-
-	switch ((unsigned int)cmd) {
-	case FIOMPMAXPATHNUM:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPMAXPATHNUM proc");
-
-		mutex_enter(&scf_comtbl.all_mutex);
-		/* Set output information */
-		all_num = scf_comtbl.path_num;
-		mutex_exit(&scf_comtbl.all_mutex);
-		if (ddi_copyout((void *)&all_num, (void *)arg,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-		}
-		break;
-
-	case FIOMPSETPROP:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPSETPROP proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPGETPROP:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPGETPROP proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {
-	/* DDI_MODEL_ILP32 */
-	struct fiompprop_32 fiompprop32;
-	char		*work_name_p = 0;
-	char		*iomp_name_p = 0;
-	char		*iomp_real_name_p = 0;
-	char		*iomp_user_path_p = 0;
-	char		*iomp_status_p = 0;
-	caddr32_t	*iomp_path_p = 0;
-	caddr32_t	*iomp_logical_path_p = 0;
-	caddr32_t	*iomp_path_status_p = 0;
-	caddr32_t	*iomp_path_block_p = 0;
-	char		*iomp_path = 0;
-	char		*iomp_logical_path = 0;
-	char		*iomp_path_status = 0;
-	char		*iomp_path_block = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiompprop32,
-		sizeof (struct fiompprop_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiompprop32.num;
-	iomp_name_p = (char *)kmem_zalloc((size_t)(FIOMP_MAX_STR),
-		KM_SLEEP);
-	iomp_real_name_p = (char *)kmem_zalloc((size_t)(FIOMP_MAX_STR),
-		KM_SLEEP);
-	iomp_user_path_p = (char *)kmem_zalloc((size_t)(FIOMP_MAX_STR),
-		KM_SLEEP);
-	iomp_status_p = (char *)kmem_zalloc((size_t)(FIOMP_MAX_STR),
-		KM_SLEEP);
-	if (fiompprop32.num != 0) {
-		/* buffer allocation */
-		work_name_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_path_p = (caddr32_t *)kmem_zalloc
-		((size_t)((sizeof (caddr32_t)) * alloc_num), KM_SLEEP);
-		iomp_logical_path_p = (caddr32_t *)kmem_zalloc
-		((size_t)((sizeof (caddr32_t)) * alloc_num), KM_SLEEP);
-		iomp_path_status_p = (caddr32_t *)kmem_zalloc
-		((size_t)((sizeof (caddr32_t)) * alloc_num), KM_SLEEP);
-		iomp_path_block_p = (caddr32_t *)kmem_zalloc
-		((size_t)((sizeof (caddr32_t)) * alloc_num), KM_SLEEP);
-		iomp_path = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_logical_path = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_path_status = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_path_block = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (fiompprop32.num != scf_comtbl.path_num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiompprop32.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-		/* Set output information */
-		strcpy(iomp_name_p, SCF_IOMP_NAME);
-		strcpy(iomp_real_name_p, SCF_REAL_NAME);
-		strcpy(iomp_user_path_p, SCF_USER_PATH);
-		if ((scf_comtbl.scf_path_p) || (scf_comtbl.scf_exec_p)) {
-			strcpy(iomp_status_p, "online");
-		} else if ((scf_comtbl.scf_stop_p) ||
-			(scf_comtbl.scf_err_p)) {
-			strcpy(iomp_status_p, "offline");
-		} else {
-			strcpy(iomp_status_p, "unconfigured");
-		}
-		for (ii = 0, jj = 0; ii < fiompprop32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			/* Output information setting every pass */
-			iomp_path[jj] = '\0';
-			iomp_logical_path[jj] = '\0';
-			iomp_path_status[jj] = '\0';
-			iomp_path_block[jj] = '\0';
-			if ((statep = scf_comtbl.iomp_scf[ii]) != 0) {
-				if (ddi_pathname(statep->dip,
-					work_name_p)) {
-					sprintf(&iomp_path[jj], "%s:scfc%d",
-						work_name_p, statep->instance);
-				}
-				sprintf(&iomp_logical_path[jj],
-					"/dev/FJSVhwr/scfc%d",
-					statep->instance);
-				switch (statep->path_status) {
-				case FIOMP_STAT_ACTIVE:
-					strcpy(&iomp_path_status[jj],
-						"active");
-					break;
-				case FIOMP_STAT_STANDBY:
-					strcpy(&iomp_path_status[jj],
-						"standby");
-					break;
-				case FIOMP_STAT_STOP:
-					strcpy(&iomp_path_status[jj],
-						"stop");
-					break;
-				case FIOMP_STAT_FAIL:
-					strcpy(&iomp_path_status[jj],
-						"fail");
-					break;
-				case FIOMP_STAT_DISCON:
-					strcpy(&iomp_path_status[jj],
-						"disconnected");
-					break;
-				default:
-					strcpy(&iomp_path_status[jj],
-						"empty");
-				}
-				strcpy(&iomp_path_block[jj], "block");
-			}
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if (num_cmp_flag == 0) {
-		if (ddi_copyout((void *)iomp_name_p,
-			(void *)(uintptr_t)fiompprop32.iomp_name,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP32;
-		}
-		if (ddi_copyout((void *)iomp_real_name_p,
-			(void *)(uintptr_t)fiompprop32.iomp_real_name,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP32;
-		}
-		if (ddi_copyout((void *)iomp_user_path_p,
-			(void *)(uintptr_t)fiompprop32.iomp_user_path,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP32;
-		}
-		if (ddi_copyout((void *)iomp_status_p,
-			(void *)(uintptr_t)fiompprop32.iomp_status,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP32;
-		}
-		if (fiompprop32.num) {
-			if (fiompprop32.iomp_path) {
-	if (ddi_copyin((void *)(uintptr_t)fiompprop32.iomp_path,
-		(void *)iomp_path_p,
-		((sizeof (caddr32_t)) * fiompprop32.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (fiompprop32.iomp_logical_path) {
-	if (ddi_copyin((void *)(uintptr_t)fiompprop32.iomp_logical_path,
-		(void *)iomp_logical_path_p,
-		((sizeof (caddr32_t)) * fiompprop32.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (fiompprop32.iomp_path_status) {
-	if (ddi_copyin((void *)(uintptr_t)fiompprop32.iomp_path_status,
-		(void *)iomp_path_status_p,
-		((sizeof (caddr32_t)) * fiompprop32.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (fiompprop32.iomp_path_block) {
-	if (ddi_copyin((void *)(uintptr_t)fiompprop32.iomp_path_block,
-		(void *)iomp_path_block_p,
-		((sizeof (caddr32_t)) * fiompprop32.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-		}
-		for (ii = 0, jj = 0; ii < fiompprop32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (iomp_path_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path[jj],
-		(void *)(uintptr_t)iomp_path_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (iomp_logical_path_p[ii]) {
-	if (ddi_copyout((void *)&iomp_logical_path[jj],
-		(void *)(uintptr_t)iomp_logical_path_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (iomp_path_status_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path_status[jj],
-		(void *)(uintptr_t)iomp_path_status_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-			if (iomp_path_block_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path_block[jj],
-		(void *)(uintptr_t)iomp_path_block_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP32;
-	}
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiompprop32, (void *)arg,
-		sizeof (struct fiompprop_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-			"i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_GETPROP32
- */
-	END_GETPROP32:
-
-	/* Buffer release */
-	if (work_name_p) {
-		kmem_free((void *)work_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_name_p) {
-		kmem_free((void *)iomp_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_real_name_p) {
-		kmem_free((void *)iomp_real_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_user_path_p) {
-		kmem_free((void *)iomp_user_path_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_status_p) {
-		kmem_free((void *)iomp_status_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_path_p) {
-		kmem_free((void *)iomp_path_p,
-			(size_t)((sizeof (caddr32_t)) * alloc_num));
-	}
-	if (iomp_logical_path_p) {
-		kmem_free((void *)iomp_logical_path_p,
-			(size_t)((sizeof (caddr32_t)) * alloc_num));
-	}
-	if (iomp_path_status_p) {
-		kmem_free((void *)iomp_path_status_p,
-			(size_t)((sizeof (caddr32_t)) * alloc_num));
-	}
-	if (iomp_path_block_p) {
-		kmem_free((void *)iomp_path_block_p,
-			(size_t)((sizeof (caddr32_t)) * alloc_num));
-	}
-	if (iomp_path) {
-		kmem_free((void *)iomp_path,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_logical_path) {
-		kmem_free((void *)iomp_logical_path,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_path_status) {
-		kmem_free((void *)iomp_path_status,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_path_block) {
-		kmem_free((void *)iomp_path_block,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-		} else {
-	/* DDI_MODEL_NONE */
-	struct fiompprop fiompprop;
-	char		*work_name_p = 0;
-	char		*iomp_name_p = 0;
-	char		*iomp_real_name_p = 0;
-	char		*iomp_user_path_p = 0;
-	char		*iomp_status_p = 0;
-	caddr_t		*iomp_path_p = 0;
-	caddr_t		*iomp_logical_path_p = 0;
-	caddr_t		*iomp_path_status_p = 0;
-	caddr_t		*iomp_path_block_p = 0;
-	char		*iomp_path = 0;
-	char		*iomp_logical_path = 0;
-	char		*iomp_path_status = 0;
-	char		*iomp_path_block = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiompprop,
-		sizeof (struct fiompprop), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiompprop.num;
-	if (fiompprop.num != 0) {
-	/* Buffer allocation */
-		work_name_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_name_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_real_name_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_user_path_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_status_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		iomp_path_p = (caddr_t *)kmem_zalloc
-		((size_t)((sizeof (caddr_t)) * alloc_num), KM_SLEEP);
-		iomp_logical_path_p = (caddr_t *)kmem_zalloc
-		((size_t)((sizeof (caddr_t)) * alloc_num), KM_SLEEP);
-		iomp_path_status_p = (caddr_t *)kmem_zalloc
-		((size_t)((sizeof (caddr_t)) * alloc_num), KM_SLEEP);
-		iomp_path_block_p = (caddr_t *)kmem_zalloc
-		((size_t)((sizeof (caddr_t)) * alloc_num), KM_SLEEP);
-		iomp_path = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_logical_path = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_path_status = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-		iomp_path_block = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (fiompprop.num != scf_comtbl.path_num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiompprop.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-	/* Set output information */
-		strcpy(iomp_name_p, SCF_IOMP_NAME);
-		strcpy(iomp_real_name_p, SCF_REAL_NAME);
-		strcpy(iomp_user_path_p, SCF_USER_PATH);
-		if ((scf_comtbl.scf_path_p) || (scf_comtbl.scf_exec_p)) {
-			strcpy(iomp_status_p, "online");
-		} else if ((scf_comtbl.scf_stop_p) || (scf_comtbl.scf_err_p)) {
-			strcpy(iomp_status_p, "offline");
-		} else {
-			strcpy(iomp_status_p, "unconfigured");
-		}
-		for (ii = 0, jj = 0; ii < fiompprop.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			/* Output information setting every pass */
-			iomp_path[jj] = '\0';
-			iomp_logical_path[jj] = '\0';
-			iomp_path_status[jj] = '\0';
-			iomp_path_block[jj] = '\0';
-			if ((statep = scf_comtbl.iomp_scf[ii]) != 0) {
-				if (ddi_pathname(statep->dip, work_name_p)) {
-					sprintf(&iomp_path[jj], "%s:scfc%d",
-						work_name_p, statep->instance);
-				}
-				sprintf(&iomp_logical_path[jj],
-					"/dev/FJSVhwr/scfc%d",
-					statep->instance);
-				switch (statep->path_status) {
-				case FIOMP_STAT_ACTIVE:
-					strcpy(&iomp_path_status[jj],
-						"active");
-					break;
-				case FIOMP_STAT_STANDBY:
-					strcpy(&iomp_path_status[jj],
-						"standby");
-					break;
-				case FIOMP_STAT_STOP:
-					strcpy(&iomp_path_status[jj],
-						"stop");
-					break;
-				case FIOMP_STAT_FAIL:
-					strcpy(&iomp_path_status[jj],
-						"fail");
-					break;
-				case FIOMP_STAT_DISCON:
-					strcpy(&iomp_path_status[jj],
-						"disconnected");
-					break;
-				default:
-					strcpy(&iomp_path_status[jj],
-						"empty");
-				}
-				strcpy(&iomp_path_block[jj], "block");
-			}
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if (num_cmp_flag == 0) {
-		if (ddi_copyout((void *)iomp_name_p,
-			(void *)fiompprop.iomp_name,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP;
-		}
-		if (ddi_copyout((void *)iomp_real_name_p,
-			(void *)fiompprop.iomp_real_name,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP;
-		}
-		if (ddi_copyout((void *)iomp_user_path_p,
-			(void *)fiompprop.iomp_user_path,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP;
-		}
-		if (ddi_copyout((void *)iomp_status_p,
-			(void *)fiompprop.iomp_status,
-			FIOMP_MAX_STR, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETPROP;
-		}
-		if (fiompprop.num) {
-			if (fiompprop.iomp_path) {
-	if (ddi_copyin((void *)fiompprop.iomp_path,
-		(void *)iomp_path_p,
-		((sizeof (caddr_t)) * fiompprop.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (fiompprop.iomp_logical_path) {
-	if (ddi_copyin((void *)fiompprop.iomp_logical_path,
-		(void *)iomp_logical_path_p,
-		((sizeof (caddr_t)) * fiompprop.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (fiompprop.iomp_path_status) {
-	if (ddi_copyin((void *)fiompprop.iomp_path_status,
-		(void *)iomp_path_status_p,
-		((sizeof (caddr_t)) * fiompprop.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (fiompprop.iomp_path_block) {
-	if (ddi_copyin((void *)fiompprop.iomp_path_block,
-		(void *)iomp_path_block_p,
-		((sizeof (caddr_t)) * fiompprop.num), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-		}
-		for (ii = 0, jj = 0; ii < fiompprop.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (iomp_path_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path[jj],
-		(void *)iomp_path_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (iomp_logical_path_p[ii]) {
-	if (ddi_copyout((void *)&iomp_logical_path[jj],
-		(void *)iomp_logical_path_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (iomp_path_status_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path_status[jj],
-		(void *)iomp_path_status_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-			if (iomp_path_block_p[ii]) {
-	if (ddi_copyout((void *)&iomp_path_block[jj],
-		(void *)iomp_path_block_p[ii],
-		FIOMP_MAX_STR, mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_GETPROP;
-	}
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiompprop, (void *)arg,
-		sizeof (struct fiompprop), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_GETPROP
- */
-	END_GETPROP:
-
-	/* Buffer release */
-	if (work_name_p) {
-		kmem_free((void *)work_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_name_p) {
-		kmem_free((void *)iomp_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_real_name_p) {
-		kmem_free((void *)iomp_real_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_user_path_p) {
-		kmem_free((void *)iomp_user_path_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_status_p) {
-		kmem_free((void *)iomp_status_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (iomp_path_p) {
-		kmem_free((void *)iomp_path_p,
-			(size_t)((sizeof (caddr_t)) * alloc_num));
-	}
-	if (iomp_logical_path_p) {
-		kmem_free((void *)iomp_logical_path_p,
-			(size_t)((sizeof (caddr_t)) * alloc_num));
-	}
-	if (iomp_path_status_p) {
-		kmem_free((void *)iomp_path_status_p,
-			(size_t)((sizeof (caddr_t)) * alloc_num));
-	}
-	if (iomp_path_block_p) {
-		kmem_free((void *)iomp_path_block_p,
-			(size_t)((sizeof (caddr_t)) * alloc_num));
-	}
-	if (iomp_path) {
-		kmem_free((void *)iomp_path,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_logical_path) {
-		kmem_free((void *)iomp_logical_path,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_path_status) {
-		kmem_free((void *)iomp_path_status,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	if (iomp_path_block) {
-		kmem_free((void *)iomp_path_block,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-	}
-		break;
-
-	case FIOMPDESTROY:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDESTROY proc");
-		ret = ENOTTY;
-		break;
-
-	case FIOMPSTOP:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPSTOP proc");
-
-		if (ddi_copyin((void *)arg, (void *)&pathnum,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_inst_ioctl;
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (pathnum == FIOMP_PATH_ALL) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EINVAL;
-
-			mutex_exit(&scf_comtbl.all_mutex);
-			goto END_inst_ioctl;
-		} else {
-			/* PATH appointment */
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid PATH */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_inst_ioctl;
-			}
-	if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-		/* SCF command send sync stop */
-		ret = scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-		if (ret != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			goto END_STOP;
-		}
-		if ((statep->path_status != FIOMP_STAT_ACTIVE) &&
-			(statep->path_status != FIOMP_STAT_STANDBY)) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EINVAL;
-		} else {
-			if (statep->path_status == FIOMP_STAT_ACTIVE) {
-				/* Exec SCF device appointment */
-				if (scf_comtbl.scf_wait_p == 0) {
-					/* Last deveice stop is error */
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EINVAL;
-				} else {
-					/* Device interrupt disable */
-					scf_forbid_intr(statep);
-					scf_chg_scf(statep, FIOMP_STAT_STOP);
-					/* Send path change command */
-					statep = scf_comtbl.scf_wait_p;
-					scf_comtbl.scf_wait_p = statep->next;
-					scf_chg_scf(statep, FIOMP_STAT_ACTIVE);
-					scf_comtbl.scf_exec_p = 0;
-					scf_comtbl.scf_path_p = 0;
-					scf_comtbl.scf_pchg_event_sub =
-						EVENT_SUB_PCHG_WAIT;
-					scf_next_cmd_check(statep);
-
-					/* DCSP interface stop */
-					scf_dscp_stop(FACTOR_PATH_CHG);
-				}
-			} else {
-				/* Not exec device appointment */
-				scf_del_queue(statep);
-				scf_forbid_intr(statep);
-				scf_chg_scf(statep, FIOMP_STAT_STOP);
-			}
-		}
-/*
- * END_STOP
- */
-	END_STOP:
-
-		/* SCF command send sync start */
-		(void) scf_make_send_cmd(&scf_cmd, SCF_USE_START);
-	} else {
-		/* Appointed path is already out of managemen */
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EINVAL;
-	}
-		}
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case FIOMPSTART:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPSTART proc");
-
-		if (ddi_copyin((void *)arg, (void *)&pathnum,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_inst_ioctl;
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (pathnum == FIOMP_PATH_ALL) {
-			/* PATH_ALL appointment */
-			if ((statep = scf_comtbl.scf_stop_p) != 0) {
-	/* Check stop queue */
-	scf_comtbl.scf_stop_p = 0;
-	while (statep) {
-		wkstatep = statep->next;
-		/* Interupt disable */
-		scf_permit_intr(statep, 1);
-		if ((scf_comtbl.scf_path_p) ||
-			(scf_comtbl.scf_exec_p)) {
-			scf_chg_scf(statep, FIOMP_STAT_STANDBY);
-		} else {
-			if (scf_comtbl.watchdog_after_resume) {
-				scf_comtbl.alive_running = SCF_ALIVE_START;
-				scf_comtbl.watchdog_after_resume = 0;
-			}
-			scf_chg_scf(statep, FIOMP_STAT_ACTIVE);
-			/* Send path change command */
-			scf_comtbl.scf_exec_p = 0;
-			scf_comtbl.scf_path_p = 0;
-
-			scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-			scf_next_cmd_check(statep);
-		}
-		statep = wkstatep;
-	}
-			}
-		} else {
-			/* PATH appointment */
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid PATH */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_inst_ioctl;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				if (statep->path_status == FIOMP_STAT_STOP) {
-	/* Check stop queue */
-	scf_del_queue(statep);
-	/* Interrupt enable */
-	scf_permit_intr(statep, 1);
-	if ((scf_comtbl.scf_path_p) ||
-		(scf_comtbl.scf_exec_p)) {
-		scf_chg_scf(statep, FIOMP_STAT_STANDBY);
-	} else {
-		if (scf_comtbl.watchdog_after_resume) {
-			scf_comtbl.alive_running = SCF_ALIVE_START;
-			scf_comtbl.watchdog_after_resume = 0;
-		}
-		scf_chg_scf(statep, FIOMP_STAT_ACTIVE);
-		/* Send path change command */
-		scf_comtbl.scf_exec_p = 0;
-		scf_comtbl.scf_path_p = 0;
-		scf_comtbl.scf_pchg_event_sub = EVENT_SUB_PCHG_WAIT;
-		scf_next_cmd_check(statep);
-	}
-				} else {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EINVAL;
-				}
-			} else {
-				/* Appointed path is already out of managemen */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-			}
-		}
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case FIOMPRECOVER:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPRECOVER proc");
-
-		if (ddi_copyin((void *)arg, (void *)&pathnum,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_inst_ioctl;
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (pathnum == FIOMP_PATH_ALL) {
-			/* PATH_ALL appointment */
-
-			/* Check fail queue */
-			if ((statep = scf_comtbl.scf_err_p) != 0) {
-				scf_comtbl.scf_err_p = 0;
-				while (statep) {
-					wkstatep = statep->next;
-					/* Interrupt enable */
-					scf_forbid_intr(statep);
-					statep->scf_herr = 0;
-					statep->tesum_rcnt = 0;
-					statep->resum_rcnt = 0;
-					statep->cmd_to_rcnt = 0;
-					scf_chg_scf(statep, FIOMP_STAT_STOP);
-					statep = wkstatep;
-				}
-			}
-		} else {
-			/* PATH appointment */
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid PATH */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_inst_ioctl;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				if (statep->path_status == FIOMP_STAT_FAIL) {
-					scf_del_queue(statep);
-					scf_forbid_intr(statep);
-					statep->scf_herr = 0;
-					statep->tesum_rcnt = 0;
-					statep->resum_rcnt = 0;
-					statep->cmd_to_rcnt = 0;
-					scf_chg_scf(statep, FIOMP_STAT_STOP);
-				} else {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EINVAL;
-				}
-			} else {
-				/* Appointed path is already out of managemen */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-			}
-		}
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case FIOMPLIST:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPLIST proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {
-	/* DDI_MODEL_ILP32 */
-	struct fiompdev_32 fiompdev32;
-	char		*work_name_p = 0;
-	caddr32_t	*devs_p = 0;
-	char		*devs = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiompdev32,
-		sizeof (struct fiompdev_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	if (fiompdev32.api_level != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EINVAL;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiompdev32.num;
-	if (fiompdev32.num != 0) {
-	/* Buffer allocation */
-		work_name_p = (char *)kmem_zalloc((size_t)(FIOMP_MAX_STR),
-			KM_SLEEP);
-		devs_p = (caddr32_t *)kmem_zalloc
-		((size_t)((sizeof (caddr32_t)) * alloc_num), KM_SLEEP);
-		devs = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (fiompdev32.num != scf_comtbl.path_num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiompdev32.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-	/* Set output information */
-		fiompdev32.inst_no = 0;
-		fiompdev32.inst_minor = SCF_INST_INSTANCE;
-		fiompdev32.user_minor = SCF_USER_INSTANCE;
-		fiompdev32.mpmode = FIOMP_FALSE;
-		fiompdev32.autopath = FIOMP_TRUE;
-		fiompdev32.needsync = FIOMP_FALSE;
-		for (ii = 0, jj = 0; ii < fiompdev32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			/* Output information setting every pass */
-			devs[jj] = '\0';
-			if ((statep = scf_comtbl.iomp_scf[ii]) != 0) {
-				if (ddi_pathname(statep->dip, work_name_p)) {
-					sprintf(&devs[jj], "%s:scfc%d",
-						work_name_p, statep->instance);
-				}
-			}
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if ((num_cmp_flag == 0) && (fiompdev32.num != 0)) {
-		if (fiompdev32.devs) {
-			if (ddi_copyin((void *)(uintptr_t)fiompdev32.devs,
-				(void *)devs_p,
-				((sizeof (caddr32_t)) * fiompdev32.num),
-				mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_LIST32;
-			}
-		}
-		for (ii = 0, jj = 0; ii < fiompdev32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (devs_p[ii]) {
-				if (ddi_copyout((void *)&devs[jj],
-					(void *)(uintptr_t)devs_p[ii],
-					FIOMP_MAX_STR, mode) != 0) {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EFAULT;
-					goto END_LIST32;
-				}
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiompdev32, (void *)arg,
-		sizeof (struct fiompdev_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_LIST32
- */
-	END_LIST32:
-
-	/* Buffer release */
-	if (work_name_p) {
-		kmem_free((void *)work_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (devs_p) {
-		kmem_free((void *)devs_p,
-			(size_t)((sizeof (caddr32_t)) * alloc_num));
-	}
-	if (devs) {
-		kmem_free((void *)devs,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-		} else {
-	/* DDI_MODEL_NONE */
-	struct fiompdev fiompdev;
-	char		*work_name_p = 0;
-	caddr_t		*devs_p = 0;
-	char		*devs = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiompdev,
-		sizeof (struct fiompdev), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	if (fiompdev.api_level != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EINVAL;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiompdev.num;
-	if (fiompdev.num != 0) {
-		/* Buffer allocation */
-		work_name_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-		devs_p = (caddr_t *)kmem_zalloc
-		((size_t)((sizeof (caddr_t)) * alloc_num), KM_SLEEP);
-		devs = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (fiompdev.num != scf_comtbl.path_num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiompdev.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-	/* Set output information */
-		fiompdev.inst_no = 0;
-		fiompdev.inst_minor = SCF_INST_INSTANCE;
-		fiompdev.user_minor = SCF_USER_INSTANCE;
-		fiompdev.mpmode = FIOMP_FALSE;
-		fiompdev.autopath = FIOMP_TRUE;
-		fiompdev.needsync = FIOMP_FALSE;
-		for (ii = 0, jj = 0; ii < fiompdev.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			/* Output information setting every pass */
-			devs[jj] = '\0';
-			if ((statep = scf_comtbl.iomp_scf[ii]) != 0) {
-				if (ddi_pathname(statep->dip, work_name_p)) {
-					sprintf(&devs[jj], "%s:scfc%d",
-						work_name_p, statep->instance);
-				}
-			}
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if ((num_cmp_flag == 0) && (fiompdev.num != 0)) {
-		if (fiompdev.devs) {
-			if (ddi_copyin((void *)fiompdev.devs,
-				(void *)devs_p,
-				((sizeof (caddr_t)) * fiompdev.num),
-				mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_LIST;
-			}
-		}
-		for (ii = 0, jj = 0; ii < fiompdev.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (devs_p[ii]) {
-				if (ddi_copyout((void *)&devs[jj],
-					(void *)devs_p[ii],
-					FIOMP_MAX_STR, mode) != 0) {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EFAULT;
-					goto END_LIST;
-				}
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiompdev, (void *)arg,
-		sizeof (struct fiompdev), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_LIST
- */
-	END_LIST:
-
-	/* Buffer release */
-	if (work_name_p) {
-		kmem_free((void *)work_name_p, (size_t)FIOMP_MAX_STR);
-	}
-	if (devs_p) {
-		kmem_free((void *)devs_p,
-			(size_t)((sizeof (caddr_t)) * alloc_num));
-	}
-	if (devs) {
-		kmem_free((void *)devs,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-		}
-		break;
-
-	case FIOMPSTATUS:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPSTATUS proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {	/* DDI_MODEL_ILP32 */
-			struct fiompstatus_32 fiompstatus32;
-			char		*message_p;
-
-			message_p = (char *)kmem_zalloc
-			((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-
-			if (ddi_copyin((void *)arg, (void *)&fiompstatus32,
-				sizeof (struct fiompstatus_32), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_STATUS32;
-			}
-			pathnum = fiompstatus32.pathnum;
-			if (pathnum == FIOMP_PATH_ALL) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				goto END_STATUS32;
-			}
-			mutex_enter(&scf_comtbl.all_mutex);
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid path */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_STATUS32;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				scf_inst_getstat32(statep, &fiompstatus32,
-					message_p, 1);
-			} else {
-				/*
-				 * Appointed path is already out of management
-				 */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_STATUS32;
-			}
-			mutex_exit(&scf_comtbl.all_mutex);
-			if (ddi_copyout((void *)message_p,
-				(void *)(uintptr_t)fiompstatus32.message,
-				FIOMP_MAX_STR, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_STATUS32;
-			}
-
-			if (ddi_copyout((void *)&fiompstatus32, (void *)arg,
-				sizeof (struct fiompstatus_32), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-			}
-
-/*
- * END_STATUS32
- */
-	END_STATUS32:
-
-			if (message_p) {
-				kmem_free((void *)message_p,
-					(size_t)FIOMP_MAX_STR);
-			}
-		} else {				/* DDI_MODEL_NONE */
-			struct fiompstatus fiompstatus;
-			char		*message_p;
-
-			message_p = (char *)kmem_zalloc
-			((size_t)(FIOMP_MAX_STR), KM_SLEEP);
-
-			if (ddi_copyin((void *)arg, (void *)&fiompstatus,
-				sizeof (struct fiompstatus), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_STATUS;
-			}
-			pathnum = fiompstatus.pathnum;
-			if (pathnum == FIOMP_PATH_ALL) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				goto END_STATUS;
-			}
-			mutex_enter(&scf_comtbl.all_mutex);
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid path */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_STATUS;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				scf_inst_getstat(statep, &fiompstatus,
-					message_p, 1);
-			} else {
-				/*
-				 * Appointed path is already out of managemen
-				 */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_STATUS;
-			}
-			mutex_exit(&scf_comtbl.all_mutex);
-			if (ddi_copyout((void *)message_p,
-				(void *)fiompstatus.message,
-				FIOMP_MAX_STR, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_STATUS;
-			}
-
-			if (ddi_copyout((void *)&fiompstatus,
-				(void *)arg, sizeof (struct fiompstatus),
-				mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-			}
-
-/*
- * END_STATUS
- */
-	END_STATUS:
-
-			if (message_p) {
-				kmem_free((void *)message_p,
-					(size_t)FIOMP_MAX_STR);
-			}
-		}
-		break;
-
-	case FIOMPADD:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPADD proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPDEL:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDEL proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPACTIVE:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPACTIVE proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPDISCONNECT:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDISCONNECT proc");
-
-		if (ddi_copyin((void *)arg, (void *)&pathnum,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_inst_ioctl;
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (pathnum == FIOMP_PATH_ALL) {
-			/* PATH_ALL appointment */
-
-			/* Check stop queue */
-			if ((statep = scf_comtbl.scf_stop_p) != 0) {
-				scf_comtbl.scf_stop_p = 0;
-				while (statep) {
-					wkstatep = statep->next;
-					scf_chg_scf(statep, FIOMP_STAT_DISCON);
-					statep = wkstatep;
-				}
-			}
-			/* Check fail queue */
-			if ((statep = scf_comtbl.scf_err_p) != 0) {
-				scf_comtbl.scf_err_p = 0;
-				while (statep) {
-					wkstatep = statep->next;
-					scf_chg_scf(statep, FIOMP_STAT_DISCON);
-					statep = wkstatep;
-				}
-			}
-		} else {
-			/* PATH appointment */
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid path */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_inst_ioctl;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				if ((statep->path_status == FIOMP_STAT_STOP) ||
-					(statep->path_status ==
-					FIOMP_STAT_FAIL)) {
-					scf_del_queue(statep);
-					scf_chg_scf(statep, FIOMP_STAT_DISCON);
-				} else {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EINVAL;
-				}
-			} else {
-				/* Appointed path is already out of managemen */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-			}
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case FIOMPCONNECT:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPCONNECT proc");
-
-		if (ddi_copyin((void *)arg, (void *)&pathnum,
-			sizeof (int), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_inst_ioctl;
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (pathnum == FIOMP_PATH_ALL) {
-			/* PATH_ALL appointment */
-
-			/* Check disconnect queue */
-			if ((statep = scf_comtbl.scf_disc_p) != 0) {
-				scf_comtbl.scf_disc_p = 0;
-				while (statep) {
-					wkstatep = statep->next;
-					if (statep->scf_herr) {
-						scf_chg_scf(statep,
-							FIOMP_STAT_FAIL);
-					} else {
-						scf_chg_scf(statep,
-							FIOMP_STAT_STOP);
-					}
-					statep = wkstatep;
-				}
-			}
-		} else {
-			/* PATH appointment */
-			if (scf_comtbl.path_num < (pathnum + 1)) {
-				/* Invalid path */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-				mutex_exit(&scf_comtbl.all_mutex);
-				goto END_inst_ioctl;
-			}
-			if ((statep = scf_comtbl.iomp_scf[pathnum]) != 0) {
-				if (statep->path_status == FIOMP_STAT_DISCON) {
-					scf_del_queue(statep);
-					if (statep->scf_herr) {
-						scf_chg_scf(statep,
-							FIOMP_STAT_FAIL);
-					} else {
-						scf_chg_scf(statep,
-							FIOMP_STAT_STOP);
-					}
-				} else {
-					SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR,
-						__LINE__, "i_ioctl ", 8);
-					ret = EINVAL;
-				}
-			} else {
-				/* Appointed path is already out of managemen */
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EINVAL;
-			}
-		}
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case FIOMPSTANDBY:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPSTANDBY proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPBLOCK:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPBLOCK proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPUNBLOCK:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPUNBLOCK proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPDIAGON:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDIAGON proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPDIAGOFF:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPDIAGOFF proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPGETALLSTAT:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPGETALLSTAT proc");
-
-		if (u_mode == DDI_MODEL_ILP32) {
-	/* DDI_MODEL_ILP32 */
-	struct fiomp_all_stat_32 fiomp_all_stat32;
-	struct fiompstatus_32 *fiompstatus32_p = 0;
-	char		*message_p = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiomp_all_stat32,
-		sizeof (struct fiomp_all_stat_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiomp_all_stat32.num;
-	if (fiomp_all_stat32.num != 0) {
-		/* Buffer allocation */
-		fiompstatus32_p =
-			(struct fiompstatus_32 *)kmem_zalloc
-			((size_t)((sizeof (struct fiompstatus_32)) * alloc_num),
-				KM_SLEEP);
-		message_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	if (fiomp_all_stat32.num != 0) {
-		if (ddi_copyin((void *)(uintptr_t)fiomp_all_stat32.status,
-			(void *)fiompstatus32_p,
-			((sizeof (struct fiompstatus_32)) *
-			fiomp_all_stat32.num), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETALLSTAT32;
-		}
-	}
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (scf_comtbl.path_num != fiomp_all_stat32.num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiomp_all_stat32.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-		/* Output information setting every pass */
-		for (ii = 0, jj = 0; ii < fiomp_all_stat32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			statep = scf_comtbl.iomp_scf[ii];
-			scf_inst_getstat32(statep, &fiompstatus32_p[ii],
-				&message_p[jj], 1);
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if (num_cmp_flag == 0 && fiomp_all_stat32.num != 0) {
-		if (ddi_copyout((void *)fiompstatus32_p,
-			(void *)(uintptr_t)fiomp_all_stat32.status,
-			((sizeof (struct fiompstatus_32)) *
-			fiomp_all_stat32.num), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETALLSTAT32;
-		}
-		for (ii = 0, jj = 0; ii < fiomp_all_stat32.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (ddi_copyout((void *)&message_p[jj],
-				(void *)(uintptr_t)fiompstatus32_p[ii].message,
-				FIOMP_MAX_STR, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_GETALLSTAT32;
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiomp_all_stat32, (void *)arg,
-		sizeof (struct fiomp_all_stat_32), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_GETALLSTAT32
- */
-	END_GETALLSTAT32:
-
-	/* Buffer release */
-	if (fiompstatus32_p) {
-		kmem_free((void *)fiompstatus32_p,
-			(size_t)((sizeof (struct fiompstatus_32)) * alloc_num));
-	}
-	if (message_p) {
-		kmem_free((void *)message_p,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-		} else {
-	/* DDI_MODEL_NONE */
-	struct fiomp_all_stat fiomp_all_stat;
-	struct fiompstatus *fiompstatus_p = 0;
-	char		*message_p = 0;
-
-	if (ddi_copyin((void *)arg, (void *)&fiomp_all_stat,
-		sizeof (struct fiomp_all_stat), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-		goto END_inst_ioctl;
-	}
-	alloc_num = fiomp_all_stat.num;
-	if (fiomp_all_stat.num != 0) {
-		/* Buffer allocation */
-		fiompstatus_p =
-			(struct fiompstatus *)kmem_zalloc
-			((size_t)((sizeof (struct fiompstatus)) * alloc_num),
-				KM_SLEEP);
-		message_p = (char *)kmem_zalloc
-		((size_t)(FIOMP_MAX_STR * alloc_num), KM_SLEEP);
-	}
-
-	if (fiomp_all_stat.num != 0) {
-		if (ddi_copyin((void *)fiomp_all_stat.status,
-			(void *)fiompstatus_p,
-			((sizeof (struct fiompstatus)) * fiomp_all_stat.num),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETALLSTAT;
-		}
-	}
-	mutex_enter(&scf_comtbl.all_mutex);
-	if (scf_comtbl.path_num != fiomp_all_stat.num) {
-		/*
-		 * When different from appointed num, perform only num setting
-		 */
-		fiomp_all_stat.num = scf_comtbl.path_num;
-		num_cmp_flag = 1;
-	} else {
-		/* Output information setting every pass */
-		for (ii = 0, jj = 0; ii < fiomp_all_stat.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			statep = scf_comtbl.iomp_scf[ii];
-			scf_inst_getstat(statep, &fiompstatus_p[ii],
-				&message_p[jj], 1);
-		}
-	}
-	mutex_exit(&scf_comtbl.all_mutex);
-	if (num_cmp_flag == 0 && fiomp_all_stat.num != 0) {
-		if (ddi_copyout((void *)fiompstatus_p,
-			(void *)fiomp_all_stat.status,
-			((sizeof (struct fiompstatus)) * fiomp_all_stat.num),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"i_ioctl ", 8);
-			ret = EFAULT;
-			goto END_GETALLSTAT;
-		}
-		for (ii = 0, jj = 0; ii < fiomp_all_stat.num;
-			ii++, jj += FIOMP_MAX_STR) {
-			if (ddi_copyout((void *)&message_p[jj],
-				(void *)fiompstatus_p[ii].message,
-				FIOMP_MAX_STR, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"i_ioctl ", 8);
-				ret = EFAULT;
-				goto END_GETALLSTAT;
-			}
-		}
-	}
-	if (ddi_copyout((void *)&fiomp_all_stat, (void *)arg,
-		sizeof (struct fiomp_all_stat), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_GETALLSTAT
- */
-	END_GETALLSTAT:
-
-	/* Buffer release */
-	if (fiompstatus_p) {
-		kmem_free((void *)fiompstatus_p,
-			(size_t)((sizeof (struct fiompstatus)) * alloc_num));
-	}
-	if (message_p) {
-		kmem_free((void *)message_p,
-			(size_t)(FIOMP_MAX_STR * alloc_num));
-	}
-		}
-		break;
-
-	case FIOMPCHG:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPCHG proc");
-
-		ret = ENOTTY;
-		break;
-
-	case FIOMPGETEVENT:
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "FIOMPGETEVENT proc");
-
-		ret = ENOTTY;
-		break;
-
-	default:
-		/* undefined */
-		SCFDBGMSG(SCF_DBGFLAG_IOMP, "undefined ioctl command");
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "i_ioctl ", 8);
-		ret = ENOTTY;
-	}
-
-/*
- * END_inst_ioctl
- */
-	END_inst_ioctl:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-/*
- * Make path status : FIOMPSTATUS, FIOMPGETALLSTAT : 32bit-64bit
- */
-void
-scf_inst_getstat32(scf_state_t *statep, struct fiompstatus_32 *status32_p,
-	char *message_p, int flag)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_inst_getstat32() "
-	int			path_status;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": start");
-
-	if (statep) {
-		if (flag) {
-			/* Current status */
-			path_status = statep->path_status;
-		} else {
-			/* Former status */
-			path_status = statep->old_path_status;
-		}
-		/* Set status */
-		switch (path_status) {
-		case FIOMP_STAT_ACTIVE:
-			status32_p->status = FIOMP_STAT_ACTIVE;
-			break;
-		case FIOMP_STAT_STANDBY:
-			status32_p->status = FIOMP_STAT_STANDBY;
-			break;
-		case FIOMP_STAT_STOP:
-			status32_p->status = FIOMP_STAT_STOP;
-			break;
-		case FIOMP_STAT_DISCON:
-			status32_p->status = FIOMP_STAT_DISCON;
-			break;
-		case FIOMP_STAT_FAIL:
-			status32_p->status = FIOMP_STAT_FAIL;
-			break;
-		default:
-			status32_p->status = FIOMP_STAT_EMPTY;
-		}
-		/* IOMP details message making */
-		scf_path_stmsg(statep, message_p);
-	} else {
-		status32_p->status = FIOMP_STAT_EMPTY;
-		message_p[0] = '\0';
-	}
-	status32_p->block_status = FIOMP_BSTAT_BLOCK;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": end");
-}
-
-/*
- * Make path status : FIOMPSTATUS, FIOMPGETALLSTAT : 64bit-64bit/32bit-32bit
- */
-void
-scf_inst_getstat(scf_state_t *statep, struct fiompstatus *status_p,
-	char *message_p, int flag)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_inst_getstat() "
-	int			path_status;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": start");
-
-	if (statep) {
-		if (flag) {
-			/* Current status */
-			path_status = statep->path_status;
-		} else {
-			/* Former status */
-			path_status = statep->old_path_status;
-		}
-		/* Set status */
-		switch (path_status) {
-		case FIOMP_STAT_ACTIVE:
-			status_p->status = FIOMP_STAT_ACTIVE;
-			break;
-		case FIOMP_STAT_STANDBY:
-			status_p->status = FIOMP_STAT_STANDBY;
-			break;
-		case FIOMP_STAT_STOP:
-			status_p->status = FIOMP_STAT_STOP;
-			break;
-		case FIOMP_STAT_DISCON:
-			status_p->status = FIOMP_STAT_DISCON;
-			break;
-		case FIOMP_STAT_FAIL:
-			status_p->status = FIOMP_STAT_FAIL;
-			break;
-		default:
-			status_p->status = FIOMP_STAT_EMPTY;
-		}
-		/* IOMP details message making */
-		scf_path_stmsg(statep, message_p);
-	} else {
-		status_p->status = FIOMP_STAT_EMPTY;
-		message_p[0] = '\0';
-	}
-	status_p->block_status = FIOMP_BSTAT_BLOCK;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": end");
-}
-
-/*
- * IOMP details message making
- */
-void
-scf_path_stmsg(scf_state_t *statep, char *message_p)
-
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_path_stmsg() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": start");
-
-	if (statep->scf_herr & HERR_TESUM) {
-		strcpy(message_p, "Command error");
-	} else if (statep->scf_herr & HERR_RESUM) {
-		strcpy(message_p, "Sumcheck error");
-	} else if (statep->scf_herr & HERR_CMD_RTO) {
-		strcpy(message_p, "Command timeout");
-	} else if (statep->scf_herr & HERR_BUSY_RTO) {
-		strcpy(message_p, "Command busy timeout");
-	} else if (statep->scf_herr & HERR_DSCP_INTERFACE) {
-		strcpy(message_p, "SCF communication path error");
-	} else if (statep->scf_herr & HERR_DSCP_ACKTO) {
-		strcpy(message_p, "DSCP ack response timeout");
-	} else if (statep->scf_herr & HERR_DSCP_ENDTO) {
-		strcpy(message_p, "DSCP end response timeout");
-	} else {
-		strcpy(message_p, "Good");
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_IOMP, SCF_FUNC_NAME ": end");
-}
-#endif
--- a/usr/src/uts/sun4u/opl/io/scfd/scfkstat.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-#include <sys/kmem.h>
-#include <sys/file.h>
-#include <sys/errno.h>
-#include <sys/open.h>
-#include <sys/cred.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-#include <sys/kstat.h>
-
-#include <sys/scfd/scfparam.h>
-
-
-/*
- * for kstat_named_create(9F)
- */
-typedef struct _scf_kstat_named_list {
-	char		*name;
-	uchar_t		data_type;
-} scf_kstat_named_list;
-
-static scf_kstat_named_list scf_kstat_system_list[] = {
-	{SCF_STATUS_KSTAT_NAMED,	KSTAT_DATA_CHAR},
-	{SCF_BOOT_MODE_KSTAT_NAMED,	KSTAT_DATA_CHAR},
-	{SCF_SECURE_MODE_KSTAT_NAMED,	KSTAT_DATA_CHAR},
-	{SCF_EVENT_KSTAT_NAMED,		KSTAT_DATA_CHAR},
-	{SCF_ALIVE_KSTAT_NAMED,		KSTAT_DATA_CHAR},
-};
-
-
-/*
- * prototype
- */
-static	kstat_t	*scf_kstat_named_init(char *name,
-	scf_kstat_named_list *kstat_list, int ndata,
-	int (*update)(struct kstat *, int));
-static	int	scf_kstat_sys_update(kstat_t *ksp, int rw);
-
-
-/*
- * from scf_attach()
- */
-/* DDI_ATTACH */
-void
-scf_kstat_init()
-{
-#define	SCF_FUNC_NAME		"scf_kstat_init() "
-	scf_kstat_private_t	*private;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.attach_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": start");
-
-	private = scf_comtbl.kstat_private =
-		kmem_zalloc(sizeof (scf_kstat_private_t), KM_SLEEP);
-
-	/* NAMED state */
-	private->ksp_scf = scf_kstat_named_init(SCF_SYSTEM_KSTAT_NAME,
-		scf_kstat_system_list, SCF_KSTAT_SYS_NAMED_NDATA,
-		scf_kstat_sys_update);
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * from scf_detach()
- */
-/* DDI_DETACH */
-void
-scf_kstat_fini()
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_kstat_fini() "
-	scf_kstat_private_t	*private = scf_comtbl.kstat_private;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.attach_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": start");
-
-	if (private->ksp_scf != NULL) {
-		kstat_delete(private->ksp_scf);
-	}
-
-	kmem_free(private, sizeof (scf_kstat_private_t));
-
-	scf_comtbl.kstat_private = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_kstat_named_init()
- *	  kstat_create(KSTAT_TYPE_NAMED) + kstat_named_init() + kstat_install()
- */
-static kstat_t *
-scf_kstat_named_init(char *name, scf_kstat_named_list *kstat_list, int ndata,
-	int (*update)(struct kstat *, int))
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_kstat_named_init() "
-	kstat_t			*scf_ksp;
-	kstat_named_t		*scf_named_ksp;
-	int			ii;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.attach_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": start");
-
-	scf_ksp = kstat_create(SCF_DRIVER_NAME, 0, name, "misc",
-		KSTAT_TYPE_NAMED, ndata, KSTAT_FLAG_PERSISTENT);
-	if (scf_ksp == NULL) {
-		cmn_err(CE_WARN, "%s: kstat_create failed.", scf_driver_name);
-		return (NULL);
-	}
-	scf_named_ksp = (kstat_named_t *)(scf_ksp->ks_data);
-
-	/*
-	 * initialize the named kstat
-	 */
-	for (ii = 0; ii < ndata; ii++, scf_named_ksp++) {
-		kstat_named_init(scf_named_ksp, kstat_list[ii].name,
-			kstat_list[ii].data_type);
-	}
-
-	scf_ksp->ks_update = update;
-	scf_ksp->ks_lock = (void *)&(scf_comtbl.all_mutex);
-
-	scf_ksp->ks_private = &scf_comtbl;
-
-	kstat_install(scf_ksp);
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": end");
-	return (scf_ksp);
-}
-
-
-/*
- * "scf" update
- */
-static int
-scf_kstat_sys_update(kstat_t *ksp, int rw)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_kstat_sys_update() "
-	kstat_named_t		*sysksp;
-	scf_comtbl_t		*softsp;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": start");
-
-	sysksp = (kstat_named_t *)ksp->ks_data;
-	softsp = (scf_comtbl_t *)ksp->ks_private;
-
-	/* this is a read-only kstat */
-	if (rw == KSTAT_WRITE) {
-		return (EACCES);
-	}
-
-	if (softsp->scf_status == SCF_STATUS_ONLINE) {
-		sysksp[SCF_KSTAT_SYS_NAMED_STATUS].value.c[0] =
-			SCF_STAT_STATUS_ONLINE;
-	} else {
-		sysksp[SCF_KSTAT_SYS_NAMED_STATUS].value.c[0] =
-			SCF_STAT_STATUS_OFFLINE;
-	}
-
-	if ((softsp->scf_mode_sw & STATUS_BOOT_MODE) == STATUS_MODE_AUTO_BOOT) {
-		sysksp[SCF_KSTAT_SYS_NAMED_BOOT_MODE].value.c[0] =
-			SCF_STAT_MODE_LOCK;
-	} else {
-		sysksp[SCF_KSTAT_SYS_NAMED_BOOT_MODE].value.c[0] =
-			SCF_STAT_MODE_UNLOCK;
-	}
-
-	if ((softsp->scf_mode_sw & STATUS_SECURE_MODE) == STATUS_MODE_LOCK) {
-		sysksp[SCF_KSTAT_SYS_NAMED_SECURE_MODE].value.c[0] =
-			SCF_STAT_MODE_AUTO_BOOT;
-	} else {
-		sysksp[SCF_KSTAT_SYS_NAMED_SECURE_MODE].value.c[0] =
-			SCF_STAT_MODE_OBP_STOP;
-	}
-
-	sysksp[SCF_KSTAT_SYS_NAMED_EVENT].value.c[0] =
-		(char)softsp->last_event[4];
-	sysksp[SCF_KSTAT_SYS_NAMED_ALIVE].value.c[0] =
-		softsp->alive_running;
-
-	SCFDBGMSG(SCF_DBGFLAG_KSTAT, SCF_FUNC_NAME ": end");
-	return (0);
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfops.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3401 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/errno.h>
-#include <sys/open.h>
-#include <sys/uio.h>
-#include <sys/cred.h>
-#include <sys/kmem.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfio32.h>
-
-/*
- * Function list
- */
-int	scf_open(dev_t *devp, int flag, int otyp, cred_t *cred_p);
-int	scf_close(dev_t dev, int flag, int otyp, cred_t *cred_p);
-int	scf_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *cred_p,
-	int *rval_p);
-int	scf_ioc_reportstat(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_clearlcd(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_wrlcd(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_getdiskled(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_setdiskled(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_getsdownreason(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_optiondisp(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_getpciconfig(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_hac(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_hstadrsinfo(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_rdclistmax(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_rdclistx(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_rdctrl(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_opecall(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_getreport(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_rcipwr(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_panicreq(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_panicchk(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_parmset(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_parmget(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrset(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrget(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrclr(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrfpoff(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrexset(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_autopwrexget(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_dr(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_eventlist(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_getevent(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_setmadmevent(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_remcscmd(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_remcsfile(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_sparecmd(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_ioc_setphpinfo(intptr_t arg, int mode, int *rval_p, int u_mode);
-int	scf_push_reportsense(unsigned int rci_addr, unsigned char *sense,
-	time_t timestamp);
-int	scf_pop_reportsense(scfreport_t *rsense);
-int	scf_push_getevent(unsigned char *event_p);
-int	scf_pop_getevent(scfevent_t *event_p);
-int	scf_valid_date(int year, int month, int date);
-int	scf_check_pon_time(scfautopwrtime_t *ptime);
-int	scf_check_poff_time(scfautopwrtime_t *ptime);
-
-/*
- * scf_open()
- *
- * Description: Driver open() entry processing.
- *
- */
-/* ARGSUSED */
-int
-scf_open(dev_t *devp, int flag, int otyp, cred_t *cred_p)
-{
-#define	SCF_FUNC_NAME		"scf_open() "
-	int			ret = 0;
-	int			instance;
-
-	SCFDBGMSG1(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": start instance = %d",
-		getminor(*devp));
-	SC_DBG_DRV_TRACE(TC_OPEN|TC_IN, __LINE__, NULL, 0);
-
-	/* get instance */
-	instance = getminor(*devp);
-	if (SCF_CHECK_INSTANCE(instance)) {
-		/* is the device character ? */
-		if (otyp != OTYP_CHR) {
-			SC_DBG_DRV_TRACE(TC_OPEN|TC_ERR, __LINE__,
-				"open    ", 8);
-			ret = EINVAL;
-		}
-	} else {
-		SC_DBG_DRV_TRACE(TC_OPEN|TC_ERR, __LINE__, "open    ", 8);
-		ret = EINVAL;
-	}
-
-	SC_DBG_DRV_TRACE(TC_OPEN|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG1(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * close entry
- */
-/* ARGSUSED */
-int
-scf_close(dev_t dev, int flag, int otyp, cred_t *cred_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_close() "
-	int			ret = 0;
-
-	SCFDBGMSG1(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": start instance = %d",
-		getminor(dev));
-	SC_DBG_DRV_TRACE(TC_CLOSE|TC_IN, __LINE__, NULL, 0);
-
-	SC_DBG_DRV_TRACE(TC_CLOSE|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG(SCF_DBGFLAG_OPCLS, SCF_FUNC_NAME ": end");
-	return (ret);
-}
-
-
-/*
- * scf_ioctl()
- *
- * Description: Driver ioctl() entry processing.
- *
- */
-int
-scf_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *cred_p,
-	int *rval_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioctl() "
-	int			ret = 0;
-	int			instance;
-	int			u_mode;
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start instance = %d",
-		getminor(dev));
-	SC_DBG_DRV_TRACE(TC_IOCTL|TC_IN, __LINE__, &cmd, sizeof (int));
-
-#ifdef _MULTI_DATAMODEL
-	/* DDI_MODEL_ILP32: SCF driver 64bit, upper 32bit */
-	/* DDI_MODEL_NONE : SCF driver64bit, upper 64bit */
-	u_mode = ddi_model_convert_from(mode & FMODELS);
-#else /* ! _MULTI_DATAMODEL */
-	/* DDI_MODEL_NONE : SCF driver 32bit, upper 32bit */
-	u_mode = DDI_MODEL_NONE;
-#endif /* _MULTI_DATAMODEL */
-
-	/* get instance */
-	instance = getminor(dev);
-
-	SCF_DBG_IOMP_PROC;
-
-	if (instance == SCF_USER_INSTANCE) {
-
-		mutex_enter(&scf_comtbl.attach_mutex);
-		if (!(scf_comtbl.resource_flag & DID_MUTEX_ALL)) {
-			/* Not attach device */
-			SCFDBGMSG(SCF_DBGFLAG_IOCTL, "Not attach device");
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			mutex_exit(&scf_comtbl.attach_mutex);
-			ret = ENXIO;
-			goto END_ioctl;
-		}
-		mutex_exit(&scf_comtbl.attach_mutex);
-
-		if (drv_priv(cred_p) != 0) {
-			/* Not super-user */
-			if ((cmd != SCFIOCHSTADRSINFO) &&
-				(cmd != SCFIOCRDCLISTMAX) &&
-				(cmd != SCFIOCRDCLISTX)) {
-				SCFDBGMSG(SCF_DBGFLAG_IOCTL, "Not super-user");
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"ioctl   ", 8);
-				ret = EPERM;
-				goto END_ioctl;
-			}
-		}
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		/* Suspend flag check */
-		if (scf_comtbl.suspend_flag) {
-			SCFDBGMSG(SCF_DBGFLAG_IOCTL, "suspend execute");
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = EBUSY;
-			goto END_ioctl;
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		SCF_DBG_IOCTL_PROC;
-
-		switch ((uint_t)cmd) {
-		/*
-		 * RAS control interface
-		 */
-		case SCFIOCREPORTSTAT:
-			ret = scf_ioc_reportstat(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCCLEARLCD:
-			ret = scf_ioc_clearlcd(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCWRLCD:
-			ret = scf_ioc_wrlcd(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCGETDISKLED:
-			ret = scf_ioc_getdiskled(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCSETDISKLED:
-			ret = scf_ioc_setdiskled(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCGETSDOWNREASON:
-			ret = scf_ioc_getsdownreason(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * System infomarion interface
-		 */
-		case SCFIOCOPTIONDISP:
-			ret = scf_ioc_optiondisp(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCGETPCICONFIG:
-			ret = scf_ioc_getpciconfig(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * RCI control interface
-		 */
-		case SCFIOCHAC:
-			ret = scf_ioc_hac(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCHSTADRSINFO:
-			ret = scf_ioc_hstadrsinfo(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCRDCLISTMAX:
-			ret = scf_ioc_rdclistmax(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCRDCLISTX:
-			ret = scf_ioc_rdclistx(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCRDCTRL:
-			ret = scf_ioc_rdctrl(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCOPECALL:
-			ret = scf_ioc_opecall(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCGETREPORT:
-			ret = scf_ioc_getreport(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCRCIPWR:
-			ret = scf_ioc_rcipwr(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCPANICREQ:
-			ret = scf_ioc_panicreq(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCPANICCHK:
-			ret = scf_ioc_panicchk(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCPARMSET:
-			ret = scf_ioc_parmset(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCPARMGET:
-			ret = scf_ioc_parmget(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * APCS control interface
-		 */
-		case SCFIOCAUTOPWRSET:
-			ret = scf_ioc_autopwrset(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCAUTOPWRGET:
-		case SCFIOCSYSAUTOPWRGET:
-			ret = scf_ioc_autopwrget(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCSYSAUTOPWRCLR:
-			ret = scf_ioc_autopwrclr(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCAUTOPWRFPOFF:
-			ret = scf_ioc_autopwrfpoff(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCAUTOPWREXSET:
-			ret = scf_ioc_autopwrexset(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCAUTOPWREXGET:
-			ret = scf_ioc_autopwrexget(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * FJDR control interface
-		 */
-		case SCFIOCDR:
-			ret = scf_ioc_dr(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * MADM REMCS interface
-		 */
-		case SCFIOCEVENTLIST:
-			ret = scf_ioc_eventlist(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCGETEVENT:
-			ret = scf_ioc_getevent(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCSETMADMEVENT:
-			ret = scf_ioc_setmadmevent(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCREMCSCMD:
-			ret = scf_ioc_remcscmd(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCREMCSFILE:
-			ret = scf_ioc_remcsfile(arg, mode, rval_p, u_mode);
-			break;
-
-		case SCFIOCSPARECMD:
-			ret = scf_ioc_sparecmd(arg, mode, rval_p, u_mode);
-			break;
-
-		/*
-		 * Kernel interface
-		 */
-		case SCFIOCSETPHPINFO:
-			ret = scf_ioc_setphpinfo(arg, mode, rval_p, u_mode);
-			break;
-
-		default:
-			SCFDBGMSG(SCF_DBGFLAG_IOCTL, "undefined ioctl command");
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = ENOTTY;
-			break;
-		}
-	} else {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = ENXIO;
-	}
-
-/*
- * END_ioctl
- */
-	END_ioctl:
-
-	if (scf_comtbl.resource_flag & DID_MUTEX_ALL) {
-		/*
-		 * untimeout() processing of the timer which stopped a timer by
-		 * ioctl processing
-		 * Call of driver mutex status is prohibited.
-		 */
-		/* Lock driver mutex */
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		/* Collect the timers which need to be stopped */
-		tm_stop_cnt = scf_timer_stop_collect(save_tmids,
-			SCF_TIMERCD_MAX);
-
-		/* Unlock driver mutex */
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		/* Timer stop */
-		if (tm_stop_cnt != 0) {
-			scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-		}
-	}
-
-	SC_DBG_DRV_TRACE(TC_IOCTL|TC_OUT, __LINE__, &ret, sizeof (int));
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_reportstat()
- *
- * Description: SCFIOCREPORTSTAT ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_reportstat(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_reportstat() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scf_state_t		*wk_statep;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-	switch (arg) {
-	case SCF_SHUTDOWN_START:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scf_comtbl.shutdown_start_reported = 1;
-		sbuf.b[0] = REPORT_STAT_SHUTDOWN_START;
-		sbuf.b[1] = scf_poff_factor[scf_comtbl.poff_factor][0];
-		sbuf.b[2] = scf_poff_factor[scf_comtbl.poff_factor][1];
-		sbuf.b[3] = scf_poff_factor[scf_comtbl.poff_factor][2];
-		break;
-
-	case SCF_SYSTEM_RUNNING:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		sbuf.b[0] = REPORT_STAT_SYSTEM_RUNNING;
-		sbuf.b[1] = 0;
-		sbuf.b[2] = 0;
-		sbuf.b[3] = 0;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_reportstat;
-	}
-
-	if ((scf_comtbl.scf_report_event_sub == EVENT_SUB_REPORT_RUN_WAIT) ||
-		(scf_comtbl.scf_report_event_sub ==
-		EVENT_SUB_REPORT_SHUT_WAIT)) {
-		scf_comtbl.scf_report_event_sub = EVENT_SUB_NONE;
-	}
-
-	scf_cmd.cmd = CMD_REPORT;
-	scf_cmd.subcmd = SUB_SYSTEM_STATUS_RPT;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-	scf_comtbl.scf_last_report = arg;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if ((ret == EBUSY) &&
-		(scf_cmd.stat0 == SCF_STAT0_NOT_PATH) &&
-		(arg == SCF_SHUTDOWN_START)) {
-		wk_statep = scf_comtbl.scf_stop_p;
-		ret = EIO;
-		if (wk_statep != NULL) {
-			scf_del_queue(wk_statep);
-			/* Interrupt enable */
-			scf_permit_intr(wk_statep, 1);
-			scf_chg_scf(wk_statep, PATH_STAT_ACTIVE);
-			scf_comtbl.scf_exec_p = wk_statep;
-			/* SCF command send sync stop */
-			ret = scf_make_send_cmd(&scf_cmd, SCF_USE_STOP);
-			if (ret == 0) {
-				/* new report shutdown */
-				scf_cmd.subcmd = SUB_SYSTEM_STATUS_RPT_NOPATH;
-				scf_cmd.flag = (SCF_USE_S_BUF | SCF_USE_SP);
-				ret = scf_send_cmd_check_bufful(&scf_cmd);
-				if (ret == 0) {
-					/*
-					 * SCF command send sync re-stop
-					 */
-					ret = scf_make_send_cmd(&scf_cmd,
-						SCF_USE_STOP);
-				}
-			}
-			/* FIOMPSTART exec status */
-			if ((wk_statep == scf_comtbl.scf_exec_p) ||
-				(wk_statep == scf_comtbl.scf_path_p)) {
-				if (scf_comtbl.watchdog_after_resume) {
-					/*
-					 * Alive check status recovery
-					 */
-					scf_comtbl.alive_running =
-						SCF_ALIVE_START;
-					scf_comtbl.watchdog_after_resume = 0;
-				}
-				scf_chg_scf(wk_statep, PATH_STAT_ACTIVE);
-				/* SCF path change send */
-				scf_comtbl.scf_exec_p = 0;
-				scf_comtbl.scf_path_p = 0;
-				scf_comtbl.scf_pchg_event_sub =
-					EVENT_SUB_PCHG_WAIT;
-				scf_next_cmd_check(wk_statep);
-			}
-			/* SCF command send sync start */
-			(void) scf_make_send_cmd(&scf_cmd, SCF_USE_START);
-		}
-	}
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_reportstat
- */
-	END_reportstat:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_clearlcd()
- *
- * Description: SCFIOCCLEARLCD ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_clearlcd(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_clearlcd() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	int			ii;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scf_cmd.cmd = CMD_PHASE;
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	switch (arg) {
-	case SCF_CLRLCD_SEQ:
-		scf_cmd.subcmd = SUB_PHASE_PRINT;
-		scf_cmd.scount = 1;
-		scf_cmd.sbuf = &sbuf.b[0];
-
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		for (ii = 0; ii < SCF_WRLCD_MAX; ii++) {
-			scf_comtbl.lcd_seq_mes[ii] = '\0';
-			sbuf.b[ii] = '\0';
-		}
-
-		ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		break;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_wrlcd()
- *
- * Description: SCFIOCWRLCD ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_wrlcd(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_wrlcd() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfwrlcd_t		scfwrlcd;
-	scfwrlcd32_t		scfwrlcd32;
-	int			ii;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (u_mode == DDI_MODEL_ILP32) {
-		/* DDI_MODEL_ILP32 */
-		if (ddi_copyin((void *)arg, (void *)&scfwrlcd32,
-			sizeof (scfwrlcd32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_wrlcd;
-		}
-		scfwrlcd.lcd_type = scfwrlcd32.lcd_type;
-		scfwrlcd.length = scfwrlcd32.length;
-		scfwrlcd.string = (unsigned char *)(uintptr_t)scfwrlcd32.string;
-	} else {
-		/* DDI_MODEL_NONE */
-		if (ddi_copyin((void *)arg, (void *)&scfwrlcd,
-			sizeof (scfwrlcd_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_wrlcd;
-		}
-	}
-
-	if (scfwrlcd.length < 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_wrlcd;
-	}
-	if (scfwrlcd.length > SCF_WRLCD_MAX) {
-		scfwrlcd.length = SCF_WRLCD_MAX;
-	}
-	for (ii = 0; ii < SCF_WRLCD_MAX + 1; ii++) {
-		sbuf.b[ii] = '\0';
-	}
-	sbuf.b[scfwrlcd.length] = '\0';
-
-	if (ddi_copyin((void *)scfwrlcd.string, (void *)&sbuf.b[0],
-		(size_t)scfwrlcd.length, mode)) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_wrlcd;
-	}
-
-	scf_cmd.cmd = CMD_PHASE;
-	scf_cmd.scount = scfwrlcd.length + 1;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	switch (scfwrlcd.lcd_type) {
-	case SCF_WRLCD_SEQ:
-		scf_cmd.subcmd = SUB_PHASE_PRINT;
-
-		mutex_enter(&scf_comtbl.all_mutex);
-		bcopy((void *)&sbuf.b[0], (void *)&scf_comtbl.lcd_seq_mes[0],
-			SCF_WRLCD_MAX);
-
-		ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		break;
-	}
-
-/*
- * END_wrlcd
- */
-	END_wrlcd:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_getdiskled()
- *
- * Description: SCFIOCGETDISKLED ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_getdiskled(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_getdiskled() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-	scfiocgetdiskled_t	*scfiocgetdiskled_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocgetdiskled_p = kmem_zalloc((size_t)(sizeof (scfiocgetdiskled_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocgetdiskled_p,
-		sizeof (scfiocgetdiskled_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_getdiskled;
-	}
-
-	scf_cmd.cmd = CMD_DOMAIN_INFO;
-	scf_cmd.subcmd = SUB_DISK_LED_DISP;
-	scf_cmd.sbuf = &scfiocgetdiskled_p->path[0];
-	scf_cmd.scount = SCF_DISK_LED_PATH_MAX;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.rcount = SCF_S_CNT_15;
-	scf_cmd.flag = SCF_USE_LSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		scfiocgetdiskled_p->led = rbuf.b[0];
-
-		if (ddi_copyout((void *)scfiocgetdiskled_p, (void *)arg,
-			sizeof (scfiocgetdiskled_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_getdiskled
- */
-	END_getdiskled:
-
-	if (scfiocgetdiskled_p) {
-		kmem_free((void *)scfiocgetdiskled_p,
-			(size_t)(sizeof (scfiocgetdiskled_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_setdiskled()
- *
- * Description: SCFIOCSETDISKLED ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_setdiskled(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_setdiskled() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfiocgetdiskled_t	*scfiocgetdiskled_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocgetdiskled_p = kmem_zalloc((size_t)(sizeof (scfiocgetdiskled_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocgetdiskled_p,
-		sizeof (scfiocgetdiskled_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_setdiskled;
-	}
-
-	switch (scfiocgetdiskled_p->led) {
-	case SCF_DISK_LED_ON:
-		scf_cmd.subcmd = SUB_DISK_LED_ON;
-		break;
-
-	case SCF_DISK_LED_BLINK:
-		scf_cmd.subcmd = SUB_DISK_LED_BLINK;
-		break;
-
-	case SCF_DISK_LED_OFF:
-		scf_cmd.subcmd = SUB_DISK_LED_OFF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_setdiskled;
-	}
-
-	scf_cmd.cmd = CMD_DOMAIN_INFO;
-	scf_cmd.sbuf = &scfiocgetdiskled_p->path[0];
-	scf_cmd.scount = SCF_DISK_LED_PATH_MAX;
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_setdiskled
- */
-	END_setdiskled:
-
-	if (scfiocgetdiskled_p) {
-		kmem_free((void *)scfiocgetdiskled_p,
-			(size_t)(sizeof (scfiocgetdiskled_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_getsdownreason()
- *
- * Description: SCFIOCGETSDOWNREASON ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_getsdownreason(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_getsdownreason() "
-	int			ret = 0;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyout((void *)&scf_comtbl.scf_shutdownreason,
-		(void *)arg, sizeof (int), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_optiondisp()
- *
- * Description: SCFIOCOPTIONDISP ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_optiondisp(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_optiondisp() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfoption_t		scfoption;
-	scf_short_buffer_t	sbuf;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	bzero((void *)&scfoption, sizeof (scfoption_t));
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-
-	scf_cmd.cmd = CMD_DOMAIN_INFO;
-	scf_cmd.subcmd = SUB_OPTION_DISP;
-	sbuf.b[13] = (uchar_t)(scf_scfd_comif_version >> 8);
-	sbuf.b[14] = (uchar_t)scf_scfd_comif_version;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.rbuf = &scfoption.rbuf[0];
-	scf_cmd.rcount = SCF_S_CNT_15;
-	scf_cmd.flag = SCF_USE_SSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		/* Set XSCF version */
-		bcopy((void *)&scfoption.rbuf[13],
-			(void *)&scf_xscf_comif_version, 2);
-
-		if (ddi_copyout((void *)&scfoption, (void *)arg,
-			sizeof (scfoption_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_getpciconfig()
- *
- * Description: SCFIOCGETPCICONFIG ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_getpciconfig(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_getpciconfig() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfiocgetpciconfig_t	*scfiocgetpciconfig_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocgetpciconfig_p =
-		kmem_zalloc((size_t)(sizeof (scfiocgetpciconfig_t)), KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocgetpciconfig_p,
-		sizeof (scfiocgetpciconfig_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_getpciconfig;
-	}
-
-	scf_cmd.cmd = CMD_DOMAIN_INFO;
-	scf_cmd.subcmd = SUB_PCI_DISP;
-	scf_cmd.sbuf = &scfiocgetpciconfig_p->sbuf[0];
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.rbuf = &scfiocgetpciconfig_p->rbuf[0];
-	scf_cmd.rcount = SCF_L_CNT_MAX;
-	scf_cmd.flag = SCF_USE_SLBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		if (ddi_copyout((void *)scfiocgetpciconfig_p,
-			(void *)arg, sizeof (scfiocgetpciconfig_t),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_getpciconfig
- */
-	END_getpciconfig:
-
-	if (scfiocgetpciconfig_p) {
-		kmem_free((void *)scfiocgetpciconfig_p,
-			(size_t)(sizeof (scfiocgetpciconfig_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_hac()
- *
- * Description: SCFIOCHAC ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_hac(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_hac() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfhac_t		scfhac;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfhac,
-		sizeof (scfhac_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_hac;
-	}
-
-	if (scfhac.sub_command == SUB_HOSTADDR_DISP2) {
-		mutex_enter(&scf_comtbl.all_mutex);
-		if (scf_save_hac_flag != 0) {
-			mutex_exit(&scf_comtbl.all_mutex);
-			if (ddi_copyout((void *)&scf_save_hac, (void *)arg,
-				sizeof (scfhac_t), mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"ioctl   ", 8);
-				ret = EFAULT;
-			}
-			goto END_hac;
-		} else {
-			mutex_exit(&scf_comtbl.all_mutex);
-		}
-		scfhac.sub_command = SUB_HOSTADDR_DISP;
-	}
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = scfhac.sub_command;
-	scf_cmd.sbuf = &scfhac.sbuf[0];
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.rbuf = &scfhac.rbuf[0];
-	scf_cmd.rcount = SCF_S_CNT_15;
-
-	switch (scfhac.sub_command) {
-	case SUB_REMOTE_POWCTL_SET:
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	case SCF_SUB_REMOTE_POWCTL_SET:
-		bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-		sbuf.b[0] = scfhac.sbuf[6];
-		sbuf.b[1] = scfhac.sbuf[7];
-		scf_cmd.sbuf = &sbuf.b[0];
-		scf_cmd.subcmd = SUB_REMOTE_POWCTL_SET;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	case SUB_HOSTADDR_DISP:
-	case SUB_DEVICE_INFO:
-		scf_cmd.flag = SCF_USE_SSBUF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_hac;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret == 0) {
-		if (scfhac.sub_command == SUB_HOSTADDR_DISP) {
-			bcopy((void *)&scfhac, (void *)&scf_save_hac,
-				sizeof (scfhac_t));
-			scf_save_hac_flag = 1;
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		if (ddi_copyout((void *)&scfhac, (void *)arg, sizeof (scfhac_t),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	} else {
-		mutex_exit(&scf_comtbl.all_mutex);
-	}
-
-/*
- * END_hac
- */
-	END_hac:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_hstadrsinfo()
- *
- * Description: SCFIOCHSTADRSINFO ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_hstadrsinfo(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_hstadrsinfo() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_HOSTADDR_DISP;
-	scf_cmd.scount = 0;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.rcount = SCF_S_CNT_12;
-	scf_cmd.flag = SCF_USE_SSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret == 0) {
-		bcopy((void *)&rbuf.b[0], (void *)&scf_save_hac.rbuf[0],
-			SCF_S_CNT_12);
-		scf_save_hac_flag = 1;
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		if (ddi_copyout((void *)&rbuf.b[0], (void *)arg, SCF_S_CNT_12,
-			mode) < 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	} else {
-		mutex_exit(&scf_comtbl.all_mutex);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_rdclistmax()
- *
- * Description: SCFIOCRDCLISTMAX ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_rdclistmax(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_rdclistmax() "
-	int			ret = 0;
-	int			scfrdclistmax;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfrdclistmax = (scf_rci_max * SCF_DEVLIST_MAXCNT);
-
-	if (ddi_copyout((void *)&scfrdclistmax, (void *)arg, sizeof (int),
-		mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_rdclistx()
- *
- * Description: SCFIOCRDCLISTX ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_rdclistx(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_rdclistx() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfrdclistx_t		*rdclistxp = NULL;
-	scfrdclistx_t		*rdclistxp_wk = NULL;
-	union wk_buffer {
-		uchar_t		b[8];
-		uint_t		four_bytes_access[2];
-	}			*rbuf_wk;
-	int			ii;
-	int			jj;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	rdclistxp =
-		(scfrdclistx_t *)kmem_zalloc((size_t)(sizeof (scfrdclistx_t) *
-		scf_rci_max * SCF_DEVLIST_MAXCNT), KM_SLEEP);
-	rdclistxp_wk =
-		(scfrdclistx_t *)kmem_zalloc((size_t)(sizeof (scfrdclistx_t) *
-		scf_rci_max), KM_SLEEP);
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-
-	/* set device class */
-	sbuf.four_bytes_access[0] = 0x00000fff;
-	sbuf.b[4] = 0;					/* 0 system */
-
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_DEVICE_LIST;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = scf_rci_max * SCF_DEVLIST_ENTSIZE;
-	scf_cmd.rbuf = (uchar_t *)rdclistxp_wk;
-	scf_cmd.flag = SCF_USE_SLBUF;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret != 0) {
-		mutex_exit(&scf_comtbl.all_mutex);
-		goto END_rdclistx;
-	}
-
-	rbuf_wk = (union wk_buffer *)rdclistxp_wk;
-	for (jj = 0; jj < (scf_cmd.rbufleng / SCF_DEVLIST_ENTSIZE);
-		jj++) {
-		if (rbuf_wk->four_bytes_access[0] == NULL) {
-			break;
-		}
-		rdclistxp[jj].rci_addr = rbuf_wk->four_bytes_access[0];
-		rdclistxp[jj].status = rbuf_wk->b[4];
-		rdclistxp[jj].dev_class =
-			((ushort_t)rbuf_wk->b[5] << 8) +
-			(ushort_t)rbuf_wk->b[6];
-		rdclistxp[jj].sub_class = rbuf_wk->b[7];
-		rbuf_wk++;
-	}
-
-	/* set device class */
-	sbuf.four_bytes_access[0] = 0x00000fff;
-	sbuf.b[4] = 1;					/* 1 system */
-
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_DEVICE_LIST;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = scf_rci_max * SCF_DEVLIST_ENTSIZE;
-	scf_cmd.rbuf = (uchar_t *)rdclistxp_wk;
-	scf_cmd.flag = SCF_USE_SLBUF;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret != 0) {
-		mutex_exit(&scf_comtbl.all_mutex);
-		goto END_rdclistx;
-	}
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	rbuf_wk = (union wk_buffer *)rdclistxp_wk;
-	for (ii = 0; ii < (scf_cmd.rbufleng / SCF_DEVLIST_ENTSIZE); ii++) {
-		if (rbuf_wk->four_bytes_access[0] == NULL) {
-			break;
-		}
-		rdclistxp[ii + jj].rci_addr = rbuf_wk->four_bytes_access[0];
-		rdclistxp[ii + jj].status = rbuf_wk->b[4];
-		rdclistxp[ii + jj].dev_class =
-			((ushort_t)rbuf_wk->b[5] << 8) +
-			(ushort_t)rbuf_wk->b[6];
-		rdclistxp[ii + jj].sub_class = rbuf_wk->b[7];
-		rbuf_wk++;
-	}
-
-	/* return number of data */
-	*rval_p = (ii + jj);
-
-	if (ii + jj) {
-		if (ddi_copyout((void *)rdclistxp, (void *)arg,
-			(size_t)(sizeof (scfrdclistx_t) * (ii + jj)),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_rdclistx
- */
-	END_rdclistx:
-
-	if (rdclistxp) {
-		kmem_free((void *)rdclistxp, (size_t)(sizeof (scfrdclistx_t) *
-			scf_rci_max * SCF_DEVLIST_MAXCNT));
-	}
-	if (rdclistxp_wk) {
-		kmem_free((void *)rdclistxp_wk,
-			(size_t)(sizeof (scfrdclistx_t) * scf_rci_max));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_rdctrl()
- *
- * Description: SCFIOCRDCTRL ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_rdctrl(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_rdctrl() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfrdctrl_t		scfrdctrl;
-	int			got_sense = 0;
-	clock_t			lb;
-	int			ii;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfrdctrl,
-		sizeof (scfrdctrl_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_rdctrl;
-	}
-	if ((scfrdctrl.sub_cmd != SUB_DEVICE_STATUS_RPT) &&
-		(scfrdctrl.sub_cmd != SCF_SUB_DEVICE_STATUS_RPT) &&
-		((scfrdctrl.sub_cmd | SCF_RCI_PATH_PARITY) !=
-		SCF_RCI_PATH_40)) {
-		/* wrong sub_cmd */
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_rdctrl;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	while (scf_comtbl.rdctrl_busy) {
-		SC_DBG_DRV_TRACE(TC_W_SIG, __LINE__, &scf_comtbl.rdctrl_cv,
-			sizeof (kcondvar_t));
-		if (cv_wait_sig(&scf_comtbl.rdctrl_cv,
-			&scf_comtbl.all_mutex) == 0) {
-			SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-				&scf_comtbl.rdctrl_cv, sizeof (kcondvar_t));
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = EINTR;
-			goto END_rdctrl;
-		}
-	}
-	scf_comtbl.rdctrl_busy = 1;
-
-	for (ii = scfrdctrl.scount; ii < SCF_S_CNT_32; ii++) {
-		scfrdctrl.sbuf[ii] = 0;
-	}
-	if ((scfrdctrl.sub_cmd == SUB_DEVICE_STATUS_RPT) ||
-		(scfrdctrl.sub_cmd == SCF_SUB_DEVICE_STATUS_RPT)) {
-		scf_cmd.flag = SCF_USE_S_BUF;
-	} else {
-		/* SUB_RCI_PATH_4* */
-		scf_cmd.flag = SCF_USE_L_BUF;
-		/* Parameter size set */
-		if (scfrdctrl.scount > 6) {
-			scfrdctrl.sbuf[5] = (scfrdctrl.scount - 6);
-		} else {
-			scfrdctrl.sbuf[5] = 0;
-		}
-	}
-	scf_cmd.cmd = CMD_RCI_CTL;
-	if (scfrdctrl.sub_cmd == SCF_SUB_DEVICE_STATUS_RPT) {
-		scf_cmd.subcmd = SUB_DEVICE_STATUS_RPT;
-	} else if (scfrdctrl.sub_cmd ==
-		(SCF_RCI_PATH_40 & (~SCF_RCI_PATH_PARITY))) {
-		scf_cmd.subcmd = SCF_RCI_PATH_40;
-	} else {
-		scf_cmd.subcmd = scfrdctrl.sub_cmd;
-	}
-	scf_comtbl.rdctrl_sense_category_code = 0;
-	scf_cmd.sbuf = &scfrdctrl.sbuf[0];
-	scf_cmd.scount = SCF_S_CNT_32;
-	scf_cmd.rcount = 0;
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret != 0) {
-		goto END_rdctrl_signal;
-	}
-
-	/* wait for sense */
-	lb = ddi_get_lbolt();
-	while (scf_comtbl.rdctrl_sense_category_code == 0) {
-		SC_DBG_DRV_TRACE(TC_T_WAIT, __LINE__, &scf_comtbl.rdcsense_cv,
-			sizeof (kcondvar_t));
-		scf_comtbl.rdctrl_end_wait = 1;
-		if (cv_timedwait(&scf_comtbl.rdcsense_cv, &scf_comtbl.all_mutex,
-			drv_usectohz(scf_rdctrl_sense_wait) + lb) == (-1)) {
-			/* time out */
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = ENODATA;
-			goto END_rdctrl_signal;
-		}
-	}
-
-	/* check RCI-addr and category code */
-	if ((bcmp((void *)&scf_comtbl.rdctrl_sense[0],
-		(void *)&scfrdctrl.sbuf[0], 4) == 0) &&
-		(((scf_comtbl.rdctrl_sense_category_code) ==
-		(scfrdctrl.sub_cmd & (~SCF_RCI_PATH_PARITY))) ||
-		((scf_comtbl.rdctrl_sense_category_code ==
-		DEV_SENSE_STATUS_RPT) &&
-		((scfrdctrl.sub_cmd == SUB_DEVICE_STATUS_RPT) ||
-		(scfrdctrl.sub_cmd == SCF_SUB_DEVICE_STATUS_RPT))))) {
-		bcopy((void *)&scf_comtbl.rdctrl_sense[0],
-			(void *)&scfrdctrl.sense[0], 4);
-		bcopy((void *)&scf_comtbl.rdctrl_sense[8],
-			(void *)&scfrdctrl.sense[4], (SCF_INT_REASON_SIZE - 4));
-		got_sense = 1;
-	} else {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = ENODATA;
-	}
-
-/*
- * END_rdctrl_signal
- */
-	END_rdctrl_signal:
-
-	scf_comtbl.rdctrl_end_wait = 0;
-	scf_comtbl.rdctrl_busy = 0;
-	cv_signal(&scf_comtbl.rdctrl_cv);
-	SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.rdctrl_cv,
-		sizeof (kcondvar_t));
-	mutex_exit(&scf_comtbl.all_mutex);
-	if (got_sense) {
-		if (ddi_copyout((void *)&scfrdctrl, (void *)arg,
-			sizeof (scfrdctrl_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_rdctrl
- */
-	END_rdctrl:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_opecall()
- *
- * Description: SCFIOCOPECALL ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_opecall(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_opecall() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfhac_t		scfhac;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfhac, sizeof (scfhac_t),
-		mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_opecall;
-	}
-
-	scf_cmd.cmd = CMD_REPORT;
-	scf_cmd.subcmd = scfhac.sub_command;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &scfhac.sbuf[0];
-	scf_cmd.rcount = SCF_S_CNT_15;
-	scf_cmd.rbuf = &scfhac.rbuf[0];
-
-	switch (scfhac.sub_command) {
-	case SUB_OPECALL_ON_SET:
-	case SUB_OPECALL_OFF_SET:
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	case SUB_OPECALL_DISP:
-		scf_cmd.flag = SCF_USE_SSBUF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_opecall;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		if (ddi_copyout((void *)&scfhac, (void *)arg, sizeof (scfhac_t),
-			mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_opecall
- */
-	END_opecall:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_getreport()
- *
- * Description: SCFIOCGETREPORT ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_getreport(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_getreport() "
-	scfreport_t		scfreport;
-	scfreport32_t		scfreport32;
-	scfreport_t		*scfreport_p;
-	int			ret = 0;
-	int			loop_flag = 1;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (u_mode == DDI_MODEL_ILP32) {
-		/* DDI_MODEL_ILP32 */
-		if (ddi_copyin((void *)arg, (void *)&scfreport32,
-			sizeof (scfreport32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_getreport;
-		}
-		scfreport.flag = scfreport32.flag;
-	} else {
-		/* DDI_MODEL_NONE */
-		if (ddi_copyin((void *)arg, (void *)&scfreport,
-			sizeof (scfreport_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_getreport;
-		}
-	}
-
-	switch (scfreport.flag) {
-	case GETREPORT_WAIT:
-	case GETREPORT_WAIT_AND_RCIDWN:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		scfreport_p = (scfreport_t *)&scf_comtbl.scfreport_rcidown.flag;
-		while (loop_flag) {
-			if (scf_pop_reportsense(&scfreport) == 0) {
-				break;
-			}
-			if ((scfreport.flag == GETREPORT_WAIT_AND_RCIDWN) &&
-				(scf_comtbl.rcidown_event_flag)) {
-				scfreport.rci_addr = scfreport_p->rci_addr;
-				scfreport.report_sense[0] =
-					scfreport_p->report_sense[0];
-				scfreport.report_sense[1] =
-					scfreport_p->report_sense[1];
-				scfreport.report_sense[2] =
-					scfreport_p->report_sense[2];
-				scfreport.report_sense[3] =
-					scfreport_p->report_sense[3];
-				scfreport.timestamp = scfreport_p->timestamp;
-				scf_comtbl.rcidown_event_flag = 0;
-				break;
-			}
-			SC_DBG_DRV_TRACE(TC_W_SIG, __LINE__,
-				&scf_comtbl.rsense_cv, sizeof (kcondvar_t));
-			if (cv_wait_sig(&scf_comtbl.rsense_cv,
-				&scf_comtbl.all_mutex) == 0) {
-				SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-					&scf_comtbl.rsense_cv,
-					sizeof (kcondvar_t));
-
-				mutex_exit(&scf_comtbl.all_mutex);
-				ret = EINTR;
-				goto END_getreport;
-			}
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case GETREPORT_NOWAIT:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (scf_pop_reportsense(&scfreport) < 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = ENODATA;
-			goto END_getreport;
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_getreport;
-	}
-
-	if (u_mode == DDI_MODEL_ILP32) {
-		/* DDI_MODEL_ILP32 */
-		if ((scfreport.timestamp < INT32_MIN) ||
-			(scfreport.timestamp > INT32_MAX)) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EOVERFLOW;
-			goto END_getreport;
-		}
-
-		scfreport32.rci_addr = scfreport.rci_addr;
-		scfreport32.report_sense[0] = scfreport.report_sense[0];
-		scfreport32.report_sense[1] = scfreport.report_sense[1];
-		scfreport32.report_sense[2] = scfreport.report_sense[2];
-		scfreport32.report_sense[3] = scfreport.report_sense[3];
-		scfreport32.timestamp = (time32_t)scfreport.timestamp;
-
-		if (ddi_copyout((void *)&scfreport32, (void *)arg,
-			sizeof (scfreport32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	} else {
-		/* DDI_MODEL_NONE */
-		if (ddi_copyout((void *)&scfreport, (void *)arg,
-			sizeof (scfreport_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_getreport
- */
-	END_getreport:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_rcipwr()
- *
- * Description: SCFIOCRCIPWR ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_rcipwr(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_rcipwr() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scf_short_buffer_t	rbuf;
-	scfrcipwr_t		scfrcipwr;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfrcipwr,
-		sizeof (scfrcipwr_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_rcipwr;
-	}
-
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_HOSTADDR_DISP;
-	scf_cmd.scount = 0;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.rcount = SCF_S_CNT_12;
-	scf_cmd.flag = SCF_USE_SSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret != 0) {
-		mutex_exit(&scf_comtbl.all_mutex);
-		goto END_rcipwr;
-	}
-
-	/* check RCI-address */
-	if ((scfrcipwr.rci_addr == rbuf.four_bytes_access[0]) ||
-		(scfrcipwr.rci_addr == SCF_CMD_SYSTEM_ADDR)) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		mutex_exit(&scf_comtbl.all_mutex);
-		ret = EINVAL;
-		goto END_rcipwr;
-	}
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-
-	switch (scfrcipwr.sub_cmd) {
-	case RCI_PWR_ON:
-		scf_cmd.subcmd = SUB_PON;
-		break;
-
-	case RCI_PWR_OFF:
-		scf_cmd.subcmd = SUB_FPOFF;
-		break;
-
-	case RCI_SYS_RESET:
-		scf_cmd.subcmd = SUB_RESET;
-		break;
-
-	case RCI_PWR_NOR_OFF:
-		scf_cmd.subcmd = SUB_POFF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		mutex_exit(&scf_comtbl.all_mutex);
-		ret = EINVAL;
-		goto END_rcipwr;
-	}
-
-	scf_cmd.cmd = CMD_PART_POW_CTR;
-	scf_cmd.scount = SCF_S_CNT_15;
-	sbuf.four_bytes_access[0] = scfrcipwr.rci_addr;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_rcipwr
- */
-	END_rcipwr:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_panicreq()
- *
- * Description: SCFIOCPANICREQ ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_panicreq(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_panicreq() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scf_short_buffer_t	rbuf;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_HOSTADDR_DISP;
-	scf_cmd.scount = 0;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.rcount = SCF_S_CNT_12;
-	scf_cmd.flag = SCF_USE_SSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	if (ret != 0) {
-		mutex_exit(&scf_comtbl.all_mutex);
-		goto END_panicreq;
-	}
-
-	/* check RCI-address */
-	if (((uint_t)arg == rbuf.four_bytes_access[0]) ||
-		(arg == SCF_CMD_SYSTEM_ADDR)) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		mutex_exit(&scf_comtbl.all_mutex);
-		ret = EINVAL;
-		goto END_panicreq;
-	}
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-	sbuf.four_bytes_access[0] = (unsigned int)arg;
-	scf_cmd.cmd = CMD_RCI_CTL;
-	scf_cmd.subcmd = SUB_PANIC;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_panicreq
- */
-	END_panicreq:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_panicchk()
- *
- * Description: SCFIOCPANICCHK ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_panicchk(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_panicchk() "
-	int			ret = 0;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyout((void *)&scf_panic_exec_flag2, (void *)arg,
-		sizeof (int), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_parmset()
- *
- * Description: SCFIOCPARMSET ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_parmset(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_parmset() "
-	int			ret = 0;
-	scfparam_t		scfparam;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfparam,
-		sizeof (scfparam_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_parmset;
-	}
-
-	switch (scfparam.parm) {
-	case SCF_PARM_RDCTRL_TIMER:
-		if ((scfparam.value >= SCF_SEC2MICRO(1)) &&
-			(scfparam.value <= SCF_SEC2MICRO(120))) {
-			mutex_enter(&scf_comtbl.all_mutex);
-			scf_rdctrl_sense_wait =
-				scfparam.value - (scfparam.value % 500000);
-			mutex_exit(&scf_comtbl.all_mutex);
-		} else {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EINVAL;
-			goto END_parmset;
-		}
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_parmset;
-	}
-
-	if (ddi_copyout((void *)&scfparam, (void *)arg,
-		sizeof (scfparam_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_parmset
- */
-	END_parmset:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_parmget()
- *
- * Description: SCFIOCPARMGET ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_parmget(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_parmget() "
-	int			ret = 0;
-	scfparam_t		scfparam;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfparam,
-		sizeof (scfparam_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_parmget;
-	}
-
-	switch (scfparam.parm) {
-	case SCF_PARM_RDCTRL_TIMER:
-		mutex_enter(&scf_comtbl.all_mutex);
-		scfparam.value = scf_rdctrl_sense_wait;
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_parmget;
-	}
-
-	if (ddi_copyout((void *)&scfparam, (void *)arg,
-		sizeof (scfparam_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_parmget
- */
-	END_parmget:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrset()
- *
- * Description: SCFIOCAUTOPWRSET ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrset(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrset() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfautopwr_t		scfautopwr;
-	int			ii;
-	int			jj;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfautopwr,
-		sizeof (scfautopwr_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_autopwrset;
-	}
-
-	if ((scfautopwr.valid_entries < 0) || (scfautopwr.valid_entries > 5)) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_autopwrset;
-	}
-
-	bzero((void *)&sbuf.b[0], 5 * SCF_S_CNT_16);
-
-	for (ii = 0, jj = 0; ii < scfautopwr.valid_entries; ii++,
-		jj = ii * SCF_S_CNT_16) {
-		/* check pon time */
-		if (scf_check_pon_time(&scfautopwr.ptime[ii]) < 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EINVAL;
-			goto END_autopwrset;
-		}
-
-		if (scf_check_poff_time(&scfautopwr.ptime[ii]) < 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EINVAL;
-			goto END_autopwrset;
-		}
-
-		sbuf.b[jj] = (uchar_t)(scfautopwr.ptime[ii].pon_year >> 8);
-		sbuf.b[jj + 1] = (uchar_t)scfautopwr.ptime[ii].pon_year;
-		sbuf.b[jj + 2] = (uchar_t)scfautopwr.ptime[ii].pon_month;
-		sbuf.b[jj + 3] = (uchar_t)scfautopwr.ptime[ii].pon_date;
-		sbuf.b[jj + 4] = (uchar_t)scfautopwr.ptime[ii].pon_hour;
-		sbuf.b[jj + 5] = (uchar_t)scfautopwr.ptime[ii].pon_minute;
-		sbuf.b[jj + 6] = 0;
-		sbuf.b[jj + 7] = 0;
-
-		sbuf.b[jj + 8] = (uchar_t)(scfautopwr.ptime[ii].poff_year >> 8);
-		sbuf.b[jj + 9] = (uchar_t)scfautopwr.ptime[ii].poff_year;
-		sbuf.b[jj + 10] = (uchar_t)scfautopwr.ptime[ii].poff_month;
-		sbuf.b[jj + 11] = (uchar_t)scfautopwr.ptime[ii].poff_date;
-		sbuf.b[jj + 12] = (uchar_t)scfautopwr.ptime[ii].poff_hour;
-		sbuf.b[jj + 13] = (uchar_t)scfautopwr.ptime[ii].poff_minute;
-		sbuf.b[jj + 14] = 0;
-		sbuf.b[jj + 15] = 0;
-	}
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_SYS_AUTO_ONOFF_SET;
-	scf_cmd.scount = 5 * SCF_S_CNT_16;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_autopwrset
- */
-	END_autopwrset:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrget()
- *
- * Description: SCFIOCAUTOPWRGET or SCFIOCSYSAUTOPWRGET
- *              ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrget(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrget() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-	scfautopwr_t		scfautopwr;
-	int			ii;
-	int			jj;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	bzero((void *)&scfautopwr, sizeof (scfautopwr_t));
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_SYS_AUTO_ONOFF_DISP;
-	scf_cmd.scount = 0;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.rcount = 5 * SCF_S_CNT_16;
-	scf_cmd.flag = SCF_USE_SLBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret != 0) {
-		goto END_autopwrget;
-	}
-
-	for (ii = 0, jj = 0; ii < (scf_cmd.rbufleng / SCF_S_CNT_16);
-		ii++, jj = ii * SCF_S_CNT_16) {
-		scfautopwr.ptime[ii].pon_year =
-			(int)(rbuf.b[jj] << 8) | (int)rbuf.b[jj + 1];
-		scfautopwr.ptime[ii].pon_month = (int)rbuf.b[jj + 2];
-		scfautopwr.ptime[ii].pon_date = (int)rbuf.b[jj + 3];
-		scfautopwr.ptime[ii].pon_hour = (int)rbuf.b[jj + 4];
-		scfautopwr.ptime[ii].pon_minute = (int)rbuf.b[jj + 5];
-
-		scfautopwr.ptime[ii].poff_year =
-			(int)(rbuf.b[jj + 8] << 8) | (int)rbuf.b[jj + 9];
-		scfautopwr.ptime[ii].poff_month = (int)rbuf.b[jj + 10];
-		scfautopwr.ptime[ii].poff_date = (int)rbuf.b[jj + 11];
-		scfautopwr.ptime[ii].poff_hour = (int)rbuf.b[jj + 12];
-		scfautopwr.ptime[ii].poff_minute = (int)rbuf.b[jj + 13];
-	}
-	scfautopwr.valid_entries = 5;
-
-	if (ddi_copyout((void *)&scfautopwr, (void *)arg,
-		sizeof (scfautopwr_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_autopwrget
- */
-	END_autopwrget:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrclr()
- *
- * Description: SCFIOCSYSAUTOPWRCLR ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrclr(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrclr() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_SYS_AUTO_ONOFF_CLRAR;
-	scf_cmd.scount = 0;
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrfpoff()
- *
- * Description: SCFIOCAUTOPWRFPOFF ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrfpoff(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrfpoff() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfautopwrtime_t	scfautopwrtime;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfautopwrtime,
-		sizeof (scfautopwrtime_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_autopwrfpoff;
-	}
-	bzero((void *)&sbuf.b[0], 5 * SCF_S_CNT_16);
-	if (scf_check_poff_time(&scfautopwrtime) < 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_autopwrfpoff;
-	}
-	sbuf.b[0] = (uchar_t)(scfautopwrtime.poff_year >> 8);
-	sbuf.b[1] = (uchar_t)scfautopwrtime.poff_year;
-	sbuf.b[2] = (uchar_t)scfautopwrtime.poff_month;
-	sbuf.b[3] = (uchar_t)scfautopwrtime.poff_date;
-	sbuf.b[4] = (uchar_t)scfautopwrtime.poff_hour;
-	sbuf.b[5] = (uchar_t)scfautopwrtime.poff_minute;
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_FORCED_POFF_SET;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_autopwrfpoff
- */
-	END_autopwrfpoff:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrexset()
- *
- * Description: SCFIOCAUTOPWREXSET ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrexset(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrexset() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	sbuf;
-	scfautopwrex_t		scfautopwrex;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-	if (ddi_copyin((void *)arg, (void *)&scfautopwrex,
-		sizeof (scfautopwrex_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_autopwrexset;
-	}
-
-	switch (scfautopwrex.rpwr_mode) {
-	case AUTOPWREX_RESTORE:
-	case AUTOPWREX_NOPON:
-	case AUTOPWREX_AUTOPON:
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_autopwrexset;
-	}
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_PRESET_MODE_SET;
-	scf_cmd.scount = SCF_S_CNT_15;
-	sbuf.b[0] = (unsigned char)scfautopwrex.rpwr_mode;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_S_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_autopwrexset
- */
-	END_autopwrexset:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_autopwrexget()
- *
- * Description: SCFIOCAUTOPWREXGET ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_autopwrexget(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_autopwrexget() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-	scfautopwrex_t		scfautopwrex;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	bzero((void *)&scfautopwrex, sizeof (scfautopwrex_t));
-
-	scf_cmd.cmd = CMD_SYS_AUTOPOW;
-	scf_cmd.subcmd = SUB_PRESET_MODE_DISP;
-	scf_cmd.scount = 0;
-	scf_cmd.rcount = SCF_S_CNT_15;
-	scf_cmd.rbuf = &rbuf.b[0];
-	scf_cmd.flag = SCF_USE_SSBUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		scfautopwrex.rpwr_mode = (int)rbuf.b[0];
-
-		if (ddi_copyout((void *)&scfautopwrex, (void *)arg,
-			sizeof (scfautopwrex_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_dr()
- *
- * Description: SCFIOCDR ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_dr(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_dr() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfdr_t			*scfdr_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfdr_p = kmem_zalloc((size_t)(sizeof (scfdr_t)), KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfdr_p, sizeof (scfdr_t),
-		mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_dr;
-	}
-
-	scf_cmd.cmd = CMD_DR;
-	scf_cmd.subcmd = scfdr_p->sub_command;
-	scf_cmd.sbuf = &scfdr_p->sbuf[0];
-	scf_cmd.scount = SCF_S_CNT_15;
-
-	switch (scfdr_p->sub_command) {
-	case SUB_SB_CONF_CHG:
-		scf_cmd.rbuf = &scfdr_p->rbuf[0];
-		scf_cmd.rcount = SCF_S_CNT_16;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	case SUB_SB_BUILD_COMP:
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	case SUB_SB_SENSE_ALL:
-		scf_cmd.rbuf = &scfdr_p->rbuf[0];
-		scf_cmd.rcount = sizeof (scfdr_p->rbuf);
-		scf_cmd.flag = SCF_USE_SLBUF;
-		break;
-
-	case SUB_SB_SENSE:
-		scf_cmd.rbuf = &scfdr_p->rbuf[0];
-		scf_cmd.rcount = SCF_S_CNT_15;
-		scf_cmd.flag = SCF_USE_SSBUF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_dr;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret != 0) {
-		if (scf_cmd.stat0 == E_PARAM) {
-			ret = EINVAL;
-		} else {
-			goto END_dr;
-		}
-	}
-
-	if (ddi_copyout((void *)scfdr_p, (void *)arg, sizeof (scfdr_t),
-		mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-	}
-
-/*
- * END_dr
- */
-	END_dr:
-
-	if (scfdr_p) {
-		kmem_free((void *)scfdr_p, (size_t)(sizeof (scfdr_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_eventlist()
- *
- * Description: SCFIOCEVENTLIST ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_eventlist(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_eventlist() "
-	int			ret = 0;
-	scfeventlist_t		*scfeventlist_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfeventlist_p = kmem_zalloc((size_t)(sizeof (scfeventlist_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfeventlist_p,
-		sizeof (scfeventlist_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_eventlist;
-	}
-	if (scfeventlist_p->listcnt > SCF_EVENTLIST_MAX) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_eventlist;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	bcopy((void *)scfeventlist_p, (void *)&scf_comtbl.getevent_tbl.listcnt,
-		sizeof (scfeventlist_t));
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_eventlist
- */
-	END_eventlist:
-
-	if (scfeventlist_p) {
-		kmem_free((void *)scfeventlist_p,
-			(size_t)(sizeof (scfeventlist_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_getevent()
- *
- * Description: SCFIOCGETEVENT ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_getevent(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_getevent() "
-	int			ret = 0;
-	scfevent_t		scfevent;
-	scfevent32_t		scfevent32;
-	int			loop_flag = 1;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (u_mode == DDI_MODEL_ILP32) {
-		/* DDI_MODEL_ILP32 */
-		if (ddi_copyin((void *)arg, (void *)&scfevent32,
-			sizeof (scfevent32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_getevent;
-		}
-		scfevent.flag = scfevent32.flag;
-	} else {
-		/* DDI_MODEL_NONE */
-		if (ddi_copyin((void *)arg, (void *)&scfevent,
-			sizeof (scfevent_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-			goto END_getevent;
-		}
-	}
-
-	switch (scfevent.flag) {
-	case GETEVENT_WAIT:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		while (loop_flag) {
-			if (scf_pop_getevent(&scfevent) == 0) {
-				break;
-			}
-			SC_DBG_DRV_TRACE(TC_W_SIG, __LINE__,
-				&scf_comtbl.getevent_cv, sizeof (kcondvar_t));
-			if (cv_wait_sig(&scf_comtbl.getevent_cv,
-				&scf_comtbl.all_mutex) == 0) {
-				SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-					&scf_comtbl.getevent_cv,
-					sizeof (kcondvar_t));
-
-				mutex_exit(&scf_comtbl.all_mutex);
-				ret = EINTR;
-				goto END_getevent;
-			}
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	case GETEVENT_NOWAIT:
-		mutex_enter(&scf_comtbl.all_mutex);
-
-		if (scf_pop_getevent(&scfevent) < 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = ENODATA;
-			goto END_getevent;
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_getevent;
-	}
-
-	if (u_mode == DDI_MODEL_ILP32) {
-		/* DDI_MODEL_ILP32 */
-		if ((scfevent.timestamp < INT32_MIN) ||
-			(scfevent.timestamp > INT32_MAX)) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EOVERFLOW;
-			goto END_getevent;
-		}
-		bcopy((void *)&scfevent.rci_addr, (void *)&scfevent32.rci_addr,
-			SCF_INT_REASON_SIZE);
-		scfevent32.timestamp = (time32_t)scfevent.timestamp;
-
-		if (ddi_copyout((void *)&scfevent32, (void *)arg,
-			sizeof (scfevent32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	} else {
-		/* DDI_MODEL_NONE */
-		if (ddi_copyout((void *)&scfevent, (void *)arg,
-			sizeof (scfevent_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_getevent
- */
-	END_getevent:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_setmadmevent()
- *
- * Description: SCFIOCSETMADMEVENT ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_setmadmevent(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_setmadmevent() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfiocsetmadmevent_t	*scfiocsetmadmevent_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocsetmadmevent_p =
-		kmem_zalloc((size_t)(sizeof (scfiocsetmadmevent_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocsetmadmevent_p,
-		sizeof (scfiocsetmadmevent_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_setmadmevent;
-	}
-
-	if (scfiocsetmadmevent_p->size > SCF_L_CNT_MAX) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_setmadmevent;
-	}
-
-	scf_cmd.cmd = CMD_ERRLOG;
-	scf_cmd.subcmd = SUB_ERRLOG_SET_MADMIN;
-	scf_cmd.sbuf = &scfiocsetmadmevent_p->buf[0];
-	scf_cmd.scount = scfiocsetmadmevent_p->size;
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_setmadmevent
- */
-	END_setmadmevent:
-
-	if (scfiocsetmadmevent_p) {
-		kmem_free((void *)scfiocsetmadmevent_p,
-			(size_t)(sizeof (scfiocsetmadmevent_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_remcscmd()
- *
- * Description: SCFIOCREMCSCMD ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_remcscmd(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_remcscmd() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-	scfiocremcscmd_t	scfiocremcscmd;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfiocremcscmd,
-		sizeof (scfiocremcscmd_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_remcscmd;
-	}
-
-	if (scfiocremcscmd.size > SCF_S_CNT_15) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_remcscmd;
-	}
-
-	scf_cmd.cmd = CMD_REMCS_SPT;
-
-	switch (scfiocremcscmd.sub_command) {
-	case SUB_CMD_EX_REMCS:
-		scf_cmd.subcmd = scfiocremcscmd.sub_command;
-		scf_cmd.scount = scfiocremcscmd.size;
-		scf_cmd.sbuf = &scfiocremcscmd.buf[0];
-		scf_cmd.rcount = SCF_S_CNT_15;
-		scf_cmd.rbuf = &rbuf.b[0];
-		scf_cmd.flag = SCF_USE_SSBUF;
-		break;
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_remcscmd;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		scfiocremcscmd.size = scf_cmd.rbufleng;
-		if (scfiocremcscmd.size != 0) {
-			bcopy((void *)&rbuf.b[0],
-				(void *)&scfiocremcscmd.buf[0],
-				scfiocremcscmd.size);
-		}
-
-		if (ddi_copyout((void *)&scfiocremcscmd, (void *)arg,
-			sizeof (scfiocremcscmd_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_remcscmd
- */
-	END_remcscmd:
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_remcsfile()
- *
- * Description: SCFIOCREMCSFILE ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_remcsfile(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_remcsfile() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scf_short_buffer_t	rbuf;
-	scfiocremcsfile_t	*scfiocremcsfile_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocremcsfile_p = kmem_zalloc((size_t)(sizeof (scfiocremcsfile_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocremcsfile_p,
-		sizeof (scfiocremcsfile_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_remcsfile;
-	}
-
-	if (scfiocremcsfile_p->size > SCF_L_CNT_MAX) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_remcsfile;
-	}
-
-	scf_cmd.cmd = CMD_FILE_DOWNLOAD;
-	scf_cmd.subcmd = scfiocremcsfile_p->sub_command;
-
-	switch (scfiocremcsfile_p->sub_command) {
-	case SUB_FILEUP_READY:
-		if (scfiocremcsfile_p->size > SCF_L_CNT_MAX) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EINVAL;
-			goto END_remcsfile;
-		}
-		scf_cmd.scount = scfiocremcsfile_p->size;
-		scf_cmd.sbuf = &scfiocremcsfile_p->buf[0];
-		scf_cmd.rcount = SCF_S_CNT_15;
-		scf_cmd.rbuf = &rbuf.b[0];
-		scf_cmd.flag = SCF_USE_LSBUF;
-		break;
-
-	case SUB_FILEUP_SET:
-		scf_cmd.scount = scfiocremcsfile_p->size;
-		scf_cmd.sbuf = &scfiocremcsfile_p->buf[0];
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = SCF_USE_L_BUF;
-		break;
-
-	case SUB_TRANSFER_STOP:
-		scf_cmd.scount = 0;
-		scf_cmd.rcount = 0;
-		scf_cmd.flag = SCF_USE_S_BUF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_remcsfile;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		scfiocremcsfile_p->size = scf_cmd.rbufleng;
-		if (scfiocremcsfile_p->size != 0) {
-			bcopy((void *)&rbuf.b[0],
-				(void *)&scfiocremcsfile_p->buf[0],
-				scfiocremcsfile_p->size);
-		}
-
-		if (ddi_copyout((void *)scfiocremcsfile_p, (void *)arg,
-			sizeof (scfiocremcsfile_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_remcsfile
- */
-	END_remcsfile:
-
-	if (scfiocremcsfile_p) {
-		kmem_free((void *)scfiocremcsfile_p,
-			(size_t)(sizeof (scfiocremcsfile_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_sparecmd()
- *
- * Description: SCFIOCSPARECMD ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_sparecmd(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_sparecmd() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfiocsparecmd_t	*scfiocsparecmd_p = NULL;
-	uint_t			madm_scount;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfiocsparecmd_p = kmem_zalloc((size_t)(sizeof (scfiocsparecmd_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfiocsparecmd_p,
-		sizeof (scfiocsparecmd_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_sparecmd;
-	}
-
-	if (scfiocsparecmd_p->size > SCF_L_CNT_MAX) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_sparecmd;
-	}
-
-	scf_cmd.cmd = CMD_SPARE;
-	scf_cmd.subcmd = scfiocsparecmd_p->spare_sub_command;
-	scf_cmd.sbuf = &scfiocsparecmd_p->buf[0];
-	scf_cmd.rbuf = &scfiocsparecmd_p->buf[0];
-	scf_cmd.cexr[0] = scfiocsparecmd_p->command;
-	scf_cmd.cexr[1] = scfiocsparecmd_p->sub_command;
-
-	switch (scfiocsparecmd_p->spare_sub_command) {
-	case SUB_SPARE_SS:
-		scf_cmd.scount = SCF_S_CNT_12;
-		scf_cmd.rcount = SCF_S_CNT_12;
-		scf_cmd.flag = SCF_USE_SSBUF;
-		break;
-
-	case SUB_SPARE_SL:
-		scf_cmd.scount = SCF_S_CNT_12;
-		scf_cmd.rcount = SCF_L_CNT_MAX;
-		scf_cmd.flag = SCF_USE_SLBUF;
-		break;
-
-	case SUB_SPARE_LS:
-		madm_scount = (scfiocsparecmd_p->size + SCF_S_CNT_15) &
-			SCF_LENGTH_16BYTE_CNV;
-		scf_cmd.scount = madm_scount;
-		scf_cmd.rcount = SCF_S_CNT_12;
-		scf_cmd.flag = SCF_USE_LSBUF;
-		break;
-
-	default:
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_sparecmd;
-	}
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	if (ret == 0) {
-		scfiocsparecmd_p->size = scf_cmd.rbufleng;
-		if (ddi_copyout((void *)scfiocsparecmd_p, (void *)arg,
-			sizeof (scfiocsparecmd_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"ioctl   ", 8);
-			ret = EFAULT;
-		}
-	}
-
-/*
- * END_sparecmd
- */
-	END_sparecmd:
-
-	if (scfiocsparecmd_p) {
-		kmem_free((void *)scfiocsparecmd_p,
-			(size_t)(sizeof (scfiocsparecmd_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_ioc_setphpinfo()
- *
- * Description: SCFIOCSETPHPINFO ioctl command processing.
- *
- */
-/* ARGSUSED */
-int
-scf_ioc_setphpinfo(intptr_t arg, int mode, int *rval_p, int u_mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_ioc_setphpinfo() "
-	int			ret = 0;
-	struct scf_cmd		scf_cmd;
-	scfsetphpinfo_t		*scfsetphpinfo_p = NULL;
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	scfsetphpinfo_p = kmem_zalloc((size_t)(sizeof (scfsetphpinfo_t)),
-		KM_SLEEP);
-
-	if (ddi_copyin((void *)arg, (void *)scfsetphpinfo_p,
-		sizeof (scfsetphpinfo_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EFAULT;
-		goto END_setphpinfo;
-	}
-
-	if (scfsetphpinfo_p->size > SCF_L_CNT_MAX) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "ioctl   ", 8);
-		ret = EINVAL;
-		goto END_setphpinfo;
-	}
-
-	scf_cmd.cmd = CMD_DOMAIN_INFO;
-	scf_cmd.subcmd = SUB_PCI_HP_CONFIG;
-	scf_cmd.sbuf = &scfsetphpinfo_p->buf[0];
-	scf_cmd.scount = scfsetphpinfo_p->size;
-	scf_cmd.rcount = 0;
-	scf_cmd.flag = SCF_USE_L_BUF;
-
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	mutex_exit(&scf_comtbl.all_mutex);
-
-/*
- * END_setphpinfo
- */
-	END_setphpinfo:
-
-	if (scfsetphpinfo_p) {
-		kmem_free((void *)scfsetphpinfo_p,
-			(size_t)(sizeof (scfsetphpinfo_t)));
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_push_reportsense()
- *
- * Description: Set processing of SCFIOCGETREPORT information.
- *
- */
-int
-scf_push_reportsense(unsigned int rci_addr, unsigned char *sense,
-	time_t timestamp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_push_reportsense() "
-	int			top = scf_comtbl.report_sense_top;
-	scfreport_t		*rsensep = scf_comtbl.report_sensep;
-	int			overflow = 0;
-	int			ret = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (rsensep[top].flag != 0) {
-		SCFDBGMSG(SCF_DBGFLAG_IOCTL, "reportsense overflow");
-		overflow = 1;
-		/* increment counter */
-		scf_comtbl.scf_rsense_overflow++;
-	}
-
-	rsensep[top].flag = 1;
-	rsensep[top].rci_addr = rci_addr;
-	bcopy((void *)&sense[0], (void *)&rsensep[top].report_sense[0], 4);
-	rsensep[top].timestamp = timestamp;
-
-	scf_comtbl.report_sense_top =
-		((scf_report_sense_pool_max - 1) == top) ? 0 : top + 1;
-
-	if (overflow) {
-		scf_comtbl.report_sense_oldest = scf_comtbl.report_sense_top;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_pop_reportsense()
- *
- * Description: Get processing of SCFIOCGETREPORT information.
- *
- */
-int
-scf_pop_reportsense(scfreport_t *rsense)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_pop_reportsense() "
-	int			oldest = scf_comtbl.report_sense_oldest;
-	scfreport_t		*drv_rsensep = scf_comtbl.report_sensep;
-	int			ret = (-1);
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (drv_rsensep[oldest].flag != 0) {
-		rsense->rci_addr = drv_rsensep[oldest].rci_addr;
-		bcopy((void *)&drv_rsensep[oldest].report_sense[0],
-			(void *)&rsense->report_sense[0], 4);
-		rsense->timestamp = drv_rsensep[oldest].timestamp;
-		/* clear flag */
-		drv_rsensep[oldest].flag = 0;
-		scf_comtbl.report_sense_oldest =
-			((scf_report_sense_pool_max - 1) == oldest)
-			? 0 : oldest + 1;
-		ret = 0;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_push_getevent()
- *
- * Description: Set processing of SCFIOCGETEVENT information.
- *
- */
-int
-scf_push_getevent(unsigned char *event_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_push_getevent() "
-	int			top = scf_comtbl.getevent_sense_top;
-	scfevent_t		*scfevent_p = scf_comtbl.getevent_sensep;
-	int			overflow = 0;
-	int			ii;
-	time_t			timestamp;
-	int			ret = 1;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	/* Event check */
-	for (ii = 0; ii < scf_comtbl.getevent_tbl.listcnt; ii++) {
-		if (event_p[4] == scf_comtbl.getevent_tbl.codelist[ii]) {
-			ret = 0;
-			break;
-		}
-	}
-	if (ret == 0) {
-		/* Event set */
-		if (scfevent_p[top].flag != 0) {
-			SCFDBGMSG(SCF_DBGFLAG_IOCTL, "getevent overflow");
-			overflow = 1;
-			/* increment counter */
-			scf_comtbl.scf_getevent_overflow++;
-		}
-		timestamp = ddi_get_time();
-		scfevent_p[top].flag = 1;
-		bcopy((void *)event_p, (void *)&scfevent_p[top].rci_addr,
-			SCF_INT_REASON_SIZE);
-		scfevent_p[top].timestamp = timestamp;
-		scf_comtbl.getevent_sense_top =
-			((scf_getevent_pool_max - 1) == top) ? 0 : top + 1;
-		if (overflow) {
-			scf_comtbl.getevent_sense_oldest =
-				scf_comtbl.getevent_sense_top;
-		}
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_pop_reportsense()
- *
- * Description: Get processing of SCFIOCGETEVENT information.
- *
- */
-int
-scf_pop_getevent(scfevent_t *event_p)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_pop_getevent() "
-	int			oldest = scf_comtbl.getevent_sense_oldest;
-	scfevent_t		*scfevent_p = scf_comtbl.getevent_sensep;
-	int			ret = (-1);
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if (scfevent_p[oldest].flag != 0) {
-		bcopy((void *)&scfevent_p[oldest].rci_addr,
-			(void *)&event_p->rci_addr, SCF_INT_REASON_SIZE);
-		event_p->timestamp = scfevent_p[oldest].timestamp;
-		/* clear flag */
-		scfevent_p[oldest].flag = 0;
-		scf_comtbl.getevent_sense_oldest =
-			((scf_getevent_pool_max - 1) == oldest)
-			? 0 : oldest + 1;
-		ret = 0;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_valid_date()
- *
- * Description: Validity check processing of date.
- *
- */
-int
-scf_valid_date(int year, int month, int date)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_valid_date() "
-	int			leap = 0;
-	int			ret = 0;
-	static int		scf_m2d[2][12] = {
-		{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
-		{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-	};
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	if ((year % 400) == 0) {
-		leap = 1;
-	} else {
-		if ((year % 100) == 0) {
-			leap = 0;
-		} else {
-			if ((year % 4) == 0) {
-				leap = 1;
-			}
-		}
-	}
-	if (scf_m2d[leap][month - 1] < date) {
-		ret = 1;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_check_pon_time()
- *
- * Description: Power-on time range check processing.
- *
- */
-int
-scf_check_pon_time(scfautopwrtime_t *ptime)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_check_pon_time() "
-	int			ret = (-1);
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	/* check date, time */
-	if ((ptime->pon_year == 0) && (ptime->pon_month == 0) &&
-		(ptime->pon_date == 0) && (ptime->pon_hour == 0) &&
-		(ptime->pon_minute == 0)) {
-		ret = 0;
-		goto END_check_pon_time;
-	}
-
-	/* check date, time */
-	if ((ptime->pon_year < 1970) || (ptime->pon_year > 9999)) {
-		goto END_check_pon_time;
-	}
-	if ((ptime->pon_month < 1) || (ptime->pon_month > 12)) {
-		goto END_check_pon_time;
-	}
-	if (ptime->pon_date < 1) {
-		goto END_check_pon_time;
-	}
-	if ((ptime->pon_hour < 0) || (ptime->pon_hour > 23)) {
-		goto END_check_pon_time;
-	}
-	if ((ptime->pon_minute < 0) || (ptime->pon_minute > 59)) {
-		goto END_check_pon_time;
-	}
-	if (scf_valid_date(ptime->pon_year,
-		ptime->pon_month, ptime->pon_date)) {
-		goto END_check_pon_time;
-	}
-	ret = 0;
-
-/*
- * END_check_pon_time
- */
-	END_check_pon_time:
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_check_poff_time()
- *
- * Description: Power-off time range check processing.
- *
- */
-int
-scf_check_poff_time(scfautopwrtime_t *ptime)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_check_poff_time() "
-	int			ret = (-1);
-
-	SCFDBGMSG(SCF_DBGFLAG_IOCTL, SCF_FUNC_NAME ": start");
-
-	/* all zero? */
-	if ((ptime->poff_year == 0) && (ptime->poff_month == 0) &&
-		(ptime->poff_date == 0) && (ptime->poff_hour == 0) &&
-		(ptime->poff_minute == 0)) {
-		if ((ptime->flag != 0) || (ptime->sarea != 0)) {
-			goto END_check_poff_time;
-		}
-		ret = 0;
-		goto END_check_poff_time;
-	}
-
-	/* check date, time */
-	if ((ptime->poff_year < 1970) || (ptime->poff_year > 9999)) {
-		goto END_check_poff_time;
-	}
-	if ((ptime->poff_month < 1) || (ptime->poff_month > 12)) {
-		goto END_check_poff_time;
-	}
-	if (ptime->poff_date < 1) {
-		goto END_check_poff_time;
-	}
-	if ((ptime->poff_hour < 0) || (ptime->poff_hour > 23)) {
-		goto END_check_poff_time;
-	}
-	if ((ptime->poff_minute < 0) || (ptime->poff_minute > 59)) {
-		goto END_check_poff_time;
-	}
-	if (scf_valid_date(ptime->poff_year, ptime->poff_month,
-		ptime->poff_date)) {
-		goto END_check_poff_time;
-	}
-	ret = 0;
-
-/*
- * END_check_poff_time
- */
-	END_check_poff_time:
-	SCFDBGMSG1(SCF_DBGFLAG_IOCTL,
-		SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfostoescf.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,307 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/ksynch.h>
-#include <sys/types.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-
-/*
- * scf_service_putinfo()
- *
- * Description: Data request to send processing from the OS to ESCF.
- *
- */
-/* ARGSUSED */
-int
-scf_service_putinfo(uint32_t key, uint8_t type, uint32_t transid,
-	uint32_t length, void *datap)
-{
-#define	SCF_FUNC_NAME		"scf_service_putinfo() "
-	scf_cmd_t		scf_cmd;	/* SCF command table */
-	uchar_t			*bufp = NULL;	/* Working value : buff addr */
-	int			ret = 0;	/* Return value */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG(SCF_DBGFLAG_SRV, SCF_FUNC_NAME ": start");
-	SC_DBG_DRV_TRACE(TC_S_PUTINFO | TC_IN, __LINE__, &key, sizeof (key));
-
-	/* SCF command table clear */
-	bzero((void *)&scf_cmd, sizeof (scf_cmd_t));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check "key" */
-	if (key != KEY_ESCF) {
-		/* Invalid "key" */
-		SC_DBG_DRV_TRACE(TC_S_PUTINFO | TC_ERRCD, __LINE__, &key,
-			sizeof (key));
-		ret = EINVAL;
-		goto END_service_putinfo;
-	}
-
-	/* Check "length" and "datap" */
-	if ((length != 0) && (datap == NULL)) {
-		/* Invalid "length" or "datap" */
-		SC_DBG_DRV_TRACE(TC_S_PUTINFO | TC_ERRCD, __LINE__, &length,
-			sizeof (length));
-		ret = EINVAL;
-		goto END_service_putinfo;
-	}
-
-	/* Check "length" is max length */
-	if (length > SCF_L_CNT_MAX) {
-		/* Invalid "length" */
-		SC_DBG_DRV_TRACE(TC_S_PUTINFO | TC_ERRCD, __LINE__, &length,
-			sizeof (length));
-		ret = EINVAL;
-		goto END_service_putinfo;
-	}
-
-	/* Check putinfo exec flag */
-	if (scf_comtbl.putinfo_exec_flag == FLAG_ON) {
-	/* Multiplex, putinfo */
-		SC_DBG_DRV_TRACE(TC_S_PUTINFO, __LINE__,
-			&scf_comtbl.putinfo_exec_flag,
-			sizeof (scf_comtbl.putinfo_exec_flag));
-		ret = EBUSY;
-		goto END_service_putinfo;
-	}
-
-	/* putinfo exec flag ON */
-	scf_comtbl.putinfo_exec_flag = FLAG_ON;
-
-	/* Check "length" is 0 */
-	if (length != 0) {
-		/* Send buffer allocation */
-		bufp = (uchar_t *)kmem_zalloc(length, KM_SLEEP);
-
-		/* Data copy to send buffer */
-		bcopy(datap, bufp, length);
-	}
-
-	/* Make SCF command */
-	scf_cmd.flag = SCF_USE_L_BUF;
-	scf_cmd.cmd = CMD_OS_XSCF_CTL;
-	scf_cmd.subcmd = type;
-	scf_cmd.sbuf = bufp;
-	scf_cmd.scount = length;
-	scf_cmd.rbuf = NULL;
-	scf_cmd.rcount = 0;
-
-	/* Send SCF command */
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	/* Check send buffer */
-	if (bufp != NULL) {
-		/* Send data release */
-		kmem_free((void *)bufp, length);
-	}
-
-	/* putinfo exec flag OFF */
-	scf_comtbl.putinfo_exec_flag = FLAG_OFF;
-
-/*
- * END_service_putinfo
- */
-	END_service_putinfo:
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_S_PUTINFO | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_SRV, SCF_FUNC_NAME ": end return = %d", ret);
-
-	return (ret);
-}
-
-
-/*
- * scf_service_getinfo()
- *
- * Description: Data request to receive processing from the OS to ESCF.
- *
- */
-int
-scf_service_getinfo(uint32_t key, uint8_t type, uint32_t transid,
-	uint32_t *lengthp, void *datap)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_service_getinfo() "
-	scf_cmd_t		scf_cmd;	/* SCF command table */
-	scf_short_buffer_t	sbuf;		/* Send buffer */
-	uchar_t			*bufp = NULL;	/* Working value : buff addr */
-	uint_t			wkleng;		/* Working value : length */
-	int			ret = 0;	/* Return value */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG(SCF_DBGFLAG_SRV, SCF_FUNC_NAME ": start");
-	SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_IN, __LINE__,  &key, sizeof (key));
-
-	/* SCF command table/Send buffer clear */
-	bzero((void *)&scf_cmd, sizeof (scf_cmd_t));
-	bzero((void *)&sbuf.b[0], SCF_S_CNT_16);
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Check "key" */
-	if (key != KEY_ESCF) {
-		/* Invalid "key" */
-		SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_ERRCD, __LINE__, &key,
-			sizeof (key));
-		ret = EINVAL;
-		goto END_service_getinfo;
-	}
-
-	/* Check "lengthp" and "datap" */
-	if (lengthp == NULL) {
-		/* Invalid "lengthp" */
-		SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_ERRCD, __LINE__, &lengthp,
-			sizeof (lengthp));
-		ret = EINVAL;
-		goto END_service_getinfo;
-	}
-
-	/* Check "lengthp" is max length */
-	if (*lengthp > SCF_L_CNT_MAX) {
-		/* Invalid "lengthp" */
-		SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_ERRCD, __LINE__, lengthp,
-			sizeof (*lengthp));
-		ret = EINVAL;
-		goto END_service_getinfo;
-	}
-
-	/* Check, parameter "length" and "datap" */
-	if ((*lengthp != 0) && (datap == NULL)) {
-		/* Invalid "lengthp" or "datap" */
-		SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_ERRCD, __LINE__, lengthp,
-			sizeof (*lengthp));
-		ret = EINVAL;
-		goto END_service_getinfo;
-	}
-
-	/* Check getinfo exec flag */
-	if (scf_comtbl.getinfo_exec_flag == FLAG_ON) {
-		/* Multiplex, getinfo */
-		SC_DBG_DRV_TRACE(TC_S_GETINFO, __LINE__,
-			&scf_comtbl.getinfo_exec_flag,
-			sizeof (scf_comtbl.getinfo_exec_flag));
-		ret = EBUSY;
-		goto END_service_getinfo;
-	}
-
-	/* getinfo exec flag ON */
-	scf_comtbl.getinfo_exec_flag = FLAG_ON;
-
-	/* Check "lengthp" is 0 */
-	if (*lengthp != 0) {
-		/*
-		 * Receive buffer allocation
-		 */
-		wkleng = *lengthp;
-		bufp = (uchar_t *)kmem_zalloc(wkleng, KM_SLEEP);
-	} else {
-		wkleng = 0;
-	}
-
-	/* Make SCF command */
-	sbuf.four_bytes_access[0] = transid;
-	scf_cmd.flag = SCF_USE_SLBUF;
-	scf_cmd.cmd = CMD_OS_XSCF_CTL;
-	scf_cmd.subcmd = type;
-	scf_cmd.scount = SCF_S_CNT_15;
-	scf_cmd.sbuf = &sbuf.b[0];
-	scf_cmd.rcount = wkleng;
-	scf_cmd.rbuf = bufp;
-
-	/* Send SCF command */
-	ret = scf_send_cmd_check_bufful(&scf_cmd);
-
-	/* Check return code */
-	if (ret == 0) {
-		/* Set receive length */
-		if (*lengthp > scf_cmd.rbufleng) {
-			/* Set receive data length */
-			*lengthp = scf_cmd.rbufleng;
-		}
-
-		/* Check receive data length is not 0 */
-		if (*lengthp != 0) {
-			/* Data copy to "datap" */
-			bcopy(bufp, datap, *lengthp);
-		}
-	}
-
-	/* Check receive buffer */
-	if (bufp != NULL) {
-		/*
-		 * Receive data release
-		 */
-		kmem_free((void *)bufp, wkleng);
-	}
-
-	/* getinfo exec flag OFF */
-	scf_comtbl.getinfo_exec_flag = FLAG_OFF;
-
-/*
- * END_service_getinfo
- */
-	END_service_getinfo:
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_S_GETINFO | TC_OUT, __LINE__, &ret, sizeof (ret));
-	SCFDBGMSG1(SCF_DBGFLAG_SRV, SCF_FUNC_NAME ": end return = %d", ret);
-
-	return (ret);
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfparam.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/errno.h>
-#include <sys/time.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfsys.h>
-
-/*
- * Common table
- */
-scf_comtbl_t	scf_comtbl;			/* SCF driver common table */
-void	*scfstate;				/* root of soft state */
-char	*scf_driver_name = SCF_DRIVER_NAME;	/* SCF driver name */
-
-/*
- * SCF driver control mode
- */
-uint_t	scf_halt_proc_mode = HALTPROC_STOP; /* SCFHALT after processing mode */
-uint_t	scf_last_detach_mode = 0;		/* Last detach mode */
-
-/*
- * SRAM trace date size
- */
-uint_t	scf_sram_trace_data_size = 12;		/* Get SRAM trace data size */
-
-/*
- * Wait timer value (Micro-second)
- */
-uint_t	scf_rdctrl_sense_wait = 60000000;
-				/* SCFIOCRDCTRL wait timer value (60s) */
-
-/*
- * Wait timer value (Milli-second)
- */
-uint_t	scf_buf_ful_rtime = 500;
-				/* Buff full wait retry timer value (500ms) */
-uint_t	scf_rci_busy_rtime = 3000; /* RCI busy wait retry timer value (3s) */
-
-/*
- * Re-try counter
- */
-uint_t	scf_buf_ful_rcnt = 10;		/* Buff full retry counter */
-uint_t	scf_rci_busy_rcnt = 15;		/* RCI busy retry counter */
-uint_t	scf_tesum_rcnt = 1;		/* Tx sum retry counter */
-uint_t	scf_resum_rcnt = 1;		/* Rx sum retry counter */
-uint_t	scf_cmd_to_rcnt = 1;		/* Command to retry counter */
-uint_t	scf_devbusy_wait_rcnt = 6;	/* Command device busy retry counter */
-uint_t	scf_online_wait_rcnt = 30;	/* SCF online retry counter */
-uint_t	scf_path_change_max = 4;	/* SCF path change retry counter */
-
-/*
- * Max value
- */
-uint_t	scf_report_sense_pool_max = 96;	/* Report sense max */
-uint_t	scf_getevent_pool_max = 96;	/* SCFIOCGETEVENT max */
-uint_t	scf_rci_max = 32 + 94;		/* RCI device max */
-uint_t	scf_rxbuff_max_size = 4096;	/* SCF command data division max size */
-
-/*
- * Poff factor (reported on shutdown start)
- */
-unsigned char	scf_poff_factor[2][3] = {
-		{ 0x00, 0x00, 0x00 },	/* Shutdown (except pfail) */
-		{ 0x01, 0x00, 0x00 }};	/* Shutdown by pfail */
-
-/*
- * Alive check parameter
- */
-uchar_t	scf_alive_watch_code = 0x10;	/* alive code for SCF driver */
-uchar_t	scf_alive_phase_code = 0x00;	/* alive phase code */
-uchar_t	scf_alive_interval_time = INTERVAL_TIME_DEF;	/* interval time */
-uchar_t	scf_alive_monitor_time = MONITOR_TIME_DEF;	/* monitor timeout */
-ushort_t	scf_alive_panic_time = PANIC_TIME_DEF;	/* panic timeout */
-
-uchar_t	scf_acr_phase_code = 0x00;	/* Alive check register phase code */
-
-/*
- * FMEMA interface
- */
-caddr_t	scf_avail_cmd_reg_vaddr = 0;	/* SCF Command register address */
-
-/*
- * Send break interface
- */
-int	scf_dm_secure_mode = 0;		/* secure mode */
-
-/*
- * SCF driver version interface
- */
-ushort_t	scf_scfd_comif_version = 0x0000;	/* SCF driver version */
-
-/*
- * XSCF version interface
- */
-ushort_t	scf_xscf_comif_version = 0xffff;	/* XSCF version */
-
-/*
- * ioctl control value and flag
- */
-int	scf_save_hac_flag = 0;		/* Host address disp flag */
-scfhac_t scf_save_hac;			/* Host address disp save */
-
-/*
- * Register read sync value
- */
-uint8_t		scf_rs8;
-uint16_t	scf_rs16;
-uint32_t	scf_rs32;
-
-/*
- * Panic value
- */
-uint_t	scf_panic_reported = 0;		/* Panic report after */
-uint_t	scf_panic_report_maxretry = 15;	/* Same as busy_maxretry */
-uint_t	scf_cmdend_wait_time_panic = 1000;
-				/* SCF command end wait timer value (1s) */
-uint_t	scf_cmdend_wait_rcnt_panic = 4;	/* SCF command end retry counter */
-
-uint_t	scf_panic_exec_wait_time = 100;	/* Panic wait timer value (100ms) */
-uint_t	scf_panic_exec_flag = 0;	/* Panic exec flag */
-uint_t	scf_panic_exec_flag2 = 0;	/* Panic exec flag (report send) */
-
-/*
- * Panic trace
- */
-ushort_t scf_panic_trc_w_off = 0;	/* Panic trcae next write offset */
-uint16_t scf_panic_trc_command = 0;	/* Panic SCF command register memo */
-uint16_t scf_panic_trc_status = 0;	/* Panic SCF status register memo */
-ushort_t	scf_panic_trc[16];		/* Panic trace area */
--- a/usr/src/uts/sun4u/opl/io/scfd/scfreg.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1977 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/errno.h>
-#include <sys/time.h>
-#include <sys/kmem.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-
-/*
- * SCF command send control area save
- */
-struct scf_cmd		scfcmd_save;
-uchar_t			scf_sbuf_save[SCF_L_CNT_MAX];
-uchar_t			scf_rbuf_save[SCF_L_CNT_MAX];
-
-/*
- * Function list
- */
-int	scf_map_regs(dev_info_t *dip, scf_state_t *statep);
-void	scf_unmap_regs(scf_state_t *statep);
-int	scf_send_cmd_check_bufful(struct scf_cmd *scfcmdp);
-int	scf_send_cmd(struct scf_cmd *scfcmdp);
-void	scf_i_send_cmd(struct scf_cmd *scfcmdp, struct scf_state *statep);
-void	scf_p_send_cmd(struct scf_cmd *scfcmdp, struct scf_state *statep);
-int	scf_path_check(scf_state_t **statep);
-int	scf_offline_check(scf_state_t *statep, uint_t timer_exec_flag);
-int	scf_cmdbusy_check(scf_state_t *statep);
-void	scf_alivecheck_start(scf_state_t *statep);
-void	scf_alivecheck_stop(scf_state_t *statep);
-void	scf_forbid_intr(struct scf_state *statep);
-void	scf_permit_intr(struct scf_state *statep, int flag);
-int	scf_check_state(scf_state_t *statep);
-void	scf_chg_scf(scf_state_t *statep, int status);
-void	scf_del_queue(scf_state_t *statep);
-int	scf_make_send_cmd(struct scf_cmd *scfcmdp, uint_t flag);
-void	scf_sram_trace_init(struct scf_state *statep);
-void	scf_sram_trace(struct scf_state *statep, uint8_t log_id);
-
-/*
- * External function
- */
-extern	void	scf_dscp_stop(uint32_t factor);
-
-
-/*
- * scf_map_regs()
- *
- * Description: Register and SRAM map processing.
- *
- */
-int
-scf_map_regs(dev_info_t *dip, scf_state_t *statep)
-{
-#define	SCF_FUNC_NAME		"scf_map_regs() "
-	int			ret = 1;
-	uint32_t		wkoffset = 0;
-
-	ddi_device_acc_attr_t	access_attr = {
-		DDI_DEVICE_ATTR_V0,
-		DDI_STRUCTURE_BE_ACC,
-		DDI_STRICTORDER_ACC
-	};
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	SCF_DBG_TEST_MAP_REGS(statep);
-
-	/* map register 1 : SCF register */
-	if (ddi_regs_map_setup(dip, REG_INDEX_SCF,
-		(caddr_t *)&statep->scf_regs, 0, 0, &access_attr,
-		&statep->scf_regs_handle) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_regs_map_setup failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	statep->resource_flag |= S_DID_REG1;
-
-	/* map register 2 : SCF contorol register */
-	if (ddi_regs_map_setup(dip, REG_INDEX_SCFCNTL,
-		(caddr_t *)&statep->scf_regs_c, 0, 0, &access_attr,
-		&statep->scf_regs_c_handle) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_regs_map_setup failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	statep->resource_flag |= S_DID_REG2;
-
-	/* get size of register 3 : SCF DSCP SRAM */
-	if (ddi_dev_regsize(dip, REG_INDEX_DSCPSRAM,
-		&statep->scf_dscp_sram_len) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	/* check size */
-	if (statep->scf_dscp_sram_len < SRAM_MAX_DSCP) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	} else if (statep->scf_dscp_sram_len > SRAM_MAX_DSCP) {
-		statep->scf_dscp_sram_len = SRAM_MAX_DSCP;
-	}
-	/* map register 3 : SCF DSCP SRAM */
-	if (ddi_regs_map_setup(dip, REG_INDEX_DSCPSRAM,
-		(caddr_t *)&statep->scf_dscp_sram, 0,
-		(offset_t)statep->scf_dscp_sram_len, &access_attr,
-		&statep->scf_dscp_sram_handle) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_regs_map_setup failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	statep->resource_flag |= S_DID_REG3;
-
-	/* get size of register 4 : SCF system SRAM */
-	if (ddi_dev_regsize(dip, REG_INDEX_SYSTEMSRAM,
-		&statep->scf_sys_sram_len) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	/* check size */
-	if (statep->scf_sys_sram_len < SRAM_MAX_SYSTEM) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	} else if (statep->scf_sys_sram_len > SRAM_MAX_SYSTEM) {
-		statep->scf_sys_sram_len = SRAM_MAX_SYSTEM;
-	}
-	/* map register 4 : SCF system SRAM */
-	if (ddi_regs_map_setup(dip, REG_INDEX_SYSTEMSRAM,
-		(caddr_t *)&statep->scf_sys_sram, 0,
-		(offset_t)statep->scf_sys_sram_len, &access_attr,
-		&statep->scf_sys_sram_handle) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_regs_map_setup failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	statep->resource_flag |= S_DID_REG4;
-
-	/* get size of register 5 : SCF interface block */
-	if (ddi_dev_regsize(dip, REG_INDEX_INTERFACE,
-		&statep->scf_interface_len) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	/* check size */
-	if (statep->scf_interface_len < sizeof (scf_interface_t)) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_dev_regsize failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	} else  {
-		statep->scf_interface_len = sizeof (scf_interface_t);
-	}
-	/* map register 5 : SCF interface block */
-	if (ddi_regs_map_setup(dip, REG_INDEX_INTERFACE,
-		(caddr_t *)&statep->scf_interface, 0,
-		(offset_t)statep->scf_interface_len, &access_attr,
-		&statep->scf_interface_handle) != DDI_SUCCESS) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-		cmn_err(CE_WARN,
-			"%s: scf_map_regs: ddi_regs_map_setup failed.\n",
-			scf_driver_name);
-		goto END_map_regs;
-	}
-	statep->resource_flag |= S_DID_REG5;
-
-	/* get size of register : SRAM driver trace */
-	wkoffset = SCF_DDI_GET32(statep, statep->scf_interface_handle,
-		&statep->scf_interface->DRVTRC_OFFSET);
-	statep->scf_reg_drvtrc_len =
-		SCF_DDI_GET32(statep, statep->scf_interface_handle,
-		&statep->scf_interface->DRVTRC_SIZE);
-
-	if ((wkoffset != 0) && (statep->scf_reg_drvtrc_len != 0)) {
-		/* map register : SRAM driver trace */
-		if (ddi_regs_map_setup(dip, REG_INDEX_INTERFACE,
-			(caddr_t *)&statep->scf_reg_drvtrc, wkoffset,
-			(offset_t)statep->scf_reg_drvtrc_len, &access_attr,
-			&statep->scf_reg_drvtrc_handle) != DDI_SUCCESS) {
-			SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "map_regs", 8);
-			cmn_err(CE_WARN,
-				"%s: scf_map_regs: "
-				"ddi_regs_map_setup failed.\n",
-					scf_driver_name);
-			goto END_map_regs;
-		}
-		statep->resource_flag |= S_DID_REG6;
-	}
-
-	/* SRAM trace initialize */
-	scf_sram_trace_init(statep);
-
-	ret = 0;
-
-/*
- * END_map_regs
- */
-	END_map_regs:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_unmap_regs()
- *
- * Description: Register and SRAM un-map processing.
- *
- */
-void
-scf_unmap_regs(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_unmap_regs() "
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	SCF_DBG_TEST_UNMAP_REGS(statep);
-
-	/* Register and SRAM un-map */
-	if (statep->resource_flag & S_DID_REG1) {
-		ddi_regs_map_free(&statep->scf_regs_handle);
-		statep->resource_flag &= ~S_DID_REG1;
-	}
-
-	if (statep->resource_flag & S_DID_REG2) {
-		ddi_regs_map_free(&statep->scf_regs_c_handle);
-		statep->resource_flag &= ~S_DID_REG2;
-	}
-
-	if (statep->resource_flag & S_DID_REG3) {
-		ddi_regs_map_free(&statep->scf_dscp_sram_handle);
-		statep->resource_flag &= ~S_DID_REG3;
-	}
-
-	if (statep->resource_flag & S_DID_REG4) {
-		ddi_regs_map_free(&statep->scf_sys_sram_handle);
-		statep->resource_flag &= ~S_DID_REG4;
-	}
-
-	if (statep->resource_flag & S_DID_REG5) {
-		ddi_regs_map_free(&statep->scf_interface_handle);
-		statep->resource_flag &= ~S_DID_REG5;
-	}
-
-	if (statep->resource_flag & S_DID_REG6) {
-		ddi_regs_map_free(&statep->scf_reg_drvtrc_handle);
-		statep->resource_flag &= ~S_DID_REG6;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_send_cmd_check_bufful()
- *
- * Description: SCF command send and buffer busy check processing.
- *
- */
-int
-scf_send_cmd_check_bufful(struct scf_cmd *scfcmdp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_send_cmd_check_bufful() "
-	int			ret = 0;
-	int			buf_ful_cnt = scf_buf_ful_rcnt;
-	int			rci_busy_cnt = scf_rci_busy_rcnt;
-	clock_t			lb;
-	struct scf_state	*statep;
-	int			cv_ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	ret = scf_send_cmd(scfcmdp);
-
-	while (((scfcmdp->stat0 == BUF_FUL) && (buf_ful_cnt != 0)) ||
-		((scfcmdp->stat0 == RCI_BUSY) && (rci_busy_cnt != 0))) {
-		if (scfcmdp->stat0 == BUF_FUL) {
-			buf_ful_cnt--;
-			lb = ddi_get_lbolt();
-			lb += drv_usectohz(SCF_MIL2MICRO(scf_buf_ful_rtime));
-			cv_ret = 0;
-			while (cv_ret != (-1)) {
-				SC_DBG_DRV_TRACE(TC_T_WAIT, __LINE__,
-					&scf_comtbl.cmdbusy_cv,
-					sizeof (kcondvar_t));
-				if ((cv_ret =
-					cv_timedwait_sig(&scf_comtbl.cmdbusy_cv,
-					&scf_comtbl.all_mutex, lb)) == 0) {
-					SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-						&scf_comtbl.cmdbusy_cv,
-						sizeof (kcondvar_t));
-					ret = EINTR;
-					goto END_send_cmd_check_bufful;
-				}
-			}
-		} else if (scfcmdp->stat0 == RCI_BUSY) {
-			rci_busy_cnt--;
-			lb = ddi_get_lbolt();
-			lb += drv_usectohz(SCF_MIL2MICRO(scf_rci_busy_rtime));
-			cv_ret = 0;
-			while (cv_ret != (-1)) {
-				SC_DBG_DRV_TRACE(TC_T_WAIT, __LINE__,
-					&scf_comtbl.cmdbusy_cv,
-					sizeof (kcondvar_t));
-				if ((cv_ret =
-					cv_timedwait_sig(&scf_comtbl.cmdbusy_cv,
-					&scf_comtbl.all_mutex, lb)) == 0) {
-					SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-						&scf_comtbl.cmdbusy_cv,
-						sizeof (kcondvar_t));
-					ret = EINTR;
-					goto END_send_cmd_check_bufful;
-				}
-			}
-		} else {
-			break;
-		}
-		ret = scf_send_cmd(scfcmdp);
-	}
-
-	if (scf_comtbl.scf_exec_p) {
-		statep = scf_comtbl.scf_exec_p;
-	} else if (scf_comtbl.scf_path_p) {
-		statep = scf_comtbl.scf_path_p;
-	}
-	if (statep != NULL) {
-		if ((scfcmdp->stat0 == BUF_FUL) && (buf_ful_cnt == 0)) {
-			cmn_err(CE_WARN,
-				"%s,Buffer busy occurred in XSCF. "
-				"SCF command = 0x%02x%02x\n",
-					&statep->pathname[0],
-					scfcmdp->subcmd, scfcmdp->cmd);
-		} else if ((scfcmdp->stat0 == RCI_BUSY) &&
-			(rci_busy_cnt == 0)) {
-			cmn_err(CE_WARN,
-				"%s,RCI busy occurred in XSCF. "
-				"SCF command = 0x%02x%02x\n",
-					&statep->pathname[0],
-					scfcmdp->subcmd, scfcmdp->cmd);
-		}
-	}
-
-/*
- * END_send_cmd_check_bufful
- */
-	END_send_cmd_check_bufful:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-
-}
-
-
-/*
- * scf_send_cmd()
- *
- * Description: Synchronized SCF command send processing.
- *
- */
-int
-scf_send_cmd(struct scf_cmd *scfcmdp)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_send_cmd() "
-	struct scf_state	*statep;
-	int			ret = 0;
-	int			offline_ret;
-	int			cmdbusy_ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	scfcmdp->stat0 = 0;
-	/* Check SCF command send sync re-start */
-	if (scfcmdp->flag == SCF_USE_START) {
-		if (scf_comtbl.path_stop_flag != 0) {
-			/* Check path stop */
-			scf_comtbl.path_stop_flag = 0;
-			goto END_scf_send_cmd;
-		}
-		goto END_scf_send_cmd99;
-	}
-	/* Check SCF command send sync re-stop */
-	if ((scfcmdp->flag == SCF_USE_STOP) &&
-		(scf_comtbl.path_stop_flag != 0)) {
-		goto STOP_scf_send_cmd;
-	}
-	/* Check SCF command send sync stop status */
-	if ((scfcmdp->flag & SCF_USE_SP) != 0) {
-		goto SP_scf_send_cmd;
-	}
-	/* IOCTL/DETACH/SUSPEND send sync */
-	while (scf_comtbl.cmd_busy != 0) {
-		scf_comtbl.cmd_wait += 1;
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmd_cv,
-			sizeof (kcondvar_t));
-		if (cv_wait_sig(&scf_comtbl.cmd_cv,
-			&scf_comtbl.all_mutex) == 0) {
-			SC_DBG_DRV_TRACE(TC_KILL, __LINE__, &scf_comtbl.cmd_cv,
-				sizeof (kcondvar_t));
-			scf_comtbl.cmd_wait -= 1;
-			ret = EINTR;
-			goto END_scf_send_cmd99;
-		}
-		scf_comtbl.cmd_wait -= 1;
-	}
-	scf_comtbl.cmd_busy = 1;
-
-/*
- * STOP_scf_send_cmd
- */
-	STOP_scf_send_cmd:
-
-	/* Check SUSPEND flag */
-	if (scf_comtbl.suspend_flag) {
-		ret = EBUSY;
-		scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-		goto END_scf_send_cmd;
-	}
-
-	(void) scf_path_check(&statep);
-	if (statep == NULL) {
-		/* not exec SCF device */
-		ret = EIO;
-		scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-		goto END_scf_send_cmd;
-	}
-
-	offline_ret = scf_offline_check(statep, FLAG_ON);
-	cmdbusy_ret = scf_cmdbusy_check(statep);
-
-	/* send comannd for interrupt */
-	while ((scf_comtbl.scf_cmd_exec_flag != 0) ||
-		(offline_ret != SCF_PATH_ONLINE) ||
-		(cmdbusy_ret != SCF_COMMAND_READY)) {
-		scf_comtbl.cmd_busy_wait = 1;
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmdwait_cv,
-			sizeof (kcondvar_t));
-		if (cv_wait_sig(&scf_comtbl.cmdwait_cv,
-			&scf_comtbl.all_mutex) == 0) {
-			SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-				&scf_comtbl.cmdwait_cv, sizeof (kcondvar_t));
-			scf_comtbl.cmd_busy_wait = 0;
-			ret = EINTR;
-			goto END_scf_send_cmd;
-		}
-		scf_comtbl.cmd_busy_wait = 0;
-
-		(void) scf_path_check(&statep);
-		if (statep == NULL) {
-			/* not exec SCF device */
-			ret = EIO;
-			scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-			goto END_scf_send_cmd;
-		}
-
-		offline_ret = scf_offline_check(statep, FLAG_ON);
-		cmdbusy_ret = scf_cmdbusy_check(statep);
-
-		if ((scf_comtbl.scf_cmd_exec_flag == 0) &&
-			(offline_ret != SCF_PATH_ONLINE)) {
-			scf_timer_stop(SCF_TIMERCD_CMDBUSY);
-			scf_timer_stop(SCF_TIMERCD_ONLINE);
-			ret = EBUSY;
-			scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-			goto END_scf_send_cmd;
-		}
-	}
-
-/*
- * SP_scf_send_cmd
- */
-	SP_scf_send_cmd:
-
-	/* Check SUSPEND flag */
-	if (scf_comtbl.suspend_flag) {
-		ret = EBUSY;
-		scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-		goto END_scf_send_cmd;
-	}
-	if ((statep = scf_comtbl.scf_exec_p)  == 0) {
-		ret = EIO;
-		scfcmdp->stat0 = SCF_STAT0_NOT_PATH;
-		goto END_scf_send_cmd;
-	}
-
-	if (scfcmdp->flag == SCF_USE_STOP) {
-		/* SCF command send sync stop */
-		scf_comtbl.path_stop_flag = 1;
-		goto END_scf_send_cmd99;
-	}
-
-	bcopy((char *)scfcmdp, (char *)&scfcmd_save, sizeof (struct scf_cmd));
-	if (scfcmdp->sbuf != NULL) {
-		scfcmd_save.sbuf = &scf_sbuf_save[0];
-		if (scfcmdp->scount) {
-			bcopy(scfcmdp->sbuf, scf_sbuf_save, scfcmdp->scount);
-		}
-	}
-	if (scfcmdp->rbuf != NULL) {
-		scfcmd_save.rbuf = &scf_rbuf_save[0];
-	}
-	scfcmd_save.flag &= (~SCF_USE_SP);
-	scf_i_send_cmd(&scfcmd_save, statep);
-	scf_comtbl.scf_cmdp = &scfcmd_save;
-
-	scf_comtbl.scf_exec_cmd_id = 1;
-
-	scf_comtbl.cmd_end_wait = 1;
-	while (scf_comtbl.cmd_end_wait != 0) {
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmdend_cv,
-			sizeof (kcondvar_t));
-		if (cv_wait_sig(&scf_comtbl.cmdend_cv,
-			&scf_comtbl.all_mutex) == 0) {
-			SC_DBG_DRV_TRACE(TC_KILL, __LINE__,
-				&scf_comtbl.cmdend_cv, sizeof (kcondvar_t));
-			scf_comtbl.cmd_end_wait = 0;
-			ret = EINTR;
-			goto END_scf_send_cmd;
-		}
-	}
-	scfcmdp->stat0 = scfcmd_save.stat0;
-	scfcmdp->rbufleng = scfcmd_save.rbufleng;
-	scfcmdp->status = scfcmd_save.status;
-	if (scfcmdp->rbuf != NULL) {
-		if (scfcmdp->rbufleng < scfcmdp->rcount) {
-			bcopy(&scf_rbuf_save[0], scfcmdp->rbuf,
-				scfcmdp->rbufleng);
-		} else {
-			bcopy(&scf_rbuf_save[0], scfcmdp->rbuf,
-				scfcmdp->rcount);
-		}
-	}
-	scf_comtbl.cmd_end_wait = 0;
-
-	switch (scfcmdp->stat0) {
-	case NORMAL_END:
-		break;
-
-	case E_NOT_SUPPORT:
-	case RCI_NS:
-		ret = ENOTSUP;
-		break;
-
-	default:
-		/* BUF_FUL/RCI_BUSY/other */
-		ret = EIO;
-	}
-
-	if ((scfcmdp->flag & SCF_USE_SP) != 0) {
-		goto END_scf_send_cmd99;
-	}
-
-/*
- * END_scf_send_cmd
- */
-	END_scf_send_cmd:
-
-	scf_comtbl.cmd_busy = 0;
-	if (scf_comtbl.cmd_wait) {
-		cv_signal(&scf_comtbl.cmd_cv);
-		SC_DBG_DRV_TRACE(TC_SIGNAL, __LINE__, &scf_comtbl.cmd_cv,
-			sizeof (kcondvar_t));
-	}
-
-	if ((scfcmdp->flag & SCF_USE_SP) != 0) {
-		scf_comtbl.path_stop_flag = 0;
-	}
-
-/*
- * END_scf_send_cmd99
- */
-	END_scf_send_cmd99:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_i_send_cmd()
- *
- * Description: SCF command send processing. (for hard access)
- *
- */
-void
-scf_i_send_cmd(struct scf_cmd *scfcmdp, struct scf_state *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_i_send_cmd() "
-	uint8_t			sdata[16];
-	uint8_t			*wk_charp;
-	uint8_t			sum = SCF_MAGICNUMBER_S;
-	uint32_t		sum4 = SCF_MAGICNUMBER_L;
-	int			scount;
-	int			wkleng;
-	int			ii;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	bzero((void *)sdata, 16);
-
-	switch (scfcmdp->flag) {
-	case SCF_USE_S_BUF:
-	case SCF_USE_SSBUF:
-	case SCF_USE_SLBUF:
-		/*
-		 * Use Tx data register, Not use Tx buffer data
-		 */
-		/* Set Tx data register memo */
-		wk_charp = (uint8_t *)&scfcmdp->sbuf[0];
-		if (scfcmdp->scount < SCF_S_CNT_16) {
-			scount = scfcmdp->scount;
-		} else {
-			scount = SCF_S_CNT_15;
-		}
-		for (ii = 0; ii < scount; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		/* Set CMD_SPARE data */
-		if (scfcmdp->cmd == CMD_SPARE) {
-			sdata[12] = scfcmdp->cexr[0];
-			sdata[13] = scfcmdp->cexr[1];
-		}
-
-		break;
-
-	case SCF_USE_L_BUF:
-	case SCF_USE_LSBUF:
-		/*
-		 * Use Tx data register, Use Tx buffer data
-		 */
-		/* Make Tx buffer data sum */
-		for (ii = 0; ii < (scfcmdp->scount / 4); ii++) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16) |
-				(scfcmdp->sbuf[ii * 4 + 2] <<  8) |
-				(scfcmdp->sbuf[ii * 4 + 3]));
-		}
-		if ((scfcmdp->scount % 4) == 3) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16) |
-				(scfcmdp->sbuf[ii * 4 + 2] <<  8));
-		} else if ((scfcmdp->scount % 4) == 2) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16));
-		} else if ((scfcmdp->scount % 4) == 1) {
-			sum4 += (scfcmdp->sbuf[ii * 4 + 0] << 24);
-		}
-
-		/* Set Tx data register memo : data length */
-		wk_charp = (uint8_t *)&scfcmdp->scount;
-		for (ii = 0; ii < 4; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		/* Set Tx data register memo : sum */
-		wk_charp = (uint8_t *)&sum4;
-		for (ii = 8; ii < 12; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		/* Set CMD_SPARE data */
-		if (scfcmdp->cmd == CMD_SPARE) {
-			sdata[12] = scfcmdp->cexr[0];
-			sdata[13] = scfcmdp->cexr[1];
-		}
-
-		/* SRAM data write */
-		wk_in_p = (uint8_t *)scfcmdp->sbuf;
-		wk_out_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-		for (ii = 0; ii < scfcmdp->scount;
-			ii++, wk_in_p++, wk_out_p++) {
-			SCF_DDI_PUT8(statep, statep->scf_sys_sram_handle,
-				wk_out_p, *wk_in_p);
-		}
-
-		break;
-	}
-
-	/* Make Tx data sum */
-	for (ii = 0; ii < SCF_S_CNT_15; ii++) {
-		sum += sdata[ii];
-	}
-	/* Set Tx data sum */
-	sdata[15] = sum;
-
-	/* TxDATA register set */
-	statep->reg_tdata[0] =
-		(sdata[0] << 24) | (sdata[1] << 16) |
-		(sdata[2] << 8) | sdata[3];
-	SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TDATA0, statep->reg_tdata[0]);
-
-	statep->reg_tdata[1] =
-		(sdata[4] << 24) | (sdata[5] << 16) |
-		(sdata[6] << 8) | sdata[7];
-	SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TDATA1, statep->reg_tdata[1]);
-
-	SC_DBG_DRV_TRACE(TC_W_TDATA0, __LINE__, &statep->reg_tdata[0],
-		sizeof (statep->reg_tdata[0]) + sizeof (statep->reg_tdata[1]));
-
-	statep->reg_tdata[2] =
-		(sdata[8] << 24) | (sdata[9] << 16) |
-		(sdata[10] << 8) | sdata[11];
-	SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TDATA2, statep->reg_tdata[2]);
-
-	statep->reg_tdata[3] =
-		(sdata[12] << 24) | (sdata[13] << 16) |
-		(sdata[14] << 8) | sdata[15];
-	SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->TDATA3, statep->reg_tdata[3]);
-
-	SC_DBG_DRV_TRACE(TC_W_TDATA2, __LINE__, &statep->reg_tdata[2],
-		sizeof (statep->reg_tdata[2]) + sizeof (statep->reg_tdata[3]));
-
-	/* SCF command extendedregister set */
-	if (scf_comtbl.scf_cmd_resend_flag == 0) {
-		statep->reg_command_exr = 0x00;
-	} else {
-		scf_comtbl.scf_cmd_resend_flag = 0;
-		statep->reg_command_exr = COMMAND_ExR_RETRY;
-	}
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND_ExR, statep->reg_command_exr);
-	SC_DBG_DRV_TRACE(TC_W_COMMAND_ExR, __LINE__, &statep->reg_command_exr,
-		sizeof (statep->reg_command_exr));
-
-	/* SCF command register set */
-	statep->reg_command = ((scfcmdp->subcmd << 8) | scfcmdp->cmd);
-
-	/* Set sub command code */
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		(uint8_t *)&statep->scf_regs->COMMAND,
-		(uint8_t)(statep->reg_command >> 8));
-	/* Set command code : SCF interrupt */
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		(uint8_t *)&statep->scf_regs->COMMAND + 1,
-		(uint8_t)statep->reg_command);
-
-	SC_DBG_DRV_TRACE(TC_W_COMMAND, __LINE__, &statep->reg_command,
-		sizeof (statep->reg_command));
-	/* Register read sync */
-	scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND);
-
-	SCFDBGMSG2(SCF_DBGFLAG_REG, "CMD = 0x%04x CMDExR = 0x%02x",
-		statep->reg_command, statep->reg_command_exr);
-	SCFDBGMSG4(SCF_DBGFLAG_REG, "TxDR = 0x%08x 0x%08x 0x%08x 0x%08x",
-		statep->reg_tdata[0], statep->reg_tdata[1],
-		statep->reg_tdata[2], statep->reg_tdata[3]);
-
-	scf_comtbl.scf_cmd_exec_flag = 1;
-	scf_comtbl.scf_exec_cmd_id = 0;
-
-	/* SCF command timer start */
-	scf_timer_start(SCF_TIMERCD_CMDEND);
-
-	/* SRAM trace */
-	SCF_SRAM_TRACE(statep, DTC_CMD);
-	SCF_SRAM_TRACE(statep, DTC_SENDDATA);
-
-	if (((scfcmdp->flag == SCF_USE_L_BUF) ||
-		(scfcmdp->flag == SCF_USE_LSBUF)) &&
-		(scfcmdp->scount != 0)) {
-		if (scfcmdp->scount > scf_sram_trace_data_size) {
-			scount = scf_sram_trace_data_size;
-		} else {
-			scount = scfcmdp->scount;
-		}
-		wk_in_p = (uint8_t *)scfcmdp->sbuf;
-		while (scount != 0) {
-			bzero((void *)&statep->memo_scf_drvtrc.INFO[0],
-				sizeof (statep->memo_scf_drvtrc.INFO));
-			wk_out_p = (uint8_t *)&statep->memo_scf_drvtrc.INFO[0];
-			if (scount > sizeof (statep->memo_scf_drvtrc.INFO)) {
-				wkleng = sizeof (statep->memo_scf_drvtrc.INFO);
-			} else {
-				wkleng = scount;
-			}
-			scount -= wkleng;
-			bcopy(wk_in_p, wk_out_p, wkleng);
-			SCF_SRAM_TRACE(statep, DTC_SENDDATA_SRAM);
-			wk_in_p += wkleng;
-		}
-	}
-
-	SC_DBG_DRV_TRACE(TC_SEND, __LINE__, &scfcmdp->flag, 8);
-	SC_DBG_DRV_TRACE(TC_SEND, __LINE__, &scfcmdp->scount, 8);
-
-	SCF_DBG_TEST_SEND_CMD(statep, scfcmdp);
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * panic send cmd function
- */
-void
-scf_p_send_cmd(struct scf_cmd *scfcmdp, struct scf_state *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_p_send_cmd() "
-	uint8_t			sdata[16];
-	uint8_t			*wk_charp;
-	uint8_t			sum = SCF_MAGICNUMBER_S;
-	uint32_t		sum4 = SCF_MAGICNUMBER_L;
-	int			scount;
-	int			ii;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	uint16_t		wk_int16;
-
-	SCFDBGMSG(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": start");
-
-	bzero((void *)sdata, 16);
-
-	switch (scfcmdp->flag) {
-	case SCF_USE_S_BUF:
-	case SCF_USE_SSBUF:
-	case SCF_USE_SLBUF:
-		/*
-		 * Use Tx data register, Not use Tx buffer data
-		 */
-		/* Set Tx data register memo */
-		wk_charp = (uint8_t *)&scfcmdp->sbuf[0];
-		if (scfcmdp->scount < SCF_S_CNT_16) {
-			scount = scfcmdp->scount;
-		} else {
-			scount = SCF_S_CNT_15;
-		}
-		for (ii = 0; ii < scount; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		break;
-
-	case SCF_USE_L_BUF:
-	case SCF_USE_LSBUF:
-		/*
-		 * Use Tx data register, Use Tx buffer data
-		 */
-		/* Make Tx buffer data sum */
-		for (ii = 0; ii < (scfcmdp->scount / 4); ii++) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16) |
-				(scfcmdp->sbuf[ii * 4 + 2] <<  8) |
-				(scfcmdp->sbuf[ii * 4 + 3]));
-		}
-		if ((scfcmdp->scount % 4) == 3) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16) |
-				(scfcmdp->sbuf[ii * 4 + 2] <<  8));
-		} else if ((scfcmdp->scount % 4) == 2) {
-			sum4 += ((scfcmdp->sbuf[ii * 4 + 0] << 24) |
-				(scfcmdp->sbuf[ii * 4 + 1] << 16));
-		} else if ((scfcmdp->scount % 4) == 1) {
-			sum4 += (scfcmdp->sbuf[ii * 4 + 0] << 24);
-		}
-
-		/* Set Tx data register memo : data length */
-		wk_charp = (uint8_t *)&scfcmdp->scount;
-		for (ii = 0; ii < 4; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		/* Set Tx data register memo : sum */
-		wk_charp = (uint8_t *)&sum4;
-		for (ii = 8; ii < 12; ii++, wk_charp++) {
-			sdata[ii] = *wk_charp;
-		}
-
-		/* Set CMD_SPARE data */
-		if (scfcmdp->cmd == CMD_SPARE) {
-			sdata[12] = scfcmdp->cexr[0];
-			sdata[13] = scfcmdp->cexr[1];
-		}
-
-		/* SRAM data write */
-		wk_in_p = (uint8_t *)scfcmdp->sbuf;
-		wk_out_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-		for (ii = 0; ii < scfcmdp->scount;
-			ii++, wk_in_p++, wk_out_p++) {
-			SCF_P_DDI_PUT8(statep->scf_sys_sram_handle,
-				wk_out_p, *wk_in_p);
-		}
-
-		break;
-	}
-
-	/* Make Tx data sum */
-	for (ii = 0; ii < SCF_S_CNT_15; ii++) {
-		sum += sdata[ii];
-	}
-	/* Set Tx data sum */
-	sdata[15] = sum;
-
-	/* TxDATA register set */
-	SCF_P_DDI_PUT32(statep->scf_regs_handle, &statep->scf_regs->TDATA0,
-		(sdata[0] << 24) | (sdata[1] << 16) |
-		(sdata[2] << 8) | sdata[3]);
-	SCF_P_DDI_PUT32(statep->scf_regs_handle, &statep->scf_regs->TDATA1,
-		(sdata[4] << 24) | (sdata[5] << 16) |
-		(sdata[6] << 8) | sdata[7]);
-	SCF_P_DDI_PUT32(statep->scf_regs_handle, &statep->scf_regs->TDATA2,
-		(sdata[8] << 24) | (sdata[9] << 16) |
-		(sdata[10] << 8) | sdata[11]);
-	SCF_P_DDI_PUT32(statep->scf_regs_handle, &statep->scf_regs->TDATA3,
-		(sdata[12] << 24) | (sdata[13] << 16) |
-		(sdata[14] << 8) | sdata[15]);
-
-	/* SCF command extendedregister set */
-	SCF_P_DDI_PUT8(statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND_ExR, 0x00);
-
-	/* SCF command register set */
-	SCF_P_DDI_PUT8(statep->scf_regs_handle,
-		(uint8_t *)&statep->scf_regs->COMMAND,
-		(uint8_t)scfcmdp->subcmd);
-	SCF_P_DDI_PUT8(statep->scf_regs_handle,
-		(uint8_t *)&statep->scf_regs->COMMAND + 1,
-		(uint8_t)scfcmdp->cmd);
-	/* Register read sync */
-	wk_int16 = SCF_P_DDI_GET16(statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND);
-	scf_panic_trc_command = wk_int16;
-
-	SCFDBGMSG(SCF_DBGFLAG_FOCK, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * SCF path status check
- */
-int
-scf_path_check(scf_state_t **statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_path_check() "
-	int			ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	if (scf_comtbl.scf_exec_p != NULL) {
-		/* SCF path exec status */
-		if (statep != NULL) {
-			*statep = scf_comtbl.scf_exec_p;
-		}
-
-		ret = scf_offline_check(scf_comtbl.scf_exec_p, FLAG_ON);
-
-	} else if (scf_comtbl.scf_path_p != NULL) {
-		/* SCF path change status */
-		if (statep != NULL) {
-			*statep = scf_comtbl.scf_path_p;
-		}
-
-		ret = scf_offline_check(scf_comtbl.scf_path_p, FLAG_ON);
-
-		if (ret == SCF_PATH_ONLINE) {
-			SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF path change status");
-			ret = SCF_PATH_CHANGE;
-		}
-
-	} else {
-		/* SCF path halt status */
-		if (statep != NULL) {
-			*statep = NULL;
-		}
-
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF path halt status");
-		ret = SCF_PATH_HALT;
-
-	}
-
-	SCF_DBG_MAKE_PATH_CHECK(ret);
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * ESCF offline check
- */
-int
-scf_offline_check(scf_state_t *statep, uint_t timer_exec_flag)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_offline_check() "
-	int			ret;
-	uint8_t			scf_unit;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Get SCF Status extended register */
-	statep->reg_status_exr = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-		&statep->scf_regs->STATUS_ExR);
-	SC_DBG_DRV_TRACE(TC_R_STATUS_ExR, __LINE__, &statep->reg_status_exr,
-		sizeof (statep->reg_status_exr));
-
-	SCF_DBG_MAKE_ONLINE(statep->reg_status_exr);
-
-	/* Check SCF online */
-	if ((statep->reg_status_exr & STATUS_SCF_STATUS) == STATUS_SCF_ONLINE) {
-		if (scf_comtbl.scf_status == SCF_STATUS_OFFLINE) {
-			cmn_err(CE_NOTE, "%s: SCF online.\n", scf_driver_name);
-		}
-		scf_comtbl.scf_status = SCF_STATUS_ONLINE;
-
-		if (timer_exec_flag == FLAG_ON) {
-			/* Check online wait timer exec */
-			if (scf_timer_check(SCF_TIMERCD_ONLINE) ==
-				SCF_TIMER_NOT_EXEC) {
-				ret = SCF_PATH_ONLINE;
-			} else {
-				ret = SCF_PATH_OFFLINE_DRV;
-			}
-		} else {
-			ret = SCF_PATH_ONLINE;
-		}
-	} else {
-		if (scf_comtbl.scf_status != SCF_STATUS_OFFLINE) {
-			if (statep->reg_status_exr & STATUS_SCF_NO) {
-				scf_unit = 1;
-			} else {
-				scf_unit = 0;
-			}
-			cmn_err(CE_WARN,
-				"%s: SCF went to offline mode. unit=%d",
-				scf_driver_name, scf_unit);
-		}
-		scf_comtbl.scf_status = SCF_STATUS_OFFLINE;
-
-		if (timer_exec_flag == FLAG_ON) {
-			/* Check online wait timer exec */
-			if (scf_timer_check(SCF_TIMERCD_ONLINE) ==
-				SCF_TIMER_NOT_EXEC) {
-				/* DCSP interface stop */
-				scf_dscp_stop(FACTOR_OFFLINE);
-
-				/* SCF online timer start */
-				statep->online_to_rcnt = 0;
-				scf_timer_start(SCF_TIMERCD_ONLINE);
-			}
-		}
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF path offline");
-		ret = SCF_PATH_OFFLINE;
-	}
-
-	SCF_DBG_MAKE_OFFLINE_CHECK(ret);
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * SCF command busy check
- */
-int
-scf_cmdbusy_check(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_cmdbusy_check() "
-	int			ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	SCF_DBG_RTN_MAKE_CMD_READY;
-
-	/* Get SCF command register */
-	statep->reg_command = SCF_DDI_GET16(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND, __LINE__, &statep->reg_command,
-		sizeof (statep->reg_command));
-	statep->reg_command_exr = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->COMMAND_ExR);
-	SC_DBG_DRV_TRACE(TC_R_COMMAND_ExR, __LINE__, &statep->reg_command_exr,
-		sizeof (statep->reg_command_exr));
-
-	SCF_DBG_MAKE_CMD_BUSY(statep->reg_command, statep->reg_command_exr);
-
-	/* Check busy flag */
-	if (((statep->reg_command & COMMAND_BUSY) == 0x0000) &&
-		((statep->reg_command_exr & COMMAND_ExR_BUSY) == 0x00)) {
-		/* Check busy timer exec */
-		if (scf_timer_check(SCF_TIMERCD_CMDBUSY) ==
-			SCF_TIMER_NOT_EXEC) {
-			ret = SCF_COMMAND_READY;
-			SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF command busy");
-		} else {
-			ret = SCF_COMMAND_BUSY_DRV;
-			SCFDBGMSG(SCF_DBGFLAG_SYS, "SCF command exr busy");
-		}
-	} else {
-		if (scf_comtbl.scf_cmd_exec_flag == FLAG_OFF) {
-			/* Check busy timer exec */
-			if (scf_timer_check(SCF_TIMERCD_CMDBUSY) ==
-				SCF_TIMER_NOT_EXEC) {
-				/* busy timer start */
-				statep->devbusy_to_rcnt = 0;
-				scf_timer_start(SCF_TIMERCD_CMDBUSY);
-			}
-		}
-		ret = SCF_COMMAND_BUSY;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-void
-scf_alivecheck_start(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_alivecheck_start() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Check alive check exec */
-	if (scf_comtbl.alive_running == SCF_ALIVE_START) {
-		/* Alive check value initialize */
-		scf_acr_phase_code = 0;
-		scf_comtbl.scf_alive_int_count = scf_alive_interval_time / 3;
-
-		/* Alive timer register initialize */
-		statep->reg_atr = ATR_INTERVAL_STOP;
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ATR, statep->reg_atr);
-		SC_DBG_DRV_TRACE(TC_W_ATR, __LINE__, &statep->reg_atr,
-			sizeof (statep->reg_atr));
-		/* Register read sync */
-		scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ATR);
-
-		/* Alive Interrupt enable */
-		statep->reg_control |= CONTROL_ALIVEINE;
-		SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL, statep->reg_control);
-		SC_DBG_DRV_TRACE(TC_W_CONTROL, __LINE__, &statep->reg_control,
-			sizeof (statep->reg_control));
-		/* Register read sync */
-		scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->CONTROL);
-
-		/* Alive timer register set */
-		statep->reg_atr = ATR_INTERVAL_30S;
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ATR, statep->reg_atr);
-		SC_DBG_DRV_TRACE(TC_W_ATR, __LINE__, &statep->reg_atr,
-			sizeof (statep->reg_atr));
-		/* Register read sync */
-		scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ATR);
-
-		/* Alive check register set */
-		statep->reg_acr = scf_acr_phase_code | ACR_ALIVE_INT;
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ACR, statep->reg_acr);
-		SC_DBG_DRV_TRACE(TC_W_ACR, __LINE__, &statep->reg_acr,
-			sizeof (statep->reg_acr));
-		/* Register read sync */
-		scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->ACR);
-
-		SCFDBGMSG1(SCF_DBGFLAG_REG, "ACR = 0x%02x", statep->reg_acr);
-
-		scf_acr_phase_code++;
-
-		SCF_DBG_TEST_ALIVE_START(statep);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-void
-scf_alivecheck_stop(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_alivecheck_stop() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Alive Interrupt disable */
-	statep->reg_control &= (~CONTROL_ALIVEINE);
-	SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL, statep->reg_control);
-	SC_DBG_DRV_TRACE(TC_W_CONTROL, __LINE__, &statep->reg_control,
-		sizeof (statep->reg_control));
-	/* Register read sync */
-	scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL);
-
-	/* Alive timer register clear */
-	statep->reg_atr = ATR_INTERVAL_STOP;
-	SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->ATR, statep->reg_atr);
-	SC_DBG_DRV_TRACE(TC_W_ATR, __LINE__, &statep->reg_atr,
-		sizeof (statep->reg_atr));
-	/* Register read sync */
-	scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-		&statep->scf_regs->ATR);
-
-	SCF_DBG_TEST_ALIVE_STOP(statep);
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * forbid SCF interrupt
- */
-void
-scf_forbid_intr(struct scf_state *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_forbid_intr() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	/* Interrupt disable */
-	statep->reg_control = CONTROL_DISABLE;
-	SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL, statep->reg_control);
-	SC_DBG_DRV_TRACE(TC_W_CONTROL, __LINE__, &statep->reg_control,
-		sizeof (statep->reg_control));
-	/* Register read sync */
-	scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL);
-
-	scf_alivecheck_stop(statep);
-
-	statep->resource_flag &= (~S_DID_REGENB);
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * permit SCF interrupt
- */
-void
-scf_permit_intr(struct scf_state *statep, int flag)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_permit_intr() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	if (flag) {
-		/* SCF Status register interrupt clear */
-		SCF_DDI_PUT16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS, 0xffff);
-		/* Register read sync */
-		scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS);
-
-		/* SCF Status extended register interrupt clear */
-		SCF_DDI_PUT32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR, 0xffffffff);
-		/* Register read sync */
-		scf_rs32 = SCF_DDI_GET32(statep, statep->scf_regs_handle,
-			&statep->scf_regs->STATUS_ExR);
-
-		/* DSCP buffer status register interrupt clear */
-		SCF_DDI_PUT8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->DSR, 0xff);
-		/* Register read sync */
-		scf_rs8 = SCF_DDI_GET8(statep, statep->scf_regs_handle,
-			&statep->scf_regs->DSR);
-
-		/* SCF interrupt status register interrupt clear */
-		SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST,
-			(INT_ST_PATHCHGIE | CONTROL_ALIVEINE));
-		/* Register read sync */
-		scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-			&statep->scf_regs_c->INT_ST);
-	}
-
-	/* Interrupt enable */
-	statep->reg_control = CONTROL_ENABLE;
-	SCF_DDI_PUT16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL, statep->reg_control);
-	SC_DBG_DRV_TRACE(TC_W_CONTROL, __LINE__, &statep->reg_control,
-		sizeof (statep->reg_control));
-	/* Register read sync */
-	scf_rs16 = SCF_DDI_GET16(statep, statep->scf_regs_c_handle,
-		&statep->scf_regs_c->CONTROL);
-
-	statep->resource_flag |= S_DID_REGENB;
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * Path status check
- */
-int
-scf_check_state(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_check_state() "
-	scf_state_t		*wkstatep;
-	int			ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start");
-
-	if (statep != NULL) {
-		if ((statep == scf_comtbl.scf_exec_p) ||
-			(statep == scf_comtbl.scf_path_p)) {
-			/* PATH_STAT_ACTIVE status */
-			ret = PATH_STAT_ACTIVE;
-		} else {
-			wkstatep = scf_comtbl.scf_wait_p;
-			while (wkstatep) {
-				if (statep == wkstatep) {
-					/* PATH_STAT_STANDBY status */
-					ret = PATH_STAT_STANDBY;
-					goto END_check_state;
-				} else {
-					wkstatep = wkstatep->next;
-				}
-			}
-			wkstatep = scf_comtbl.scf_stop_p;
-			while (wkstatep) {
-				if (statep == wkstatep) {
-					/* PATH_STAT_STOP status */
-					ret = PATH_STAT_STOP;
-					goto END_check_state;
-				} else {
-					wkstatep = wkstatep->next;
-				}
-			}
-			wkstatep = scf_comtbl.scf_err_p;
-			while (wkstatep) {
-				if (statep == wkstatep) {
-					/* PATH_STAT_FAIL status */
-					ret = PATH_STAT_FAIL;
-					goto END_check_state;
-				} else {
-					wkstatep = wkstatep->next;
-				}
-			}
-			wkstatep = scf_comtbl.scf_disc_p;
-			while (wkstatep) {
-				if (statep == wkstatep) {
-					/* PATH_STAT_DISCON status */
-					ret = PATH_STAT_DISCON;
-					goto END_check_state;
-				} else {
-					wkstatep = wkstatep->next;
-				}
-			}
-			/* scf_comtbl.scf_suspend_p queue */
-			/* PATH_STAT_DISCON status */
-			ret = PATH_STAT_EMPTY;
-		}
-	} else {
-		/* PATH_STAT_DISCON status */
-		ret = PATH_STAT_EMPTY;
-	}
-
-/*
- * END_check_state
- */
-	END_check_state:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * Multi path status change and queue change
- */
-void
-scf_chg_scf(scf_state_t *statep, int status)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_chg_scf() "
-	scf_state_t		*wkstatep;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG2(SCF_DBGFLAG_SYS,
-		SCF_FUNC_NAME ": start instance = %d status = %d",
-		statep->instance, statep->path_status);
-
-	/* Set path status */
-	if (statep->path_status != status) {
-		statep->old_path_status = statep->path_status;
-		statep->path_status = status;
-	}
-	switch (status) {
-	case PATH_STAT_ACTIVE:
-		/* Not queue change */
-		break;
-
-	case PATH_STAT_EMPTY:
-		/* Change empty queue */
-		if (scf_comtbl.scf_suspend_p) {
-			wkstatep = scf_comtbl.scf_suspend_p;
-			while (wkstatep->next) {
-				wkstatep = wkstatep->next;
-			}
-			wkstatep->next = statep;
-		} else {
-			scf_comtbl.scf_suspend_p = statep;
-		}
-		statep->next = 0;
-		break;
-
-	case PATH_STAT_STANDBY:
-		/* Change standby queue */
-		if (scf_comtbl.scf_wait_p) {
-			wkstatep = scf_comtbl.scf_wait_p;
-			while (wkstatep->next) {
-				wkstatep = wkstatep->next;
-			}
-			wkstatep->next = statep;
-		} else {
-			scf_comtbl.scf_wait_p = statep;
-		}
-		statep->next = 0;
-		break;
-
-	case PATH_STAT_STOP:
-		/* Change stop queue */
-		if (scf_comtbl.scf_stop_p) {
-			wkstatep = scf_comtbl.scf_stop_p;
-			while (wkstatep->next) {
-				wkstatep = wkstatep->next;
-			}
-			wkstatep->next = statep;
-		} else {
-			scf_comtbl.scf_stop_p = statep;
-		}
-		statep->next = 0;
-		break;
-
-	case PATH_STAT_FAIL:
-		/* Change fail queue */
-		if (scf_comtbl.scf_err_p) {
-			wkstatep = scf_comtbl.scf_err_p;
-			while (wkstatep->next) {
-				wkstatep = wkstatep->next;
-			}
-			wkstatep->next = statep;
-		} else {
-			scf_comtbl.scf_err_p = statep;
-		}
-		statep->next = 0;
-		break;
-
-	case PATH_STAT_DISCON:
-		/* Change disconnect queue */
-		if (scf_comtbl.scf_disc_p) {
-			wkstatep = scf_comtbl.scf_disc_p;
-			while (wkstatep->next) {
-				wkstatep = wkstatep->next;
-			}
-			wkstatep->next = statep;
-		} else {
-			scf_comtbl.scf_disc_p = statep;
-		}
-		statep->next = 0;
-		break;
-	}
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end status = %d",
-		statep->path_status);
-}
-
-/*
- * Multi path  queue check and delete queue
- */
-void
-scf_del_queue(scf_state_t *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_del_queue() "
-	scf_state_t		*wkstatep;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start instance = %d",
-		statep->instance);
-
-	if ((wkstatep = scf_comtbl.scf_exec_p) == statep) {
-		/* Delete active(exec) queue */
-		scf_comtbl.scf_exec_p = NULL;
-		return;
-	} else if ((wkstatep = scf_comtbl.scf_path_p) == statep) {
-		/* Delete active(path change) queue */
-		scf_comtbl.scf_path_p = NULL;
-		return;
-	} else {
-		if ((wkstatep = scf_comtbl.scf_suspend_p) != 0) {
-			/* Delete empty(suspend) queue */
-			if (wkstatep == statep) {
-				scf_comtbl.scf_suspend_p = wkstatep->next;
-				return;
-			} else {
-				while (wkstatep->next) {
-					if (wkstatep->next == statep) {
-						wkstatep->next = statep->next;
-						return;
-					}
-					wkstatep = wkstatep->next;
-				}
-			}
-		}
-		if ((wkstatep = scf_comtbl.scf_wait_p) != 0) {
-			/* Delete standby(wait) queue */
-			if (wkstatep == statep) {
-				scf_comtbl.scf_wait_p = wkstatep->next;
-				return;
-			} else {
-				while (wkstatep->next) {
-					if (wkstatep->next == statep) {
-						wkstatep->next = statep->next;
-						return;
-					}
-					wkstatep = wkstatep->next;
-				}
-			}
-		}
-		if ((wkstatep = scf_comtbl.scf_err_p) != 0) {
-			/* Delete fail(error) queue */
-			if (wkstatep == statep) {
-				scf_comtbl.scf_err_p = wkstatep->next;
-				return;
-			} else {
-				while (wkstatep->next) {
-					if (wkstatep->next == statep) {
-						wkstatep->next = statep->next;
-						return;
-					}
-					wkstatep = wkstatep->next;
-				}
-			}
-		}
-		if ((wkstatep = scf_comtbl.scf_stop_p) != 0) {
-			/* Delete stop queue */
-			if (wkstatep == statep) {
-				scf_comtbl.scf_stop_p = wkstatep->next;
-				return;
-			} else {
-				while (wkstatep->next) {
-					if (wkstatep->next == statep) {
-						wkstatep->next = statep->next;
-						return;
-					}
-					wkstatep = wkstatep->next;
-				}
-			}
-		}
-		if ((wkstatep = scf_comtbl.scf_disc_p) != 0) {
-			/* Delete disconnect queue */
-			if (wkstatep == statep) {
-				scf_comtbl.scf_disc_p = wkstatep->next;
-				return;
-			} else {
-				while (wkstatep->next) {
-					if (wkstatep->next == statep) {
-						wkstatep->next = statep->next;
-						return;
-					}
-					wkstatep = wkstatep->next;
-				}
-			}
-		}
-	}
-	SCFDBGMSG(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * SCF command send sync
- */
-int
-scf_make_send_cmd(struct scf_cmd *scfcmdp, uint_t flag)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_make_send_cmd() "
-	/* falg = SCF_USE_STOP  : SCF command stop wait */
-	/* falg = SCF_USE_START : SCF_USE_STOP signal  */
-
-	int					ret;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": start flag = 0x%08x",
-		flag);
-
-	scfcmdp->cmd = 0;
-	scfcmdp->subcmd = 0;
-	scfcmdp->scount = 0;
-	scfcmdp->sbuf = NULL;
-	scfcmdp->rcount = 0;
-	scfcmdp->rbuf = NULL;
-	scfcmdp->flag = flag;
-	ret = scf_send_cmd_check_bufful(scfcmdp);
-
-	SCFDBGMSG1(SCF_DBGFLAG_SYS, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_sram_trace_init()
- *
- * SRAM trace initialize processing.
- *
- */
-void
-scf_sram_trace_init(struct scf_state *statep)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_sram_trace_init() "
-	uint8_t			wk_drv_id;
-	uint32_t		wk_data_top;
-	uint32_t		wk_data_last;
-	uint32_t		wk_data_write;
-	off_t			min_len;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	int			wk_leng;
-	int			ii;
-	uint8_t			drv_name[DRV_ID_SIZE];
-	uint8_t			*wk_drv_vl = (uint8_t *)SCF_DRIVER_VERSION;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_TRACE, SCF_FUNC_NAME ": start");
-
-	/* Check SRAM map */
-	if (statep->resource_flag & S_DID_REG6) {
-		wk_drv_id =
-			SCF_DDI_GET8(statep, statep->scf_reg_drvtrc_handle,
-			&statep->scf_reg_drvtrc->DRV_ID[0]);
-		wk_data_top =
-			SCF_DDI_GET32(statep, statep->scf_reg_drvtrc_handle,
-			&statep->scf_reg_drvtrc->DATA_TOP);
-		wk_data_last =
-			SCF_DDI_GET32(statep, statep->scf_reg_drvtrc_handle,
-			&statep->scf_reg_drvtrc->DATA_LAST);
-		wk_data_write =
-			SCF_DDI_GET32(statep, statep->scf_reg_drvtrc_handle,
-			&statep->scf_reg_drvtrc->DATA_WRITE);
-		if ((wk_drv_id == 0) ||
-			(wk_data_top != statep->memo_DATA_TOP) ||
-			(wk_data_last != statep->memo_DATA_LAST) ||
-			((wk_data_write >= wk_data_top) &&
-			(wk_data_write <= wk_data_last))) {
-			/* Make SRAM driver trace header */
-			min_len = (off_t)(sizeof (scf_if_drvtrc_t) +
-				sizeof (scf_drvtrc_ent_t));
-			if (statep->scf_reg_drvtrc_len >= min_len) {
-				statep->memo_DATA_TOP =
-					(uint32_t)(sizeof (scf_if_drvtrc_t));
-				statep->memo_DATA_WRITE =
-					(uint32_t)(sizeof (scf_if_drvtrc_t));
-				statep->memo_DATA_LAST =
-					(uint32_t)(statep->scf_reg_drvtrc_len -
-					sizeof (scf_drvtrc_ent_t));
-			} else {
-				statep->memo_DATA_TOP = 0;
-				statep->memo_DATA_WRITE = 0;
-				statep->memo_DATA_LAST = 0;
-			}
-			SCF_DDI_PUT32(statep, statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_TOP,
-				statep->memo_DATA_TOP);
-			SCF_DDI_PUT32(statep, statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_WRITE,
-				statep->memo_DATA_WRITE);
-			SCF_DDI_PUT32(statep, statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_LAST,
-				statep->memo_DATA_LAST);
-		} else {
-			statep->memo_DATA_TOP = SCF_DDI_GET32(statep,
-				statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_TOP);
-			statep->memo_DATA_WRITE = SCF_DDI_GET32(statep,
-				statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_WRITE);
-			statep->memo_DATA_LAST = SCF_DDI_GET32(statep,
-				statep->scf_reg_drvtrc_handle,
-				&statep->scf_reg_drvtrc->DATA_LAST);
-		}
-
-		wk_leng = sizeof (SCF_DRIVER_VERSION);
-		if (wk_leng > DRV_ID_SIZE) {
-			wk_leng = DRV_ID_SIZE;
-		}
-		wk_in_p = wk_drv_vl;
-		wk_out_p = (uint8_t *)&drv_name[0];
-		for (ii = 0; ii < wk_leng; ii++, wk_in_p++, wk_out_p++) {
-			*wk_out_p = *wk_in_p;
-		}
-		for (; ii < DRV_ID_SIZE; ii++, wk_out_p++) {
-			*wk_out_p = ' ';
-		}
-		wk_in_p = (uint8_t *)&drv_name[0];
-		wk_out_p = (uint8_t *)&statep->scf_reg_drvtrc->DRV_ID[0];
-		for (ii = 0; ii < DRV_ID_SIZE; ii++, wk_in_p++, wk_out_p++) {
-			SCF_DDI_PUT8(statep, statep->scf_reg_drvtrc_handle,
-				wk_out_p, *wk_in_p);
-		}
-	} else {
-		statep->memo_DATA_TOP = 0;
-		statep->memo_DATA_WRITE = 0;
-		statep->memo_DATA_LAST = 0;
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_TRACE, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_sram_trace()
- *
- * SRAM trace get processing.
- *
- */
-void
-scf_sram_trace(struct scf_state *statep, uint8_t log_id)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_sram_trace() "
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	clock_t			clock_val;
-	uint32_t		log_time;
-	uint8_t			wk_log_id;
-	int			ii;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_TRACE, SCF_FUNC_NAME ": start");
-
-	if (statep->memo_DATA_WRITE) {
-		statep->memo_scf_drvtrc.LOG_ID = log_id;
-		clock_val = ddi_get_lbolt();
-		log_time = (uint32_t)(drv_hztousec(clock_val) / 100000);
-		statep->memo_scf_drvtrc.LOG_TIME[0] = (uint8_t)(log_time >> 16);
-		statep->memo_scf_drvtrc.LOG_TIME[1] = (uint8_t)(log_time >> 8);
-		statep->memo_scf_drvtrc.LOG_TIME[2] = (uint8_t)(log_time);
-
-		if ((log_id & DTC_MASK_HIGH) == DTC_ERRRTN) {
-			wk_log_id = DTC_ERRRTN;
-		} else {
-			wk_log_id = log_id;
-		}
-
-		/* Check log id */
-		switch (wk_log_id) {
-		case DTC_ONLINETO:		/* SCF online timeout */
-		case DTC_ONLINE:		/* SCF online start */
-		case DTC_OFFLINE:		/* SCF offline start */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA2_2(4, statep->reg_command,
-				statep->reg_status);
-			SCF_SET_SRAM_DATA4_1(8, statep->reg_status_exr);
-			break;
-
-		case DTC_SENDDATA:		/* SCF send command data */
-			SCF_SET_SRAM_DATA4_3(0, statep->reg_tdata[0],
-				statep->reg_tdata[2], statep->reg_tdata[3]);
-			break;
-
-		case DTC_RECVDATA:		/* SCF recv command data */
-			SCF_SET_SRAM_DATA4_3(0, statep->reg_rdata[0],
-				statep->reg_rdata[2], statep->reg_rdata[3]);
-			break;
-
-		case DTC_ERRRTN:		/* SCF command retuen error */
-			SCF_SET_SRAM_DATA4_3(0, statep->reg_tdata[0],
-				statep->reg_tdata[1], statep->reg_tdata[2]);
-			break;
-
-
-		case DTC_RSUMERR:	/* SCF command receive sum error */
-			SCF_SET_SRAM_DATA4_3(0, statep->reg_rdata[0],
-				statep->reg_rdata[1], statep->reg_rdata[2]);
-			break;
-
-		case DTC_DSCP_TXREQ:		/* DSCP TxREQ request */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_txdcr_c_flag);
-			SCF_SET_SRAM_DATA4_1(8, statep->reg_txdcr_c_length);
-			break;
-
-		case DTC_DSCP_RXACK:		/* DSCP RxACK request */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_rxdcr_c_flag);
-			SCF_SET_SRAM_DATA2_2(8, statep->reg_rxdcr_c_offset, 0);
-			break;
-
-		case DTC_DSCP_RXEND:		/* DSCP RxEND request */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_rxdsr_c_flag);
-			SCF_SET_SRAM_DATA2_2(8, statep->reg_rxdsr_c_offset, 0);
-			break;
-
-		case DTC_DSCP_RXREQ:
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_rxdcr_c_flag);
-			SCF_SET_SRAM_DATA4_1(8, statep->reg_rxdcr_c_length);
-			break;
-
-
-		case DTC_DSCP_TXACK:		/* DSCP TxACK interrupt */
-		case DTC_DSCP_ACKTO:		/* DSCP ACK timeout */
-		case DTC_DSCP_ENDTO:		/* DSCP END timeout */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_txdcr_c_flag);
-			SCF_SET_SRAM_DATA2_2(8, statep->reg_txdcr_c_offset, 0);
-			break;
-
-		case DTC_DSCP_TXEND:		/* DSCP TxEND interrupt */
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA1_2(4, statep->reg_dcr,
-				statep->reg_dsr);
-			SCF_SET_SRAM_DATA2_1(6, statep->reg_txdsr_c_flag);
-			SCF_SET_SRAM_DATA2_2(8, statep->reg_txdsr_c_offset, 0);
-			break;
-
-		case DTC_SENDDATA_SRAM:	/* SCF send command data for SRAM */
-		case DTC_RECVDATA_SRAM:	/* SCF recv command data for SRAM */
-		case DTC_DSCP_SENDDATA:		/* DSCP send data */
-		case DTC_DSCP_RECVDATA:		/* DSCP send data */
-			/* Information is already set */
-			break;
-
-		case DTC_CMD:			/* SCF command start */
-		case DTC_INT:			/* SCF interrupt */
-		case DTC_CMDTO:			/* SCF command timeout */
-		case DTC_CMDBUSYTO:		/* SCF command busy timeout */
-		default:
-			SCF_SET_SRAM_DATA2_2(0, statep->reg_control,
-				statep->reg_int_st);
-			SCF_SET_SRAM_DATA2_2(4, statep->reg_command,
-				statep->reg_status);
-			SCF_SET_SRAM_DATA1_2(8, statep->reg_command_exr,
-				(statep->reg_status_exr >> 24));
-			SCF_SET_SRAM_DATA1_2(10, statep->reg_acr,
-				statep->reg_atr);
-			break;
-		}
-		/* Set trace data */
-		wk_in_p = (uint8_t *)&statep->memo_scf_drvtrc.LOG_ID;
-		wk_out_p = (uint8_t *)statep->scf_reg_drvtrc +
-			statep->memo_DATA_WRITE;
-		for (ii = 0; ii < sizeof (scf_drvtrc_ent_t);
-			ii++, wk_in_p++, wk_out_p++) {
-			SCF_DDI_PUT8(statep, statep->scf_reg_drvtrc_handle,
-				wk_out_p, *wk_in_p);
-		}
-
-		/* Next offset update */
-		statep->memo_DATA_WRITE += sizeof (scf_drvtrc_ent_t);
-		if (statep->memo_DATA_WRITE > statep->memo_DATA_LAST) {
-			statep->memo_DATA_WRITE = statep->memo_DATA_TOP;
-		}
-		SCF_DDI_PUT32(statep, statep->scf_reg_drvtrc_handle,
-			&statep->scf_reg_drvtrc->DATA_WRITE,
-			statep->memo_DATA_WRITE);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_TRACE, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scfsnap.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,766 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/time.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfdscp.h>
-
-#ifdef DEBUG
-/*
- * Function list
- */
-int	scf_snapshotsize(intptr_t arg, int mode);
-int	scf_get_snapize(int type, int info);
-int	scf_snapshot(intptr_t arg, int mode);
-int	scf_get_snap(int type, int info, scfsnap_value_t *snap_p,
-		int snap_size);
-
-
-/*
- * External function
- */
-extern	scf_dscp_comtbl_t	scf_dscp_comtbl;
-
-
-/*
- * scf_snapshotsize()
- */
-int
-scf_snapshotsize(intptr_t arg, int mode)
-{
-#define	SCF_FUNC_NAME		"scf_snapshotsize() "
-	int			snap_size;
-	scfsnapsize_t		scfsnapsize;
-	int			ret = 0;
-
-	SCFDBGMSG(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": start");
-
-	if (ddi_copyin((void *)arg, (void *)&scfsnapsize,
-		sizeof (scfsnapsize_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "dbg_snap", 8);
-		ret = EFAULT;
-		goto END_snapshotsize;
-	}
-
-	if (mutex_tryenter(&scf_comtbl.all_mutex) != 0) {
-		snap_size = scf_get_snapize(scfsnapsize.type, scfsnapsize.info);
-
-		mutex_exit(&scf_comtbl.all_mutex);
-
-		if (snap_size == (-1)) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			ret = EINVAL;
-			goto END_snapshotsize;
-		}
-
-		scfsnapsize.size = snap_size;
-
-		if (ddi_copyout((void *)&scfsnapsize, (void *)arg,
-			sizeof (scfsnapsize_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			ret = EFAULT;
-		}
-	} else {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "dbg_snap", 8);
-		ret = EBUSY;
-	}
-
-/*
- * END_snapshotsize
- */
-	END_snapshotsize:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_get_snapize()
- */
-int
-scf_get_snapize(int type, int info)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_get_snapize() "
-	scf_state_t		*statep = NULL;
-	int			wk_size;
-	int			ii;
-	int			snap_driver_size;
-	int			snap_register_size;
-	int			snap_sram_size;
-	int			ret = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": start type = %d", type);
-
-	if (info == SCFSNAPINFO_AUTO) {
-		statep = scf_comtbl.scf_exec_p;
-		if (statep == NULL) {
-			statep = scf_comtbl.scf_path_p;
-		}
-	} else if (info < scf_comtbl.path_num) {
-		statep = scf_comtbl.iomp_scf[info];
-	} else {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "snapsize", 8);
-		ret = (-1);
-		goto END_get_snapize;
-	}
-
-	/* Set driver area size */
-	wk_size = DRV_ID_SIZE;
-	wk_size = sizeof (scfsnap_value_t) +
-	    ((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-	snap_driver_size = wk_size;
-
-	wk_size = sizeof (scf_timer);
-	wk_size = sizeof (scfsnap_value_t) +
-		((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-	snap_driver_size += wk_size;
-
-	wk_size = sizeof (scf_comtbl_t);
-	wk_size = sizeof (scfsnap_value_t) +
-		((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-	snap_driver_size += wk_size;
-
-	if (statep != NULL) {
-		wk_size = sizeof (scf_state_t);
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_driver_size += wk_size;
-	}
-
-	wk_size = sizeof (scf_dscp_comtbl_t);
-	wk_size = sizeof (scfsnap_value_t) +
-		((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-	snap_driver_size += wk_size;
-
-	if (scf_dscp_comtbl.tx_dscp != NULL) {
-		wk_size = scf_dscp_comtbl.tx_dscsize;
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_driver_size += wk_size;
-	}
-
-	if (scf_dscp_comtbl.rx_dscp != NULL) {
-		wk_size = scf_dscp_comtbl.rx_dscsize;
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_driver_size += wk_size;
-	}
-
-	if (scf_dscp_comtbl.tx_sramp != NULL) {
-		wk_size = scf_dscp_comtbl.tx_sramsize;
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_driver_size += wk_size;
-	}
-
-	for (ii = 0; ii < MBIF_MAX; ii++) {
-		if (scf_dscp_comtbl.scf_dscp_main[ii].ev_quep != NULL) {
-			wk_size = scf_dscp_comtbl.scf_dscp_main[ii].ev_quesize;
-			wk_size = sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV);
-			snap_driver_size += wk_size;
-		}
-		if (scf_dscp_comtbl.scf_dscp_main[ii].rd_datap != NULL) {
-			wk_size = scf_dscp_comtbl.scf_dscp_main[ii].rd_datasize;
-			wk_size = sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV);
-			snap_driver_size += wk_size;
-		}
-	}
-
-	/* Set register area size */
-	if (statep != NULL) {
-		wk_size = sizeof (scf_regs_t) + sizeof (scf_regs_c_t);
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_register_size = wk_size;
-	} else {
-		snap_register_size = 0;
-	}
-
-	/* Set sram area size */
-	if (statep != NULL) {
-		wk_size = sizeof (scf_dscp_sram_t) +
-			sizeof (scf_sys_sram_t) + statep->scf_reg_drvtrc_len;
-		wk_size = sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV);
-		snap_sram_size = wk_size;
-	} else {
-		snap_sram_size = 0;
-	}
-
-	switch (type) {
-	case SCFSNAPTYPE_ALL:
-		/* Set all area snap size */
-		if (statep != NULL) {
-			ret = snap_driver_size + snap_register_size +
-				snap_sram_size;
-		} else {
-			ret = snap_driver_size;
-		}
-		break;
-
-	case SCFSNAPTYPE_DRIVER:
-		/* Set driver area snap size */
-		ret = snap_driver_size;
-		break;
-
-	case SCFSNAPTYPE_REGISTER:
-		/* Set register area snap size */
-		ret = snap_register_size;
-		break;
-
-	case SCFSNAPTYPE_SRAM:
-		/* Set use SRAM area snap size */
-		ret = snap_sram_size;
-		break;
-
-	default:
-		/* Invalid parameter */
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "snapsize", 8);
-		ret = (-1);
-		break;
-	}
-
-/*
- * END_get_snapize
- */
-	END_get_snapize:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_snapshot()
- */
-int
-scf_snapshot(intptr_t arg, int mode)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_snapshot() "
-	int			snap_size;
-	scfsnap_t		scfsnap;
-	scfsnap32_t		scfsnap32;
-	scfsnap_value_t		*scfsnap_p = NULL;
-	int			ret = 0;
-
-	SCFDBGMSG(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": start");
-
-#ifdef _MULTI_DATAMODEL
-	switch (ddi_model_convert_from(mode & FMODELS)) {
-	case DDI_MODEL_ILP32:
-		if (ddi_copyin((void *)arg, (void *)&scfsnap32,
-			sizeof (scfsnap32_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			ret = EFAULT;
-			goto END_snapshot;
-		}
-		scfsnap.type = scfsnap32.type;
-		scfsnap.info = scfsnap32.info;
-		break;
-
-	case DDI_MODEL_NONE:
-		if (ddi_copyin((void *)arg, (void *)&scfsnap,
-			sizeof (scfsnap_t), mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			ret = EFAULT;
-			goto END_snapshot;
-		}
-		break;
-	}
-#else /* ! _MULTI_DATAMODEL */
-	if (ddi_copyin((void *)arg, (void *)&scfsnap,
-		sizeof (scfsnap_t), mode) != 0) {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "dbg_snap", 8);
-		ret = EFAULT;
-		goto END_snapshot;
-	}
-#endif /* _MULTI_DATAMODEL */
-
-	if (mutex_tryenter(&scf_comtbl.all_mutex) != 0) {
-
-		snap_size = scf_get_snapize(scfsnap.type, scfsnap.info);
-
-		if (snap_size == (-1)) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			mutex_exit(&scf_comtbl.all_mutex);
-			ret = EINVAL;
-			goto END_snapshot;
-		}
-
-		if (snap_size != 0) {
-			scfsnap_p = kmem_zalloc((size_t)snap_size, KM_SLEEP);
-
-			ret = scf_get_snap(scfsnap.type, scfsnap.info,
-				scfsnap_p, snap_size);
-		} else {
-			ret = ENODATA;
-		}
-
-		mutex_exit(&scf_comtbl.all_mutex);
-	} else {
-		SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__, "dbg_snap", 8);
-		ret = EBUSY;
-	}
-
-	if (ret == 0) {
-
-#ifdef _MULTI_DATAMODEL
-		switch (ddi_model_convert_from(mode & FMODELS)) {
-		case DDI_MODEL_ILP32:
-			if (ddi_copyout((void *)scfsnap_p,
-				(void *)(uintptr_t)scfsnap32.ss_entries,
-				(size_t)snap_size, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"dbg_snap", 8);
-				ret = EFAULT;
-			}
-
-			break;
-
-		case DDI_MODEL_NONE:
-			if (ddi_copyout((void *)scfsnap_p,
-				(void *)scfsnap.ss_entries,
-				(size_t)snap_size, mode) != 0) {
-				SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-					"dbg_snap", 8);
-				ret = EFAULT;
-			}
-			break;
-		}
-
-#else /* ! _MULTI_DATAMODEL */
-		if (ddi_copyout((void *)scfsnap_p, (void *)scfsnap.ss_entries,
-			(size_t)snap_size, mode) != 0) {
-			SC_DBG_DRV_TRACE(TC_IOCTL|TC_ERR, __LINE__,
-				"dbg_snap", 8);
-			ret = EFAULT;
-		}
-#endif /* _MULTI_DATAMODEL */
-	}
-
-/*
- * END_snapshot
- */
-	END_snapshot:
-
-	if (scfsnap_p) {
-		kmem_free((void *)scfsnap_p,
-			(size_t)snap_size);
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_get_snap()
- */
-int
-scf_get_snap(int type, int info, scfsnap_value_t *snap_top_p, int snap_size)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_get_snap() "
-	scf_state_t		*statep;
-	scfsnap_value_t		*snap_p;
-	int			wk_size;
-	int			wk_nextoff;
-	int			exec_model;
-	uint8_t			*wk_in_p;
-	uint8_t			*wk_out_p;
-	scf_dscp_main_t		*mainp;
-	scf_regs_t		*wk_regs_p;
-	scf_regs_c_t		*wk_regs_c_p;
-	int			ii;
-
-	int			ret = 0;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": start type = %d", type);
-
-#ifdef _MULTI_DATAMODEL
-	exec_model = SCF_DRIVER_64BIT;
-#else /* ! _MULTI_DATAMODEL */
-	exec_model = SCF_DRIVER_32BIT;
-#endif /* _MULTI_DATAMODEL */
-
-	if ((scf_get_snapize(type, info) > snap_size) || (snap_size <= 0)) {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "snapshot", 8);
-		ret = EINVAL;
-		goto END_get_snap;
-	}
-
-	if (info == SCFSNAPINFO_AUTO) {
-		statep = scf_comtbl.scf_exec_p;
-		if (statep == NULL) {
-			statep = scf_comtbl.scf_path_p;
-		}
-	} else if (info < scf_comtbl.path_num) {
-		statep = scf_comtbl.iomp_scf[info];
-	} else {
-		SC_DBG_DRV_TRACE(TC_ERR, __LINE__, "snapshot", 8);
-		ret = EINVAL;
-		goto END_get_snap;
-	}
-
-	snap_p = snap_top_p;
-	wk_nextoff = 0;
-	if ((type == SCFSNAPTYPE_ALL) || (type == SCFSNAPTYPE_DRIVER)) {
-		/* Set driver vl area */
-		strcpy((char *)&snap_p->ss_name[0], SNAP_SCF_DRIVER_VL);
-		wk_size = sizeof (SCF_DRIVER_VERSION);
-		if (wk_size > DRV_ID_SIZE) {
-			wk_size = DRV_ID_SIZE;
-		}
-		wk_nextoff += (sizeof (scfsnap_value_t) +
-		    ((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV));
-		snap_p->ss_flag = exec_model;
-		snap_p->ss_size = wk_size;
-		snap_p->ss_nextoff = wk_nextoff;
-		bcopy((void *)SCF_DRIVER_VERSION,
-			(void *)(snap_p + 1), wk_size);
-		snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-
-		/* Set driver timer area */
-		strcpy((char *)&snap_p->ss_name[0], SNAP_SCF_TIMER_TBL);
-		wk_size = sizeof (scf_timer);
-		wk_nextoff += (sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV));
-		snap_p->ss_flag = exec_model;
-		snap_p->ss_size = wk_size;
-		snap_p->ss_nextoff = wk_nextoff;
-		bcopy((void *)scf_timer, (void *)(snap_p + 1), wk_size);
-		snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-
-		/* Set driver common area */
-		strcpy((char *)&snap_p->ss_name[0], SNAP_SCF_COMTBL);
-		wk_size = sizeof (scf_comtbl);
-		wk_nextoff += (sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV));
-		snap_p->ss_flag = exec_model;
-		snap_p->ss_size = wk_size;
-		snap_p->ss_nextoff = wk_nextoff;
-		bcopy((void *)&scf_comtbl, (void *)(snap_p + 1), wk_size);
-		snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-
-		if (statep != NULL) {
-			/* Set device area */
-			strcpy((char *)&snap_p->ss_name[0], SNAP_SCF_STATE);
-			wk_size = sizeof (scf_state_t);
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-			bcopy((void *)statep, (void *)(snap_p + 1), wk_size);
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		}
-
-		/* Set driver DSCP common area */
-		strcpy((char *)&snap_p->ss_name[0], SNAP_SCF_DSCP_COMTBL);
-		wk_size = sizeof (scf_dscp_comtbl_t);
-		wk_nextoff += (sizeof (scfsnap_value_t) +
-			((wk_size + SCF_S_CNT_15) & SCF_LENGTH_16BYTE_CNV));
-		snap_p->ss_flag = exec_model;
-		snap_p->ss_size = wk_size;
-		snap_p->ss_nextoff = wk_nextoff;
-		bcopy((void *)&scf_dscp_comtbl, (void *)(snap_p + 1), wk_size);
-		snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-
-		/* Set driver DSCP TxDSC area */
-		if (scf_dscp_comtbl.tx_dscp != NULL) {
-			strcpy((char *)&snap_p->ss_name[0],
-				SNAP_SCF_DSCP_TXDSC);
-			wk_size = scf_dscp_comtbl.tx_dscsize;
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-			bcopy((void *)scf_dscp_comtbl.tx_dscp,
-				(void *)(snap_p + 1), wk_size);
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		}
-
-		/* Set driver DSCP RxDSC area */
-		if (scf_dscp_comtbl.rx_dscp != NULL) {
-			strcpy((char *)&snap_p->ss_name[0],
-				SNAP_SCF_DSCP_RXDSC);
-			wk_size = scf_dscp_comtbl.rx_dscsize;
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-			bcopy((void *)scf_dscp_comtbl.rx_dscp,
-				(void *)(snap_p + 1), wk_size);
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		}
-
-		/* Set driver DSCP Tx SRAM area */
-		if (scf_dscp_comtbl.tx_sramp != NULL) {
-			strcpy((char *)&snap_p->ss_name[0],
-				SNAP_SCF_DSCP_TXSRAM);
-			wk_size = scf_dscp_comtbl.tx_sramsize;
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-			bcopy((void *)scf_dscp_comtbl.tx_sramp,
-				(void *)(snap_p + 1), wk_size);
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		}
-
-		for (ii = 0; ii < MBIF_MAX; ii++) {
-			mainp = &scf_dscp_comtbl.scf_dscp_main[ii];
-			/* Set driver DSCP Event data area */
-			if (mainp->ev_quep != NULL) {
-				strcpy((char *)&snap_p->ss_name[0],
-					SNAP_SCF_DSCP_EVENT);
-				wk_size = mainp->ev_quesize;
-				wk_nextoff += (sizeof (scfsnap_value_t) +
-					((wk_size + SCF_S_CNT_15) &
-					SCF_LENGTH_16BYTE_CNV));
-				snap_p->ss_flag = exec_model;
-				snap_p->ss_size = wk_size;
-				snap_p->ss_nextoff = wk_nextoff;
-				bcopy((void *)mainp->ev_quep,
-					(void *)(snap_p + 1), wk_size);
-				snap_p = (void *)((caddr_t)snap_top_p +
-					wk_nextoff);
-			}
-			/* Set driver DSCP Recv data area */
-			if (mainp->rd_datap != NULL) {
-				strcpy((char *)&snap_p->ss_name[0],
-					SNAP_SCF_DSCP_RDATA);
-				wk_size = mainp->rd_datasize;
-				wk_nextoff += (sizeof (scfsnap_value_t) +
-					((wk_size + SCF_S_CNT_15) &
-					SCF_LENGTH_16BYTE_CNV));
-				snap_p->ss_flag = exec_model;
-				snap_p->ss_size = wk_size;
-				snap_p->ss_nextoff = wk_nextoff;
-				bcopy((void *)mainp->rd_datap,
-					(void *)(snap_p + 1), wk_size);
-				snap_p = (void *)((caddr_t)snap_top_p +
-					wk_nextoff);
-			}
-		}
-	}
-
-	if ((type == SCFSNAPTYPE_ALL) || (type == SCFSNAPTYPE_REGISTER)) {
-		if (statep != NULL) {
-			/* Set register area */
-			strcpy((char *)&snap_p->ss_name[0], SNAP_REGISTER);
-			wk_size = sizeof (scf_regs_t) + sizeof (scf_regs_c_t);
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-
-			wk_regs_p = (scf_regs_t *)(snap_p + 1);
-			wk_regs_p->COMMAND = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->COMMAND);
-			wk_regs_p->STATUS = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->STATUS);
-			wk_regs_p->VERSION = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->VERSION);
-			wk_regs_p->TDATA0 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TDATA0);
-			wk_regs_p->TDATA1 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TDATA1);
-			wk_regs_p->TDATA2 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TDATA2);
-			wk_regs_p->TDATA3 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TDATA3);
-			wk_regs_p->RDATA0 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RDATA0);
-			wk_regs_p->RDATA1 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RDATA1);
-			wk_regs_p->RDATA2 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RDATA2);
-			wk_regs_p->RDATA3 = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RDATA3);
-			wk_regs_p->COMMAND_ExR = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->COMMAND_ExR);
-			wk_regs_p->ACR = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->ACR);
-			wk_regs_p->ATR = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->ATR);
-			wk_regs_p->STATUS_ExR = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->STATUS_ExR);
-			wk_regs_p->DCR = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->DCR);
-			wk_regs_p->DSR = SCF_DDI_GET8(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->DSR);
-			wk_regs_p->TxDCR_C_FLAG = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TxDCR_C_FLAG);
-			wk_regs_p->TxDCR_OFFSET = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TxDCR_OFFSET);
-			wk_regs_p->TxDCR_LENGTH = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TxDCR_LENGTH);
-			wk_regs_p->TxDSR_C_FLAG = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TxDSR_C_FLAG);
-			wk_regs_p->TxDSR_OFFSET = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->TxDSR_OFFSET);
-			wk_regs_p->RxDCR_C_FLAG = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RxDCR_C_FLAG);
-			wk_regs_p->RxDCR_OFFSET = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RxDCR_OFFSET);
-			wk_regs_p->RxDCR_LENGTH = SCF_DDI_GET32(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RxDCR_LENGTH);
-			wk_regs_p->RxDSR_C_FLAG = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RxDSR_C_FLAG);
-			wk_regs_p->RxDSR_OFFSET = SCF_DDI_GET16(statep,
-				statep->scf_regs_handle,
-				&statep->scf_regs->RxDSR_OFFSET);
-
-			wk_regs_c_p = (scf_regs_c_t *)(wk_regs_p + 1);
-			wk_regs_c_p->CONTROL = SCF_DDI_GET16(statep,
-				statep->scf_regs_c_handle,
-				&statep->scf_regs_c->CONTROL);
-			wk_regs_c_p->INT_ST = SCF_DDI_GET16(statep,
-				statep->scf_regs_c_handle,
-				&statep->scf_regs_c->INT_ST);
-
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		} else {
-			if (type == SCFSNAPTYPE_REGISTER) {
-				ret = ENODATA;
-			}
-		}
-	}
-
-
-	if ((type == SCFSNAPTYPE_ALL) || (type == SCFSNAPTYPE_SRAM)) {
-		if (statep != NULL) {
-			/* Set use SRAM area */
-			strcpy((char *)&snap_p->ss_name[0], SNAP_SRAM);
-			wk_size = sizeof (scf_dscp_sram_t) +
-				sizeof (scf_sys_sram_t) +
-				statep->scf_reg_drvtrc_len;
-			wk_nextoff += (sizeof (scfsnap_value_t) +
-				((wk_size + SCF_S_CNT_15) &
-				SCF_LENGTH_16BYTE_CNV));
-			snap_p->ss_flag = exec_model;
-			snap_p->ss_size = wk_size;
-			snap_p->ss_nextoff = wk_nextoff;
-
-			wk_in_p = (uint8_t *)&statep->scf_dscp_sram->DATA[0];
-			wk_out_p = (uint8_t *)(snap_p + 1);
-			for (ii = 0; ii < sizeof (scf_dscp_sram_t);
-				ii++, wk_in_p++, wk_out_p++) {
-				*wk_out_p = SCF_DDI_GET8(statep,
-					statep->scf_dscp_sram_handle, wk_in_p);
-			}
-
-			wk_in_p = (uint8_t *)&statep->scf_sys_sram->DATA[0];
-			for (ii = 0; ii < sizeof (scf_sys_sram_t);
-				ii++, wk_in_p++, wk_out_p++) {
-				*wk_out_p = SCF_DDI_GET8(statep,
-					statep->scf_sys_sram_handle, wk_in_p);
-			}
-
-			wk_in_p = (uint8_t *)statep->scf_reg_drvtrc;
-			for (ii = 0; ii < statep->scf_reg_drvtrc_len;
-				ii++, wk_in_p++, wk_out_p++) {
-				*wk_out_p = SCF_DDI_GET8(statep,
-					statep->scf_reg_drvtrc_handle, wk_in_p);
-			}
-			snap_p = (void *)((caddr_t)snap_top_p + wk_nextoff);
-		} else {
-			if (type == SCFSNAPTYPE_SRAM) {
-				ret = ENODATA;
-			}
-		}
-	}
-
-/*
- * END_get_snap
- */
-	END_get_snap:
-
-	SCFDBGMSG1(SCF_DBGFLAG_SNAP, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-#endif /* DEBUG */
--- a/usr/src/uts/sun4u/opl/io/scfd/scftimer.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,625 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/ksynch.h>
-#include <sys/types.h>
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/errno.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-#include <sys/scfd/scfdscp.h>
-
-/*
- * Timer control table and control flag
- */
-static int	scf_timer_stop_flag = FLAG_OFF;	/* Timer stop flag */
-scf_timer_t	scf_timer[SCF_TIMERCD_MAX];	/* Timer contorol table */
-
-/*
- * Timer value
- */
-	/* SCF command busy watch timer */
-int	scf_devbusy_wait_time	= SCF_TIMER_VALUE_DEVBUSY;
-	/* SCF command completion watch timer */
-int	scf_cmdend_wait_time	= SCF_TIMER_VALUE_CMDEND;
-	/* SCF online watch timer */
-int	scf_online_wait_time	= SCF_TIMER_VALUE_ONLINE;
-	/* Next receive wait timer */
-int	scf_rxbuff_wait_time	= SCF_TIMER_VALUE_NEXTRCV;
-	/* DSCP interface TxACK watch timer */
-int	scf_dscp_ack_wait_time	= SCF_TIMER_VALUE_DSCP_ACK;
-	/* DSCP interface TxEND watch timer */
-int	scf_dscp_end_wait_time	= SCF_TIMER_VALUE_DSCP_END;
-	/* DSCP interface busy watch timer */
-int	scf_dscp_txbusy_time	= SCF_TIMER_VALUE_DSCP_BUSY;
-	/* DSCP interface callback timer */
-int	scf_dscp_callback_time	= SCF_TIMER_VALUE_DSCP_CALLBACK;
-	/* DSCP INIT_REQ retry timer */
-int	scf_dscp_init_time	= SCF_TIMER_VALUE_DSCP_INIT;
-
-/*
- * Function list
- */
-void	scf_timer_init(void);
-void	scf_timer_start(int tmcd);
-void	scf_timer_stop(int tmcd);
-void	scf_timer_all_stop(void);
-int	scf_timer_check(int tmcd);
-uint32_t	scf_timer_value_get(int tmcd);
-void	scf_tout(void *arg);
-int	scf_timer_stop_collect(timeout_id_t *tmids, int size);
-void	scf_timer_untimeout(timeout_id_t *tmids, int size);
-
-/*
- * External function
- */
-extern void	scf_cmdbusy_tout(void);
-extern void	scf_cmdend_tout(void);
-extern void	scf_online_wait_tout(void);
-extern void	scf_next_rxdata_get(void);
-extern void	scf_dscp_ack_tout(void);
-extern void	scf_dscp_end_tout(void);
-extern void	scf_dscp_busy_tout(void);
-extern void	scf_dscp_callback_tout(void);
-extern void	scf_report_send_wait_tout(void);
-extern void	scf_dscp_init_tout(uint8_t id);
-
-/*
- * scf_timer_init()
- *
- * Description: Timer initialization processing.
- *
- */
-void
-scf_timer_init(void)
-{
-#define	SCF_FUNC_NAME		"scf_timer_init() "
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start");
-
-	/* Set timer code and timer value */
-	scf_timer[SCF_TIMERCD_CMDBUSY].value = scf_devbusy_wait_time;
-	scf_timer[SCF_TIMERCD_CMDBUSY].tbl[0].code = SCF_TIMERCD_CMDBUSY;
-	scf_timer[SCF_TIMERCD_CMDBUSY].tbl[1].code = SCF_TIMERCD_CMDBUSY;
-
-	scf_timer[SCF_TIMERCD_CMDEND].value = scf_cmdend_wait_time;
-	scf_timer[SCF_TIMERCD_CMDEND].tbl[0].code = SCF_TIMERCD_CMDEND;
-	scf_timer[SCF_TIMERCD_CMDEND].tbl[1].code = SCF_TIMERCD_CMDEND;
-
-	scf_timer[SCF_TIMERCD_ONLINE].value = scf_online_wait_time;
-	scf_timer[SCF_TIMERCD_ONLINE].tbl[0].code = SCF_TIMERCD_ONLINE;
-	scf_timer[SCF_TIMERCD_ONLINE].tbl[1].code = SCF_TIMERCD_ONLINE;
-
-	scf_timer[SCF_TIMERCD_NEXTRECV].value = scf_rxbuff_wait_time;
-	scf_timer[SCF_TIMERCD_NEXTRECV].tbl[0].code = SCF_TIMERCD_NEXTRECV;
-	scf_timer[SCF_TIMERCD_NEXTRECV].tbl[1].code = SCF_TIMERCD_NEXTRECV;
-
-	scf_timer[SCF_TIMERCD_DSCP_ACK].value = scf_dscp_ack_wait_time;
-	scf_timer[SCF_TIMERCD_DSCP_ACK].tbl[0].code = SCF_TIMERCD_DSCP_ACK;
-	scf_timer[SCF_TIMERCD_DSCP_ACK].tbl[1].code = SCF_TIMERCD_DSCP_ACK;
-
-	scf_timer[SCF_TIMERCD_DSCP_END].value = scf_dscp_end_wait_time;
-	scf_timer[SCF_TIMERCD_DSCP_END].tbl[0].code = SCF_TIMERCD_DSCP_END;
-	scf_timer[SCF_TIMERCD_DSCP_END].tbl[1].code = SCF_TIMERCD_DSCP_END;
-
-	scf_timer[SCF_TIMERCD_DSCP_BUSY].value = scf_dscp_txbusy_time;
-	scf_timer[SCF_TIMERCD_DSCP_BUSY].tbl[0].code = SCF_TIMERCD_DSCP_BUSY;
-	scf_timer[SCF_TIMERCD_DSCP_BUSY].tbl[1].code = SCF_TIMERCD_DSCP_BUSY;
-
-	scf_timer[SCF_TIMERCD_DSCP_CALLBACK].value = scf_dscp_callback_time;
-	scf_timer[SCF_TIMERCD_DSCP_CALLBACK].tbl[0].code =
-		SCF_TIMERCD_DSCP_CALLBACK;
-	scf_timer[SCF_TIMERCD_DSCP_CALLBACK].tbl[1].code =
-		SCF_TIMERCD_DSCP_CALLBACK;
-
-	scf_timer[SCF_TIMERCD_BUF_FUL].value = scf_buf_ful_rtime;
-	scf_timer[SCF_TIMERCD_BUF_FUL].tbl[0].code = SCF_TIMERCD_BUF_FUL;
-	scf_timer[SCF_TIMERCD_BUF_FUL].tbl[1].code = SCF_TIMERCD_BUF_FUL;
-
-	scf_timer[SCF_TIMERCD_RCI_BUSY].value = scf_rci_busy_rtime;
-	scf_timer[SCF_TIMERCD_RCI_BUSY].tbl[0].code = SCF_TIMERCD_RCI_BUSY;
-	scf_timer[SCF_TIMERCD_RCI_BUSY].tbl[1].code = SCF_TIMERCD_RCI_BUSY;
-
-	scf_timer[SCF_TIMERCD_DSCP_INIT].value = scf_dscp_init_time;
-	scf_timer[SCF_TIMERCD_DSCP_INIT].tbl[0].code = SCF_TIMERCD_DSCP_INIT;
-	scf_timer[SCF_TIMERCD_DSCP_INIT].tbl[1].code = SCF_TIMERCD_DSCP_INIT;
-
-	scf_timer[SCF_TIMERCD_DKMD_INIT].value = scf_dscp_init_time;
-	scf_timer[SCF_TIMERCD_DKMD_INIT].tbl[0].code = SCF_TIMERCD_DKMD_INIT;
-	scf_timer[SCF_TIMERCD_DKMD_INIT].tbl[1].code = SCF_TIMERCD_DKMD_INIT;
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_timer_start()
- *
- * Description: Timer start subroutine.
- *
- */
-void
-scf_timer_start(int tmcd)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_start() "
-	scf_timer_t		*tm_p;		/* Timer table address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start tmcd = %d", tmcd);
-
-	/* Check timer code */
-	if (tmcd >= SCF_TIMERCD_MAX) {
-		goto END_timer_start;
-	}
-
-	/* Get timer table address */
-	tm_p = &scf_timer[tmcd];
-
-	/* Check timer value and timer start flag */
-	if ((tm_p->value == 0) || (tm_p->start == FLAG_ON)) {
-		goto END_timer_start;
-	}
-
-	/* Check timer stop flag */
-	if (tm_p->stop == FLAG_OFF) {
-		/*
-		 * Timer start and judgment
-		 */
-		/* Change timer table side */
-		tm_p->side = (tm_p->side == 0) ? 1 : 0;
-
-		/* timer start */
-		tm_p->tbl[tm_p->side].id = timeout(scf_tout,
-			&tm_p->tbl[tm_p->side],
-			drv_usectohz(SCF_MIL2MICRO(tm_p->value)));
-
-		/* Timer start flag ON */
-		tm_p->start = FLAG_ON;
-
-		SC_DBG_DRV_TRACE(TC_T_START, __LINE__, &tmcd, sizeof (tmcd));
-		SCFDBGMSG(SCF_DBGFLAG_TIMER, "timeout() call");
-	} else {
-		/*
-		 * Timer restart and judgment
-		 */
-		SCFDBGMSG(SCF_DBGFLAG_TIMER, "timer restart");
-
-		/* Check current table timer use */
-		if (tm_p->tbl[tm_p->side].id != 0) {
-			/* Change timer table side */
-			tm_p->side = (tm_p->side == 0) ? 1 : 0;
-		}
-
-		/* Timer start and restart flag ON */
-		tm_p->start = FLAG_ON;
-		tm_p->restart = FLAG_ON;
-	}
-
-/*
- * END_timer_start
- */
-	END_timer_start:
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_timer_stop()
- *
- * Description: Timer stop subroutine.
- *
- */
-void
-scf_timer_stop(int tmcd)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_stop() "
-	scf_timer_t		*tm_p;		/* Timer table address */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start tmcd = %d", tmcd);
-
-	/* Check timer code */
-	if (tmcd < SCF_TIMERCD_MAX) {
-		/* Get timer table address */
-		tm_p = &scf_timer[tmcd];
-
-		/* Check timer start flag */
-		if (tm_p->start == FLAG_ON) {
-			/*
-			 * Timer start and judgment
-			 */
-
-			/* Timer start and restart flag OFF */
-			tm_p->start = FLAG_OFF;
-			tm_p->restart = FLAG_OFF;
-
-			/* Timer stop flag ON */
-			tm_p->stop = FLAG_ON;
-			scf_timer_stop_flag = FLAG_ON;
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_timer_all_stop()
- *
- * Description: Timer all stop subroutine.
- *
- */
-void
-scf_timer_all_stop(void)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_all_stop() "
-	int			tm_cd;
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start");
-
-	for (tm_cd = 0; tm_cd < SCF_TIMERCD_MAX; tm_cd++) {
-		scf_timer_stop(tm_cd);
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_timer_check()
- *
- * Description: Timer status check subroutine.
- *
- */
-int
-scf_timer_check(int tmcd)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_check() "
-	scf_timer_t		*tm_p;		/* Timer table address */
-	int			ret = SCF_TIMER_NOT_EXEC; /* Return value */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start tmcd = %d", tmcd);
-
-	/* Check timer code */
-	if (tmcd < SCF_TIMERCD_MAX) {
-		/* Get timer table address */
-		tm_p = &scf_timer[tmcd];
-
-		/* Check timer start flag */
-		if (tm_p->start == FLAG_ON) {
-			/* Timer exec state */
-			ret = SCF_TIMER_EXEC;
-		}
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_timer_value_get()
- *
- * Description: Timer value get subroutine.
- *
- */
-uint32_t
-scf_timer_value_get(int tmcd)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_value_get() "
-	uint32_t		ret = 0;	/* Return value */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start tmcd = %d", tmcd);
-
-	/* Check timer code */
-	if (tmcd < SCF_TIMERCD_MAX) {
-		/* Set timer value */
-		ret = scf_timer[tmcd].value;
-	}
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end return = %d", ret);
-	return (ret);
-}
-
-
-/*
- * scf_tout()
- *
- * Description: Timeout main processing.
- *
- */
-void
-scf_tout(void *arg)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_tout() "
-	scf_timer_tbl_t		*tm_tblp = (scf_timer_tbl_t *)arg;
-	scf_timer_t		*tm_p;		/* Timer table address */
-	timeout_id_t		save_tmids[SCF_TIMERCD_MAX];
-	int			tm_stop_cnt;
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start tmcd = %d",
-		tm_tblp->code);
-
-	SC_DBG_DRV_TRACE(TC_T_TOUT | TC_IN, __LINE__, &tm_tblp->code,
-		sizeof (tm_tblp->code));
-
-	/* Lock driver mutex */
-	mutex_enter(&scf_comtbl.all_mutex);
-
-	/* Get timer table address */
-	tm_p = &scf_timer[tm_tblp->code];
-
-	/* Check timer exec state */
-	if ((tm_p->start == FLAG_ON) && (tm_tblp->id != 0) &&
-		(tm_p->stop == FLAG_OFF)) {
-		/* Timer flag OFF and timer id clear */
-		tm_p->start = FLAG_OFF;
-		tm_tblp->id = 0;
-
-		/* Check timer code */
-		switch (tm_tblp->code) {
-		case SCF_TIMERCD_CMDBUSY:
-			/* SCF command busy watch timeout */
-			scf_cmdbusy_tout();
-			break;
-
-		case SCF_TIMERCD_CMDEND:
-			/* SCF command completion watch timeout */
-			scf_cmdend_tout();
-			break;
-
-		case SCF_TIMERCD_ONLINE:
-			/* SCF online watch timeout */
-			scf_online_wait_tout();
-			break;
-
-		case SCF_TIMERCD_NEXTRECV:
-			/* Next receive wait timeout */
-			scf_next_rxdata_get();
-			break;
-
-		case SCF_TIMERCD_DSCP_ACK:
-			/* DSCP interface TxACK watch timeout */
-			scf_dscp_ack_tout();
-			break;
-
-		case SCF_TIMERCD_DSCP_END:
-			/* DSCP interface TxEND watch timeout */
-			scf_dscp_end_tout();
-			break;
-
-		case SCF_TIMERCD_DSCP_BUSY:
-			/* DSCP interface busy watch timeout */
-			scf_dscp_busy_tout();
-			break;
-
-		case SCF_TIMERCD_DSCP_CALLBACK:
-			/* DSCP interface callback timeout */
-			scf_dscp_callback_tout();
-			break;
-
-		case SCF_TIMERCD_BUF_FUL:
-			/* SCF command BUF_FUL timeout */
-		case SCF_TIMERCD_RCI_BUSY:
-			/* SCF command RCI_BUSY timeout */
-			scf_report_send_wait_tout();
-			break;
-
-		case SCF_TIMERCD_DSCP_INIT:
-			/* DSCP INIT_REQ retry timeout */
-			scf_dscp_init_tout(MBIF_DSCP);
-			break;
-
-		case SCF_TIMERCD_DKMD_INIT:
-			/* DKMD INIT_REQ retry timeout */
-			scf_dscp_init_tout(MBIF_DKMD);
-			break;
-
-		default:
-			/* NOP */
-			break;
-		}
-	} else {
-		/* Timer flag OFF and timer id clear */
-		tm_p->stop = FLAG_OFF;
-		tm_tblp->id = 0;
-
-		/* Check timer restart flag */
-		if (tm_p->restart == FLAG_ON) {
-			/*
-			 * Timer start and judgment
-			 */
-			/* timer start */
-			tm_p->tbl[tm_p->side].id = timeout(scf_tout,
-				&tm_p->tbl[tm_p->side],
-				drv_usectohz(SCF_MIL2MICRO(tm_p->value)));
-
-			/* Timer start flag is already ON */
-
-			/* Timer restart flag OFF */
-			tm_p->restart = FLAG_OFF;
-
-			SC_DBG_DRV_TRACE(TC_T_START, __LINE__, &tm_tblp->code,
-				sizeof (tm_tblp->code));
-			SCFDBGMSG(SCF_DBGFLAG_TIMER, "timeout() call");
-		}
-	}
-
-	/* Collect the timers which need to be stopped */
-	tm_stop_cnt = scf_timer_stop_collect(save_tmids, SCF_TIMERCD_MAX);
-
-	/* Unlock driver mutex */
-	mutex_exit(&scf_comtbl.all_mutex);
-
-	/* Timer stop */
-	if (tm_stop_cnt != 0) {
-		scf_timer_untimeout(save_tmids, SCF_TIMERCD_MAX);
-	}
-
-	SC_DBG_DRV_TRACE(TC_T_TOUT | TC_OUT, __LINE__, NULL, 0);
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
-
-
-/*
- * scf_timer_stop_collect()
- *
- * Description:  Collect the timers which need to be stopped.
- *
- */
-int
-scf_timer_stop_collect(timeout_id_t *tmids, int size)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_stop_collect() "
-	scf_timer_t		*tm_p;	/* Timer table address */
-	int			ii;		/* Working value : counter */
-	int			tm_stop_cnt = 0; /* Timer stop counter */
-
-	ASSERT(MUTEX_HELD(&scf_comtbl.all_mutex));
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start");
-
-	/* Clear save timer table */
-	bzero((caddr_t)tmids, (sizeof (timeout_id_t) * size));
-
-	/* Check timer stop factor */
-	if (scf_timer_stop_flag == FLAG_OFF) {
-		goto END_timer_stop_collect;
-	}
-
-	/* Timer stop flag OFF */
-	scf_timer_stop_flag = FLAG_OFF;
-
-	/* Get timer table address */
-	tm_p = &scf_timer[0];
-
-	/* Check all timer table */
-	for (ii = 0; ii < size; ii++, tm_p++) {
-		/* Check timer stop flag */
-		if (tm_p->stop == FLAG_ON) {
-			/* Timer stop flag OFF */
-			tm_p->stop = FLAG_OFF;
-
-			/* Check timer side 0 table timer use */
-			if (tm_p->tbl[0].id != 0) {
-				/* Save stop timer id */
-				tmids[tm_stop_cnt++] = tm_p->tbl[0].id;
-
-				/* Timer id clear */
-				tm_p->tbl[0].id = 0;
-
-				SC_DBG_DRV_TRACE(TC_T_STOP, __LINE__, &ii,
-					sizeof (ii));
-			}
-
-			/* Check timer side 1 table timer use */
-			if (tm_p->tbl[1].id != 0) {
-				/* Save stop timer id */
-				tmids[tm_stop_cnt++] = tm_p->tbl[1].id;
-
-				/* Timer id clear */
-				tm_p->tbl[1].id = 0;
-
-				SC_DBG_DRV_TRACE(TC_T_STOP, __LINE__, &ii,
-					sizeof (ii));
-			}
-		}
-		/* Check timer restart flag */
-		if (tm_p->restart == FLAG_ON) {
-			/*
-			 * Timer start and judgment
-			 */
-
-			/* timer start */
-			tm_p->tbl[tm_p->side].id = timeout(scf_tout,
-				&tm_p->tbl[tm_p->side],
-				drv_usectohz(SCF_MIL2MICRO(tm_p->value)));
-
-			/* Timer start flag ON */
-			tm_p->restart = FLAG_OFF;
-
-			SC_DBG_DRV_TRACE(TC_T_START, __LINE__, &ii,
-				sizeof (ii));
-		}
-	}
-
-/*
- * END_timer_stop_collect
- */
-	END_timer_stop_collect:
-
-	SCFDBGMSG1(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end tm_stop_cnt = %d",
-		tm_stop_cnt);
-	return (tm_stop_cnt);
-}
-
-
-/*
- * scf_timer_untimeout()
- *
- * Description: Timer stop subroutine.
- *
- */
-void
-scf_timer_untimeout(timeout_id_t *tmids, int size)
-{
-#undef	SCF_FUNC_NAME
-#define	SCF_FUNC_NAME		"scf_timer_untimeout() "
-	int			ii;		/* Working value : counter */
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": start");
-
-	/* Save timer id stop */
-	for (ii = 0; ii < size; ii++) {
-		if (tmids[ii] != 0) {
-			(void) untimeout(tmids[ii]);
-		}
-	}
-
-	SCFDBGMSG(SCF_DBGFLAG_TIMER, SCF_FUNC_NAME ": end");
-}
--- a/usr/src/uts/sun4u/opl/io/scfd/scftrace.c	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/conf.h>
-#include <sys/cmn_err.h>
-#include <sys/errno.h>
-#include <sys/time.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#include <sys/scfd/scfparam.h>
-
-#ifdef DEBUG
-/*
- * SCF driver trace flag
- */
-ushort_t	scf_trace_exec = 1;	/* 1:trace exec,  0:Trace no exec */
-
-ushort_t	scf_trace_flag = 0xff00;
-/*
- * xxxx xxxx : scf_trace_flag
- * 1         : Error trace exec
- *  1        : Busy trace exec
- *   1       : Messege trace exec
- *    1      : RD register trace exec
- *      1    : WR register trace exec
- *       1   : Timer trace exec
- *        1  : Func out trace exec
- *         1 : Func in trace exec
- */
-
-/*
- * SCF driver trace debug flag
- */
-uint_t	scf_trace_msg_flag = 0x00000000;	/* trace massege flag */
-
-
-/*
- * Function list
- */
-void	scf_trace(ushort_t code, ushort_t line, uchar_t *info, ushort_t size);
-
-
-/*
- * scf_trace()
- *
- * SCF Driver trace get processing.
- *
- *   0 +--------------+
- *     | sorce line   | trace get source line
- *   2 +--------------+
- *     | time         | trace get time (100ms)
- *   4 +--------------+
- *     | triger code  | trace triger code
- *   6 +--------------+
- *     | info size    | infomarion size
- *   8 +--------------+
- *     |              |
- *   A +              +
- *     |              |
- *   C +     info     +  infomarion
- *     |              |
- *   E +              +
- *     |              |
- *  10 +--------------+
- *
- */
-void
-scf_trace(ushort_t code, ushort_t line, uchar_t *info, ushort_t size)
-{
-	scf_trctbl_t		trace_wk;
-	scf_trctbl_t		*trcp;
-	uchar_t			*in_p;
-	uchar_t			*out_p;
-	clock_t			clock_val;
-	int			ii;
-	int			trcflag = 0;
-
-	if ((scf_trace_exec) &&
-		((code & scf_trace_flag) || (!(code & 0xFF00)))) {
-		if (scf_comtbl.resource_flag & DID_MUTEX_TRC) {
-			mutex_enter(&scf_comtbl.trc_mutex);
-			trcflag = 1;
-		}
-	}
-
-	if (!trcflag) {
-		return;
-	}
-
-	trcp = (scf_trctbl_t *)&trace_wk.line;
-	trcp->line = line;
-	clock_val = ddi_get_lbolt();
-	trcp->tmvl = (ushort_t)(drv_hztousec(clock_val) / 100000);
-	trcp->code = code;
-	trcp->size = size;
-	for (ii = 0; ii < sizeof (trace_wk.info); ii++) {
-		if (ii < size) {
-			trcp->info[ii] = *(info+ii);
-		} else {
-			trcp->info[ii] = 0;
-		}
-	}
-
-	if (trcflag) {
-		in_p = (uchar_t *)trcp;
-		out_p = (uchar_t *)scf_comtbl.trace_w;
-		scf_comtbl.trace_w++;
-		if (scf_comtbl.trace_w == scf_comtbl.trace_l) {
-			scf_comtbl.trace_w = scf_comtbl.trace_f;
-		}
-		for (ii = 0; ii < 16; ii++, in_p++, out_p++) *out_p = *in_p;
-		if (trcp->code & (TC_ERR | TC_ERRCD)) {
-			in_p = (uchar_t *)trcp;
-			out_p = (uchar_t *)scf_comtbl.err_trace_w;
-			for (ii = 0; ii < 16; ii++, in_p++, out_p++)
-				*out_p = *in_p;
-			scf_comtbl.err_trace_w++;
-			if (scf_comtbl.err_trace_w == scf_comtbl.err_trace_l) {
-				scf_comtbl.err_trace_w = scf_comtbl.err_trace_f;
-			}
-		}
-	}
-
-	if (trcflag) {
-		mutex_exit(&scf_comtbl.trc_mutex);
-	}
-}
-#endif
--- a/usr/src/uts/sun4u/opl/scfd/Makefile	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-#
-# 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 2006 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
-#	This makefile drives the production of the scfd driver
-#       loadable module.
-#
-#	sun4u opl implementation architecture dependent
-#
-#	Path to the base of the uts directory tree (usually /usr/src/uts).
-#
-# uts/sun4u/opl/scf/Makefile
-
-UTSBASE	= ../../..
-
-#
-#	Define the module and object file sets.
-#
-MODULE		= scfd
-OBJECTS		= $(SCFD_OBJS:%=$(OBJS_DIR)/%)
-LINTS		= $(SCFD_OBJS:%.o=$(LINTS_DIR)/%.ln)
-ROOTMODULE	= $(ROOT_OPL_DRV_DIR)/$(MODULE)
-CONF_SRCDIR	= $(UTSBASE)/sun4u/opl/io/$(MODULE)
-
-#
-#	Include common rules.
-#
-include $(UTSBASE)/sun4u/opl/Makefile.opl
-
-#
-#	Define targets
-#
-ALL_TARGET	= $(BINARY) $(SRC_CONFFILE)
-LINT_TARGET	= $(MODULE).lint
-INSTALL_TARGET	= $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
-
-#
-# lint pass one enforcement
-#
-CFLAGS += $(CCVERBOSE)
-
-#
-#	Default build targets.
-#
-.KEEP_STATE:
-
-all:		$(ALL_DEPS)
-
-def:		$(DEF_DEPS)
-
-clean:		$(CLEAN_DEPS)
-
-clobber:	$(CLOBBER_DEPS)
-
-lint:		$(LINT_DEPS)
-
-modlintlib:	$(MODLINTLIB_DEPS)
-
-clean.lint:	$(CLEAN_LINT_DEPS)
-
-install:	$(INSTALL_DEPS)
-
-#
-#	Include common targets.
-#
-include $(UTSBASE)/sun4u/opl/Makefile.targ
--- a/usr/src/uts/sun4u/opl/sys/Makefile	Mon Nov 27 11:21:25 2006 -0800
+++ b/usr/src/uts/sun4u/opl/sys/Makefile	Mon Nov 27 11:55:12 2006 -0800
@@ -64,21 +64,9 @@
 		pcmu_types.h	\
 		pcmu_util.h
 
-SCFDHDRS=	iomp_drv.h	\
-		opcio.h		\
-		scfdebug.h	\
-		scfdscp.h	\
+SCFDHDRS=	opcioif.h	\
 		scfdscpif.h	\
-		scfio32.h	\
-		scfkstat.h	\
-		scfostoescf.h	\
-		scfparam.h	\
-		scfreg.h	\
-		scfsnap.h	\
-		scfstate.h	\
-		scfsys.h	\
-		scftimer.h	\
-		scftrace.h
+		scfostoescf.h
 
 NGDRHDRS=	$(UTSBASE)/sun4u/ngdr/sys/dr.h \
 		$(UTSBASE)/sun4u/ngdr/sys/dr_util.h
--- a/usr/src/uts/sun4u/opl/sys/scfd/iomp_drv.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _IOMP_DRV_H
-#define	_IOMP_DRV_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-#include <sys/types32.h>
-#include <sys/fiomp.h>
-
-#define	SCF_IOMP_NAME		"mscf0"
-#define	SCF_REAL_NAME		"/pseudo/scfd@200:mscf0"
-#define	SCF_LOGCAL_PATH		"/dev/FJSVhwr/scfc"
-#define	SCF_USER_PATH		"/dev/FJSVhwr/pwrctl"
-
-#define	SCF_MAX_STR		256
-#define	FIOMP_STAT_ONLINE	10
-#define	FIOMP_STAT_OFFLINE	11
-#define	FIOMP_STAT_UNCONFIGURED	12
-
-#define	FIOMP_STAT_RECOVER	20
-
-#define	FIOMP_STAT_BUSY		-1
-
-struct fiompdev_32 {
-	int		api_level;	/* API level = 0 */
-	int		inst_no;	/* instance number */
-	minor32_t	inst_minor;	/* instance management node */
-	minor32_t	user_minor;	/* user access node */
-	int		num;		/* number of devices */
-	caddr32_t	devs;		/* device names */
-	int		mpmode;		/* multi pathing */
-	int		autopath;	/* automatic path change */
-	int		block;		/* able to block physical device */
-	int		needsync;	/* need synchronize path status */
-	caddr32_t	ext;		/* for extension = NULL */
-};
-
-struct fiomp_devinfo_32 {
-	int		inst_no;	/* instance number */
-	char		real_name[FIOMP_MAX_STR]; /* instance management node */
-	char		user_path[FIOMP_MAX_STR]; /* user access path */
-	int		path_num;	/* number of paths */
-	int		mpmode;		/* multi pathing */
-	int		autopath;	/* automatic path change */
-	int		block;		/* able to block physical device */
-	int		needsync;	/* need synchronize path status */
-	caddr32_t	ext;		/* for extension = NULL */
-};
-
-struct fiomp_all_devinfo_32 {
-	int		num;		/* number of instances */
-	caddr32_t	devinfo;	/* device informations */
-};
-
-struct fiompprop_32 {
-	caddr32_t	iomp_name;	/* instance name */
-	caddr32_t	iomp_real_name;
-				/* instance management node (/devices) */
-	caddr32_t	iomp_user_path;
-				/* instance management node (/dev) */
-	caddr32_t	iomp_status;	/* status of the instance */
-	int		num;		/* number of paths */
-	caddr32_t	iomp_path;	/* target device nodes (/devices) */
-	caddr32_t	iomp_logical_path; /* target device nodes (/dev) */
-	caddr32_t	iomp_path_status; /* status of target devices */
-	caddr32_t	iomp_path_block; /* access block */
-};
-
-struct fiompstatus_32 {
-	int		pathnum;	/* path number */
-	int		status;		/* FIOMP_STAT_xxxx */
-	caddr32_t	message;	/* some messages */
-	int		block_status;	/* access block status */
-	caddr32_t	ext;		/* reservesd (= NULL) */
-};
-
-struct fiomppath_32 {
-	int		num;		/* number of paths */
-	caddr32_t	devs;		/* device names */
-};
-
-struct fiomp_all_stat_32 {
-	int		num;		/* number of paths */
-	caddr32_t	status;		/* path status */
-};
-
-struct fiompchg_32 {
-	int		num;		/* number of all paths */
-	caddr32_t	set_status;	/* setting values */
-	caddr32_t	pre_status;	/* previous values */
-	caddr32_t	status;		/* current values */
-};
-
-struct fiompevent_32 {
-	int		event;	/* event type = FIOMP_EVT_xx */
-	int		num;	/* instance number(meta management) or */
-				/* number of all path(instance management) */
-	caddr32_t	pre_status;	/* previous status */
-	caddr32_t	status;		/* current status */
-};
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _IOMP_DRV_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/opcio.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,318 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SYS_OPCIO_H
-#define	_SYS_OPCIO_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/ioccom.h>
-
-/*
- * ioctl
- */
-#define	SCFIOC			'p'<<8
-
-/*
- * ioctl
- */
-#define	SCFIOCCLEARLCD		(SCFIOC|10|0x80040000)
-#define	SCFIOCWRLCD		(SCFIOC|11|0x800c0000)
-#define	SCFIOCREPORTSTAT	(SCFIOC|22|0x80040000)
-#define	SCFIOCHAC		(SCFIOC|28|0x80810000)
-#define	SCFIOCRDCLIST		(SCFIOC|37|0xc00c0000)
-#define	SCFIOCHSTADRSINFO	(SCFIOC|41|0x40040000)
-#define	SCFIOCAUTOPWRSET	(SCFIOC|42|0x80f40000)
-#define	SCFIOCAUTOPWRGET	(SCFIOC|43|0x40f40000)
-#define	SCFIOCAUTOPWREXSET	(SCFIOC|44|0x80100000)
-#define	SCFIOCAUTOPWREXGET	(SCFIOC|45|0x40100000)
-#define	SCFIOCAUTOPWRFPOFF	(SCFIOC|46|0x80f40000)
-#define	SCFIOCRCIPWR		(SCFIOC|48|0xc0080000)
-#define	SCFIOCGETREPORT		(SCFIOC|49|0x40100000)
-#define	SCFIOCRDCLISTMAX	(SCFIOC|50|0x40040000)
-#define	SCFIOCRDCLISTX		(SCFIOC|51|0x800c0000)
-#define	SCFIOCRDCTRL		(SCFIOC|52|0xc0820000)
-#define	SCFIOCPANICREQ		(SCFIOC|53|0x80040000)
-#define	SCFIOCSYSAUTOPWRGET	(SCFIOC|60|0x20000000)
-#define	SCFIOCOPECALL		(SCFIOC|62|0x20000000)
-#define	SCFIOCSYSAUTOPWRCLR	(SCFIOC|66|0x20000000)
-#define	SCFIOCPANICCHK		(SCFIOC|67|0x80040000)
-#define	SCFIOCDR		(SCFIOC|68|0x80040000)
-#define	SCFIOCEVENTLIST		(SCFIOC|70|0x80040000)
-#define	SCFIOCGETEVENT		(SCFIOC|71|0x80040000)
-#define	SCFIOCOPTIONDISP	(SCFIOC|80|0x80040000)
-#define	SCFIOCPARMSET		(SCFIOC|82|0x80040000)
-#define	SCFIOCPARMGET		(SCFIOC|83|0x80040000)
-
-#define	SCFIOCGETDISKLED	(SCFIOC|101|0x80040000)
-#define	SCFIOCSETDISKLED	(SCFIOC|102|0x80040000)
-#define	SCFIOCGETSDOWNREASON	(SCFIOC|103|0x80040000)
-#define	SCFIOCGETPCICONFIG	(SCFIOC|104|0x80040000)
-#define	SCFIOCSETMADMEVENT	(SCFIOC|105|0x80040000)
-#define	SCFIOCREMCSCMD		(SCFIOC|106|0x80040000)
-#define	SCFIOCSPARECMD		(SCFIOC|107|0x80040000)
-#define	SCFIOCREMCSFILE		(SCFIOC|108|0x80040000)
-
-#define	SCFIOCSETPHPINFO	(SCFIOC|1|0xe0000000)
-
-/* SCFIOCOPECALL */
-#define	SUB_OPECALL_DISP	0x10	/* OP call disp */
-#define	SUB_OPECALL_ON_SET	0x20	/* OP call ON set */
-#define	SUB_OPECALL_OFF_SET	0x31	/* OP call OFF set */
-
-/* SCFIOCCLEARLCD */
-#define	SCF_CLRLCD_SEQ		0
-
-/* SCFIOCWRLCD */
-typedef struct scfwrlcd {
-	int		lcd_type;
-	int		length;
-	unsigned char	*string;
-} scfwrlcd_t;
-/* for lcd_type field */
-#define	SCF_WRLCD_SEQ		0
-
-#define	SCF_WRLCD_MAX		32
-
-/* SCFIOCREPORTSTAT */
-#define	SCF_SHUTDOWN_START	0
-#define	SCF_SYSTEM_RUNNING	1
-#define	SCF_RE_REPORT		9
-
-/* SCFIOCHAC */
-typedef struct scfhac {
-	unsigned char	sbuf[64];
-	unsigned char	rbuf[64];
-	unsigned char	sub_command;
-} scfhac_t;
-/* for sub_command field */
-#define	SUB_HOSTADDR_DISP	0x00	/* Host address disp */
-#define	SUB_REMOTE_POWCTL_SET	0x11	/* Remote power control set */
-#define	SCF_SUB_REMOTE_POWCTL_SET	0x10
-#define	SUB_DEVICE_INFO		0x0c	/* Device information disp */
-
-/* SCFIOCAUTOPWRSET, SCFIOCAUTOPWRGET, SCFIOCAUTOPWRFPOFF */
-typedef struct scfautopwrtime {
-	int		pon_year;	/* 1970 - 9999 */
-	int		pon_month;	/* 1 - 12 */
-	int		pon_date;	/* 1 - 31 */
-	int		pon_hour;	/* 0 - 23 */
-	int		pon_minute;	/* 0 - 59 */
-	int		poff_year;	/* 1970 - 9999 */
-	int		poff_month;	/* 1 - 12 */
-	int		poff_date;	/* 1 - 31 */
-	int		poff_hour;	/* 0 - 23 */
-	int		poff_minute;	/* 0 - 59 */
-	int		flag;
-	int		sarea;
-} scfautopwrtime_t;
-
-typedef struct scfautopwr {
-	int		valid_entries;
-	struct		scfautopwrtime	ptime[5];
-} scfautopwr_t;
-
-/* SCFIOCAUTOPWREXSET, SCFIOCAUTOPWREXGET */
-typedef struct scfautopwrex {
-	int		rpwr_mode;
-	int		rpwr_time;	/* minutes */
-	int		w_time;		/* minutes */
-	int		a_time;		/* minutes */
-} scfautopwrex_t;
-/* for rpwr_mode field */
-#define	AUTOPWREX_RESTORE	0x00
-#define	AUTOPWREX_NOPON		0x01
-#define	AUTOPWREX_AUTOPON	0x80
-
-/* SCFIOCRCIPWR */
-typedef struct scfrcipwr {
-	int		sub_cmd;
-	unsigned int	rci_addr;
-} scfrcipwr_t;
-/* for sub_cmd field */
-#define	RCI_PWR_ON		0x80
-#define	RCI_PWR_OFF		0x40
-#define	RCI_SYS_RESET		0x20
-#define	RCI_PFCTR		0x00
-#define	RCI_PWR_NOR_OFF		0x41
-
-/* SCFIOCGETREPORT */
-typedef struct scfreport {
-	int		flag;
-	unsigned int	rci_addr;
-	unsigned char	report_sense[4];
-	time_t		timestamp;
-} scfreport_t;
-/* for flag field */
-#define	GETREPORT_WAIT			1
-#define	GETREPORT_NOWAIT		2
-#define	GETREPORT_WAIT_AND_RCIDWN	3
-
-/* SCFIOCRDCLISTX */
-typedef struct scfrdclistx {
-	unsigned int	rci_addr;
-	unsigned char	status;
-	unsigned short	dev_class;
-	unsigned char	sub_class;
-} scfrdclistx_t;
-
-/* SCFIOCRDCTRL */
-typedef struct scfrdctrl {
-	unsigned char	sub_cmd;
-	unsigned char	scount;
-	unsigned char	sbuf[64];
-	unsigned char	sense[64];
-} scfrdctrl_t;
-/* for sub_cmd field */
-#define	SUB_DEVICE_STATUS_RPT	0x14	/* Device status print */
-#define	SCF_SUB_DEVICE_STATUS_RPT	0x71
-#define	SCF_RCI_PATH_40		0x50	/* RCI device request */
-
-/* SCFIOCDR */
-typedef struct scfdr {
-	unsigned char	sbuf[16];
-	unsigned char	rbuf[16 * 64];
-	unsigned char	sub_command;
-} scfdr_t;
-/* for sub_command field */
-#define	SUB_SB_CONF_CHG		0x11	/* SB configuration change */
-#define	SUB_SB_SENSE		0x00	/* SB status disp */
-#define	SUB_SB_SENSE_ALL	0x18	/* SB status all disp */
-#define	SUB_SB_BUILD_COMP	0x12	/* SB build completion */
-
-/* SCFIOCEVENTLIST */
-#define	SCF_EVENTLIST_MAX	128
-typedef struct scfeventlist {
-	int		listcnt;
-	unsigned char	codelist[SCF_EVENTLIST_MAX];
-} scfeventlist_t;
-
-/* SCFIOCGETEVENT */
-typedef struct scfevent {
-	int		flag;
-	unsigned int	rci_addr;
-	unsigned char	code;
-	unsigned char	size;
-	unsigned char	rsv[2];
-	unsigned char	event_sense[24];
-	time_t		timestamp;
-} scfevent_t;
-/* for flag field */
-#define	GETEVENT_WAIT		1
-#define	GETEVENT_NOWAIT		2
-
-/* SCFIOCOPTIONDISP */
-typedef struct scfoption {
-	unsigned char	rbuf[16];
-} scfoption_t;
-
-/* SCFIOCPARMSET, SCFIOCPARMGET */
-typedef struct scfparam {
-	int		parm;
-	int		value;
-} scfparam_t;
-/* for parm field */
-#define	SCF_PARM_RDCTRL_TIMER	0x00000001
-
-/* SCFIOCGETDISKLED/SCFIOCSETDISKLED */
-#define	SCF_DISK_LED_PATH_MAX	512
-typedef struct scfiocgetdiskled {
-	unsigned char	path[SCF_DISK_LED_PATH_MAX];
-	unsigned char	led;
-} scfiocgetdiskled_t;
-/* for led field */
-#define	SCF_DISK_LED_ON		0x01
-#define	SCF_DISK_LED_BLINK	0x02
-#define	SCF_DISK_LED_OFF	0x04
-
-/* SCFIOCGETSDOWNREASON */
-#define	REASON_NOTHING		0x00000000	/* reason nothing */
-#define	REASON_SHUTDOWN_FAN	0x00000001	/* Fan unit failure */
-#define	REASON_SHUTDOWN_PSU	0x00000002	/* Power unit failure */
-#define	REASON_SHUTDOWN_THERMAL	0x00000006	/* Thermal failure */
-#define	REASON_SHUTDOWN_UPS	0x00000007	/* UPS failure */
-#define	REASON_RCIPOFF		0x00000100	/* RCI POFF */
-#define	REASON_XSCFPOFF		0x00000103	/* XSCF POFF */
-#define	REASON_SHUTDOWN_HALT	0xffffffff	/* SCF HALT */
-
-/* SCFIOCGETPCICONFIG */
-typedef struct scfiocgetpciconfig {
-	unsigned char	sbuf[16];
-	unsigned char	rbuf[65536];
-} scfiocgetpciconfig_t;
-
-/* SCFIOCSETMADMEVENT */
-typedef struct scfiocsetmadmevent {
-	unsigned char	buf[65536];
-	unsigned int	size;
-} scfiocsetmadmevent_t;
-
-/* SCFIOCREMCSCMD */
-typedef struct scfiocremcscmd {
-	unsigned char	buf[16];
-	unsigned int	size;
-	unsigned char	sub_command;
-} scfiocremcscmd_t;
-/* for sub_command field */
-#define	SUB_CMD_EX_REMCS	0x01
-
-/* SCFIOCREMCSFILE */
-typedef struct scfiocremcsfile {
-	unsigned char	buf[65536];
-	unsigned int	size;
-	unsigned char	sub_command;
-} scfiocremcsfile_t;
-/* for sub_command field */
-#define	SUB_FILEUP_READY	0x10
-#define	SUB_FILEUP_SET		0x20
-#define	SUB_TRANSFER_STOP	0x40
-
-/* SCFIOCSPARECMD */
-typedef struct scfiocsparecmd {
-	unsigned char	buf[65536];
-	unsigned int	size;
-	unsigned char	command;
-	unsigned char	sub_command;
-	unsigned char	spare_sub_command;
-} scfiocsparecmd_t;
-/* for sub_command field */
-#define	SUB_SPARE_SS		0x00	/* Type SS */
-#define	SUB_SPARE_SL		0x11	/* Type SL */
-#define	SUB_SPARE_LS		0x12	/* Type LS */
-
-/* SCFIOCSETPHPINFO */
-typedef struct scfsetphpinfo {
-	unsigned char	buf[65536];
-	unsigned int	size;
-} scfsetphpinfo_t;
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SYS_OPCIO_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/sun4u/opl/sys/scfd/opcioif.h	Mon Nov 27 11:55:12 2006 -0800
@@ -0,0 +1,70 @@
+/*
+ * 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
+ */
+/*
+ * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
+ */
+
+#ifndef	_SYS_OPCIOIF_H
+#define	_SYS_OPCIOIF_H
+
+#pragma ident	"%Z%%M%	%I%	%E% SMI"
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#include <sys/ioccom.h>
+
+/*
+ * ioctl
+ *
+ * Note:  The ioctl definitions are split between opcio.h (closed) and
+ * opcioif.h (open).  All definitions required for the exported scfd
+ * interface should be in opcioif.h (open).
+ */
+#define	SCFIOC			'p'<<8
+
+#define	SCFIOCGETDISKLED	(SCFIOC|101|0x80040000)
+#define	SCFIOCSETDISKLED	(SCFIOC|102|0x80040000)
+#define	SCFIOCSETPHPINFO	(SCFIOC|1|0xe0000000)
+
+#define	SCF_DISK_LED_PATH_MAX	512
+
+/* for led field */
+#define	SCF_DISK_LED_ON		0x01
+#define	SCF_DISK_LED_BLINK	0x02
+#define	SCF_DISK_LED_OFF	0x04
+
+typedef struct scfiocgetdiskled {
+	unsigned char	path[SCF_DISK_LED_PATH_MAX];
+	unsigned char	led;
+} scfiocgetdiskled_t;
+
+typedef struct scfsetphpinfo {
+	unsigned char	buf[65536];
+	unsigned int	size;
+} scfsetphpinfo_t;
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _SYS_OPCIOIF_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfdebug.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SCFDEBUG_H
-#define	_SCFDEBUG_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/scfdscp.h>
-
-/*
- * ioctl
- */
-#define	SCFIOCDEBUG		'd'<<8
-
-/*
- * ioctl
- */
-#define	SCFIOCCMDTHROUGH	(SCFIOC|1|0xf0000000)
-#define	SCFIOCTEST		(SCFIOCDEBUG|2|0x80040000)
-
-/* SCFIOCCMDTHROUGH */
-typedef struct scfcmdthrough {
-	unsigned short	mode;
-	unsigned short	cmdtype;
-	unsigned short	code;
-	unsigned int	sbufleng;
-	unsigned int	rbufleng;
-	unsigned short	status;
-	unsigned char	sbuf[65536 + 16];
-	unsigned char	rbuf[1024 * 512];
-} scfcmdthrough_t;
-/* for mode field */
-#define	SCF_CMDTHROUGH_START	0	/* command through start */
-#define	SCF_CMDTHROUGH_STOP	1	/* command through stop */
-#define	SCF_CMDTHROUGH_CMD	2	/* command through */
-/* for cmdtype field */
-#define	SCF_CMDTHROUGH_TYPE_NN	0	/* WRITE:Nothing READ:Nothing */
-#define	SCF_CMDTHROUGH_TYPE_NS	1	/* WRITE:Nothing READ:Small   */
-#define	SCF_CMDTHROUGH_TYPE_NL	2	/* WRITE:Nothing READ:Larg    */
-#define	SCF_CMDTHROUGH_TYPE_SN	3	/* WRITE:Small	 READ:Nothing */
-#define	SCF_CMDTHROUGH_TYPE_SS	4	/* WRITE:Small	 READ:Small   */
-#define	SCF_CMDTHROUGH_TYPE_SL	5	/* WRITE:Small	 READ:Larg    */
-#define	SCF_CMDTHROUGH_TYPE_LN	6	/* WRITE:Larg	 READ:Nothing */
-#define	SCF_CMDTHROUGH_TYPE_LS	7	/* WRITE:Larg	 READ:Small   */
-
-#define	TEST_INFO_MAX		32
-
-/* SCFIOCTEST */
-typedef struct scf_scfioctest_tbl {
-	uint_t		mode;
-	uint_t		rci_addr;
-	uint_t    	data[2];
-	uint_t    	rsv1;
-	uint_t    	rsc2;
-	uint_t    	scf_debugxscf;
-	uint_t    	rtncode;
-	uint_t		info[TEST_INFO_MAX];
-	uint8_t		rdata[SRAM_MAX_SYSTEM];
-} scf_scfioctest_t;
-/* for mode field (Low 2byte) */
-#define	TEST_MODE_MASK_HIGHT		0xffff0000
-#define	TEST_MODE_MASK_LOW		0x0000ffff
-#define	TEST_NONE			0x00000000
-
-/* Config mode : for mode field (Low 2byte) */
-#define	TEST_CONF			0x00000100
-#define	TEST_CONF_RESET			0x00000100
-#define	TEST_CONF_DEBUG_MSG		0x00000101
-#define	TEST_CONF_CMD_BUSY		0x00000181
-#define	TEST_CONF_DSCP_LOOPBACK		0x00000182
-#define	TEST_CONF_SCF_PATH		0x00000183
-
-/* Interrupt mode : for mode field (Low 2byte) */
-#define	TEST_INT			0x00000200
-#define	TEST_INT_RESET			0x00000200
-#define	TEST_INT_SYS			0x00000201
-#define	TEST_INT_SYS_POFF		0x00000202
-#define	TEST_INT_SYS_EVENT		0x00000203
-#define	TEST_INT_DSCP			0x00000204
-
-/* SYS func call mode : for mode field (Low 2byte) */
-#define	TEST_SYS_CALL			0x00001000
-#define	TEST_SYS_CALL_RESET		0x00001000
-#define	TEST_SYS_CALL_INT		0x00001001
-
-/* DSCP func call mode : for mode field (Low 2byte) */
-#define	TEST_DSCP_CALL			0x00001100
-#define	TEST_DSCP_CALL_RESET		0x00001100
-#define	TEST_DSCP_CALL_INIT		0x00001101
-#define	TEST_DSCP_CALL_FINI		0x00001102
-#define	TEST_DSCP_CALL_PUTMSG		0x00001103
-#define	TEST_DSCP_CALL_CANGET		0x00001104
-#define	TEST_DSCP_CALL_GETMSG		0x00001105
-#define	TEST_DSCP_CALL_FLUSH		0x00001106
-#define	TEST_DSCP_CALL_CTRL		0x00001107
-#define	TEST_DSCP_CALL_OTHER		0x00001108
-
-/* OSESCF func callmode : for mode field (Low 2byte) */
-#define	TEST_OSESCF_CALL		0x00001200
-#define	TEST_OSESCF_CALL_RESET		0x00001200
-#define	TEST_OSESCF_CALL_PUTINFO	0x00001201
-#define	TEST_OSESCF_CALL_GETINFO	0x00001202
-
-/* FMEM OSESCF func callmode : for mode field (Low 2byte) */
-#define	TEST_FMEM_START			0x00001211
-#define	TEST_FMEM_END			0x00001212
-#define	TEST_FMEM_CANCEL		0x00001213
-#define	TEST_GET_DIMMINFO		0x00001214
-
-/*
- * External vwlue
- */
-extern uint_t	scf_debug_test_sys_int_flag;
-extern uint_t	scf_debug_test_rxbuff_nosum_check_flag;
-extern uint_t	scf_debug_test_sys_event_flag;
-extern uint_t	scf_debug_test_sys_poff_flag;
-extern uint_t	scf_debug_test_dscp_int_flag;
-extern uint_t	scf_debug_test_cmdr_busy;
-extern uint_t	scf_debug_test_cmdexr_busy;
-extern uint_t	scf_debug_test_copyin;
-extern uint_t	scf_debug_test_copyout;
-extern uint_t	scf_debug_test_kmem;
-extern uint_t	scf_debug_test_path_check;
-extern uint_t	scf_debug_test_path_check_rtn;
-extern uint_t	scf_debug_test_offline_check;
-extern uint_t	scf_debug_test_offline_check_rtn;
-extern uint_t	scf_debug_test_dscp_call_flag;
-extern uint_t	scf_debug_test_osescf_call_flag;
-
-extern uint_t	scf_no_make_sum_s;
-extern uint_t	scf_no_make_sum_l;
-
-extern uint_t	scf_debug_nofirm_sys;
-extern uint_t	scf_debug_scfint_time;
-extern uint_t	scf_debug_nofirm_dscp;
-extern uint_t	scf_debug_idbcint_time;
-extern uint_t	scf_debug_test_dscp_loopback;
-extern uint_t	scf_debug_nooffline_check;
-extern uint_t	scf_debug_no_dscp_path;
-extern uint_t	scf_debug_no_alive;
-extern uint_t	scf_debug_norxsum_check;
-extern uint_t	scf_debug_no_int_reason;
-extern uint_t	scf_debug_no_device;
-
-/*
- * External function
- */
-extern int	scf_debug_cmdthrough(intptr_t arg, int mode);
-extern int	scf_debug_test(intptr_t arg, int mode);
-extern void	scf_debug_test_intr_tout(void *arg);
-extern void	scf_debug_test_intr(scf_state_t *statep);
-extern void	scf_debug_test_intr_scfint(scf_state_t *statep);
-extern void	scf_debug_test_intr_cmdend(scf_state_t *statep);
-extern void	scf_debug_test_intr_poff(void);
-extern void	scf_debug_test_dsens(struct scf_cmd *scfcmdp,
-	scf_int_reason_t *int_rp, int len);
-extern void	scf_debug_test_intr_dscp_dsr(scf_state_t *statep);
-extern void	scf_debug_test_intr_dscp_rxtx(scf_state_t *statep, uint8_t dsr);
-extern void	scf_debug_test_alive_start(scf_state_t *statep);
-extern void	scf_debug_test_alive_stop(scf_state_t *statep);
-extern void	scf_debug_test_alive_intr_tout(void *arg);
-extern void	scf_debug_test_send_cmd(struct scf_state *statep,
-	struct scf_cmd *scfcmdp);
-extern void	scf_debug_test_txreq_send(scf_state_t *statep,
-	scf_dscp_dsc_t *dsc_p);
-extern void	scf_debug_test_event_handler(scf_event_t mevent, void *arg);
-extern void	scf_debug_test_timer_stop(void);
-extern void	scf_debug_test_map_regs(scf_state_t *statep);
-extern void	scf_debug_test_unmap_regs(scf_state_t *statep);
-
-/*
- * Debug flag and value define
- */
-/* scf_debug_test_sys_int_flag */
-#define	SCF_DBF_SYS_INTR_OFF		0
-#define	SCF_DBF_SYS_INTR_ON		1
-
-/* scf_debug_test_rxbuff_nosum_check_flag */
-#define	SCF_DBF_RXBUFF_NOSUM_CHECK_OFF	0
-#define	SCF_DBF_RXBUFF_NOSUM_CHECK_ON	1
-
-/* scf_debug_test_sys_event_flag */
-#define	SCF_DBF_SYS_EVENT_OFF		0
-#define	SCF_DBF_SYS_EVENT_ON		1
-
-/* scf_debug_test_sys_poff_flag */
-#define	SCF_DBF_SYS_POFF_OFF		0
-#define	SCF_DBF_SYS_POFF_ON		1
-
-/* scf_debug_test_dscp_int_flag */
-#define	SCF_DBF_DSCP_INT_OFF		0
-#define	SCF_DBF_DSCP_INT_ON		1
-
-/* scf_debug_test_cmdr_busy */
-#define	SCF_DBC_CMDR_BUSY_CLEAR		0x00000000
-
-/* scf_debug_test_cmdexr_busy */
-#define	SCF_DBC_CMDEXR_BUSY_CLEAR	0x00000000
-
-/* scf_debug_test_copyin */
-#define	SCF_DBC_COPYIN_CLEAR		0x00000000
-
-/* scf_debug_test_copyout */
-#define	SCF_DBC_COPYOUT_CLEAR		0x00000000
-
-/* scf_debug_test_kmem */
-#define	SCF_DBC_KMEM_CLEAR		0x00000000
-
-/* scf_debug_test_path_check */
-#define	SCF_DBC_PATH_CHECK_CLEAR	0x00000000
-
-/* scf_debug_test_path_check_rtn */
-#define	SCF_DBC_PATH_CHECK_RTN_CLEAR	0x00000000
-
-/* scf_debug_test_offline_check */
-#define	SCF_DBC_OFFLINE_CHECK_CLEAR	0x00000000
-
-/* scf_debug_test_offline_check_rtn */
-#define	SCF_DBC_OFFLINE_CHECK_RTN_CLEAR	0x00000000
-
-/* scf_debug_test_dscp_call_flag */
-#define	SCF_DBF_DSCP_CALL_OFF		0
-#define	SCF_DBF_DSCP_CALL_ON		1
-
-/* scf_debug_test_osescf_call_flag */
-#define	SCF_DBF_OSESCF_CALL_OFF		0
-#define	SCF_DBF_OSESCF_CALL_ON		1
-
-/* scf_no_make_sum_s */
-#define	SCF_DBF_NO_MAKE_SUM_S_OFF	0
-#define	SCF_DBF_NO_MAKE_SUM_S_ON	1
-
-/* scf_no_make_sum_l */
-#define	SCF_DBF_NO_MAKE_SUM_L_OFF	0
-#define	SCF_DBF_NO_MAKE_SUM_L_ON	1
-
-/* scf_debug_nofirm_sys */
-#define	SCF_DBF_NOFIRM_SYS_OFF		0
-#define	SCF_DBF_NOFIRM_SYS_ON		1
-
-/* scf_debug_scfint_time */
-#define	SCF_DBT_SCFINT_TIME_100MS	100
-
-/* scf_debug_nofirm_dscp */
-#define	SCF_DBF_NOFIRM_DSCP_OFF		0
-#define	SCF_DBF_NOFIRM_DSCP_ON		1
-
-/* scf_debug_idbcint_time */
-#define	SCF_DBT_IDBCINT_TIME_100MS	100
-
-/* scf_debug_test_dscp_loopback */
-#define	SCF_DBF_DSCP_LOOPBACK_OFF	0
-#define	SCF_DBF_DSCP_LOOPBACK_ON	1
-
-/* scf_debug_nooffline_check */
-#define	SCF_DBF_NOOFFLINE_CHECK_OFF	0
-#define	SCF_DBF_NOOFFLINE_CHECK_ON	1
-
-/* scf_debug_no_dscp_path */
-#define	SCF_DBF_NO_DSCP_PATH_OFF	0
-#define	SCF_DBF_NO_DSCP_PATH_ON		1
-
-/* scf_debug_no_alive */
-#define	SCF_DBF_NO_ALIVE_OFF		0
-#define	SCF_DBF_NO_ALIVE_ON		1
-
-/* scf_debug_norxsum_check */
-#define	SCF_DBF_NORXSUM_CHECK_OFF	0
-#define	SCF_DBF_NORXSUM_CHECK_ON	1
-
-/* scf_debug_no_int_reason */
-#define	SCF_DBF_NO_INT_REASON_OFF	0
-#define	SCF_DBF_NO_INT_REASON_ON	1
-
-/* scf_debug_no_device */
-#define	SCF_DBF_NO_DEVICE_OFF		0
-#define	SCF_DBF_NO_DEVICE_ON		1
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFDEBUG_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfdscp.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,470 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SCFDSCP_H
-#define	_SCFDSCP_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/scfdscpif.h>
-/*
- * Discriptor define
- */
-#define	SCF_TOTAL_BUFFSIZE	0x00010000	/* Total buff size (64KB) */
-#define	SCF_MB_MAXDATALEN	0x00000600	/* Message data max length */
-#define	SCF_TXBUFFSIZE		SCF_MB_MAXDATALEN /* Tx buff size (1.5KB) */
-#define	SCF_RXBUFFSIZE		SCF_MB_MAXDATALEN /* Rx buff size (1.5KB) */
-#define	SCF_TX_SRAM_MAXCOUNT	16		/* Tx SRAM max count (0x6000) */
-#define	SCF_RX_SRAM_MAXCOUNT	26		/* Rx SRAM max count (0x6000) */
-
-#define	SCF_TXDSC_CNTROLCOUNT	(2 * MBIF_MAX)	/* TxDSC control count */
-#define	SCF_TXDSC_LOCALCOUNT	1 /* TxDSC local count (DSCP_PATH/CONN_CHK) */
-
-#define	SCF_TXDSC_MAXCOUNT	(SCF_TX_SRAM_MAXCOUNT + SCF_TXDSC_CNTROLCOUNT)
-						/* TxDSC max count (0x6000) */
-#define	SCF_RXDSC_MAXCOUNT	SCF_RX_SRAM_MAXCOUNT
-						/* RxDSC max count (0x9c00) */
-
-#define	SCF_TXDSC_BUSYCOUNT	SCF_TX_SRAM_MAXCOUNT	/* TxDSC busy count */
-#define	SCF_RXDSC_BUSYCOUNT	SCF_RX_SRAM_MAXCOUNT	/* RxDSC busy count */
-
-/*
- * Re-try max count define
- */
-#define	SCF_TX_ACKTO_MAXRETRAYCOUNT	1	/* TxACK timeout */
-#define	SCF_TX_ENDTO_MAXRETRAYCOUNT	1	/* TxEND timeout */
-
-#define	SCF_TX_BUSY_MAXRETRAYCOUNT	10	/* TxEND Busy */
-#define	SCF_TX_IF_MAXRETRAYCOUNT	1	/* TxEND Interface error */
-#define	SCF_TX_NAK_MAXRETRAYCOUNT	1	/* TxEND Connection refusal */
-#define	SCF_TX_NOTSUP_MAXRETRAYCOUNT	1	/* TxEND Not support */
-#define	SCF_TX_PRMERR_MAXRETRAYCOUNT	1	/* TxEND Parameter error */
-#define	SCF_TX_SEQERR_MAXRETRAYCOUNT	1	/* TxEND Sequence error */
-#define	SCF_TX_OTHER_MAXRETRAYCOUNT	1	/* TxEND other error */
-#define	SCF_TX_SEND_MAXRETRAYCOUNT	3	/* TxEND send */
-
-/*
- * Que max count define
- */
-#define	SCF_RDQUE_MAXCOUNT	SCF_RXDSC_MAXCOUNT	/* Recv data */
-#define	SCF_RDQUE_BUSYCOUNT	SCF_RDQUE_MAXCOUNT	/* Recv data */
-
-#define	SCF_MB_EVQUE_MAXCOUNT	(SCF_RDQUE_MAXCOUNT + 4) /* Event */
-
-/*
- * Mailbox interface code
- */
-typedef enum {
-	MBIF_DSCP,			/* DSCP mailbox interface code */
-	MBIF_DKMD,			/* DKMD mailbox interface code */
-					/* Add mailbox interface code */
-	MBIF_MAX			/* Max interface code */
-} scf_mbif_t;
-
-/*
- * Callback event queue
- */
-typedef struct scf_event_que {
-	scf_event_t	mevent;			/* Event types */
-} scf_event_que_t;
-
-/*
- * Recv data queue
- */
-typedef struct scf_rdata_que {
-	caddr_t		rdatap;			/* Recv data address */
-	uint32_t	length;			/* Recv data length */
-} scf_rdata_que_t;
-
-/*
- * DSCP main control table
- */
-typedef struct scf_dscp_main {
-	/* main status */
-	uint16_t	status;			/* Main status */
-	uint16_t	old_status;		/* Old main status */
-	uint8_t		id;			/* Table No. */
-	uint8_t		rsv[3];			/* reserved */
-
-	/* flag/code */
-	uint_t		conn_chk_flag;		/* DSCP connect check flag */
-
-	/* init() parameter */
-	target_id_t	target_id;	/* Target ID specifying the peer */
-	mkey_t		mkey;			/* Data type for mailbox key */
-	void		(*event_handler)(scf_event_t, void *);
-					/* event handler function */
-	scf_event_t	mevent;			/* Event types */
-	void		*arg;			/* Callback argument */
-
-	/* cv_init() condition */
-	uint_t		cv_init_flag;		/* cv_init call flag */
-	kcondvar_t	fini_cv;		/* fint() condition variables */
-	uint_t		fini_wait_flag;		/* fini wait flag */
-
-	/* flag */
-	uint_t		putmsg_busy_flag;	/* putmsg busy flag */
-
-	/* memo counter */
-	uint_t		memo_tx_data_req_cnt;	/* Tx DATA_REQ counter */
-	uint_t		memo_tx_data_req_ok_cnt; /* Tx DATA_REQ ok counter */
-	uint_t		memo_rx_data_req_cnt;	/* Rx DATA_REQ counter */
-	uint_t		memo_rx_data_req_ok_cnt; /* Rx DATA_REQ ok counter */
-	uint_t		memo_putmsg_busy_cnt;	/* putmsg busy counter */
-	uint_t		memo_putmsg_enospc_cnt;	/* putmsg ENOSPC counter */
-
-	/* Event/Recv data regulation counter */
-	uint_t		ev_maxcount;		/* Event max count */
-	uint_t		rd_maxcount;		/* Recv data max count */
-	uint_t		rd_busycount;		/* Recv data busy count */
-
-	/* Event/Recv data working counter */
-	uint_t		ev_count;		/* Use event count */
-	uint_t		rd_count;		/* Use recv data count */
-
-	/* Event/Recv data table address and size */
-	scf_event_que_t	*ev_quep;		/* Event table pointer */
-	uint_t		ev_quesize;		/* Event table size */
-	scf_rdata_que_t	*rd_datap;		/* Recv data table pointer */
-	uint_t		rd_datasize;		/* Recv data table size */
-
-	/* Event/Recv data offset */
-	uint16_t	ev_first;		/* Event first */
-	uint16_t	ev_last;		/* Event last */
-	uint16_t	ev_put;			/* Event put */
-	uint16_t	ev_get;			/* Event get */
-	uint16_t	rd_first;		/* Recv data first */
-	uint16_t	rd_last;		/* Recv data last */
-	uint16_t	rd_put;			/* Recv data put */
-	uint16_t	rd_get;			/* Recv data get */
-
-	uint_t		timer_code;		/* DSCP INIT_REQ timer code */
-} scf_dscp_main_t;
-
-/*
- * DCR/DSR register table
- */
-typedef union scf_dscreg {
-	/* Basic code format */
-	struct {
-		uint16_t	c_flag;		/* Control flag (DCR/DSR) */
-		uint16_t	offset;		/* SRAM offset (DCR/DSR) */
-		uint32_t	length;		/* Data length (DCR) */
-		caddr_t		dscp_datap;	/* KMEM data address */
-	} base;
-	/* TxDCR/RxDCR bit format */
-	struct {				/* DCR bit format */
-		unsigned	id		: 4;	/* control id */
-		unsigned	code		: 4;	/* control code */
-
-		unsigned	emergency	: 1;	/* emergency flag */
-		unsigned	interrupt	: 1;	/* interrupt flag */
-		unsigned			: 2;
-		unsigned	first		: 1;	/* first data flag */
-		unsigned	last		: 1;	/* last data flag */
-		unsigned			: 2;
-	} bdcr;
-	/* TxDSR/RxDSR bit format */
-	struct {				/* DSR bit format */
-		unsigned	id		: 4;	/* control id */
-		unsigned	code		: 4;	/* control code */
-
-		unsigned	status		: 8;	/* complete status */
-	} bdsr;
-} scf_dscreg_t;
-
-/*
- * DSCP Tx/Rx discriptor table
- */
-typedef struct scf_dscp_dsc {
-	/* TxDSC/RxDSC status */
-	uint16_t	status;			/* Tx/Rx status */
-	uint16_t	old_status;		/* Old Tx/Rx status */
-
-	/* DCR/DSR interface area */
-	scf_dscreg_t	dinfo;			/* DCR/DSR register table */
-} scf_dscp_dsc_t;
-
-/*
- * DSCP Tx SRAM table
- */
-typedef struct scf_tx_sram {
-	uint16_t	use_flag;		/* Tx SRAM use flag */
-	uint16_t	offset;			/* Tx SRAM offset */
-} scf_tx_sram_t;
-
-/*
- * DSCP common table
- */
-typedef struct scf_dscp_comtbl {
-	/* DSCP main control table */
-	scf_dscp_main_t	scf_dscp_main[MBIF_MAX]; /* DSCP main table */
-
-	/* flag/code */
-	uint_t		dscp_init_flag;		/* DSCP interface init flag */
-	uint_t		tx_exec_flag;		/* TxREQ exec flag */
-	uint_t		rx_exec_flag;		/* RxREQ exec flag */
-	uint_t		callback_exec_flag;	/* Callback exec flag */
-	uint_t		dscp_path_flag;		/* DSCP path change flag */
-	uint_t		tx_local_use_flag; /* Use local control TxDSC flag */
-
-	/* size */
-	uint_t		maxdatalen;		/* Message data max length */
-	uint_t		total_buffsize;		/* Total buff size */
-	uint_t		txbuffsize;		/* Tx buff size */
-	uint_t		rxbuffsize;		/* Rx buff size */
-
-	/* TxDSC/RxDSC/Event regulation counter */
-	uint_t		txsram_maxcount;	/* TxDSC SRAM max count */
-	uint_t		rxsram_maxcount;	/* RxDSC SRAM max count */
-	uint_t		txdsc_maxcount;		/* TxDSC max count */
-	uint_t		rxdsc_maxcount;		/* RxDSC max count */
-	uint_t		txdsc_busycount;	/* TxDSC busy count */
-	uint_t		rxdsc_busycount;	/* RxDSC busy count */
-
-	/* TxDSC re-try max count */
-	uint_t		tx_ackto_maxretry_cnt;	/* TxACK timeout */
-	uint_t		tx_endto_maxretry_cnt;	/* TxEND timeout */
-
-	uint_t		tx_busy_maxretry_cnt;	/* TxEND busy */
-	uint_t		tx_interface_maxretry_cnt; /* TxEND Interface error */
-	uint_t		tx_nak_maxretry_cnt;	/* TxEND Connection refusal */
-	uint_t		tx_notsup_maxretry_cnt;	/* TxEND Not support */
-	uint_t		tx_prmerr_maxretry_cnt;	/* TxEND Parameter error */
-	uint_t		tx_seqerr_maxretry_cnt;	/* TxEND Sequence erro */
-	uint_t		tx_other_maxretry_cnt;	/* TxEND other error */
-	uint_t		tx_send_maxretry_cnt;	/* TxEND send */
-
-	/* TxDSC/RxDSC working counter */
-	uint_t		tx_dsc_count;		/* Use TxDSC count */
-	uint_t		rx_dsc_count;		/* Use RxDSC count */
-	uint_t		tx_sram_count;		/* Use Tx SRAM count */
-
-	/* TxDSC/RxDSC working re-try counter */
-	uint_t		tx_ackto_retry_cnt;	/* TxACK timeout */
-	uint_t		tx_endto_retry_cnt;	/* TxEND timeout */
-
-	uint_t		tx_busy_retry_cnt;	/* TxEND busy */
-	uint_t		tx_interface_retry_cnt;	/* TxEND Interface error */
-	uint_t		tx_nak_retry_cnt;	/* TxEND Connection refusal */
-	uint_t		tx_notsuop_retry_cnt;	/* TxEND Not support */
-	uint_t		tx_prmerr_retry_cnt;	/* TxEND Parameter error */
-	uint_t		tx_seqerr_retry_cnt;	/* TxEND Sequence error */
-	uint_t		tx_other_retry_cnt;	/* TxEND other error */
-	uint_t		tx_send_retry_cnt;	/* TxEND send */
-
-	/* TxDSC/RxDSC memo counter */
-	uint_t		tx_ackto_memo_cnt;	/* TxACK timeout */
-	uint_t		tx_endto_memo_cnt;	/* TxEND timeout */
-	uint_t		tx_busy_memo_cnt;	/* TxEND busy */
-	uint_t		tx_interface_memo_cnt;	/* TxEND Interface error */
-	uint_t		tx_nak_memo_cnt;	/* TxEND Connection refusal */
-	uint_t		tx_notsuop_memo_cnt;	/* TxEND Not support */
-	uint_t		tx_prmerr_memo_cnt;	/* TxEND Parameter error */
-	uint_t		tx_seqerr_memo_cnt;	/* TxEND Sequence error */
-	uint_t		tx_other_memo_cnt;	/* TxEND other error */
-	uint_t		scf_stop_memo_cnt;	/* SCF path stop */
-
-	/* TxDSC table address and size */
-	scf_dscp_dsc_t	*tx_dscp;		/* TxDSC table pointer */
-	uint_t		tx_dscsize;		/* TxDSC table size */
-	/* RxDSC table address and size */
-	scf_dscp_dsc_t	*rx_dscp;		/* RxDSC table pointer */
-	uint_t		rx_dscsize;		/* RxDSC table size */
-	/* Tx SRAM table address and size */
-	scf_tx_sram_t	*tx_sramp;		/* Tx SRAM table pointer */
-	uint_t		tx_sramsize;		/* Tx SRAM table size */
-
-	/* TxDSC offset */
-	uint16_t	tx_first;		/* TxDSC first offset */
-	uint16_t	tx_last;		/* TxDSC last offset */
-	uint16_t	tx_put;			/* TxDSC put offset */
-	uint16_t	tx_get;			/* TxDSC get offset */
-	uint16_t	tx_local;		/* Local control TxDSC offset */
-
-	/* TxDSC/RxDSC offset */
-	uint16_t	rx_first;		/* RxDSC first offset */
-	uint16_t	rx_last;		/* RxDSC last offset */
-	uint16_t	rx_put;			/* RxDSC put offset */
-	uint16_t	rx_get;			/* RxDSC get offset */
-
-	/* Tx SRAM offset */
-	uint16_t	tx_sram_first;		/* Tx SRAM first offset */
-	uint16_t	tx_sram_last;		/* Tx SRAM last offset */
-	uint16_t	tx_sram_put;		/* Tx SRAM put offset */
-
-} scf_dscp_comtbl_t;
-
-/*
- * DSCP main status (scf_dscp_main_t : status)
- */
-	/* (A0) Cconnection idle state */
-#define	SCF_ST_IDLE			0x0000
-
-#ifdef	_SCF_SP_SIDE
-	/* (A1) init() after, INIT_REQ recv state */
-#define	SCF_ST_EST_INIT_REQ_RECV_WAIT	0x0001
-#else	/* _SCF_SP_SIDE */
-	/* (B0) Send INIT_REQ, TxEND recv wait state */
-#define	SCF_ST_EST_TXEND_RECV_WAIT	0x0010
-#endif	/* _SCF_SP_SIDE */
-
-	/* (C0) Connection establishment state */
-#define	SCF_ST_ESTABLISHED		0x0020
-	/* (C1) Recv FINI_REQ, fini() wait state */
-#define	SCF_ST_EST_FINI_WAIT		0x0021
-	/* (D0) Send FINI_REQ, TxEND recv wait state */
-#define	SCF_ST_CLOSE_TXEND_RECV_WAIT	0x0030
-
-/*
- * DSCP Tx discriptor status (scf_dscp_dsc_t : status)
- */
-	/* (SA0) Idle state */
-#define	SCF_TX_ST_IDLE			0x0000
-	/* (SB0) TxREQ send wait & SRAM trans wait state */
-#define	SCF_TX_ST_SRAM_TRANS_WAIT	0x0010
-
-#ifdef	_SCF_SP_SIDE
-	/* (SB1) TxREQ send wait & SRAM trans comp wait state */
-#define	SCF_TX_ST_SRAM_COMP_WAIT	0x0011
-#endif	/* _SCF_SP_SIDE */
-
-	/* (SB2) TxREQ send wait & TxREQ send wait state */
-#define	SCF_TX_ST_TXREQ_SEND_WAIT	0x0012
-	/* (SC0) Send TxREQ, TxACK recv wait state */
-#define	SCF_TX_ST_TXACK_RECV_WAIT	0x0020
-	/* (SC1) Send TxREQ, TxEND recv wait state */
-#define	SCF_TX_ST_TXEND_RECV_WAIT	0x0021
-
-/*
- * DSCP Rx discriptor status (scf_dscp_dsc_t : status)
- */
-	/* (RA0) Idle state */
-#define	SCF_RX_ST_IDLE			0x0000
-	/* (RB0) Recv RxREQ, RxACK send wait state */
-#define	SCF_RX_ST_RXACK_SEND_WAIT	0x0010
-	/* (RB1) Recv RxREQ, SRAM trans wait state */
-#define	SCF_RX_ST_SRAM_TRANS_WAIT	0x0011
-
-#ifdef	_SCF_SP_SIDE
-	/* (RB2) Recv RxREQ, SRAM comp wait state */
-#define	SCF_RX_ST_SRAM_COMP_WAIT	0x0012
-#endif	/* _SCF_SP_SIDE */
-
-	/* (RB3) Recv RxREQ, RxEND send wait state */
-#define	SCF_RX_ST_RXEND_SEND_WAIT	0x0013
-
-/*
- * DSC controlflag (scf_dscreg_t : c_flag)
- */
-#define	DSC_FLAG_DEFAULT	0x004c		/* Default flag */
-				/* emergency=0, interrupt=1, first=1, last=0 */
-/*
- * DSC controlflag (scf_dscreg_t : id)
- */
-#define	DSC_CNTL_MASK_ID	0x0f		/* Mask id */
-
-#define	DSC_CNTL_DSCP		0x0		/* DSCP mailbox interface */
-#define	DSC_CNTL_DKMD		0x1		/* DKMD mailbox interface */
-#define	DSC_CNTL_LOCAL		0xe		/* Local interface */
-#define	DSC_CNTL_POST		0xf	/* Post diag interface (not use) */
-
-/*
- * DSC controlflag (scf_dscreg_t : code)
- */
-#define	DSC_CNTL_MASK_CODE	0x0f		/* Mask code */
-
-#define	DSC_CNTL_DATA_REQ	0x0		/* DATA REQ */
-#define	DSC_CNTL_INIT_REQ	0x1		/* INIT_REQ */
-#define	DSC_CNTL_FINI_REQ	0x2		/* FINI_REQ */
-#define	DSC_CNTL_FLUSH_REQ	0x3		/* FLUSH_REQ */
-#define	DSC_CNTL_CONN_CHK	0xf		/* CONN_CHK */
-
-/*
- * DSC controlflag (scf_dscreg_t : code) id = DSC_CNTL_LOCAL
- */
-#define	DSC_CNTL_DSCP_PATH	0x0		/* DSCP_PATH */
-
-/*
- * DSC controlflag (scf_dscreg_t : status)
- */
-#define	DSC_STATUS_NORMAL		0x00	/* Normal end */
-#define	DSC_STATUS_BUF_BUSY		0x01	/* Buffer busy */
-#define	DSC_STATUS_INTERFACE		0x03	/* Interface error */
-#define	DSC_STATUS_CONN_NAK		0x04	/* Connection refusal */
-#define	DSC_STATUS_E_NOT_SUPPORT	0x08	/* Not support */
-#define	DSC_STATUS_E_PARAM		0x09	/* Parameter error */
-#define	DSC_STATUS_E_SEQUENCE		0x0d	/* Sequence error */
-
-/*
- * DSC controlflag (scf_dscreg_t : offset)
- */
-#define	DSC_OFFSET_NOTHING	0xffff		/* DSC offset nothing value */
-#define	DSC_OFFSET_CONVERT	16		/* DSC offset convert size */
-
-/*
- * scf_dscp_sram_get() return value
- */
-#define	TX_SRAM_GET_ERROR	0xffff		/* Tx SRAM get error value */
-
-/*
- * Main status change macro
- */
-#define	SCF_SET_STATUS(p, st)						\
-	p->old_status = p->status;					\
-	p->status = st;							\
-	SCFDBGMSG2(SCF_DBGFLAG_DSCP,					\
-		"main status change = 0x%04x 0x%04x",			\
-		p->status, p->old_status)
-/*
- * TxDSC/RxDSC status change macro
- */
-#define	SCF_SET_DSC_STATUS(p, st)					\
-	p->old_status = p->status;					\
-	p->status = st;							\
-	SCFDBGMSG2(SCF_DBGFLAG_DSCP,					\
-		"DSC status change = 0x%04x 0x%04x",			\
-		p->status, p->old_status)
-
-/*
- * Use scf_dscp_tx_mat_notice() code
- */
-#define	TxEND			(uint8_t)0x80	/* TxEND */
-#define	TxREL_BUSY		(uint8_t)0xf0	/* Relese busy */
-
-/*
- * Use scf_dscp_rx_mat_notice() code
- */
-#define	RxREQ			(uint8_t)0x80	/* RxREQ */
-#define	RxDATA			(uint8_t)0xf0	/* RxDATA */
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* _SCFDSCP_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfio32.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFIO32_H
-#define	_SCFIO32_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/types32.h>
-
-/* SCFIOCWRLCD 32bit */
-typedef struct scfwrlcd32 {
-	int		lcd_type;
-	int		length;
-	caddr32_t	string;
-} scfwrlcd32_t;
-
-
-/* SCFIOCGETREPORT 32bit */
-typedef struct scfreport32 {
-	int		flag;
-	unsigned int	rci_addr;
-	unsigned char	report_sense[4];
-	time32_t	timestamp;
-} scfreport32_t;
-
-
-/* SCFIOCGETEVENT 32bit */
-typedef struct scfevent32 {
-	int		flag;
-	unsigned int	rci_addr;
-	unsigned char	code;
-	unsigned char	size;
-	unsigned char	rsv[2];
-	unsigned char	event_sense[24];
-	time32_t	timestamp;
-} scfevent32_t;
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFIO32_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfkstat.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFKSTAT_H
-#define	_SCFKSTAT_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * kstat_create(9F) ID parameter
- *	 module = "scfd"
- *	 class = "misc"
- */
-/* name = "??" */
-#define	SCF_SYSTEM_KSTAT_NAME		"scf"
-
-/*
- * kstat_named_init(9F) ID parameter
- */
-/* name == "scf" */
-#define	SCF_STATUS_KSTAT_NAMED		"status"
-#define	SCF_BOOT_MODE_KSTAT_NAMED	"boot_mode"
-#define	SCF_SECURE_MODE_KSTAT_NAMED	"secure_mode"
-#define	SCF_EVENT_KSTAT_NAMED		"event"
-#define	SCF_ALIVE_KSTAT_NAMED		"alive"
-
-/*
- * "scf" KSTAT_TYPE_NAMED item
- */
-/* named == "status" */
-#define	SCF_STAT_STATUS_OFFLINE	0
-#define	SCF_STAT_STATUS_ONLINE	1
-
-/* named == "boot_mode" */
-#define	SCF_STAT_MODE_OBP_STOP	0
-#define	SCF_STAT_MODE_AUTO_BOOT	1
-
-/* named == "secure_mode" */
-#define	SCF_STAT_MODE_UNLOCK	0
-#define	SCF_STAT_MODE_LOCK	1
-
-/* named == "watch" */
-#define	SCF_STAT_ALIVE_OFF	0
-#define	SCF_STAT_ALIVE_ON	1
-
-
-/*
- * SCF driver kstat entry point
- */
-/* from scf_attach() */
-void	scf_kstat_init();		/* DDI_ATTACH */
-
-/* from scf_detach() */
-void	scf_kstat_fini();		/* DDI_DETACH */
-
-/*
- * private variables for kstat routine
- */
-typedef struct scf_kstat_private {
-	/* kstat_t */
-	kstat_t		*ksp_scf;
-} scf_kstat_private_t;
-
-/* "scf" */
-#define	SCF_KSTAT_SYS_NAMED_STATUS	0
-#define	SCF_KSTAT_SYS_NAMED_BOOT_MODE	1
-#define	SCF_KSTAT_SYS_NAMED_SECURE_MODE	2
-#define	SCF_KSTAT_SYS_NAMED_EVENT	3
-#define	SCF_KSTAT_SYS_NAMED_ALIVE	4
-
-#define	SCF_KSTAT_SYS_NAMED_NDATA	5
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SCFKSTAT_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfparam.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFPARAM_H
-#define	_SCFPARAM_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/scfsys.h>
-#include <sys/scfd/scfostoescf.h>
-
-/*
- * Common table
- */
-extern scf_comtbl_t	scf_comtbl;	/* SCF driver common table */
-extern void	*scfstate;		/* root of soft state */
-extern char	*scf_driver_name;	/* SCF driver name */
-
-/*
- * SCF driver control mode
- */
-extern uint_t	scf_halt_proc_mode;	/* SCFHALT after processing mode */
-extern uint_t	scf_last_detach_mode;	/* Last detach mode */
-
-/*
- * SRAM trace data size
- */
-extern uint_t	scf_sram_trace_data_size;	/* Get SRAM trace data size */
-extern uint_t	scf_trace_rxdata_size;	/* Rx data trace size */
-
-/*
- * Wait timer value (Micro-second)
- */
-extern uint_t	scf_rdctrl_sense_wait;
-				/* SCFIOCRDCTRL wait timer value (60s) */
-
-/*
- * Wait timer value
- */
-extern uint_t	scf_buf_ful_rtime;
-				/* Buff full wait retry timer value (500ms) */
-extern uint_t	scf_rci_busy_rtime;
-				/* RCI busy wait retry timer value (3s) */
-
-/*
- * Re-try counter
- */
-extern uint_t	scf_buf_ful_rcnt;	/* Buff full retry counter */
-extern uint_t	scf_rci_busy_rcnt;	/* RCI busy retry counter */
-extern uint_t	scf_tesum_rcnt;		/* Tx sum retry counter */
-extern uint_t	scf_resum_rcnt;		/* Rx sum retry counter */
-extern uint_t	scf_cmd_to_rcnt;	/* Command to retry counter */
-extern uint_t	scf_devbusy_wait_rcnt;	/* Command device busy retry counter */
-extern uint_t	scf_online_wait_rcnt;	/* SCF online retry counter */
-extern uint_t	scf_path_change_max;	/* SCF path change retry counter */
-
-/*
- * Max value
- */
-extern uint_t	scf_report_sense_pool_max; /* Report sense max */
-extern uint_t	scf_getevent_pool_max;	/* SCFIOCGETEVENT max */
-extern uint_t	scf_rci_max;		/* RCI device max */
-extern uint_t	scf_rxbuff_max_size;	/* SCF command data division max size */
-
-/*
- * Poff factor (reported on shutdown start)
- */
-unsigned char	scf_poff_factor[2][3];
-#define	SCF_POFF_FACTOR_NORMAL	0
-#define	SCF_POFF_FACTOR_PFAIL	1
-
-/*
- * Alive check parameter
- */
-extern uchar_t	scf_alive_watch_code;	/* Watch code for SCF driver */
-extern uchar_t	scf_alive_phase_code;	/* Watch phase code */
-extern uchar_t	scf_alive_interval_time;	/* interval time */
-extern uchar_t	scf_alive_monitor_time;		/* monitor timeout */
-extern ushort_t	scf_alive_panic_time;		/* panic timeout */
-
-extern uchar_t	scf_acr_phase_code;	/* Alive check register phase code */
-
-/*
- * FMEMA interface
- */
-extern caddr_t	scf_avail_cmd_reg_vaddr; /* SCF Command register address */
-
-/*
- * Send break interface
- */
-extern int	scf_dm_secure_mode;	/* secure mode */
-
-/*
- * SCF driver version interface
- */
-extern ushort_t	scf_scfd_comif_version;	/* SCF driver version */
-
-/*
- * XSCF version interface
- */
-extern ushort_t	scf_xscf_comif_version;	/* XSCF version */
-
-/*
- * ioctl control value and flag
- */
-extern int	scf_save_hac_flag;	/* Host address disp flag */
-extern scfhac_t scf_save_hac;		/* Host address disp save */
-
-/*
- * Register read sync value
- */
-extern uint8_t	scf_rs8;
-extern uint16_t	scf_rs16;
-extern uint32_t	scf_rs32;
-
-/*
- * Panic value
- */
-extern uint_t	scf_panic_reported;	/* Panic report after */
-extern uint_t	scf_panic_report_maxretry; /* Same as busy_maxretry */
-extern uint_t	scf_cmdend_wait_time_panic;
-				/* SCF command end wait timer value (1s) */
-extern uint_t	scf_cmdend_wait_rcnt_panic; /* SCF command end retry counter */
-
-extern uint_t	scf_panic_exec_wait_time; /* Panic wait timer value (100ms) */
-extern uint_t	scf_panic_exec_flag;	/* Panic exec flag */
-extern uint_t	scf_panic_exec_flag2;	/* Panic exec flag (report send) */
-
-/*
- * Panic trace
- */
-extern ushort_t	scf_panic_trc_w_off;	/* Panic trcae next write offset */
-extern uint16_t scf_panic_trc_command;	/* Panic SCF command register memo */
-extern uint16_t	scf_panic_trc_status;	/* Panic SCF status register memo */
-extern ushort_t	scf_panic_trc[16];	/* Panic trace area */
-#define	SCF_PANIC_TRACE(x)						\
-	(scf_panic_trc[scf_panic_trc_w_off++ & 0x000f] = (ushort_t)x)
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFPARAM_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfreg.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,580 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFREG_H
-#define	_SCFREG_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-/*
- * register map count
- */
-#define	SCF_REGMAP_COUNT	5		/* register map cnt */
-
-/*
- * register and SRAM max size
- */
-#define	SRAM_MAX_DSCP		0x00010000	/* SCF system SRAM max size */
-#define	SRAM_MAX_SYSTEM		0x00010000	/* SCF DSCP SRAM max size */
-#define	SRAM_MAX_INTERFACE	0x00060000	/* SCF interface max size */
-#define	SRAM_MAX_DRVDRVE	0x00001000	/* SCF SRAM driver trac */
-
-/*
- * SCF registers
- */
-typedef struct scf_regs {
-	uint16_t	COMMAND;	/* SCF command register */
-	uint8_t		rsv002[2];	/* reserved */
-	uint16_t	STATUS;		/* SCF status register */
-	uint8_t		rsv006[2];	/* reserved */
-	uint8_t		VERSION;	/* SCF version register */
-	uint8_t		rsv009[3];	/* reserved */
-	uint8_t		rsv00c[4];	/* reserved */
-
-	uint32_t	TDATA0;		/* SCF Tx DATA0 register */
-	uint32_t	TDATA1;		/* SCF Tx DATA1 register */
-	uint32_t	TDATA2;		/* SCF Tx DATA2 register */
-	uint32_t	TDATA3;		/* SCF Tx DATA3 register */
-
-	uint32_t	RDATA0;		/* SCF Rx DATA0 register */
-	uint32_t	RDATA1;		/* SCF Rx DATA1 register */
-	uint32_t	RDATA2;		/* SCF Rx DATA2 register */
-	uint32_t	RDATA3;		/* SCF Rx DATA3 register */
-
-	uint8_t		rsv030[16];	/* reserved */
-	uint8_t		rsv040[2];	/* reserved */
-	uint8_t		COMMAND_ExR;	/* SCF command extended register */
-	uint8_t		rsv043;		/* reserved */
-	uint8_t		FIRMREQ1;	/* Firmware request register1 */
-	uint8_t		FIRMREQ0;	/* Firmware request register0 */
-	uint8_t		rsv046[2];	/* reserved */
-	uint8_t		ACR;		/* Alive check register */
-	uint8_t		ATR;		/* Alive timer register */
-	uint8_t		rsv04a[6];	/* reserved */
-
-	uint8_t		rsv050[4];	/* reserved */
-	uint32_t	STATUS_ExR;	/* SCFI status extended register */
-	uint8_t		rsv058[8];	/* reserved */
-	uint8_t		rsv060[160];	/* reserved */
-
-	uint8_t		DCR;		/* DSCP buffer control register */
-	uint8_t		DSR;		/* DSCP buffer status register */
-	uint8_t		rsv102[14];	/* reserved */
-
-	uint16_t	TxDCR_C_FLAG;	/* DSCP Tx DSC control register */
-	uint16_t	TxDCR_OFFSET;	/* DSCP Tx DSC control register */
-	uint32_t	TxDCR_LENGTH;	/* DSCP Tx DSC control register */
-	uint16_t	TxDSR_C_FLAG;	/* DSCP Tx DSC status register */
-	uint16_t	TxDSR_OFFSET;	/* DSCP Tx DSC status register */
-	uint8_t		rsv11c[4];	/* reserved */
-
-	uint16_t	RxDCR_C_FLAG;	/* DSCP Rx DSC control register */
-	uint16_t	RxDCR_OFFSET;	/* DSCP Rx DSC control register */
-	uint32_t	RxDCR_LENGTH;	/* DSCP Rx DSC control register */
-	uint16_t	RxDSR_C_FLAG;	/* DSCP Rx DSC status register */
-	uint16_t	RxDSR_OFFSET;	/* DSCP Rx DSC status register */
-	uint8_t		rsv12c[4];	/* reserved */
-} scf_regs_t;
-
-/*
- * SCF control registers
- */
-typedef struct scf_regs_c {
-	uint16_t	CONTROL;	/* SCF Control register */
-	uint8_t		rsv02[2];	/* reserved */
-	uint16_t	INT_ST;		/* SCF Interrupt Status register */
-	uint8_t		rsv06[2];	/* reserved */
-} scf_regs_c_t;
-
-/*
- * System buffer (SRAM)
- */
-typedef struct scf_sys_sram {
-	uint8_t		DATA[SRAM_MAX_SYSTEM];	/* System Tx/Rx buffer */
-} scf_sys_sram_t;
-
-/*
- * DSCP buffer (SRAM)
- */
-typedef struct scf_dscp_sram {
-	uint8_t		DATA[SRAM_MAX_DSCP];	/* DSCP Tx/Rx buffer */
-} scf_dscp_sram_t;
-
-/*
- * Interface buffer hedder (SRAM)
- */
-typedef struct scf_interface {
-	uint32_t	other1[0x40 / 4];	/* other area */
-	uint32_t	DRVTRC_OFFSET;		/* SCF driver trace offset */
-	uint32_t	DRVTRC_SIZE;		/* SCF driver trace size */
-	uint32_t	other2[0xa8 / 4];	/* other area  */
-} scf_interface_t;
-
-/*
- * SCF driver trace table
- */
-#define	DRV_ID_SIZE	16
-
-typedef	struct scf_if_drvtrc {
-	uint8_t		DRV_ID[DRV_ID_SIZE];	/* driver ID */
-	uint32_t	DATA_TOP;		/* trace data top offset */
-	uint32_t	DATA_LAST;		/* trace data last offset */
-	uint32_t	DATA_WRITE;		/* trace data write offset */
-	uint8_t		rsv01c[4];		/* reserved */
-} scf_if_drvtrc_t;
-
-/*
- * SRAM driver trace entry
- */
-typedef	struct scf_drvtrc_ent {
-	uint8_t		LOG_ID;			/* log ID */
-	uint8_t		LOG_TIME[3];		/* log time */
-	uint8_t		INFO[12];		/* log info */
-} scf_drvtrc_ent_t;
-
-/*
- * SRAM trace log ID
- */
-#define	DTC_CMD			0x01	/* SCF command start */
-#define	DTC_INT			0x02	/* SCF interrupt */
-#define	DTC_SENDDATA		0x03	/* SCF send command data */
-#define	DTC_RECVDATA		0x04	/* SCF recv command data */
-#define	DTC_SENDDATA_SRAM	0x05	/* SCF send command data for SRAM */
-#define	DTC_RECVDATA_SRAM	0x06	/* SCF recv command data for SRAM */
-#define	DTC_CMDTO		0x11	/* SCF command timeout */
-#define	DTC_CMDBUSYTO		0x12	/* SCF command busy timeout */
-#define	DTC_ONLINETO		0x13	/* SCF online timeout */
-#define	DTC_ERRRTN		0x20	/* SCF command retuen error */
-#define	DTC_RCI_BUF_FUL		0x21	/* SCF command return for buff full */
-#define	DTC_RCI_BUSY		0x22	/* SCF command return for rci busy */
-#define	DTC_INTERFACE		0x23	/* SCF command return for */
-					/* interface error */
-#define	DTC_E_NOT_SUPPORT	0x28	/* SCF command return for */
-					/* not support */
-#define	DTC_E_PARAM		0x29	/* SCF command return for */
-					/* parameter error */
-#define	DTC_E_SCFC_PATH		0x2a	/* SCF command return for */
-					/* SCFI path error */
-#define	DTC_E_RCI_ACCESS	0x2b	/* SCF command return for */
-					/* RCI access error */
-#define	DTC_E_SEQUENCE		0x2d	/* SCF command return for */
-					/* sequence error */
-#define	DTC_RSUMERR		0x31	/* SCF command receive sum error */
-#define	DTC_ONLINE		0x32	/* SCF offline start */
-#define	DTC_OFFLINE		0x33	/* SCF offline start */
-#define	DTC_DSCP_TXREQ		0x41	/* DSCP TxREQ request */
-#define	DTC_DSCP_RXACK		0x42	/* DSCP RxACK request */
-#define	DTC_DSCP_RXEND		0x43	/* DSCP RxEND request */
-#define	DTC_DSCP_RXREQ		0x44	/* DSCP RxREQ interrupt */
-#define	DTC_DSCP_TXACK		0x45	/* DSCP TxACK interrupt */
-#define	DTC_DSCP_TXEND		0x46	/* DSCP TxEND interrupt */
-#define	DTC_DSCP_SENDDATA	0x47	/* DSCP send data */
-#define	DTC_DSCP_RECVDATA	0x48	/* DSCP recv data */
-#define	DTC_DSCP_ACKTO		0x51	/* DSCP ACK timeout */
-#define	DTC_DSCP_ENDTO		0x52	/* DSCP END timeout */
-
-#define	DTC_MASK_HIGH		0xf0	/* mask high */
-
-/* SRAM trace define */
-#define	SCF_SRAM_TRACE(a, b)	scf_sram_trace(a, b)
-
-#define	SCF_SET_SRAM_DATA1_2(a, b, c)					\
-	statep->memo_scf_drvtrc.INFO[a] = (uint8_t)(b);			\
-	statep->memo_scf_drvtrc.INFO[a + 1] = (uint8_t)(c)
-
-#define	SCF_SET_SRAM_DATA2_1(a, b)					\
-	statep->memo_scf_drvtrc.INFO[a] = (uint8_t)(b >> 8);		\
-	statep->memo_scf_drvtrc.INFO[a + 1] = (uint8_t)(b)
-
-#define	SCF_SET_SRAM_DATA2_2(a, b, c)					\
-	statep->memo_scf_drvtrc.INFO[a] = (uint8_t)(b >> 8);		\
-	statep->memo_scf_drvtrc.INFO[a + 1] = (uint8_t)(b);		\
-	statep->memo_scf_drvtrc.INFO[a + 2] = (uint8_t)(c >> 8);	\
-	statep->memo_scf_drvtrc.INFO[a + 3] = (uint8_t)(c)
-
-#define	SCF_SET_SRAM_DATA4_1(a, b)					\
-	statep->memo_scf_drvtrc.INFO[a] = (uint8_t)(b >> 24);		\
-	statep->memo_scf_drvtrc.INFO[a + 1] = (uint8_t)(b >> 16);	\
-	statep->memo_scf_drvtrc.INFO[a + 2] = (uint8_t)(b >> 8);	\
-	statep->memo_scf_drvtrc.INFO[a + 3] = (uint8_t)(b)
-
-#define	SCF_SET_SRAM_DATA4_3(a, b, c, d)				\
-	statep->memo_scf_drvtrc.INFO[a] = (uint8_t)(b >> 24);		\
-	statep->memo_scf_drvtrc.INFO[a + 1] = (uint8_t)(b >> 16);	\
-	statep->memo_scf_drvtrc.INFO[a + 2] = (uint8_t)(b >> 8);	\
-	statep->memo_scf_drvtrc.INFO[a + 3] = (uint8_t)(b);		\
-	statep->memo_scf_drvtrc.INFO[a + 4] = (uint8_t)(c >> 24);	\
-	statep->memo_scf_drvtrc.INFO[a + 5] = (uint8_t)(c >> 16);	\
-	statep->memo_scf_drvtrc.INFO[a + 6] = (uint8_t)(c >> 8);	\
-	statep->memo_scf_drvtrc.INFO[a + 7] = (uint8_t)(c);		\
-	statep->memo_scf_drvtrc.INFO[a + 8] = (uint8_t)(d >> 24);	\
-	statep->memo_scf_drvtrc.INFO[a + 9] = (uint8_t)(d >> 16);	\
-	statep->memo_scf_drvtrc.INFO[a + 10] = (uint8_t)(d >> 8);	\
-	statep->memo_scf_drvtrc.INFO[a + 11] = (uint8_t)(d)
-
-/*
- * SCF registers define
- */
-
-/* COMMAND : SCF command register define */
-#define	COMMAND_BUSY		0x8000		/* Command interface busy */
-#define	COMMAND_SUBCODE		0x7f00		/* Command subcode */
-#define	COMMAND_CODE		0x00ff		/* Command code */
-
-#define	CMD_SCFI_PATH		0x10		/* SCF path change */
-#define		SUB_CMD_PATH		0x00	/* Command path change */
-
-#define		CMD_PATH_TYPE_SCFD	0x01	/* Command path type(scfd) */
-
-#define	CMD_ALIVE_CHECK		0x20		/* Alive check */
-#define		SUB_ALIVE_START		0x30	/* Start */
-#define		SUB_ALIVE_STOP		0x50	/* Stop */
-
-#define	CMD_REPORT		0x21		/* Report */
-#define		SUB_SYSTEM_STATUS_RPT	0x40	/* System status */
-#define		SUB_SYSTEM_STATUS_RPT_NOPATH	0x51
-					/* System status (no path check) */
-
-#define	CMD_PHASE			0x22	/* Domain phase print */
-#define		SUB_PHASE_PRINT		0x10	/* Phase print */
-
-#define	CMD_PART_POW_CTR	0x30		/* power control */
-#define		SUB_PON			0x01	/* Power on */
-#define		SUB_POFF		0x02	/* Power off */
-#define		SUB_FPOFF		0x13	/* Forced power off */
-#define		SUB_RESET		0x04	/* Power reset */
-#define		SUB_POFFID		0x19	/* Power off factor */
-
-#define	CMD_SYS_AUTOPOW		0x35	/* System automatic power control */
-#define		SUB_SYS_AUTO_ONOFF_SET	0x01	/* on/off time set */
-#define		SUB_SYS_AUTO_ONOFF_DISP 0x02	/* on/off time disp */
-#define		SUB_SYS_AUTO_ONOFF_CLRAR 0x04	/* on/off time clear */
-#define		SUB_FORCED_POFF_SET	0x08	/* Forced power off time set */
-#define		SUB_PRESET_MODE_DISP	0x10	/* Power resume mode disp */
-#define		SUB_PRESET_MODE_SET	0x20	/* Power resume mode set */
-
-#define	CMD_RCI_CTL		0x40		/* RCI control */
-#define		SUB_HOSTADDR_DISP2	0xff	/* Host address disp 2 */
-#define		SUB_DEVICE_LIST		0x0a	/* Device list disp */
-#define		SUB_PANIC		0x03	/* Panic request */
-
-#define	CMD_INT_REASON		0x50		/* Event information */
-#define		SUB_INT_REASON_DISP	0x10	/* Factor detail disp */
-#define		SUB_INT_REASON_RETRY	0x01	/* Factor detail re-disp */
-
-#define	CMD_FILE_DOWNLOAD	0x74		/* File dounload or upload */
-
-#define	CMD_DOMAIN_INFO		0x81		/* Domain information */
-#define		SUB_OPTION_DISP		0x04	/* Option disp */
-#define		SUB_PCI_HP_CONFIG	0x52	/* PCI configuration set */
-#define		SUB_PCI_DISP		0x54	/* PCI configuration disp */
-#define		SUB_DISK_LED_DISP	0x70	/* DISK LED disp */
-#define		SUB_DISK_LED_ON		0x73	/* DISK LED on */
-#define		SUB_DISK_LED_BLINK	0x75	/* DISK LED blink */
-#define		SUB_DISK_LED_OFF	0x76	/* DISK LED off */
-
-#define	CMD_DR			0xa2		/* DR function */
-
-#define	CMD_ERRLOG		0xb0		/* Error log control */
-#define		SUB_ERRLOG_SET_MADMIN	0x26	/* Log set madmin */
-
-#define	CMD_REMCS_SPT		0xc3		/* REMCS command */
-
-#define	CMD_SPARE		0xc4		/* SPARE command */
-
-#define	CMD_OS_XSCF_CTL		0xc5		/* OS to ESCF */
-
-/* STATUS : SCF status register define */
-#define	STATUS_SCF_READY	0x8000	/* bit15: SCF READY */
-#define	STATUS_SHUTDOWN		0x4000	/* bit14: SHUTDOWN */
-#define	STATUS_POFF		0x2000	/* bit13: POFF */
-#define	STATUS_EVENT		0x1000	/* bit12: EVENT */
-#define	STATUS_TIMER_ADJUST	0x0800	/* bit11: TIMER ADJUST */
-#define	STATUS_ALIVE		0x0400	/* bit10: ALIVE (Not use) */
-#define	STATUS_MODE_CHANGED	0x0200	/* bit 9: MODE CHANGED */
-#define	STATUS_U_PARITY		0x0100	/* bit 8: U Parity (Not use */
-#define	STATUS_CMD_RTN_CODE	0x00f0	/* bit 7-4: CMD return code */
-#define	STATUS_SECURE_MODE	0x0008	/* bit 3: secure mode status */
-#define	STATUS_BOOT_MODE	0x0004	/* bit 2: boot mode status */
-#define	STATUS_CMD_COMPLETE	0x0002	/* bit 1: Command complete */
-#define	STATUS_L_PARITY		0x0001	/* bit 0: L Parity (Not use) */
-
-/* secure mode status */
-#define	STATUS_MODE_UNLOCK	0x0000		/* UNLOCK */
-#define	STATUS_MODE_LOCK	0x0008		/* LOCK */
-
-/* boot mode status */
-#define	STATUS_MODE_OBP_STOP	0x0000		/* OBP stop */
-#define	STATUS_MODE_AUTO_BOOT	0x0004		/* Auto boot */
-
-/* STATUS_CMD_RTN_CODE : Command return value */
-#define	NORMAL_END	0x00			/* Normal end */
-#define	BUF_FUL		0x01			/* Buff full */
-#define	RCI_BUSY	0x02			/* RCI busy */
-#define	INTERFACE	0x03			/* Parity/Sum error */
-
-#define	E_NOT_SUPPORT	0x08			/* Not support */
-#define	E_PARAM		0x09			/* Parameter error */
-#define	E_SCFC_NOPATH	0x0a			/* No SCFC path */
-#define	E_RCI_ACCESS	0x0b			/* RCI access error */
-#define	E_HARD		0x0c			/* Hard error */
-#define	RCI_NS		0x0f			/* Not support RCI */
-
-/* COMMAND_ExR : SCF command extended register define */
-#define	COMMAND_ExR_BUSY	0x80		/* Command busy */
-#define	COMMAND_ExR_RETRY	0x40		/* Command retry */
-
-/* STATUS_ExR : SCF status extended register define */
-#define	STATUS_POWER_FAILURE	0x80000000	/* Power failure */
-#define	STATUS_SCF_STATUS_CHANGE 0x40000000	/* SCF status change */
-#define	STATUS_SCF_STATUS	0x20000000	/* SCF status */
-#define	STATUS_SCF_NO		0x10000000	/* Offline SCF No. */
-#define	STATUS_STATUS_DETAIL	0x0000ffff	/* Return code detail code */
-
-#define	STATUS_SCF_ONLINE	0x20000000	/* SCF status online */
-#define	STATUS_SCF_OFFLINE	0x00000000	/* SCF status offline */
-
-/* ACR : Alive check register define */
-#define	ACR_ALIVE_INT		0x80		/* Alive Interrupt for SCF */
-#define	ACR_PHASE_CODE		0x7f		/* Phase code */
-
-/* ATR : Alive timer register define */
-#define	ATR_INTERVAL		0x07		/* Interrupt interval */
-#define	ATR_INTERVAL_STOP	0x00		/* Interrupt interval stop */
-#define	ATR_INTERVAL_30S	0x01		/* Interrupt interval 30 s */
-#define	ATR_INTERVAL_60S	0x02		/* Interrupt interval 1 min */
-#define	ATR_INTERVAL_120S	0x04		/* Interrupt interval 2 min */
-
-/* DCR : DSCP Buffer Control Register */
-	/* Domain to SCF data transfer request isuued */
-#define	DCR_TxREQ		(uint8_t)0x80
-	/* SCF to domain data transfer request accepted */
-#define	DCR_RxACK		0x40
-	/* SCF to domain data transfer request end */
-#define	DCR_RxEND		0x20
-
-/* DSR : DSCP Buffer Status Register */
-	/* SCF to domain data transfer request issued */
-#define	DSR_RxREQ		(uint8_t)0x80
-	/* domain to SCF data transfer request accepted */
-#define	DSR_TxACK		0x40
-	/* domain to SCF data transfer request end */
-#define	DSR_TxEND		0x20
-
-/* Tx/Rx SUM magicnumber */
-#define	SCF_MAGICNUMBER_S	0xaa		/* Small Buffer SUM */
-#define	SCF_MAGICNUMBER_L	(uint32_t)0xaaaaaaaa	/* Large Buffer SUM */
-
-/* Length border conversion */
-#define	SCF_LENGTH_16BYTE_CNV	0xfffffff0	/* 16byte border conversion */
-
-
-/*
- * SCF registers define
- */
-
-/* CONTROL/INT_ST : SCF Control/SCF Interrupt Status register define */
-
-	/* SCF Path Change Interrupt enable */
-#define	CONTROL_PATHCHGIE	0x8000
-	/* SCF Interrupt enable */
-#define	CONTROL_SCFIE		0x4000
-	/* DSCP Communication Buffer Interrupt enable */
-#define	CONTROL_IDBCIE		0x2000
-	/* Alive Interrupt enable */
-#define	CONTROL_ALIVEINE	0x1000
-	/* interrupt enable */
-#define	CONTROL_ENABLE							\
-	(CONTROL_PATHCHGIE | CONTROL_SCFIE | CONTROL_IDBCIE)
-	/* interrupt disable */
-#define	CONTROL_DISABLE		0x0000
-
-	/* SCF Path Change Interrupt  */
-#define	INT_ST_PATHCHGIE	0x8000
-	/* SCF interrupt */
-#define	INT_ST_SCFINT		0x4000
-	/* DSCP Communication Buffer Interrupt */
-#define	INT_ST_IDBCINT		0x2000
-		/* Alive Interrupt */
-#define	INT_ST_ALIVEINT		0x1000
-
-	/* All Interrupt */
-#define	INT_ST_ALL							\
-	(INT_ST_PATHCHGIE | INT_ST_SCFINT | INT_ST_IDBCINT | INT_ST_ALIVEINT)
-
-/* Machine address */
-#define	SCF_CMD_SYSTEM_ADDR	0x00000000	/* Owner address */
-
-/* status */
-#define	REPORT_STAT_PANIC		0x01	/* panic */
-#define	REPORT_STAT_SHUTDOWN_START	0x02	/* shutdown start */
-#define	REPORT_STAT_SYSTEM_RUNNING	0x0a	/* system running */
-#define	REPORT_STAT_RCIDWN	(uint8_t)0xf0	/* rci down */
-
-/* POFF ID */
-#define	POFF_ID_PANEL		0x00		/* panel */
-#define	POFF_ID_RCI		0x20		/* RCI */
-#define	POFF_ID_XSCF		0x03		/* XSCF */
-#define	POFF_ID_MASK		0xf0
-
-/* category type */
-#define	DEV_SENSE_ATTR_OWN	0x00		/* Owner host */
-#define	DEV_SENSE_ATTR_OTHER	0x01		/* Other host */
-#define	DEV_SENSE_ATTR_IO	0x80		/* I/O unit */
-
-/* Remote Device Control */
-#define	RCI_DEVCLASS_MASK	0xfff		/* mask for device class */
-#define	RCI_DEVCLASS_CPU_START	0x001		/* CPU start */
-#define	RCI_DEVCLASS_CPU_END	0x0ff		/* CPU end */
-#define	RCI_DEVCLASS_DISK_START	0x400		/* disk start */
-#define	RCI_DEVCLASS_DISK_END	0x4ff		/* disk end */
-
-#define	RMT_DEV_CLASS_START_SHIFT	16
-
-/* sense */
-#define	DEV_SENSE_SHUTDOWN	0x80		/* need shutdown bit */
-
-#define	DEV_SENSE_FANUNIT	0x01		/* fan unit error */
-
-#define	DEV_SENSE_PWRUNIT	0x02		/* power unit error */
-
-#define	DEV_SENSE_UPS		0x05		/* UPS error */
-#define	DEV_SENSE_UPS_MASK		0x0f
-#define	DEV_SENSE_UPS_LOWBAT		0x8	/* Low Battery */
-
-#define	DEV_SENSE_THERMAL	0x06		/* thermal error */
-
-#define	DEV_SENSE_PWRSR		0x07		/* power stop/resume */
-#define	DEV_SENSE_PWRSR_MASK		0x0f
-#define	DEV_SENSE_PWRSR_STOP		0x8	/* power stop */
-
-#define	DEV_SENSE_NODE		0x08		/* node error */
-#define	DEV_SENSE_NODE_STCKTO		0x90	/* status check timeout */
-
-#define	DEV_SENSE_RCI_PATH40	0x40		/* Devive status print */
-#define	DEV_SENSE_SYS_REPORT	0x60		/* system status report */
-#define	DEV_SENSE_PANIC_REQ	0x61		/* panic request */
-#define	DEV_SENSE_IONODESTAT	0x62		/* I/O node status */
-#define	DEV_SENSE_STATUS_RPT	0x71		/* Deveice status print */
-
-
-/*
- * SCF command send control
- */
-typedef struct scf_cmd {
-	uint_t 		flag;			/* buff type flag */
-	uchar_t		cmd;			/* SCF command code */
-	uchar_t		subcmd;			/* SCF sub command code */
-	ushort_t	stat0;			/* Interrupt status */
-	uint_t		scount;			/* Tx data count */
-	uint_t		rcount;			/* Rx data count */
-	uchar_t		*sbuf;			/* Tx buff address */
-	uchar_t		*rbuf;			/* Rx buff address */
-	uint_t		rbufleng;		/* recv data leng */
-	ushort_t	status;			/* SCF status reg */
-	uchar_t		cexr[4];		/* Command extension info */
-} scf_cmd_t;
-
-/* SCF interrupt error status make */
-#define	SCF_STAT0_RDATA_SUM	0xf0		/* Rx data sum error */
-#define	SCF_STAT0_NOT_PATH	0xff		/* Non change path */
-
-/* SCF comannd buff type */
-#define	SCF_USE_S_BUF		0		/* Tx : -/S Rx : - */
-#define	SCF_USE_SSBUF		1		/* Tx : -/S Rx : S */
-#define	SCF_USE_SLBUF		2		/* Tx : -/S Rx : L */
-#define	SCF_USE_L_BUF		3		/* Tx : L Rx : - */
-#define	SCF_USE_LSBUF		4		/* Tx : L Tx : S */
-
-#define	SCF_USE_STOP		0x7e
-#define	SCF_USE_START		0x7f
-#define	SCF_USE_SP		(uint8_t)0x80
-
-/* SCF command size */
-#define	SCF_S_CNT_32		32		/* TxRx Small buff size */
-#define	SCF_S_CNT_16		16		/* TxRx Small buff size */
-#define	SCF_S_CNT_15		15		/* Small buff cnt 15byte */
-#define	SCF_S_CNT_12		12		/* Small buff cnt 12byte */
-#define	SCF_S_CNT_8		8		/* Small buff cnt 8byte */
-
-#define	SCF_L_CNT_MAX		SRAM_MAX_SYSTEM
-					/* Command buffer max size (64Kyte) */
-
-#define	SCF_SBUFR_SIZE		64	/* RDCTL data size */
-#define	SCF_SHORT_BUFFER_SIZE	(16 * 5) /* Short bauuer size (16byte * 5) */
-#define	SCF_SHORT_BUFFER_SIZE_4BYTE	(SCF_SHORT_BUFFER_SIZE / 4)
-#define	SCF_INT_REASON_SIZE	32	/* INT_REASON size */
-#define	SCF_INT_CNT_MAX		(SCF_INT_REASON_SIZE * 4)
-					/* INT_REASON max size (128yte) */
-#define	SCF_DEVLIST_MAXCNT	2	/* Device list max count */
-#define	SCF_DEVLIST_ENTSIZE	8	/* Device list entry size */
-
-
-/* CMD_RCI_CTL SUB_RCI_PATH_4* value */
-#define	SCF_RCI_PATH_PARITY	0x10		/* SUB_RCI_PATH_4* parity */
-
-/* Alive check function value */
-#define	SCF_ALIVE_FUNC_ON	"on"		/* parameter alive start */
-#define	SCF_ALIVE_FUNC_OFF	"off"		/* parameter alive stop */
-
-#define	SCF_ALIVE_START		1		/* Alive check start */
-#define	SCF_ALIVE_STOP		0		/* Alive check stop */
-
-/* Alive check timer value (10s) */
-#define	INTERVAL_TIME_MIN	0x06		/* interval time min (1min) */
-#define	INTERVAL_TIME_MAX	0x3c		/* cycle_time max (10min) */
-#define	INTERVAL_TIME_DEF	0x0c		/* cycle_time default (2min) */
-#define	MONITOR_TIME_MIN	0x12		/* watch_time min (3min) */
-#define	MONITOR_TIME_MAX	0xb4		/* monitor time max (30min) */
-#define	MONITOR_TIME_DEF	0x24		/* monitor default (6min) */
-#define	PANIC_TIME_MIN		0x00b4		/* panic time min (30min) */
-#define	PANIC_TIME_MAX		0x0870		/* panic time max (360min) */
-#define	PANIC_TIME_DEF		0x00b4		/* panic time default (30min) */
-#define	PANIC_TIME_NONE		0x0000		/* no panic time monitor */
-
-#define	MONITOR_TIME_CORRECT	0x03	/* monitor time correct (30sec) */
-
-#define	SCF_MIN_TO_10SEC(a)	a = a * 6;	/* minutes to 10 seconds */
-
-/* Short buffer structure */
-typedef union scf_short_buffer {
-	uchar_t		b[SCF_SHORT_BUFFER_SIZE];
-	uint_t		four_bytes_access[SCF_SHORT_BUFFER_SIZE_4BYTE];
-} scf_short_buffer_t;
-
-/* Event information structure */
-typedef union scf_int_reason {
-	uchar_t		b[SCF_INT_CNT_MAX];
-	uint_t		four_bytes_access[SCF_INT_CNT_MAX / 4];
-} scf_int_reason_t;
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFREG_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfsnap.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SCFSNAP_H
-#define	_SCFSNAP_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-/*
- * ioctl
- */
-#define	SCFIOCSNAP		's'<<8
-
-/*
- * ioctl
- */
-#define	SCFIOCSNAPSHOTSIZE	(SCFIOCSNAP|1|0x80040000)
-#define	SCFIOCSNAPSHOT		(SCFIOCSNAP|2|0x80040000)
-
-/* SCFIOCSNAPSHOTSIZE */
-typedef struct scfsnapsize {
-	int		type;
-	int		info;
-	int		size;
-} scfsnapsize_t;
-
-/* SCFIOCSNAPSHOT */
-typedef struct scfsnap_value {
-	char		ss_name[32];
-	int		ss_flag;
-	int		ss_rsv1;
-	int		ss_size;
-	int		ss_nextoff;
-} scfsnap_value_t;
-/* for ss_name field */
-#define	SNAP_SCF_DRIVER_VL	"scf_driver_vl"
-#define	SNAP_SCF_COMTBL		"scf_comtbl"
-#define	SNAP_SCF_STATE		"scf_state"
-#define	SNAP_SCF_TIMER_TBL	"scf_timer"
-#define	SNAP_SCF_DSCP_COMTBL	"scf_dscp_comtbl"
-#define	SNAP_SCF_DSCP_TXDSC	"scf_dscp_txdsc"
-#define	SNAP_SCF_DSCP_RXDSC	"scf_dscp_rxdsc"
-#define	SNAP_SCF_DSCP_TXSRAM	"scf_dscp_txsram"
-#define	SNAP_SCF_DSCP_EVENT	"scf_dscp_event"
-#define	SNAP_SCF_DSCP_RDATA	"scf_dscp_rdata"
-#define	SNAP_REGISTER		"REGISTER"
-#define	SNAP_SRAM		"SRAM"
-
-/* for ss_flag field */
-#define	SCF_DRIVER_64BIT	64
-#define	SCF_DRIVER_32BIT	32
-
-typedef struct scfsnap {
-	int		type;
-	int		info;
-	scfsnap_value_t	*ss_entries;
-} scfsnap_t;
-/* for 32bit */
-typedef struct scfsnap32 {
-	int		type;
-	int		info;
-	caddr32_t	ss_entries;
-} scfsnap32_t;
-/* for type field */
-#define	SCFSNAPTYPE_ALL		1
-#define	SCFSNAPTYPE_DRIVER	2
-#define	SCFSNAPTYPE_REGISTER	3
-#define	SCFSNAPTYPE_SRAM	4
-
-/* for info field */
-#define	SCFSNAPINFO_AUTO	(-1)
-
-/*
- * External function
- */
-extern int	scf_snapshotsize(intptr_t arg, int mode);
-extern int	scf_get_snapize(int type, int info);
-extern int	scf_snapshot(intptr_t arg, int mode);
-extern int	scf_get_snap(int type, int info, scfsnap_value_t *snap_p,
-			int snap_size);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFSNAP_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfstate.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SCFSTATE_H
-#define	_SCFSTATE_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/scfreg.h>
-
-/*
- * SCF driver's software state structure
- */
-typedef struct scf_state {
-	/* SCF device infomation pointer */
-	dev_info_t	*dip;			/* device infomation */
-
-	/* SCF state table address */
-	struct scf_state	*next;		/* next state addr */
-
-	/* flag */
-	uint_t		resource_flag;		/* resource allocate flag */
-	uint_t		scf_herr;		/* Hard error flag */
-
-	/* Register hardware register */
-	scf_regs_t	*scf_regs;		/* SCF register */
-	scf_regs_c_t	*scf_regs_c;		/* SCF contorol register */
-	scf_dscp_sram_t	*scf_dscp_sram;		/* SCF DSCP SRAM */
-	scf_sys_sram_t	*scf_sys_sram;		/* SCF system SRAM */
-	scf_interface_t	*scf_interface;		/* SCF interface block */
-	scf_if_drvtrc_t	*scf_reg_drvtrc;	/* SRAM driver trace */
-
-	/* Register data access handle */
-	ddi_acc_handle_t scf_regs_handle;	/* SCF register */
-	ddi_acc_handle_t scf_regs_c_handle;	/* SCF contorol register */
-	ddi_acc_handle_t scf_dscp_sram_handle;	/* SCF DSCP SRAM */
-	ddi_acc_handle_t scf_sys_sram_handle;	/* SCF system SRAM */
-	ddi_acc_handle_t scf_interface_handle;	/* SCF interface block */
-	ddi_acc_handle_t scf_reg_drvtrc_handle;	/* SRAM driver trace block */
-
-	/* Register size */
-	off_t		scf_dscp_sram_len;	/* SCF system SRAM */
-	off_t		scf_sys_sram_len;	/* SCF DSCP SRAM */
-	off_t		scf_interface_len;	/* SCF interface block */
-	off_t		scf_reg_drvtrc_len;	/* SRAM driver trace */
-
-	/* error retry count */
-	uint_t		tesum_rcnt;		/* Send sum check error */
-	uint_t		resum_rcnt;		/* Recv sum check error */
-	uint_t		cmd_to_rcnt;		/* Command timeout error */
-	uint_t		devbusy_to_rcnt;	/* Command busy timeout error */
-	uint_t		online_to_rcnt;		/* SCF online timeout error */
-
-	/* error counter memo */
-	uint_t		memo_cmd_to_cnt;	/* CMD timeout counter */
-	uint_t		no_int_dsr_cnt;		/* DSR no interrupt counter */
-	uint_t		fail_count;		/* SCF path fail counter */
-
-	/* IOMP control area */
-	int		instance;		/* instance */
-	int		path_status;		/* IOMP path status */
-	int		old_path_status;	/* IOMP old path status */
-
-	/* Register memo */
-	uint16_t	reg_control;		/* SCF INT control */
-	uint16_t	reg_int_st;		/* SCF INT status */
-	uint16_t	reg_command;		/* SCF command */
-	uint16_t	reg_status;		/* SCF status */
-	uint32_t	reg_tdata[4];		/* SCF Tx data */
-	uint32_t	reg_rdata[4];		/* SCF Rx data0 */
-	uint8_t		reg_command_exr;	/* SCF command extended */
-	uint32_t	reg_status_exr;		/* SCF status extended */
-	uint8_t		reg_acr;		/* Alive check */
-	uint8_t		reg_atr;		/* Alive timer */
-	uint8_t		reg_dcr;		/* DSCP buffer control */
-	uint8_t		reg_dsr;		/* DSCP buffer status */
-	uint16_t	reg_txdcr_c_flag;	/* DSCP Tx descriptor control */
-	uint16_t	reg_txdcr_c_offset;	/* DSCP Tx descriptor control */
-	uint32_t	reg_txdcr_c_length;	/* DSCP Tx descriptor control */
-	uint16_t	reg_txdsr_c_flag;	/* DSCP Tx descriptor status */
-	uint16_t	reg_txdsr_c_offset;	/* DSCP Tx descriptor status */
-	uint16_t	reg_rxdcr_c_flag;	/* DSCP Rx descriptor control */
-	uint16_t	reg_rxdcr_c_offset;	/* DSCP Rx descriptor control */
-	uint32_t	reg_rxdcr_c_length;	/* DSCP Rx descriptor control */
-	uint16_t	reg_rxdsr_c_flag;	/* DSCP Rx descriptor status */
-	uint16_t	reg_rxdsr_c_offset;	/* DSCP Rx descriptor status */
-
-	/* SRAM driver trace memo */
-	uint32_t	memo_DATA_TOP;		/* trace data top offset */
-	uint32_t	memo_DATA_LAST;		/* trace data last offset */
-	uint32_t	memo_DATA_WRITE;	/* trace data write offset */
-	scf_drvtrc_ent_t	memo_scf_drvtrc; /* SRAM driver trace */
-
-	/* SCF device value */
-	char		pathname[256];		/* SCFC pathname */
-} scf_state_t;
-
-/*
- * (resource_flag) macro for resource allocate flag
- */
-#define	S_DID_REG1		(1 << 0)
-#define	S_DID_REG2		(1 << 1)
-#define	S_DID_REG3		(1 << 2)
-#define	S_DID_REG4		(1 << 3)
-#define	S_DID_REG5		(1 << 4)
-#define	S_DID_REG6		(1 << 5)
-
-#define	S_DID_INTR		(1 << 8)
-#define	S_DID_MNODE		(1 << 9)
-
-#define	S_DID_REGENB		((uint_t)1 << 31)
-
-/*
- * (scf_herr) hard error code
- */
-#define	HERR_TESUM		(1 << 0)
-#define	HERR_RESUM		(1 << 1)
-#define	HERR_CMD_RTO		(1 << 2)
-#define	HERR_BUSY_RTO		(1 << 3)
-
-#define	HERR_DSCP_INTERFACE	(1 << 8)
-#define	HERR_DSCP_ACKTO		(1 << 9)
-#define	HERR_DSCP_ENDTO		(1 << 10)
-
-#define	HERR_EXEC		((uint_t)1 << 31)
-
-/* ddi_dev_regsize(), ddi_regs_map_setup register index number define */
-#define	REG_INDEX_SCF		0	/* SCF register */
-#define	REG_INDEX_SCFCNTL	1	/* SCF contorol register */
-#define	REG_INDEX_DSCPSRAM	2	/* SCF DSCP SRAM */
-#define	REG_INDEX_SYSTEMSRAM	3	/* SCF system SRAM  */
-#define	REG_INDEX_INTERFACE	4	/* SCF interface block(driver trace) */
-
-/*
- * scf_path_check()/scf_offline_check() return code
- */
-#define	SCF_PATH_ONLINE		0	/* SCF path exec state */
-#define	SCF_PATH_OFFLINE	1	/* SCF path offline state */
-#define	SCF_PATH_OFFLINE_DRV	2	/* SCF path offline-drv state */
-#define	SCF_PATH_CHANGE		3	/* SCF path change state */
-#define	SCF_PATH_HALT		(-1)	/* SCF path halt state */
-
-/*
- * scf_cmdbusy_check() return code
- */
-#define	SCF_COMMAND_READY	0	/* SCF command ready state */
-#define	SCF_COMMAND_BUSY	1	/* SCF command busy state */
-#define	SCF_COMMAND_BUSY_DRV	2	/* SCF command busy-drv state */
-
-/*
- * scf_dscp_start()/scf_dscp_stop() arg "factor" value
- */
-#define	FACTOR_ONLINE		0	/* Factor SCF online */
-#define	FACTOR_OFFLINE		1	/* Factor SCF offline */
-#define	FACTOR_PATH_CHG		2	/* Factor SCF path change */
-#define	FACTOR_PATH_STOP	3	/* Factor IOMP all path stop */
-#define	FACTOR_PATH_HALT	4	/* Factor SCF path halt */
-
-/* path status (path_status) */
-#define	PATH_STAT_ACTIVE	1
-#define	PATH_STAT_STANDBY	2
-#define	PATH_STAT_STOP		3
-#define	PATH_STAT_FAIL		4
-#define	PATH_STAT_DISCON	5
-#define	PATH_STAT_ENCAP		6
-#define	PATH_STAT_EMPTY		0
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* _SCFSTATE_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scfsys.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,865 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFSYS_H
-#define	_SCFSYS_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/opcio.h>
-#include <sys/scfd/scfstate.h>
-#include <sys/scfd/scftimer.h>
-#include <sys/scfd/scfkstat.h>
-#include <sys/scfd/scfostoescf.h>
-
-#ifndef	TRUE
-#define	TRUE			(1)
-#endif
-
-#ifndef	FALSE
-#define	FALSE			(0)
-#endif
-
-#define	FLAG_ON			(1)
-#define	FLAG_OFF		(0)
-
-#define	SCF_DRIVER_VERSION	"SCF driver 1.9"
-#define	SCF_DRIVER_NAME		"scfd"
-#define	SCF_DEVICE_NAME		"scfc"
-
-/* instance number */
-#define	SCF_USER_INSTANCE	200	/* instance */
-
-#define	SCF_MAX_INSTANCE	80	/* Max instance */
-
-/* SCFHALT after processing  mode define */
-#define	HALTPROC_STOP		0	/* processing stop mode (default) */
-#define	HALTPROC_SHUTDOWN	1	/* processing shutdown mode */
-#define	HALTPROC_PANIC		2	/* processing panic mode */
-
-/*
- * External function
- */
-extern int	scf_attach(dev_info_t *dip, ddi_attach_cmd_t cmd);
-extern int	scf_detach(dev_info_t *dip, ddi_detach_cmd_t cmd);
-extern void	scf_resource_free_dev(scf_state_t *statep);
-extern int	scf_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd,
-			void *arg, void **resultp);
-extern void	scf_reload_conf(scf_state_t *statep);
-
-extern int	scf_open(dev_t *devp, int flag, int otyp, cred_t *cred_p);
-extern int	scf_close(dev_t dev, int flag, int otyp, cred_t *cred_p);
-extern int	scf_ioctl(dev_t dev, int cmd, intptr_t arg, int mode,
-			cred_t *cred_p, int *rval_p);
-extern int	scf_ioc_reportstat(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_clearlcd(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_wrlcd(intptr_t arg, int mode, int *rval_p, int u_mode);
-extern int	scf_ioc_getdiskled(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_setdiskled(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_getsdownreason(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_optiondisp(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_getpciconfig(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_hac(intptr_t arg, int mode, int *rval_p, int u_mode);
-extern int	scf_ioc_hstadrsinfo(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_rdclistmax(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_rdclistx(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_rdctrl(intptr_t arg, int mode, int *rval_p, int u_mode);
-extern int	scf_ioc_opecall(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_getreport(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_rcipwr(intptr_t arg, int mode, int *rval_p, int u_mode);
-extern int	scf_ioc_panicreq(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_panicchk(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_parmset(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_parmget(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrset(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrget(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrclr(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrfpoff(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrexset(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_autopwrexget(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_dr(intptr_t arg, int mode, int *rval_p, int u_mode);
-extern int	scf_ioc_eventlist(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_getevent(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_setmadmevent(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_remcscmd(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_remcsfile(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_sparecmd(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_ioc_setphpinfo(intptr_t arg, int mode, int *rval_p,
-			int u_mode);
-extern int	scf_push_reportsense(unsigned int rci_addr,
-			unsigned char *sense, time_t timestamp);
-extern int	scf_pop_reportsense(scfreport_t *rsense);
-extern int	scf_push_getevent(unsigned char *event_p);
-extern int	scf_pop_getevent(scfevent_t *event_p);
-extern int	scf_valid_date(int year, int month, int date);
-extern int	scf_check_pon_time(scfautopwrtime_t *ptime);
-extern int	scf_check_poff_time(scfautopwrtime_t *ptime);
-
-extern uint_t	scf_intr(caddr_t arg);
-extern int	scf_intr_cmdcmp(scf_state_t *statep);
-extern void	scf_intr_cmdcmp_driver(scf_state_t *statep,
-			struct scf_cmd *scfcmdp);
-extern int	scf_intr_dsens(struct scf_cmd *scfcmdp,
-			scf_int_reason_t *int_rp, int len);
-extern void	scf_status_change(scf_state_t *statep);
-extern void	scf_next_cmd_check(scf_state_t *statep);
-extern void	scf_next_rxdata_get(void);
-extern void	scf_online_wait_tout(void);
-extern void	scf_cmdbusy_tout(void);
-extern void	scf_cmdend_tout(void);
-extern void	scf_report_send_wait_tout(void);
-extern void	scf_alivecheck_intr(scf_state_t *statep);
-extern void	scf_path_change(scf_state_t *statep);
-extern void	scf_halt(uint_t mode);
-extern void	scf_panic_callb(int code);
-extern void	scf_shutdown_callb(int code);
-extern uint_t	scf_softintr(caddr_t arg);
-extern void	scf_cmdwait_status_set(void);
-
-extern int	scf_map_regs(dev_info_t *dip, scf_state_t *statep);
-extern void	scf_unmap_regs(scf_state_t *statep);
-extern int	scf_send_cmd_check_bufful(struct scf_cmd *scfcmdp);
-extern int	scf_send_cmd(struct scf_cmd *scfcmdp);
-extern void	scf_i_send_cmd(struct scf_cmd *scfcmdp,
-			struct scf_state *statep);
-extern void	scf_p_send_cmd(struct scf_cmd *scfcmdp,
-			struct scf_state *statep);
-extern int	scf_path_check(scf_state_t **statep);
-extern int	scf_offline_check(scf_state_t *statep, uint_t timer_exec_flag);
-extern int	scf_cmdbusy_check(scf_state_t *statep);
-extern void	scf_alivecheck_start(scf_state_t *statep);
-extern void	scf_alivecheck_stop(scf_state_t *statep);
-extern void	scf_forbid_intr(struct scf_state *statep);
-extern void	scf_permit_intr(struct scf_state *statep, int flag);
-extern int	scf_check_state(scf_state_t *statep);
-extern void	scf_chg_scf(scf_state_t *statep, int status);
-extern void	scf_del_queue(scf_state_t *statep);
-extern int	scf_make_send_cmd(struct scf_cmd *scfcmdp, uint_t flag);
-extern void	scf_sram_trace_init(struct scf_state *statep);
-extern void	scf_sram_trace(struct scf_state *statep, uint8_t log_id);
-
-#ifdef	DEBUG
-#include <sys/scfd/scftrace.h>
-#include <sys/scfd/iomp_drv.h>
-#include <sys/scfd/scfdebug.h>
-#include <sys/scfd/scfsnap.h>
-
-#define	SCF_META_INSTANCE	(SCF_USER_INSTANCE + 1)
-				/* meta management instance */
-#define	SCF_INST_INSTANCE	(SCF_USER_INSTANCE + 2)
-				/* instance management instance */
-
-extern void	scf_add_scf(scf_state_t *statep);
-extern void	scf_del_scf(scf_state_t *statep);
-extern int	scf_meta_ioctl(dev_t dev, int cmd, intptr_t arg, int mode,
-			cred_t *cred_p, int *rval_p, int u_mode);
-extern int	scf_inst_ioctl(dev_t dev, int cmd, intptr_t arg, int mode,
-			cred_t *cred_p, int *rval_p, int u_mode);
-extern void	scf_inst_getstat32(scf_state_t *statep,
-			struct fiompstatus_32 *status32_p, char *message_p,
-			int flag);
-extern void	scf_inst_getstat(scf_state_t *statep,
-			struct fiompstatus *status_p, char *message_p,
-			int flag);
-
-#define	SCF_DDI_PUT8(a, b, c, d)					\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint8_t		*cp = (uint8_t *)c;			\
-		*cp = d;						\
-	} else {							\
-		ddi_put8(b, c, d);					\
-	}
-
-#define	SCF_DDI_PUT16(a, b, c, d)					\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint16_t	*cp = (uint16_t *)c;			\
-		*cp = d;						\
-	} else {							\
-		ddi_put16(b, c, d);					\
-	}
-
-#define	SCF_DDI_PUT32(a, b, c, d)					\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint32_t	*cp = (uint32_t *)c;			\
-		*cp = d;						\
-	} else {							\
-		ddi_put32(b, c, d);					\
-	}
-
-#define	SCF_DDI_GET8(a, b, c)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint8_t *)c) : ddi_get8(b, c)
-
-#define	SCF_DDI_GET16(a, b, c)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint16_t *)c) : ddi_get16(b, c)
-
-#define	SCF_DDI_GET32(a, b, c)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint32_t *)c) : ddi_get32(b, c)
-
-#define	SCF_P_DDI_PUT8(a, b, c)						\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint8_t		*bp = (uint8_t *)b;			\
-		*bp = c;						\
-	} else {							\
-		ddi_put8(a, b, c);					\
-	}
-
-#define	SCF_P_DDI_PUT16(a, b, c)					\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint16_t	*bp = (uint16_t *)b;			\
-		*bp = c;						\
-	} else {							\
-		ddi_put16(a, b, c);					\
-	}
-
-#define	SCF_P_DDI_PUT32(a, b, c)					\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		uint32_t	*bp = (uint32_t *)b;			\
-		*bp = c;						\
-	} else {							\
-		ddi_put32(a, b, c);					\
-	}
-
-#define	SCF_P_DDI_GET8(a, b)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint8_t *)b) : ddi_get8(a, b)
-
-#define	SCF_P_DDI_GET16(a, b)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint16_t *)b) : ddi_get16(a, b)
-
-#define	SCF_P_DDI_GET32(a, b)						\
-	(scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) ?			\
-		*((uint32_t *)b) : ddi_get32(a, b)
-
-#define	SCF_CHECK_INSTANCE(a)						\
-	(a == SCF_USER_INSTANCE) ||					\
-	(a == SCF_META_INSTANCE) ||					\
-	(a == SCF_INST_INSTANCE)
-
-#define	SCF_DBG_DRV_TRACE_TBL						\
-	scf_trctbl_t	*trace_f;					\
-	scf_trctbl_t	*trace_l;					\
-	scf_trctbl_t	*trace_w;					\
-	scf_trctbl_t	*err_trace_f;					\
-	scf_trctbl_t	*err_trace_l;					\
-	scf_trctbl_t	*err_trace_w;					\
-	scf_trctbl_t	trace_table[TC_NRM_CNT];			\
-	scf_trctbl_t	err_trace_table[TC_ERR_CNT];			\
-	int		path_num;					\
-	int		alloc_size;					\
-	scf_state_t	**iomp_scf;
-
-#define	SC_DBG_DRV_TRACE(a, b, c, d)					\
-	scf_trace((ushort_t)(a), (ushort_t)(b), (uchar_t *)(c), (ushort_t)(d))
-
-#define	SCF_DBG_DRV_TRACE_INIT						\
-	scf_comtbl.trace_f = (scf_trctbl_t *)&scf_comtbl.trace_table[0]; \
-	scf_comtbl.trace_l						\
-	= (scf_trctbl_t *)&scf_comtbl.trace_table[TC_NRM_CNT];		\
-	scf_comtbl.trace_w = (scf_trctbl_t *)&scf_comtbl.trace_table[0]; \
-	scf_comtbl.err_trace_f						\
-	= (scf_trctbl_t *)&scf_comtbl.err_trace_table[0];		\
-	scf_comtbl.err_trace_l						\
-	= (scf_trctbl_t *)&scf_comtbl.err_trace_table[TC_ERR_CNT];	\
-	scf_comtbl.err_trace_w						\
-	= (scf_trctbl_t *)&scf_comtbl.err_trace_table[0];
-
-#define	SCFDBGMSG(f, s) if (f & scf_trace_msg_flag)			\
-	cmn_err(CE_CONT, "scfd:debug:%04d: " s, __LINE__)
-#define	SCFDBGMSG1(f, s, a) if (f & scf_trace_msg_flag)			\
-	cmn_err(CE_CONT, "scfd:debug:%04d: " s, __LINE__, a)
-#define	SCFDBGMSG2(f, s, a, b) if (f & scf_trace_msg_flag)		\
-	cmn_err(CE_CONT, "scfd:debug:%04d: " s, __LINE__, a, b)
-#define	SCFDBGMSG3(f, s, a, b, c) if (f & scf_trace_msg_flag)		\
-	cmn_err(CE_CONT, "scfd:debug:%04d: " s, __LINE__, a, b, c)
-#define	SCFDBGMSG4(f, s, a, b, c, d) if (f & scf_trace_msg_flag)	\
-	cmn_err(CE_CONT, "scfd:debug:%04d: " s, __LINE__, a, b, c, d)
-
-#define	SCF_DBG_IOMP_INSTANCE						\
-	{ "mscf0", S_IFCHR, SCF_INST_INSTANCE },			\
-	{ "mscf", S_IFCHR, SCF_META_INSTANCE },
-
-#define	SCF_DBG_IOMP_PROC						\
-	if (instance == SCF_META_INSTANCE) {				\
-		if (drv_priv(cred_p) != 0) {				\
-			ret = EPERM;					\
-			goto END_ioctl;					\
-		}							\
-		ret = scf_meta_ioctl(dev, cmd, arg, mode, cred_p, rval_p, \
-			u_mode);					\
-		goto END_ioctl;						\
-	} else if (instance == SCF_INST_INSTANCE) {			\
-		if (drv_priv(cred_p) != 0) {				\
-			ret = EPERM;					\
-			goto END_ioctl;					\
-		}							\
-		ret = scf_inst_ioctl(dev, cmd, arg, mode, cred_p, rval_p, \
-			u_mode);					\
-		goto END_ioctl;						\
-	}
-
-#define	SCF_DBG_IOMP_ADD(a)						\
-	{								\
-	scf_add_scf(a);							\
-	}
-
-#define	SCF_DBG_IOMP_DEL(a)						\
-	{								\
-	scf_del_scf(a);							\
-	}
-
-#define	SCF_DBG_IOMP_FREE						\
-	{								\
-	if (scf_comtbl.iomp_scf != NULL) {				\
-		kmem_free((void *)scf_comtbl.iomp_scf,			\
-			(size_t)scf_comtbl.alloc_size);			\
-		scf_comtbl.iomp_scf = NULL;				\
-		scf_comtbl.alloc_size = 0;				\
-		scf_comtbl.path_num = 0;				\
-	}								\
-	}
-
-#define	SCF_DBG_IOCTL_PROC						\
-	if ((uint_t)cmd == SCFIOCCMDTHROUGH) {				\
-		ret = scf_debug_cmdthrough(arg, mode);			\
-		goto END_ioctl;						\
-	} else if ((uint_t)cmd == SCFIOCTEST) {				\
-		ret = scf_debug_test(arg, mode);			\
-		goto END_ioctl;						\
-	} else if ((uint_t)cmd == SCFIOCSNAPSHOTSIZE) {			\
-		ret = scf_snapshotsize(arg, mode);			\
-		goto END_ioctl;						\
-	} else if ((uint_t)cmd == SCFIOCSNAPSHOT) {			\
-		ret = scf_snapshot(arg, mode);				\
-		goto END_ioctl;						\
-	}
-
-#define	SCF_DBG_TEST_TIMER_STOP						\
-	{								\
-	scf_debug_test_timer_stop();					\
-	}
-
-#define	SCF_DBG_TEST_INTR(a)						\
-	{								\
-	if ((scf_debug_test_sys_int_flag == SCF_DBF_SYS_INTR_ON) ||	\
-		(scf_debug_test_dscp_int_flag == SCF_DBF_DSCP_INT_ON))	\
-		scf_debug_test_intr(a);					\
-	}
-
-#define	SCF_DBG_TEST_INTR_SCFINT(a)					\
-	{								\
-	if (scf_debug_test_sys_int_flag == SCF_DBF_SYS_INTR_ON)		\
-		scf_debug_test_intr_scfint(a);				\
-	}
-
-#define	SCF_DBG_TEST_INTR_CMDEND(a)					\
-	{								\
-	if (scf_debug_test_sys_int_flag == SCF_DBF_SYS_INTR_ON)		\
-		scf_debug_test_intr_cmdend(a);				\
-	}
-
-#define	SCF_DBG_MAKE_RXSUM(a, b)					\
-	{								\
-	if (scf_debug_norxsum_check != SCF_DBF_NORXSUM_CHECK_OFF)	\
-		a = b;							\
-	}
-
-#define	SCF_DBG_MAKE_RXSUM_L(a, b)					\
-	{								\
-	if (scf_debug_test_rxbuff_nosum_check_flag ==			\
-		SCF_DBF_RXBUFF_NOSUM_CHECK_ON) {			\
-		a = b;							\
-		scf_debug_test_rxbuff_nosum_check_flag			\
-		= SCF_DBF_RXBUFF_NOSUM_CHECK_OFF;			\
-	}								\
-	}
-
-#define	SCF_DBG_NO_INT_REASON						\
-	{								\
-	if (scf_debug_no_int_reason)					\
-		scf_comtbl.scf_event_flag &= (~STATUS_EVENT);		\
-	}
-
-#define	SCF_DBG_TEST_INTR_POFF						\
-	{								\
-	if (scf_debug_test_sys_poff_flag == SCF_DBF_NO_INT_REASON_ON)	\
-		scf_debug_test_intr_poff();				\
-	}
-
-#define	SCF_DBG_TEST_DSENS(a, b, c)					\
-	{								\
-	if (scf_debug_test_sys_event_flag == SCF_DBF_SYS_EVENT_ON)	\
-		scf_debug_test_dsens(a, b, c);				\
-	}
-
-#define	SCF_DBG_TEST_SEND_CMD(a, b)					\
-	{								\
-	if (scf_debug_nofirm_sys == SCF_DBF_NOFIRM_SYS_ON)		\
-		scf_debug_test_send_cmd(a, b);				\
-	}
-
-#define	SCF_DBG_MAKE_PATH_CHECK(a)					\
-	{								\
-	if (scf_debug_test_path_check != SCF_DBC_PATH_CHECK_CLEAR) {	\
-		scf_debug_test_path_check--;				\
-		if (scf_debug_test_path_check == SCF_DBC_PATH_CHECK_CLEAR) \
-			a = scf_debug_test_path_check_rtn;		\
-	}								\
-	}
-
-#define	SCF_DBG_MAKE_ONLINE(a)						\
-	{								\
-	if (scf_debug_nooffline_check != SCF_DBF_NOOFFLINE_CHECK_OFF)	\
-		a = STATUS_SCF_ONLINE;					\
-	}
-
-#define	SCF_DBG_MAKE_OFFLINE_CHECK(a)					\
-	{								\
-	if (scf_debug_test_offline_check != SCF_DBC_OFFLINE_CHECK_CLEAR) { \
-		scf_debug_test_offline_check--;				\
-		if (scf_debug_test_offline_check			\
-			== SCF_DBC_OFFLINE_CHECK_CLEAR)			\
-			a = scf_debug_test_offline_check_rtn;		\
-	}								\
-	}
-
-#define	SCF_DBG_RTN_MAKE_CMD_READY					\
-	{								\
-	if (scf_debug_nofirm_sys == SCF_DBF_NOFIRM_SYS_ON)		\
-		return (SCF_COMMAND_READY);				\
-	}
-
-#define	SCF_DBG_MAKE_CMD_BUSY(a, b)					\
-	{								\
-	if (scf_debug_test_cmdr_busy != SCF_DBC_CMDR_BUSY_CLEAR) {	\
-		scf_debug_test_cmdr_busy--;				\
-		if (scf_debug_test_cmdr_busy == SCF_DBC_CMDR_BUSY_CLEAR) \
-			a |= COMMAND_BUSY;				\
-	}								\
-	if (scf_debug_test_cmdexr_busy != SCF_DBC_CMDEXR_BUSY_CLEAR) {	\
-		scf_debug_test_cmdexr_busy--;				\
-		if (scf_debug_test_cmdexr_busy == SCF_DBC_CMDEXR_BUSY_CLEAR) \
-			b |= COMMAND_ExR_BUSY;				\
-	}								\
-	}
-
-#define	SCF_DBG_TEST_ALIVE_START(a)					\
-	{								\
-	if (scf_debug_no_alive == SCF_DBF_NO_ALIVE_ON)			\
-		scf_debug_test_alive_start(a);				\
-	}
-
-#define	SCF_DBG_TEST_ALIVE_STOP(a)					\
-	{								\
-	if (scf_debug_no_alive == SCF_DBF_NO_ALIVE_ON)			\
-		scf_debug_test_alive_stop(a);				\
-	}
-
-#define	SCF_DBG_TEST_INTR_DSCP_DSR(a)					\
-	{								\
-	if (scf_debug_test_dscp_int_flag == SCF_DBF_DSCP_INT_ON)	\
-		scf_debug_test_intr_dscp_dsr(a);			\
-	}
-
-#define	SCF_DBG_TEST_INTR_DSCP_RXTX(a, b)				\
-	{								\
-	if (scf_debug_test_dscp_int_flag == SCF_DBF_DSCP_INT_ON)	\
-		scf_debug_test_intr_dscp_rxtx(a, b);			\
-	}
-
-#define	SCF_DBG_MAKE_LOOPBACK(a)					\
-	{								\
-	if (scf_debug_test_dscp_loopback == SCF_DBF_DSCP_LOOPBACK_ON)	\
-		a = 0;							\
-	}
-
-#define	SCF_DBG_MAKE_NO_DSCP_PATH(a)					\
-	{								\
-	if (scf_debug_no_dscp_path == SCF_DBF_NO_DSCP_PATH_ON)		\
-		a = FLAG_OFF;						\
-	}
-
-#define	SCF_DBG_TEST_TXREQ_SEND(a, b)					\
-	{								\
-	if (scf_debug_nofirm_dscp == SCF_DBF_NOFIRM_DSCP_ON)		\
-		scf_debug_test_txreq_send(a, b);			\
-	}
-
-#define	SCF_DBG_TEST_MAP_REGS(a)					\
-	{								\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		scf_debug_test_map_regs(a);				\
-		scf_sram_trace_init(a);					\
-		ret = 0;						\
-		goto END_map_regs;					\
-	}								\
-	}
-
-#define	SCF_DBG_TEST_UNMAP_REGS(a)					\
-	{								\
-	if (scf_debug_no_device == SCF_DBF_NO_DEVICE_ON) {		\
-		scf_debug_test_unmap_regs(a);				\
-		SCFDBGMSG(SCF_DBGFLAG_SYS, "scf_unmap_regs(): end");	\
-		return;							\
-	}								\
-	}
-
-#define	SCF_DBG_XSCF_SET_STATUS						\
-	if (scf_comtbl.debugxscf_flag) {				\
-		if (scfcmdp->stat0 != NORMAL_END) {			\
-			scfcmdp->rbufleng = 0;				\
-			scfcmdp->stat0 = NORMAL_END;			\
-		}							\
-	}
-
-#define	SCF_DBG_XSCF_SET_LENGTH						\
-	if (scf_comtbl.debugxscf_flag) {				\
-		if (((scfcmdp->status & STATUS_CMD_RTN_CODE) >> 4) !=	\
-			NORMAL_END) {					\
-			scfcmdp->rbufleng = 0;				\
-			break;						\
-		}							\
-	}
-
-#define	SCF_DBG_CHECK_NODEVICE						\
-	scf_debug_no_device == SCF_DBF_NO_DEVICE_ON
-
-#else	/* DEBUG */
-
-#define	SCF_DDI_PUT8(a, b, c, d)	ddi_put8(b, c, d)
-#define	SCF_DDI_PUT16(a, b, c, d)	ddi_put16(b, c, d)
-#define	SCF_DDI_PUT32(a, b, c, d)	ddi_put32(b, c, d)
-#define	SCF_DDI_GET8(a, b, c)		ddi_get8(b, c)
-#define	SCF_DDI_GET16(a, b, c)		ddi_get16(b, c)
-#define	SCF_DDI_GET32(a, b, c)		ddi_get32(b, c)
-
-#define	SCF_P_DDI_PUT8(a, b, c)		ddi_put8(a, b, c)
-#define	SCF_P_DDI_PUT16(a, b, c)	ddi_put16(a, b, c)
-#define	SCF_P_DDI_PUT32(a, b, c)	ddi_put32(a, b, c)
-#define	SCF_P_DDI_GET8(a, b)		ddi_get8(a, b)
-#define	SCF_P_DDI_GET16(a, b)		ddi_get16(a, b)
-#define	SCF_P_DDI_GET32(a, b)		ddi_get32(a, b)
-
-#define	SCF_CHECK_INSTANCE(a)		(a == SCF_USER_INSTANCE)
-
-#define	SCF_DBG_DRV_TRACE_TBL
-#define	SC_DBG_DRV_TRACE(a, b, c, d)
-#define	SCF_DBG_DRV_TRACE_INIT
-
-#define	SCFDBGMSG(f, s)
-#define	SCFDBGMSG1(f, s, a)
-#define	SCFDBGMSG2(f, s, a, b)
-#define	SCFDBGMSG3(f, s, a, b, c)
-#define	SCFDBGMSG4(f, s, a, b, c, d)
-
-#define	SCF_DBG_INIT
-#define	SCF_DBG_IOMP_INSTANCE
-#define	SCF_DBG_IOMP_PROC
-#define	SCF_DBG_IOCTL_PROC
-#define	SCF_DBG_IOMP_ADD(a)
-#define	SCF_DBG_IOMP_DEL(a)
-#define	SCF_DBG_IOMP_FREE
-#define	SCF_DBG_TEST_TIMER_STOP
-#define	SCF_DBG_TEST_INTR(a)
-#define	SCF_DBG_TEST_INTR_SCFINT(a)
-#define	SCF_DBG_TEST_INTR_CMDEND(a)
-#define	SCF_DBG_MAKE_RXSUM(a, b)
-#define	SCF_DBG_MAKE_RXSUM_L(a, b)
-#define	SCF_DBG_NO_INT_REASON
-#define	SCF_DBG_TEST_INTR_POFF
-#define	SCF_DBG_TEST_DSENS(a, b, c)
-#define	SCF_DBG_TEST_SEND_CMD(a, b)
-#define	SCF_DBG_MAKE_PATH_CHECK(a)
-#define	SCF_DBG_MAKE_ONLINE(a)
-#define	SCF_DBG_MAKE_OFFLINE_CHECK(a)
-#define	SCF_DBG_RTN_MAKE_CMD_READY
-#define	SCF_DBG_MAKE_CMD_BUSY(a, b)
-#define	SCF_DBG_TEST_ALIVE_START(a)
-#define	SCF_DBG_TEST_ALIVE_STOP(a)
-#define	SCF_DBG_TEST_INTR_DSCP_DSR(a)
-#define	SCF_DBG_TEST_INTR_DSCP_RXTX(a, b)
-#define	SCF_DBG_MAKE_LOOPBACK(a)
-#define	SCF_DBG_MAKE_NO_DSCP_PATH(a)
-#define	SCF_DBG_TEST_TXREQ_SEND(a, b)
-#define	SCF_DBG_TEST_MAP_REGS(a)
-#define	SCF_DBG_TEST_UNMAP_REGS(a)
-#define	SCF_DBG_DDI_PUT(a, b)
-#define	SCF_DBG_DDI_GET(a)
-#define	SCF_DBG_XSCF_SET_STATUS
-#define	SCF_DBG_XSCF_SET_LENGTH
-
-#endif	/* DEBUG */
-
-/*
- * SCF driver common table
- */
-typedef struct scf_comtbl {
-	/* mutex resource */
-	kmutex_t	all_mutex;	/* scf driver mutex */
-	kmutex_t	trc_mutex;	/* scf driver trace mutex */
-	kmutex_t	attach_mutex;	/* attach mutex */
-	kmutex_t	si_mutex;	/* softintr mutex */
-
-	/* cookie */
-	ddi_iblock_cookie_t	iblock_cookie;		/* SCFI-Interrupt */
-	ddi_iblock_cookie_t	soft_iblock_cookie;	/* softintr cookie */
-
-	/* condition variables */
-	kcondvar_t	cmd_cv;		/* command send */
-	kcondvar_t	cmdwait_cv;	/* command send wait */
-	kcondvar_t	cmdend_cv;	/* command send end */
-	kcondvar_t	cmdbusy_cv;	/* command busy send wait */
-	kcondvar_t	rsense_cv;	/* report sense */
-	kcondvar_t	rdcsense_cv;	/* SCFIOCRDCTRL & sense */
-	kcondvar_t	rdctrl_cv;	/* SCFIOCRDCTRL command */
-	kcondvar_t	getevent_cv;	/* SCFIOCGETEVENT */
-	kcondvar_t	suspend_wait_cv; /* suspend cv */
-
-	/* ID */
-	ddi_softintr_t	scf_softintr_id; /* softintr id */
-
-	/* SCF state table address */
-	scf_state_t	*scf_pseudo_p;	/* pseudo device state */
-	scf_state_t	*scf_exec_p;	/* SCF exec state */
-	scf_state_t	*scf_path_p;	/* SCF path change state */
-	scf_state_t	*scf_wait_p;	/* Standby state */
-	scf_state_t	*scf_stop_p;	/* Stop state */
-	scf_state_t	*scf_err_p;	/* error state */
-	scf_state_t	*scf_disc_p;	/* Disconnect state */
-	scf_state_t	*scf_suspend_p;	/* Suspend stste */
-
-	/* flag and counter */
-	uint_t	resource_flag;		/* resource allocate flag */
-	uint_t	scf_event_flag;		/* SCF event flag */
-	uint_t	poff_factor;		/* Shutdown factor */
-	uint_t	cmd_busy;		/* cmd send busy flag */
-	uint_t	cmd_wait;		/* cmd send wait counter */
-	uint_t	cmd_busy_wait;		/* cmd busy send wait flag */
-	uint_t	cmd_end_wait;		/* cmd send end wait flag */
-	uint_t	rdctrl_busy;		/* SCFIOCRDCTRL busy flag */
-	uint_t	rdctrl_end_wait;	/* SCFIOCRDCTRL cmd end wait flag */
-	uint_t	alive_running;		/* Alive check exec flag */
-	uint_t	watchdog_after_resume;	/* watch cpu after resume flag */
-	uint_t	scf_shutdown_exec_flag;	/* SCFIOCSHUTDOWN call flag */
-	uint_t	shutdown_start_reported; /* SCFIOCREPORTSTAT(shutdown) call */
-	uint_t	scf_exec_cmd_id;	/* SCF command exec id */
-	uint_t	scf_cmd_exec_flag;	/* SCF command exec flag */
-	uint_t	putinfo_exec_flag;	/* scf_service_putinfo() exec flag */
-	uint_t	getinfo_exec_flag;	/* scf_service_getinfo() exec flag */
-	uint_t	debugxscf_flag;		/* SCFIOCCMDTHROUGH exec flag */
-	uint_t	suspend_wait;		/* Suspend wait flag */
-	uint_t	suspend_flag;		/* Suspend flag */
-	uint_t	scf_suspend_sendstop;	/* Suspend send stop flag */
-	uint_t	scf_softintr_dscp_kicked; /* Softintr DSCP kick flag */
-	uint_t	int_reason_retry;	/* INT_REASON retry flag */
-	uint_t	scf_alive_int_count;	/* Alive check interrupt counter */
-	uint_t	reload_conf_flag;	/* configuration file load flag */
-	uint_t	scf_cmd_resend_flag;	/* SCF command re send flag */
-	uint_t	scf_cmd_resend_req;	/* SCF command re send flag */
-	uint_t	path_stop_flag;		/* command send stop flag */
-
-	uint_t	report_buf_ful_rcnt;	/* Report command BUF_FUL */
-					/* retry counter */
-	uint_t	report_rci_busy_rcnt;	/* Report command RCI_BUSY */
-					/* retry counter */
-	uint_t	path_change_rcnt;	/* SCF path change retry counter */
-
-	/* status information */
-	ushort_t scf_mode_sw;		/* Mode switch status */
-	uchar_t	scf_poff_id;		/* POFF interrupt id */
-	uint_t	scf_shutdownreason;	/* Shutdown reason */
-	uint_t	scf_status;		/* XSCF status */
-
-	/* SCF command control code */
-	uint_t	scf_pchg_event_sub;	/* SCF path change status */
-	uint_t	scf_poff_event_sub;	/* POFF event status */
-	uint_t	scf_shut_event_sub;	/* SHUTDOWN event status */
-	uint_t	scf_alive_event_sub;	/* ALIVE event status */
-	uint_t	scf_report_event_sub;	/* REPORT processing status */
-	uint_t	scf_domain_event_sub;	/* Domain processing status */
-
-	/* SCF command control */
-	scf_cmd_t	*scf_cmdp;	/* SCF command table address */
-	uint_t	scf_last_report;	/* Last report */
-	uint_t	scf_rem_rxbuff_size;	/* remainder receive data size */
-
-	/* SCF command interrupt area */
-	scf_cmd_t	scf_cmd_intr;	/* SCF comand table(Interrupt use) */
-	uchar_t	scf_sbuf[SCF_S_CNT_16];	/* Tx Small buffer table */
-	uchar_t	scf_rbuf[SCF_INT_CNT_MAX]; /* Rx Large buffer table */
-	uchar_t	last_event[SCF_INT_REASON_SIZE]; /* Last event table */
-
-	/* ioctl control area */
-	scfreport_t	*report_sensep;	/* SCFIOCGETREPORT save address */
-	int	report_sense_top;	/* SCFIOCGETREPORT save offset(push) */
-	int	report_sense_oldest;	/* SCFIOCGETREPORT save offset(pop) */
-	uint_t	rcidown_event_flag;	/* SCFIOCGETREPORT rci down flag */
-	scfreport_t	scfreport_rcidown; /* SCFIOCGETREPORT rci down area */
-
-	scfevent_t	*getevent_sensep; /* SCFIOCGETEVENT save address */
-	int	getevent_sense_top;	/* SCFIOCGETEVENT save offset(push) */
-	int	getevent_sense_oldest;	/* SCFIOCGETEVENT save offset(pop) */
-
-	scfeventlist_t	getevent_tbl;	/* SCFIOCEVENTLIST list table */
-
-	uchar_t	lcd_seq_mes[SCF_WRLCD_MAX];
-				/* SCFIOCCLEARLCD and SCFIOCWRLCD message */
-
-	uchar_t	rdctrl_sense_category_code;	/* SCFIOCRDCTL sub command */
-	uchar_t	rdctrl_sense[SCF_SBUFR_SIZE];	/* SCFIOCRDCTL information */
-
-	/* memo counter */
-	uint_t	attach_count;		/* SCF attach count */
-
-	/* error memo counter */
-	uint_t	memo_cmd_to_cnt;	/* CMD timeout memo */
-	uint_t	scf_rsense_overflow;	/* SCFIOCGETREPORT overflow memo */
-	uint_t	scf_getevent_overflow;	/* SCFIOCGETEVENT overflow memo */
-
-	/* Unclaimed interrupt register log */
-	uint_t	scf_unclamed_cnt;	/* Unclaimed interrupt counter */
-	struct {
-		uint16_t	CONTROL; /* SCF Control register */
-		uint16_t	INT_ST;	/* SCF Interrupt Status register */
-		uint16_t	COMMAND; /* SCF command register */
-		uint16_t	STATUS;	/* SCF status register */
-		uint32_t	STATUS_ExR; /* SCFI status extended register */
-		uint8_t		DSR;	/* DSCP buffer status register */
-	} scf_unclamed;
-
-	/* kstat private area */
-	scf_kstat_private_t	*kstat_private;	/* for kstat area */
-
-	SCF_DBG_DRV_TRACE_TBL		/* SCF driver trace */
-} scf_comtbl_t;
-
-
-/*
- * (resource_flag) macro for resource allocate flag
- */
-#define	DID_MUTEX_ATH		(1 << 0)
-#define	DID_MUTEX_ALL		(1 << 1)
-#define	DID_MUTEX_TRC		(1 << 2)
-#define	DID_MUTEX_SI		(1 << 3)
-
-#define	DID_CV			(1 << 4)
-#define	DID_KSTAT		(1 << 5)
-#define	DID_ALLOCBUF		(1 << 6)
-#define	DID_ALIVECHECK		(1 << 7)
-
-#define	DID_MNODE		(1 << 8)
-#define	DID_SOFTINTR		(1 << 9)
-
-#define	DID_DSCPINIT		(1 << 10)
-
-/*
- * XSCF status defaine (scf_status)
- */
-#define	SCF_STATUS_OFFLINE	0	/* XSCF status is offline */
-#define	SCF_STATUS_ONLINE	1	/* XSCF status is online */
-#define	SCF_STATUS_UNKNOWN	2	/* XSCF status is unknown */
-
-/*
- * SCF command control status
- */
-#define	EVENT_SUB_NONE		0	/* None status */
-/* (scf_pchg_event_sub) SCF path change status */
-#define	EVENT_SUB_PCHG_WAIT	1	/* SCF path change command wait */
-#define	EVENT_SUB_PCHG_EXEC	2	/* SCF path change command exec */
-/* (scf_poff_event_sub) POFF event status */
-#define	EVENT_SUB_POFF_WAIT	1	/* POFF factor command wait */
-#define	EVENT_SUB_POFF_EXEC	2	/* POFF factor command exec */
-/* (scf_shut_event_sub) SHUTDOWN event status */
-#define	EVENT_SUB_SHUT_WAIT	1	/* command wait (SHUTDOWN) */
-#define	EVENT_SUB_SHUT_EXEC	2	/* command exec (SHUTDOWN) */
-#define	EVENT_SUB_WAIT		3	/* command wait (EVENT) */
-#define	EVENT_SUB_EXEC		4	/* command exec (EVENT) */
-/* (scf_alive_event_sub) ALIVE event status */
-#define	EVENT_SUB_ALST_WAIT	1	/* Alive start command wait */
-#define	EVENT_SUB_ALST_EXEC	2	/* Alive start command exec */
-#define	EVENT_SUB_ALSP_WAIT	3	/* Alive stop command wait */
-#define	EVENT_SUB_ALSP_EXEC	4	/* Alive stop command exec */
-/* (scf_report_event_sub) REPORT processing status */
-#define	EVENT_SUB_REPORT_RUN_WAIT	1 /* Report (runnning) send wait */
-#define	EVENT_SUB_REPORT_RUN_EXEC	2 /* Report (runnning) send exec */
-#define	EVENT_SUB_REPORT_SHUT_WAIT	3 /* Report (shutdown) send wait */
-#define	EVENT_SUB_REPORT_SHOT_EXEC	4 /* Report (shutdown) send exec */
-/* (scf_domain_event_sub) Domain processing status */
-#define	EVENT_SUB_DOMAIN_WAIT	1	/* Domain info command wait */
-#define	EVENT_SUB_DOMAIN_EXEC	2	/* Domain info command exec */
-
-/* (scf_last_report) define */
-#define	NOT_SEND_REPORT		0xffffffff	/* Not report send */
-
-/* scf_cmd_resend_req define */
-#define	RESEND_IOCTL		(1 << 0) /* Comand from ioctl */
-#define	RESEND_PCHG		(1 << 1) /* SCF Path change command */
-#define	RESEND_POFF		(1 << 2) /* Power supply control command */
-#define	RESEND_SHUT		(1 << 3) /* Event information command */
-#define	RESEND_ALST		(1 << 4) /* Alive check command (start) */
-#define	RESEND_ALSP		(1 << 5) /* Alive check command (stop) */
-#define	RESEND_REPORT_RUN	(1 << 6) /* Report command (system running) */
-#define	RESEND_REPORT_SHUT	(1 << 7) /* Report command (shutdown start) */
-#define	RESEND_DOMAIN		(1 << 8) /* Domain info command */
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFSYS_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scftimer.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef	_SCFTIMER_H
-#define	_SCFTIMER_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-/*
- * Timer code
- */
-typedef enum {
-	SCF_TIMERCD_CMDBUSY,	/* SCF command busy watch timer */
-	SCF_TIMERCD_CMDEND,	/* SCF command completion watch timer */
-	SCF_TIMERCD_ONLINE,	/* SCF online watch timer */
-	SCF_TIMERCD_NEXTRECV,	/* Next receive wait timer */
-	SCF_TIMERCD_DSCP_ACK,	/* DSCP interface TxACK watch timer */
-	SCF_TIMERCD_DSCP_END,	/* DSCP interface TxEND watch timer */
-	SCF_TIMERCD_DSCP_BUSY,	/* DSCP interface busy watch timer */
-	SCF_TIMERCD_DSCP_CALLBACK, /* DSCP interface callback timer */
-	SCF_TIMERCD_BUF_FUL,	/* SCF command BUF_FUL retry timer */
-	SCF_TIMERCD_RCI_BUSY,	/* SCF command RCI_BUSY retry timer */
-	SCF_TIMERCD_DSCP_INIT,	/* DSCP INIT_REQ retry timer */
-	SCF_TIMERCD_DKMD_INIT,	/* DKMD INIT_REQ retry timer */
-	SCF_TIMERCD_MAX		/* Max timer code */
-} scf_tm_code_t;
-
-/*
- * Timer table
- */
-typedef struct scf_timer_tbl {
-	uint8_t		code;		/* Timer code */
-	uint8_t		rsv[3];		/* reserved */
-	timeout_id_t	id;		/* Timer ID */
-} scf_timer_tbl_t;
-
-/*
- * Timer control table
- */
-typedef struct scf_timer {
-	scf_timer_tbl_t	tbl[2];
-	uint8_t		start;		/* Timer start flag */
-	uint8_t		restart;	/* Timer restart flag */
-	uint8_t		stop;		/* Timer stop flag */
-	uint8_t		side;		/* Use table side */
-	uint32_t	value;		/* Timer value */
-} scf_timer_t;
-
-/*
- * scf_timer_check() return value
- */
-#define	SCF_TIMER_NOT_EXEC	0
-#define	SCF_TIMER_EXEC		1
-
-/*
- * Timer value (ms)
- */
-	/* SCF command busy timer value (10s) */
-#define	SCF_TIMER_VALUE_DEVBUSY		10000
-	/* SCF command completion timer value (60s) */
-#define	SCF_TIMER_VALUE_CMDEND		60000
-	/* SCF online timer value (10s) */
-#define	SCF_TIMER_VALUE_ONLINE		10000
-	/* Next receive timer value (20ms) */
-#define	SCF_TIMER_VALUE_NEXTRCV		20
-	/* DSCP interface timer value (60s) */
-#define	SCF_TIMER_VALUE_DSCP_ACK	60000
-	/* DSCP interface TxEND timer value (60s) */
-#define	SCF_TIMER_VALUE_DSCP_END	60000
-	/* DSCP interface busy timer value (2s) */
-#define	SCF_TIMER_VALUE_DSCP_BUSY	2000
-	/* DSCP interface callback timer value (20ms) */
-#define	SCF_TIMER_VALUE_DSCP_CALLBACK	20
-	/* DSCP INIT_REQ retry timer value (5ms) */
-#define	SCF_TIMER_VALUE_DSCP_INIT	5000
-
-/*
- * Timer value convert macro
- */
-#define	SCF_MIL2MICRO(x)	((x) * 1000)
-#define	SCF_SEC2MICRO(x)	((x) * 1000000)
-
-/*
- * External function
- */
-extern	void	scf_timer_init(void);
-extern	void	scf_timer_start(int);
-extern	void	scf_timer_stop(int);
-extern	void	scf_timer_all_stop(void);
-extern	int	scf_timer_check(int);
-extern	uint32_t	scf_timer_value_get(int);
-extern	void	scf_tout(void *);
-extern	int	scf_timer_stop_collect(timeout_id_t *tmids, int size);
-extern	void	scf_timer_untimeout(timeout_id_t *tmids, int size);
-
-extern	scf_timer_t	scf_timer[SCF_TIMERCD_MAX];
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* _SCFTIMER_H */
--- a/usr/src/uts/sun4u/opl/sys/scfd/scftrace.h	Mon Nov 27 11:21:25 2006 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-/*
- * 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
- */
-/*
- * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
- */
-
-#ifndef _SCFTRACE_H
-#define	_SCFTRACE_H
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include <sys/scfd/scfstate.h>
-
-#define	TC_INFO_SIZE		8
-
-/* SCF driver trace table */
-typedef	struct scf_trctbl {
-	ushort_t	line;			/* sorce kine No. */
-	ushort_t	tmvl;			/* trace time (100ms) */
-	ushort_t	code;			/* trace code */
-	ushort_t	size;			/* info size */
-	uchar_t		info[TC_INFO_SIZE];	/* detail info */
-} scf_trctbl_t;
-
-#define	TC_NRM_CNT		1920		/* normal trace entry count */
-#define	TC_ERR_CNT		128		/* error trace entry count */
-
-#define	SCF_DBGFLAG_REG		0x00000001
-
-#define	SCF_DBGFLAG_IOCTL	0x00000010
-#define	SCF_DBGFLAG_SYS		0x00000020
-#define	SCF_DBGFLAG_DSCP	0x00000040
-#define	SCF_DBGFLAG_SRV		0x00000080
-
-#define	SCF_DBGFLAG_IOMP	0x00000100
-#define	SCF_DBGFLAG_KSTAT	0x00000200
-#define	SCF_DBGFLAG_FOCK	0x00000400
-
-#define	SCF_DBGFLAG_DDI		0x00001000
-#define	SCF_DBGFLAG_OPCLS	0x00002000
-#define	SCF_DBGFLAG_TIMER	0x00004000
-
-#define	SCF_DBGFLAG_SNAP	0x00010000
-#define	SCF_DBGFLAG_TRACE	0x00020000
-#define	SCF_DBGFLAG_DBG		0x00080000
-
-#define	SCF_DBGFLAG_ALL		0xffffffff
-
-/*
- * trace code define
- */
-#define	TC_ERR			0x8000
-#define	TC_ERRCD		0x4000
-#define	TC_MSG			0x2000
-#define	TC_R_REG		0x1000
-#define	TC_W_REG		0x0800
-#define	TC_R_CONTROL		(TC_R_REG | 0x0001)
-#define	TC_R_INT_ST		(TC_R_REG | 0x0002)
-#define	TC_R_COMMAND		(TC_R_REG | 0x0011)
-#define	TC_R_COMMAND_ExR	(TC_R_REG | 0x0012)
-#define	TC_R_STATUS		(TC_R_REG | 0x0013)
-#define	TC_R_STATUS_ExR		(TC_R_REG | 0x0014)
-#define	TC_R_TDATA0		(TC_R_REG | 0x0020)
-#define	TC_R_TDATA1		(TC_R_REG | 0x0021)
-#define	TC_R_TDATA2		(TC_R_REG | 0x0022)
-#define	TC_R_TDATA3		(TC_R_REG | 0x0023)
-#define	TC_R_RDATA0		(TC_R_REG | 0x0030)
-#define	TC_R_RDATA1		(TC_R_REG | 0x0031)
-#define	TC_R_RDATA2		(TC_R_REG | 0x0032)
-#define	TC_R_RDATA3		(TC_R_REG | 0x0033)
-#define	TC_R_ACR		(TC_R_REG | 0x0040)
-#define	TC_R_ATR		(TC_R_REG | 0x0041)
-#define	TC_R_DCR		(TC_R_REG | 0x0050)
-#define	TC_R_DSR		(TC_R_REG | 0x0051)
-#define	TC_R_TxDCR_C_FLAG	(TC_R_REG | 0x0052)
-#define	TC_R_TxDCR_OFFSET	(TC_R_REG | 0x0053)
-#define	TC_R_TxDCR_LENGTH	(TC_R_REG | 0x0054)
-#define	TC_R_TxDSR_C_FLAG	(TC_R_REG | 0x0055)
-#define	TC_R_TxDSR_OFFSET	(TC_R_REG | 0x0056)
-#define	TC_R_RxDCR_C_FLAG	(TC_R_REG | 0x0057)
-#define	TC_R_RxDCR_OFFSET	(TC_R_REG | 0x0058)
-#define	TC_R_RxDCR_LENGTH	(TC_R_REG | 0x0059)
-#define	TC_R_RxDSR_C_FLAG	(TC_R_REG | 0x005a)
-#define	TC_R_RxDSR_OFFSET	(TC_R_REG | 0x005b)
-
-#define	TC_W_CONTROL		(TC_W_REG | 0x0001)
-#define	TC_W_INT_ST		(TC_W_REG | 0x0002)
-#define	TC_W_COMMAND		(TC_W_REG | 0x0011)
-#define	TC_W_COMMAND_ExR	(TC_W_REG | 0x0012)
-#define	TC_W_STATUS		(TC_W_REG | 0x0013)
-#define	TC_W_STATUS_ExR		(TC_W_REG | 0x0014)
-#define	TC_W_TDATA0		(TC_W_REG | 0x0020)
-#define	TC_W_TDATA1		(TC_W_REG | 0x0021)
-#define	TC_W_TDATA2		(TC_W_REG | 0x0022)
-#define	TC_W_TDATA3		(TC_W_REG | 0x0023)
-#define	TC_W_RDATA0		(TC_W_REG | 0x0030)
-#define	TC_W_RDATA1		(TC_W_REG | 0x0031)
-#define	TC_W_RDATA2		(TC_W_REG | 0x0032)
-#define	TC_W_RDATA3		(TC_W_REG | 0x0033)
-#define	TC_W_ACR		(TC_W_REG | 0x0040)
-#define	TC_W_ATR		(TC_W_REG | 0x0041)
-#define	TC_W_DCR		(TC_W_REG | 0x0050)
-#define	TC_W_DSR		(TC_W_REG | 0x0051)
-#define	TC_W_TxDCR_C_FLAG	(TC_W_REG | 0x0052)
-#define	TC_W_TxDCR_OFFSET	(TC_W_REG | 0x0053)
-#define	TC_W_TxDCR_LENGTH	(TC_W_REG | 0x0054)
-#define	TC_W_TxDSR_C_FLAG	(TC_W_REG | 0x0055)
-#define	TC_W_TxDSR_OFFSET	(TC_W_REG | 0x0056)
-#define	TC_W_RxDCR_C_FLAG	(TC_W_REG | 0x0057)
-#define	TC_W_RxDCR_OFFSET	(TC_W_REG | 0x0058)
-#define	TC_W_RxDCR_LENGTH	(TC_W_REG | 0x0059)
-#define	TC_W_RxDSR_C_FLAG	(TC_W_REG | 0x005a)
-#define	TC_W_RxDSR_OFFSET	(TC_W_REG | 0x005b)
-
-#define	TC_TIMER		0x0400
-#define	TC_T_TOUT		(TC_TIMER | 0x0001)
-#define	TC_T_START		(TC_TIMER | 0x0002)
-#define	TC_T_STOP		(TC_TIMER | 0x0003)
-
-#define	TC_OUT			0x0200
-#define	TC_IN			0x0100
-
-/* scfconf.c */
-#define	TC_PROBE		0x0001
-#define	TC_ATTACH		0x0002
-#define	TC_DETACH		0x0003
-#define	TC_GETINFO		0x0004
-
-/* scfopt.c */
-#define	TC_OPEN			0x0011
-#define	TC_CLOSE		0x0012
-#define	TC_IOCTL		0x0013
-#define	TC_CHPOLL		0x0014
-
-/* scfhandler.c */
-#define	TC_INTR			0x0021
-#define	TC_DSENS		0x0022
-#define	TC_SHUTDOWN		0x0023
-
-/* scfreg.c scfhandler.c */
-#define	TC_SEND			0x0031
-#define	TC_RSTS			0x0032
-
-/* kernel function code */
-#define	TC_SIGNAL		0x0041
-#define	TC_W_SIG		0x0042
-#define	TC_T_WAIT		0x0043
-#define	TC_KILL			0x004f
-
-/* DSCP function code */
-#define	TC_MB_INIT		0x0081
-#define	TC_MB_FINI		0x0082
-#define	TC_MB_PUTMSG		0x0083
-#define	TC_MB_CANGET		0x0084
-#define	TC_MB_GETMSG		0x0085
-#define	TC_MB_FLUSH		0x0086
-#define	TC_MB_CTRL		0x0087
-#define	TC_MB_INTR		0x0088
-#define	TC_MB_CALLBACK		0x0089
-
-#define	TC_TxREQ		0x00a1
-#define	TC_RxACK		0x00a5
-#define	TC_RxEND		0x00a6
-#define	TC_RxREQ		0x00a4
-#define	TC_TxACK		0x00a2
-#define	TC_TxEND		0x00a3
-
-/* OS to SCF function code */
-#define	TC_S_PUTINFO		0x0091
-#define	TC_S_GETINFO		0x0092
-
-/*
- * SCF driver trace flag
- */
-extern ushort_t	scf_trace_exec;		/* 1:trace exec,  0:Trace no exec */
-extern ushort_t	scf_trace_flag;
-
-/*
- * SCF driver trace debug flag
- */
-extern uint_t	scf_trace_msg_flag;	/* trace massege flag */
-
-/*
- * External function
- */
-extern void	scf_trace(ushort_t code, ushort_t line,
-	uchar_t *info, ushort_t size);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _SCFTRACE_H */