xref: /illumos-gate/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_extern.h (revision 6a573d82e26abdedeb701fcdd5b5461b2fa0da40)
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 2010 Emulex.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _EMLXS_EXTERN_H
28 #define	_EMLXS_EXTERN_H
29 
30 #ifdef	__cplusplus
31 extern "C" {
32 #endif
33 
34 extern void			*emlxs_soft_state;
35 extern uint32_t			emlxs_instance[MAX_FC_BRDS];
36 extern uint32_t			emlxs_instance_count;
37 extern char			emlxs_revision[32];
38 extern char			emlxs_version[32];
39 extern char			emlxs_name[64];
40 extern char			emlxs_label[64];
41 
42 extern emlxs_device_t		emlxs_device;
43 extern uint32_t			emlxs_instance[MAX_FC_BRDS];
44 extern uint32_t			emlxs_instance_count;
45 
46 extern ddi_device_acc_attr_t	emlxs_data_acc_attr;
47 extern ddi_device_acc_attr_t	emlxs_dev_acc_attr;
48 extern ddi_dma_lim_t		emlxs_dma_lim;
49 extern uint32_t			emlxs_diag_state;
50 extern emlxs_config_t		emlxs_cfg[];
51 extern ddi_dma_attr_t		emlxs_dma_attr;
52 extern ddi_dma_attr_t		emlxs_dma_attr_ro;
53 extern ddi_dma_attr_t		emlxs_dma_attr_fcip_rsp;
54 extern ddi_dma_attr_t		emlxs_dma_attr_1sg;
55 
56 /* Module emlxs_msg.c External Routine Declarations */
57 extern void			emlxs_msg_printf(emlxs_port_t *port,
58 					const uint32_t fileno,
59 					const uint32_t line,
60 					emlxs_msg_t *msg,
61 					const char *fmt, ...);
62 extern uint32_t			emlxs_msg_log_create(emlxs_hba_t *hba);
63 extern uint32_t			emlxs_msg_log_destroy(emlxs_hba_t *hba);
64 extern uint32_t			emlxs_msg_log_get(emlxs_hba_t *hba,
65 					emlxs_log_req_t *req,
66 					emlxs_log_resp_t *resp);
67 
68 /* Module emlxs_event.c External Routine Declarations */
69 extern void			emlxs_timer_check_events(emlxs_hba_t *hba);
70 
71 extern uint32_t			emlxs_event_queue_create(emlxs_hba_t *hba);
72 
73 extern void			emlxs_event_queue_destroy(emlxs_hba_t *hba);
74 
75 extern void			emlxs_event(emlxs_port_t *port,
76 					emlxs_event_t *evt, void *bp,
77 					uint32_t size);
78 extern void			emlxs_log_dump_event(emlxs_port_t *port,
79 					uint8_t *buffer, uint32_t size);
80 extern void			emlxs_log_link_event(emlxs_port_t *port);
81 
82 extern uint32_t			emlxs_log_ct_event(emlxs_port_t *port,
83 					uint8_t *payload, uint32_t size,
84 					uint32_t rxid);
85 extern void			emlxs_log_rscn_event(emlxs_port_t *port,
86 					uint8_t *payload, uint32_t size);
87 extern void			emlxs_log_vportrscn_event(emlxs_port_t *port,
88 					uint8_t *payload, uint32_t size);
89 extern uint32_t			emlxs_get_dfc_event(emlxs_port_t *port,
90 					emlxs_dfc_event_t *dfc_event,
91 					uint32_t sleep);
92 extern uint32_t			emlxs_kill_dfc_event(emlxs_port_t *port,
93 					emlxs_dfc_event_t *dfc_event);
94 extern uint32_t			emlxs_get_dfc_eventinfo(emlxs_port_t *port,
95 					HBA_EVENTINFO *eventinfo,
96 					uint32_t *eventcount,
97 					uint32_t *missed);
98 extern void			emlxs_log_temp_event(emlxs_port_t *port,
99 					uint32_t type, uint32_t temp);
100 extern void			emlxs_log_fcoe_event(emlxs_port_t *port,
101 					menlo_init_rsp_t *init_rsp);
102 extern void			emlxs_log_async_event(emlxs_port_t *port,
103 					IOCB *iocb);
104 
105 #ifdef SAN_DIAG_SUPPORT
106 extern uint32_t			emlxs_get_sd_event(emlxs_port_t *port,
107 					emlxs_dfc_event_t *dfc_event,
108 					uint32_t sleep);
109 extern void			emlxs_log_sd_basic_els_event(emlxs_port_t *port,
110 					uint32_t subcat, HBA_WWN *portname,
111 					HBA_WWN *nodename);
112 extern void			emlxs_log_sd_prlo_event(emlxs_port_t *port,
113 					HBA_WWN *portname);
114 extern void			emlxs_log_sd_lsrjt_event(emlxs_port_t *port,
115 					HBA_WWN *remoteport, uint32_t orig_cmd,
116 					uint32_t reason, uint32_t reason_expl);
117 extern void			emlxs_log_sd_fc_bsy_event(emlxs_port_t *port,
118 					HBA_WWN *remoteport);
119 extern void			emlxs_log_sd_fc_rdchk_event(emlxs_port_t *port,
120 					HBA_WWN *remoteport, uint32_t lun,
121 					uint32_t opcode, uint32_t fcp_param);
122 extern void			emlxs_log_sd_scsi_event(emlxs_port_t *port,
123 					uint32_t type, HBA_WWN *remoteport,
124 					int32_t lun);
125 extern void			emlxs_log_sd_scsi_check_event(
126 					emlxs_port_t *port,
127 					HBA_WWN *remoteport, uint32_t lun,
128 					uint32_t cmdcode, uint32_t sensekey,
129 					uint32_t asc, uint32_t ascq);
130 #endif  /* SAN_DIAG_SUPPORT */
131 
132 /* Module emlxs_solaris.c External Routine Declarations */
133 extern int32_t			emlxs_pkt_abort(opaque_t fca_port_handle,
134 					fc_packet_t *pkt, int32_t sleep);
135 extern char			*emlxs_state_xlate(uint8_t state);
136 extern char			*emlxs_error_xlate(uint8_t errno);
137 extern void			emlxs_mem_free(emlxs_hba_t *hba,
138 					MBUF_INFO *buf_info);
139 extern uint8_t			*emlxs_mem_alloc(emlxs_hba_t *hba,
140 					MBUF_INFO *buf_info);
141 extern int			emlxs_map_bus(emlxs_hba_t *hba);
142 extern void			emlxs_unmap_bus(emlxs_hba_t *hba);
143 extern fc_unsol_buf_t		*emlxs_ub_find(emlxs_port_t *port,
144 					uint32_t token);
145 extern fc_unsol_buf_t		*emlxs_ub_get(emlxs_port_t *port, uint32_t size,
146 					uint32_t type, uint32_t resv);
147 extern int32_t			emlxs_log_printf(int32_t f, int32_t type,
148 					int32_t num, int32_t brdno,
149 					const char *fmt, ...);
150 extern void			emlxs_set_pkt_state(emlxs_buf_t *sbp,
151 					uint32_t iostat, uint8_t localstat,
152 					uint32_t lock);
153 extern char			*emlxs_elscmd_xlate(uint32_t cmd);
154 extern char			*emlxs_ctcmd_xlate(uint32_t cmd);
155 extern char			*emlxs_rmcmd_xlate(uint32_t cmd);
156 extern char			*emlxs_wwn_xlate(char *buffer, uint8_t *wwn);
157 extern int32_t			emlxs_transport(opaque_t fca_port_handle,
158 					fc_packet_t *pkt);
159 extern int32_t			emlxs_pkt_uninit(opaque_t fca_port_handle,
160 					fc_packet_t *pkt);
161 extern int32_t			emlxs_pkt_init(opaque_t fca_port_handle,
162 					fc_packet_t *pkt, int32_t sleep);
163 extern void			emlxs_pkt_complete(emlxs_buf_t *sbp,
164 					uint32_t iostat, uint8_t localstat,
165 					uint32_t doneq);
166 
167 #ifdef SAN_DIAG_SUPPORT
168 extern void			emlxs_update_sd_bucket(emlxs_buf_t *sbp);
169 #endif /* SAN_DIAG_SUPPORT */
170 
171 extern uint32_t			emlxs_get_instance(int32_t ddiinst);
172 extern char			*emlxs_mscmd_xlate(uint16_t cmd);
173 extern int32_t			emlxs_reset(emlxs_port_t *port, uint32_t cmd);
174 extern void			emlxs_swap_service_params(SERV_PARM *sp);
175 extern void			emlxs_swap_fcp_pkt(emlxs_buf_t *sbp);
176 extern void			emlxs_swap_ct_pkt(emlxs_buf_t *sbp);
177 extern void			emlxs_swap_els_pkt(emlxs_buf_t *sbp);
178 extern int			emlxs_ub_release(opaque_t fca_port_handle,
179 					uint32_t count, uint64_t tokens[]);
180 extern void			emlxs_swap_els_ub(fc_unsol_buf_t *ubp);
181 extern void			emlxs_unswap_pkt(emlxs_buf_t *sbp);
182 extern uint32_t			emlxs_get_key(emlxs_hba_t *hba, MAILBOXQ *mbq);
183 extern int			emlxs_pm_busy_component(dev_info_t *dip);
184 extern int			emlxs_pm_idle_component(dev_info_t *dip);
185 extern void			emlxs_pm_idle_timer(dev_info_t *dip);
186 extern void			emlxs_shutdown_thread(emlxs_hba_t *hba,
187 					void *arg1, void *arg2);
188 extern uint32_t			emlxs_set_parm(emlxs_hba_t *hba, uint32_t index,
189 					uint32_t new_value);
190 extern void			emlxs_ub_destroy(emlxs_port_t *port,
191 					emlxs_unsol_buf_t *pool);
192 extern void			emlxs_ub_callback(emlxs_port_t *port,
193 					fc_unsol_buf_t *ubp);
194 extern void			emlxs_ub_flush(emlxs_port_t *port);
195 extern uint32_t			emlxs_check_parm(emlxs_hba_t *hba,
196 					uint32_t index, uint32_t new_value);
197 extern int32_t			emlxs_port_manage(opaque_t fca_port_handle,
198 					fc_fca_pm_t *pm);
199 extern void			emlxs_port_init(emlxs_port_t *port);
200 extern void			emlxs_get_fcode_version(emlxs_hba_t *hba);
201 
202 extern void			emlxs_swap32_buffer(uint8_t *buffer,
203 					uint32_t size);
204 extern void			emlxs_swap32_bcopy(uint8_t *src,
205 					uint8_t *dst, uint32_t size);
206 
207 #ifdef MENLO_SUPPORT
208 extern char			*emlxs_menlo_cmd_xlate(uint32_t cmd);
209 extern char			*emlxs_menlo_rsp_xlate(uint32_t rsp);
210 #endif /* MENLO_SUPPORT */
211 
212 #ifdef FMA_SUPPORT
213 extern void			emlxs_fm_init(emlxs_hba_t *hba);
214 extern void			emlxs_fm_fini(emlxs_hba_t *hba);
215 extern int			emlxs_fm_check_acc_handle(emlxs_hba_t *hba,
216 					ddi_acc_handle_t handle);
217 extern int			emlxs_fm_check_dma_handle(emlxs_hba_t *hba,
218 					ddi_dma_handle_t handle);
219 extern void			emlxs_fm_ereport(emlxs_hba_t *hba,
220 					char *detail);
221 extern void			emlxs_fm_service_impact(emlxs_hba_t *hba,
222 					int impact);
223 extern int			emlxs_fm_error_cb(dev_info_t *dip,
224 					ddi_fm_error_t *err,
225 					const void *impl_data);
226 extern void			emlxs_check_dma(emlxs_hba_t *hba,
227 					emlxs_buf_t *sbp);
228 #endif	/* FMA_SUPPORT */
229 
230 /* Module emlxs_pkt.c External Routine Declarations */
231 extern int32_t			emlxs_pkt_send(fc_packet_t *pkt, uint32_t now);
232 extern void			emlxs_pkt_free(fc_packet_t *pkt);
233 extern void			emlxs_pkt_callback(fc_packet_t *pkt);
234 extern fc_packet_t		*emlxs_pkt_alloc(emlxs_port_t *port,
235 					uint32_t cmdlen, uint32_t rsplen,
236 					uint32_t datalen, int32_t sleep);
237 
238 /* Module emlxs_clock.c External Routine Declarations */
239 extern void			emlxs_timer_checks(emlxs_hba_t *hba);
240 extern void			emlxs_timer_start(emlxs_hba_t *hba);
241 extern void			emlxs_timer_stop(emlxs_hba_t *hba);
242 extern void			emlxs_link_timeout(emlxs_hba_t *hba);
243 extern clock_t			emlxs_timeout(emlxs_hba_t *hba,
244 					uint32_t timeout);
245 
246 /* Module emlxs_dhchap.c External Routine Declarations */
247 #ifdef DHCHAP_SUPPORT
248 extern int			emlxs_dhchap_state_machine(emlxs_port_t *port,
249 					CHANNEL *cp, IOCBQ *iocbq,
250 					MATCHMAP *mp, NODELIST *node, int evt);
251 
252 extern void			emlxs_dhc_attach(emlxs_hba_t *hba);
253 extern void			emlxs_dhc_detach(emlxs_hba_t *hba);
254 extern void			emlxs_dhc_authrsp_timeout(emlxs_port_t *port,
255 					void *node, void *null);
256 extern void			emlxs_dhc_reauth_timeout(emlxs_port_t *port,
257 					void *newtimeout, void *node);
258 extern void			emlxs_dhc_auth_stop(emlxs_port_t *port,
259 					emlxs_node_t *node);
260 extern int			emlxs_dhc_auth_start(emlxs_port_t *port,
261 					emlxs_node_t *node, uint8_t *sbp,
262 					uint8_t *ubp);
263 extern void			emlxs_dhc_init_sp(emlxs_port_t *port,
264 					uint32_t did, SERV_PARM *sp,
265 					char **msg);
266 extern uint32_t			emlxs_dhc_verify_login(emlxs_port_t *port,
267 					uint32_t sid, SERV_PARM *sp);
268 extern void			emlxs_dhc_status(emlxs_port_t *port,
269 					emlxs_node_t *ndlp, uint32_t reason,
270 					uint32_t explaination);
271 extern void			emlxs_dhc_state(emlxs_port_t *port,
272 					emlxs_node_t *ndlp, uint32_t state,
273 					uint32_t reason,
274 					uint32_t explaination);
275 extern uint32_t			emlxs_dhc_init_auth(emlxs_hba_t *hba,
276 					uint8_t *lwwpn, uint8_t *rwwpn);
277 extern uint32_t			emlxs_dhc_get_auth_cfg(emlxs_hba_t *hba,
278 					dfc_fcsp_config_t *fcsp_cfg);
279 extern uint32_t			emlxs_dhc_get_auth_key(emlxs_hba_t *hba,
280 					dfc_auth_password_t *dfc_auth_pwd);
281 extern uint32_t			emlxs_dhc_add_auth_cfg(emlxs_hba_t *hba,
282 					dfc_fcsp_config_t *fcsp_cfg,
283 					dfc_password_t *dfc_pwd);
284 extern uint32_t			emlxs_dhc_delete_auth_cfg(emlxs_hba_t *hba,
285 					dfc_fcsp_config_t *fcsp_cfg,
286 					dfc_password_t *dfc_pwd);
287 extern uint32_t			emlxs_dhc_set_auth_key(emlxs_hba_t *hba,
288 					dfc_auth_password_t *dfc_pwd);
289 extern uint32_t			emlxs_dhc_get_auth_status(emlxs_hba_t *hba,
290 					dfc_auth_status_t *fcsp_status);
291 extern uint32_t			emlxs_dhc_get_auth_cfg_table(emlxs_hba_t *hba,
292 					dfc_fcsp_config_t *fcsp_cfg);
293 extern uint32_t			emlxs_dhc_get_auth_key_table(emlxs_hba_t *hba,
294 					dfc_auth_password_t *auth_pwd);
295 #endif	/* DHCHAP_SUPPORT */
296 
297 /* Module emlxs_node.c External Routine Declarations */
298 extern void			emlxs_node_timeout(emlxs_port_t *port,
299 					NODELIST *ndlp, uint32_t ringno);
300 extern void			emlxs_node_open(emlxs_port_t *port,
301 					NODELIST *ndlp, uint32_t ringno);
302 extern void			emlxs_node_close(emlxs_port_t *port,
303 					NODELIST *ndlp, uint32_t ringno,
304 					int32_t timeout);
305 extern NODELIST			*emlxs_node_find_did(emlxs_port_t *port,
306 					uint32_t did);
307 extern NODELIST			*emlxs_node_find_rpi(emlxs_port_t *port,
308 					uint32_t rpi);
309 extern void			emlxs_node_destroy_all(emlxs_port_t *port);
310 extern NODELIST			*emlxs_node_find_mac(emlxs_port_t *port,
311 					uint8_t *mac);
312 extern void			emlxs_node_add(emlxs_port_t *port,
313 					NODELIST *ndlp);
314 extern void			emlxs_node_rm(emlxs_port_t *port,
315 					NODELIST *ndlp);
316 extern NODELIST			*emlxs_node_find_wwpn(emlxs_port_t *port,
317 					uint8_t *wwpn);
318 extern NODELIST			*emlxs_node_find_index(emlxs_port_t *port,
319 					uint32_t index, uint32_t nports_only);
320 extern uint32_t			emlxs_nport_count(emlxs_port_t *port);
321 
322 /* Module emlxs_els.c External Routine Declarations */
323 extern int32_t			emlxs_els_handle_event(emlxs_hba_t *hba,
324 					CHANNEL *cp, IOCBQ *temp);
325 extern int32_t			emlxs_els_handle_unsol_req(emlxs_port_t *port,
326 					CHANNEL *cp, IOCBQ *iocbq,
327 					MATCHMAP *mp, uint32_t size);
328 extern uint32_t			emlxs_generate_rscn(emlxs_port_t *port,
329 					uint32_t d_id);
330 extern int32_t			emlxs_ct_handle_event(emlxs_hba_t *hba,
331 					CHANNEL *cp, IOCBQ *temp);
332 extern int32_t			emlxs_ct_handle_unsol_req(emlxs_port_t *port,
333 					CHANNEL *cp, IOCBQ *iocbq,
334 					MATCHMAP *mp, uint32_t size);
335 extern int32_t			emlxs_els_reply(emlxs_port_t *port,
336 					IOCBQ *iocbq, uint32_t type,
337 					uint32_t type2, uint32_t reason,
338 					uint32_t explain);
339 extern void			emlxs_send_logo(emlxs_port_t *port,
340 					uint32_t d_id);
341 extern void			emlxs_reset_link_thread(emlxs_hba_t *hba,
342 					void *arg1, void *arg2);
343 extern uint32_t			emlxs_process_unsol_flogi(emlxs_port_t *port,
344 					IOCBQ *iocbq, MATCHMAP *mp,
345 					uint32_t size, char *buffer);
346 extern uint32_t			emlxs_process_unsol_plogi(emlxs_port_t *port,
347 					IOCBQ *iocbq, MATCHMAP *mp,
348 					uint32_t size, char *buffer);
349 extern uint32_t			emlxs_ub_send_login_acc(emlxs_port_t *port,
350 					fc_unsol_buf_t *ubp);
351 
352 #ifdef MENLO_SUPPORT
353 extern int			emlxs_menlo_handle_event(emlxs_hba_t *hba,
354 					CHANNEL *cp, IOCBQ *iocbq);
355 #endif /* MENLO_SUPPORT */
356 
357 /* Module emlxs_ip.c External Routine Declarations */
358 extern int32_t			emlxs_ip_handle_event(emlxs_hba_t *hba,
359 					CHANNEL *cp, IOCBQ *temp);
360 extern int			emlxs_ip_handle_rcv_seq_list(emlxs_hba_t *hba,
361 					CHANNEL *cp, IOCBQ *saveq);
362 extern int			emlxs_ip_handle_unsol_req(emlxs_port_t *port,
363 					CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp,
364 					uint32_t size);
365 extern int			emlxs_create_xri(emlxs_port_t *port,
366 					CHANNEL *cp, NODELIST *ndlp);
367 extern int			emlxs_handle_create_xri(emlxs_hba_t *hba,
368 					CHANNEL *cp, IOCBQ *temp);
369 extern int			emlxs_handle_xri_aborted(emlxs_hba_t *hba,
370 					CHANNEL *cp, IOCBQ *temp);
371 
372 /* Module emlxs_mbox.c External Routine Declarations */
373 extern void			emlxs_mb_config_msi(emlxs_hba_t *hba,
374 					MAILBOXQ *mbq, uint32_t *intr_map,
375 					uint32_t intr_count);
376 extern void			emlxs_mb_config_msix(emlxs_hba_t *hba,
377 					MAILBOXQ *mbq, uint32_t *intr_map,
378 					uint32_t intr_count);
379 extern void			emlxs_mb_read_lnk_stat(emlxs_hba_t *hba,
380 					MAILBOXQ *mbq);
381 extern void			emlxs_mb_config_link(emlxs_hba_t *hba,
382 					MAILBOXQ *mbq);
383 extern void			emlxs_mb_config_ring(emlxs_hba_t *hba,
384 					int32_t ring, MAILBOXQ *mbq);
385 extern void			emlxs_mb_init_link(emlxs_hba_t *hba,
386 					MAILBOXQ *mbq, uint32_t topology,
387 					uint32_t linkspeed);
388 extern void			emlxs_mb_down_link(emlxs_hba_t *hba,
389 					MAILBOXQ *mbq);
390 extern uint32_t			emlxs_mb_read_la(emlxs_hba_t *hba,
391 					MAILBOXQ *mbq);
392 extern void			emlxs_mb_read_nv(emlxs_hba_t *hba,
393 					MAILBOXQ *mbq);
394 extern void			emlxs_mb_read_rev(emlxs_hba_t *hba,
395 					MAILBOXQ *mbq, uint32_t v3);
396 extern uint32_t			emlxs_mb_read_rpi(emlxs_hba_t *hba,
397 					uint32_t rpi, MAILBOXQ *mbq,
398 					uint32_t flg);
399 extern uint32_t			emlxs_mb_read_xri(emlxs_hba_t *hba,
400 					uint32_t xri, MAILBOXQ *mbq,
401 					uint32_t flg);
402 extern uint32_t			emlxs_mb_read_sparam(emlxs_hba_t *hba,
403 					MAILBOXQ *mbq);
404 extern uint32_t			emlxs_mb_reg_did(emlxs_port_t *port,
405 					uint32_t did, SERV_PARM *param,
406 					emlxs_buf_t *sbp, fc_unsol_buf_t *ubp,
407 					IOCBQ *iocbq);
408 extern void			emlxs_disable_tc(emlxs_hba_t *hba,
409 					MAILBOXQ *mbq);
410 extern uint32_t			emlxs_mb_run_biu_diag(emlxs_hba_t *hba,
411 					MAILBOXQ *mbq, uint64_t in,
412 					uint64_t out);
413 extern uint32_t			emlxs_mb_unreg_rpi(emlxs_port_t *port,
414 					uint32_t rpi, emlxs_buf_t *sbp,
415 					fc_unsol_buf_t *ubp, IOCBQ *iocbq);
416 extern uint32_t			emlxs_mb_unreg_did(emlxs_port_t *port,
417 					uint32_t did, emlxs_buf_t *sbp,
418 					fc_unsol_buf_t *ubp, IOCBQ *iocbq);
419 extern void			emlxs_mb_dump_vpd(emlxs_hba_t *hba,
420 					MAILBOXQ *mbq, uint32_t offset);
421 extern void			emlxs_mb_dump_fcoe(emlxs_hba_t *hba,
422 					MAILBOXQ *mbq, uint32_t offset);
423 extern void			emlxs_mb_config_farp(emlxs_hba_t *hba,
424 					MAILBOXQ *mbq);
425 extern void			emlxs_mb_read_config(emlxs_hba_t *hba,
426 					MAILBOXQ *mbq);
427 extern void			emlxs_mb_put(emlxs_hba_t *hba,
428 					MAILBOXQ *mbq);
429 extern MAILBOXQ			*emlxs_mb_get(emlxs_hba_t *hba);
430 extern void			emlxs_mb_clear_la(emlxs_hba_t *hba,
431 					MAILBOXQ *mbq);
432 extern void			emlxs_mb_set_var(emlxs_hba_t *hba,
433 					MAILBOXQ *mbq, uint32_t addr,
434 					uint32_t value);
435 extern void			emlxs_mb_reset_ring(emlxs_hba_t *hba,
436 					MAILBOXQ *mbq, uint32_t ringno);
437 extern char			*emlxs_mb_cmd_xlate(uint8_t command);
438 extern void			emlxs_mb_read_status(emlxs_hba_t *hba,
439 					MAILBOXQ *mbq);
440 extern int			emlxs_cmpl_init_vpi(void *arg1, MAILBOXQ *mbq);
441 extern uint32_t			emlxs_mb_init_vpi(emlxs_port_t *port);
442 extern int			emlxs_cmpl_reg_vpi(void *arg1, MAILBOXQ *mbq);
443 extern uint32_t			emlxs_mb_reg_vpi(emlxs_port_t *port,
444 					emlxs_buf_t *sbp);
445 extern int			emlxs_cmpl_unreg_vpi(void *arg1, MAILBOXQ *mbq);
446 extern uint32_t			emlxs_mb_unreg_vpi(emlxs_port_t *port);
447 extern void			emlxs_mb_fini(emlxs_hba_t *hba,
448 					MAILBOX *mb, uint32_t mbxStatus);
449 extern void			emlxs_mb_flush(emlxs_hba_t *hba);
450 extern void			emlxs_mb_heartbeat(emlxs_hba_t *hba,
451 					MAILBOXQ *mbq);
452 extern void			emlxs_mb_request_features(emlxs_hba_t *hba,
453 					MAILBOXQ *mbq);
454 extern int			emlxs_mb_resume_rpi(emlxs_hba_t *hba,
455 					emlxs_buf_t *sbp, uint16_t rpi);
456 extern void			emlxs_mb_noop(emlxs_hba_t *hba,
457 					MAILBOXQ *mbq);
458 extern int			emlxs_mbext_noop(emlxs_hba_t *hba,
459 					MAILBOXQ *mbq);
460 extern void			emlxs_mb_resetport(emlxs_hba_t *hba,
461 					MAILBOXQ *mbq);
462 extern void			emlxs_mb_eq_create(emlxs_hba_t *hba,
463 					MAILBOXQ *mbq, uint32_t num);
464 extern void			emlxs_mb_cq_create(emlxs_hba_t *hba,
465 					MAILBOXQ *mbq, uint32_t num);
466 extern void			emlxs_mb_wq_create(emlxs_hba_t *hba,
467 					MAILBOXQ *mbq, uint32_t num);
468 extern void			emlxs_mb_rq_create(emlxs_hba_t *hba,
469 					MAILBOXQ *mbq, uint32_t num);
470 extern void			emlxs_mb_mq_create(emlxs_hba_t *hba,
471 					MAILBOXQ *mbq);
472 extern void			emlxs_mb_reg_fcfi(emlxs_hba_t *hba,
473 					MAILBOXQ *mbq, FCFIobj_t *fcfp);
474 extern int			emlxs_mb_unreg_fcfi(emlxs_hba_t *hba,
475 					FCFIobj_t *fcfp);
476 extern int			emlxs_mb_reg_vfi(emlxs_hba_t *hba,
477 					MAILBOXQ *mb, VFIobj_t *vfip,
478 					emlxs_port_t *vpip);
479 extern int			emlxs_mb_unreg_vfi(emlxs_hba_t *hba,
480 					VFIobj_t *vfip);
481 extern int			emlxs_mbext_read_fcf_table(emlxs_hba_t *hba,
482 					MAILBOXQ *mbq, uint32_t index);
483 extern int			emlxs_mbext_add_fcf_table(emlxs_hba_t *hba,
484 					MAILBOXQ *mbq, uint32_t index);
485 extern void			emlxs_mb_async_event(emlxs_hba_t *hba,
486 					MAILBOXQ *mbq);
487 extern int32_t			emlxs_mb_check_sparm(emlxs_hba_t *hba,
488 					SERV_PARM *nsp);
489 extern void			emlxs_cmpl_mbox(emlxs_hba_t *hba, MAILBOXQ *mq);
490 extern void			emlxs_mb_dump(emlxs_hba_t *hba, MAILBOXQ *mbq,
491 					uint32_t offset, uint32_t words);
492 extern void			emlxs_mb_retry(emlxs_hba_t *hba, MAILBOXQ *mbq);
493 extern void			emlxs_mb_init(emlxs_hba_t *hba, MAILBOXQ *mbq,
494 					uint32_t flag, uint32_t tmo);
495 extern void			emlxs_mb_config_hbq(emlxs_hba_t *hba,
496 					MAILBOXQ *mbq, int hbq_id);
497 
498 /* Module emlxs_mem.c External Routine Declarations */
499 extern MATCHMAP			*emlxs_mem_get_vaddr(emlxs_hba_t *hba,
500 					RING *rp, uint64_t mapbp);
501 extern uint8_t			*emlxs_mem_get(emlxs_hba_t *hba,
502 					uint32_t seg_id, uint32_t priority);
503 extern uint8_t			*emlxs_mem_put(emlxs_hba_t *hba,
504 					uint32_t seg_id, uint8_t *bp);
505 extern int32_t			emlxs_mem_free_buffer(emlxs_hba_t *hba);
506 extern int32_t			emlxs_mem_alloc_buffer(emlxs_hba_t *hba);
507 extern void			emlxs_mem_map_vaddr(emlxs_hba_t *hba,
508 					RING *rp, MATCHMAP *mp, uint32_t *haddr,
509 					uint32_t *laddr);
510 extern MATCHMAP			*emlxs_mem_buf_alloc(emlxs_hba_t *hba,
511 					uint32_t size);
512 extern MATCHMAP			*emlxs_mem_buf_free(emlxs_hba_t *hba,
513 					MATCHMAP *mp);
514 extern uint32_t			emlxs_hbq_alloc(emlxs_hba_t *hba,
515 					uint32_t hbq_id);
516 extern MEMSEG			*emlxs_mem_pool_alloc(emlxs_hba_t *hba,
517 				    MEMSEG *seg);
518 extern void			emlxs_mem_pool_free(emlxs_hba_t *hba,
519 				    MEMSEG *seg);
520 extern uint8_t 			*emlxs_mem_pool_get(emlxs_hba_t *hba,
521 				    MEMSEG *seg, uint32_t priority);
522 extern MEMSEG			*emlxs_mem_pool_put(emlxs_hba_t *hba,
523 				    MEMSEG *seg, uint8_t *bp);
524 
525 /* Module emlxs_hba.c  External Routine Declarations */
526 extern void			emlxs_decode_firmware_rev(emlxs_hba_t *hba,
527 					emlxs_vpd_t *vp);
528 extern uint32_t			emlxs_init_adapter_info(emlxs_hba_t *hba);
529 extern uint32_t			emlxs_strtol(char *str, uint32_t base);
530 extern uint64_t			emlxs_strtoll(char *str, uint32_t base);
531 extern void			emlxs_decode_version(uint32_t version,
532 					char *buffer);
533 extern char			*emlxs_ffstate_xlate(uint32_t new_state);
534 extern char			*emlxs_ring_xlate(uint32_t ringno);
535 extern void			emlxs_proc_channel(emlxs_hba_t *hba,
536 					CHANNEL *cp, void *arg2);
537 extern void			emlxs_pcix_mxr_update(emlxs_hba_t *hba,
538 					uint32_t verbose);
539 extern void			emlxs_restart_thread(emlxs_hba_t *hba,
540 					void *arg1, void *arg2);
541 extern void			emlxs_fw_show(emlxs_hba_t *hba);
542 extern void			emlxs_proc_channel_event(emlxs_hba_t *hba,
543 					CHANNEL *cp, IOCBQ *iocbq);
544 
545 #ifdef MODFW_SUPPORT
546 extern void			emlxs_fw_load(emlxs_hba_t *hba,
547 					emlxs_firmware_t *fw);
548 extern void			emlxs_fw_unload(emlxs_hba_t *hba,
549 					emlxs_firmware_t *fw);
550 #endif /* MODFW_SUPPORT */
551 
552 #ifdef MSI_SUPPORT
553 extern int32_t			emlxs_msi_add(emlxs_hba_t *hba);
554 extern int32_t			emlxs_msi_remove(emlxs_hba_t *hba);
555 extern int32_t			emlxs_msi_init(emlxs_hba_t *hba, uint32_t max);
556 extern int32_t			emlxs_msi_uninit(emlxs_hba_t *hba);
557 #endif	/* MSI_SUPPORT */
558 
559 extern int32_t			emlxs_intx_add(emlxs_hba_t *hba);
560 extern int32_t			emlxs_intx_remove(emlxs_hba_t *hba);
561 extern int32_t			emlxs_intx_init(emlxs_hba_t *hba, uint32_t max);
562 extern int32_t			emlxs_intx_uninit(emlxs_hba_t *hba);
563 
564 extern void			emlxs_parse_prog_types(emlxs_hba_t *hba,
565 					char *types);
566 extern int32_t			emlxs_parse_vpd(emlxs_hba_t *hba, uint8_t *vpd,
567 					uint32_t size);
568 extern int32_t			emlxs_parse_fcoe(emlxs_hba_t *hba, uint8_t *p,
569 					uint32_t size);
570 
571 extern void			emlxs_decode_label(char *label, char *buffer,
572 					int bige);
573 extern void			emlxs_build_prog_types(emlxs_hba_t *hba,
574 					char *prog_types);
575 extern void			emlxs_process_link_speed(emlxs_hba_t *hba);
576 
577 extern uint32_t			emlxs_iotag_flush(emlxs_hba_t *hba);
578 
579 extern int			emlxs_pci_model_count;
580 extern emlxs_model_t		emlxs_pci_model[];
581 
582 extern int			emlxs_fw_count;
583 extern emlxs_firmware_t		emlxs_fw_table[];
584 
585 
586 /* Module emlxs_sli3.c  External Routine Declarations */
587 extern emlxs_sli_api_t		emlxs_sli3_api;
588 
589 extern int			emlxs_handle_rcv_seq(emlxs_hba_t *hba,
590 					CHANNEL *cp, IOCBQ *iocbq);
591 extern void			emlxs_update_HBQ_index(emlxs_hba_t *hba,
592 					uint32_t hbq_id);
593 extern void			emlxs_hbq_free_all(emlxs_hba_t *hba,
594 					uint32_t hbq_id);
595 
596 /* Module emlxs_sli4.c  External Routine Declarations */
597 extern int 			emlxs_sli4_unreg_all_rpi_by_port(
598 				    emlxs_port_t *port);
599 extern emlxs_sli_api_t		emlxs_sli4_api;
600 
601 extern FCFIobj_t		*emlxs_sli4_assign_fcfi(emlxs_hba_t *hba,
602 					FCF_RECORD_t *fcfrec);
603 extern void			emlxs_data_dump(emlxs_hba_t *hba, char *str,
604 					uint32_t *data, int cnt, int err);
605 extern void			emlxs_ue_dump(emlxs_hba_t *hba, char *str);
606 
607 extern RPIobj_t 		*emlxs_sli4_find_rpi(emlxs_hba_t *hba,
608 					uint16_t rpi);
609 extern XRIobj_t			*emlxs_sli4_find_xri(emlxs_hba_t *hba,
610 					uint16_t xri);
611 
612 extern RPIobj_t 		*emlxs_sli4_alloc_rpi(emlxs_port_t *port);
613 
614 extern void			emlxs_sli4_free_rpi(emlxs_hba_t *hba,
615 					RPIobj_t *xp);
616 extern VFIobj_t			*emlxs_sli4_alloc_vfi(emlxs_hba_t *hba,
617 					FCFIobj_t *fp);
618 extern void			emlxs_sli4_free_vfi(emlxs_hba_t *hba,
619 					VFIobj_t *xp);
620 extern void			emlxs_sli4_free_fcfi(emlxs_hba_t *hba,
621 					FCFIobj_t *xp);
622 extern void			emlxs_sli4_free_xri(emlxs_hba_t *hba,
623 					emlxs_buf_t *sbp, XRIobj_t *xp);
624 extern FCFIobj_t		*emlxs_sli4_bind_fcfi(emlxs_hba_t *hba);
625 
626 extern uint32_t			emlxs_sli4_unreserve_xri(emlxs_hba_t *hba,
627 					uint16_t xri);
628 
629 /* Module emlxs_diag.c  External Routine Declarations */
630 extern uint32_t			emlxs_diag_post_run(emlxs_hba_t *hba);
631 extern uint32_t			emlxs_diag_biu_run(emlxs_hba_t *hba,
632 					uint32_t pattern);
633 extern uint32_t			emlxs_diag_pattern[256];
634 extern uint32_t			emlxs_diag_echo_run(emlxs_port_t *port,
635 					uint32_t did, uint32_t pattern);
636 
637 /* Module emlxs_download.c External Routine Declarations */
638 extern int32_t			emlxs_fw_download(emlxs_hba_t *hba,
639 					caddr_t buffer, uint32_t len,
640 					uint32_t offline);
641 extern uint32_t			emlxs_get_max_sram(emlxs_hba_t *hba,
642 					uint32_t *MaxRbusSize,
643 					uint32_t *MaxIbusSize);
644 extern uint32_t			emlxs_get_load_list(emlxs_hba_t *hba,
645 					PROG_ID *load_list);
646 extern uint32_t			emlxs_read_wakeup_parms(emlxs_hba_t *hba,
647 					PWAKE_UP_PARMS WakeUpParms,
648 					uint32_t verbose);
649 extern int32_t			emlxs_cfl_download(emlxs_hba_t *hba,
650 					uint32_t region, caddr_t buffer,
651 					uint32_t len);
652 
653 extern int32_t			emlxs_boot_code_disable(emlxs_hba_t *hba);
654 extern int32_t			emlxs_boot_code_enable(emlxs_hba_t *hba);
655 extern int32_t			emlxs_boot_code_state(emlxs_hba_t *hba);
656 
657 extern int32_t			emlxs_sli4_read_fw_version(emlxs_hba_t *hba,
658 					emlxs_firmware_t *fw);
659 
660 /* Module emlxs_fcp.c External Routine Declarations */
661 extern int			emlxs_power_up(emlxs_hba_t *hba);
662 extern int			emlxs_power_down(emlxs_hba_t *hba);
663 extern int			emlxs_reset_link(emlxs_hba_t *hba,
664 					uint32_t linkup, uint32_t wait);
665 extern emlxs_buf_t		*emlxs_unregister_pkt(CHANNEL *cp,
666 					uint16_t iotag, uint32_t forced);
667 extern uint16_t			emlxs_register_pkt(CHANNEL *cp,
668 					emlxs_buf_t *sbp);
669 
670 extern IOCBQ			*emlxs_create_abort_xri_cn(emlxs_port_t *port,
671 					NODELIST *ndlp, uint16_t iotag,
672 					CHANNEL *cp, uint8_t class,
673 					int32_t flag);
674 extern IOCBQ			*emlxs_create_close_xri_cn(emlxs_port_t *port,
675 					NODELIST *ndlp, uint16_t iotag,
676 					CHANNEL *cp);
677 extern IOCBQ			*emlxs_create_abort_xri_cx(emlxs_port_t *port,
678 					NODELIST *ndlp, uint16_t xid,
679 					CHANNEL *cp, uint8_t class,
680 					int32_t flag);
681 extern IOCBQ			*emlxs_create_close_xri_cx(emlxs_port_t *port,
682 					NODELIST *ndlp, uint16_t xid,
683 					CHANNEL *cp);
684 extern void			emlxs_abort_ct_exchange(emlxs_hba_t *hba,
685 					emlxs_port_t *port, uint32_t rxid);
686 extern void			emlxs_abort_els_exchange(emlxs_hba_t *hba,
687 					emlxs_port_t *port, uint32_t rxid);
688 extern void			emlxs_abort_fct_exchange(emlxs_hba_t *hba,
689 					emlxs_port_t *port, uint32_t rxid);
690 extern emlxs_buf_t		*emlxs_chipq_get(CHANNEL *cp, uint16_t iotag);
691 extern void			emlxs_chipq_put(CHANNEL *cp, emlxs_buf_t *sbp);
692 extern uint32_t			emlxs_chipq_node_flush(emlxs_port_t *port,
693 					CHANNEL *cp, NODELIST *ndlp,
694 					emlxs_buf_t *fpkt);
695 extern uint32_t			emlxs_chipq_lun_flush(emlxs_port_t *port,
696 					NODELIST *ndlp, uint32_t lun,
697 					emlxs_buf_t *fpkt);
698 extern uint32_t			emlxs_chipq_node_check(emlxs_port_t *port,
699 					CHANNEL *cp, NODELIST *ndlp);
700 
701 extern IOCBQ			*emlxs_tx_get(CHANNEL *cp, uint32_t lock);
702 extern void			emlxs_tx_put(IOCBQ *iocbq, uint32_t lock);
703 extern void			emlxs_tx_move(NODELIST *ndlp, CHANNEL *from,
704 					CHANNEL *to, uint32_t cmd,
705 					emlxs_buf_t *fpkt, uint32_t lock);
706 
707 extern uint32_t			emlxs_tx_node_check(emlxs_port_t *port,
708 					NODELIST *ndlp, CHANNEL *cp);
709 extern uint32_t			emlxs_tx_node_flush(emlxs_port_t *port,
710 					NODELIST *ndlp, CHANNEL *cp,
711 					uint32_t shutdown, emlxs_buf_t *fpkt);
712 extern uint32_t			emlxs_tx_lun_flush(emlxs_port_t *port,
713 					NODELIST *ndlp, uint32_t lun,
714 					emlxs_buf_t *fpkt);
715 extern uint32_t			emlxs_tx_channel_flush(emlxs_hba_t *hba,
716 					CHANNEL *cp, emlxs_buf_t *fpkt);
717 
718 extern void			emlxs_linkdown(emlxs_hba_t *hba);
719 extern void			emlxs_linkup(emlxs_hba_t *hba);
720 extern void			emlxs_port_online(emlxs_port_t *port);
721 extern int32_t			emlxs_port_offline(emlxs_port_t *port,
722 					uint32_t scope);
723 extern void			emlxs_ffcleanup(emlxs_hba_t *hba);
724 extern int32_t			emlxs_offline(emlxs_hba_t *hba);
725 extern int32_t			emlxs_online(emlxs_hba_t *hba);
726 extern int32_t			emlxs_post_buffer(emlxs_hba_t *hba,
727 					RING *rp, int16_t cnt);
728 extern void			emlxs_ff_start(emlxs_hba_t *hba);
729 extern void			emlxs_handle_fcp_event(emlxs_hba_t *hba,
730 					CHANNEL *rp, IOCBQ *temp);
731 extern int			emlxs_fct_handle_abort(emlxs_hba_t *hba,
732 					CHANNEL *rp, IOCBQ *iocbq);
733 
734 /* Module emlxs_thread.c External Routine Declarations */
735 extern void			emlxs_taskq_destroy(emlxs_taskq_t *taskq);
736 extern void			emlxs_taskq_create(emlxs_hba_t *hba,
737 					emlxs_taskq_t *taskq);
738 extern uint32_t			emlxs_taskq_dispatch(emlxs_taskq_t *taskq,
739 					void (*func) (), void *arg);
740 extern void			emlxs_thread_create(emlxs_hba_t *hba,
741 					emlxs_thread_t *ethread);
742 extern void			emlxs_thread_destroy(emlxs_thread_t *ethread);
743 extern void			emlxs_thread_trigger1(emlxs_thread_t *ethread,
744 					void (*func) ());
745 extern void			emlxs_thread_trigger2(emlxs_thread_t *ethread,
746 					void (*func) (), CHANNEL *cp);
747 extern void			emlxs_thread_spawn(emlxs_hba_t *hba,
748 					void (*func) (), void *arg1,
749 					void *arg2);
750 extern void			emlxs_thread_spawn_create(emlxs_hba_t *hba);
751 extern void			emlxs_thread_spawn_destroy(emlxs_hba_t *hba);
752 
753 /* Module emlxs_dfc.c External Routine Declarations */
754 extern int32_t			emlxs_dfc_manage(emlxs_hba_t *hba, void *dfc,
755 					int32_t mode);
756 extern int32_t			emlxs_dfc_handle_event(emlxs_hba_t *hba,
757 					CHANNEL *cp, IOCBQ *temp);
758 extern int			emlxs_dfc_handle_unsol_req(emlxs_port_t *port,
759 					CHANNEL *cp, IOCBQ *iocbq,
760 					MATCHMAP *mp, uint32_t size);
761 extern void			emlxs_fcoe_attention_thread(emlxs_hba_t *hba,
762 					void *arg1, void *arg2);
763 extern uint32_t		emlxs_set_hba_mode(emlxs_hba_t *hba, uint32_t mode);
764 extern uint32_t		emlxs_get_dump_region(emlxs_hba_t *hba, uint32_t region,
765 			    uint8_t *buffer, uint32_t *psize);
766 extern int32_t		emlxs_send_menlo_cmd(emlxs_hba_t *hba, uint8_t *cmd_buf,
767 			    uint32_t cmd_size, uint8_t *rsp_buf,
768 			    uint32_t *rsp_size);
769 
770 #ifdef SFCT_SUPPORT
771 /* Module emlxs_fct.c External Routine Declarations */
772 extern void			emlxs_fct_link_down(emlxs_port_t *port);
773 extern void			emlxs_fct_link_up(emlxs_port_t *port);
774 extern void			emlxs_fct_init(emlxs_hba_t *hba);
775 extern void			emlxs_fct_detach(emlxs_hba_t *hba);
776 extern int			emlxs_fct_handle_unsol_els(emlxs_port_t *port,
777 					CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp,
778 					uint32_t size);
779 extern int			emlxs_fct_handle_unsol_req(emlxs_port_t *port,
780 					CHANNEL *cp, IOCBQ *iocbq, MATCHMAP *mp,
781 					uint32_t size);
782 extern int			emlxs_fct_handle_fcp_event(emlxs_hba_t *hba,
783 					CHANNEL *cp, IOCBQ *iocbq);
784 extern void			emlxs_fct_bind_port(emlxs_port_t *port);
785 extern void			emlxs_fct_unbind_port(emlxs_port_t *port);
786 extern void			emlxs_fct_unsol_callback(emlxs_port_t *port,
787 					fct_cmd_t *fct_cmd);
788 extern void			emlxs_fct_attach(emlxs_hba_t *hba);
789 extern int			emlxs_fct_port_shutdown(emlxs_port_t *port);
790 extern int			emlxs_fct_port_initialize(emlxs_port_t *port);
791 
792 #ifdef MODSYM_SUPPORT
793 extern int			emlxs_fct_modopen();
794 extern void			emlxs_fct_modclose();
795 #endif /* MODSYM_SUPPORT */
796 
797 #ifdef FCT_IO_TRACE
798 extern void			emlxs_fct_io_trace(emlxs_port_t *,
799 					fct_cmd_t *, uint32_t);
800 #endif /* FCT_IO_TRACE */
801 #endif /* SFCT_SUPPORT */
802 
803 #ifdef DUMP_SUPPORT
804 /* Module emlxs_dump.c External Routine Declarations */
805 extern uint32_t		emlxs_dump_drv_event(emlxs_hba_t *hba);
806 extern uint32_t		emlxs_dump_user_event(emlxs_hba_t *hba);
807 extern uint32_t		emlxs_dump_temp_event(emlxs_hba_t *hba,
808 				uint32_t tempType, uint32_t temp);
809 extern void		emlxs_dump_drv_thread(emlxs_hba_t *hba,
810 				void *arg1, void *arg2);
811 extern void		emlxs_dump_user_thread(emlxs_hba_t *hba,
812 				void *arg1, void *arg2);
813 extern void		emlxs_dump_temp_thread(emlxs_hba_t *hba,
814 				void *arg1, void *arg2);
815 extern uint32_t		emlxs_ftell(emlxs_file_t *fp);
816 extern uint32_t		emlxs_get_dump(emlxs_hba_t *hba, uint8_t *buffer,
817 			    uint32_t *buflen);
818 extern void		emlxs_dump_wait(emlxs_hba_t *hba);
819 extern void		emlxs_dump(emlxs_hba_t *hba, uint32_t type,
820 			    uint32_t temp_type, uint32_t temp);
821 
822 extern emlxs_file_t	*emlxs_fopen(emlxs_hba_t *hba, uint32_t file_type);
823 extern void		emlxs_fflush(emlxs_file_t *fp);
824 extern uint32_t		emlxs_fclose(emlxs_file_t *fp);
825 extern uint32_t		emlxs_dump_word_dmpfile(emlxs_file_t *fpDmpFile,
826 				uint8_t *pBuffer, uint32_t bufferLen,
827 				int fSwap);
828 #endif /* DUMP_SUPPORT */
829 
830 #ifdef	__cplusplus
831 }
832 #endif
833 
834 #endif	/* _EMLXS_EXTERN_H */
835