summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4u/opl/sys/scfd/scfsys.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/sun4u/opl/sys/scfd/scfsys.h')
-rw-r--r--usr/src/uts/sun4u/opl/sys/scfd/scfsys.h862
1 files changed, 862 insertions, 0 deletions
diff --git a/usr/src/uts/sun4u/opl/sys/scfd/scfsys.h b/usr/src/uts/sun4u/opl/sys/scfd/scfsys.h
new file mode 100644
index 0000000000..dc0b106cdd
--- /dev/null
+++ b/usr/src/uts/sun4u/opl/sys/scfd/scfsys.h
@@ -0,0 +1,862 @@
+/*
+ * 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.5"
+#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_ioc_pciresetreq(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 */
+
+ /* 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_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) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SCFSYS_H */