1fcf3ce44SJohn Forte /*
2fcf3ce44SJohn Forte  * CDDL HEADER START
3fcf3ce44SJohn Forte  *
4fcf3ce44SJohn Forte  * The contents of this file are subject to the terms of the
5fcf3ce44SJohn Forte  * Common Development and Distribution License (the "License").
6fcf3ce44SJohn Forte  * You may not use this file except in compliance with the License.
7fcf3ce44SJohn Forte  *
8*8f23e9faSHans Rosenfeld  * You can obtain a copy of the license at
9*8f23e9faSHans Rosenfeld  * http://www.opensource.org/licenses/cddl1.txt.
10fcf3ce44SJohn Forte  * See the License for the specific language governing permissions
11fcf3ce44SJohn Forte  * and limitations under the License.
12fcf3ce44SJohn Forte  *
13fcf3ce44SJohn Forte  * When distributing Covered Code, include this CDDL HEADER in each
14fcf3ce44SJohn Forte  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fcf3ce44SJohn Forte  * If applicable, add the following below this CDDL HEADER, with the
16fcf3ce44SJohn Forte  * fields enclosed by brackets "[]" replaced with your own identifying
17fcf3ce44SJohn Forte  * information: Portions Copyright [yyyy] [name of copyright owner]
18fcf3ce44SJohn Forte  *
19fcf3ce44SJohn Forte  * CDDL HEADER END
20fcf3ce44SJohn Forte  */
21fcf3ce44SJohn Forte 
22fcf3ce44SJohn Forte /*
23*8f23e9faSHans Rosenfeld  * Copyright (c) 2004-2012 Emulex. All rights reserved.
2482527734SSukumar Swaminathan  * Use is subject to license terms.
25fcf3ce44SJohn Forte  */
26fcf3ce44SJohn Forte 
27fcf3ce44SJohn Forte #ifndef _EMLXS_FCIO_H
28fcf3ce44SJohn Forte #define	_EMLXS_FCIO_H
29fcf3ce44SJohn Forte 
30fcf3ce44SJohn Forte #ifdef	__cplusplus
31fcf3ce44SJohn Forte extern "C" {
32fcf3ce44SJohn Forte #endif
33fcf3ce44SJohn Forte 
34fcf3ce44SJohn Forte /*
35fcf3ce44SJohn Forte  * FCIO_REV: 1 - Initial implementation 2 - Added EMLXS_GET_FCIO_REV support
36fcf3ce44SJohn Forte  */
37291a2b48SSukumar Swaminathan #define	FCIO_REV	2
38fcf3ce44SJohn Forte 
39fcf3ce44SJohn Forte 
40fcf3ce44SJohn Forte /* Emulex ULP Diag Codes */
41fcf3ce44SJohn Forte #define	EMLXS_DIAG			('E'<< 8)
42fcf3ce44SJohn Forte 
43fcf3ce44SJohn Forte #define	EMLXS_DIAG_BIU			(EMLXS_DIAG | 100)
44fcf3ce44SJohn Forte #define	EMLXS_DIAG_POST			(EMLXS_DIAG | 101)
45fcf3ce44SJohn Forte #define	EMLXS_DIAG_ECHO			(EMLXS_DIAG | 102)
46fcf3ce44SJohn Forte 
47fcf3ce44SJohn Forte #define	EMLXS_PARM_GET_NUM		(EMLXS_DIAG | 200)
48fcf3ce44SJohn Forte #define	EMLXS_PARM_GET_LIST		(EMLXS_DIAG | 201)
49fcf3ce44SJohn Forte #define	EMLXS_PARM_GET			(EMLXS_DIAG | 202)
50fcf3ce44SJohn Forte #define	EMLXS_PARM_SET			(EMLXS_DIAG | 203)
51fcf3ce44SJohn Forte #define	EMLXS_GET_BOOT_REV		(EMLXS_DIAG | 204)
52fcf3ce44SJohn Forte #define	EMLXS_DOWNLOAD_BOOT		(EMLXS_DIAG | 205)
53fcf3ce44SJohn Forte #define	EMLXS_DOWNLOAD_CFL		(EMLXS_DIAG | 206)
54291a2b48SSukumar Swaminathan #define	EMLXS_VPD_GET   		(EMLXS_DIAG | 207)
55291a2b48SSukumar Swaminathan #define	EMLXS_GET_FCIO_REV   		(EMLXS_DIAG | 208)
56fcf3ce44SJohn Forte #define	EMLXS_SET_BOOT_STATE_old	(EMLXS_DIAG | 209)
57fcf3ce44SJohn Forte #define	EMLXS_GET_BOOT_STATE_old	(EMLXS_DIAG | 210)
58fcf3ce44SJohn Forte #define	EMLXS_DFC_COMMAND		(EMLXS_DIAG | 211)
59fcf3ce44SJohn Forte #define	EMLXS_SET_BOOT_STATE		(EMLXS_DIAG | 212)
60fcf3ce44SJohn Forte #define	EMLXS_GET_BOOT_STATE		(EMLXS_DIAG | 213)
61*8f23e9faSHans Rosenfeld #define	EMLXS_GET_DFC_REV		(EMLXS_DIAG | 214)
62*8f23e9faSHans Rosenfeld #define	EMLXS_PHY_GET			(EMLXS_DIAG | 215)
63*8f23e9faSHans Rosenfeld #define	EMLXS_SET_THROTTLE		(EMLXS_DIAG | 216)
64*8f23e9faSHans Rosenfeld #define	EMLXS_GET_THROTTLE		(EMLXS_DIAG | 217)
65*8f23e9faSHans Rosenfeld #define	EMLXS_VPD_GET_V2   		(EMLXS_DIAG | 218)
66fcf3ce44SJohn Forte 
6782527734SSukumar Swaminathan #define	EMLXS_BAR_IO			(EMLXS_DIAG | 253)
68291a2b48SSukumar Swaminathan #define	EMLXS_TEST_CODE   		(EMLXS_DIAG | 254)
69291a2b48SSukumar Swaminathan #define	EMLXS_HW_ERROR_TEST   		(EMLXS_DIAG | 255)
70a9800bebSGarrett D'Amore #define	EMLXS_MB_TIMEOUT_TEST		(EMLXS_DIAG | 256)
71fcf3ce44SJohn Forte 
72fcf3ce44SJohn Forte #define	EMLXS_LOG_GET			(EMLXS_DIAG | 300)
73fcf3ce44SJohn Forte 
74fcf3ce44SJohn Forte 
75291a2b48SSukumar Swaminathan /* DUMP file ids */
76291a2b48SSukumar Swaminathan #define	EMLXS_TXT_FILE_ID			1
77291a2b48SSukumar Swaminathan #define	EMLXS_DMP_FILE_ID			2
78291a2b48SSukumar Swaminathan #define	EMLXS_CEE_FILE_ID			3
7982527734SSukumar Swaminathan #define	EMLXS_FAT_FILE_ID			4
80291a2b48SSukumar Swaminathan 
81fcf3ce44SJohn Forte 
82fcf3ce44SJohn Forte /* Emulex specific error codes */
83fcf3ce44SJohn Forte #define	EMLXS_ERRNO_START		0x100
84291a2b48SSukumar Swaminathan #define	EMLXS_TEST_FAILED		(EMLXS_ERRNO_START + 0)	/* Diagnostic */
85291a2b48SSukumar Swaminathan 								/* test fail */
86291a2b48SSukumar Swaminathan #define	EMLXS_IMAGE_BAD			(EMLXS_ERRNO_START + 1)	/* Image has */
87291a2b48SSukumar Swaminathan 								/* bad data */
88291a2b48SSukumar Swaminathan #define	EMLXS_IMAGE_INCOMPATIBLE	(EMLXS_ERRNO_START + 2)	/* Image not */
89291a2b48SSukumar Swaminathan 								/* compatible */
90291a2b48SSukumar Swaminathan 								/* with H/W */
91291a2b48SSukumar Swaminathan #define	EMLXS_IMAGE_FAILED		(EMLXS_ERRNO_START + 3)	/* Image */
92291a2b48SSukumar Swaminathan 								/* download */
93291a2b48SSukumar Swaminathan 								/* failed */
94291a2b48SSukumar Swaminathan #define	EMLXS_OFFLINE_FAILED		(EMLXS_ERRNO_START + 4)	/* Unable to */
95291a2b48SSukumar Swaminathan 								/* take HBA */
96291a2b48SSukumar Swaminathan 								/* offline */
97291a2b48SSukumar Swaminathan #define	EMLXS_NO_BOOT_CODE		(EMLXS_ERRNO_START + 5)	/* No boot */
98291a2b48SSukumar Swaminathan 								/* code image */
99fe199829SSukumar Swaminathan #define	EMLXS_OP_NOT_SUP		(EMLXS_ERRNO_START + 6)	/* Operation */
100fe199829SSukumar Swaminathan 								/* not supp */
101*8f23e9faSHans Rosenfeld #define	EMLXS_REBOOT_REQUIRED		(EMLXS_ERRNO_START + 7)	/* Reboot */
102*8f23e9faSHans Rosenfeld 								/* required */
103*8f23e9faSHans Rosenfeld #define	EMLXS_ERRNO_END			(EMLXS_ERRNO_START + 7)
104fcf3ce44SJohn Forte 
105fcf3ce44SJohn Forte 
106291a2b48SSukumar Swaminathan typedef struct emlxs_parm
107291a2b48SSukumar Swaminathan {
108291a2b48SSukumar Swaminathan 	char		label[32];
109291a2b48SSukumar Swaminathan 	uint32_t	min;
110291a2b48SSukumar Swaminathan 	uint32_t	max;
111291a2b48SSukumar Swaminathan 	uint32_t	def;
112291a2b48SSukumar Swaminathan 	uint32_t	current;
113291a2b48SSukumar Swaminathan 	uint32_t	flags;
114291a2b48SSukumar Swaminathan 	char		help[128];
115fcf3ce44SJohn Forte } emlxs_parm_t;
116fcf3ce44SJohn Forte 
117fcf3ce44SJohn Forte /* emlxs_parm_t flags */
118291a2b48SSukumar Swaminathan #define	PARM_DYNAMIC	0x00000001	/* Reboot not required */
119291a2b48SSukumar Swaminathan #define	PARM_BOOLEAN	0x00000002
120291a2b48SSukumar Swaminathan #define	PARM_HEX	0x00000004
121fcf3ce44SJohn Forte 
122fcf3ce44SJohn Forte /* PARM_DYNAMIC subtypes */
123fcf3ce44SJohn Forte #define	PARM_DYNAMIC_RESET	(PARM_DYNAMIC | 0x00000010)	/* Hard reset */
124291a2b48SSukumar Swaminathan 								/* required */
125fcf3ce44SJohn Forte #define	PARM_DYNAMIC_LINK	(PARM_DYNAMIC | 0x00000020)	/* Link reset */
126291a2b48SSukumar Swaminathan 								/* required */
127291a2b48SSukumar Swaminathan 
128291a2b48SSukumar Swaminathan typedef struct emlxs_vpd_desc
129291a2b48SSukumar Swaminathan {
130291a2b48SSukumar Swaminathan 	char	id[80];
131291a2b48SSukumar Swaminathan 	char	part_num[32];
132291a2b48SSukumar Swaminathan 	char	eng_change[32];
133291a2b48SSukumar Swaminathan 	char	manufacturer[80];
134291a2b48SSukumar Swaminathan 	char	serial_num[32];
135291a2b48SSukumar Swaminathan 	char	model[32];
136291a2b48SSukumar Swaminathan 	char	model_desc[80];
137291a2b48SSukumar Swaminathan 	char	port_num[4];
138291a2b48SSukumar Swaminathan 	char	prog_types[80];
139fcf3ce44SJohn Forte } emlxs_vpd_desc_t;
140fcf3ce44SJohn Forte 
141*8f23e9faSHans Rosenfeld typedef struct emlxs_vpd_desc_v2
142*8f23e9faSHans Rosenfeld {
143*8f23e9faSHans Rosenfeld 	char	id[256];
144*8f23e9faSHans Rosenfeld 	char	part_num[256];
145*8f23e9faSHans Rosenfeld 	char	eng_change[256];
146*8f23e9faSHans Rosenfeld 	char	manufacturer[256];
147*8f23e9faSHans Rosenfeld 	char	serial_num[256];
148*8f23e9faSHans Rosenfeld 	char	model[256];
149*8f23e9faSHans Rosenfeld 	char	model_desc[256];
150*8f23e9faSHans Rosenfeld 	char	port_num[256];
151*8f23e9faSHans Rosenfeld 	char	prog_types[256];
152*8f23e9faSHans Rosenfeld } emlxs_vpd_desc_v2_t;
153*8f23e9faSHans Rosenfeld 
154*8f23e9faSHans Rosenfeld typedef struct emlxs_phy_desc
155*8f23e9faSHans Rosenfeld {
156*8f23e9faSHans Rosenfeld 	uint32_t phy_type;
157*8f23e9faSHans Rosenfeld 	uint32_t interface_type;
158*8f23e9faSHans Rosenfeld 	uint32_t misc_params;
159*8f23e9faSHans Rosenfeld 	uint32_t rsvd[4];
160*8f23e9faSHans Rosenfeld 
161*8f23e9faSHans Rosenfeld } emlxs_phy_desc_t;
162*8f23e9faSHans Rosenfeld 
163*8f23e9faSHans Rosenfeld typedef struct emlxs_throttle_desc
164*8f23e9faSHans Rosenfeld {
165*8f23e9faSHans Rosenfeld 	uint8_t wwpn[8];
166*8f23e9faSHans Rosenfeld 	uint32_t throttle;
167*8f23e9faSHans Rosenfeld 
168*8f23e9faSHans Rosenfeld } emlxs_throttle_desc_t;
169*8f23e9faSHans Rosenfeld 
170291a2b48SSukumar Swaminathan typedef struct emlxs_log_req
171291a2b48SSukumar Swaminathan {
172291a2b48SSukumar Swaminathan 	uint32_t	first;	/* First msg id requested */
173291a2b48SSukumar Swaminathan 	uint32_t	count;	/* Maximum number of messages */
174291a2b48SSukumar Swaminathan 				/* capable of receiving */
175291a2b48SSukumar Swaminathan 				/* This value can be set to zero */
176291a2b48SSukumar Swaminathan 				/* to receive just log stats */
177fcf3ce44SJohn Forte } emlxs_log_req_t;
178fcf3ce44SJohn Forte 
179fcf3ce44SJohn Forte 
180291a2b48SSukumar Swaminathan typedef struct emlxs_log_resp
181291a2b48SSukumar Swaminathan {
182291a2b48SSukumar Swaminathan 	uint32_t	first;	/* Actual starting msg id in resp buffer */
183291a2b48SSukumar Swaminathan 				/* This represents the first available */
184291a2b48SSukumar Swaminathan 				/* msg id >= first id requested */
185291a2b48SSukumar Swaminathan 	uint32_t	last;	/* Current last msg id in log file */
186291a2b48SSukumar Swaminathan 	uint32_t	count;	/* Total number of messages in resp buffer */
187291a2b48SSukumar Swaminathan 				/* This value will be <= the max count */
188291a2b48SSukumar Swaminathan 				/* requested */
189291a2b48SSukumar Swaminathan 
190291a2b48SSukumar Swaminathan 				/* If count > 0, then the response buffer */
191291a2b48SSukumar Swaminathan 				/* will immediately follow this structure */
192291a2b48SSukumar Swaminathan 				/* The response buffer will be an array of */
193291a2b48SSukumar Swaminathan 				/* string buffers MAX_MSG_LENGTH in size */
194fcf3ce44SJohn Forte #define	MAX_LOG_MSG_LENGTH	160
195fcf3ce44SJohn Forte } emlxs_log_resp_t;
196fcf3ce44SJohn Forte 
197*8f23e9faSHans Rosenfeld typedef struct FCIO_EQ_DESC
198*8f23e9faSHans Rosenfeld {
199*8f23e9faSHans Rosenfeld 	uint32_t	host_index;
200*8f23e9faSHans Rosenfeld 	uint32_t	max_index;
201*8f23e9faSHans Rosenfeld 	uint32_t	qid;
202*8f23e9faSHans Rosenfeld 	uint32_t	msix_vector;
203*8f23e9faSHans Rosenfeld 
204*8f23e9faSHans Rosenfeld 	uint32_t	phys;	/* specifies physical buffer pointer */
205*8f23e9faSHans Rosenfeld 	uint32_t	virt;	/* specifies virtual buffer pointer */
206*8f23e9faSHans Rosenfeld 	uint32_t	virt_hi; /* specifies virtual buffer pointer */
207*8f23e9faSHans Rosenfeld 
208*8f23e9faSHans Rosenfeld 	/* Statistics */
209*8f23e9faSHans Rosenfeld 	uint32_t	max_proc;
210*8f23e9faSHans Rosenfeld 	uint32_t	isr_count;
211*8f23e9faSHans Rosenfeld 	uint32_t	num_proc;
212*8f23e9faSHans Rosenfeld } FCIO_EQ_DESC_t;
213*8f23e9faSHans Rosenfeld 
214*8f23e9faSHans Rosenfeld 
215*8f23e9faSHans Rosenfeld typedef struct FCIO_CQ_DESC
216*8f23e9faSHans Rosenfeld {
217*8f23e9faSHans Rosenfeld 	uint32_t	host_index;
218*8f23e9faSHans Rosenfeld 	uint32_t	max_index;
219*8f23e9faSHans Rosenfeld 	uint32_t	qid;
220*8f23e9faSHans Rosenfeld 	uint32_t	eqid;
221*8f23e9faSHans Rosenfeld 	uint32_t	type;
222*8f23e9faSHans Rosenfeld 
223*8f23e9faSHans Rosenfeld 	uint32_t	phys;	/* specifies physical buffer pointer */
224*8f23e9faSHans Rosenfeld 	uint32_t	virt;	/* specifies virtual buffer pointer */
225*8f23e9faSHans Rosenfeld 	uint32_t	virt_hi; /* specifies virtual buffer pointer */
226*8f23e9faSHans Rosenfeld 
227*8f23e9faSHans Rosenfeld 	/* Statistics */
228*8f23e9faSHans Rosenfeld 	uint32_t	max_proc;
229*8f23e9faSHans Rosenfeld 	uint32_t	isr_count;
230*8f23e9faSHans Rosenfeld 	uint32_t	num_proc;
231*8f23e9faSHans Rosenfeld 	uint32_t	rsvd;
232*8f23e9faSHans Rosenfeld } FCIO_CQ_DESC_t;
233*8f23e9faSHans Rosenfeld 
234*8f23e9faSHans Rosenfeld 
235*8f23e9faSHans Rosenfeld typedef struct FCIO_WQ_DESC
236*8f23e9faSHans Rosenfeld {
237*8f23e9faSHans Rosenfeld 	uint32_t	host_index;
238*8f23e9faSHans Rosenfeld 	uint32_t	max_index;
239*8f23e9faSHans Rosenfeld 	uint32_t	port_index;
240*8f23e9faSHans Rosenfeld 	uint32_t	release_depth;
241*8f23e9faSHans Rosenfeld 	uint32_t	qid;
242*8f23e9faSHans Rosenfeld 	uint32_t	cqid;
243*8f23e9faSHans Rosenfeld 
244*8f23e9faSHans Rosenfeld 	uint32_t	phys;	/* specifies physical buffer pointer */
245*8f23e9faSHans Rosenfeld 	uint32_t	virt;	/* specifies virtual buffer pointer */
246*8f23e9faSHans Rosenfeld 	uint32_t	virt_hi; /* specifies virtual buffer pointer */
247*8f23e9faSHans Rosenfeld 
248*8f23e9faSHans Rosenfeld 	/* Statistics */
249*8f23e9faSHans Rosenfeld 	uint32_t	num_proc;
250*8f23e9faSHans Rosenfeld 	uint32_t	num_busy;
251*8f23e9faSHans Rosenfeld 	uint32_t	rsvd;
252*8f23e9faSHans Rosenfeld } FCIO_WQ_DESC_t;
253*8f23e9faSHans Rosenfeld 
254*8f23e9faSHans Rosenfeld 
255*8f23e9faSHans Rosenfeld typedef struct FCIO_RQ_DESC
256*8f23e9faSHans Rosenfeld {
257*8f23e9faSHans Rosenfeld 	uint32_t	host_index;
258*8f23e9faSHans Rosenfeld 	uint32_t	max_index;
259*8f23e9faSHans Rosenfeld 	uint32_t	qid;
260*8f23e9faSHans Rosenfeld 	uint32_t	cqid;
261*8f23e9faSHans Rosenfeld 
262*8f23e9faSHans Rosenfeld 	uint32_t	phys;	/* specifies physical buffer pointer */
263*8f23e9faSHans Rosenfeld 	uint32_t	virt;	/* specifies virtual buffer pointer */
264*8f23e9faSHans Rosenfeld 	uint32_t	virt_hi; /* specifies virtual buffer pointer */
265*8f23e9faSHans Rosenfeld 
266*8f23e9faSHans Rosenfeld 	/* Statistics */
267*8f23e9faSHans Rosenfeld 	uint32_t	num_proc;
268*8f23e9faSHans Rosenfeld } FCIO_RQ_DESC_t;
269*8f23e9faSHans Rosenfeld 
270*8f23e9faSHans Rosenfeld 
271*8f23e9faSHans Rosenfeld #define	FCIO_MSI_MAX_INTRS	8
272*8f23e9faSHans Rosenfeld #define	FCIO_MAX_WQS_PER_EQ	4
273*8f23e9faSHans Rosenfeld #define	FCIO_MAX_EQS	FCIO_MSI_MAX_INTRS
274*8f23e9faSHans Rosenfeld #define	FCIO_MAX_WQS	FCIO_MAX_WQS_PER_EQ * FCIO_MAX_EQS
275*8f23e9faSHans Rosenfeld #define	FCIO_MAX_RQS	2	/* ONLY 1 pair is allowed */
276*8f23e9faSHans Rosenfeld 
277*8f23e9faSHans Rosenfeld /* One CQ for each WQ & (RQ pair) plus one for the MQ */
278*8f23e9faSHans Rosenfeld #define	FCIO_MAX_CQS	(FCIO_MAX_WQS + (FCIO_MAX_RQS/2) + 1)
279*8f23e9faSHans Rosenfeld 
280*8f23e9faSHans Rosenfeld typedef struct FCIO_Q_STAT
281*8f23e9faSHans Rosenfeld {
282*8f23e9faSHans Rosenfeld 	FCIO_EQ_DESC_t	eq[FCIO_MAX_EQS];
283*8f23e9faSHans Rosenfeld 	FCIO_CQ_DESC_t	cq[FCIO_MAX_CQS];
284*8f23e9faSHans Rosenfeld 	FCIO_WQ_DESC_t	wq[FCIO_MAX_WQS];
285*8f23e9faSHans Rosenfeld 	FCIO_RQ_DESC_t	rq[FCIO_MAX_RQS];
286*8f23e9faSHans Rosenfeld 	uint32_t	que_start_timer;
287*8f23e9faSHans Rosenfeld 	uint32_t	que_current_timer;
288*8f23e9faSHans Rosenfeld 	uint32_t	intr_count;
289*8f23e9faSHans Rosenfeld } FCIO_Q_STAT_t;
290*8f23e9faSHans Rosenfeld 
291*8f23e9faSHans Rosenfeld 
292fcf3ce44SJohn Forte #ifdef	__cplusplus
293fcf3ce44SJohn Forte }
294fcf3ce44SJohn Forte #endif
295fcf3ce44SJohn Forte 
296fcf3ce44SJohn Forte #endif	/* _EMLXS_FCIO_H */
297