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