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_EXTERN_H
29 #define	_EMLXS_EXTERN_H
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 #include <emlxs_hbaapi.h>
36 
37 extern void *emlxs_soft_state;
38 extern uint32_t emlxs_instance[MAX_FC_BRDS];
39 extern uint32_t emlxs_instance_count;
40 extern char emlxs_revision[32];
41 extern char emlxs_version[32];
42 extern char emlxs_name[64];
43 extern char emlxs_label[64];
44 
45 extern emlxs_device_t emlxs_device;
46 extern uint32_t emlxs_instance[MAX_FC_BRDS];
47 extern uint32_t emlxs_instance_count;
48 
49 extern ddi_device_acc_attr_t emlxs_data_acc_attr;
50 extern ddi_device_acc_attr_t emlxs_dev_acc_attr;
51 extern ddi_dma_lim_t emlxs_dma_lim;
52 extern uint32_t emlxs_diag_state;
53 extern emlxs_config_t emlxs_cfg[];
54 extern ddi_dma_attr_t emlxs_dma_attr;
55 extern ddi_dma_attr_t emlxs_dma_attr_ro;
56 extern ddi_dma_attr_t emlxs_dma_attr_fcip_rsp;
57 extern ddi_dma_attr_t emlxs_dma_attr_1sg;
58 
59 /* Module emlxs_msg.c External Routine Declarations */
60 extern void emlxs_msg_printf(emlxs_port_t *port, const uint32_t fileno,
61 	const uint32_t line, void *bp, uint32_t size, emlxs_msg_t *msg,
62 	const char *fmt, ...);
63 extern uint32_t emlxs_msg_log_create(emlxs_hba_t *hba);
64 extern uint32_t emlxs_msg_log_destroy(emlxs_hba_t *hba);
65 extern uint32_t emlxs_msg_log_get(emlxs_hba_t *hba, emlxs_log_req_t *req,
66 	emlxs_log_resp_t *resp);
67 extern void emlxs_log_dump_event(emlxs_port_t *port, uint8_t *buffer,
68 	uint32_t size);
69 extern void emlxs_log_link_event(emlxs_port_t *port);
70 extern void emlxs_log_ct_event(emlxs_port_t *port, uint8_t *payload,
71 	uint32_t size, uint32_t rxid);
72 extern void emlxs_log_rscn_event(emlxs_port_t *port, uint8_t *payload,
73 	uint32_t size);
74 extern uint32_t emlxs_get_dfc_event(emlxs_port_t *port,
75 	emlxs_dfc_event_t *dfc_event, uint32_t sleep);
76 extern uint32_t emlxs_kill_dfc_event(emlxs_port_t *port,
77 	emlxs_dfc_event_t *dfc_event);
78 extern uint32_t emlxs_get_dfc_eventinfo(emlxs_port_t *port,
79 	HBA_EVENTINFO *eventinfo, uint32_t *eventcount, uint32_t *missed);
80 extern void emlxs_log_temp_event(emlxs_port_t *port, uint32_t type,
81 	uint32_t temp);
82 extern void emlxs_log_fcoe_event(emlxs_port_t *port,
83 	menlo_init_rsp_t *init_rsp);
84 
85 /* Module emlxs_solaris.c External Routine Declarations */
86 extern int32_t emlxs_pkt_abort(opaque_t fca_port_handle, fc_packet_t *pkt,
87 	int32_t sleep);
88 extern char *emlxs_state_xlate(uint8_t state);
89 extern char *emlxs_error_xlate(uint8_t errno);
90 extern void emlxs_mem_free(emlxs_hba_t *hba, MBUF_INFO *buf_info);
91 extern uint8_t *emlxs_mem_alloc(emlxs_hba_t *hba, MBUF_INFO *buf_info);
92 extern int emlxs_mapmem(emlxs_hba_t *hba);
93 extern void emlxs_unmapmem(emlxs_hba_t *hba);
94 extern fc_unsol_buf_t *emlxs_ub_find(emlxs_port_t *port, uint32_t token);
95 extern fc_unsol_buf_t *emlxs_ub_get(emlxs_port_t *port, uint32_t size,
96 	uint32_t type, uint32_t resv);
97 extern int32_t emlxs_log_printf(int32_t f, int32_t type, int32_t num,
98 	int32_t brdno, const char *fmt, ...);
99 extern void emlxs_set_pkt_state(emlxs_buf_t *sbp, uint32_t iostat,
100 	uint8_t localstat, uint32_t lock);
101 extern char *emlxs_elscmd_xlate(uint32_t cmd);
102 extern char *emlxs_ctcmd_xlate(uint32_t cmd);
103 extern char *emlxs_rmcmd_xlate(uint32_t cmd);
104 extern char *emlxs_wwn_xlate(char *buffer, uint8_t *wwn);
105 extern int32_t emlxs_transport(opaque_t fca_port_handle, fc_packet_t *pkt);
106 extern int32_t emlxs_pkt_uninit(opaque_t fca_port_handle, fc_packet_t *pkt);
107 extern int32_t emlxs_pkt_init(opaque_t fca_port_handle, fc_packet_t *pkt,
108 	int32_t sleep);
109 extern void emlxs_pkt_complete(emlxs_buf_t *sbp, uint32_t iostat,
110 	uint8_t localstat, uint32_t doneq);
111 extern uint32_t emlxs_get_instance(int32_t ddiinst);
112 extern char *emlxs_mscmd_xlate(uint16_t cmd);
113 extern int32_t emlxs_reset(opaque_t fca_port_handle, uint32_t cmd);
114 extern void emlxs_swap_service_params(SERV_PARM *sp);
115 extern void emlxs_swap_fcp_pkt(emlxs_buf_t *sbp);
116 extern void emlxs_swap_ct_pkt(emlxs_buf_t *sbp);
117 extern void emlxs_swap_els_pkt(emlxs_buf_t *sbp);
118 extern int emlxs_ub_release(opaque_t fca_port_handle, uint32_t count,
119 	uint64_t tokens[]);
120 extern void emlxs_swap_els_ub(fc_unsol_buf_t *ubp);
121 extern void emlxs_unswap_pkt(emlxs_buf_t *sbp);
122 extern uint32_t emlxs_get_key(emlxs_hba_t *hba, MAILBOX *mb);
123 extern int emlxs_pm_busy_component(dev_info_t *dip);
124 extern int emlxs_pm_idle_component(dev_info_t *dip);
125 extern void emlxs_pm_idle_timer(dev_info_t *dip);
126 extern void emlxs_shutdown_thread(void *arg);
127 extern uint32_t emlxs_set_parm(emlxs_hba_t *hba, uint32_t index,
128 	uint32_t new_value);
129 extern void emlxs_ub_destroy(emlxs_port_t *port, emlxs_unsol_buf_t *pool);
130 extern void emlxs_ub_callback(emlxs_port_t *port, fc_unsol_buf_t *ubp);
131 extern void emlxs_ub_flush(emlxs_port_t *port);
132 extern uint32_t emlxs_check_parm(emlxs_hba_t *hba, uint32_t index,
133 	uint32_t new_value);
134 extern int32_t emlxs_port_manage(opaque_t fca_port_handle, fc_fca_pm_t *pm);
135 extern void emlxs_port_init(emlxs_port_t *port);
136 extern void emlxs_get_fcode_version(emlxs_hba_t *hba);
137 
138 #ifdef MENLO_SUPPORT
139 extern char *emlxs_menlo_cmd_xlate(uint32_t cmd);
140 extern char *emlxs_menlo_rsp_xlate(uint32_t rsp);
141 #endif	/* MENLO_SUPPORT */
142 
143 /* Module emlxs_pkt.c External Routine Declarations */
144 extern int32_t emlxs_pkt_send(fc_packet_t *pkt, uint32_t now);
145 extern void emlxs_pkt_free(fc_packet_t *pkt);
146 extern void emlxs_pkt_callback(fc_packet_t *pkt);
147 extern fc_packet_t *emlxs_pkt_alloc(emlxs_port_t *port, uint32_t cmdlen,
148 	uint32_t rsplen, uint32_t datalen, int32_t sleep);
149 
150 /* Module emlxs_clock.c External Routine Declarations */
151 extern void emlxs_timer_start(emlxs_hba_t *hba);
152 extern void emlxs_timer_stop(emlxs_hba_t *hba);
153 extern void emlxs_link_timeout(emlxs_hba_t *hba);
154 extern clock_t emlxs_timeout(emlxs_hba_t *hba, uint32_t timeout);
155 
156 /* Module emlxs_dhchap.c External Routine Declarations */
157 #ifdef DHCHAP_SUPPORT
158 extern int emlxs_dhchap_state_machine(emlxs_port_t *port, RING *ring,
159 	IOCBQ *iocbq, MATCHMAP *mp, NODELIST *node, int event);
160 
161 extern void emlxs_dhc_attach(emlxs_hba_t *hba);
162 extern void emlxs_dhc_detach(emlxs_hba_t *hba);
163 extern void emlxs_dhc_authrsp_timeout(emlxs_port_t *port, void *node,
164 	void *null);
165 extern void emlxs_dhc_reauth_timeout(emlxs_port_t *port, void *newtimeout,
166 	void *node);
167 extern void emlxs_dhc_auth_stop(emlxs_port_t *port, emlxs_node_t *node);
168 extern int emlxs_dhc_auth_start(emlxs_port_t *port, emlxs_node_t *node,
169 	uint8_t *sbp, uint8_t *ubp);
170 extern void emlxs_dhc_init_sp(emlxs_port_t *port, uint32_t did, SERV_PARM *sp,
171 	char *msg);
172 extern uint32_t emlxs_dhc_verify_login(emlxs_port_t *port, uint32_t sid,
173 	SERV_PARM *sp);
174 extern void emlxs_dhc_status(emlxs_port_t *port, emlxs_node_t *ndlp,
175 	uint32_t reason, uint32_t explaination);
176 extern void emlxs_dhc_state(emlxs_port_t *port, emlxs_node_t *ndlp,
177 	uint32_t state, uint32_t reason, uint32_t explaination);
178 extern uint32_t emlxs_dhc_init_auth(emlxs_hba_t *hba, uint8_t *lwwpn,
179 	uint8_t *rwwpn);
180 extern uint32_t emlxs_dhc_get_auth_cfg(emlxs_hba_t *hba,
181 	dfc_fcsp_config_t *fcsp_cfg);
182 extern uint32_t emlxs_dhc_get_auth_key(emlxs_hba_t *hba,
183 	dfc_auth_password_t *dfc_auth_pwd);
184 extern uint32_t emlxs_dhc_add_auth_cfg(emlxs_hba_t *hba,
185 	dfc_fcsp_config_t *fcsp_cfg, dfc_password_t *dfc_pwd);
186 extern uint32_t emlxs_dhc_delete_auth_cfg(emlxs_hba_t *hba,
187 	dfc_fcsp_config_t *fcsp_cfg, dfc_password_t *dfc_pwd);
188 extern uint32_t emlxs_dhc_set_auth_key(emlxs_hba_t *hba,
189 	dfc_auth_password_t *dfc_pwd);
190 extern uint32_t emlxs_dhc_get_auth_status(emlxs_hba_t *hba,
191 	dfc_auth_status_t *fcsp_status);
192 extern uint32_t emlxs_dhc_get_auth_cfg_table(emlxs_hba_t *hba,
193 	dfc_fcsp_config_t *fcsp_cfg);
194 extern uint32_t emlxs_dhc_get_auth_key_table(emlxs_hba_t *hba,
195 	dfc_auth_password_t *auth_pwd);
196 #endif	/* DHCHAP_SUPPORT */
197 
198 /* Module emlxs_node.c External Routine Declarations */
199 extern void emlxs_node_open(emlxs_port_t *port, NODELIST *ndlp,
200 	uint32_t ringno);
201 extern void emlxs_node_close(emlxs_port_t *port, NODELIST *ndlp,
202 	uint32_t ringno, uint32_t tics);
203 extern NODELIST *emlxs_node_find_did(emlxs_port_t *port, uint32_t did);
204 extern NODELIST *emlxs_node_find_rpi(emlxs_port_t *port, uint32_t rpi);
205 extern void emlxs_node_destroy_all(emlxs_port_t *port);
206 extern NODELIST *emlxs_node_find_mac(emlxs_port_t *port, uint8_t *mac);
207 extern void emlxs_node_add(emlxs_port_t *port, NODELIST *ndlp);
208 extern void emlxs_node_rm(emlxs_port_t *port, NODELIST *ndlp);
209 extern NODELIST *emlxs_node_find_wwpn(emlxs_port_t *port, uint8_t *wwpn);
210 extern NODELIST *emlxs_node_find_index(emlxs_port_t *port, uint32_t index,
211 	uint32_t nports_only);
212 extern uint32_t emlxs_nport_count(emlxs_port_t *port);
213 
214 /* Module emlxs_els.c External Routine Declarations */
215 extern int32_t emlxs_els_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
216 extern int32_t emlxs_els_handle_unsol_req(emlxs_port_t *port, RING *rp,
217 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
218 extern uint32_t emlxs_generate_rscn(emlxs_port_t *port, uint32_t d_id);
219 extern int32_t emlxs_ct_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
220 extern int32_t emlxs_ct_handle_unsol_req(emlxs_port_t *port, RING *rp,
221 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
222 extern int32_t emlxs_els_reply(emlxs_port_t *port, IOCBQ *iocbq,
223 	uint32_t type, uint32_t type2, uint32_t reason, uint32_t explain);
224 extern void emlxs_send_logo(emlxs_port_t *port, uint32_t d_id);
225 extern void emlxs_reset_link_thread(void *arg);
226 extern uint32_t emlxs_process_unsol_flogi(emlxs_port_t *port, IOCBQ *iocbq,
227 	MATCHMAP *mp, uint32_t size, char *buffer);
228 extern uint32_t emlxs_process_unsol_plogi(emlxs_port_t *port, IOCBQ *iocbq,
229 	MATCHMAP *mp, uint32_t size, char *buffer);
230 extern uint32_t emlxs_ub_send_login_acc(emlxs_port_t *port, fc_unsol_buf_t *bp);
231 
232 #ifdef MENLO_SUPPORT
233 extern int emlxs_menlo_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq);
234 #endif	/* MENLO_SUPPORT */
235 
236 /* Module emlxs_ip.c External Routine Declarations */
237 extern int32_t emlxs_ip_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
238 extern int emlxs_ip_handle_rcv_seq_list(emlxs_hba_t *hba, RING *rp,
239 	IOCBQ *saveq);
240 extern int emlxs_ip_handle_unsol_req(emlxs_port_t *port, RING *rp,
241 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
242 extern int emlxs_create_xri(emlxs_port_t *port, RING *rp, NODELIST *ndlp);
243 extern int emlxs_handle_create_xri(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
244 extern int emlxs_handle_xri_aborted(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
245 
246 /* Module emlxs_mbox.c External Routine Declarations */
247 extern void emlxs_mb_config_msi(emlxs_hba_t *hba, MAILBOX *mb,
248 	uint32_t *intr_map, uint32_t intr_count);
249 extern void emlxs_mb_config_msix(emlxs_hba_t *hba, MAILBOX *mb,
250 	uint32_t *intr_map, uint32_t intr_count);
251 extern void emlxs_mb_read_lnk_stat(emlxs_hba_t *hba, MAILBOX *mb);
252 extern void emlxs_mb_config_link(emlxs_hba_t *hba, MAILBOX *mb);
253 extern uint32_t emlxs_mb_config_port(emlxs_hba_t *hba, MAILBOX *mb,
254 	uint32_t sli_mode, uint32_t hbainit);
255 extern void emlxs_mb_config_ring(emlxs_hba_t *hba, int32_t ring, MAILBOX *mb);
256 extern void emlxs_mb_init_link(emlxs_hba_t *hba, MAILBOX *mb,
257 	uint32_t topology, uint32_t linkspeed);
258 extern void emlxs_mb_down_link(emlxs_hba_t *hba, MAILBOX *mb);
259 extern uint32_t emlxs_mb_read_la(emlxs_hba_t *hba, MAILBOX *mb);
260 extern void emlxs_mb_read_nv(emlxs_hba_t *hba, MAILBOX *mb);
261 extern void emlxs_mb_read_rev(emlxs_hba_t *hba, MAILBOX *mb, uint32_t v3);
262 extern uint32_t emlxs_mb_read_rpi(emlxs_hba_t *hba, uint32_t rpi,
263 	MAILBOX *mb, uint32_t flg);
264 extern uint32_t emlxs_mb_read_xri(emlxs_hba_t *hba, uint32_t xri,
265 	MAILBOX *mb, uint32_t flg);
266 extern uint32_t emlxs_mb_read_sparam(emlxs_hba_t *hba, MAILBOX *mb);
267 extern uint32_t emlxs_mb_reg_did(emlxs_port_t *port, uint32_t did,
268 	SERV_PARM *param, emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq);
269 extern void emlxs_disable_tc(emlxs_hba_t *hba, MAILBOX *mb);
270 extern uint32_t emlxs_mb_run_biu_diag(emlxs_hba_t *hba, MAILBOX *mb,
271 	uint64_t in, uint64_t out);
272 extern uint32_t emlxs_handle_mb_event(emlxs_hba_t *hba);
273 extern uint32_t emlxs_mb_unreg_rpi(emlxs_port_t *port, uint32_t rpi,
274 	emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq);
275 extern uint32_t emlxs_mb_unreg_did(emlxs_port_t *port, uint32_t did,
276 	emlxs_buf_t *sbp, fc_unsol_buf_t *ubp, IOCBQ *iocbq);
277 extern void emlxs_mb_dump_vpd(emlxs_hba_t *hba, MAILBOX *mb, uint32_t offset);
278 extern void emlxs_mb_config_farp(emlxs_hba_t *hba, MAILBOX *mb);
279 extern void emlxs_mb_read_config(emlxs_hba_t *hba, MAILBOX *mb);
280 extern void emlxs_mb_put(emlxs_hba_t *hba, MAILBOXQ *mbq);
281 extern MAILBOXQ *emlxs_mb_get(emlxs_hba_t *hba);
282 extern uint32_t emlxs_mb_issue_cmd(emlxs_hba_t *hba, MAILBOX *mb,
283 	int32_t flag, uint32_t timeout);
284 extern void emlxs_mb_clear_la(emlxs_hba_t *hba, MAILBOX *mb);
285 extern void emlxs_mb_set_var(emlxs_hba_t *hba, MAILBOX *mb, uint32_t addr,
286 	uint32_t value);
287 extern void emlxs_mb_reset_ring(emlxs_hba_t *hba, MAILBOX *mb, uint32_t ringno);
288 extern char *emlxs_mb_cmd_xlate(uint8_t command);
289 extern void emlxs_mb_read_status(emlxs_hba_t *hba, MAILBOX *mb);
290 extern uint32_t emlxs_mb_reg_vpi(emlxs_port_t *port);
291 extern uint32_t emlxs_mb_unreg_vpi(emlxs_port_t *port);
292 extern void emlxs_mb_fini(emlxs_hba_t *hba, MAILBOX *mb, uint32_t mbxStatus);
293 extern void emlxs_mb_heartbeat(emlxs_hba_t *hba, MAILBOX *mb);
294 extern void emlxs_mb_async_event(emlxs_hba_t *hba, MAILBOX *mb);
295 extern int32_t emlxs_mb_check_sparm(emlxs_hba_t *hba, SERV_PARM *nsp);
296 
297 #ifdef SLI3_SUPPORT
298 extern void emlxs_mb_config_hbq(emlxs_hba_t *hba, MAILBOX *mb, int hbq_id);
299 #endif	/* SLI3_SUPPORT */
300 
301 /* Module emlxs_mem.c External Routine Declarations */
302 extern MATCHMAP *emlxs_mem_get_vaddr(emlxs_hba_t *hba, RING *rp, uint64_t mbp);
303 extern uint8_t *emlxs_mem_get(emlxs_hba_t *hba, uint32_t seg);
304 extern uint8_t *emlxs_mem_put(emlxs_hba_t *hba, uint32_t seg, uint8_t *bp);
305 extern int32_t emlxs_mem_free_buffer(emlxs_hba_t *hba);
306 extern int32_t emlxs_mem_alloc_buffer(emlxs_hba_t *hba);
307 extern void emlxs_mem_map_vaddr(emlxs_hba_t *hba, RING *rp, MATCHMAP *mp,
308 	uint32_t *haddr, uint32_t *laddr);
309 extern uint8_t *emlxs_mem_buf_alloc(emlxs_hba_t *hba);
310 extern uint8_t *emlxs_mem_buf_free(emlxs_hba_t *hba, uint8_t *bp);
311 #ifdef SLI3_SUPPORT
312 extern void emlxs_update_HBQ_index(emlxs_hba_t *hba, uint32_t hbq_id);
313 extern uint32_t emlxs_hbq_setup(emlxs_hba_t *hba, uint32_t hbq_id);
314 #endif	/* SLI3_SUPPORT */
315 
316 /* Module emlxs_hba.c  External Routine Declarations */
317 extern uint32_t emlxs_interlock(emlxs_hba_t *hba);
318 extern uint32_t emlxs_hba_reset(emlxs_hba_t *hba, uint32_t restart,
319 	uint32_t skip_post);
320 extern int32_t emlxs_ffinit(emlxs_hba_t *hba);
321 extern void emlxs_issue_iocb_cmd(emlxs_hba_t *hba, RING *rp, IOCBQ *iocb_cmd);
322 extern void emlxs_decode_firmware_rev(emlxs_hba_t *hba, emlxs_vpd_t *vp);
323 extern void emlxs_poll_intr(emlxs_hba_t *hba, uint32_t att_bit);
324 extern uint32_t emlxs_init_adapter_info(emlxs_hba_t *hba);
325 extern uint32_t emlxs_strtol(char *str, uint32_t base);
326 extern uint64_t emlxs_strtoll(char *str, uint32_t base);
327 extern void emlxs_decode_version(uint32_t version, char *buffer);
328 extern char *emlxs_ffstate_xlate(uint32_t new_state);
329 extern char *emlxs_ring_xlate(uint32_t ringno);
330 extern uint32_t emlxs_reset_ring(emlxs_hba_t *hba, uint32_t ringno);
331 extern void emlxs_proc_ring(emlxs_hba_t *hba, RING *rp, void *arg2);
332 extern void emlxs_pcix_mxr_update(emlxs_hba_t *hba, uint32_t verbose);
333 extern void emlxs_restart_thread(void *arg);
334 extern void emlxs_handle_ff_error(emlxs_hba_t *hba);
335 
336 #ifdef MSI_SUPPORT
337 extern int32_t emlxs_msi_add(emlxs_hba_t *hba);
338 extern int32_t emlxs_msi_remove(emlxs_hba_t *hba);
339 extern int32_t emlxs_msi_init(emlxs_hba_t *hba, uint32_t max);
340 extern int32_t emlxs_msi_uninit(emlxs_hba_t *hba);
341 #endif	/* MSI_SUPPORT */
342 
343 extern int32_t emlxs_intx_add(emlxs_hba_t *hba);
344 extern int32_t emlxs_intx_remove(emlxs_hba_t *hba);
345 extern int32_t emlxs_intx_init(emlxs_hba_t *hba, uint32_t max);
346 extern int32_t emlxs_intx_uninit(emlxs_hba_t *hba);
347 
348 
349 /* Module emlxs_diag.c  External Routine Declarations */
350 extern uint32_t emlxs_diag_post_run(emlxs_hba_t *hba);
351 extern uint32_t emlxs_diag_biu_run(emlxs_hba_t *hba, uint32_t pattern);
352 extern uint32_t emlxs_diag_pattern[256];
353 extern uint32_t emlxs_diag_echo_run(emlxs_port_t *port, uint32_t did,
354 	uint32_t pattern);
355 extern uint32_t emlxs_core_size(emlxs_hba_t *hba);
356 extern uint32_t emlxs_core_dump(emlxs_hba_t *hba, char *buffer, uint32_t size);
357 
358 /* Module emlxs_download.c External Routine Declarations */
359 extern int32_t emlxs_fw_download(emlxs_hba_t *hba, caddr_t buffer,
360 	uint32_t len, uint32_t offline);
361 extern uint32_t emlxs_get_max_sram(emlxs_hba_t *hba, uint32_t *MaxRbusSize,
362 	uint32_t *MaxIbusSize);
363 extern uint32_t emlxs_get_load_list(emlxs_hba_t *hba, PROG_ID *load_list);
364 extern uint32_t emlxs_read_wakeup_parms(emlxs_hba_t *hba,
365 	PWAKE_UP_PARMS WakeUpParms, uint32_t verbose);
366 extern int32_t emlxs_cfl_download(emlxs_hba_t *hba, uint32_t region,
367 	caddr_t buffer, uint32_t len);
368 
369 extern uint32_t emlxs_boot_code_disable(emlxs_hba_t *hba);
370 extern uint32_t emlxs_boot_code_enable(emlxs_hba_t *hba);
371 extern uint32_t emlxs_boot_code_state(emlxs_hba_t *hba);
372 
373 /* Module emlxs_fcp.c External Routine Declarations */
374 extern int emlxs_power_up(emlxs_hba_t *hba);
375 extern int emlxs_power_down(emlxs_hba_t *hba);
376 extern int emlxs_reset_link(emlxs_hba_t *hba, uint32_t linkup);
377 extern emlxs_buf_t *emlxs_unregister_pkt(RING *rp, uint16_t iotag,
378 	uint32_t forced);
379 extern uint16_t emlxs_register_pkt(RING *rp, emlxs_buf_t *sbp);
380 
381 extern IOCBQ *emlxs_create_abort_xri_cn(emlxs_port_t *port, NODELIST *ndlp,
382 	uint16_t iotag, RING *rp, uint8_t class, int32_t flag);
383 extern IOCBQ *emlxs_create_close_xri_cn(emlxs_port_t *port, NODELIST *ndlp,
384 	uint16_t iotag, RING *rp);
385 extern IOCBQ *emlxs_create_abort_xri_cx(emlxs_port_t *port, NODELIST *ndlp,
386 	uint16_t xid, RING *rp, uint8_t class, int32_t flag);
387 extern IOCBQ *emlxs_create_close_xri_cx(emlxs_port_t *port, NODELIST *ndlp,
388 	uint16_t xid, RING *rp);
389 
390 extern emlxs_buf_t *emlxs_chipq_get(RING *rp, uint16_t iotag);
391 extern void emlxs_chipq_put(RING *rp, emlxs_buf_t *sbp);
392 extern uint32_t emlxs_chipq_node_flush(emlxs_port_t *port, RING *rp,
393 	NODELIST *ndlp, emlxs_buf_t *fpkt);
394 extern uint32_t emlxs_chipq_lun_flush(emlxs_port_t *port, NODELIST *ndlp,
395 	uint32_t lun, emlxs_buf_t *fpkt);
396 extern uint32_t emlxs_chipq_node_check(emlxs_port_t *port, RING *ring,
397 	NODELIST *ndlp);
398 
399 extern IOCBQ *emlxs_tx_get(RING *rp, uint32_t lock);
400 extern void emlxs_tx_put(IOCBQ *iocbq, uint32_t lock);
401 extern uint32_t emlxs_tx_node_check(emlxs_port_t *port, NODELIST *ndlp,
402 	RING *ring);
403 extern uint32_t emlxs_tx_node_flush(emlxs_port_t *port, NODELIST *ndlp,
404 	RING *ring, uint32_t shutdown, emlxs_buf_t *fpkt);
405 extern uint32_t emlxs_tx_lun_flush(emlxs_port_t *port, NODELIST *ndlp,
406 	uint32_t lun, emlxs_buf_t *fpkt);
407 extern uint32_t emlxs_tx_ring_flush(emlxs_hba_t *hba, RING *rp,
408 	emlxs_buf_t *fpkt);
409 
410 extern void emlxs_linkdown(emlxs_hba_t *hba);
411 extern void emlxs_linkup(emlxs_hba_t *hba);
412 extern void emlxs_port_online(emlxs_port_t *port);
413 extern int32_t emlxs_port_offline(emlxs_port_t *port, uint32_t scope);
414 extern void emlxs_ffcleanup(emlxs_hba_t *hba);
415 extern int32_t emlxs_offline(emlxs_hba_t *hba);
416 extern int32_t emlxs_online(emlxs_hba_t *hba);
417 extern void emlxs_pcimem_bcopy(uint32_t *src, uint32_t *dest, uint32_t cnt);
418 extern int32_t emlxs_post_buffer(emlxs_hba_t *hba, RING *rp, int16_t cnt);
419 extern void emlxs_swap_bcopy(uint32_t *src, uint32_t *dest, uint32_t cnt);
420 extern void emlxs_ff_start(emlxs_hba_t *hba);
421 extern void emlxs_handle_fcp_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
422 
423 /* Module emlxs_thread.c External Routine Declarations */
424 extern void emlxs_taskq_destroy(emlxs_taskq_t *taskq);
425 extern void emlxs_taskq_create(emlxs_hba_t *hba, emlxs_taskq_t *taskq);
426 extern uint32_t emlxs_taskq_dispatch(emlxs_taskq_t *taskq,
427 	void (*func) (), void *arg);
428 extern void emlxs_thread_create(emlxs_hba_t *hba, emlxs_thread_t *ethread);
429 extern void emlxs_thread_destroy(emlxs_thread_t *ethread);
430 extern void emlxs_thread_trigger1(emlxs_thread_t *ethread, void (*func) ());
431 extern void emlxs_thread_trigger2(emlxs_thread_t *ethread,
432 	void (*func) (), RING *rp);
433 
434 /* Module emlxs_dfc.c External Routine Declarations */
435 extern int32_t emlxs_dfc_manage(emlxs_hba_t *hba, void *dfc, int32_t mode);
436 extern int32_t emlxs_dfc_handle_event(emlxs_hba_t *hba, RING *rp, IOCBQ *temp);
437 extern int emlxs_dfc_handle_unsol_req(emlxs_port_t *port, RING *rp,
438 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
439 extern void emlxs_fcoe_attention_thread(void *arg);
440 
441 
442 #ifdef SFCT_SUPPORT
443 /* Module emlxs_fct.c External Routine Declarations */
444 extern void emlxs_fct_link_down(emlxs_port_t *port);
445 extern void emlxs_fct_link_up(emlxs_port_t *port);
446 extern void emlxs_fct_init(emlxs_hba_t *hba);
447 extern void emlxs_fct_detach(emlxs_hba_t *hba);
448 extern int emlxs_fct_handle_unsol_els(emlxs_port_t *port, RING *rp,
449 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
450 extern int emlxs_fct_handle_unsol_req(emlxs_port_t *port, RING *rp,
451 	IOCBQ *iocbq, MATCHMAP *mp, uint32_t size);
452 extern int emlxs_fct_handle_fcp_event(emlxs_hba_t *hba, RING *rp, IOCBQ *iocbq);
453 extern void emlxs_fct_bind_port(emlxs_port_t *port);
454 extern void emlxs_fct_unbind_port(emlxs_port_t *port);
455 extern void emlxs_fct_unsol_callback(emlxs_port_t *port, fct_cmd_t *fct_cmd);
456 extern void emlxs_fct_attach(emlxs_hba_t *hba);
457 extern int emlxs_fct_port_shutdown(emlxs_port_t *port);
458 extern int emlxs_fct_port_initialize(emlxs_port_t *port);
459 
460 #ifdef MODSYM_SUPPORT
461 extern void emlxs_fct_modclose();
462 #endif	/* MODSYM_SUPPORT */
463 
464 #endif	/* SFCT_SUPPORT */
465 
466 #ifdef	__cplusplus
467 }
468 #endif
469 
470 #endif	/* _EMLXS_EXTERN_H */
471