182527734SSukumar Swaminathan /*
282527734SSukumar Swaminathan  * CDDL HEADER START
382527734SSukumar Swaminathan  *
482527734SSukumar Swaminathan  * The contents of this file are subject to the terms of the
582527734SSukumar Swaminathan  * Common Development and Distribution License (the "License").
682527734SSukumar Swaminathan  * You may not use this file except in compliance with the License.
782527734SSukumar Swaminathan  *
8*8f23e9faSHans Rosenfeld  * You can obtain a copy of the license at
9*8f23e9faSHans Rosenfeld  * http://www.opensource.org/licenses/cddl1.txt.
1082527734SSukumar Swaminathan  * See the License for the specific language governing permissions
1182527734SSukumar Swaminathan  * and limitations under the License.
1282527734SSukumar Swaminathan  *
1382527734SSukumar Swaminathan  * When distributing Covered Code, include this CDDL HEADER in each
1482527734SSukumar Swaminathan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1582527734SSukumar Swaminathan  * If applicable, add the following below this CDDL HEADER, with the
1682527734SSukumar Swaminathan  * fields enclosed by brackets "[]" replaced with your own identifying
1782527734SSukumar Swaminathan  * information: Portions Copyright [yyyy] [name of copyright owner]
1882527734SSukumar Swaminathan  *
1982527734SSukumar Swaminathan  * CDDL HEADER END
2082527734SSukumar Swaminathan  */
2182527734SSukumar Swaminathan 
2282527734SSukumar Swaminathan /*
23*8f23e9faSHans Rosenfeld  * Copyright (c) 2004-2011 Emulex. All rights reserved.
2482527734SSukumar Swaminathan  * Use is subject to license terms.
2582527734SSukumar Swaminathan  */
2682527734SSukumar Swaminathan 
2782527734SSukumar Swaminathan #ifndef _EMLXS_EVENTS_H
2882527734SSukumar Swaminathan #define	_EMLXS_EVENTS_H
2982527734SSukumar Swaminathan 
3082527734SSukumar Swaminathan #ifdef	__cplusplus
3182527734SSukumar Swaminathan extern "C" {
3282527734SSukumar Swaminathan #endif
3382527734SSukumar Swaminathan 
3482527734SSukumar Swaminathan extern void emlxs_null_func();
3582527734SSukumar Swaminathan 
3682527734SSukumar Swaminathan #ifdef DEF_EVENT_STRUCT
3782527734SSukumar Swaminathan 
3882527734SSukumar Swaminathan #define	DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \
3982527734SSukumar Swaminathan 	extern void _destroy(); \
4082527734SSukumar Swaminathan 	emlxs_event_t _name = {_mask, _label, _timeout, _destroy};
4182527734SSukumar Swaminathan 
4282527734SSukumar Swaminathan #else
4382527734SSukumar Swaminathan 
4482527734SSukumar Swaminathan #define	DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \
4582527734SSukumar Swaminathan 	extern void _destroy(); \
4682527734SSukumar Swaminathan 	extern emlxs_event_t _name;
4782527734SSukumar Swaminathan 
4882527734SSukumar Swaminathan #endif	/* DEF_EVENT_STRUCT */
4982527734SSukumar Swaminathan 
5082527734SSukumar Swaminathan 
5182527734SSukumar Swaminathan /* Event Mask Bits */
5282527734SSukumar Swaminathan #define	EVT_LINK		0x00000001	/* FC_REG_LINK_EVENT */
5382527734SSukumar Swaminathan #define	EVT_RSCN		0x00000002	/* FC_REG_RSCN_EVENT */
5482527734SSukumar Swaminathan #define	EVT_CT			0x00000004	/* FC_REG_CT_EVENT   */
5582527734SSukumar Swaminathan #define	EVT_MPULSE		0x00000008	/* FC_REG_MULTIPULSE_EVENT */
5682527734SSukumar Swaminathan #define	EVT_DUMP		0x00000010	/* FC_REG_DUMP_EVENT */
5782527734SSukumar Swaminathan #define	EVT_TEMP		0x00000020	/* FC_REG_TEMP_EVENT */
5882527734SSukumar Swaminathan #define	EVT_VPORTRSCN		0x00000040	/* FC_REG_VPORTRSCN_EVENT */
5982527734SSukumar Swaminathan #define	EVT_ASYNC		0x00000080	/* FC_REG_ASYNC_EVENT */
6082527734SSukumar Swaminathan 
6182527734SSukumar Swaminathan #ifdef SAN_DIAG_SUPPORT
6282527734SSukumar Swaminathan #define	EVT_SD_ELS		0x00001000	/* FC_REG_SD_ELS_EVENT */
6382527734SSukumar Swaminathan #define	EVT_SD_FABRIC		0x00002000	/* FC_REG_SD_FABRIC_EVENT */
6482527734SSukumar Swaminathan #define	EVT_SD_SCSI		0x00004000	/* FC_REG_SD_SCSI_EVENT */
6582527734SSukumar Swaminathan #define	EVT_SD_BOARD		0x00008000	/* FC_REG_SD_BOARD_EVENT */
6682527734SSukumar Swaminathan #endif /* SAN_DIAG_SUPPORT */
6782527734SSukumar Swaminathan 
6882527734SSukumar Swaminathan #define	EVT_FCOE		0x80000000	/* FC_REG_FCOE_EVENT */
6982527734SSukumar Swaminathan 
7082527734SSukumar Swaminathan 
7182527734SSukumar Swaminathan typedef struct emlxs_event
7282527734SSukumar Swaminathan {
7382527734SSukumar Swaminathan 	uint32_t	mask;
7482527734SSukumar Swaminathan 	char		label[64];
7582527734SSukumar Swaminathan 	uint32_t 	timeout;
7682527734SSukumar Swaminathan 	void		(*destroy)();
7782527734SSukumar Swaminathan 
7882527734SSukumar Swaminathan } emlxs_event_t;
7982527734SSukumar Swaminathan 
8082527734SSukumar Swaminathan 
8182527734SSukumar Swaminathan #define	EMLXS_EVENT_PERIOD	5
8282527734SSukumar Swaminathan #define	EVT_TIMEOUT_DEFAULT	60
8382527734SSukumar Swaminathan #define	EVT_TIMEOUT_NEVER	0
8482527734SSukumar Swaminathan #define	EVT_DESTROY_DEFAULT	emlxs_null_func
8582527734SSukumar Swaminathan 
8682527734SSukumar Swaminathan 
8782527734SSukumar Swaminathan /* EVENT defines */
8882527734SSukumar Swaminathan DEFINE_EVT(emlxs_link_event, \
8982527734SSukumar Swaminathan 	"LINK", \
9082527734SSukumar Swaminathan 	EVT_LINK,
9182527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
9282527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
9382527734SSukumar Swaminathan 
9482527734SSukumar Swaminathan DEFINE_EVT(emlxs_rscn_event, \
9582527734SSukumar Swaminathan 	"RSCN", \
9682527734SSukumar Swaminathan 	EVT_RSCN,
9782527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
9882527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
9982527734SSukumar Swaminathan 
10082527734SSukumar Swaminathan DEFINE_EVT(emlxs_vportrscn_event, \
10182527734SSukumar Swaminathan 	"VPORT RSCN", \
10282527734SSukumar Swaminathan 	EVT_VPORTRSCN,
10382527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
10482527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
10582527734SSukumar Swaminathan 
10682527734SSukumar Swaminathan DEFINE_EVT(emlxs_ct_event, \
10782527734SSukumar Swaminathan 	"CT", \
10882527734SSukumar Swaminathan 	EVT_CT,
10982527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
11082527734SSukumar Swaminathan 	emlxs_ct_event_destroy)
11182527734SSukumar Swaminathan 
11282527734SSukumar Swaminathan DEFINE_EVT(emlxs_dump_event, \
11382527734SSukumar Swaminathan 	"DUMP", \
11482527734SSukumar Swaminathan 	EVT_DUMP,
11582527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
11682527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
11782527734SSukumar Swaminathan 
11882527734SSukumar Swaminathan DEFINE_EVT(emlxs_temp_event, \
11982527734SSukumar Swaminathan 	"TEMP", \
12082527734SSukumar Swaminathan 	EVT_TEMP,
12182527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
12282527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
12382527734SSukumar Swaminathan 
12482527734SSukumar Swaminathan DEFINE_EVT(emlxs_fcoe_event, \
12582527734SSukumar Swaminathan 	"FCOE", \
12682527734SSukumar Swaminathan 	EVT_FCOE,
12782527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
12882527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
12982527734SSukumar Swaminathan 
13082527734SSukumar Swaminathan DEFINE_EVT(emlxs_async_event, \
13182527734SSukumar Swaminathan 	"ASYNC", \
13282527734SSukumar Swaminathan 	EVT_ASYNC,
13382527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
13482527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
13582527734SSukumar Swaminathan 
13682527734SSukumar Swaminathan #ifdef SAN_DIAG_SUPPORT
13782527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_els_event, \
13882527734SSukumar Swaminathan 	"SD_ELS", \
13982527734SSukumar Swaminathan 	EVT_SD_ELS,
14082527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
14182527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
14282527734SSukumar Swaminathan 
14382527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_fabric_event, \
14482527734SSukumar Swaminathan 	"SD_FC", \
14582527734SSukumar Swaminathan 	EVT_SD_FABRIC,
14682527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
14782527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
14882527734SSukumar Swaminathan 
14982527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_scsi_event, \
15082527734SSukumar Swaminathan 	"SD_SCSI", \
15182527734SSukumar Swaminathan 	EVT_SD_SCSI,
15282527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
15382527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
15482527734SSukumar Swaminathan 
15582527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_board_event, \
15682527734SSukumar Swaminathan 	"SD_BOARD", \
15782527734SSukumar Swaminathan 	EVT_SD_BOARD,
15882527734SSukumar Swaminathan 	EVT_TIMEOUT_DEFAULT,
15982527734SSukumar Swaminathan 	EVT_DESTROY_DEFAULT)
16082527734SSukumar Swaminathan #endif /* SAN_DIAG_SUPPORT */
16182527734SSukumar Swaminathan 
162e2ca2865SSukumar Swaminathan #define	MAX_LOG_INFO_LENGTH	96
163e2ca2865SSukumar Swaminathan 
164e2ca2865SSukumar Swaminathan typedef struct emlxs_event_entry
165e2ca2865SSukumar Swaminathan {
166e2ca2865SSukumar Swaminathan 	struct emlxs_event_entry	*next;
167e2ca2865SSukumar Swaminathan 	struct emlxs_event_entry	*prev;
168e2ca2865SSukumar Swaminathan 
169e2ca2865SSukumar Swaminathan 	uint32_t	id;
170e2ca2865SSukumar Swaminathan 	uint32_t	timestamp;
171e2ca2865SSukumar Swaminathan 	uint32_t	timer;
172e2ca2865SSukumar Swaminathan 
173e2ca2865SSukumar Swaminathan 	emlxs_event_t	*evt;
174e2ca2865SSukumar Swaminathan 
175e2ca2865SSukumar Swaminathan 	void *port;
176e2ca2865SSukumar Swaminathan 
177e2ca2865SSukumar Swaminathan 	void		*bp;			/* Context buffer */
178e2ca2865SSukumar Swaminathan 						/* pointer */
179e2ca2865SSukumar Swaminathan 	uint32_t	size;			/* Context buffer */
180e2ca2865SSukumar Swaminathan 						/* size */
181e2ca2865SSukumar Swaminathan 	uint32_t	flag;
182e2ca2865SSukumar Swaminathan #define	EMLXS_DFC_EVENT_DONE	0x00000001
183e2ca2865SSukumar Swaminathan #define	EMLXS_SD_EVENT_DONE	0x00000002
184e2ca2865SSukumar Swaminathan 
185e2ca2865SSukumar Swaminathan } emlxs_event_entry_t;
186e2ca2865SSukumar Swaminathan 
187e2ca2865SSukumar Swaminathan 
188e2ca2865SSukumar Swaminathan typedef struct emlxs_event_queue
189e2ca2865SSukumar Swaminathan {
190e2ca2865SSukumar Swaminathan 	kmutex_t		lock;
191e2ca2865SSukumar Swaminathan 	kcondvar_t		lock_cv;
192e2ca2865SSukumar Swaminathan 
193e2ca2865SSukumar Swaminathan 	uint32_t		last_id[32]; /* per event */
194e2ca2865SSukumar Swaminathan 	uint32_t		next_id;
195e2ca2865SSukumar Swaminathan 	uint32_t		count;
196e2ca2865SSukumar Swaminathan 
197e2ca2865SSukumar Swaminathan 	emlxs_event_entry_t	*first;
198e2ca2865SSukumar Swaminathan 	emlxs_event_entry_t	*last;
199e2ca2865SSukumar Swaminathan 
200e2ca2865SSukumar Swaminathan } emlxs_event_queue_t;
201e2ca2865SSukumar Swaminathan 
20282527734SSukumar Swaminathan #ifdef	__cplusplus
20382527734SSukumar Swaminathan }
20482527734SSukumar Swaminathan #endif
20582527734SSukumar Swaminathan 
20682527734SSukumar Swaminathan #endif	/* _EMLXS_EVENTS_H */
207