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