xref: /illumos-gate/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_msg.h (revision 93c20f2609342fd05f6625f16dfcb9348e7977f2)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2008 Emulex.  All rights reserved.
24  * Use is subject to License terms.
25  */
26 
27 
28 #ifndef _EMLXS_MSG_H
29 #define	_EMLXS_MSG_H
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 /* Define the actual driver messages */
36 #include <emlxs_messages.h>
37 
38 /* File identification numbers */
39 #define	EMLXS_MSG_DEF(_number)    static const uint32_t _FILENO_ = _number
40 #define	EMLXS_CLOCK_C		1
41 #define	EMLXS_DIAG_C		2
42 #define	EMLXS_DOWNLOAD_C	3
43 #define	EMLXS_ELS_C		4
44 #define	EMLXS_FCP_C		5
45 #define	EMLXS_HBA_C		6
46 #define	EMLXS_MBOX_C		7
47 #define	EMLXS_MEM_C		8
48 #define	EMLXS_NODE_C		9
49 #define	EMLXS_PKT_C		10
50 #define	EMLXS_SOLARIS_C		11
51 #define	EMLXS_MSG_C		12
52 #define	EMLXS_IP_C		13
53 #define	EMLXS_THREAD_C		14
54 #define	EMLXS_DFC_C		15
55 #define	EMLXS_DHCHAP_C		16
56 #define	EMLXS_FCT_C		17
57 
58 
59 #define	EMLXS_CONTEXT		port, _FILENO_, __LINE__, 0, 0
60 #define	EMLXS_CONTEXT_BP	port, _FILENO_, __LINE__
61 
62 #define	EMLXS_MSGF emlxs_msg_printf
63 
64 #ifdef EMLXS_DBG
65 #define	EMLXS_DEBUGF emlxs_msg_printf
66 #else	/* EMLXS_DBG */
67 #define	EMLXS_DEBUGF
68 #endif	/* EMLXS_DBG */
69 
70 #define	MAX_LOG_INFO_LENGTH	96
71 
72 typedef struct emlxs_msg_entry {
73 	uint32_t id;	/* entry id  */
74 	clock_t time;	/* timestamp */
75 
76 	emlxs_msg_t *msg;	/* Msg pointer */
77 
78 	uint32_t vpi;
79 	uint32_t instance;	/* Adapter instance */
80 	uint32_t fileno;	/* File number */
81 	uint32_t line;	/* Line number */
82 
83 	void *bp;	/* Context buffer pointer */
84 	uint32_t size;	/* Context buffer size */
85 
86 	char buffer[MAX_LOG_INFO_LENGTH];	/* Additional info buffer */
87 
88 } emlxs_msg_entry_t;
89 
90 
91 typedef struct emlxs_msg_log {
92 	kmutex_t lock;
93 	kcondvar_t lock_cv;	/* used for events */
94 
95 	clock_t start_time;
96 	uint32_t instance;
97 	uint32_t flags;
98 
99 	uint32_t size;	/* Maximum entries in circular buffer */
100 	uint32_t count;	/* Total number of entries recorded */
101 	uint32_t next;	/* Next index into circular buffer */
102 
103 	uint32_t repeat;	/* repeat counter */
104 
105 	uint32_t event_id[32];	/* Last id logged for an event */
106 
107 	emlxs_msg_entry_t *entry;	/* pointer to entry buffer */
108 
109 } emlxs_msg_log_t;
110 
111 #ifdef	__cplusplus
112 }
113 #endif
114 
115 #endif	/* _EMLXS_MSG_H */
116