xref: /onnv-gate/usr/src/uts/common/sys/ib/adapters/hermon/hermon_event.h (revision 12965:b65a8427f8fe)
19517SBill.Taylor@Sun.COM /*
29517SBill.Taylor@Sun.COM  * CDDL HEADER START
39517SBill.Taylor@Sun.COM  *
49517SBill.Taylor@Sun.COM  * The contents of this file are subject to the terms of the
59517SBill.Taylor@Sun.COM  * Common Development and Distribution License (the "License").
69517SBill.Taylor@Sun.COM  * You may not use this file except in compliance with the License.
79517SBill.Taylor@Sun.COM  *
89517SBill.Taylor@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99517SBill.Taylor@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109517SBill.Taylor@Sun.COM  * See the License for the specific language governing permissions
119517SBill.Taylor@Sun.COM  * and limitations under the License.
129517SBill.Taylor@Sun.COM  *
139517SBill.Taylor@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149517SBill.Taylor@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159517SBill.Taylor@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169517SBill.Taylor@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179517SBill.Taylor@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189517SBill.Taylor@Sun.COM  *
199517SBill.Taylor@Sun.COM  * CDDL HEADER END
209517SBill.Taylor@Sun.COM  */
219517SBill.Taylor@Sun.COM 
229517SBill.Taylor@Sun.COM /*
23*12965SWilliam.Taylor@Oracle.COM  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
249517SBill.Taylor@Sun.COM  */
259517SBill.Taylor@Sun.COM 
269517SBill.Taylor@Sun.COM #ifndef	_SYS_IB_ADAPTERS_HERMON_EVENT_H
279517SBill.Taylor@Sun.COM #define	_SYS_IB_ADAPTERS_HERMON_EVENT_H
289517SBill.Taylor@Sun.COM 
299517SBill.Taylor@Sun.COM /*
309517SBill.Taylor@Sun.COM  * hermon_event.h
319517SBill.Taylor@Sun.COM  *    Contains all of the prototypes, #defines, and structures necessary
329517SBill.Taylor@Sun.COM  *    for the Interrupt and Event Processing routines
339517SBill.Taylor@Sun.COM  *    Specifically it contains the various event types, event flags,
349517SBill.Taylor@Sun.COM  *    structures used for managing Hermon event queues, and prototypes for
359517SBill.Taylor@Sun.COM  *    many of the functions consumed by other parts of the Hermon driver.
369517SBill.Taylor@Sun.COM  */
379517SBill.Taylor@Sun.COM 
389517SBill.Taylor@Sun.COM #include <sys/types.h>
399517SBill.Taylor@Sun.COM #include <sys/conf.h>
409517SBill.Taylor@Sun.COM #include <sys/ddi.h>
419517SBill.Taylor@Sun.COM #include <sys/sunddi.h>
429517SBill.Taylor@Sun.COM 
439517SBill.Taylor@Sun.COM #ifdef __cplusplus
449517SBill.Taylor@Sun.COM extern "C" {
459517SBill.Taylor@Sun.COM #endif
469517SBill.Taylor@Sun.COM 
479517SBill.Taylor@Sun.COM /*
489517SBill.Taylor@Sun.COM  * Hermon UAR Doorbell Write Macro - writes UAR registers
499517SBill.Taylor@Sun.COM  *
509517SBill.Taylor@Sun.COM  * If on a 32-bit system, we must hold a lock around the ddi_put64() to
519517SBill.Taylor@Sun.COM  * ensure that the 64-bit write is an atomic operation.  This is a
529517SBill.Taylor@Sun.COM  * requirement of the Hermon hardware and is to protect from the race
539517SBill.Taylor@Sun.COM  * condition present when more than one kernel thread attempts to do each
549517SBill.Taylor@Sun.COM  * of their two 32-bit accesses (for 64-bit doorbell) simultaneously.
559517SBill.Taylor@Sun.COM  *
569517SBill.Taylor@Sun.COM  * If we are on a 64-bit system then the ddi_put64() is completed as one
579517SBill.Taylor@Sun.COM  * 64-bit instruction, and the lock is not needed.
589517SBill.Taylor@Sun.COM  *
599517SBill.Taylor@Sun.COM  * This is done as a preprocessor #if to speed up execution at run-time
609517SBill.Taylor@Sun.COM  * since doorbell ringing is a "fast-path" operation.
619517SBill.Taylor@Sun.COM  */
629517SBill.Taylor@Sun.COM #if (DATAMODEL_NATIVE == DATAMODEL_ILP32)
639517SBill.Taylor@Sun.COM #define	HERMON_UAR_DOORBELL(state, uarhdl, hs_uar, doorbell)	{	\
649517SBill.Taylor@Sun.COM 	mutex_enter(&state->hs_uar_lock);				\
659517SBill.Taylor@Sun.COM 	ddi_put64(uarhdl, hs_uar, doorbell);				\
669517SBill.Taylor@Sun.COM 	mutex_exit(&state->hs_uar_lock);				\
679517SBill.Taylor@Sun.COM }
689517SBill.Taylor@Sun.COM #else
699517SBill.Taylor@Sun.COM #define	HERMON_UAR_DOORBELL(state, uarhdl, hs_uar, doorbell)	{	\
709517SBill.Taylor@Sun.COM 	ddi_put64(uarhdl, hs_uar, doorbell);				\
719517SBill.Taylor@Sun.COM }
729517SBill.Taylor@Sun.COM #endif
739517SBill.Taylor@Sun.COM 
749517SBill.Taylor@Sun.COM /*
759517SBill.Taylor@Sun.COM  * HERMON Doorbell Record (DBr) Write Macro - writes doorbell record in memory
769517SBill.Taylor@Sun.COM  *
779517SBill.Taylor@Sun.COM  * Since the DBr is only 32 bits at a time, this can be just a put32, not
789517SBill.Taylor@Sun.COM  * put64.
799517SBill.Taylor@Sun.COM  */
809517SBill.Taylor@Sun.COM 
819517SBill.Taylor@Sun.COM #define	HERMON_UAR_DB_RECORD_WRITE(db_addr, dbr)			\
829517SBill.Taylor@Sun.COM 	*(uint32_t *)(db_addr) = htonl(dbr)
839517SBill.Taylor@Sun.COM 
849517SBill.Taylor@Sun.COM /*
859517SBill.Taylor@Sun.COM  * The following defines specify the default number of Event Queues (EQ) and
869517SBill.Taylor@Sun.COM  * their default size.  By default the size of each EQ is set to 8K entries,
879517SBill.Taylor@Sun.COM  * but this value is controllable through the "cp_log_eq_sz" configuration
889517SBill.Taylor@Sun.COM  * variable.  We also specify the number of EQs which the Arbel driver
899517SBill.Taylor@Sun.COM  * currently uses (HERMON_NUM_EQ_USED).  Note: this value should be less than
909517SBill.Taylor@Sun.COM  * or equal to HERMON_NUM_EQ.
919517SBill.Taylor@Sun.COM  * HERMON:  will limit to 4 total - in anticipation of VMM implementation
929517SBill.Taylor@Sun.COM  *    logical Eq (0)-catastrophic,
939517SBill.Taylor@Sun.COM  *		 (1)-error completions,
949517SBill.Taylor@Sun.COM  *		 (2)-misc events and
959517SBill.Taylor@Sun.COM  *		 (3)-completions
969517SBill.Taylor@Sun.COM  */
979517SBill.Taylor@Sun.COM 
989517SBill.Taylor@Sun.COM #define	HERMON_NUM_EQ_SHIFT		0x9 /* hermon has 512 EQs available */
999517SBill.Taylor@Sun.COM #define	HERMON_NUM_EQ			(1 << HERMON_NUM_EQ_SHIFT)
1009517SBill.Taylor@Sun.COM 
1019517SBill.Taylor@Sun.COM #define	HERMON_NUM_EQ_USED		4  		/* four per domain */
1029517SBill.Taylor@Sun.COM #define	HERMON_DEFAULT_EQ_SZ_SHIFT	0xd		/* 8192 entries/EQ */
1039517SBill.Taylor@Sun.COM #define	HERMON_EQ_CI_MASK		0xFFFFFF 	/* low 24 bits */
1049517SBill.Taylor@Sun.COM 
1059517SBill.Taylor@Sun.COM /*
1069517SBill.Taylor@Sun.COM  * These are the defines for the Hermon event types.  They are specified by
1079517SBill.Taylor@Sun.COM  * the Hermon PRM.  Below are the "event type masks" in
1089517SBill.Taylor@Sun.COM  * which each event type corresponds to one of the 64-bits in the mask.
1099517SBill.Taylor@Sun.COM  */
1109517SBill.Taylor@Sun.COM 
1119517SBill.Taylor@Sun.COM /* Note:  In order per PRM listing */
1129517SBill.Taylor@Sun.COM /* Completion Events */
1139517SBill.Taylor@Sun.COM #define	HERMON_EVT_COMPLETION			0x00
1149517SBill.Taylor@Sun.COM /* IB Affiliated Asynch Events */
1159517SBill.Taylor@Sun.COM #define	HERMON_EVT_PATH_MIGRATED		0x01
1169517SBill.Taylor@Sun.COM #define	HERMON_EVT_COMM_ESTABLISHED		0x02
1179517SBill.Taylor@Sun.COM #define	HERMON_EVT_SEND_QUEUE_DRAINED		0x03
118*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_SRQ_LAST_WQE_REACHED		0x13
1199517SBill.Taylor@Sun.COM #define	HERMON_EVT_SRQ_LIMIT			0x14
1209517SBill.Taylor@Sun.COM /* QP Affiliated Asynch Event */
1219517SBill.Taylor@Sun.COM #define	HERMON_EVT_CQ_ERRORS			0x04 /* overrun, protection */
1229517SBill.Taylor@Sun.COM #define	HERMON_EVT_LOCAL_WQ_CAT_ERROR		0x05
1239517SBill.Taylor@Sun.COM #define	HERMON_EVT_LOCAL_QPC_CAT_ERROR		0x06
1249517SBill.Taylor@Sun.COM #define	HERMON_EVT_PATH_MIGRATE_FAILED		0x07
1259517SBill.Taylor@Sun.COM #define	HERMON_EVT_INV_REQ_LOCAL_WQ_ERROR	0x10
1269517SBill.Taylor@Sun.COM #define	HERMON_EVT_LOCAL_ACC_VIO_WQ_ERROR	0x11
1279517SBill.Taylor@Sun.COM #define	HERMON_EVT_SRQ_CATASTROPHIC_ERROR	0x12
1289517SBill.Taylor@Sun.COM #define	HERMON_EVT_SPOOF_FAIL			0x16	/* enet only */
129*12965SWilliam.Taylor@Oracle.COM /* FEXCH Errors (QP Affiliated) */
130*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_FEXCH_ERROR			0x0B
131*12965SWilliam.Taylor@Oracle.COM 
1329517SBill.Taylor@Sun.COM /* Unaffiliated Asynch Events/Errors */
1339517SBill.Taylor@Sun.COM #define	HERMON_EVT_PORT_STATE_CHANGE		0x09
1349517SBill.Taylor@Sun.COM #define	HERMON_EVT_GPIO				0x15
1359517SBill.Taylor@Sun.COM /* Command Interface */
1369517SBill.Taylor@Sun.COM #define	HERMON_EVT_COMMAND_INTF_COMP		0x0A
1379517SBill.Taylor@Sun.COM /* Miscellaneous */
1389517SBill.Taylor@Sun.COM #define	HERMON_EVT_LOCAL_CAT_ERROR		0x08
1399517SBill.Taylor@Sun.COM 
1409517SBill.Taylor@Sun.COM 
1419517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_COMPLETION		\
1429517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_COMPLETION)
1439517SBill.Taylor@Sun.COM 
1449517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_PATH_MIGRATED		\
1459517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_PATH_MIGRATED)
1469517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_COMM_ESTABLISHED		\
1479517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_COMM_ESTABLISHED)
1489517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_SEND_QUEUE_DRAINED	\
1499517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_SEND_QUEUE_DRAINED)
1509517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_SRQ_LAST_WQE_REACHED	\
1519517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_SRQ_LAST_WQE_REACHED)
152*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_SRQ_LIMIT		\
1539517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_SRQ_LIMIT)
1549517SBill.Taylor@Sun.COM 
155*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_CQ_ERRORS		\
1569517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_CQ_ERRORS)
1579517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_LOCAL_WQ_CAT_ERROR	\
1589517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_LOCAL_WQ_CAT_ERROR)
1599517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_LOCAL_QPC_CAT_ERROR	\
1609517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_LOCAL_QPC_CAT_ERROR)
1619517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_PATH_MIGRATE_FAILED	\
1629517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_PATH_MIGRATE_FAILED)
1639517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_INV_REQ_LOCAL_WQ_ERROR	\
1649517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_INV_REQ_LOCAL_WQ_ERROR)
1659517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_LOCAL_ACC_VIO_WQ_ERROR	\
1669517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_LOCAL_ACC_VIO_WQ_ERROR)
1679517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_SRQ_CATASTROPHIC_ERROR	\
1689517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_SRQ_CATASTROPHIC_ERROR)
169*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_SPOOF_FAIL		\
1709517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_SPOOF_FAIL)
1719517SBill.Taylor@Sun.COM 
172*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_FEXCH_ERROR		\
173*12965SWilliam.Taylor@Oracle.COM 	(1 << HERMON_EVT_FEXCH_ERROR)
174*12965SWilliam.Taylor@Oracle.COM 
175*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_PORT_STATE_CHANGE	\
1769517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_PORT_STATE_CHANGE)
177*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_GPIO			\
1789517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_GPIO)
1799517SBill.Taylor@Sun.COM 
180*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EVT_MSK_COMMAND_INTF_COMP	\
1819517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_COMMAND_INTF_COMP)
1829517SBill.Taylor@Sun.COM 
1839517SBill.Taylor@Sun.COM #define	HERMON_EVT_MSK_LOCAL_CAT_ERROR		\
1849517SBill.Taylor@Sun.COM 	(1 << HERMON_EVT_LOCAL_CAT_ERROR)
1859517SBill.Taylor@Sun.COM 
1869517SBill.Taylor@Sun.COM 
1879517SBill.Taylor@Sun.COM #define	HERMON_EVT_NO_MASK			0
1889517SBill.Taylor@Sun.COM 
189*12965SWilliam.Taylor@Oracle.COM /* For now, "catchall" is just HERMON_EVT_LOCAL_QPC_CAT_ERROR. */
1909517SBill.Taylor@Sun.COM #define	HERMON_EVT_CATCHALL_MASK		0x0040
191*12965SWilliam.Taylor@Oracle.COM 
1929517SBill.Taylor@Sun.COM /*
1939517SBill.Taylor@Sun.COM  * The last defines are used by hermon_eqe_sync() to indicate whether or not
1949517SBill.Taylor@Sun.COM  * to force a DMA sync.  The case for forcing a DMA sync on a EQE comes from
1959517SBill.Taylor@Sun.COM  * the possibility that we could receive an interrupt, read of the ECR, and
1969517SBill.Taylor@Sun.COM  * have each of these operations complete successfully _before_ the hardware
1979517SBill.Taylor@Sun.COM  * has finished its DMA to the event queue.
1989517SBill.Taylor@Sun.COM  */
1999517SBill.Taylor@Sun.COM #define	HERMON_EQ_SYNC_NORMAL			0x0
2009517SBill.Taylor@Sun.COM #define	HERMON_EQ_SYNC_FORCE			0x1
2019517SBill.Taylor@Sun.COM 
2029517SBill.Taylor@Sun.COM /*
2039517SBill.Taylor@Sun.COM  * Catastrophic error values.  In case of a catastrophic error, the following
2049517SBill.Taylor@Sun.COM  * errors are reported in a special buffer space.  The buffer location is
2059517SBill.Taylor@Sun.COM  * returned from a QUERY_FW command.  We check that buffer against these error
2069517SBill.Taylor@Sun.COM  * values to determine what kind of error occurred.
2079517SBill.Taylor@Sun.COM  */
2089517SBill.Taylor@Sun.COM #define	HERMON_CATASTROPHIC_INTERNAL_ERROR		0x0
2099517SBill.Taylor@Sun.COM #define	HERMON_CATASTROPHIC_UPLINK_BUS_ERROR	0x3
2109517SBill.Taylor@Sun.COM #define	HERMON_CATASTROPHIC_INTERNAL_PARITY_ERROR	0x5
2119517SBill.Taylor@Sun.COM /* Presumably, this is no longer supported */
2129517SBill.Taylor@Sun.COM #define	HERMON_CATASTROPHIC_DDR_DATA_ERROR		0x4
2139517SBill.Taylor@Sun.COM 
2149517SBill.Taylor@Sun.COM /*
2159517SBill.Taylor@Sun.COM  * This define is the 'enable' flag used when programming the MSI number
2169517SBill.Taylor@Sun.COM  * into event queues.  It is or'd with the MSI number and the result is
2179517SBill.Taylor@Sun.COM  * written into the EX context.
2189517SBill.Taylor@Sun.COM  */
2199517SBill.Taylor@Sun.COM 
2209517SBill.Taylor@Sun.COM #define	HERMON_EQ_MSI_ENABLE_FLAG	0x200  /* bit 9 of 0x14 in EQC */
2219517SBill.Taylor@Sun.COM 
2229517SBill.Taylor@Sun.COM /*
2239517SBill.Taylor@Sun.COM  * The following#defines are for the EQ's in the UAR pages.  In Hermon, the
2249517SBill.Taylor@Sun.COM  * arm mechanism is new - in the first 128 (that is, 0 - 127) UAR pages, which
2259517SBill.Taylor@Sun.COM  * are reserved, the only useful thing is the EQ registers.  In turn those
2269517SBill.Taylor@Sun.COM  * locations are ignored in any other UAR page.
2279517SBill.Taylor@Sun.COM  *
2289517SBill.Taylor@Sun.COM  * The driver writes to the with the MSB bit set to arm it, and the current
2299517SBill.Taylor@Sun.COM  * CI (consumer index).
2309517SBill.Taylor@Sun.COM  */
2319517SBill.Taylor@Sun.COM #define	G_EQ0		0x0800
2329517SBill.Taylor@Sun.COM #define	G_EQ1		0x0808
2339517SBill.Taylor@Sun.COM #define	G_EQ2		0x0810
2349517SBill.Taylor@Sun.COM #define	G_EQ3		0x0818
2359517SBill.Taylor@Sun.COM 
2369517SBill.Taylor@Sun.COM /*
2379517SBill.Taylor@Sun.COM  * They should be written as a 32-bit entity:
2389517SBill.Taylor@Sun.COM  * bit 31:  Arm (if set)
2399517SBill.Taylor@Sun.COM  * bit 23:0 Consumer Index
2409517SBill.Taylor@Sun.COM  */
2419517SBill.Taylor@Sun.COM #define	EQ_ARM_BIT	0x80000000
2429517SBill.Taylor@Sun.COM 
2439517SBill.Taylor@Sun.COM /*
2449517SBill.Taylor@Sun.COM  * The register to be written is:
2459517SBill.Taylor@Sun.COM  * 	(EQ_num / 4) == UAR page
2469517SBill.Taylor@Sun.COM  *	(EQ_NUM % 4) == G_EQx
2479517SBill.Taylor@Sun.COM  */
2489517SBill.Taylor@Sun.COM 
2499517SBill.Taylor@Sun.COM #define	ARM_EQ_INDEX(eq) \
2509517SBill.Taylor@Sun.COM 	(((eq >> 2) * PAGESIZE) + (0x0800 + ((eq & 0x03) * 0x08)))
2519517SBill.Taylor@Sun.COM 
2529517SBill.Taylor@Sun.COM 
2539517SBill.Taylor@Sun.COM /*
2549517SBill.Taylor@Sun.COM  * The hermon_sw_eq_s structure is also referred to using the "hermon_eqhdl_t"
2559517SBill.Taylor@Sun.COM  * typedef (see hermon_typedef.h).  It encodes all the information necessary
2569517SBill.Taylor@Sun.COM  * to track the various resources needed to allocate, initialize, poll, and
2579517SBill.Taylor@Sun.COM  * (later) free an event queue (EQ).
2589517SBill.Taylor@Sun.COM  *
2599517SBill.Taylor@Sun.COM  * Specifically, it has a consumer index and a lock to ensure single threaded
2609517SBill.Taylor@Sun.COM  * access to it.  It has pointers to the various resources allocated for the
2619517SBill.Taylor@Sun.COM  * event queue, i.e. an EQC resource and the memory for the event queue
262*12965SWilliam.Taylor@Oracle.COM  * itself.  It has flags to indicate which type of event class(es) the EQ
263*12965SWilliam.Taylor@Oracle.COM  * has been mapped to (eq_evttypemask).
2649517SBill.Taylor@Sun.COM  *
2659517SBill.Taylor@Sun.COM  * It also has a pointer to the associated MR handle (for the mapped queue
2669517SBill.Taylor@Sun.COM  * memory) and a function pointer that points to the handler that should
2679517SBill.Taylor@Sun.COM  * be called when the corresponding EQ has fired.  Note: the "eq_func"
2689517SBill.Taylor@Sun.COM  * handler takes a Hermon softstate pointer, a pointer to the EQ handle, and a
2699517SBill.Taylor@Sun.COM  * pointer to a generic hermon_hw_eqe_t structure.  It is up to the "eq_func"
2709517SBill.Taylor@Sun.COM  * handler function to determine what specific type of event is being passed.
2719517SBill.Taylor@Sun.COM  *
2729517SBill.Taylor@Sun.COM  * Lastly, we have the always necessary backpointer to the resource for the
2739517SBill.Taylor@Sun.COM  * EQ handle structure itself.
2749517SBill.Taylor@Sun.COM  */
2759517SBill.Taylor@Sun.COM struct hermon_sw_eq_s {
2769517SBill.Taylor@Sun.COM 	uint32_t		eq_consindx;
2779517SBill.Taylor@Sun.COM 	uint32_t		eq_eqnum;
2789517SBill.Taylor@Sun.COM 	hermon_hw_eqe_t		*eq_buf;
279*12965SWilliam.Taylor@Oracle.COM 	uint32_t		*eq_doorbell;
2809517SBill.Taylor@Sun.COM 	hermon_mrhdl_t		eq_mrhdl;
2819517SBill.Taylor@Sun.COM 	uint32_t		eq_bufsz;
2829517SBill.Taylor@Sun.COM 	uint32_t		eq_log_eqsz;
2839517SBill.Taylor@Sun.COM 	uint_t			eq_evttypemask;
2849517SBill.Taylor@Sun.COM 	hermon_rsrc_t		*eq_eqcrsrcp;
2859517SBill.Taylor@Sun.COM 	hermon_rsrc_t		*eq_rsrcp;
2869517SBill.Taylor@Sun.COM 	int (*eq_func)(hermon_state_t *state, hermon_eqhdl_t eq,
2879517SBill.Taylor@Sun.COM 	    hermon_hw_eqe_t *eqe);
2889517SBill.Taylor@Sun.COM 
2899517SBill.Taylor@Sun.COM 	struct hermon_qalloc_info_s eq_eqinfo;
2909517SBill.Taylor@Sun.COM };
2919517SBill.Taylor@Sun.COM 
2929517SBill.Taylor@Sun.COM int hermon_eq_init_all(hermon_state_t *state);
2939517SBill.Taylor@Sun.COM int hermon_eq_fini_all(hermon_state_t *state);
2949517SBill.Taylor@Sun.COM int hermon_eq_arm_all(hermon_state_t *state);
2959517SBill.Taylor@Sun.COM uint_t hermon_isr(caddr_t arg1, caddr_t arg2);
2969517SBill.Taylor@Sun.COM void hermon_eq_doorbell(hermon_state_t *state, uint32_t eq_cmd, uint32_t eqn,
2979517SBill.Taylor@Sun.COM     uint32_t eq_param);
2989517SBill.Taylor@Sun.COM void hermon_eq_overflow_handler(hermon_state_t *state, hermon_eqhdl_t eq,
2999517SBill.Taylor@Sun.COM     hermon_hw_eqe_t *eqe);
300*12965SWilliam.Taylor@Oracle.COM void hermon_eq_reset_uar_baseaddr(hermon_state_t *state);
3019517SBill.Taylor@Sun.COM 
3029517SBill.Taylor@Sun.COM #ifdef __cplusplus
3039517SBill.Taylor@Sun.COM }
3049517SBill.Taylor@Sun.COM #endif
3059517SBill.Taylor@Sun.COM 
3069517SBill.Taylor@Sun.COM #endif	/* _SYS_IB_ADAPTERS_HERMON_EVENT_H */
307